9 #ifndef __HOM_Geometry_h__
10 #define __HOM_Geometry_h__
52 class HOMF_GeometryHandle;
81 virtual int sopNodeOutputIndex() = 0;
83 virtual bool isValid() = 0;
87 bool clone_data_ids=
false) = 0;
90 virtual int64 vertexCount() = 0;
91 virtual int64 primCount() = 0;
94 virtual HOM_IterableList<HOM_Point> *iterPoints() = 0;
96 virtual std::vector<HOM_ElemPtr<HOM_Point> >
points() = 0;
102 virtual HOM_IterableList<HOM_Prim> *iterPrims() = 0;
104 virtual std::vector<HOM_ElemPtr<HOM_Prim> > prims() = 0;
112 virtual std::vector<std::string> primTypeNames() = 0;
113 virtual std::vector<std::string> primTypeLabels() = 0;
114 virtual std::vector<std::string> primTypeIcons() = 0;
115 virtual bool containsPrimType(
const char *
type_name) = 0;
119 virtual int64 countUnusedPoints() = 0;
121 virtual std::vector<HOM_ElemPtr<HOM_Prim> > primsOfType(
HOM_EnumValue &prim_type) = 0;
126 SWIGOUT(%newobject iterPrimsOfType;)
127 virtual HOM_IterableList<HOM_Prim> *iterPrimsOfType(
HOM_EnumValue &prim_type) = 0;
129 virtual int64 preferredPrecision() = 0;
130 virtual void setPreferredPrecision(
int64 prec) = 0;
132 virtual double averageMinDistance(
137 virtual double averageEdgeLength() = 0;
139 virtual std::vector<HOM_ElemPtr<HOM_Point> > globPoints(
const char *
pattern,
bool ordered =
false) = 0;
141 virtual std::vector<HOM_ElemPtr<HOM_Prim> > globPrims(
const char *
pattern) = 0;
143 virtual std::vector<HOM_ElemPtr<HOM_Vertex> > globVertices(
146 virtual std::vector<HOM_ElemPtr<HOM_Edge> > globEdges(
const char *
pattern) = 0;
149 virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _pointAttribs(
153 virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _primAttribs(
157 virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _vertexAttribs(
161 virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _globalAttribs(
165 SWIGOUT(%newobject findPointAttrib;)
169 SWIGOUT(%newobject findPrimAttrib;)
173 SWIGOUT(%newobject findVertexAttrib;)
177 SWIGOUT(%newobject findGlobalAttrib;)
185 virtual double floatAttribValue(
const char *
name) = 0;
187 virtual double floatAttribValue(
HOM_Attrib &attrib) = 0;
189 virtual std::vector<double> floatListAttribValue(
const char *
name) = 0;
191 virtual std::vector<double> floatListAttribValue(
HOM_Attrib &attrib) = 0;
193 virtual int64 intAttribValue(
const char *
name) = 0;
197 virtual std::vector<int64> intListAttribValue(
const char *
name) = 0;
199 virtual std::vector<int64> intListAttribValue(
HOM_Attrib &attrib) = 0;
201 virtual std::string stringAttribValue(
const char *
name) = 0;
203 virtual std::string stringAttribValue(
HOM_Attrib &attrib) = 0;
205 virtual std::vector<std::string> stringListAttribValue(
const char *
name) = 0;
207 virtual std::vector<std::string> stringListAttribValue(
HOM_Attrib &attrib) = 0;
208 virtual std::map<std::string,hboost::any> dictAttribValue(
const char *
name) = 0;
209 virtual std::map<std::string,hboost::any> dictAttribValue(
HOM_Attrib &
name) = 0;
210 virtual std::vector<std::map<std::string,hboost::any> > dictListAttribValue(
const char *
name) = 0;
211 virtual std::vector<std::map<std::string,hboost::any> > dictListAttribValue(
HOM_Attrib &
name) = 0;
215 virtual std::vector<double> pointFloatAttribValues(
const char *
name) = 0;
216 SWIGOUT(%kwargs pointFloatAttribValuesAsString;)
219 virtual std::vector<double> primFloatAttribValues(
const char *
name) = 0;
220 SWIGOUT(%kwargs primFloatAttribValuesAsString;)
223 virtual std::vector<double> vertexFloatAttribValues(
const char *
name) = 0;
224 SWIGOUT(%kwargs vertexFloatAttribValuesAsString;)
228 virtual std::vector<int64> pointIntAttribValues(
const char *
name) = 0;
229 SWIGOUT(%kwargs pointIntAttribValuesAsString;)
232 virtual std::vector<int64> primIntAttribValues(
const char *
name) = 0;
233 SWIGOUT(%kwargs primIntAttribValuesAsString;)
236 virtual std::vector<int64> vertexIntAttribValues(
const char *
name) = 0;
237 SWIGOUT(%kwargs vertexIntAttribValuesAsString;)
241 virtual std::vector<std::string> pointStringAttribValues(
const char *
name) = 0;
242 virtual std::vector<std::string> primStringAttribValues(
const char *
name) = 0;
243 virtual std::vector<std::string> vertexStringAttribValues(
const char *
name) = 0;
245 virtual void setPointFloatAttribValues(
246 const char *
name,
const std::vector<double> &
values) = 0;
247 virtual void setPrimFloatAttribValues(
248 const char *
name,
const std::vector<double> &
values) = 0;
249 virtual void setVertexFloatAttribValues(
250 const char *
name,
const std::vector<double> &
values) = 0;
253 virtual void opaqueSetPointFloatAttribValuesFromString(
257 virtual void opaqueSetPrimFloatAttribValuesFromString(
261 virtual void opaqueSetVertexFloatAttribValuesFromString(
265 virtual std::vector<std::vector<std::string>> pointStringListAttribValues(
const char *
name) = 0;
266 virtual std::vector<std::vector<std::string>> primStringListAttribValues(
const char *
name) = 0;
267 virtual std::vector<std::vector<std::string>> vertexStringListAttribValues(
const char *
name) = 0;
269 virtual std::vector<std::vector<int64>> pointIntListAttribValues(
const char *
name) = 0;
270 virtual std::vector<std::vector<int64>> primIntListAttribValues(
const char *
name) = 0;
271 virtual std::vector<std::vector<int64>> vertexIntListAttribValues(
const char *
name) = 0;
273 virtual std::vector<std::vector<double>> pointFloatListAttribValues(
const char *
name) = 0;
274 virtual std::vector<std::vector<double>> primFloatListAttribValues(
const char *
name) = 0;
275 virtual std::vector<std::vector<double>> vertexFloatListAttribValues(
const char *
name) = 0;
281 %kwargs setPointFloatAttribValuesFromString;
282 void setPointFloatAttribValuesFromString(
286 HOM_PyBuffer
buffer(values);
287 self->opaqueSetPointFloatAttribValuesFromString(
288 name, (
const char *)
buffer.myData,
buffer.myLength, float_type);
291 %kwargs setPrimFloatAttribValuesFromString;
292 void setPrimFloatAttribValuesFromString(
293 const char *name, InterpreterObject values,
296 HOM_PyBuffer
buffer(values);
297 self->opaqueSetPrimFloatAttribValuesFromString(
298 name, (
const char *)
buffer.myData,
buffer.myLength, float_type);
301 %kwargs setVertexFloatAttribValuesFromString;
302 void setVertexFloatAttribValuesFromString(
303 const char *name, InterpreterObject values,
306 HOM_PyBuffer
buffer(values);
307 self->opaqueSetVertexFloatAttribValuesFromString(
308 name, (
const char *)
buffer.myData,
buffer.myLength, float_type);
313 virtual void setPointIntAttribValues(
314 const char *name,
const std::vector<int64> &values) = 0;
315 virtual void setPrimIntAttribValues(
316 const char *name,
const std::vector<int64> &values) = 0;
317 virtual void setVertexIntAttribValues(
318 const char *name,
const std::vector<int64> &values) = 0;
321 virtual void opaqueSetPointIntAttribValuesFromString(
322 const char *name,
const char *values,
int64 length,
325 virtual void opaqueSetPrimIntAttribValuesFromString(
326 const char *name,
const char *values,
int64 length,
329 virtual void opaqueSetVertexIntAttribValuesFromString(
330 const char *name,
const char *values,
int64 length,
336 %kwargs setPointIntAttribValuesFromString;
337 void setPointIntAttribValuesFromString(
338 const char *name, InterpreterObject values,
341 HOM_PyBuffer
buffer(values);
342 self->opaqueSetPointIntAttribValuesFromString(
343 name, (
const char *)
buffer.myData,
buffer.myLength, int_type);
346 %kwargs setPrimIntAttribValuesFromString;
347 void setPrimIntAttribValuesFromString(
348 const char *name, InterpreterObject values,
351 HOM_PyBuffer
buffer(values);
352 self->opaqueSetPrimIntAttribValuesFromString(
353 name, (
const char *)
buffer.myData,
buffer.myLength, int_type);
356 %kwargs setVertexIntAttribValuesFromString;
357 void setVertexIntAttribValuesFromString(
358 const char *name, InterpreterObject values,
361 HOM_PyBuffer
buffer(values);
362 self->opaqueSetVertexIntAttribValuesFromString(
363 name, (
const char *)
buffer.myData,
buffer.myLength, int_type);
368 virtual void setPointStringAttribValues(
369 const char *name,
const std::vector<std::string> &values) = 0;
370 virtual void setPrimStringAttribValues(
371 const char *name,
const std::vector<std::string> &values) = 0;
372 virtual void setVertexStringAttribValues(
373 const char *name,
const std::vector<std::string> &values) = 0;
375 virtual void renamePointAttrib(
const char *old_name,
const char *new_name) = 0;
376 virtual void renamePrimAttrib(
const char *old_name,
const char *new_name) = 0;
377 virtual void renameVertexAttrib(
const char *old_name,
const char *new_name) = 0;
378 virtual void renameGlobalAttrib(
const char *old_name,
const char *new_name) = 0;
380 SWIGOUT(%newobject createPoint;)
382 virtual std::vector<HOM_ElemPtr<HOM_Point> >createPoints(
383 const std::vector<std::vector<double> > &point_positions) = 0;
384 virtual std::vector<HOM_ElemPtr<HOM_Point> >createPoints(
385 const std::vector<HOM_Vector3 *> &point_positions) = 0;
387 SWIGOUT(%newobject createPolygon;)
388 virtual HOM_Polygon *createPolygon(
bool is_closed=
true) = 0;
389 virtual std::vector<HOM_ElemPtr<HOM_Polygon> >createPolygons(
390 const std::vector<std::vector<HOM_Point *> > &
points,
391 bool is_closed=
true) = 0;
392 virtual std::vector<HOM_ElemPtr<HOM_Polygon> >createPolygons(
393 const std::vector<std::vector<int> > &point_numbers,
394 bool is_closed=
true) = 0;
396 SWIGOUT(%newobject createPacked;)
398 const char *packed_type,
401 SWIGOUT(%newobject createTetrahedron;)
402 virtual HOM_Prim *createTetrahedron() = 0;
404 SWIGOUT(%newobject createTetrahedronInPlace;)
408 SWIGOUT(%newobject createHexahedron;)
409 virtual HOM_Prim *createHexahedron() = 0;
411 SWIGOUT(%newobject createHexahedronInPlace;)
418 SWIGOUT(%newobject createNURBSCurve;)
419 SWIGOUT(%kwargs createNURBSCurve;)
420 virtual HOM_Face *createNURBSCurve(
int num_points=4,
bool is_closed=
false,
423 SWIGOUT(%newobject createBezierCurve;)
424 SWIGOUT(%kwargs createBezierCurve;)
425 virtual HOM_Face *createBezierCurve(
int num_points=4,
bool is_closed=
false,
428 SWIGOUT(%newobject createNURBSSurface;)
429 SWIGOUT(%kwargs createNURBSSurface;)
432 bool is_closed_in_u=
false,
bool is_closed_in_v=
false,
433 int order_u=4,
int order_v=4) = 0;
435 SWIGOUT(%newobject createBezierSurface;)
436 SWIGOUT(%kwargs createBezierSurface;)
439 bool is_closed_in_u=
false,
bool is_closed_in_v=
false,
440 int order_u=4,
int order_v=4) = 0;
442 SWIGOUT(%newobject createMeshSurface;)
443 SWIGOUT(%kwargs createMeshSurface;)
446 bool is_closed_in_u=
false,
bool is_closed_in_v=
false) = 0;
448 SWIGOUT(%newobject createVolume;)
453 SWIGOUT(%newobject createChannelPrim;)
454 SWIGOUT(%kwargs createChannelPrim;)
457 SWIGOUT(%newobject createCameraPrim;)
458 SWIGOUT(%kwargs createCameraPrim;)
464 virtual void transformPrims(
465 const std::vector<HOM_Prim *> &prims,
const HOM_Matrix4 &matrix) = 0;
466 virtual void transformPrims(
473 virtual void deletePrims(
474 const std::vector<HOM_Prim *> &prims,
bool keep_points =
false) = 0;
475 virtual void deletePrims(
478 SWIGOUT(%kwargs deletePrimsOutsideBoundingBox;)
479 virtual void deletePrimsOutsideBoundingBox(
482 virtual void deletePoints(
const std::vector<HOM_Point *> &
points) = 0;
494 bool transform_as_normal,
495 bool create_local_variable) = 0;
499 double default_value,
500 bool transform_as_normal,
501 bool create_local_variable) = 0;
505 const char *default_value,
506 bool transform_as_normal,
507 bool create_local_variable) = 0;
512 const std::vector<int64> &default_value,
513 bool transform_as_normal,
514 bool create_local_variable) = 0;
519 const std::vector<double> &default_value,
520 bool transform_as_normal,
521 bool create_local_variable) = 0;
526 const std::vector<std::string> &default_value,
527 bool transform_as_normal,
528 bool create_local_variable) = 0;
533 const std::map<std::string, hboost::any> &default_value,
534 bool transform_as_normal,
535 bool create_local_variable) = 0;
537 SWIGOUT(%kwargs addArrayAttrib;)
538 SWIGOUT(%newobject addArrayAttrib;)
542 int64 tuple_size = 1) = 0;
545 virtual void setGlobalAttribValue(
547 virtual void setGlobalAttribValue(
549 virtual void setGlobalAttribValue(
550 HOM_Attrib &attrib,
const char *attrib_value) = 0;
551 virtual void setGlobalAttribValue(
552 HOM_Attrib &attrib,
const std::vector<int64> &attrib_value) = 0;
553 virtual void setGlobalAttribValue(
554 HOM_Attrib &attrib,
const std::vector<double> &attrib_value) = 0;
555 virtual void setGlobalAttribValue(
556 HOM_Attrib &attrib,
const std::vector<std::string> &attrib_value) = 0;
557 virtual void setGlobalAttribValue(
558 HOM_Attrib &attrib,
const std::map<std::string, hboost::any> &attrib_value) = 0;
559 virtual void setGlobalAttribValue(
560 HOM_Attrib &attrib,
const std::vector<std::map<std::string,hboost::any> > &attrib_value) = 0;
562 virtual void setGlobalAttribValue(
563 const char *attrib_name,
int64 attrib_value) = 0;
564 virtual void setGlobalAttribValue(
565 const char *attrib_name,
double attrib_value) = 0;
566 virtual void setGlobalAttribValue(
567 const char *attrib_name,
const char *attrib_value) = 0;
575 virtual void setGlobalAttribValue(
576 const char *attrib_name,
const std::vector<int64> &attrib_value) = 0;
577 virtual void setGlobalAttribValue(
578 const char *attrib_name,
const std::vector<double> &attrib_value) = 0;
579 virtual void setGlobalAttribValue(
580 const char *attrib_name,
581 const std::vector<std::string> &attrib_value) = 0;
582 virtual void setGlobalAttribValue(
583 const char *attrib_name,
584 const std::map<std::string, hboost::any> &attrib_value) = 0;
585 virtual void setGlobalAttribValue(
586 const char *attrib_name,
587 const std::vector<std::map<std::string,hboost::any> > &attrib_value) = 0;
589 virtual void copyAttrib(
HOM_Attrib *attrib) = 0;
590 virtual void copyAttribs(
const std::vector<HOM_Attrib *> &attribs) = 0;
601 virtual int _copyPrimsForDrawable(
HOM_Geometry &src_geo,
const std::vector<HOM_Prim*> &prims) = 0;
602 virtual int _copyClearForDrawable(
bool keep) = 0;
604 virtual int _copyCacheTopology(
HOM_Geometry &src_geo) = 0;
606 virtual std::vector<HOM_ElemPtr<HOM_Point> > _getPointChildren(
HOM_Point *pt) = 0;
610 InterpreterObject attribValue(
const char *name)
611 {
return HOMattribValue(*
self, name); }
613 InterpreterObject attribValue(
HOM_Attrib &attrib)
614 {
return HOMattribValue(*
self, attrib); }
618 virtual std::vector<std::string> attributeCaptureRegions() = 0;
619 virtual std::vector<std::string> attributeCaptureObjectPaths() = 0;
622 virtual std::vector<std::string> intrinsicNames() = 0;
625 const char *intrinsic_name) = 0;
626 virtual size_t intrinsicSize(
const char *intrinsic_name) = 0;
627 virtual bool intrinsicReadOnly(
const char *intrinsic_name) = 0;
629 virtual void setIntrinsicValue(
const char *intrinsic_name,
double value) = 0;
630 virtual void setIntrinsicValue(
const char *intrinsic_name,
int value) = 0;
631 virtual void setIntrinsicValue(
const char *intrinsic_name,
int64 value) = 0;
632 virtual void setIntrinsicValue(
633 const char *intrinsic_name,
const char *
value) = 0;
634 virtual void setIntrinsicValue(
635 const char *intrinsic_name,
const std::vector<double> &
value) = 0;
636 virtual void setIntrinsicValue(
637 const char *intrinsic_name,
const std::vector<int> &
value) = 0;
638 virtual void setIntrinsicValue(
639 const char *intrinsic_name,
const std::vector<int64> &
value) = 0;
640 virtual void setIntrinsicValue(
641 const char *intrinsic_name,
const std::vector<std::string> &
value) = 0;
646 virtual void saveToFile(
const char *file_name) = 0;
648 virtual void loadFromFile(
const char *file_name) = 0;
658 virtual void clear() = 0;
664 const char *
pattern =
nullptr,
float min_hit=1e-2
f,
float max_hit=1e18f,
665 float tolerance=1e-2F) = 0;
667 virtual std::vector<int> _orderedPoints(
668 const char *groupname,
669 const char *corner_groupname,
672 virtual std::vector<HOM_ElemPtr<HOM_PointGroup> > pointGroups(
675 SWIGOUT(%newobject findPointGroup;)
677 const char *name,
HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
679 SWIGOUT(%newobject createPointGroup;)
680 SWIGOUT(%kwargs createPointGroup;)
683 bool is_ordered =
false,
684 bool unique_name =
false) = 0;
686 virtual std::vector<HOM_ElemPtr<HOM_PrimGroup> > primGroups(
689 SWIGOUT(%newobject findPrimGroup;)
691 const char *name,
HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
693 SWIGOUT(%newobject createPrimGroup;)
694 SWIGOUT(%kwargs createPrimGroup;)
697 bool is_ordered =
false,
698 bool unique_name =
false) = 0;
700 virtual std::vector<HOM_ElemPtr<HOM_EdgeGroup> > edgeGroups(
703 SWIGOUT(%newobject findEdgeGroup;)
705 const char *name,
HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
707 SWIGOUT(%newobject createEdgeGroup;)
709 const char *name) = 0;
711 virtual std::vector<HOM_ElemPtr<HOM_VertexGroup> > vertexGroups(
714 SWIGOUT(%newobject findVertexGroup;)
716 const char *name,
HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
718 SWIGOUT(%newobject createVertexGroup;)
720 const char *name,
bool is_ordered=
false) = 0;
734 nearestPrim(
const std::vector<double> &
position) = 0;
736 SWIGOUT(%newobject nearestPoint;)
739 nearestPoint(
const std::vector<double> &
position,
740 const char *ptgroup =
nullptr,
741 double max_radius = 1e+18
f) = 0;
743 SWIGOUT(%kwargs nearestPoints;)
745 nearestPoints(
const std::vector<double> &
position,
747 const char *ptgroup =
nullptr,
748 double max_radius = 1e+18
f) = 0;
752 primLoop(
const std::vector<HOM_Prim *> &prims,
753 HOM_EnumValue &loop_type = HOM_componentLoopType::Partial) = 0;
756 pointLoop(
const std::vector<HOM_Point *> &
points,
757 HOM_EnumValue &loop_type = HOM_componentLoopType::Partial) = 0;
760 edgeLoop(
const std::vector<HOM_Edge *> &edges,
762 bool full_loop_per_edge =
true,
763 bool force_ring =
false,
764 bool allow_ring =
true) = 0;
766 virtual std::vector<HOM_Vector3>
767 pointNormals(
const std::vector<HOM_Point *> &
points) = 0;
768 virtual std::vector<HOM_Vector3>
777 const char *purpose = NULL,
778 const char *traversal = NULL,
779 const char *path_attrib_name = NULL,
780 const char *name_attrib_name = NULL,
781 bool strip_layers =
false,
783 int lop_output_index = -1) = 0;
786 virtual void importUsdStageOpaque(
789 const char *purpose = NULL,
790 const char *traversal = NULL,
791 const char *path_attrib_name = NULL,
792 const char *name_attrib_name = NULL,
798 %kwargs importUsdStage;
800 InterpreterObject stage,
802 const char *purpose = NULL,
803 const char *traversal = NULL,
804 const char *path_attrib_name = NULL,
805 const char *name_attrib_name = NULL,
808 return self->importUsdStageOpaque(
809 stage, selection_rule, purpose, traversal,
810 path_attrib_name, name_attrib_name, frame);
820 SWIGOUT(%newobject _guDetailHandle;)
825 virtual HOMF_GeometryHandle& _geometryHandle() = 0;
827 virtual std::vector<int> vexAttribDataId() = 0;
829 virtual int64 modificationCounter() = 0;
830 virtual void incrementModificationCounter() = 0;
832 virtual void incrementAllDataIds() = 0;
834 SWIGOUT(%kwargs incrementDataIdsForAddOrRemove;)
835 virtual void incrementDataIdsForAddOrRemove(
836 bool for_points=
true,
bool for_prims=
true) = 0;
838 SWIGOUT(%newobject primitiveIntrinsicsDataId;)
840 virtual void incrementPrimitiveIntrinsicsDataId() = 0;
842 SWIGOUT(%newobject topologyDataId;)
844 virtual void incrementTopologyDataId() = 0;
846 SWIGOUT(%kwargs generateAttribMenu;)
847 virtual std::vector<std::string> generateAttribMenu(
852 bool array_type =
true,
853 bool scalar_type =
true,
854 bool case_sensitive =
true,
856 bool decode_tokens =
false) = 0;
859 virtual std::vector<std::string> _generateGroupMenu(
860 const std::vector<HOM_EnumValue *> &group_types,
861 bool include_selection,
862 bool include_name_attrib,
868 virtual bool isReadOnly() = 0;
870 virtual void _attribInfo(
const char *name,
int &attr_data_type,
int &attr_size,
bool &is_array_type) = 0;
872 virtual std::vector<std::string> extractPackedPaths(
const char *
pattern) = 0;
873 SWIGOUT(%newobject unpackFromFolder;)
875 SWIGOUT(%newobject unpackPropertiesFromFolder;)
876 virtual std::map<std::string, hboost::any> packedFolderProperties(
const char *
path) = 0;
878 virtual bool packToFolder(
881 bool is_folder =
false,
882 bool is_visible =
true,
883 bool pack =
true) = 0;
885 virtual bool removeFromFolder(
const char *
path) = 0;
SIM_API const UT_StringHolder vertex
GT_API const UT_StringHolder selection
__hostdev__ uint64_t pointCount() const
#define HOM_DESTRUCT_OBJECT(pointer)
GLdouble GLdouble GLint GLint const GLdouble * points
OIIO_UTIL_API bool copy(string_view from, string_view to, std::string &err)
GLsizei const GLfloat * value
GLsizei const GLchar *const * path
GLuint GLsizei GLsizei * length
string __repr__(VtArray< T > const &self)
std::tuple< Types...> UT_Tuple
virtual HOM_Geometry * newGeometry(HOM_Geometry *geo=nullptr, bool clone_data_ids=false)=0
GLint GLint GLsizei GLint GLenum GLenum type
bool any(const vbool4 &v)
HOM_Geometry(const HOM_Geometry &)
void ignore(T const &) VULKAN_HPP_NOEXCEPT
constexpr std::enable_if< I< type_count_base< T >::value, int >::type tuple_type_size(){return subtype_count< typename std::tuple_element< I, T >::type >::value+tuple_type_size< T, I+1 >);}template< typename T > struct type_count< T, typename std::enable_if< is_tuple_like< T >::value >::type >{static constexpr int value{tuple_type_size< T, 0 >)};};template< typename T > struct subtype_count{static constexpr int value{is_mutable_container< T >::value?expected_max_vector_size:type_count< T >::value};};template< typename T, typename Enable=void > struct type_count_min{static const int value{0};};template< typename T >struct type_count_min< T, typename std::enable_if<!is_mutable_container< T >::value &&!is_tuple_like< T >::value &&!is_wrapper< T >::value &&!is_complex< T >::value &&!std::is_void< T >::value >::type >{static constexpr int value{type_count< T >::value};};template< typename T > struct type_count_min< T, typename std::enable_if< is_complex< T >::value >::type >{static constexpr int value{1};};template< typename T >struct type_count_min< T, typename std::enable_if< is_wrapper< T >::value &&!is_complex< T >::value &&!is_tuple_like< T >::value >::type >{static constexpr int value{subtype_count_min< typename T::value_type >::value};};template< typename T, std::size_t I >constexpr typename std::enable_if< I==type_count_base< T >::value, int >::type tuple_type_size_min(){return 0;}template< typename T, std::size_t I > constexpr typename std::enable_if< I< type_count_base< T >::value, int >::type tuple_type_size_min(){return subtype_count_min< typename std::tuple_element< I, T >::type >::value+tuple_type_size_min< T, I+1 >);}template< typename T > struct type_count_min< T, typename std::enable_if< is_tuple_like< T >::value >::type >{static constexpr int value{tuple_type_size_min< T, 0 >)};};template< typename T > struct subtype_count_min{static constexpr int value{is_mutable_container< T >::value?((type_count< T >::value< expected_max_vector_size)?type_count< T >::value:0):type_count_min< T >::value};};template< typename T, typename Enable=void > struct expected_count{static const int value{0};};template< typename T >struct expected_count< T, typename std::enable_if<!is_mutable_container< T >::value &&!is_wrapper< T >::value &&!std::is_void< T >::value >::type >{static constexpr int value{1};};template< typename T > struct expected_count< T, typename std::enable_if< is_mutable_container< T >::value >::type >{static constexpr int value{expected_max_vector_size};};template< typename T >struct expected_count< T, typename std::enable_if<!is_mutable_container< T >::value &&is_wrapper< T >::value >::type >{static constexpr int value{expected_count< typename T::value_type >::value};};enum class object_category:int{char_value=1, integral_value=2, unsigned_integral=4, enumeration=6, boolean_value=8, floating_point=10, number_constructible=12, double_constructible=14, integer_constructible=16, string_assignable=23, string_constructible=24, other=45, wrapper_value=50, complex_number=60, tuple_value=70, container_value=80,};template< typename T, typename Enable=void > struct classify_object{static constexpr object_category value{object_category::other};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_integral< T >::value &&!std::is_same< T, char >::value &&std::is_signed< T >::value &&!is_bool< T >::value &&!std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::integral_value};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_integral< T >::value &&std::is_unsigned< T >::value &&!std::is_same< T, char >::value &&!is_bool< T >::value >::type >{static constexpr object_category value{object_category::unsigned_integral};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_same< T, char >::value &&!std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::char_value};};template< typename T > struct classify_object< T, typename std::enable_if< is_bool< T >::value >::type >{static constexpr object_category value{object_category::boolean_value};};template< typename T > struct classify_object< T, typename std::enable_if< std::is_floating_point< T >::value >::type >{static constexpr object_category value{object_category::floating_point};};template< typename T >struct classify_object< T, typename std::enable_if<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&std::is_assignable< T &, std::string >::value >::type >{static constexpr object_category value{object_category::string_assignable};};template< typename T >struct classify_object< T, typename std::enable_if<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&!std::is_assignable< T &, std::string >::value &&(type_count< T >::value==1)&&std::is_constructible< T, std::string >::value >::type >{static constexpr object_category value{object_category::string_constructible};};template< typename T > struct classify_object< T, typename std::enable_if< std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::enumeration};};template< typename T > struct classify_object< T, typename std::enable_if< is_complex< T >::value >::type >{static constexpr object_category value{object_category::complex_number};};template< typename T > struct uncommon_type{using type=typename std::conditional<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&!std::is_assignable< T &, std::string >::value &&!std::is_constructible< T, std::string >::value &&!is_complex< T >::value &&!is_mutable_container< T >::value &&!std::is_enum< T >::value, std::true_type, std::false_type >::type;static constexpr bool value=type::value;};template< typename T >struct classify_object< T, typename std::enable_if<(!is_mutable_container< T >::value &&is_wrapper< T >::value &&!is_tuple_like< T >::value &&uncommon_type< T >::value)>::type >{static constexpr object_category value{object_category::wrapper_value};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&is_direct_constructible< T, double >::value &&is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::number_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&!is_direct_constructible< T, double >::value &&is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::integer_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&is_direct_constructible< T, double >::value &&!is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::double_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< is_tuple_like< T >::value &&((type_count< T >::value >=2 &&!is_wrapper< T >::value)||(uncommon_type< T >::value &&!is_direct_constructible< T, double >::value &&!is_direct_constructible< T, int >::value)||(uncommon_type< T >::value &&type_count< T >::value >=2))>::type >{static constexpr object_category value{object_category::tuple_value};};template< typename T > struct classify_object< T, typename std::enable_if< is_mutable_container< T >::value >::type >{static constexpr object_category value{object_category::container_value};};template< typename T, enable_if_t< classify_object< T >::value==object_category::char_value, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"CHAR";}template< typename T, enable_if_t< classify_object< T >::value==object_category::integral_value||classify_object< T >::value==object_category::integer_constructible, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"INT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::unsigned_integral, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"UINT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::floating_point||classify_object< T >::value==object_category::number_constructible||classify_object< T >::value==object_category::double_constructible, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"FLOAT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::enumeration, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"ENUM";}template< typename T, enable_if_t< classify_object< T >::value==object_category::boolean_value, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"BOOLEAN";}template< typename T, enable_if_t< classify_object< T >::value==object_category::complex_number, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"COMPLEX";}template< typename T, enable_if_t< classify_object< T >::value >=object_category::string_assignable &&classify_object< T >::value<=object_category::other, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"TEXT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value >=2, detail::enabler >=detail::dummy >std::string type_name();template< typename T, enable_if_t< classify_object< T >::value==object_category::container_value||classify_object< T >::value==object_category::wrapper_value, detail::enabler >=detail::dummy >std::string type_name();template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value==1, detail::enabler >=detail::dummy >inline std::string type_name(){return type_name< typename std::decay< typename std::tuple_element< 0, T >::type >::type >);}template< typename T, std::size_t I >inline typename std::enable_if< I==type_count_base< T >::value, std::string >::type tuple_name(){return std::string{};}template< typename T, std::size_t I >inline typename std::enable_if<(I< type_count_base< T >::value), std::string >::type tuple_name(){auto str=std::string{type_name< typename std::decay< typename std::tuple_element< I, T >::type >::type >)}+ ','+tuple_name< T, I+1 >);if(str.back()== ',') str.pop_back();return str;}template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value >=2, detail::enabler > > std::string type_name()
Recursively generate the tuple type name.
#define HOM_CONSTRUCT_OBJECT(pointer)
GLdouble GLdouble GLint GLint order
GLuint const GLchar * name
GA_API const UT_StringHolder transform
GLenum GLsizei GLsizei GLint * values
OIIO_UTIL_API bool rename(string_view from, string_view to, std::string &err)
SIM_API const UT_StringHolder position
IMATH_CONSTEXPR14 bool intersect(const Line3< T > &line, const Vec3< T > &v0, const Vec3< T > &v1, const Vec3< T > &v2, Vec3< T > &pt, Vec3< T > &barycentric, bool &front) IMATH_NOEXCEPT
UT_Optional< double > HOM_OptionalDouble
HOM_API HOM_Module & HOM()