00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __GEO_PrimRBezSurf_h__
00024 #define __GEO_PrimRBezSurf_h__
00025
00026 #include "GEO_API.h"
00027 #include "GEO_TPSurf.h"
00028 #include "GEO_PrimType.h"
00029
00030 class UT_Vector4;
00031
00032 class GEO_API GEO_PrimRBezSurf : public GEO_TPSurf {
00033 public:
00034
00035
00036 GEO_PrimRBezSurf(GEO_Detail *d, unsigned int m=0, unsigned int n=0)
00037 : GEO_TPSurf(d, (int)m, (int)n) {}
00038
00039
00040
00041 ~GEO_PrimRBezSurf();
00042
00043
00044
00045
00046
00047
00048 virtual int evaluateBasisDerivs(float u, float v,
00049 float ubmatx[][GB_MAXORDER],
00050 float vbmatx[][GB_MAXORDER],
00051 int &rowoffset, int &coloffset,
00052 unsigned du=0, unsigned dv=0,
00053 int uoffset=-1, int voffset=-1) const;
00054
00055
00056
00057
00058
00059 virtual int evaluateBasis(float u, float v, float *ubvals,
00060 float *vbvals, int &rowoffset,
00061 int &coloffset,
00062 unsigned du=0, unsigned dv=0,
00063 int uoffset=-1, int voffset=-1) const;
00064 virtual int evaluateUBasis(float u, float *ubvals, int &coloffset,
00065 unsigned du=0, int uoffset=-1) const;
00066 virtual int evaluateVBasis(float v, float *vbvals, int &rowoffset,
00067 unsigned dv=0, int voffset=-1) const;
00068
00069
00070
00071
00072
00073
00074
00075 virtual int evaluateMesh(float *uArr, unsigned uArrLen,
00076 float *vArr, unsigned vArrLen,
00077 UT_Vector4 *pos,
00078 unsigned du=0, unsigned dv=0) const;
00079 virtual int evaluateMesh(float uStart, float uStop, unsigned nu,
00080 float vStart, float vStop, unsigned nv,
00081 UT_Vector4 *pos,
00082 unsigned du=0, unsigned dv=0) const;
00083 virtual bool evaluateMesh(float uStart, float uStop,
00084 unsigned nu, float vStart, float vStop,
00085 unsigned nv, GEO_Vertex **results,
00086 GEO_AttributeHandleList &hlist,
00087 unsigned du=0, unsigned dv=0) const;
00088 virtual int evaluateMeshWAttrib(float uStart, float uStop,
00089 unsigned nu, float vStart, float vStop,
00090 unsigned nv, UT_Vector4 *pos,
00091 GB_AttributeData *adata,
00092 const GB_FloatOffsets &foffsets,
00093 unsigned du=0, unsigned dv=0) const;
00094
00095
00096 virtual int evaluateBreakpoint(int uidx, int vidx,
00097 UT_Vector4 &pos,
00098 int du=0, int dv=0) const;
00099
00100
00101
00102
00103
00104
00105 virtual int fillBreakMesh(int ustartidx, int ustopidx,
00106 int vstartidx, int vstopidx,
00107 int ulod, int vlod,
00108 UT_Vector4 *pos, int &vspans ,
00109 int vbreakidx = -1,
00110 unsigned du = 0, unsigned dv = 0,
00111 UT_FloatArray *uval = 0,
00112 UT_FloatArray *vval = 0) const;
00113 virtual int fillBreakMesh(int ustartidx, int ustopidx,
00114 int vstartidx, int vstopidx,
00115 int ulod, int vlod,
00116 GEO_Vertex **results,
00117 GEO_AttributeHandleList &hlist,
00118 int &vspans , int vbreakidx = -1,
00119 unsigned du = 0, unsigned dv = 0) const;
00120 virtual int fillBreakMeshWAttrib(int ustartidx, int ustopidx,
00121 int vstartidx, int vstopidx,
00122 int ulod, int vlod,
00123 UT_Vector4 *pos, GB_AttributeData *adata,
00124 const GB_FloatOffsets &foffsets,
00125 int &vspans , int vbreakidx = -1,
00126 unsigned du = 0, unsigned dv = 0) const;
00127
00128
00129
00130
00131
00132
00133
00134
00135 virtual int fillUCurves(int ustartidx, int ustopidx,
00136 int vstartidx, int vstopidx, int lod,
00137 UT_Vector4 *pos, int &uspans ,
00138 int ubreakidx = -1,
00139 unsigned du = 0, unsigned dv = 0) const;
00140 virtual int fillVCurves(int ustartidx, int ustopidx,
00141 int vstartidx, int vstopidx, int lod,
00142 UT_Vector4 *pos, int &vspans ,
00143 int vbreakidx = -1,
00144 unsigned du = 0, unsigned dv = 0) const;
00145 virtual int fillUCurves(int ustartidx, int ustopidx,
00146 int vstartidx, int vstopidx, int lod,
00147 GEO_Vertex **results,
00148 GEO_AttributeHandleList &hlist,
00149 int &uspans , int ubreakidx = -1,
00150 unsigned du = 0, unsigned dv = 0) const;
00151 virtual int fillVCurves(int ustartidx, int ustopidx,
00152 int vstartidx, int vstopidx, int lod,
00153 GEO_Vertex **results,
00154 GEO_AttributeHandleList &hlist,
00155 int &vspans , int vbreakidx = -1,
00156 unsigned du = 0, unsigned dv = 0) const;
00157 virtual int fillUCurvesWAttrib(int ustartidx, int ustopidx,
00158 int vstartidx, int vstopidx, int lod,
00159 UT_Vector4 *pos, GB_AttributeData *adata,
00160 const GB_FloatOffsets &foffsets,
00161 int &uspans , int ubreakidx = -1,
00162 unsigned du = 0, unsigned dv = 0) const;
00163 virtual int fillVCurvesWAttrib(int ustartidx, int ustopidx,
00164 int vstartidx, int vstopidx, int lod,
00165 UT_Vector4 *pos, GB_AttributeData *adata,
00166 const GB_FloatOffsets &foffsets,
00167 int &vspans , int vbreakidx = -1,
00168 unsigned du = 0, unsigned dv = 0) const;
00169
00170
00171
00172
00173 virtual int fillMesh(int nu, int nv, UT_Vector4 *pos) const;
00174
00175
00176
00177
00178 virtual int domainRangeOfCV(int i, int j, int &minuk,int &maxuk,
00179 int &minvk,int &maxvk) const;
00180
00181
00182
00183
00184
00185
00186 virtual int breakpointRangeOfCV(int i, int j, int &minbkpu,
00187 int &maxbkpu, int &minbkpv,
00188 int &maxbkpv) const;
00189
00190
00191
00192 virtual void reparameterizeU(GB_ParmType ptype);
00193 virtual void reparameterizeV(GB_ParmType ptype);
00194
00195
00196
00197
00198 virtual int refineU(float k, GEO_AttributeHandleList &hlist, int=0);
00199 virtual int refineU (float k, int=0);
00200 virtual int refineUWAttrib (float k,
00201 const GB_FloatOffsets &foffsets,
00202 int = 0);
00203 virtual int refineUWAttrib (float k,
00204 const GB_FloatOffsets *ptoffsets,
00205 const GB_FloatOffsets *vtxoffsets,
00206 int = 0);
00207
00208 virtual int refineV(float k, GEO_AttributeHandleList &hlist, int=0);
00209 virtual int refineV (float k, int=0);
00210 virtual int refineVWAttrib (float k,
00211 const GB_FloatOffsets &foffsets,
00212 int = 0);
00213 virtual int refineVWAttrib (float k,
00214 const GB_FloatOffsets *ptoffsets,
00215 const GB_FloatOffsets *vtxoffsets,
00216 int = 0);
00217
00218
00219
00220 virtual int recordChange(unsigned r, unsigned c);
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239 virtual void wrapU(int rounded = 1, int preserveShape = 0);
00240 virtual void wrapV(int rounded = 1, int preserveShape = 0);
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 virtual void openU(int preserveShape = 0, int safe = 0);
00256 virtual void openV(int preserveShape = 0, int safe = 0);
00257
00258
00259
00260 virtual int insertRow(unsigned int beforeWhich, int appendPts=1);
00261 virtual int insertCol(unsigned int beforeWhich, int appendPts=1);
00262 virtual int deleteRow(unsigned int which);
00263 virtual int deleteCol(unsigned int which);
00264
00265
00266 virtual int uMaxValidIndex(void) const;
00267 virtual int vMaxValidIndex(void) const;
00268
00269
00270 virtual unsigned getPrimitiveId(void) const;
00271
00272
00273
00274
00275
00276 virtual int loftU(int newcount, int start=-1, int stop=-1);
00277 virtual int loftV(int newcount, int start=-1, int stop=-1);
00278
00279
00280
00281
00282
00283
00284 virtual int warpU(float u, const UT_Vector3 &delta,
00285 GEO_AttributeHandleList &hlist,
00286 float sharpness = 0.0f, float bias = -1.0f);
00287 virtual int warpV(float v, const UT_Vector3 &delta,
00288 GEO_AttributeHandleList &hlist,
00289 float sharpness = 0.0f, float bias = -1.0f);
00290 virtual int warp (float u, float v, const UT_Vector3 &delta,
00291 GEO_AttributeHandleList &hlist,
00292 float usharpness = 0.f, float vsharpness = 0.f,
00293 float ubias = -1.0f, float vbias = -1.0f);
00294
00295 virtual int warpU(float u, const UT_Vector3 &delta,
00296 GB_FloatOffsets *foffsets = 0,
00297 float sharpness = 0.0f, float bias = -1.0f);
00298 virtual int warpV(float v, const UT_Vector3 &delta,
00299 GB_FloatOffsets *foffsets = 0,
00300 float sharpness = 0.0f, float bias = -1.0f);
00301 virtual int warp (float u, float v, const UT_Vector3 &delta,
00302 GB_FloatOffsets *foffsets = 0,
00303 float usharpness = 0.f, float vsharpness = 0.f,
00304 float ubias = -1.0f, float vbias = -1.0f);
00305
00306
00307 virtual void getRangeBBox(const UT_Interval &u,
00308 const UT_Interval &v,
00309 UT_BoundingBox &bbox) const;
00310
00311 virtual int unrollU(int append_pts = 1);
00312 virtual int unrollV(int append_pts = 1);
00313
00314
00315
00316 virtual void reverseU(void);
00317 virtual void reverseV(void);
00318
00319
00320
00321
00322 virtual int raiseOrderU(int neworder, GEO_AttributeHandleList &hl);
00323 virtual int raiseOrderU (int neworder);
00324 virtual int raiseOrderUWAttrib(int neworder,
00325 const GB_FloatOffsets &foffsets);
00326 virtual int raiseOrderV(int neworder, GEO_AttributeHandleList &hl);
00327 virtual int raiseOrderV (int neworder);
00328 virtual int raiseOrderVWAttrib(int neworder,
00329 const GB_FloatOffsets &foffsets);
00330
00331
00332
00333
00334
00335
00336 virtual int translateBreakpoints(const UT_IntArray &uindices,
00337 const UT_IntArray &vindices,
00338 const UT_Vector3 &delta,
00339 int fixbpkts = 1,
00340 GB_PointGroup *ptgroup=NULL,
00341 GEO_Delta *geodelta = 0);
00342
00343 virtual int transformBreakpoints(const UT_IntArray &uindices,
00344 const UT_IntArray &vindices,
00345 const UT_Matrix4 &matx,
00346 int fixbpkts = 1,
00347 GB_PointGroup *ptgroup=NULL,
00348 GEO_Delta *geodelta = 0);
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360 virtual int attachU(const GEO_Hull &hull, int blend = 1,
00361 float bias = 0.5f, float tolerance = 1.0f,
00362 int = 1, GB_PointGroup *ptgroup=0);
00363 virtual int attachV(const GEO_Hull &hull, int blend = 1,
00364 float bias = 0.5f, float tolerance = 1.0f,
00365 int = 1, GB_PointGroup *ptgroup=0);
00366
00367
00368
00369
00370 virtual GEO_TPSurf *extract(float ustart, float ustop,
00371 float vstart, float vstop) const;
00372
00373
00374 virtual void transpose();
00375
00376
00377 protected:
00378
00379 virtual GB_Basis *newBasis(void) const;
00380
00381
00382
00383
00384
00385
00386
00387 int fillUCurve(int vidx, int ustartidx,int ustopidx,
00388 int density, UT_Vector4 *pos, int puoffset,
00389 int rbound, unsigned du, unsigned dv) const;
00390 int fillVCurve(int uidx, int vstartidx,int vstopidx,
00391 int density, UT_Vector4 *pos, int pvoffset,
00392 int rbound, unsigned du, unsigned dv) const;
00393 int fillUCurve(int vidx, int ustartidx,
00394 int ustopidx, int density,
00395 GEO_Vertex **results,
00396 GEO_AttributeHandleList &hlist,
00397 int puoffset, int rbound,
00398 unsigned du, unsigned dv) const;
00399 int fillVCurve(int uidx, int vstartidx,
00400 int vstopidx, int density,
00401 GEO_Vertex **results,
00402 GEO_AttributeHandleList &hlist,
00403 int pvoffset, int rbound,
00404 unsigned du, unsigned dv) const;
00405 int fillUCurveWAttrib(int vidx, int ustartidx,
00406 int ustopidx, int density, UT_Vector4 *pos,
00407 GB_AttributeData *adata,
00408 const GB_FloatOffsets &foffsets,
00409 int asize, int puoffset, int rbound,
00410 unsigned du, unsigned dv) const;
00411 int fillVCurveWAttrib(int uidx, int vstartidx,
00412 int vstopidx, int density, UT_Vector4 *pos,
00413 GB_AttributeData *adata,
00414 const GB_FloatOffsets &foffsets,
00415 int asize, int pvoffset, int rbound,
00416 unsigned du, unsigned dv) const;
00417
00418
00419 void incrementOrderU(void);
00420 void incrementOrderU(GEO_AttributeHandleList &hlist);
00421 void incrementOrderUWAttrib(const GB_FloatOffsets &foffsets);
00422
00423 void incrementOrderV(void);
00424 void incrementOrderV(GEO_AttributeHandleList &hlist);
00425 void incrementOrderVWAttrib(const GB_FloatOffsets &foffsets);
00426
00427 private:
00428
00429 };
00430 #endif