HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HOM_Geometry.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * COMMENTS:
7  */
8 
9 #ifndef __HOM_Geometry_h__
10 #define __HOM_Geometry_h__
11 
12 #include "HOM_API.h"
13 #include "HOM_BinaryString.h"
14 #include "HOM_Defines.h"
15 #include "HOM_Errors.h"
16 #include "HOM_IterableList.h"
17 #include "HOM_BoundingBox.h"
19 #include "HOM_Attrib.h"
20 #include "HOM_LopNode.h"
21 #include "HOM_LopSelectionRule.h"
22 #include <UT/UT_Tuple.h>
23 #include <vector>
24 #include <string>
25 
26 class HOM_AttribDataId;
27 class HOM_ChannelPrim;
28 class HOM_Edge;
29 class HOM_EdgeGroup;
30 class HOM_Face;
31 class HOM_GUDetailHandle;
32 class HOM_LopLockedStage;
33 class HOM_Matrix4;
34 class HOM_PackedGeometry;
35 class HOM_PackedPrim;
36 class HOM_Parm;
37 class HOM_Point;
38 class HOM_PointGroup;
39 class HOM_Polygon;
40 class HOM_Prim;
41 class HOM_PrimGroup;
42 class HOM_Selection;
43 class HOM_SopNode;
44 class HOM_Surface;
45 class HOM_VDB;
46 class HOM_Vector2;
47 class HOM_Vector3;
48 class HOM_Vertex;
49 class HOM_VertexGroup;
50 class HOM_Volume;
51 class HOMF_GeometryHandle;
52 
53 SWIGOUT(%rename(Geometry) HOM_Geometry;)
54 // Force SWIG to output an __init__ method even though it determines this
55 // class is abstract.
56 SWIGOUT(%feature("notabstract") HOM_Geometry;)
57 
59 {
60 public:
61 #ifdef SWIG
62 %extend
63 {
64  HOM_Geometry(HOM_Geometry *geo=nullptr, bool clone_data_ids=false)
65  { return HOM().newGeometry(geo, clone_data_ids); }
66 }
67 #else
69  { HOM_CONSTRUCT_OBJECT(this) }
71  { HOM_CONSTRUCT_OBJECT(this) }
72 #endif
73  virtual ~HOM_Geometry()
74  { HOM_DESTRUCT_OBJECT(this) }
75 
76  virtual std::string __repr__() = 0;
77 
78  SWIGOUT(%newobject sopNode;)
79  virtual HOM_SopNode *sopNode() = 0;
80  virtual int sopNodeOutputIndex() = 0;
81 
82  virtual bool isValid() = 0;
83 
84  SWIGOUT(%newobject freeze;)
85  virtual HOM_Geometry *freeze(bool read_only=false,
86  bool clone_data_ids=false) = 0;
87 
88  SWIGOUT(%newobject iterPoints;)
89  virtual HOM_IterableList<HOM_Point> *iterPoints() = 0;
90 
91  virtual std::vector<HOM_ElemPtr<HOM_Point> > points() = 0;
92 
93  SWIGOUT(%newobject point;)
94  virtual HOM_Point *point(int index) = 0;
95 
96  SWIGOUT(%newobject iterPrims;)
97  virtual HOM_IterableList<HOM_Prim> *iterPrims() = 0;
98 
99  virtual std::vector<HOM_ElemPtr<HOM_Prim> > prims() = 0;
100 
101  SWIGOUT(%newobject prim;)
102  virtual HOM_Prim *prim(int index) = 0;
103 
104  virtual std::vector<std::string> primTypeNames() = 0;
105  virtual std::vector<std::string> primTypeLabels() = 0;
106  virtual std::vector<std::string> primTypeIcons() = 0;
107  virtual bool containsPrimType(const char *type_name) = 0;
108  virtual bool containsPrimType(HOM_EnumValue &prim_type) = 0;
109  virtual int64 countPrimType(const char *type_name) = 0;
110  virtual int64 countPrimType(HOM_EnumValue &prim_type) = 0;
111  virtual int64 countUnusedPoints() = 0;
112 
113  virtual std::vector<HOM_ElemPtr<HOM_Prim> > primsOfType(HOM_EnumValue &prim_type) = 0;
114 
115  SWIGOUT(%newobject iterPrimsOfType;)
116  virtual HOM_IterableList<HOM_Prim> *iterPrimsOfType(HOM_EnumValue &prim_type) = 0;
117 
118  virtual int64 preferredPrecision() = 0;
119  virtual void setPreferredPrecision(int64 prec) = 0;
120 
121  virtual double averageMinDistance(
122  const HOM_Matrix4& local_transform,
123  HOM_Geometry& geometry,
124  const HOM_Matrix4& geometry_transform) = 0;
125 
126  virtual double averageEdgeLength() = 0;
127 
128  virtual std::vector<HOM_ElemPtr<HOM_Point> > globPoints(const char *pattern, bool ordered = false) = 0;
129 
130  virtual std::vector<HOM_ElemPtr<HOM_Prim> > globPrims(const char *pattern) = 0;
131 
132  virtual std::vector<HOM_ElemPtr<HOM_Vertex> > globVertices(
133  const char *pattern) = 0;
134 
135  virtual std::vector<HOM_ElemPtr<HOM_Edge> > globEdges(const char *pattern) = 0;
136 
137  // Wrapped in houpythonportion.py for the deprecated include_private flag
138  virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _pointAttribs(
139  HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
140 
141  // Wrapped in houpythonportion.py for the deprecated include_private flag
142  virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _primAttribs(
143  HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
144 
145  // Wrapped in houpythonportion.py for the deprecated include_private flag
146  virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _vertexAttribs(
147  HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
148 
149  // Wrapped in houpythonportion.py for the deprecated include_private flag
150  virtual std::vector<HOM_ElemPtr<HOM_Attrib> > _globalAttribs(
151  HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
152 
153 
154  SWIGOUT(%newobject findPointAttrib;)
155  virtual HOM_Attrib *findPointAttrib(
156  const char *name, HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
157 
158  SWIGOUT(%newobject findPrimAttrib;)
159  virtual HOM_Attrib *findPrimAttrib(
160  const char *name, HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
161 
162  SWIGOUT(%newobject findVertexAttrib;)
163  virtual HOM_Attrib *findVertexAttrib(
164  const char *name, HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
165 
166  SWIGOUT(%newobject findGlobalAttrib;)
167  virtual HOM_Attrib *findGlobalAttrib(
168  const char *name, HOM_EnumValue &scope = HOM_attribScope::Public) = 0;
169 
170  virtual HOM_EnumValue& attribType() = 0;
171 
172 
173  // These methods return global (detail) attribute values.
174  virtual double floatAttribValue(const char *name) = 0;
175 
176  virtual double floatAttribValue(HOM_Attrib &attrib) = 0;
177 
178  virtual std::vector<double> floatListAttribValue(const char *name) = 0;
179 
180  virtual std::vector<double> floatListAttribValue(HOM_Attrib &attrib) = 0;
181 
182  virtual int64 intAttribValue(const char *name) = 0;
183 
184  virtual int64 intAttribValue(HOM_Attrib &attrib) = 0;
185 
186  virtual std::vector<int64> intListAttribValue(const char *name) = 0;
187 
188  virtual std::vector<int64> intListAttribValue(HOM_Attrib &attrib) = 0;
189 
190  virtual std::string stringAttribValue(const char *name) = 0;
191 
192  virtual std::string stringAttribValue(HOM_Attrib &attrib) = 0;
193 
194  virtual std::vector<std::string> stringListAttribValue(const char *name) = 0;
195 
196  virtual std::vector<std::string> stringListAttribValue(HOM_Attrib &attrib) = 0;
197  virtual std::map<std::string,hboost::any> dictAttribValue(const char *name) = 0;
198  virtual std::map<std::string,hboost::any> dictAttribValue(HOM_Attrib &name) = 0;
199  virtual std::vector<std::map<std::string,hboost::any> > dictListAttribValue(const char *name) = 0;
200  virtual std::vector<std::map<std::string,hboost::any> > dictListAttribValue(HOM_Attrib &name) = 0;
201 
202 
203  // These methods return/set arrays of point/primitive attribute values.
204  virtual std::vector<double> pointFloatAttribValues(const char *name) = 0;
205  SWIGOUT(%kwargs pointFloatAttribValuesAsString;)
206  virtual HOM_BinaryString pointFloatAttribValuesAsString(const char *name,
207  HOM_EnumValue &float_type = HOM_numericData::Float32) = 0;
208  virtual std::vector<double> primFloatAttribValues(const char *name) = 0;
209  SWIGOUT(%kwargs primFloatAttribValuesAsString;)
210  virtual HOM_BinaryString primFloatAttribValuesAsString(const char *name,
211  HOM_EnumValue &float_type = HOM_numericData::Float32) = 0;
212  virtual std::vector<double> vertexFloatAttribValues(const char *name) = 0;
213  SWIGOUT(%kwargs vertexFloatAttribValuesAsString;)
214  virtual HOM_BinaryString vertexFloatAttribValuesAsString(const char *name,
215  HOM_EnumValue &float_type = HOM_numericData::Float32) = 0;
216 
217  virtual std::vector<int64> pointIntAttribValues(const char *name) = 0;
218  SWIGOUT(%kwargs pointIntAttribValuesAsString;)
219  virtual HOM_BinaryString pointIntAttribValuesAsString(const char *name,
221  virtual std::vector<int64> primIntAttribValues(const char *name) = 0;
222  SWIGOUT(%kwargs primIntAttribValuesAsString;)
223  virtual HOM_BinaryString primIntAttribValuesAsString(const char *name,
225  virtual std::vector<int64> vertexIntAttribValues(const char *name) = 0;
226  SWIGOUT(%kwargs vertexIntAttribValuesAsString;)
227  virtual HOM_BinaryString vertexIntAttribValuesAsString(const char *name,
229 
230  virtual std::vector<std::string> pointStringAttribValues(const char *name) = 0;
231  virtual std::vector<std::string> primStringAttribValues(const char *name) = 0;
232  virtual std::vector<std::string> vertexStringAttribValues(const char *name) = 0;
233 
234  virtual void setPointFloatAttribValues(
235  const char *name, const std::vector<double> &values) = 0;
236  virtual void setPrimFloatAttribValues(
237  const char *name, const std::vector<double> &values) = 0;
238  virtual void setVertexFloatAttribValues(
239  const char *name, const std::vector<double> &values) = 0;
240 
241  SWIGOUT(%ignore opaqueSetPointFloatAttribValuesFromString);
242  virtual void opaqueSetPointFloatAttribValuesFromString(
243  const char *name, const char *values, int64 length,
245  SWIGOUT(%ignore opaqueSetPrimFloatAttribValuesFromString);
246  virtual void opaqueSetPrimFloatAttribValuesFromString(
247  const char *name, const char *values, int64 length,
249  SWIGOUT(%ignore opaqueSetVertexFloatAttribValuesFromString);
250  virtual void opaqueSetVertexFloatAttribValuesFromString(
251  const char *name, const char *values, int64 length,
253 
254 #ifdef SWIG
255 %extend
256 {
257  %kwargs setPointFloatAttribValuesFromString;
258  void setPointFloatAttribValuesFromString(
259  const char *name, InterpreterObject values,
260  HOM_EnumValue &float_type = HOM_numericData::Float32)
261  {
262  HOM_PyBuffer buffer(values);
263  self->opaqueSetPointFloatAttribValuesFromString(
264  name, (const char *)buffer.myData, buffer.myLength, float_type);
265  }
266 
267  %kwargs setPrimFloatAttribValuesFromString;
268  void setPrimFloatAttribValuesFromString(
269  const char *name, InterpreterObject values,
270  HOM_EnumValue &float_type = HOM_numericData::Float32)
271  {
272  HOM_PyBuffer buffer(values);
273  self->opaqueSetPrimFloatAttribValuesFromString(
274  name, (const char *)buffer.myData, buffer.myLength, float_type);
275  }
276 
277  %kwargs setVertexFloatAttribValuesFromString;
278  void setVertexFloatAttribValuesFromString(
279  const char *name, InterpreterObject values,
280  HOM_EnumValue &float_type = HOM_numericData::Float32)
281  {
282  HOM_PyBuffer buffer(values);
283  self->opaqueSetVertexFloatAttribValuesFromString(
284  name, (const char *)buffer.myData, buffer.myLength, float_type);
285  }
286 }
287 #endif
288 
289  virtual void setPointIntAttribValues(
290  const char *name, const std::vector<int64> &values) = 0;
291  virtual void setPrimIntAttribValues(
292  const char *name, const std::vector<int64> &values) = 0;
293  virtual void setVertexIntAttribValues(
294  const char *name, const std::vector<int64> &values) = 0;
295 
296  SWIGOUT(%ignore opaqueSetPointIntAttribValuesFromString);
297  virtual void opaqueSetPointIntAttribValuesFromString(
298  const char *name, const char *values, int64 length,
299  HOM_EnumValue &int_type) = 0;
300  SWIGOUT(%ignore opaqueSetPrimIntAttribValuesFromString);
301  virtual void opaqueSetPrimIntAttribValuesFromString(
302  const char *name, const char *values, int64 length,
303  HOM_EnumValue &int_type) = 0;
304  SWIGOUT(%ignore opaqueSetVertexIntAttribValuesFromString);
305  virtual void opaqueSetVertexIntAttribValuesFromString(
306  const char *name, const char *values, int64 length,
307  HOM_EnumValue &int_type) = 0;
308 
309 #ifdef SWIG
310 %extend
311 {
312  %kwargs setPointIntAttribValuesFromString;
313  void setPointIntAttribValuesFromString(
314  const char *name, InterpreterObject values,
316  {
317  HOM_PyBuffer buffer(values);
318  self->opaqueSetPointIntAttribValuesFromString(
319  name, (const char *)buffer.myData, buffer.myLength, int_type);
320  }
321 
322  %kwargs setPrimIntAttribValuesFromString;
323  void setPrimIntAttribValuesFromString(
324  const char *name, InterpreterObject values,
326  {
327  HOM_PyBuffer buffer(values);
328  self->opaqueSetPrimIntAttribValuesFromString(
329  name, (const char *)buffer.myData, buffer.myLength, int_type);
330  }
331 
332  %kwargs setVertexIntAttribValuesFromString;
333  void setVertexIntAttribValuesFromString(
334  const char *name, InterpreterObject values,
336  {
337  HOM_PyBuffer buffer(values);
338  self->opaqueSetVertexIntAttribValuesFromString(
339  name, (const char *)buffer.myData, buffer.myLength, int_type);
340  }
341 }
342 #endif
343 
344  virtual void setPointStringAttribValues(
345  const char *name, const std::vector<std::string> &values) = 0;
346  virtual void setPrimStringAttribValues(
347  const char *name, const std::vector<std::string> &values) = 0;
348  virtual void setVertexStringAttribValues(
349  const char *name, const std::vector<std::string> &values) = 0;
350 
351  virtual void renamePointAttrib(const char *old_name, const char *new_name) = 0;
352  virtual void renamePrimAttrib(const char *old_name, const char *new_name) = 0;
353  virtual void renameVertexAttrib(const char *old_name, const char *new_name) = 0;
354  virtual void renameGlobalAttrib(const char *old_name, const char *new_name) = 0;
355 
356  SWIGOUT(%newobject createPoint;)
357  virtual HOM_Point *createPoint() = 0;
358  virtual std::vector<HOM_ElemPtr<HOM_Point> >createPoints(
359  const std::vector<std::vector<double> > &point_positions) = 0;
360  virtual std::vector<HOM_ElemPtr<HOM_Point> >createPoints(
361  const std::vector<HOM_Vector3 *> &point_positions) = 0;
362 
363  SWIGOUT(%newobject createPolygon;)
364  virtual HOM_Polygon *createPolygon(bool is_closed=true) = 0;
365  virtual std::vector<HOM_ElemPtr<HOM_Polygon> >createPolygons(
366  const std::vector<std::vector<HOM_Point *> > &points,
367  bool is_closed=true) = 0;
368  virtual std::vector<HOM_ElemPtr<HOM_Polygon> >createPolygons(
369  const std::vector<std::vector<int> > &point_numbers,
370  bool is_closed=true) = 0;
371 
372  SWIGOUT(%newobject createPacked;)
373  virtual HOM_PackedPrim *createPacked(
374  const char *packed_type,
375  HOM_Point *point = nullptr) = 0;
376 
377  SWIGOUT(%newobject createTetrahedron;)
378  virtual HOM_Prim *createTetrahedron() = 0;
379 
380  SWIGOUT(%newobject createTetrahedronInPlace;)
381  virtual HOM_Prim *createTetrahedronInPlace(HOM_Point *p0, HOM_Point *p1,
382  HOM_Point *p2, HOM_Point *p3) = 0;
383 
384  SWIGOUT(%newobject createHexahedron;)
385  virtual HOM_Prim *createHexahedron() = 0;
386 
387  SWIGOUT(%newobject createHexahedronInPlace;)
388  virtual HOM_Prim *createHexahedronInPlace(HOM_Point *p0, HOM_Point *p1,
389  HOM_Point *p2, HOM_Point *p3,
390  HOM_Point *p4, HOM_Point *p5,
391  HOM_Point *p6, HOM_Point *p7
392  ) = 0;
393 
394  SWIGOUT(%newobject createNURBSCurve;)
395  SWIGOUT(%kwargs createNURBSCurve;)
396  virtual HOM_Face *createNURBSCurve(int num_points=4, bool is_closed=false,
397  int order=4) = 0;
398 
399  SWIGOUT(%newobject createBezierCurve;)
400  SWIGOUT(%kwargs createBezierCurve;)
401  virtual HOM_Face *createBezierCurve(int num_points=4, bool is_closed=false,
402  int order=4) = 0;
403 
404  SWIGOUT(%newobject createNURBSSurface;)
405  SWIGOUT(%kwargs createNURBSSurface;)
406  virtual HOM_Surface *createNURBSSurface(
407  int rows, int cols,
408  bool is_closed_in_u=false, bool is_closed_in_v=false,
409  int order_u=4, int order_v=4) = 0;
410 
411  SWIGOUT(%newobject createBezierSurface;)
412  SWIGOUT(%kwargs createBezierSurface;)
413  virtual HOM_Surface *createBezierSurface(
414  int rows, int cols,
415  bool is_closed_in_u=false, bool is_closed_in_v=false,
416  int order_u=4, int order_v=4) = 0;
417 
418  SWIGOUT(%newobject createMeshSurface;)
419  SWIGOUT(%kwargs createMeshSurface;)
420  virtual HOM_Surface *createMeshSurface(
421  int rows, int cols,
422  bool is_closed_in_u=false, bool is_closed_in_v=false) = 0;
423 
424  SWIGOUT(%newobject createVolume;)
425  SWIGOUT(%kwargs createVolume;)
426  virtual HOM_Volume *createVolume(
427  int xres, int yres, int zres, HOM_BoundingBox *bounding_box=NULL) = 0;
428 
429  SWIGOUT(%newobject createChannelPrim;)
430  SWIGOUT(%kwargs createChannelPrim;)
431  virtual HOM_ChannelPrim *createChannelPrim() = 0;
432 
433 
434  virtual void transform(HOM_Matrix4 &matrix) = 0;
435 
436  virtual void transformPrims(
437  const std::vector<HOM_Prim *> &prims, const HOM_Matrix4 &matrix) = 0;
438  virtual void transformPrims(
439  const HOM_PrimGroup &prims, const HOM_Matrix4 &matrix) = 0;
440 
441  // Swig does not allow keyword arguments for overloaded functions, so
442  // deletePrims is wrapped in houpythonportion.py to enable keyword
443  // arguments. If you want to change the signature of deletePrims, you must
444  // also edit houpythonportion.py.
445  virtual void deletePrims(
446  const std::vector<HOM_Prim *> &prims, bool keep_points = false) = 0;
447  virtual void deletePrims(
448  const HOM_PrimGroup &prims, bool keep_points = false) = 0;
449 
450  SWIGOUT(%kwargs deletePrimsOutsideBoundingBox;)
451  virtual void deletePrimsOutsideBoundingBox(
452  const HOM_BoundingBox &bbox) = 0;
453 
454  virtual void deletePoints(const std::vector<HOM_Point *> &points) = 0;
455  virtual void deletePoints(const HOM_PointGroup &points) = 0;
456 
457 
458  // Swig does not allow keyword arguments for overloaded functions, so
459  // addAttrib is wrapped in houpythonportion.py to enable keyword
460  // arguments. If you want to change the signature of addAttrib, you must
461  // also edit houpythonportion.py.
462  SWIGOUT(%newobject addAttrib;)
463  virtual HOM_Attrib *addAttrib(
464  HOM_EnumValue &type, const char *name,
465  int64 default_value,
466  bool transform_as_normal,
467  bool create_local_variable) = 0;
468 
469  virtual HOM_Attrib *addAttrib(
470  HOM_EnumValue &type, const char *name,
471  double default_value,
472  bool transform_as_normal,
473  bool create_local_variable) = 0;
474 
475  virtual HOM_Attrib *addAttrib(
476  HOM_EnumValue &type, const char *name,
477  const char *default_value,
478  bool transform_as_normal,
479  bool create_local_variable) = 0;
480 
481  virtual HOM_Attrib *addAttrib(
483  const char *name,
484  const std::vector<int64> &default_value,
485  bool transform_as_normal,
486  bool create_local_variable) = 0;
487 
488  virtual HOM_Attrib *addAttrib(
490  const char *name,
491  const std::vector<double> &default_value,
492  bool transform_as_normal,
493  bool create_local_variable) = 0;
494 
495  virtual HOM_Attrib *addAttrib(
497  const char *name,
498  const std::vector<std::string> &default_value,
499  bool transform_as_normal,
500  bool create_local_variable) = 0;
501 
502  virtual HOM_Attrib *addAttrib(
504  const char *name,
505  const std::map<std::string, hboost::any> &default_value,
506  bool transform_as_normal,
507  bool create_local_variable) = 0;
508 
509  SWIGOUT(%kwargs addArrayAttrib;)
510  SWIGOUT(%newobject addArrayAttrib;)
511  virtual HOM_Attrib *addArrayAttrib(
512  HOM_EnumValue &type, const char *name,
513  HOM_EnumValue &data_type,
514  int64 tuple_size = 1) = 0;
515 
516 
517  virtual void setGlobalAttribValue(
518  HOM_Attrib &attrib, int64 attrib_value) = 0;
519  virtual void setGlobalAttribValue(
520  HOM_Attrib &attrib, double attrib_value) = 0;
521  virtual void setGlobalAttribValue(
522  HOM_Attrib &attrib, const char *attrib_value) = 0;
523  virtual void setGlobalAttribValue(
524  HOM_Attrib &attrib, const std::vector<int64> &attrib_value) = 0;
525  virtual void setGlobalAttribValue(
526  HOM_Attrib &attrib, const std::vector<double> &attrib_value) = 0;
527  virtual void setGlobalAttribValue(
528  HOM_Attrib &attrib, const std::vector<std::string> &attrib_value) = 0;
529  virtual void setGlobalAttribValue(
530  HOM_Attrib &attrib, const std::map<std::string, hboost::any> &attrib_value) = 0;
531  virtual void setGlobalAttribValue(
532  HOM_Attrib &attrib, const std::vector<std::map<std::string,hboost::any> > &attrib_value) = 0;
533 
534  virtual void setGlobalAttribValue(
535  const char *attrib_name, int64 attrib_value) = 0;
536  virtual void setGlobalAttribValue(
537  const char *attrib_name, double attrib_value) = 0;
538  virtual void setGlobalAttribValue(
539  const char *attrib_name, const char *attrib_value) = 0;
540  // Note that, because of strangess the with way swig works when deciding
541  // which overloaded method to call, it's very important that we list the
542  // vector of ints before the vector of doubles. Otherwise, swig will call
543  // the double version when you pass in a vector of ints.
544  // It isn't that simple, the order is important but also depends on
545  // everything else in the override, so you may have to switch these
546  // until SWIG generates the right code...
547  virtual void setGlobalAttribValue(
548  const char *attrib_name, const std::vector<int64> &attrib_value) = 0;
549  virtual void setGlobalAttribValue(
550  const char *attrib_name, const std::vector<double> &attrib_value) = 0;
551  virtual void setGlobalAttribValue(
552  const char *attrib_name,
553  const std::vector<std::string> &attrib_value) = 0;
554  virtual void setGlobalAttribValue(
555  const char *attrib_name,
556  const std::map<std::string, hboost::any> &attrib_value) = 0;
557  virtual void setGlobalAttribValue(
558  const char *attrib_name,
559  const std::vector<std::map<std::string,hboost::any> > &attrib_value) = 0;
560 
561  virtual void copyAttrib(HOM_Attrib *attrib) = 0;
562  virtual void copyAttribs(const std::vector<HOM_Attrib *> &attribs) = 0;
563 
564  SWIGOUT(%kwargs copy;)
565  virtual void copy(HOM_Geometry &geometry, bool clone_data_ids = false,
566  const HOM_Selection *prims = nullptr) = 0;
567 
568  virtual void copyPoints(HOM_Geometry &geometry, const HOM_PointGroup *points = nullptr) = 0;
569  virtual void copyPrims(HOM_Geometry &geometry, const HOM_PrimGroup *prims = nullptr) = 0;
570  virtual void copyEdges(HOM_Geometry &geometry, const HOM_EdgeGroup *edges = nullptr) = 0;
571 
572  virtual int _copySelectionForDrawable(HOM_Geometry &src_geo, const HOM_Selection *sel) = 0;
573  virtual int _copyPrimsForDrawable(HOM_Geometry &src_geo, const std::vector<HOM_Prim*> &prims) = 0;
574  virtual int _copyClearForDrawable(bool keep) = 0;
575  virtual int _replaceWith(HOM_Geometry &src_geo) = 0;
576  virtual int _copyCacheTopology(HOM_Geometry &src_geo) = 0;
577 
578  virtual std::vector<HOM_ElemPtr<HOM_Point> > _getPointChildren(HOM_Point *pt) = 0;
579 #ifdef SWIG
580 %extend
581 {
582  InterpreterObject attribValue(const char *name)
583  { return HOMattribValue(*self, name); }
584 
585  InterpreterObject attribValue(HOM_Attrib &attrib)
586  { return HOMattribValue(*self, attrib); }
587 }
588 #endif
589 
590  virtual std::vector<std::string> attributeCaptureRegions() = 0;
591  virtual std::vector<std::string> attributeCaptureObjectPaths() = 0;
592 
593 
594  virtual std::vector<std::string> intrinsicNames() = 0;
595 
596  virtual hboost::any intrinsicValue(
597  const char *intrinsic_name) = 0;
598  virtual size_t intrinsicSize(const char *intrinsic_name) = 0;
599  virtual bool intrinsicReadOnly(const char *intrinsic_name) = 0;
600 
601  virtual void setIntrinsicValue(const char *intrinsic_name, double value) = 0;
602  virtual void setIntrinsicValue(const char *intrinsic_name, int value) = 0;
603  virtual void setIntrinsicValue(const char *intrinsic_name, int64 value) = 0;
604  virtual void setIntrinsicValue(
605  const char *intrinsic_name, const char *value) = 0;
606  virtual void setIntrinsicValue(
607  const char *intrinsic_name, const std::vector<double> &value) = 0;
608  virtual void setIntrinsicValue(
609  const char *intrinsic_name, const std::vector<int> &value) = 0;
610  virtual void setIntrinsicValue(
611  const char *intrinsic_name, const std::vector<int64> &value) = 0;
612  virtual void setIntrinsicValue(
613  const char *intrinsic_name, const std::vector<std::string> &value) = 0;
614 
615  virtual HOM_BinaryString data() = 0;
616  virtual void load(HOM_BinaryString data) = 0;
617 
618  virtual void saveToFile(const char *file_name) = 0;
619 
620  virtual void loadFromFile(const char *file_name) = 0;
621 
622  SWIGOUT(%kwargs merge;)
623  virtual void merge(HOM_Geometry &geometry, bool clone_data_ids = false,
624  const HOM_Selection *prims = nullptr) = 0;
625 
626  virtual void mergePoints(HOM_Geometry &geometry, const HOM_PointGroup *points = nullptr) = 0;
627  virtual void mergePrims(HOM_Geometry &geometry, const HOM_PrimGroup *prims = nullptr) = 0;
628  virtual void mergeEdges(HOM_Geometry &geometry, const HOM_EdgeGroup *edges = nullptr) = 0;
629 
630  virtual void clear() = 0;
631 
632  SWIGOUT(%kwargs intersect;)
633  virtual int intersect(
634  const HOM_Vector3 &rayorig, const HOM_Vector3 &dir,
636  const char *pattern = nullptr, float min_hit=1e-2f, float max_hit=1e18f,
637  float tolerance=1e-2F) = 0;
638 
639  virtual std::vector<int> _orderedPoints(
640  const char *groupname,
641  const char *corner_groupname,
642  HOM_Vector2 &dimensions) = 0;
643 
644  virtual std::vector<HOM_ElemPtr<HOM_PointGroup> > pointGroups(
645  HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
646 
647  SWIGOUT(%newobject findPointGroup;)
648  virtual HOM_PointGroup *findPointGroup(
649  const char *name, HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
650 
651  SWIGOUT(%newobject createPointGroup;)
652  SWIGOUT(%kwargs createPointGroup;)
653  virtual HOM_PointGroup *createPointGroup(
654  const char *name,
655  bool is_ordered = false,
656  bool unique_name = false) = 0;
657 
658  virtual std::vector<HOM_ElemPtr<HOM_PrimGroup> > primGroups(
659  HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
660 
661  SWIGOUT(%newobject findPrimGroup;)
662  virtual HOM_PrimGroup *findPrimGroup(
663  const char *name, HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
664 
665  SWIGOUT(%newobject createPrimGroup;)
666  SWIGOUT(%kwargs createPrimGroup;)
667  virtual HOM_PrimGroup *createPrimGroup(
668  const char *name,
669  bool is_ordered = false,
670  bool unique_name = false) = 0;
671 
672  virtual std::vector<HOM_ElemPtr<HOM_EdgeGroup> > edgeGroups(
673  HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
674 
675  SWIGOUT(%newobject findEdgeGroup;)
676  virtual HOM_EdgeGroup *findEdgeGroup(
677  const char *name, HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
678 
679  SWIGOUT(%newobject createEdgeGroup;)
680  virtual HOM_EdgeGroup *createEdgeGroup(
681  const char *name) = 0;
682 
683  virtual std::vector<HOM_ElemPtr<HOM_VertexGroup> > vertexGroups(
684  HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
685 
686  SWIGOUT(%newobject findVertexGroup;)
687  virtual HOM_VertexGroup *findVertexGroup(
688  const char *name, HOM_EnumValue &scope = HOM_groupScope::Public) = 0;
689 
690  SWIGOUT(%newobject createVertexGroup;)
691  virtual HOM_VertexGroup *createVertexGroup(
692  const char *name, bool is_ordered=false) = 0;
693 
694  SWIGOUT(%newobject findEdge;)
695  virtual HOM_Edge *findEdge(HOM_Point * p0, HOM_Point * p1) = 0;
696 
697  virtual HOM_BoundingBox boundingBox(HOM_Matrix4* transform = nullptr) = 0;
698  virtual HOM_BoundingBox pointBoundingBox(const char *ptgroup) = 0;
699  virtual HOM_BoundingBox primBoundingBox(const char *primgroup) = 0;
700 
701  virtual HOM_OrientedBoundingBox orientedBoundingBox() = 0;
702  virtual HOM_OrientedBoundingBox orientedPointBoundingBox(const char *ptgroup) = 0;
703  virtual HOM_OrientedBoundingBox orientedPrimBoundingBox(const char *primgroup) = 0;
704 
705  virtual UT_Tuple<HOM_ElemPtr<HOM_Prim>, double, double, double>
706  nearestPrim(const std::vector<double> &position) = 0;
707 
708  SWIGOUT(%newobject nearestPoint;)
709  SWIGOUT(%kwargs nearestPoint;)
710  virtual HOM_Point *
711  nearestPoint(const std::vector<double> &position,
712  const char *ptgroup = nullptr,
713  double max_radius = 1e+18f) = 0;
714 
715  SWIGOUT(%kwargs nearestPoints;)
716  virtual std::vector<HOM_ElemPtr<HOM_Point> >
717  nearestPoints(const std::vector<double> &position,
718  int64 max_points,
719  const char *ptgroup = nullptr,
720  double max_radius = 1e+18f) = 0;
721 
722  SWIGOUT(%kwargs primLoop;)
723  virtual std::vector<HOM_ElemPtr<HOM_Prim> >
724  primLoop(const std::vector<HOM_Prim *> &prims,
725  HOM_EnumValue &loop_type = HOM_componentLoopType::Partial) = 0;
726  SWIGOUT(%kwargs pointLoop;)
727  virtual std::vector<HOM_ElemPtr<HOM_Point> >
728  pointLoop(const std::vector<HOM_Point *> &points,
729  HOM_EnumValue &loop_type = HOM_componentLoopType::Partial) = 0;
730  SWIGOUT(%kwargs edgeLoop;)
731  virtual std::vector<HOM_ElemPtr<HOM_Edge> >
732  edgeLoop(const std::vector<HOM_Edge *> &edges,
733  HOM_EnumValue &loop_type = HOM_componentLoopType::Partial,
734  bool full_loop_per_edge = true,
735  bool force_ring = false,
736  bool allow_ring = true) = 0;
737 
738  virtual std::vector<HOM_Vector3>
739  pointNormals(const std::vector<HOM_Point *> &points) = 0;
740  virtual std::vector<HOM_Vector3>
741  pointNormals(const HOM_PointGroup &points) = 0;
742 
743  SWIGOUT(%newobject importLop;)
744  SWIGOUT(%kwargs importLop;)
745  virtual HOM_LopLockedStage *
746  importLop(
747  HOM_LopNode &lopnode,
748  HOM_LopSelectionRule &selection_rule,
749  const char *purpose = NULL,
750  const char *traversal = NULL,
751  const char *path_attrib_name = NULL,
752  const char *name_attrib_name = NULL,
753  bool strip_layers = false,
754  HOM_OptionalDouble frame = HOM_OptionalDouble()) = 0;
755 
756  SWIGOUT(%ignore importUsdStageOpaque;)
757  virtual void importUsdStageOpaque(
758  void *stage,
759  HOM_LopSelectionRule &selection_rule,
760  const char *purpose = NULL,
761  const char *traversal = NULL,
762  const char *path_attrib_name = NULL,
763  const char *name_attrib_name = NULL,
764  HOM_OptionalDouble frame = HOM_OptionalDouble()) = 0;
765 
766 #ifdef SWIG
767 %extend
768 {
769  %kwargs importUsdStage;
770  void importUsdStage(
771  InterpreterObject stage,
772  HOM_LopSelectionRule &selection_rule,
773  const char *purpose = NULL,
774  const char *traversal = NULL,
775  const char *path_attrib_name = NULL,
776  const char *name_attrib_name = NULL,
778  {
779  return self->importUsdStageOpaque(
780  stage, selection_rule, purpose, traversal,
781  path_attrib_name, name_attrib_name, frame);
782  }
783 }
784 #endif
785 
786  SWIGOUT(%newobject selection;)
787  virtual HOM_Selection *selection() = 0;
788 
789  // This method is not documented in the user documentation. See
790  // the comments in HOMF_Geometry.C for what it does.
791  SWIGOUT(%newobject _guDetailHandle;)
792  virtual HOM_GUDetailHandle *_guDetailHandle() = 0;
793 
794  // This method is not documented in the user documentation. See the
795  // comments in HOMF_Geometry.C for what it does.
796  virtual HOMF_GeometryHandle& _geometryHandle() = 0;
797 
798  virtual std::vector<int> vexAttribDataId() = 0;
799 
800  virtual int64 modificationCounter() = 0;
801  virtual void incrementModificationCounter() = 0;
802 
803  virtual void incrementAllDataIds() = 0;
804 
805  SWIGOUT(%kwargs incrementDataIdsForAddOrRemove;)
806  virtual void incrementDataIdsForAddOrRemove(
807  bool for_points=true, bool for_prims=true) = 0;
808 
809  SWIGOUT(%newobject primitiveIntrinsicsDataId;)
810  virtual HOM_AttribDataId *primitiveIntrinsicsDataId() = 0;
811  virtual void incrementPrimitiveIntrinsicsDataId() = 0;
812 
813  SWIGOUT(%newobject topologyDataId;)
814  virtual HOM_AttribDataId *topologyDataId() = 0;
815  virtual void incrementTopologyDataId() = 0;
816 
817  SWIGOUT(%kwargs generateAttribMenu;)
818  virtual std::vector<std::string> generateAttribMenu(
819  HOM_EnumValue *attrib_type = nullptr,
820  HOM_EnumValue *data_type = nullptr,
821  int min_size = 1,
822  int max_size = -1,
823  bool array_type = true,
824  bool scalar_type = true,
825  bool case_sensitive = true,
826  const char *pattern = "*",
827  bool decode_tokens = false) = 0;
828 
829  // Wrapped in houpythonportion to handle kwargs for an overloaded method.
830  virtual std::vector<std::string> _generateGroupMenu(
831  const std::vector<HOM_EnumValue *> &group_types,
832  bool include_selection,
833  bool include_name_attrib,
834  bool case_sensitive,
835  const char *pattern,
836  bool decode_tokens,
837  HOM_Parm *parm) = 0;
838 
839  virtual bool isReadOnly() = 0;
840 
841  virtual void _attribInfo( const char *name, int &attr_data_type, int &attr_size, bool &is_array_type) = 0;
842 
843  virtual std::vector<std::string> extractPackedPaths(const char *pattern) = 0;
844  SWIGOUT(%newobject unpackFromFolder;)
845  virtual HOM_Geometry *unpackFromFolder(const char *path) = 0;
846  SWIGOUT(%newobject unpackPropertiesFromFolder;)
847  virtual std::map<std::string, hboost::any> packedFolderProperties(const char *path) = 0;
848  SWIGOUT(%kwargs packToFolder;)
849  virtual bool packToFolder(
850  const char *path,
851  HOM_Geometry &geometry,
852  bool is_folder = false) = 0;
853 };
854 
855 #endif
GT_API const UT_StringHolder selection
#define HOM_DESTRUCT_OBJECT(pointer)
Definition: HOM_Module.h:1303
GLdouble GLdouble GLint GLint const GLdouble * points
Definition: glad.h:2676
GLboolean * data
Definition: glcorearb.h:131
OIIO_UTIL_API bool copy(string_view from, string_view to, std::string &err)
GLsizei const GLchar *const * string
Definition: glcorearb.h:814
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
#define SWIGOUT(x)
Definition: HOM_Defines.h:24
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
string __repr__(VtArray< T > const &self)
Definition: wrapArray.h:349
std::tuple< Types...> UT_Tuple
Definition: UT_Tuple.h:53
virtual HOM_Geometry * newGeometry(HOM_Geometry *geo=nullptr, bool clone_data_ids=false)=0
GLuint buffer
Definition: glcorearb.h:660
GLdouble n
Definition: glcorearb.h:2008
GLfloat f
Definition: glcorearb.h:1926
Definition: core.h:760
bool any(const vbool4 &v)
Definition: simd.h:3468
#define HOM_API
Definition: HOM_API.h:13
HOM_Geometry(const HOM_Geometry &)
Definition: HOM_Geometry.h:70
void ignore(T const &) VULKAN_HPP_NOEXCEPT
Definition: vulkan.hpp:6508
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.
Definition: CLI11.h:1729
#define HOM_CONSTRUCT_OBJECT(pointer)
Definition: HOM_Module.h:1302
GLdouble GLdouble GLint GLint order
Definition: glad.h:2676
long long int64
Definition: SYS_Types.h:116
GLuint const GLchar * name
Definition: glcorearb.h:786
GLushort pattern
Definition: glad.h:2583
GA_API const UT_StringHolder transform
GLenum GLsizei GLsizei GLint * values
Definition: glcorearb.h:1602
OIIO_UTIL_API bool rename(string_view from, string_view to, std::string &err)
GLuint index
Definition: glcorearb.h:786
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
Definition: ImathLineAlgo.h:80
UT_Optional< double > HOM_OptionalDouble
Definition: HOM_Defines.h:45
Definition: core.h:1131
virtual ~HOM_Geometry()
Definition: HOM_Geometry.h:73
HOM_API HOM_Module & HOM()
type
Definition: core.h:1059
Definition: format.h:895