00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef __MMSFTCONTOUR__
00034 #define __MMSFTCONTOUR__
00035
00036 #include "mmsgui/ft/mmsftvertex.h"
00037
00038
00039 class MMSFTContour {
00040 private:
00041 MMSFTVertexVector vertexList;
00042 MMSFTVertexVector outsetVertexList;
00043 MMSFTVertexVector frontVertexList;
00044 MMSFTVertexVector backVertexList;
00045
00046
00047 bool clockwise;
00048
00049 inline void AddVertex(MMSFTVertex vertex);
00050 inline void AddOutsetVertex(MMSFTVertex vertex);
00051 inline void AddFrontVertex(MMSFTVertex vertex);
00052 inline void AddBackVertex(MMSFTVertex vertex);
00053 inline void evaluateQuadraticCurve(MMSFTVertex, MMSFTVertex, MMSFTVertex);
00054 inline void evaluateCubicCurve(MMSFTVertex, MMSFTVertex, MMSFTVertex, MMSFTVertex);
00055 inline double NormVector(const MMSFTVertex &v);
00056 inline void RotationMatrix(const MMSFTVertex &a, const MMSFTVertex &b, double *matRot, double *invRot);
00057 inline void MultMatrixVect(double *mat, MMSFTVertex &v);
00058 inline void ComputeBisec(MMSFTVertex &v);
00059 inline MMSFTVertex ComputeOutsetVertex(MMSFTVertex a, MMSFTVertex b, MMSFTVertex c);
00060
00061 public:
00062 MMSFTContour(FT_Vector *outlineVertexList, char *outlineVertexTags, unsigned int outlineNumVertices);
00063 ~MMSFTContour();
00064
00065 const MMSFTVertex &Vertex(unsigned int index) const { return vertexList[index]; }
00066
00067 const MMSFTVertex &Outset(unsigned int index) const { return outsetVertexList[index]; }
00068
00069 const MMSFTVertex &FrontVertex(unsigned int index) const {
00070 if(frontVertexList.size() == 0)
00071 return Vertex(index);
00072 return frontVertexList[index];
00073 }
00074
00075 const MMSFTVertex& BackVertex(unsigned int index) const {
00076 if(backVertexList.size() == 0)
00077 return Vertex(index);
00078 return backVertexList[index];
00079 }
00080
00081 unsigned int getVertexCount() const { return vertexList.size(); }
00082
00083 void setParity(int parity);
00084
00085
00086 void buildFrontOutset(double outset);
00087 void buildBackOutset(double outset);
00088
00089 };
00090
00091 #endif