Made some magic numbers into constants
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
diff --git a/include/FTVectoriser.h b/include/FTVectoriser.h
index f3e731a..1f336d9 100644
--- a/include/FTVectoriser.h
+++ b/include/FTVectoriser.h
@@ -30,7 +30,7 @@ class ftPoint
return((a.x != b.x) || (a.y != b.y) || (a.z != b.z));
}
- float x, y, z;
+ float x, y, z; // FIXME make private
private:
};
@@ -55,6 +55,7 @@ class FTContour
// methods
// attributes
+ const unsigned int kMAXPOINTS;
};
@@ -91,6 +92,8 @@ class FTVectoriser
// Magic numbers -- #define MAX_DEG 4
float bValues[4][4][2]; //3D array storing values of de Casteljau algorithm.
float ctrlPtArray[4][2]; // Magic numbers
+
+ const float kBSTEPSIZE;
};
diff --git a/src/FTVectoriser.cpp b/src/FTVectoriser.cpp
index 3896eed..f5852c8 100644
--- a/src/FTVectoriser.cpp
+++ b/src/FTVectoriser.cpp
@@ -3,8 +3,9 @@
FTContour::FTContour()
+: kMAXPOINTS( 1000)
{
- pointList.reserve( 1000); // FIXME magic number
+ pointList.reserve( kMAXPOINTS);
}
@@ -26,46 +27,11 @@ void FTContour::AddPoint( const int x, const int y)
}
-// De Casteljau algorithm supplied by Jed Soane
-void FTVectoriser::deCasteljau( const float t, const int n)
-{
- //Calculating successive b(i)'s using de Casteljau algorithm.
- for( int i = 1; i <= n; i++)
- for( int k = 0; k <= (n - i); k++)
- {
- bValues[i][k][0] = (1 - t) * bValues[i - 1][k][0] + t * bValues[i - 1][k + 1][0];
- bValues[i][k][1] = (1 - t) * bValues[i - 1][k][1] + t * bValues[i - 1][k + 1][1];
- }
-
- //Specify next vertex to be included on curve
- contour->AddPoint( bValues[n][0][0], bValues[n][0][1]);
-}
-
-
-// De Casteljau algorithm supplied by Jed Soane
-void FTVectoriser::evaluateCurve( const int n)
-{
- // setting the b(0) equal to the control points
- for( int i = 0; i <= n; i++)
- {
- bValues[0][i][0] = ctrlPtArray[i][0];
- bValues[0][i][1] = ctrlPtArray[i][1];
- } //end for(i..)
-
- float t; //parameter for curve point calc. [0.0, 1.0]
- const float stepSize = 0.2; // FIXME variable
-
- for( int m = 0; m <= (1 / stepSize); m++)
- {
- t = m * stepSize;
- deCasteljau( t, n); //calls to evaluate point on curve att.
- } //end for(m...)
-}
-
-
FTVectoriser::FTVectoriser( const FT_Glyph glyph)
: contourFlag(0),
- contour(0)
+ contour(0),
+ kBSTEPSIZE( 0.2)
+
{
FT_OutlineGlyph outline = (FT_OutlineGlyph)glyph;
ftOutline = outline->outline;
@@ -99,7 +65,7 @@ int FTVectoriser::points()
bool FTVectoriser::Ingest()
{
- if ( ( ftOutline.n_contours < 1) || ( ftOutline.n_points < 3)) //FIXME check this
+ if ( ( ftOutline.n_contours < 1) || ( ftOutline.n_points < 3))
return false;
short first = 0;
@@ -210,6 +176,42 @@ int FTVectoriser::Cubic( const int index, const int first, const int last)
}
+// De Casteljau algorithm supplied by Jed Soane
+void FTVectoriser::deCasteljau( const float t, const int n)
+{
+ //Calculating successive b(i)'s using de Casteljau algorithm.
+ for( int i = 1; i <= n; i++)
+ for( int k = 0; k <= (n - i); k++)
+ {
+ bValues[i][k][0] = (1 - t) * bValues[i - 1][k][0] + t * bValues[i - 1][k + 1][0];
+ bValues[i][k][1] = (1 - t) * bValues[i - 1][k][1] + t * bValues[i - 1][k + 1][1];
+ }
+
+ //Specify next vertex to be included on curve
+ contour->AddPoint( bValues[n][0][0], bValues[n][0][1]);
+}
+
+
+// De Casteljau algorithm supplied by Jed Soane
+void FTVectoriser::evaluateCurve( const int n)
+{
+ // setting the b(0) equal to the control points
+ for( int i = 0; i <= n; i++)
+ {
+ bValues[0][i][0] = ctrlPtArray[i][0];
+ bValues[0][i][1] = ctrlPtArray[i][1];
+ } //end for(i..)
+
+ float t; //parameter for curve point calc. [0.0, 1.0]
+
+ for( int m = 0; m <= (1 / kBSTEPSIZE); m++)
+ {
+ t = m * kBSTEPSIZE;
+ deCasteljau( t, n); //calls to evaluate point on curve att.
+ } //end for(m...)
+}
+
+
void FTVectoriser::Output( double* data)
{
int i = 0;