12 #ifndef __GEO_Detail_h__
13 #define __GEO_Detail_h__
71 namespace GA_PrimCompat {
class TypeMask; }
86 template<
typename T,
bool B>
class GA_EdgeT;
94 #define GEO_STD_ATTRIB_POSITION "P"
95 #define GEO_STD_ATTRIB_NORMAL "N"
96 #define GEO_STD_ATTRIB_TEXTURE "uv"
97 #define GEO_STD_ATTRIB_VELOCITY "v"
98 #define GEO_STD_ATTRIB_ANGULAR_VELOCITY "w"
99 #define GEO_STD_ATTRIB_MATERIAL "shop_materialpath"
100 #define GEO_STD_ATTRIB_OGLSHOP "ogl_shop"
101 #define GEO_STD_ATTRIB_DIFFUSE "Cd"
102 #define GEO_STD_ATTRIB_ALPHA "Alpha"
103 #define GEO_STD_ATTRIB_COM "com"
104 #define GEO_STD_ATTRIB_DISTANCE "dist"
105 #define GEO_STD_ATTRIB_LOD "lod"
106 #define GEO_STD_ATTRIB_REST "rest"
107 #define GEO_STD_ATTRIB_MASS "mass"
108 #define GEO_STD_ATTRIB_DRAG "drag"
109 #define GEO_STD_ATTRIB_TENSION "tension"
110 #define GEO_STD_ATTRIB_SPRINGK "springk"
111 #define GEO_STD_ATTRIB_LIFE "life"
112 #define GEO_STD_ATTRIB_AGE "age"
113 #define GEO_STD_ATTRIB_DIST "dist"
114 #define GEO_STD_ATTRIB_UP "up"
115 #define GEO_STD_ATTRIB_ORIENT "orient"
116 #define GEO_STD_ATTRIB_ID "id"
117 #define GEO_STD_ATTRIB_PSCALE "pscale"
118 #define GEO_STD_ATTRIB_CREASE "creaseweight"
119 #define GEO_STD_ATTRIB_AREA "area"
120 #define GEO_STD_ATTRIB_PERIMETER "perimeter"
121 #define GEO_STD_ATTRIB_WIDTH "width"
122 #define GEO_STD_ATTRIB_LAYERMERGE "layermerge"
123 #define GEO_STD_ATTRIB_SEGS "segs"
124 #define GEO_STD_ATTRIB_DIV "div"
125 #define GEO_STD_ATTRIB_LAGE "lage"
126 #define GEO_STD_ATTRIB_ARC "arc"
127 #define GEO_STD_ATTRIB_GEN "gen"
128 #define GEO_STD_ATTRIB_TUBECAPTURE "tubeCapt"
129 #define GEO_STD_ATTRIB_PNT_CAPTURE_ALPHA "pCaptAlpha"
130 #define GEO_STD_ATTRIB_PNT_CAPTURE_PATH "pCaptPath"
131 #define GEO_STD_ATTRIB_PNT_CAPTURE_DATA "pCaptData"
132 #define GEO_STD_ATTRIB_CAPTUREFRAME "pCaptFrame"
133 #define GEO_STD_ATTRIB_CAPT_SKELROOT "pCaptSkelRoot"
134 #define GEO_STD_ATTRIB_CLOTH_CAPT "clothCapt"
135 #define GEO_STD_ATTRIB_WIRE_CAPT_U "wireCaptU"
136 #define GEO_STD_ATTRIB_WIRE_CAPT_V "wireCaptV"
137 #define GEO_STD_ATTRIB_WIRE_CAPT_PRIMU "wireCaptPrimU"
138 #define GEO_STD_ATTRIB_META_CAPT_FRAME "metaCaptFrame"
139 #define GEO_STD_ATTRIB_META_CAPT_GROUPS "metaCaptGroups"
140 #define GEO_STD_ATTRIB_META_CAPT_ROOT "metaCaptRoot"
141 #define GEO_STD_ATTRIB_META_CAPT_PATHS "metaCaptPaths"
142 #define GEO_STD_ATTRIB_META_CAPT_DATA "metaCaptData"
143 #define GEO_STD_ATTRIB_META_CAPT_GROUP_MAP "metaCaptGroupMap"
144 #define GEO_STD_ATTRIB_META_SLIDE "slideModifier"
145 #define GEO_STD_ATTRIB_INFLATE_MODIFIER "inflatemodifier"
146 #define GEO_STD_ATTRIB_MUSCLE_REST_ANCHOR "restAnchor"
147 #define GEO_STD_ATTRIB_MUSCLE_REST_XFORMS "restTransforms"
148 #define GEO_STD_ATTRIB_MUSCLE_INFLATE_NORM "muscleInflateNormal"
149 #define GEO_STD_ATTRIB_MUSCLE_POSITION_BIAS "positionbiasvalues"
150 #define GEO_STD_ATTRIB_MUSCLE_CAPT_NAMES "muscleCaptNames"
151 #define GEO_STD_ATTRIB_RIXLATE "rixlate"
152 #define GEO_STD_ATTRIB_DEFORM_SKIN_METHOD "deformSkinMethod"
153 #define GEO_STD_ATTRIB_DEFORM_DUAL_QUATERNION_BLEND_ATTRIB "deformDualQuaternionBlendAttrib"
154 #define GEO_STD_ATTRIB_DEFORM_TRANSFORMS_PATH "deformTransformsPath"
155 #define GEO_STD_ATTRIB_DEFORM_TRANSFORM_REGIONS_PATH "deformTransformRegionsPath"
156 #define GEO_STD_ATTRIB_DEFORM_TRANSFORM_TARGETS_PATH "deformTransformTargetsPath"
157 #define GEO_STD_ATTRIB_POSE_SHAPE_EXAMPLE_PATH "poseShapeExamplePath"
158 #define GEO_STD_ATTRIB_SHAPE_DIFF_METHOD "shapeDiffMethod"
159 #define GEO_STD_ATTRIB_SHAPE_DIFF_ORIENT_ATTRIB "shapeDiffOrientAttrib"
160 #define GEO_STD_ATTRIB_SHAPE_DIFF_TRANSFORM_ATTRIB "shapeDiffTransformAttrib"
161 #define GEO_STD_ATTRIB_STASH_POSE_PATH "stashPosePath"
252 bool full_topology=
true);
295 bool mergePrimGroup =
true,
296 bool insertPrimsAtHead=
false,
297 bool keep_internal_groups =
true,
310 bool merge_groups =
true,
311 bool keep_internal_groups =
true);
329 bool this_parameter_is_ignored =
true,
330 bool keep_internal_groups =
true,
333 void collapseIndexAttributes();
341 template<
typename FLOAT_T>
345 bool keep_vector_lengths =
true,
346 bool check_pasting =
true,
347 bool neg_determinant_flip_vector =
true,
348 bool update_ptnormals =
false,
350 bool updateaffectednormals =
false,
351 const char *attribpattern =
nullptr);
354 template<
typename FLOAT_T>
359 bool keep_vector_lengths =
true,
360 bool check_pasting =
true,
361 bool neg_determinant_flip_vector =
true,
362 bool update_ptnormals =
false,
364 bool updateaffectednormals =
false,
365 const char *attribpattern =
nullptr);
373 template<
typename FLOAT_T>
378 bool keep_vector_lengths =
true,
379 bool check_pasting =
true,
380 bool neg_determinant_flipvector =
true,
381 bool update_ptnormals =
false,
383 bool updateaffectednormals =
false,
384 const char *attribpattern =
nullptr);
388 template<
typename FLOAT_T>
393 bool keep_vector_lengths =
true,
394 bool check_pasting =
true,
395 bool neg_determinant_flipvector =
true,
396 bool update_ptnormals =
false,
398 bool updateaffectednormals =
false,
399 const char *attribpattern =
nullptr);
402 template<
typename FLOAT_T>
406 bool check_pasting =
true,
407 bool update_ptnormals =
false,
409 bool updateaffectednormals =
false,
410 const char *attribpattern =
nullptr);
414 template<
typename FLOAT_T>
418 bool keep_vector_lengths =
true,
419 bool check_pasting =
true,
420 bool neg_determinant_flipvector =
true,
421 bool update_ptnormals =
false,
423 bool updateaffectednormals =
false,
424 const char *attribpattern =
nullptr);
427 template<
typename FLOAT_T>
432 bool keep_vector_lengths =
true,
433 bool check_pasting =
true,
434 bool neg_determinant_flipvector =
true,
435 bool update_ptnormals =
false,
437 bool updateaffectednormals =
false,
438 const char *attribpattern =
nullptr);
442 template <
typename FLOAT_T,
bool INVERT=false>
443 void transformPointsByAttribute(
446 bool keep_vector_lengths =
true,
447 bool updateaffectednormals =
true,
448 const char *attribpattern =
nullptr);
452 template <
typename FLOAT_T,
bool INVERT=false>
453 void transformPointsByAttribute(
456 bool keep_vector_lengths =
true,
457 bool updateaffectednormals =
true,
458 const char *attribpattern =
nullptr);
462 template <
typename FLOAT_T,
bool INVERT=false>
463 void transformPointsByAttribute(
466 bool keep_vector_lengths =
true,
467 bool updateaffectednormals =
true,
468 const char *attribpattern =
nullptr);
472 template <
typename FLOAT_T,
bool INVERT=false>
473 void translatePointsByAttribute(
476 bool keep_vector_lengths =
true,
477 bool updateaffectednormals =
true,
478 const char *attribpattern =
nullptr);
481 template<
typename FLOAT_T>
484 bool check_pasting =
true,
485 bool update_ptnormals =
false,
487 bool updateaffectednormals =
false,
488 const char *attribpattern =
nullptr);
493 template<
typename FLOAT_T>
498 bool keep_vector_lengths =
true,
499 bool check_pasting =
true,
500 bool neg_determinant_flipvector =
true,
501 bool update_ptnormals =
false,
503 bool updateaffectednormals =
false,
504 const char *attribpattern =
nullptr);
507 template<
typename FLOAT_T>
510 bool check_pasting =
true,
511 bool update_ptnormals =
false,
513 bool updateaffectednormals =
false,
514 const char *attribpattern =
nullptr);
518 template<
typename FLOAT_T>
522 bool update_ptnormals =
false,
524 bool updateaffectednormals =
false,
525 const char *attribpattern =
nullptr);
528 template<
typename FLOAT_T>
531 bool update_ptnormals =
false,
533 bool updateaffectednormals =
false,
534 const char *attribpattern =
nullptr);
539 template<
typename FLOAT_T>
543 bool keep_vector_lengths =
true,
544 bool check_pasting =
true,
545 bool neg_determinant_flipvector =
true,
548 bool update_ptnormals =
false,
550 bool updateaffectednormals =
false,
551 const char *attribpattern =
nullptr);
554 template<
typename FLOAT_T>
557 bool check_pasting =
true,
559 bool update_ptnormals =
false,
561 bool updateaffectednormals =
false,
562 const char *attribpattern =
nullptr);
564 void visualizeSoftPoints(
const GEO_Rolloff &rolloff,
577 && myTol == other.
myTol;
582 return !(*
this == other);
596 void computeSoftPointFalloff(
597 const bool connected,
650 void normalTranslatePoints(
float length = 1.0F,
651 int check_pasting = 1,
653 int update_ptnormals = 0,
655 bool updateaffectednormals =
false,
657 const bool normalize_attrib =
false,
659 void normalTranslatePrimitives(
float length = 1.0F,
660 int check_pasting = 1,
662 int update_ptnormals = 0,
664 bool updateaffectednormals =
false,
666 const bool normalize_attrib =
false,
669 float length = 1.0F,
int check_pasting = 1,
670 int update_ptnormals = 0,
672 bool updateaffectednormals =
false,
674 const bool normalize_attrib =
false,
677 float length = 1.0F,
int check_pasting = 1,
678 int update_ptnormals = 0,
680 bool updateaffectednormals =
false,
682 const bool normalize_attrib =
false,
685 float length = 1.0F,
int check_pasting = 1,
686 int update_ptnormals = 0,
688 bool updateaffectednormals =
false,
690 const bool normalize_attrib =
false,
693 float length = 1.0F,
int check_pasting = 1,
694 int update_ptnormals = 0,
696 bool updateaffectednormals =
false,
698 void normalTranslateGroup(
const GA_Group &grp,
699 float length = 1.0F,
int check_pasting = 1,
700 int update_ptnormals = 0,
702 bool updateaffectednormals =
false,
704 const bool normalize_attrib =
false,
712 void updateAffectedNormals(
const GA_Range &ptrange,
714 bool allsametransform =
false);
719 template<
typename FLOAT_T>
724 bool keep_vector_lengths =
true,
725 bool check_pasting =
true,
726 bool neg_determinant_flipvector =
true,
727 bool update_ptnormals =
false,
729 bool updateaffectednormals =
false);
733 template<
typename FLOAT_T>
738 bool keep_vector_lengths =
true,
739 bool check_pasting =
true,
740 bool neg_determinant_flipvector =
true,
741 bool update_ptnormals =
false,
743 bool updateaffectednormals =
false,
749 template<
typename FLOAT_T>
754 bool keep_vector_lengths =
true,
755 bool check_pasting =
true,
756 bool neg_determinant_flipvector =
true,
757 bool update_ptnormals =
false,
759 bool updateaffectednormals =
false,
766 template<
typename FLOAT_T>
770 bool keep_vector_lengths =
true,
771 bool check_pasting =
true,
772 bool neg_determinant_flipvector =
true,
775 bool update_ptnormals =
false,
777 bool updateaffectednormals =
false,
783 template <
typename FLOAT_T>
800 : myFwdVector(forward), myUpVector(up), myType(
Type::LOOKAT),
801 myPivotSpace(pivot_space) {}
809 : myOrient(orient), myOrigin(origin), myType(
Type::ORIENT),
810 myPivotSpace(pivot_space) {}
829 template<
typename FLT>
834 FLT tx, FLT ty, FLT tz,
835 FLT rx, FLT ry, FLT rz,
836 FLT sx, FLT sy, FLT sz,
837 FLT s_xy, FLT s_xz, FLT s_yz,
838 FLT px, FLT
py, FLT pz,
839 FLT prx, FLT pry, FLT prz);
851 void softTransformPoints(
853 float tx,
float ty,
float tz,
854 float rx,
float ry,
float rz,
855 float sx,
float sy,
float sz,
856 float s_xy,
float s_xz,
float s_yz,
857 float px,
float py,
float pz,
858 float prx,
float pry,
float prz,
863 int keep_vector_lengths = 1,
864 int check_pasting = 1,
865 int neg_determinant_flipvector = 1,
866 int update_ptnormals = 0,
868 bool updateaffectednormals =
false,
869 const char *attribpattern =
nullptr,
871 bool *falloff_written =
nullptr);
872 void softTransformEdges(
874 float tx,
float ty,
float tz,
875 float rx,
float ry,
float rz,
876 float sx,
float sy,
float sz,
877 float s_xy,
float s_xz,
float s_yz,
878 float px,
float py,
float pz,
879 float prx,
float pry,
float prz,
884 int keep_vector_lengths = 1,
885 int check_pasting = 1,
886 int neg_determinant_flipvector = 1,
887 int update_ptnormals = 0,
889 bool updateaffectednormals =
false,
890 const char *attribpattern =
nullptr,
892 bool *falloff_written =
nullptr);
894 void softTransformPoints(
897 float tx,
float ty,
float tz,
898 float rx,
float ry,
float rz,
899 float sx,
float sy,
float sz,
900 float s_xy,
float s_xz,
float s_yz,
901 float px,
float py,
float pz,
902 float prx,
float pry,
float prz,
907 int keep_vector_lengths = 1,
908 int check_pasting = 1,
909 int neg_determinant_flipvector = 1,
910 int update_ptnormals = 0,
912 bool updateaffectednormals =
false,
913 const char *attribpattern =
nullptr,
915 bool *falloff_written =
nullptr);
916 void softTransformEdges(
919 float tx,
float ty,
float tz,
920 float rx,
float ry,
float rz,
921 float sx,
float sy,
float sz,
922 float s_xy,
float s_xz,
float s_yz,
923 float px,
float py,
float pz,
924 float prx,
float pry,
float prz,
929 int keep_vector_lengths = 1,
930 int check_pasting = 1,
931 int neg_determinant_flipvector = 1,
932 int update_ptnormals = 0,
934 bool updateaffectednormals =
false,
935 const char *attribpattern =
nullptr,
937 bool *falloff_written =
nullptr);
949 void softTranslatePoints(
954 int check_pasting = 1,
955 int update_ptnormals = 0,
957 bool updateaffectednormals =
false,
958 const char *attribpattern =
nullptr,
960 bool *falloff_written =
nullptr);
961 void softTranslateEdges(
966 int check_pasting = 1,
967 int update_ptnormals = 0,
969 bool updateaffectednormals =
false,
970 const char *attribpattern =
nullptr,
972 bool *falloff_written =
nullptr);
984 void softNormalTranslatePoints(
989 int along_lead_normal = 1,
990 int check_pasting = 1,
991 int update_ptnormals = 0,
993 bool updateaffectednormals =
false,
995 bool *falloff_written =
nullptr);
1004 void normal(
UT_Vector3Array &output,
bool use_internaln =
true)
const;
1028 &getPointCaptureAttribName(CaptureType
type);
1033 static const char *getPointCaptureIndexPropertyName(CaptureType
type);
1038 &getPointCaptureFrameAttribName(CaptureType
type);
1043 &getPointCaptureRootAttribName(CaptureType
type);
1048 static const char *getPointCaptureDataPropertyName(CaptureType
type);
1052 bool getCaptureRegionRootPath(
UT_String &root_path,
1053 CaptureType
t = CAPTURE_BONE)
const;
1054 bool setCaptureRegionRootPath(
const UT_String &root_path,
1055 CaptureType
t = CAPTURE_BONE);
1059 int getCaptureRegionIndex(
const UT_String &cregion_name,
1060 CaptureType
t = CAPTURE_BONE);
1065 int addCaptureRegion(
const UT_String &cregion_name,
1068 int addCaptureRegion(
const UT_String &cregion_name,
1069 const UT_Matrix4 &xform,
float tcap,
float bcap,
1070 float taperx,
float taperz);
1074 int addCaptureRegion(
const UT_String &cregion_name,
1079 int removeCaptureRegion(
const UT_String &cregion_name,
1080 CaptureType
t = CAPTURE_BONE);
1083 void setCaptureWeight(
int cregion_index,
float weight,
1086 bool add_weight =
false,
1087 bool clamp_negative =
false,
1088 bool normalizeweight =
false,
1089 CaptureType
t = CAPTURE_BONE);
1092 void setCaptureWeight(
int cregion_index,
float weight,
1095 bool add_weight =
false,
1096 bool clamp_negative =
false,
1097 bool normalizeweight =
false,
1098 CaptureType
t = CAPTURE_BONE);
1101 float getCaptureWeight(
int cregion_index,
GA_Offset ptoff,
1102 CaptureType
t = CAPTURE_BONE)
const;
1111 CaptureType
t = CAPTURE_BONE)
const;
1112 void clearCaptureWeights(
GA_Offset ptoff,
1113 CaptureType
t = CAPTURE_BONE);
1122 void colorPointsByCaptureWeight(
1125 CaptureType
t = CAPTURE_BONE,
1126 VisualizationType vistype = VISTYPE_MULTIPLE,
1131 void colorPointsByCaptureWeight(
1135 VisualizationType vistype,
1139 void normalizeCaptureWeights(
const GA_PointGroup *ptgroup =
nullptr,
1140 CaptureType
t = CAPTURE_BONE,
1147 void clampCaptureWeights(
const GA_PointGroup *ptgroup =
nullptr,
1148 bool clamp_low_flag =
true,
1149 float low_threshold = 0.0
f,
float low_val = 0.0
f,
1150 bool clamp_hi_flag =
false,
1151 float hi_threshold = 1.0
f,
float hi_val = 1.0
f,
1155 void normalizeRelativeCaptureWeights(
int idx,
GA_Offset ptoff,
1179 {
return insertPointCopy(src, wrangler); }
1183 {
return insertPointCopy(src); }
1203 getPrimitive(primoff));
1222 getPrimitiveByIndex(idx));
1229 getPrimitiveByIndex(idx));
1239 {
return destroyPoints(range,
mode); }
1241 {
return destroyPrimitives(range, and_points); }
1243 {
return destroyPrimitive(prim, and_points); }
1266 bool and_points =
false);
1269 bool and_points =
false);
1289 bool getVisibleBBox(
1296 bool accurate_bounds =
false)
const;
1307 bool getPointBSphere(
1310 bool accurate_bounds =
false)
const;
1325 bool getEdgeBSphere(
1328 bool accurate_bounds =
false)
const;
1329 bool getBreakpointBBox(
1332 bool getBreakpointBBox(
1336 bool getBreakpointBSphere(
1339 bool accurate_bounds =
false)
const;
1347 bool getGroupBSphere(
1350 bool accurate_bounds)
const;
1354 bool getPointAttribBBox(
1358 bool getPointAttribBBox(
1362 bool getPointAttribBBox(
1366 bool getPointAttribBBox(
1375 template <
typename T>
1376 bool getPointAttribCentroid(
1381 bool getPointAttribGroupBBox(
1386 bool getVertexAttribBBox(
1390 bool getVertexAttribBBox(
1394 bool getVertexAttribBBox(
1398 bool getVertexAttribBBox(
1402 bool getVertexAttribGroupBBox(
1415 void copyPointVertexAttributes(
GEO_Vertex dest,
1417 bool copy_point_P = true) const;
1418 void copyPointVertexAttributes(
1422 void copyPointVertexAttributes(
1428 copyVertex(dest_vtx, src_vtx, vertex_wrangler,
1429 point_wrangler, copy_point_P);
1440 copyVertex(dest_vtx, src_vtx, vertex_wrangler,
1457 int shallow = 0) const;
1491 void fixSplineWeights();
1527 GA_Attribute *addCaptureFrameAttribute(CaptureType
t = CAPTURE_BONE,
1555 GA_Attribute *addPointCaptureAttribute(geo_NPairs n_pairs,
1556 CaptureType
t = CAPTURE_BONE,
1561 GA_Attribute *addPointCaptureAlphaAttribute(
float dflt,
1591 const GA_Attribute *findInternalNormalAttribute()
const;
1597 CaptureType
t = CAPTURE_BONE)
const;
1599 CaptureType
t = CAPTURE_BONE);
1602 const GA_Attribute *findCaptureSkelRootAttribute(CaptureType
t
1603 = CAPTURE_BONE)
const;
1610 CaptureType
t = CAPTURE_BONE)
const;
1612 CaptureType
t = CAPTURE_BONE);
1614 const GA_Attribute *findPointCaptureAlphaAttribute()
const;
1622 void destroyInternalNormalAttribute();
1631 void destroyTubeCaptureAttribute();
1634 void destroyCaptureFrameAttribute(CaptureType
t
1638 void destroyCaptureSkelRootAttribute(CaptureType
t
1643 void destroyPointCaptureAttribute(CaptureType
t =
1647 void destroyPointCaptureAlphaAttribute();
1654 bool getMetaRestAnchorPath(
UT_String &anchorPath)
const;
1671 int layer = -1)
const;
1672 int getAttributeLayer(
const char* attr_name)
const;
1674 static GA_TypeInfo getStdAttributeTypeInfo(
const char *
name,
int floattuplesize);
1677 int getCurrentLayer()
const;
1678 void setCurrentLayer(
int layer);
1679 void setNumLayers(
int numlayer);
1680 int getNumLayers()
const;
1682 void setLayerMerge(
int preclear,
int mask,
int srcblend,
1684 void getLayerMerge(
int &preclear,
int &
mask,
int &srcblend,
1685 int &dstblend)
const;
1687 void addVariableName(
const char *attr,
const char *varname);
1689 { addVariableName(0, varname); }
1695 void traverseVariableNames(
int (*
function)(
const char *attr,
1696 const char *varname,
void *
data),
1700 GA_Attribute *growPointCaptureAttribute(geo_NPairs num_added_pairs,
1701 CaptureType
t = CAPTURE_BONE);
1706 return getAttributes().cloneAttribute(
1718 creation_args, attribute_options,attribtype);
1727 creation_args, attribute_options,attribtype);
1735 {
return findPointAttribute(src.
getScope(),
1739 {
return findPointAttribute(src.
getScope(),
1777 return getAttributes().cloneAttribute(
1788 creation_args, attribute_options,attribtype);
1797 creation_args, attribute_options,attribtype);
1805 {
return findVertexAttribute(src.
getScope(),
1809 {
return findVertexAttribute(src.
getScope(),
1847 return getAttributes().cloneAttribute(
1858 n, creation_args, attribute_options,attribtype);
1867 creation_args, attribute_options,attribtype);
1875 {
return findPrimitiveAttribute(src.
getScope(),
1879 {
return findPrimitiveAttribute(src.
getScope(),
1902 return getAttributes().cloneAttribute(
1914 creation_args, attribute_options,attribtype);
1923 creation_args, attribute_options,attribtype);
1928 {
return findGlobalAttribute(src.
getScope(),
1932 {
return findGlobalAttribute(src.
getScope(),
1960 {
return getAttributes().getDict(
1964 {
return getAttributes().getDict(
1968 {
return getAttributes().getDict(
1972 {
return getAttributes().getDict(
1978 bool hasMetaPrimitives()
const;
1979 bool hasPastedPrimitives()
const;
1980 bool hasQuadricPrimitives()
const;
1981 bool hasParticlePrimitives()
const;
1982 bool hasVolumePrimitives()
const;
1983 bool hasChannelPrimitives()
const;
1984 bool hasTransformingPrimitives()
const;
1988 bool hasCustomPrimitives()
const;
1991 GA_Size getPastedCount()
const;
1992 GA_Size getQuadricCount()
const;
1993 GA_Size getParticleCount()
const;
1994 GA_Size getVolumeCount()
const;
2001 bool mergeCaptureProperties(
2027 const
char *attrib_name) const;
2030 const
char *attrib_name);
2072 GA_Size getPointGroupAdjacentToPrimitiveGroup(
2075 GA_Size getPointGroupAdjacentToPrimitiveRange(
2078 GA_Size getVertexGroupAdjacentToPrimitiveGroup(
2081 GA_Size getVertexGroupAdjacentToPrimitiveRange(
2087 struct AdjacentPolygonData
2092 {
return myAdjacentPolygon == pad.myAdjacentPolygon; }
2094 {
return myAdjacentPolygon < pad.myAdjacentPolygon; }
2143 const GEO_Primitive *findPrimitiveByName(
const char *nametomatch,
2146 const char *nameattrib=
"name",
2147 int matchnumber = 0)
const;
2151 const char *nameattrib=
"name",
2152 int matchnumber = 0);
2155 void findAllPrimitivesByName(
2157 const char *nametomatch,
2160 const char *nameattrib=
"name")
const;
2161 void findAllPrimitivesByName(
2163 const char *nametomatch,
2166 const char *nameattrib=
"name");
2175 { destroyElementGroup(g); }
2177 { destroyElementGroup(g); }
2179 { destroyElementGroup(g); }
2202 bool override =
true);
2205 bool override =
true);
2209 bool override =
true);
2212 bool override =
true);
2218 GA_Size localIntrinsicTupleSize(
2234 const char *
value)
override;
2260 bool convertIndexPairDataFromH9();
2261 bool convertIndexPairDataToH9();
2263 template<
typename FLOAT_T>
2268 bool keep_vector_lengths,
2270 bool neg_determinant_flipvector,
2271 bool update_ptnormals,
2273 bool updateaffectednormals,
2274 const char *attribpattern);
2279 bool override =
true);
2320 int min_size=1,
int max_size=-1)
const;
2324 int min_size=1,
int max_size=-1)
const
2327 min_size, max_size);
2332 int min_size=1,
int max_size=-1);
2336 int min_size=1,
int max_size=-1)
2339 min_size, max_size);
2344 int min_size=1,
int max_size=-1)
const;
2348 int min_size=1,
int max_size=-1)
const
2351 min_size, max_size);
2356 int min_size=1,
int max_size=-1);
2360 int min_size=1,
int max_size=-1)
2363 min_size, max_size);
2369 int min_size=1,
int max_size=-1)
const;
2373 int min_size=1,
int max_size=-1)
const
2376 name, min_size, max_size);
2382 int min_size=1,
int max_size=-1);
2386 int min_size=1,
int max_size=-1)
2389 name, min_size, max_size);
2394 int min_size=1,
int max_size=-1)
const;
2398 int min_size=1,
int max_size=-1)
const
2401 name, min_size, max_size);
2406 int min_size=1,
int max_size=-1);
2410 int min_size=1,
int max_size=-1)
2413 name, min_size, max_size);
2419 int min_size=1,
int max_size=-1)
const;
2423 int min_size=1,
int max_size=-1)
const
2426 name, min_size, max_size);
2431 int min_size=1,
int max_size=-1);
2435 int min_size=1,
int max_size=-1)
2438 name, min_size, max_size);
2462 int min_size=1,
int max_size=-1)
const;
2466 int min_size=1,
int max_size=-1)
const
2469 min_size, max_size);
2474 int min_size=1,
int max_size=-1);
2478 int min_size=1,
int max_size=-1)
2481 min_size, max_size);
2486 int min_size=1,
int max_size=-1)
const;
2490 int min_size=1,
int max_size=-1)
const
2493 min_size, max_size);
2498 int min_size=1,
int max_size=-1);
2502 int min_size=1,
int max_size=-1)
2505 min_size, max_size);
2510 int min_size=1,
int max_size=-1)
const;
2514 int min_size=1,
int max_size=-1)
const
2517 min_size, max_size);
2522 int min_size=1,
int max_size=-1);
2526 int min_size=1,
int max_size=-1)
2529 min_size, max_size);
2534 int min_size=1,
int max_size=-1)
const;
2538 int min_size=1,
int max_size=-1)
const
2541 min_size, max_size);
2546 int min_size=1,
int max_size=-1);
2550 int min_size=1,
int max_size=-1)
2553 min_size, max_size);
2558 int min_size=1,
int max_size=-1)
const;
2562 int min_size=1,
int max_size=-1)
const
2565 min_size, max_size);
2570 int min_size=1,
int max_size=-1);
2574 int min_size=1,
int max_size=-1)
2577 min_size, max_size);
2619 return addTuple(storage,
2661 tuple_size, defaults,
2688 tuple_size, defaults,
2712 name, tuple_size, creation_args,
2713 attribute_options, reuse);
2734 name, tuple_size, creation_args,
2735 attribute_options, reuse);
2848 return ((
'P'<<24) + (
'G'<<16) + (
'E'<<8) +
'O');
2853 return ((
'B'<<24) + (
'g'<<16) + (
'e'<<8) +
'o');
2859 bool savePointsH9(std::ostream &os,
bool binary,
2863 bool saveExtraH9(std::ostream &os,
bool binary,
2873 os,
false,
nullptr);
2878 friend class GU_IOClassic;
2884 void privateComputeNormal(
2887 const float cuspangledegrees,
2888 const int method)
const override;
void destroyPrimitiveGroup(GA_PrimitiveGroup *g)
virtual void clearCaches()
SYS_FORCE_INLINE GA_Attribute * addIntArray(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size=1, const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, GA_Storage storage=GA_STORE_INT32, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
SYS_FORCE_INLINE const GA_Attribute * findStringTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
Definition of a geometry attribute.
SYS_FORCE_INLINE GA_Attribute * addPointAttrib(const GA_Attribute *src)
SYS_FORCE_INLINE const GA_Attribute * findNumericArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
void incrementMetaCacheCount()
Specify when and how to reuse an existing attribute.
SYS_FORCE_INLINE const GA_Attribute * findPointVectorAttrib(GA_AttributeScope s, const UT_StringRef &n) const
Looks for a 3-float point attribute.
SYS_FORCE_INLINE GA_Attribute * findNumericTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
GLdouble GLdouble GLint GLint const GLdouble * points
SYS_FORCE_INLINE void destroyGlobalAttrib(GA_AttributeScope scope, const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
Axis-aligned bounding box (AABB).
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the and then *wait for them to all complete We provide a helper class
SYS_FORCE_INLINE void destroyPointAttrib(GA_AttributeScope scope, const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
SYS_FORCE_INLINE GA_Attribute * findIntTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
GEO_Capture_Bone_Property
Class which stores the default values for a GA_Attribute.
GEO_Capture_Cloth_Property
getFileOption("OpenEXR:storage") storage
SYS_FORCE_INLINE const GA_Attribute * findDictTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
SYS_FORCE_INLINE GA_Attribute * addDictArray(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size=1, const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, GA_Storage storage=GA_STORE_STRING, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
OIIO_UTIL_API bool copy(string_view from, string_view to, std::string &err)
#define SYS_DEPRECATED_PUSH_DISABLE()
#define SYS_DEPRECATED_POP_DISABLE()
SYS_FORCE_INLINE GA_Attribute * addPrimAttrib(const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
GLsizei const GLfloat * value
void clearAndDestroy()
Clear all the points/primitives out of this detail.
const GLuint GLenum const void * binary
SYS_FORCE_INLINE GA_Attribute * addTuple(GA_Storage storage, GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size, const GA_Defaults &defaults=GA_Defaults(0.0), const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
SYS_FORCE_INLINE GA_Attribute * addVertexAttrib(GA_AttributeScope scope, const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
SYS_FORCE_INLINE void destroyVertexAttrib(GA_AttributeScope scope, const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
bool deletePrimitive(GA_Primitive &prim, bool and_points=false)
SYS_FORCE_INLINE GA_Attribute * findGlobalAttrib(const GA_Attribute &src)
SYS_FORCE_INLINE GA_Attribute * findIndexPair(GA_AttributeOwner owner, const UT_StringRef &name)
GLboolean GLboolean GLboolean GLboolean a
SYS_FORCE_INLINE GA_AttributeScope getScope() const
GLuint GLsizei GLsizei * length
SYS_FORCE_INLINE GA_Attribute * findStringTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
Class used to map H9 geometry files to a form used by GA.
void destroyVertexGroup(GA_VertexGroup *g)
IOStatus saveClassic(const char *, const GA_SaveOptions *) const
**But if you need a result
SYS_FORCE_INLINE const GA_Attribute * findFloatTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
Standard user attribute level.
GA_Size deletePoints(const GA_Range &range, GA_DestroyPointMode mode=GA_LEAVE_PRIMITIVES)
static int binaryMagicH9()
Magic number for binary geometry files.
UT_Vector3T< FLOAT_T > myUpVector
GLfloat GLfloat GLfloat v2
SYS_FORCE_INLINE bool GAisValid(GA_Size v)
exint GA_Size
Defines the bit width for index and offset types in GA.
GA_Size deletePrimitives(const GA_Range &range, bool and_points=false)
virtual int64 getMemoryUsage(bool inclusive) const
Compute memory usage (includes all shared memory)
GEO_Capture_Wire_Property
GA_Offset appendPointCopy(GA_Offset src)
void removeVariableName(const char *varname)
A range of elements in an index-map.
GLenum GLuint GLint GLint layer
SYS_FORCE_INLINE const GA_Attribute * findVertexAttrib(const GA_Attribute &src) const
SYS_FORCE_INLINE GA_Attribute * findDictArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
SYS_FORCE_INLINE const UT_StringHolder & getName() const
A string map of attributes to ease backward compatibility In the GB/GEO/GU library code would often p...
SYS_FORCE_INLINE GEO_Primitive * getGEOPrimitive(GA_Offset primoff)
SYS_FORCE_INLINE GA_Attribute * addPrimAttrib(GA_AttributeScope scope, const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
SYS_FORCE_INLINE GA_Attribute * findPrimAttrib(const GA_Attribute &src)
SYS_FORCE_INLINE void destroyPrimAttrib(const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
SYS_FORCE_INLINE GA_Attribute * addVertexAttrib(const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
SYS_FORCE_INLINE const GEO_Primitive * getGEOPrimitive(GA_Offset off) const
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
UT_Array< EdgeAdjacencyData > GEO_EdgeAdjArray
SYS_FORCE_INLINE const GA_Attribute * findPointAttrib(const GA_Attribute &src) const
GLint GLint GLsizei GLint GLenum GLenum type
bool operator!=(const SoftSymmetryParms &other) const
UT_Matrix3T< FLOAT_T > myOrient
SYS_FORCE_INLINE GA_Attribute * addPrimAttrib(const GA_Attribute *src)
CaptureType
Methods for manipulating capture weights (GEO_CaptureWeight.C)
SYS_FORCE_INLINE GA_Attribute * findVertexAttrib(const GA_Attribute &src)
SYS_FORCE_INLINE const GA_Attribute * findGlobalAttrib(const GA_Attribute &src) const
UT_Array< PointAdjacencyData > GEO_PointAdjArray
Class used to keep track of inheritance of intrinsic attribute evaluation.
SYS_FORCE_INLINE GA_Attribute * addIntTuple(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size, const GA_Defaults &defaults=GA_Defaults(0), const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, GA_Storage storage=GA_STORE_INT32, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
friend std::ostream & operator<<(std::ostream &os, const GEO_Detail &d)
SYS_FORCE_INLINE bool promotePointAttrib(const UT_StringRef &name)
SYS_FORCE_INLINE GA_Attribute * addFloatArray(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size=1, const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, GA_Storage storage=GA_STORE_REAL32, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
SYS_FORCE_INLINE GA_Attribute * addGlobalAttrib(GA_AttributeScope scope, const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
UT_BoundingBoxT< float > UT_BoundingBox
SYS_FORCE_INLINE void destroyAttribute(GA_AttributeOwner owner, const UT_StringRef &name, const GA_AttributeFilter *filter=0)
SYS_FORCE_INLINE const GA_Attribute * findNumericTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
SYS_FORCE_INLINE GA_Offset appendPoint()
Append a new point, returning its new data offset.
SYS_FORCE_INLINE const GA_Attribute * findDictArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
SYS_FORCE_INLINE void destroyVertexAttrib(const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
Create macros which emulate the macros in the obsolete GB library.
SYS_FORCE_INLINE const GA_Attribute * findFloatArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
bool operator<(const GU_TetrahedronFacet &a, const GU_TetrahedronFacet &b)
GA_Offset myStartEdgePoint
GLdouble GLdouble GLint GLint order
A handle to simplify manipulation of multiple attributes.
SYS_FORCE_INLINE GA_Attribute * findFloatTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
SYS_FORCE_INLINE const GA_Attribute * findVertexVectorAttrib(GA_AttributeScope s, const UT_StringRef &n) const
Looks for a 3-float vertex attribute.
HUSD_API bool eval(VtValue &val, T &ret_val)
const GEO_Primitive * getGEOPrimitiveByIndex(GA_Index idx) const
GLuint const GLchar * name
#define SYS_DEPRECATED_HDK(__V__)
SYS_FORCE_INLINE GA_Attribute * addPointAttrib(const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
GEO_Primitive GB_MACRO_PRIM_TYPE
SYS_FORCE_INLINE void destroyPointAttrib(const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
SYS_FORCE_INLINE const GA_Attribute * findIndexPair(GA_AttributeOwner owner, const UT_StringRef &name) const
GA_Size GA_Index
Define the strictness of GA_Offset/GA_Index.
GA_API const UT_StringHolder transform
UT_Vector3T< FLOAT_T > myFwdVector
GA_API const UT_StringHolder orient
SYS_FORCE_INLINE GA_Attribute * growTuple(GA_AttributeOwner owner, const UT_StringRef &name, int added_size)
SYS_FORCE_INLINE GA_Attribute * findPointAttrib(const GA_Attribute &src)
SYS_FORCE_INLINE const GA_AttributeDict & attribs() const
bool destroyPointGroup(const char *name)
LocalXformContextT(const UT_Matrix3T< FLOAT_T > &orient, const UT_Vector3T< FLOAT_T > &origin, PivotSpace pivot_space)
SYS_FORCE_INLINE GA_Attribute * findFloatArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
GEO_Primitive * getGEOPrimitiveByIndex(GA_Index idx)
Contains transitional objects to provide some backward compatibility for code that references old GEO...
GEO_API const TypeMask GEOPRIMALL
SYS_FORCE_INLINE GA_Offset appendPointOffset()
A map of string to various well defined value types.
Class to return information about a GA_Detail.
GA_API const UT_StringHolder parms
SYS_FORCE_INLINE const GA_Attribute * findPrimAttrib(const GA_Attribute &src) const
SYS_FORCE_INLINE GA_Attribute * findStringArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
SYS_FORCE_INLINE GA_Attribute * findPointVectorAttrib(GA_AttributeScope s, const UT_StringRef &n)
SYS_FORCE_INLINE GA_Attribute * addGlobalAttrib(const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
SYS_FORCE_INLINE GA_Attribute * addDictTuple(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size, const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
SYS_FORCE_INLINE bool demoteVertexAttrib(const UT_StringRef &name)
SYS_FORCE_INLINE const GA_Attribute * findPointVectorAttrib(const UT_StringRef &n) const
GA_Primitive * appendPrimitive(const GA_PrimitiveTypeId &type)
Append a primitive by GA_PrimitiveTypeId.
virtual void countMemory(UT_MemoryCounter &counter, bool inclusive) const
SYS_FORCE_INLINE GA_Attribute * findIntArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
static int asciiMagicH9()
Magic number for ASCII geometry files.
SYS_FORCE_INLINE const GA_Attribute * findIntArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
SYS_FORCE_INLINE GEO_Primitive * appendPrimitive(const GA_PrimitiveTypeId &type)
SYS_FORCE_INLINE GA_Attribute * addGlobalAttrib(const GA_Attribute *src)
SYS_FORCE_INLINE const GA_AttributeDict & primitiveAttribs() const
Utility class for containing a color ramp.
void destroyPointGroup(GA_PointGroup *g)
GEO_Capture_Muscle_Property
Class used to map the GA attribute into a form for H9 geometry files.
SYS_FORCE_INLINE GA_Attribute * findNumericArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
SYS_FORCE_INLINE GA_Size deletePoints(const GA_PointGroup &point_group, GA_DestroyPointMode mode=GA_LEAVE_PRIMITIVES)
SYS_FORCE_INLINE GA_Attribute * addFloatTuple(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size, const GA_Defaults &defaults=GA_Defaults(0.0), const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, GA_Storage storage=GA_STORE_REAL32, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
bool destroyPrimitiveGroup(const char *name)
SYS_FORCE_INLINE GA_Attribute * addStringArray(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size=1, const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, GA_Storage storage=GA_STORE_STRING, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
SYS_FORCE_INLINE GA_Attribute * addPointAttrib(GA_AttributeScope scope, const UT_StringHolder &n, const UT_Options *creation_args, const GA_AttributeOptions *attribute_options, const UT_StringRef &attribtype)
SYS_FORCE_INLINE GA_Attribute * findVertexVectorAttrib(const UT_StringRef &n)
SYS_FORCE_INLINE GA_Attribute * findPointVectorAttrib(const UT_StringRef &n)
Container class for all geometry.
SYS_FORCE_INLINE const GA_Attribute * findIntTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
UT_Vector3T< FLOAT_T > myOrigin
SYS_FORCE_INLINE void destroyGlobalAttrib(const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
GA_Offset appendPointCopy(GA_Offset src, GA_PointWrangler &wrangler)
Append a point, copying data from the source point.
PUGI__FN char_t * translate(char_t *buffer, const char_t *from, const char_t *to, size_t to_length)
SYS_FORCE_INLINE void destroyPrimAttrib(GA_AttributeScope scope, const UT_StringRef &n, const GA_AttributeFilter *filter=nullptr)
SIM_API const UT_StringHolder distance
SYS_FORCE_INLINE GA_Attribute * addVertexAttrib(const GA_Attribute *src)
GEO_Capture_Meta_Property
SYS_FORCE_INLINE GA_Attribute * addStringTuple(GA_AttributeOwner owner, const UT_StringHolder &name, int tuple_size, const UT_Options *creation_args=0, const GA_AttributeOptions *attribute_options=0, const GA_ReuseStrategy &reuse=GA_ReuseStrategy())
SYS_FORCE_INLINE const GA_Attribute * findStringArray(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1) const
bool operator==(const SoftSymmetryParms &other) const
SYS_FORCE_INLINE GA_Attribute * findDictTuple(GA_AttributeOwner owner, const UT_StringRef &name, int min_size=1, int max_size=-1)
Class to specify options for loading geometry.
SYS_FORCE_INLINE GA_Attribute * findVertexVectorAttrib(GA_AttributeScope s, const UT_StringRef &n)
LocalXformContextT(const UT_Vector3T< FLOAT_T > &forward, const UT_Vector3T< FLOAT_T > &up, PivotSpace pivot_space)
Coordinate frame defined by lookat(zero, forward, up).
GEO_CopyMethod
An enum for GEO_Detail::copy's method parameter.
bool destroyVertexGroup(const char *name)
SYS_FORCE_INLINE const GA_Attribute * findVertexVectorAttrib(const UT_StringRef &n) const
SYS_FORCE_INLINE const GA_AttributeDict & vertexAttribs() const
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter