00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __GD_TrimBezClip_h_
00023 #define __GD_TrimBezClip_h_
00024
00025 #include "GD_API.h"
00026 #include <UT/UT_VectorTypes.h>
00027 class GD_TrimPieceRBezCurve;
00028 class UT_BoundingRect;
00029
00030 #include <GB/GB_Defines.h>
00031
00032 enum GD_TrimBezClipType {
00033 GD_TrimBezClipA = 0,
00034 GD_TrimBezClipBCross = 1,
00035 GD_TrimBezClipBNoCross = 2,
00036 GD_TrimBezClipC = 3,
00037 GD_TrimBezClipAorB = 4,
00038 GD_TrimBezClipUnknown = 5
00039 };
00040
00041
00042 class GD_API GD_TrimBezClip {
00043 public:
00044
00045 GD_TrimBezClip();
00046 ~GD_TrimBezClip();
00047
00048 int getIsectParity(const GD_TrimPieceRBezCurve &curve,
00049 const UT_Vector2 &pt, float tol = 1E-4F);
00050
00051 private:
00052
00053 GD_TrimBezClip(int order);
00054
00055
00056
00057 int splitAt(GD_TrimBezClip *left,
00058 GD_TrimBezClip *right,
00059 float ucut,
00060 UT_Vector2 bloss[][GB_MAXORDER])
00061 const;
00062
00063
00064 float sizeMax();
00065
00066
00067 void findXCVIsections(float &umin, float &umax);
00068 void findYCVIsections(float &umin, float &umax);
00069
00070 GD_TrimBezClipType classify(float tol);
00071
00072
00073 GD_TrimBezClip *myNext;
00074
00075 GD_TrimBezClipType myType;
00076 UT_Vector2 *myCV;
00077 int myDeg;
00078 unsigned int myCVsize;
00079
00080
00081 UT_Vector2 *myBloss;
00082 };
00083
00084 #endif