ViargoOgreKinectTrackingCalibrationMetaphor::ViargoOgreKinectTrackingCalibrationMetaphor(const Ogre::Vector2& windowSize, int pattern, const Ogre::Vector4& offsets) 
	:_windowSize(windowSize)
	,_patternSize(pattern)
	,_offsets(offsets)
	,_markerSize(Ogre::Vector2(0.01f, 0.01f))
	,_calibrating(false)
	,_calibrated(false)
	,_pause(false)
	,_markerHoldsStill(false)
	,_calibrationProgress(0)
	,_currentPauseTime(0.0f)
	,_sensorId("")
	,_transformationMatrix(0)
{
	// Setup transformation matrix, try to load from file if exists
	_transformationMatrix = new cv::Mat(cv::Mat::eye(3, 4, CV_32FC1));

	_loadCalibrationData();
	loadTransformation("kinect_calibration.txt");

	// Create colored materials for markers from texture
	Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().create("kinecttrackingCalibrationRedMat","Essential"); 
	mat->getTechnique(0)->getPass(0)->createTextureUnitState("red.jpg");
	mat->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
	mat->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
	mat->getTechnique(0)->getPass(0)->setLightingEnabled(false);

	mat = Ogre::MaterialManager::getSingleton().create("kinecttrackingCalibrationGreenMat","Essential"); 
	mat->getTechnique(0)->getPass(0)->createTextureUnitState("green.jpg");
	mat->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
	mat->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
	mat->getTechnique(0)->getPass(0)->setLightingEnabled(false);

	mat = Ogre::MaterialManager::getSingleton().create("kinecttrackingCalibrationBlackMat","Essential"); 
	mat->getTechnique(0)->getPass(0)->createTextureUnitState("white.jpg");
	mat->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
	mat->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
	mat->getTechnique(0)->getPass(0)->setLightingEnabled(false);

	mat = Ogre::MaterialManager::getSingleton().create("kinecttrackingCalibrationYellowMat","Essential"); 
	mat->getTechnique(0)->getPass(0)->createTextureUnitState("yellow.jpg");
	mat->getTechnique(0)->getPass(0)->setDepthCheckEnabled(false);
	mat->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);
	mat->getTechnique(0)->getPass(0)->setLightingEnabled(false);

	// Construct pattern and overlays
	_buildPattern();
}
bool PointCloud::open(const std::string& filename)
{
  clearData();

  QMutexLocker locker(&mutex_);

  if (pcl::io::loadPCDFile(filename, *this) != 0)
    return false;

  filename_ = filename;
  loadTransformation();

  registered_ = (getView() == 0) || (!(getMatrix().isIdentity()));
 
  expire();

  return true;
}