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;
}
Example #3
0
Point3F afxHermiteEval::evaluateCurve( Point3F &v0, Point3F &v1, F32 t )
{
  Point3F tangent( 1, 0, 0 );
  return( evaluateCurve( v0, v1, tangent, tangent, t ) );
}
Example #4
0
FPType NonAdditivePC::calculate(FPType totalTime, TollType totalToll, int odIndex) const{
	return totalTime + evaluateCurve(totalToll, odIndex);
};