00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __GEO_PrimPasteDAG_h__
00021 #define __GEO_PrimPasteDAG_h__
00022
00023 #include "GEO_API.h"
00024 #include "GEO_PasteSurfDAG.h"
00025 #include "GEO_Primitive.h"
00026
00027 class GB_PrimitiveGroup;
00028 class GEO_AttributeHandleList;
00029
00030
00031 class GEO_API GEO_PrimPasteDAG : public GEO_Primitive, public GEO_PasteSurfDAG
00032 {
00033 public:
00034 GEO_PrimPasteDAG(GEO_Detail *d);
00035 virtual ~GEO_PrimPasteDAG();
00036
00037 virtual unsigned getPrimitiveId() const;
00038 virtual int isDegenerate() const;
00039
00040 virtual int save(ostream &os, int binary) const;
00041 virtual bool load(UT_IStream &is);
00042 virtual int getBBox(UT_BoundingBox *bbox) const;
00043 virtual void addToBSphere(UT_BoundingSphere *bsphere) const;
00044 virtual UT_Vector3 baryCenter() const;
00045 virtual UT_Vector3 computeNormal() const;
00046 virtual void reverse();
00047
00048 virtual void addPointRefToGroup(GB_PointGroup &grp) const;
00049 virtual void changePointRef(GB_Element *from, GB_Element *to);
00050
00051
00052
00053
00054
00055
00056 virtual int detachPoints(GB_PointGroup &grp);
00057
00058 virtual int isPointUsed(GB_Element *pt) const;
00059 virtual int isPointGroupUsed(const GB_PointGroup &grp) const;
00060
00061 virtual unsigned getVertexCount() const;
00062
00063 virtual int vertexApply(int (*apply)(GB_Vertex &vtx, void *),
00064 void *data = 0);
00065 virtual int vertexApply(int (*apply)(const GB_Vertex &vtx, void *),
00066 void *data = 0) const;
00067
00068 virtual int isPrimary(void) const;
00069
00070 virtual void copyPrimitive(const GEO_Primitive *src,
00071 GEO_Point **ptredirect);
00072 virtual GEO_Primitive*copy(int preserve_shared_pts = 0) const;
00073
00074
00075
00076 virtual void realToUnitPair(float ureal, float vreal,
00077 float &uunit, float &vunit) const;
00078
00079 virtual void unitToRealPair(float uunit, float vunit,
00080 float &ureal, float &vreal) const;
00081
00082
00083
00084
00085
00086 virtual bool evaluatePoint(GEO_Vertex &result,
00087 GEO_AttributeHandleList &hlist,
00088 fpreal u, fpreal v,
00089 unsigned du, unsigned dv) const;
00090
00091 virtual int evaluatePoint( UT_Vector4 &pos, float u, float v = 0,
00092 unsigned du=0, unsigned dv=0) const;
00093 virtual int evaluatePointWAttrib(UT_Vector4 &pos,
00094 GB_AttributeData &adata,
00095 const GB_FloatOffsets &foffsets,
00096 float u, float v = 0, unsigned du = 0,
00097 unsigned dv = 0) const;
00098 virtual int evaluateNormalVector(UT_Vector3 &nml, float u,
00099 float v = 0) const;
00100
00101 virtual int parametricBBox(float u, float v,
00102 float *u0, float *u1,
00103 float *v0, float *v1);
00104
00105
00106
00107 virtual float uvDist(float u1, float v1, float u2, float v2) const;
00108
00109
00110
00111
00112 virtual void obsolete(void);
00113
00114
00115 virtual void isolate(void);
00116
00117 virtual const GEO_Vertex &getVertex(unsigned index) const;
00118 virtual GEO_Vertex &getVertex(unsigned index);
00119
00120
00121 void toGroup(GB_PrimitiveGroup &surfgroup) const;
00122
00123
00124
00125
00126 int resolveLinks(void);
00127
00128
00129
00130
00131 int resolveSplines(int primoffset, int maxprims);
00132 int resolveSplines(GEO_Detail &srcgdp,
00133 GEO_Primitive **primredirect);
00134
00135
00136 virtual void stashed(int onoff);
00137
00138 protected:
00139
00140 virtual void pointDeleted (GB_Element *);
00141 virtual int pointCanDelete(GB_Element *) const;
00142
00143 virtual void copyOffsetPrimitive(const GEO_Primitive *src,
00144 int basept);
00145
00146 private:
00147
00148 char myStashedState;
00149 };
00150
00151 #endif