11 #ifndef __GU_PolyExtrude2_h__
12 #define __GU_PolyExtrude2_h__
39 template<
typename T,
bool B>
class GA_EdgeT;
50 bool split_all =
false);
55 bool split_all =
false);
61 PRIM_OR_EDGE_NORMAL = 0,
78 bool isTrivial()
const;
81 { myExtrusionMode = m; }
83 { myMorphMethod = m; }
90 { myUseExistingNormal =
b; }
93 { mySuppliedPointNormal = ptnml; }
96 { myAddFrontPrimGroup = grp; }
99 { myAddFrontEdgeGroup = grp; }
102 { myAddBackPrimGroup = grp; }
105 { myAddBackEdgeGroup = grp; }
108 { myAddSidePrimGroup = grp; }
111 { myAddFrontSeamGroup = grp; }
114 { myAddBackSeamGroup = grp; }
117 { myPrimSelection = grp; }
120 { myEdgeSelection = grp; }
131 { myDeviationToleranceCos = SYScos(a); }
135 { myExtSpineSrcBlend =
s; myExtSpineDstBlend = d; }
138 bool is_global =
false);
141 { myExternalSpine = curve; }
145 { myThicknessAttrib = attrib; }
148 { myTwistAttrib = attrib; }
151 { mySpineStart =
s; mySpineEnd = e; }
155 { mySrcMagnitude =
s; myDstMagnitude = d; }
158 { mySrcStiffness =
s; myDstStiffness = d; }
160 void addVertexNormals(
fpreal cusp_angle_degrees,
161 bool cusp_front,
bool cusp_back);
164 { mySpineSampleMethod = m; }
167 { myLimitInset = limit;
168 myCommonInsetLimit = common_limit; }
170 void setLocalXDirAttrib(
const char *attrib_name);
171 void setLocalZDirAttrib(
const char *attrib_name);
172 void setLocalCtrAttrib(
const char *attrib_name);
173 void setLocalDistScaleAttrib(
const char *attrib_name);
174 void setLocalInsetScaleAttrib(
const char *attrib_name);
175 void setLocalTwistScaleAttrib(
const char *attrib_name);
176 void setLocalDivsScaleAttrib(
const char *attrib_name);
184 fpreal getCompInsetScale(
int k);
185 fpreal getCompDistScale(
int k);
186 fpreal getCompTwistScale(
int k);
187 fpreal getCompDivsScale(
int k);
197 void cleanPrivateAttributes();
198 void computeOpenPolyNormals();
200 void buildPrimFront();
201 void buildEdgeFront(
bool generate_edge_polys);
203 void setupGroupsAndAttribs();
204 void copyEdgeGroupMembership();
210 void buildPrimExtrusionMaps();
212 void buildEdgeExtrusionMap();
213 void calculatePathNormals(
bool trivial);
215 void transformEdgeFront(
bool trivial);
235 void transformPrimFront(
bool trivial);
236 void insetPrimFront();
242 void bridgePrimComponents(
int batch_size = -1);
243 void bridgeEdgeComponents(
int batch_size = -1);
245 void buildPrimSeams();
246 void buildEdgeSeams();
248 void calcPrimLocalFrames();
249 void calcPrimCompLocalFrame(
int k);
251 void calcEdgeLocalFrames();
252 void calcEdgeCompLocalFrame(
int k);
254 void calcCenterAndNormal(
int component_id,
257 bool add_extrusion =
false,
258 bool collect_from_attributes =
false);
263 void updateAffectedNormals();
267 void fillOutputGroups();
269 fpreal getRescaleFactor()
const;
271 void buildHandleSpaceChangMat();
273 void saveEdgeGroupToDetailArray(
const GA_EdgeGroup *grp,
274 const char *attrib_name);
278 bool isFrontXformTrivial()
const;
281 int numCompFrontPts(
int k)
282 {
return (myCompFrontFirstPt(k + 1) -
283 myCompFrontFirstPt(k)); }
287 {
return myFrontPts(myCompFrontFirstPt(k) + i); }
290 int numCompFrontPrims(
int k)
291 {
return (myCompFrontFirstPrim(k + 1) -
292 myCompFrontFirstPrim(k)); }
296 {
return myFrontPrims(myCompFrontFirstPrim(k) + i); }
301 int frontPtIdx(
int k,
int i)
302 {
return (myCompFrontFirstPt(k) + i); }
306 {
return myFrontPtExtrusion(frontPtIdx(k, i)); }
310 {
return myFrontPtPathNormal(frontPtIdx(k, i)); }
315 int frontBdIdx(
int k,
int j)
316 {
return (myCompFrontFirstBd(k) + j); }
320 int frontBdVtxIdx(
int j,
int i)
321 {
return (myFrontBdFirstVtx(j) + i); }
326 {
return myFrontBdVtxs(i); }
331 {
return myFrontBdVtxs(frontBdVtxIdx(j, i)); }
335 GA_Offset &compFrontBdVtx(
int k,
int j,
int i)
336 {
return frontBdVtx(frontBdIdx(k, j), i); }
341 {
return int(myCompFrontFirstBd.size() - 1); }
345 int numCompFrontBds(
int k)
346 {
return (myCompFrontFirstBd(k + 1)
347 - myCompFrontFirstBd(k)); }
351 {
return int(myFrontBdVtxs.size()); }
355 int numFrontBdVtxs(
int j)
356 {
return (myFrontBdFirstVtx(j + 1)
357 - myFrontBdFirstVtx(j)); }
361 int numCompFrontBdVtxs(
int k,
int j)
362 {
return numFrontBdVtxs(frontBdIdx(k, j)); }
367 {
return GA_Offset(myFrontToBackVtxMap.get(v)); }
372 {
return GA_Offset(myFrontToBackPtMap.get(pt)); }
376 int bdComp(
int j) {
return myBdComp(j); }
380 bool isFrontCompClosed(
int k)
381 {
return myFrontCompClosed.getBitFast(k); }
385 {
return myHip->srcPoint(h); }
389 {
return myHip->dstPoint(h); }
393 {
return myHip->srcVertex(h); }
397 {
return myHip->dstVertex(h); }
401 {
return myGdp->vertexPrimitive(vtx); }
406 {
return myHip->findHedgeWithEndpoints(p0, p1); }
410 {
return myHip->sym(h); }
414 {
return myHip->lnext(h); }
418 {
return myHip->lprev(h); }
422 {
return { myGdp->getPos3(pt) }; }
426 {
return myHip->isValidHedge(h); }
430 {
return { myPointNormal.get(pt) }; }
434 {
return { myPolyNormal.get(pt) }; }
460 fpreal myDeviationToleranceCos = 0.984807753012208;
461 fpreal mySrcMagnitude = 1.0;
462 fpreal myDstMagnitude = 1.0;
463 fpreal mySrcStiffness = 1.0;
464 fpreal myDstStiffness = 1.0;
465 fpreal myExtSpineSrcBlend, myExtSpineDstBlend;
470 PolyPatches *myPolyPatches =
nullptr;
471 EdgePaths *myEdgePaths =
nullptr;
496 int myNumFrontPts = 0;
498 MorphMethod myMorphMethod = MorphMethod::LINEAR;
500 bool myOutputFront =
true;
501 bool myOutputBack =
false;
502 bool myReverseBack =
true;
503 bool myOutputSide =
true;
504 bool myStraightSpine =
true;
505 bool myReverseSpine =
false;
506 bool myUseExistingNormal =
false;
508 bool myAddVertexNormal =
false;
509 bool myCuspFront =
true;
510 bool myCuspBack =
true;
512 bool myWranglePt =
false;
513 bool myWranglePrim =
false;
514 bool myWrangleVtx =
false;
516 bool myXformIsTrivial =
true;
517 bool myTrivialNormal =
true;
519 bool myLimitInset =
true;
520 bool myCommonInsetLimit =
true;
522 fpreal myCuspAngleDegrees = 60.06;
527 fpreal myThicknessScale = 1.0;
529 UT_Ramp *myTwistRamp =
nullptr;
530 UT_Ramp *myThicknessRamp =
nullptr;
532 const GEO_Face *myExternalSpine =
nullptr;
536 fpreal mySpineStart = 0.0;
538 fpreal myAxialRotation = 0.0;
558 int myNumComponents = 0;
559 int myNumCompBoundaries = 0;
561 SpineSampleMethod mySpineSampleMethod;
568 bool myXformIsGlobal =
false;
void setReverseSpine(bool b)
void setTwistScale(fpreal s)
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
SYS_FORCE_INLINE GA_Offset srcPoint(const GA_Detail *gdp, GEO_Hedge h)
Definition of a geometry attribute.
GA_API const UT_StringHolder div
UT_Array< IndexPair > IndexPairArray
UT_Array< IndexPair > IndexPairArray
void setExternalSpine(const GEO_Face *curve)
void limitInset(bool limit, bool common_limit)
void setStiffnesses(fpreal s, fpreal d)
GA_Offset srcVertex(GEO_Hedge)
GLboolean GLboolean GLboolean GLboolean a
void setOutputSide(bool b)
void setPointNormalAttrib(GA_ROHandleV3 ptnml)
void setSpineSampleMethod(SpineSampleMethod m)
void setDivisions(int div)
UT_Vector3 getDraggerDir() const
void setThicknessScale(fpreal s)
void setTwistAttrib(GA_Attribute *attrib)
void setBackGroup(GA_EdgeGroup *grp)
void setOutputBack(bool b)
void setSideGroup(GA_PrimitiveGroup *grp)
GEO_Hedge encapsulates a half-edge (hedge) which is the restriction of.
void setFrontGroup(GA_EdgeGroup *grp)
void setMorphMethod(MorphMethod m)
void setThicknessRamp(UT_Ramp *r)
UT_Vector3 getDraggerStart() const
void setFrontGroup(GA_PrimitiveGroup *grp)
void setMagnitudes(fpreal s, fpreal d)
OPENVDB_API void initialize()
Global registration of native Grid, Transform, Metadata and Point attribute types. Also initializes blosc (if enabled).
GLboolean GLboolean GLboolean b
SYS_FORCE_INLINE GA_Offset dstVertex(T &iface, GEO_Hedge h)
FS_API bool cleanup(UT_StringArray &removed, UT_StringArray &error_files, exint &memory_freed, bool dry_run, const char *override_path=nullptr)
UT_UniquePtr< GA_Attribute > GA_AttributeUPtr
void setBackSeamGroup(GA_EdgeGroup *grp)
void setSpineRange(fpreal s, fpreal e)
void setAxialRotation(fpreal r)
GLfloat GLfloat GLfloat GLfloat h
void setThicknessAttrib(GA_Attribute *attrib)
GEO_Hedge findHedgeWithEndpoints(T &iface, GA_Offset p0, GA_Offset p1)
void setDeviationTolerance(fpreal a)
void setTwistRamp(UT_Ramp *r)
void setExtrusionMode(ExtrusionMode m)
Utility class for containing a color ramp.
void setExtSpineBlend(fpreal s, fpreal d)
void setBackGroup(GA_PrimitiveGroup *grp)
void setOutputFront(bool b)
GU_Spine::SampleMode SpineSampleMethod
void setSelectionGroup(GA_EdgeGroup *grp)
void setUseExistingPointNormal(bool b)
const GEO_DetachedHedgeInterface HedgeInterface
UT_UniquePtr< GA_PointGroup > GA_PointGroupUPtr
SIM_API const UT_StringHolder distance
void setStraightSpine(bool b)
void setSelectionGroup(GA_PrimitiveGroup *grp)
void setInset(float inset)
void setFrontSeamGroup(GA_EdgeGroup *grp)
SYS_FORCE_INLINE GA_Offset dstPoint(T &iface, GEO_Hedge h)