#include "calibrateWidget.hh"using namespace std;using namespace mimas;CalibrateWidget::CalibrateWidget( QWidget *parent, Qt::WFlags f ):QGLWidget( parent, 0, f ), pattern(0){}CalibrateWidget::CalibrateWidget( const image< unsigned char > &_projectedPattern,QWidget *parent, Qt::WFlags f ):QGLWidget( parent ), projectedPattern( _projectedPattern ),pattern(0){}void CalibrateWidget::initializeGL(void){qglClearColor( Qt::black );}void CalibrateWidget::resizeGL( int w, int h ){glViewport( 0, 0, (GLint)w, (GLint)h );glMatrixMode( GL_PROJECTION );glLoadIdentity();glOrtho( 0, width(), height(), 0, -1, 1 );}void CalibrateWidget::paintGL(void){glClear( GL_COLOR_BUFFER_BIT );glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );if ( projectedPattern.initialised() && pattern >= 1 && pattern <= 5 ) {glPixelZoom( 1, -1 );Vector pos( getPos( pattern ) );glRasterPos2d( pos[0] - projectedPattern.getWidth() / 2,pos[1] - projectedPattern.getHeight() / 2 );glDrawPixels( projectedPattern.getWidth(), projectedPattern.getHeight(),GL_LUMINANCE, GL_UNSIGNED_BYTE,projectedPattern.rawData() );};};CalibrateWidget::Vector CalibrateWidget::getPos( int i ){assert( projectedPattern.initialised() );assert( pattern >= 1 && pattern <= 5 );intxmax = width() - projectedPattern.getWidth(),ymax = height() - projectedPattern.getHeight(),x,y;switch ( pattern ) {case 1:x = 0;y = 0;break;case 2:x = xmax;y = 0;break;case 3:x = 0;y = ymax;break;case 4:x = xmax;y = ymax;break;default:x = xmax / 2;y = ymax / 2;};Vector retVal( 3 );retVal[ 0 ] = x + projectedPattern.getWidth() / 2;retVal[ 1 ] = y + projectedPattern.getHeight() / 2;retVal[ 2 ] = 1.0;return retVal;}void CalibrateWidget::setPattern( int _pattern ){if ( pattern != _pattern ) {pattern = _pattern;update();};}