00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __GEO_PrimMesh_h__
00023 #define __GEO_PrimMesh_h__
00024
00025 #include "GEO_API.h"
00026 #include "GEO_Hull.h"
00027 #include "GEO_PrimType.h"
00028
00029 class GEO_API GEO_PrimMesh : public GEO_Hull {
00030 public:
00031 GEO_PrimMesh(GEO_Detail *d) : GEO_Hull(d) { }
00032 ~GEO_PrimMesh();
00033
00034 virtual unsigned getPrimitiveId() const;
00035
00036
00037 virtual int evaluateBreakpoint(int uidx, int vidx,
00038 UT_Vector4 &pos,
00039 int du=0, int dv=0) const;
00040
00041
00042
00043
00044 virtual bool evaluatePoint( GEO_Vertex &result,
00045 GEO_AttributeHandleList &hlist,
00046 fpreal u, fpreal v,
00047 unsigned du=0, unsigned dv=0) const;
00048 virtual int evaluatePoint( UT_Vector4 &pos, float u, float v = 0,
00049 unsigned du=0, unsigned dv=0) const;
00050 virtual int evaluatePointWAttrib(UT_Vector4 &pos,
00051 GB_AttributeData &adata,
00052 const GB_FloatOffsets &foffsets,
00053 float u, float v = 0, unsigned du = 0,
00054 unsigned dv = 0) const;
00055
00056
00057
00058
00059
00060 virtual int loftU(int newcount, int start=-1, int stop=-1);
00061 virtual int loftV(int newcount, int start=-1, int stop=-1);
00062
00063
00064
00065
00066
00067
00068 virtual int warpU(float u, const UT_Vector3 &delta,
00069 GEO_AttributeHandleList &hlist,
00070 float sharpness = 0.0f, float bias = -1.0f);
00071 virtual int warpV(float v, const UT_Vector3 &delta,
00072 GEO_AttributeHandleList &hlist,
00073 float sharpness = 0.0f, float bias = -1.0f);
00074 virtual int warp (float u, float v, const UT_Vector3 &delta,
00075 GEO_AttributeHandleList &hlist,
00076 float usharpness = 0.f, float vsharpness = 0.f,
00077 float ubias = -1.0f, float vbias = -1.0f);
00078 virtual int warpU(float u, const UT_Vector3 &delta,
00079 GB_FloatOffsets *foffsets = 0,
00080 float sharpness = 0.0f, float bias = -1.0f);
00081 virtual int warpV(float v, const UT_Vector3 &delta,
00082 GB_FloatOffsets *foffsets = 0,
00083 float sharpness = 0.0f, float bias = -1.0f);
00084 virtual int warp (float u, float v, const UT_Vector3 &delta,
00085 GB_FloatOffsets *foffsets = 0,
00086 float usharpness = 0.f, float vsharpness = 0.f,
00087 float ubias = -1.0f, float vbias = -1.0f);
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 virtual int attachU(const GEO_Hull &hull, int blend = 1,
00100 float bias = 0.5f, float tolerance = 1.0f,
00101 int= 1,GB_PointGroup *ptgroup=0);
00102 virtual int attachV(const GEO_Hull &hull, int blend = 1,
00103 float bias = 0.5f, float tolerance = 1.0f,
00104 int= 1,GB_PointGroup *ptgroup=0);
00105
00106
00107 virtual void spanRefineU(GEO_AttributeHandleList &hlist,
00108 int numdivs=1);
00109 virtual void spanRefineU(int numdivs=1);
00110 virtual void spanRefineUWAttrib(const GB_FloatOffsets &offsets,
00111 int numdivs = 1);
00112 virtual void spanRefineV(GEO_AttributeHandleList &hlist,
00113 int numdivs=1);
00114 virtual void spanRefineV(int numdivs=1);
00115 virtual void spanRefineVWAttrib(const GB_FloatOffsets &offsets,
00116 int numdivs = 1);
00117
00118 virtual int unrollU(int append_pts = 1);
00119 virtual int unrollV(int append_pts = 1);
00120
00121 protected:
00122 virtual int savePrivate(ostream &, int binary) const;
00123 virtual bool loadPrivate(UT_IStream &);
00124 virtual int saveExtra (ostream &, int binary) const;
00125 virtual bool loadExtra (UT_IStream &);
00126
00127
00128
00129 virtual bool validate(void) const;
00130
00131
00132
00133
00134
00135 int findMaxDistanceU(float &maxdist2,
00136 int start, int stop) const;
00137
00138 int findMaxDistanceV(float &maxdist2,
00139 int start, int stop) const;
00140
00141 private:
00142 friend ostream &operator<<(ostream &os, const GEO_PrimMesh &d)
00143 {
00144 d.save(os, 0);
00145 return os;
00146 }
00147 };
00148 #endif