int FTVectoriser::Conic( const int index, const int first, const int last) { int next = index + 1; int prev = index - 1; if( index == last) next = first; if( index == first) prev = last; if( ftOutline.tags[next] != FT_Curve_Tag_Conic) { ctrlPtArray[0][0] = (float)ftOutline.points[prev].x; ctrlPtArray[0][1] = (float)ftOutline.points[prev].y; ctrlPtArray[1][0] = (float)ftOutline.points[index].x; ctrlPtArray[1][1] = (float)ftOutline.points[index].y; ctrlPtArray[2][0] = (float)ftOutline.points[next].x; ctrlPtArray[2][1] = (float)ftOutline.points[next].y; evaluateCurve( 2); return 1; } else { int next2 = next + 1; if( next == last) next2 = first; //create a phantom point float x = (float)(ftOutline.points[index].x + ftOutline.points[next].x)/ 2; float y = (float)(ftOutline.points[index].y + ftOutline.points[next].y)/ 2; // process first curve ctrlPtArray[0][0] = (float)ftOutline.points[prev].x; ctrlPtArray[0][1] = (float)ftOutline.points[prev].y; ctrlPtArray[1][0] = (float)ftOutline.points[index].x; ctrlPtArray[1][1] = (float)ftOutline.points[index].y; ctrlPtArray[2][0] = (float)x; ctrlPtArray[2][1] = (float)y; evaluateCurve( 2); // process second curve ctrlPtArray[0][0] = (float)x; ctrlPtArray[0][1] = (float)y; ctrlPtArray[1][0] = (float)ftOutline.points[next].x; ctrlPtArray[1][1] = (float)ftOutline.points[next].y; ctrlPtArray[2][0] = (float)ftOutline.points[next2].x; ctrlPtArray[2][1] = (float)ftOutline.points[next2].y; evaluateCurve( 2); return 2; } }
int FTVectoriser::Cubic( const int index, const int first, const int last) { int next = index + 1; int prev = index - 1; if( index == last) next = first; int next2 = next + 1; if( next == last) next2 = first; if( index == first) prev = last; ctrlPtArray[0][0] = (float)ftOutline.points[prev].x; ctrlPtArray[0][1] = (float)ftOutline.points[prev].y; ctrlPtArray[1][0] = (float)ftOutline.points[index].x; ctrlPtArray[1][1] = (float)ftOutline.points[index].y; ctrlPtArray[2][0] = (float)ftOutline.points[next].x; ctrlPtArray[2][1] = (float)ftOutline.points[next].y; ctrlPtArray[3][0] = (float)ftOutline.points[next2].x; ctrlPtArray[3][1] = (float)ftOutline.points[next2].y; evaluateCurve( 3); return 2; }
Point3F afxHermiteEval::evaluateCurve( Point3F &v0, Point3F &v1, F32 t ) { Point3F tangent( 1, 0, 0 ); return( evaluateCurve( v0, v1, tangent, tangent, t ) ); }
FPType NonAdditivePC::calculate(FPType totalTime, TollType totalToll, int odIndex) const{ return totalTime + evaluateCurve(totalToll, odIndex); };