void WarpPerspective::draw( bool controls ) { // only draw grid while editing if( isEditModeEnabled() ) { gl::pushModelMatrix(); gl::multModelMatrix( getTransform() ); glLineWidth( 1.0f ); glHint( GL_LINE_SMOOTH_HINT, GL_NICEST ); gl::ScopedColor color( Color::white() ); for( int i = 0; i <= 1; i++ ) { float s = i / 1.0f; gl::drawLine( vec2( s * (float) mWidth, 0.0f ), vec2( s * (float) mWidth, (float) mHeight ) ); gl::drawLine( vec2( 0.0f, s * (float) mHeight ), vec2( (float) mWidth, s * (float) mHeight ) ); } gl::drawLine( vec2( 0.0f, 0.0f ), vec2( (float) mWidth, (float) mHeight ) ); gl::drawLine( vec2( (float) mWidth, 0.0f ), vec2( 0.0f, (float) mHeight ) ); gl::popModelMatrix(); if( controls ) { // draw control points for( int i = 0; i < 4; i++ ) drawControlPoint( toVec2f( mDestination[i] ), i == mSelected ); } } }
void WarpPerspectiveBilinear::draw(bool controls) { // apply perspective transform gl::pushModelView(); gl::multModelView( mWarp->getTransform() ); // draw bilinear warp WarpBilinear::draw(false); // restore transform gl::popModelView(); // draw edit interface if( isEditModeEnabled() ) { if(controls) { // draw control points for(unsigned i=0;i<mPoints.size();++i) drawControlPoint( getControlPoint(i) * mWindowSize, mSelected==i ); } } }
void drawPath(e2dPath* path) { glBindTexture(GL_TEXTURE_2D, 0); e2dPoint startPointOfSubPath; e2dPoint currentPoint; glBindTexture(GL_TEXTURE_2D, 0); glColor4ub(255, 128, 128, 255); e2dPathElement* pathElem; e2dPathPoint* point; e2dPathCurve* curve; e2dPathElementIterator iter = e2dPathGetElementIterator(path); while(e2dPathElementIteratorHasNext(&iter)) { pathElem = e2dPathElementIteratorNext(&iter); switch(pathElem->type) { case(E2D_PATHPOINT): point = (e2dPathPoint*)pathElem; switch(pathElem->controlType) { case(E2D_START_SUBPATH): glBegin(GL_LINE_STRIP); startPointOfSubPath = point->point; glVertex3f(point->point.x, point->point.y, 5.0f); currentPoint = point->point; break; case(E2D_END_SUBPATH): glVertex3f(point->point.x, point->point.y, 5.0f); glEnd(); currentPoint = point->point; break; case(E2D_END_SUBPATH_LOOP): glVertex3f(point->point.x, point->point.y, 5.0f); glVertex3f(startPointOfSubPath.x, startPointOfSubPath.y, 2.5f); currentPoint = startPointOfSubPath; glEnd(); break; default: glVertex3f(point->point.x, point->point.y, 5.0f); currentPoint = point->point; } break; case(E2D_PATHCURVE): curve = (e2dPathCurve*)pathElem; glEnd(); drawControlPoint(curve->startPoint, curve->controlPoint1); drawControlPoint(curve->endPoint, curve->controlPoint2); glColor4ub(255, 128, 128, 255); glBegin(GL_LINE_STRIP); float t; for (t = 0.0f; t <= 1.0f; t += 0.05f) { float xt = powf(1.0f-t, 3.0f) * currentPoint.x + 3.0f * t * powf (1.0f-t, 2.0f) * curve->controlPoint1.x + 3.0f * powf (t, 2.0f) * (1.0f-t) * curve->controlPoint2.x + powf (t, 3.0f) * curve->endPoint.x; float yt = powf (1.0f-t, 3.0f) * currentPoint.y + 3.0f * t * powf (1.0f-t, 2.0f) * curve->controlPoint1.y + 3.0f * powf (t, 2.0f) * (1.0f-t) * curve->controlPoint2.y + powf (t, 3.0f) * curve->endPoint.y; glVertex3f(xt, yt, 5.0f); } currentPoint = curve->endPoint; if(pathElem->controlType == E2D_END_SUBPATH) glEnd(); else { if(pathElem->controlType == E2D_END_SUBPATH_LOOP) { glVertex3f(startPointOfSubPath.x, startPointOfSubPath.y, 5.0f); glEnd(); currentPoint = startPointOfSubPath; } } break; } } glColor4ub(255, 255, 255, 255); drawAxis(); drawRect(path->element.bboxPosition, path->element.bboxWidth, path->element.bboxHeight); }