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,
70 bool copyptgrps =
true,
bool copyprimgrps =
true);
79 bool isTrivial()
const;
82 { myExtrusionMode = m; }
84 { myMorphMethod = m; }
91 { myUseExistingNormal =
b; }
94 { mySuppliedPointNormal = ptnml; }
97 { myAddFrontPrimGroup = grp; }
100 { myAddFrontEdgeGroup = grp; }
103 { myAddBackPrimGroup = grp; }
106 { myAddBackEdgeGroup = grp; }
109 { myAddSidePrimGroup = grp; }
112 { myAddFrontSeamGroup = grp; }
115 { myAddBackSeamGroup = grp; }
118 { myPrimSelection = grp; }
121 { myEdgeSelection = grp; }
132 { myDeviationToleranceCos = SYScos(a); }
136 { myExtSpineSrcBlend =
s; myExtSpineDstBlend = d; }
139 bool is_global =
false);
142 { myExternalSpine = curve; }
146 { myThicknessAttrib = attrib; }
149 { myTwistAttrib = attrib; }
152 { mySpineStart =
s; mySpineEnd = e; }
156 { mySrcMagnitude =
s; myDstMagnitude = d; }
159 { mySrcStiffness =
s; myDstStiffness = d; }
161 void addVertexNormals(
fpreal cusp_angle_degrees,
162 bool cusp_front,
bool cusp_back);
165 { mySpineSampleMethod = m; }
168 { myLimitInset = limit;
169 myCommonInsetLimit = common_limit; }
171 void setLocalXDirAttrib(
const char *attrib_name);
172 void setLocalZDirAttrib(
const char *attrib_name);
173 void setLocalCtrAttrib(
const char *attrib_name);
174 void setLocalDistScaleAttrib(
const char *attrib_name);
175 void setLocalInsetScaleAttrib(
const char *attrib_name);
176 void setLocalTwistScaleAttrib(
const char *attrib_name);
177 void setLocalDivsScaleAttrib(
const char *attrib_name);
185 fpreal getCompInsetScale(
int k);
186 fpreal getCompDistScale(
int k);
187 fpreal getCompTwistScale(
int k);
188 fpreal getCompDivsScale(
int k);
198 void cleanPrivateAttributes();
199 void computeOpenPolyNormals();
201 void buildPrimFront();
202 void buildEdgeFront(
bool generate_edge_polys);
204 void setupGroupsAndAttribs();
205 void copyEdgeGroupMembership();
211 void buildPrimExtrusionMaps();
213 void buildEdgeExtrusionMap();
214 void calculatePathNormals(
bool trivial);
216 void transformEdgeFront(
bool trivial);
236 void transformPrimFront(
bool trivial);
237 void insetPrimFront();
243 void bridgePrimComponents(
int batch_size = -1);
244 void bridgeEdgeComponents(
int batch_size = -1);
246 void buildPrimSeams();
247 void buildEdgeSeams();
249 void calcPrimLocalFrames();
250 void calcPrimCompLocalFrame(
int k);
252 void calcEdgeLocalFrames();
253 void calcEdgeCompLocalFrame(
int k);
255 void calcCenterAndNormal(
int component_id,
258 bool add_extrusion =
false,
259 bool collect_from_attributes =
false);
264 void updateAffectedNormals();
268 void fillOutputGroups();
270 fpreal getRescaleFactor()
const;
272 void buildHandleSpaceChangMat();
274 void saveEdgeGroupToDetailArray(
const GA_EdgeGroup *grp,
275 const char *attrib_name);
279 bool isFrontXformTrivial()
const;
282 int numCompFrontPts(
int k)
283 {
return (myCompFrontFirstPt(k + 1) -
284 myCompFrontFirstPt(k)); }
288 {
return myFrontPts(myCompFrontFirstPt(k) + i); }
291 int numCompFrontPrims(
int k)
292 {
return (myCompFrontFirstPrim(k + 1) -
293 myCompFrontFirstPrim(k)); }
297 {
return myFrontPrims(myCompFrontFirstPrim(k) + i); }
302 int frontPtIdx(
int k,
int i)
303 {
return (myCompFrontFirstPt(k) + i); }
307 {
return myFrontPtExtrusion(frontPtIdx(k, i)); }
311 {
return myFrontPtPathNormal(frontPtIdx(k, i)); }
316 int frontBdIdx(
int k,
int j)
317 {
return (myCompFrontFirstBd(k) + j); }
321 int frontBdVtxIdx(
int j,
int i)
322 {
return (myFrontBdFirstVtx(j) + i); }
327 {
return myFrontBdVtxs(i); }
332 {
return myFrontBdVtxs(frontBdVtxIdx(j, i)); }
336 GA_Offset &compFrontBdVtx(
int k,
int j,
int i)
337 {
return frontBdVtx(frontBdIdx(k, j), i); }
342 {
return int(myCompFrontFirstBd.size() - 1); }
346 int numCompFrontBds(
int k)
347 {
return (myCompFrontFirstBd(k + 1)
348 - myCompFrontFirstBd(k)); }
352 {
return int(myFrontBdVtxs.size()); }
356 int numFrontBdVtxs(
int j)
357 {
return (myFrontBdFirstVtx(j + 1)
358 - myFrontBdFirstVtx(j)); }
362 int numCompFrontBdVtxs(
int k,
int j)
363 {
return numFrontBdVtxs(frontBdIdx(k, j)); }
368 {
return GA_Offset(myFrontToBackVtxMap.get(v)); }
373 {
return GA_Offset(myFrontToBackPtMap.get(pt)); }
377 int bdComp(
int j) {
return myBdComp(j); }
381 bool isFrontCompClosed(
int k)
382 {
return myFrontCompClosed.getBitFast(k); }
386 {
return myHip->srcPoint(h); }
390 {
return myHip->dstPoint(h); }
394 {
return myHip->srcVertex(h); }
398 {
return myHip->dstVertex(h); }
402 {
return myGdp->vertexPrimitive(vtx); }
407 {
return myHip->findHedgeWithEndpoints(p0, p1); }
411 {
return myHip->sym(h); }
415 {
return myHip->lnext(h); }
419 {
return myHip->lprev(h); }
423 {
return { myGdp->getPos3(pt) }; }
427 {
return myHip->isValidHedge(h); }
431 {
return { myPointNormal.get(pt) }; }
435 {
return { myPolyNormal.get(pt) }; }
462 fpreal myDeviationToleranceCos = 0.984807753012208;
463 fpreal mySrcMagnitude = 1.0;
464 fpreal myDstMagnitude = 1.0;
465 fpreal mySrcStiffness = 1.0;
466 fpreal myDstStiffness = 1.0;
467 fpreal myExtSpineSrcBlend, myExtSpineDstBlend;
472 PolyPatches *myPolyPatches =
nullptr;
473 EdgePaths *myEdgePaths =
nullptr;
498 int myNumFrontPts = 0;
500 MorphMethod myMorphMethod = MorphMethod::LINEAR;
502 bool myOutputFront =
true;
503 bool myOutputBack =
false;
504 bool myReverseBack =
true;
505 bool myOutputSide =
true;
506 bool myStraightSpine =
true;
507 bool myReverseSpine =
false;
508 bool myUseExistingNormal =
false;
509 bool myCopyPtGrps =
true;
510 bool myCopyPrimGrps =
true;
512 bool myAddVertexNormal =
false;
513 bool myCuspFront =
true;
514 bool myCuspBack =
true;
516 bool myWranglePt =
false;
517 bool myWranglePrim =
false;
518 bool myWrangleVtx =
false;
520 bool myXformIsTrivial =
true;
521 bool myTrivialNormal =
true;
523 bool myLimitInset =
true;
524 bool myCommonInsetLimit =
true;
526 fpreal myCuspAngleDegrees = 60.06;
531 fpreal myThicknessScale = 1.0;
533 UT_Ramp *myTwistRamp =
nullptr;
534 UT_Ramp *myThicknessRamp =
nullptr;
536 const GEO_Face *myExternalSpine =
nullptr;
540 fpreal mySpineStart = 0.0;
542 fpreal myAxialRotation = 0.0;
562 int myNumComponents = 0;
563 int myNumCompBoundaries = 0;
565 SpineSampleMethod mySpineSampleMethod;
572 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)