00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __GB_Breakpoint_h__
00022 #define __GB_Breakpoint_h__
00023
00024 #include "GB_API.h"
00025 #include <iostream.h>
00026 #include <UT/UT_LinkList.h>
00027
00028 #include "GB_Primitive.h"
00029
00030 class GB_Basis;
00031
00032 typedef int (*iterateFuncPtr)(void *data, GB_Element *ppt);
00033 typedef int (*iterateVertexFuncPtr)(void *data, GB_Vertex &vtx,
00034 int linear_index);
00035
00036 class GB_API GB_Breakpoint : public UT_LinkNode
00037 {
00038 protected:
00039
00040
00041 GB_Breakpoint(GB_Primitive *prim = 0, int uidx = -1, int vidx = -1)
00042 {
00043 mySpline = prim;
00044 myUidx = uidx;
00045 myVidx = vidx;
00046 }
00047 GB_Breakpoint(const GB_Breakpoint &b)
00048 : UT_LinkNode(b)
00049 {
00050 mySpline = b.mySpline;
00051 myUidx = b.myUidx;
00052 myVidx = b.myVidx;
00053 }
00054
00055
00056 GB_Breakpoint &operator=(const GB_Breakpoint &b)
00057 {
00058 mySpline = b.mySpline;
00059 myUidx = b.myUidx;
00060 myVidx = b.myVidx;
00061
00062 return *this;
00063 }
00064
00065 public:
00066 virtual ~GB_Breakpoint(void);
00067
00068 bool operator==(const GB_Breakpoint &b)
00069 {
00070 return (this == &b ||
00071 mySpline == b.mySpline &&
00072 myUidx == b.myUidx &&
00073 myVidx == b.myVidx );
00074 }
00075
00076 int isPrimary() const { return (mySpline ?
00077 mySpline->isPrimary() :
00078 0); }
00079
00080
00081 virtual int evaluate(UT_Vector4 &,
00082 int=0, int=0) const = 0;
00083
00084
00085
00086 virtual int iterateOverCVs(void * , iterateFuncPtr)
00087 = 0;
00088 virtual int iterateOverCVs(void * ,
00089 iterateVertexFuncPtr) = 0;
00090
00091
00092
00093
00094
00095 virtual void getKnotIndices(int &, int &,
00096 GB_Basis ** ,
00097 GB_Basis ** ) const = 0;
00098 virtual void getParameter(fpreal &, fpreal &) const = 0;
00099
00100
00101
00102 int u() const { return myUidx; }
00103 int &u() { return myUidx; }
00104 int v() const { return myVidx; }
00105 int &v() { return myVidx; }
00106 const GB_Primitive *spline() const { return mySpline; }
00107 GB_Primitive *&spline() { return mySpline; }
00108
00109
00110
00111 int save(ostream &os, int binary) const;
00112 bool load(UT_IStream &is, const GB_Detail &gdp);
00113
00114 protected:
00115
00116
00117 GB_Primitive *mySpline;
00118 int myUidx, myVidx;
00119 };
00120
00121 #endif