12 #ifndef __GEO_Detail_h__
13 #define __GEO_Detail_h__
70 namespace GA_PrimCompat {
class TypeMask; }
85 template<
typename T,
bool B>
class GA_EdgeT;
93 #define GEO_STD_ATTRIB_POSITION "P"
94 #define GEO_STD_ATTRIB_NORMAL "N"
95 #define GEO_STD_ATTRIB_TEXTURE "uv"
96 #define GEO_STD_ATTRIB_VELOCITY "v"
97 #define GEO_STD_ATTRIB_ANGULAR_VELOCITY "w"
98 #define GEO_STD_ATTRIB_MATERIAL "shop_materialpath"
99 #define GEO_STD_ATTRIB_OGLSHOP "ogl_shop"
100 #define GEO_STD_ATTRIB_DIFFUSE "Cd"
101 #define GEO_STD_ATTRIB_ALPHA "Alpha"
102 #define GEO_STD_ATTRIB_COM "com"
103 #define GEO_STD_ATTRIB_DISTANCE "dist"
104 #define GEO_STD_ATTRIB_LOD "lod"
105 #define GEO_STD_ATTRIB_REST "rest"
106 #define GEO_STD_ATTRIB_MASS "mass"
107 #define GEO_STD_ATTRIB_DRAG "drag"
108 #define GEO_STD_ATTRIB_TENSION "tension"
109 #define GEO_STD_ATTRIB_SPRINGK "springk"
110 #define GEO_STD_ATTRIB_LIFE "life"
111 #define GEO_STD_ATTRIB_AGE "age"
112 #define GEO_STD_ATTRIB_DIST "dist"
113 #define GEO_STD_ATTRIB_UP "up"
114 #define GEO_STD_ATTRIB_ORIENT "orient"
115 #define GEO_STD_ATTRIB_ID "id"
116 #define GEO_STD_ATTRIB_PSCALE "pscale"
117 #define GEO_STD_ATTRIB_CREASE "creaseweight"
118 #define GEO_STD_ATTRIB_AREA "area"
119 #define GEO_STD_ATTRIB_PERIMETER "perimeter"
120 #define GEO_STD_ATTRIB_WIDTH "width"
121 #define GEO_STD_ATTRIB_LAYERMERGE "layermerge"
122 #define GEO_STD_ATTRIB_SEGS "segs"
123 #define GEO_STD_ATTRIB_DIV "div"
124 #define GEO_STD_ATTRIB_LAGE "lage"
125 #define GEO_STD_ATTRIB_ARC "arc"
126 #define GEO_STD_ATTRIB_GEN "gen"
127 #define GEO_STD_ATTRIB_TUBECAPTURE "tubeCapt"
128 #define GEO_STD_ATTRIB_PNT_CAPTURE_ALPHA "pCaptAlpha"
129 #define GEO_STD_ATTRIB_PNT_CAPTURE_PATH "pCaptPath"
130 #define GEO_STD_ATTRIB_PNT_CAPTURE_DATA "pCaptData"
131 #define GEO_STD_ATTRIB_CAPTUREFRAME "pCaptFrame"
132 #define GEO_STD_ATTRIB_CAPT_SKELROOT "pCaptSkelRoot"
133 #define GEO_STD_ATTRIB_CLOTH_CAPT "clothCapt"
134 #define GEO_STD_ATTRIB_WIRE_CAPT_U "wireCaptU"
135 #define GEO_STD_ATTRIB_WIRE_CAPT_V "wireCaptV"
136 #define GEO_STD_ATTRIB_WIRE_CAPT_PRIMU "wireCaptPrimU"
137 #define GEO_STD_ATTRIB_META_CAPT_FRAME "metaCaptFrame"
138 #define GEO_STD_ATTRIB_META_CAPT_GROUPS "metaCaptGroups"
139 #define GEO_STD_ATTRIB_META_CAPT_ROOT "metaCaptRoot"
140 #define GEO_STD_ATTRIB_META_CAPT_PATHS "metaCaptPaths"
141 #define GEO_STD_ATTRIB_META_CAPT_DATA "metaCaptData"
142 #define GEO_STD_ATTRIB_META_CAPT_GROUP_MAP "metaCaptGroupMap"
143 #define GEO_STD_ATTRIB_META_SLIDE "slideModifier"
144 #define GEO_STD_ATTRIB_INFLATE_MODIFIER "inflatemodifier"
145 #define GEO_STD_ATTRIB_MUSCLE_REST_ANCHOR "restAnchor"
146 #define GEO_STD_ATTRIB_MUSCLE_REST_XFORMS "restTransforms"
147 #define GEO_STD_ATTRIB_MUSCLE_INFLATE_NORM "muscleInflateNormal"
148 #define GEO_STD_ATTRIB_MUSCLE_POSITION_BIAS "positionbiasvalues"
149 #define GEO_STD_ATTRIB_MUSCLE_CAPT_NAMES "muscleCaptNames"
150 #define GEO_STD_ATTRIB_RIXLATE "rixlate"
151 #define GEO_STD_ATTRIB_DEFORM_SKIN_METHOD "deformSkinMethod"
152 #define GEO_STD_ATTRIB_DEFORM_DUAL_QUATERNION_BLEND_ATTRIB "deformDualQuaternionBlendAttrib"
153 #define GEO_STD_ATTRIB_DEFORM_TRANSFORMS_PATH "deformTransformsPath"
154 #define GEO_STD_ATTRIB_DEFORM_TRANSFORM_REGIONS_PATH "deformTransformRegionsPath"
155 #define GEO_STD_ATTRIB_DEFORM_TRANSFORM_TARGETS_PATH "deformTransformTargetsPath"
156 #define GEO_STD_ATTRIB_POSE_SHAPE_EXAMPLE_PATH "poseShapeExamplePath"
157 #define GEO_STD_ATTRIB_SHAPE_DIFF_METHOD "shapeDiffMethod"
158 #define GEO_STD_ATTRIB_SHAPE_DIFF_ORIENT_ATTRIB "shapeDiffOrientAttrib"
159 #define GEO_STD_ATTRIB_SHAPE_DIFF_TRANSFORM_ATTRIB "shapeDiffTransformAttrib"
160 #define GEO_STD_ATTRIB_STASH_POSE_PATH "stashPosePath"
251 bool full_topology=
true);
294 bool mergePrimGroup =
true,
295 bool insertPrimsAtHead=
false,
296 bool keep_internal_groups =
true,
309 bool merge_groups =
true,
310 bool keep_internal_groups =
true);
319 void merge(
const GEO_Primitive &sprim,
bool insertPrimAtHead=
false);
328 bool this_parameter_is_ignored =
true,
329 bool keep_internal_groups =
true,
332 void collapseIndexAttributes();
340 template<
typename FLOAT_T>
344 bool keep_vector_lengths =
true,
345 bool check_pasting =
true,
346 bool neg_determinant_flip_vector =
true,
347 bool update_ptnormals =
false,
349 bool updateaffectednormals =
false,
350 const char *attribpattern =
nullptr);
353 template<
typename FLOAT_T>
358 bool keep_vector_lengths =
true,
359 bool check_pasting =
true,
360 bool neg_determinant_flip_vector =
true,
361 bool update_ptnormals =
false,
363 bool updateaffectednormals =
false,
364 const char *attribpattern =
nullptr);
372 template<
typename FLOAT_T>
377 bool keep_vector_lengths =
true,
378 bool check_pasting =
true,
379 bool neg_determinant_flipvector =
true,
380 bool update_ptnormals =
false,
382 bool updateaffectednormals =
false,
383 const char *attribpattern =
nullptr);
387 template<
typename FLOAT_T>
392 bool keep_vector_lengths =
true,
393 bool check_pasting =
true,
394 bool neg_determinant_flipvector =
true,
395 bool update_ptnormals =
false,
397 bool updateaffectednormals =
false,
398 const char *attribpattern =
nullptr);
401 template<
typename FLOAT_T>
405 bool check_pasting =
true,
406 bool update_ptnormals =
false,
408 bool updateaffectednormals =
false,
409 const char *attribpattern =
nullptr);
413 template<
typename FLOAT_T>
417 bool keep_vector_lengths =
true,
418 bool check_pasting =
true,
419 bool neg_determinant_flipvector =
true,
420 bool update_ptnormals =
false,
422 bool updateaffectednormals =
false,
423 const char *attribpattern =
nullptr);
426 template<
typename FLOAT_T>
431 bool keep_vector_lengths =
true,
432 bool check_pasting =
true,
433 bool neg_determinant_flipvector =
true,
434 bool update_ptnormals =
false,
436 bool updateaffectednormals =
false,
437 const char *attribpattern =
nullptr);
441 template <
typename FLOAT_T,
bool INVERT=false>
442 void transformPointsByAttribute(
445 bool keep_vector_lengths =
true,
446 bool updateaffectednormals =
true,
447 const char *attribpattern =
nullptr);
451 template <
typename FLOAT_T,
bool INVERT=false>
452 void transformPointsByAttribute(
455 bool keep_vector_lengths =
true,
456 bool updateaffectednormals =
true,
457 const char *attribpattern =
nullptr);
461 template <
typename FLOAT_T,
bool INVERT=false>
462 void transformPointsByAttribute(
465 bool keep_vector_lengths =
true,
466 bool updateaffectednormals =
true,
467 const char *attribpattern =
nullptr);
471 template <
typename FLOAT_T,
bool INVERT=false>
472 void translatePointsByAttribute(
475 bool keep_vector_lengths =
true,
476 bool updateaffectednormals =
true,
477 const char *attribpattern =
nullptr);
480 template<
typename FLOAT_T>
483 bool check_pasting =
true,
484 bool update_ptnormals =
false,
486 bool updateaffectednormals =
false,
487 const char *attribpattern =
nullptr);
492 template<
typename FLOAT_T>
497 bool keep_vector_lengths =
true,
498 bool check_pasting =
true,
499 bool neg_determinant_flipvector =
true,
500 bool update_ptnormals =
false,
502 bool updateaffectednormals =
false,
503 const char *attribpattern =
nullptr);
506 template<
typename FLOAT_T>
509 bool check_pasting =
true,
510 bool update_ptnormals =
false,
512 bool updateaffectednormals =
false,
513 const char *attribpattern =
nullptr);
517 template<
typename FLOAT_T>
521 bool update_ptnormals =
false,
523 bool updateaffectednormals =
false,
524 const char *attribpattern =
nullptr);
527 template<
typename FLOAT_T>
530 bool update_ptnormals =
false,
532 bool updateaffectednormals =
false,
533 const char *attribpattern =
nullptr);
538 template<
typename FLOAT_T>
542 bool keep_vector_lengths =
true,
543 bool check_pasting =
true,
544 bool neg_determinant_flipvector =
true,
547 bool update_ptnormals =
false,
549 bool updateaffectednormals =
false,
550 const char *attribpattern =
nullptr);
553 template<
typename FLOAT_T>
556 bool check_pasting =
true,
558 bool update_ptnormals =
false,
560 bool updateaffectednormals =
false,
561 const char *attribpattern =
nullptr);
563 void visualizeSoftPoints(
const GEO_Rolloff &rolloff,
576 && myTol == other.
myTol;
581 return !(*
this == other);
595 void computeSoftPointFalloff(
596 const bool connected,
649 void normalTranslatePoints(
float length = 1.0F,
650 int check_pasting = 1,
652 int update_ptnormals = 0,
654 bool updateaffectednormals =
false);
655 void normalTranslatePrimitives(
float length = 1.0F,
656 int check_pasting = 1,
658 int update_ptnormals = 0,
660 bool updateaffectednormals =
false);
662 float length = 1.0F,
int check_pasting = 1,
663 int update_ptnormals = 0,
665 bool updateaffectednormals =
false);
667 float length = 1.0F,
int check_pasting = 1,
668 int update_ptnormals = 0,
670 bool updateaffectednormals =
false);
672 float length = 1.0F,
int check_pasting = 1,
673 int update_ptnormals = 0,
675 bool updateaffectednormals =
false);
677 float length = 1.0F,
int check_pasting = 1,
678 int update_ptnormals = 0,
680 bool updateaffectednormals =
false);
681 void normalTranslateGroup(
const GA_Group &grp,
682 float length = 1.0F,
int check_pasting = 1,
683 int update_ptnormals = 0,
685 bool updateaffectednormals =
false);
692 void updateAffectedNormals(
const GA_Range &ptrange,
694 bool allsametransform =
false);
699 template<
typename FLOAT_T>
704 bool keep_vector_lengths =
true,
705 bool check_pasting =
true,
706 bool neg_determinant_flipvector =
true,
707 bool update_ptnormals =
false,
709 bool updateaffectednormals =
false);
713 template<
typename FLOAT_T>
718 bool keep_vector_lengths =
true,
719 bool check_pasting =
true,
720 bool neg_determinant_flipvector =
true,
721 bool update_ptnormals =
false,
723 bool updateaffectednormals =
false,
729 template<
typename FLOAT_T>
734 bool keep_vector_lengths =
true,
735 bool check_pasting =
true,
736 bool neg_determinant_flipvector =
true,
737 bool update_ptnormals =
false,
739 bool updateaffectednormals =
false,
746 template<
typename FLOAT_T>
750 bool keep_vector_lengths =
true,
751 bool check_pasting =
true,
752 bool neg_determinant_flipvector =
true,
755 bool update_ptnormals =
false,
757 bool updateaffectednormals =
false,
763 template <
typename FLOAT_T>
780 : myFwdVector(forward), myUpVector(up), myType(
Type::LOOKAT),
781 myPivotSpace(pivot_space) {}
789 : myOrient(orient), myOrigin(origin), myType(
Type::ORIENT),
790 myPivotSpace(pivot_space) {}
809 template<
typename FLT>
814 FLT tx, FLT ty, FLT tz,
815 FLT rx, FLT ry, FLT rz,
816 FLT sx, FLT sy, FLT sz,
817 FLT s_xy, FLT s_xz, FLT s_yz,
818 FLT px, FLT
py, FLT pz,
819 FLT prx, FLT pry, FLT prz);
831 void softTransformPoints(
833 float tx,
float ty,
float tz,
834 float rx,
float ry,
float rz,
835 float sx,
float sy,
float sz,
836 float s_xy,
float s_xz,
float s_yz,
837 float px,
float py,
float pz,
838 float prx,
float pry,
float prz,
843 int keep_vector_lengths = 1,
844 int check_pasting = 1,
845 int neg_determinant_flipvector = 1,
846 int update_ptnormals = 0,
848 bool updateaffectednormals =
false,
849 const char *attribpattern =
nullptr,
851 bool *falloff_written =
nullptr);
852 void softTransformEdges(
854 float tx,
float ty,
float tz,
855 float rx,
float ry,
float rz,
856 float sx,
float sy,
float sz,
857 float s_xy,
float s_xz,
float s_yz,
858 float px,
float py,
float pz,
859 float prx,
float pry,
float prz,
864 int keep_vector_lengths = 1,
865 int check_pasting = 1,
866 int neg_determinant_flipvector = 1,
867 int update_ptnormals = 0,
869 bool updateaffectednormals =
false,
870 const char *attribpattern =
nullptr,
872 bool *falloff_written =
nullptr);
874 void softTransformPoints(
877 float tx,
float ty,
float tz,
878 float rx,
float ry,
float rz,
879 float sx,
float sy,
float sz,
880 float s_xy,
float s_xz,
float s_yz,
881 float px,
float py,
float pz,
882 float prx,
float pry,
float prz,
887 int keep_vector_lengths = 1,
888 int check_pasting = 1,
889 int neg_determinant_flipvector = 1,
890 int update_ptnormals = 0,
892 bool updateaffectednormals =
false,
893 const char *attribpattern =
nullptr,
895 bool *falloff_written =
nullptr);
896 void softTransformEdges(
899 float tx,
float ty,
float tz,
900 float rx,
float ry,
float rz,
901 float sx,
float sy,
float sz,
902 float s_xy,
float s_xz,
float s_yz,
903 float px,
float py,
float pz,
904 float prx,
float pry,
float prz,
909 int keep_vector_lengths = 1,
910 int check_pasting = 1,
911 int neg_determinant_flipvector = 1,
912 int update_ptnormals = 0,
914 bool updateaffectednormals =
false,
915 const char *attribpattern =
nullptr,
917 bool *falloff_written =
nullptr);
929 void softTranslatePoints(
934 int check_pasting = 1,
935 int update_ptnormals = 0,
937 bool updateaffectednormals =
false,
938 const char *attribpattern =
nullptr,
940 bool *falloff_written =
nullptr);
941 void softTranslateEdges(
946 int check_pasting = 1,
947 int update_ptnormals = 0,
949 bool updateaffectednormals =
false,
950 const char *attribpattern =
nullptr,
952 bool *falloff_written =
nullptr);
964 void softNormalTranslatePoints(
969 int along_lead_normal = 1,
970 int check_pasting = 1,
971 int update_ptnormals = 0,
973 bool updateaffectednormals =
false,
975 bool *falloff_written =
nullptr);
1008 &getPointCaptureAttribName(CaptureType
type);
1013 static const char *getPointCaptureIndexPropertyName(CaptureType
type);
1018 &getPointCaptureFrameAttribName(CaptureType
type);
1023 &getPointCaptureRootAttribName(CaptureType
type);
1028 static const char *getPointCaptureDataPropertyName(CaptureType
type);
1032 bool getCaptureRegionRootPath(
UT_String &root_path,
1033 CaptureType
t = CAPTURE_BONE)
const;
1034 bool setCaptureRegionRootPath(
const UT_String &root_path,
1035 CaptureType
t = CAPTURE_BONE);
1039 int getCaptureRegionIndex(
const UT_String &cregion_name,
1040 CaptureType
t = CAPTURE_BONE);
1045 int addCaptureRegion(
const UT_String &cregion_name,
1048 int addCaptureRegion(
const UT_String &cregion_name,
1049 const UT_Matrix4 &xform,
float tcap,
float bcap,
1050 float taperx,
float taperz);
1054 int addCaptureRegion(
const UT_String &cregion_name,
1059 int removeCaptureRegion(
const UT_String &cregion_name,
1060 CaptureType
t = CAPTURE_BONE);
1063 void setCaptureWeight(
int cregion_index,
float weight,
1066 bool add_weight =
false,
1067 bool clamp_negative =
false,
1068 bool normalizeweight =
false,
1069 CaptureType
t = CAPTURE_BONE);
1072 void setCaptureWeight(
int cregion_index,
float weight,
1075 bool add_weight =
false,
1076 bool clamp_negative =
false,
1077 bool normalizeweight =
false,
1078 CaptureType
t = CAPTURE_BONE);
1081 float getCaptureWeight(
int cregion_index,
GA_Offset ptoff,
1082 CaptureType
t = CAPTURE_BONE)
const;
1091 CaptureType
t = CAPTURE_BONE)
const;
1092 void clearCaptureWeights(
GA_Offset ptoff,
1093 CaptureType
t = CAPTURE_BONE);
1102 void colorPointsByCaptureWeight(
1105 CaptureType
t = CAPTURE_BONE,
1106 VisualizationType vistype = VISTYPE_MULTIPLE,
1111 void colorPointsByCaptureWeight(
1115 VisualizationType vistype,
1119 void normalizeCaptureWeights(
const GA_PointGroup *ptgroup =
nullptr,
1120 CaptureType
t = CAPTURE_BONE,
1127 void clampCaptureWeights(
const GA_PointGroup *ptgroup =
nullptr,
1128 bool clamp_low_flag =
true,
1129 float low_threshold = 0.0
f,
float low_val = 0.0
f,
1130 bool clamp_hi_flag =
false,
1131 float hi_threshold = 1.0
f,
float hi_val = 1.0
f,
1135 void normalizeRelativeCaptureWeights(
int idx,
GA_Offset ptoff,
1159 {
return insertPointCopy(src, wrangler); }
1163 {
return insertPointCopy(src); }
1183 getPrimitive(primoff));
1202 getPrimitiveByIndex(idx));
1209 getPrimitiveByIndex(idx));
1219 {
return destroyPoints(range,
mode); }
1221 {
return destroyPrimitives(range, and_points); }
1223 {
return destroyPrimitive(prim, and_points); }
1246 bool and_points =
false);
1249 bool and_points =
false);
1269 bool getVisibleBBox(
1276 bool accurate_bounds =
false)
const;
1287 bool getPointBSphere(
1290 bool accurate_bounds =
false)
const;
1305 bool getEdgeBSphere(
1308 bool accurate_bounds =
false)
const;
1309 bool getBreakpointBBox(
1312 bool getBreakpointBBox(
1316 bool getBreakpointBSphere(
1319 bool accurate_bounds =
false)
const;
1327 bool getGroupBSphere(
1330 bool accurate_bounds)
const;
1334 bool getPointAttribBBox(
1338 bool getPointAttribBBox(
1342 bool getPointAttribBBox(
1346 bool getPointAttribBBox(
1355 template <
typename T>
1356 bool getPointAttribCentroid(
1361 bool getPointAttribGroupBBox(
1366 bool getVertexAttribBBox(
1370 bool getVertexAttribBBox(
1374 bool getVertexAttribBBox(
1378 bool getVertexAttribBBox(
1382 bool getVertexAttribGroupBBox(
1395 void copyPointVertexAttributes(
GEO_Vertex dest,
1397 bool copy_point_P = true) const;
1398 void copyPointVertexAttributes(
1402 void copyPointVertexAttributes(
1408 copyVertex(dest_vtx, src_vtx, vertex_wrangler,
1409 point_wrangler, copy_point_P);
1420 copyVertex(dest_vtx, src_vtx, vertex_wrangler,
1437 int shallow = 0) const;
1471 void fixSplineWeights();
1507 GA_Attribute *addCaptureFrameAttribute(CaptureType
t = CAPTURE_BONE,
1535 GA_Attribute *addPointCaptureAttribute(geo_NPairs n_pairs,
1536 CaptureType
t = CAPTURE_BONE,
1541 GA_Attribute *addPointCaptureAlphaAttribute(
float dflt,
1571 const GA_Attribute *findInternalNormalAttribute()
const;
1577 CaptureType
t = CAPTURE_BONE)
const;
1579 CaptureType
t = CAPTURE_BONE);
1582 const GA_Attribute *findCaptureSkelRootAttribute(CaptureType
t
1583 = CAPTURE_BONE)
const;
1590 CaptureType
t = CAPTURE_BONE)
const;
1592 CaptureType
t = CAPTURE_BONE);
1594 const GA_Attribute *findPointCaptureAlphaAttribute()
const;
1602 void destroyInternalNormalAttribute();
1611 void destroyTubeCaptureAttribute();
1614 void destroyCaptureFrameAttribute(CaptureType
t
1618 void destroyCaptureSkelRootAttribute(CaptureType
t
1623 void destroyPointCaptureAttribute(CaptureType
t =
1627 void destroyPointCaptureAlphaAttribute();
1634 bool getMetaRestAnchorPath(
UT_String &anchorPath)
const;
1651 int layer = -1)
const;
1652 int getAttributeLayer(
const char* attr_name)
const;
1654 static GA_TypeInfo getStdAttributeTypeInfo(
const char *
name,
int floattuplesize);
1657 int getCurrentLayer()
const;
1658 void setCurrentLayer(
int layer);
1659 void setNumLayers(
int numlayer);
1660 int getNumLayers()
const;
1662 void setLayerMerge(
int preclear,
int mask,
int srcblend,
1664 void getLayerMerge(
int &preclear,
int &
mask,
int &srcblend,
1665 int &dstblend)
const;
1667 void addVariableName(
const char *attr,
const char *varname);
1669 { addVariableName(0, varname); }
1675 void traverseVariableNames(
int (*
function)(
const char *attr,
1676 const char *varname,
void *
data),
1680 GA_Attribute *growPointCaptureAttribute(geo_NPairs num_added_pairs,
1681 CaptureType
t = CAPTURE_BONE);
1686 return getAttributes().cloneAttribute(
1698 creation_args, attribute_options,attribtype);
1707 creation_args, attribute_options,attribtype);
1715 {
return findPointAttribute(src.
getScope(),
1719 {
return findPointAttribute(src.
getScope(),
1757 return getAttributes().cloneAttribute(
1768 creation_args, attribute_options,attribtype);
1777 creation_args, attribute_options,attribtype);
1785 {
return findVertexAttribute(src.
getScope(),
1789 {
return findVertexAttribute(src.
getScope(),
1827 return getAttributes().cloneAttribute(
1838 n, creation_args, attribute_options,attribtype);
1847 creation_args, attribute_options,attribtype);
1855 {
return findPrimitiveAttribute(src.
getScope(),
1859 {
return findPrimitiveAttribute(src.
getScope(),
1882 return getAttributes().cloneAttribute(
1894 creation_args, attribute_options,attribtype);
1903 creation_args, attribute_options,attribtype);
1908 {
return findGlobalAttribute(src.
getScope(),
1912 {
return findGlobalAttribute(src.
getScope(),
1940 {
return getAttributes().getDict(
1944 {
return getAttributes().getDict(
1948 {
return getAttributes().getDict(
1952 {
return getAttributes().getDict(
1958 bool hasMetaPrimitives()
const;
1959 bool hasPastedPrimitives()
const;
1960 bool hasQuadricPrimitives()
const;
1961 bool hasParticlePrimitives()
const;
1962 bool hasVolumePrimitives()
const;
1963 bool hasChannelPrimitives()
const;
1964 bool hasTransformingPrimitives()
const;
1968 bool hasCustomPrimitives()
const;
1971 GA_Size getPastedCount()
const;
1972 GA_Size getQuadricCount()
const;
1973 GA_Size getParticleCount()
const;
1974 GA_Size getVolumeCount()
const;
1981 bool mergeCaptureProperties(
2007 const
char *attrib_name) const;
2010 const
char *attrib_name);
2052 GA_Size getPointGroupAdjacentToPrimitiveGroup(
2055 GA_Size getPointGroupAdjacentToPrimitiveRange(
2058 GA_Size getVertexGroupAdjacentToPrimitiveGroup(
2061 GA_Size getVertexGroupAdjacentToPrimitiveRange(
2067 struct AdjacentPolygonData
2072 {
return myAdjacentPolygon == pad.myAdjacentPolygon; }
2074 {
return myAdjacentPolygon < pad.myAdjacentPolygon; }
2123 const GEO_Primitive *findPrimitiveByName(
const char *nametomatch,
2126 const char *nameattrib=
"name",
2127 int matchnumber = 0)
const;
2131 const char *nameattrib=
"name",
2132 int matchnumber = 0);
2135 void findAllPrimitivesByName(
2137 const char *nametomatch,
2140 const char *nameattrib=
"name")
const;
2141 void findAllPrimitivesByName(
2143 const char *nametomatch,
2146 const char *nameattrib=
"name");
2155 { destroyElementGroup(g); }
2157 { destroyElementGroup(g); }
2159 { destroyElementGroup(g); }
2182 bool override =
true);
2185 bool override =
true);
2189 bool override =
true);
2192 bool override =
true);
2198 GA_Size localIntrinsicTupleSize(
2214 const char *
value)
override;
2240 bool convertIndexPairDataFromH9();
2241 bool convertIndexPairDataToH9();
2243 template<
typename FLOAT_T>
2248 bool keep_vector_lengths,
2250 bool neg_determinant_flipvector,
2251 bool update_ptnormals,
2253 bool updateaffectednormals,
2254 const char *attribpattern);
2259 bool override =
true);
2300 int min_size=1,
int max_size=-1)
const;
2304 int min_size=1,
int max_size=-1)
const
2307 min_size, max_size);
2312 int min_size=1,
int max_size=-1);
2316 int min_size=1,
int max_size=-1)
2319 min_size, max_size);
2324 int min_size=1,
int max_size=-1)
const;
2328 int min_size=1,
int max_size=-1)
const
2331 min_size, max_size);
2336 int min_size=1,
int max_size=-1);
2340 int min_size=1,
int max_size=-1)
2343 min_size, max_size);
2349 int min_size=1,
int max_size=-1)
const;
2353 int min_size=1,
int max_size=-1)
const
2356 name, min_size, max_size);
2362 int min_size=1,
int max_size=-1);
2366 int min_size=1,
int max_size=-1)
2369 name, min_size, max_size);
2374 int min_size=1,
int max_size=-1)
const;
2378 int min_size=1,
int max_size=-1)
const
2381 name, min_size, max_size);
2386 int min_size=1,
int max_size=-1);
2390 int min_size=1,
int max_size=-1)
2393 name, min_size, max_size);
2399 int min_size=1,
int max_size=-1)
const;
2403 int min_size=1,
int max_size=-1)
const
2406 name, min_size, max_size);
2411 int min_size=1,
int max_size=-1);
2415 int min_size=1,
int max_size=-1)
2418 name, min_size, max_size);
2442 int min_size=1,
int max_size=-1)
const;
2446 int min_size=1,
int max_size=-1)
const
2449 min_size, max_size);
2454 int min_size=1,
int max_size=-1);
2458 int min_size=1,
int max_size=-1)
2461 min_size, max_size);
2466 int min_size=1,
int max_size=-1)
const;
2470 int min_size=1,
int max_size=-1)
const
2473 min_size, max_size);
2478 int min_size=1,
int max_size=-1);
2482 int min_size=1,
int max_size=-1)
2485 min_size, max_size);
2490 int min_size=1,
int max_size=-1)
const;
2494 int min_size=1,
int max_size=-1)
const
2497 min_size, max_size);
2502 int min_size=1,
int max_size=-1);
2506 int min_size=1,
int max_size=-1)
2509 min_size, max_size);
2514 int min_size=1,
int max_size=-1)
const;
2518 int min_size=1,
int max_size=-1)
const
2521 min_size, max_size);
2526 int min_size=1,
int max_size=-1);
2530 int min_size=1,
int max_size=-1)
2533 min_size, max_size);
2538 int min_size=1,
int max_size=-1)
const;
2542 int min_size=1,
int max_size=-1)
const
2545 min_size, max_size);
2550 int min_size=1,
int max_size=-1);
2554 int min_size=1,
int max_size=-1)
2557 min_size, max_size);
2599 return addTuple(storage,
2641 tuple_size, defaults,
2668 tuple_size, defaults,
2692 name, tuple_size, creation_args,
2693 attribute_options, reuse);
2714 name, tuple_size, creation_args,
2715 attribute_options, reuse);
2828 return ((
'P'<<24) + (
'G'<<16) + (
'E'<<8) +
'O');
2833 return ((
'B'<<24) + (
'g'<<16) + (
'e'<<8) +
'o');
2839 bool savePointsH9(std::ostream &os,
bool binary,
2843 bool saveExtraH9(std::ostream &os,
bool binary,
2853 os,
false,
nullptr);
2858 friend class GU_IOClassic;
2864 void privateComputeNormal(
2867 const float cuspangledegrees,
2868 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)
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
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.
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)
GA_API const UT_StringHolder up
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.
constexpr T normalize(UT_FixedVector< T, D > &a) noexcept
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