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) }; }
 
  461     fpreal               myDeviationToleranceCos        = 0.984807753012208;
 
  462     fpreal               mySrcMagnitude                 = 1.0;
 
  463     fpreal               myDstMagnitude                 = 1.0;
 
  464     fpreal               mySrcStiffness                 = 1.0;
 
  465     fpreal               myDstStiffness                 = 1.0;
 
  466     fpreal               myExtSpineSrcBlend, myExtSpineDstBlend;
 
  471     PolyPatches         *myPolyPatches                  = 
nullptr;
 
  472     EdgePaths           *myEdgePaths                    = 
nullptr;
 
  497     int                  myNumFrontPts                  = 0;
 
  499     MorphMethod          myMorphMethod                  = MorphMethod::LINEAR;
 
  501     bool                 myOutputFront                  = 
true;
 
  502     bool                 myOutputBack                   = 
false;
 
  503     bool                 myReverseBack                  = 
true;
 
  504     bool                 myOutputSide                   = 
true;
 
  505     bool                 myStraightSpine                = 
true;
 
  506     bool                 myReverseSpine                 = 
false;
 
  507     bool                 myUseExistingNormal            = 
false;
 
  509     bool                 myAddVertexNormal              = 
false;
 
  510     bool                 myCuspFront                    = 
true;
 
  511     bool                 myCuspBack                     = 
true;
 
  513     bool                 myWranglePt                    = 
false;
 
  514     bool                 myWranglePrim                  = 
false;
 
  515     bool                 myWrangleVtx                   = 
false;
 
  517     bool                 myXformIsTrivial               = 
true;
 
  518     bool                 myTrivialNormal                = 
true;
 
  520     bool                 myLimitInset                   = 
true;
 
  521     bool                 myCommonInsetLimit             = 
true;
 
  523     fpreal               myCuspAngleDegrees             = 60.06;
 
  528     fpreal               myThicknessScale               = 1.0;
 
  530     UT_Ramp             *myTwistRamp                    = 
nullptr;
 
  531     UT_Ramp             *myThicknessRamp                = 
nullptr;
 
  533     const  GEO_Face     *myExternalSpine                = 
nullptr;
 
  537     fpreal               mySpineStart                   = 0.0;
 
  539     fpreal               myAxialRotation                = 0.0;
 
  559     int                  myNumComponents                = 0;
 
  560     int                  myNumCompBoundaries            = 0;
 
  562     SpineSampleMethod    mySpineSampleMethod;
 
  569     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)