HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
VEX_GeoCommand.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  * NAME: VEX_GeoCommand.h ( VEX Library, C++)
7  *
8  * COMMENTS: Generic commands and queues to store geometry
9  * edit operations
10  */
11 
12 #ifndef __VEX_GeoCommand__
13 #define __VEX_GeoCommand__
14 
15 #include "VEX_API.h"
16 
17 #include "VEX_Types.h"
18 
19 #include <UT/UT_Array.h>
20 #include <UT/UT_SharedString.h>
21 #include <UT/UT_StringHolder.h>
22 #include <UT/UT_StringSet.h>
23 #include <UT/UT_Vector3.h>
24 #include <UT/UT_VectorTypes.h>
25 #include <UT/UT_IntArray.h>
26 #include <UT/UT_PageArray.h>
27 
28 #include <hboost/variant.hpp>
29 
30 // Do NOT use VEX_API here for template classes with all code in the header!
31 
32 enum class VEX_GeoMode
33 {
34  SET,
35  ADD,
36  MAX,
37  MIN,
38  MULTIPLY,
39  TOGGLE,
40  APPEND,
41 
42  INVALID
43 };
44 enum class VEX_GeoPrimType
45 {
46  POLY_OPEN,
48  TET,
49  SPHERE,
50  CIRCLE,
51  TUBE,
52  METABALL,
53  METASQUAD,
55  PACKEDDISK,
56 
57  INVALID
58 };
59 enum class VEX_GeoDictType
60 {
61  DETAIL,
62  PRIM,
64  PRIMGROUP,
65  POINT,
66  POINTGROUP,
67  VERTEX,
69 
70  INVALID
71 };
72 enum class VEX_GeoTypeInfo
73 {
74  NOCHANGE = -1,
75  NONE = 0,
76  POINT,
77  HPOINT,
78  VECTOR,
79  NORMAL,
80  COLOR,
81  TRANSFORM,
82  QUATERNION,
83  INDEXPAIR,
87 };
88 
89 
90 namespace VEX_Geo
91 {
92  VEX_API VEX_GeoMode modeFromString(const char*);
96 
97 } // namespace VEX_Geo
98 
99 template <VEX_Precision PREC>
101 {
102 public:
103  VEX_GeoCommand(exint srcelem) { mySourceElem = srcelem; }
105 
106  VEXint<PREC> elem() const { return mySourceElem; }
107 
108 protected:
110 };
111 
112 template <VEX_Precision PREC>
114 {
115 public:
117  : VEX_GeoCommand<PREC>(srcelem)
118  , myType(primtype)
119  {
120  }
122 
123  VEX_GeoPrimType type() const { return myType; }
124 
125 protected:
127 };
128 
129 template <VEX_Precision PREC>
131 {
132 public:
134  : VEX_GeoCommand<PREC>(srcelem)
135  , myPos(pos)
136  , mySrcPt(-1)
137  {
138  }
140  : VEX_GeoCommand<PREC>(srcelem)
141  , myPos(0.0, 0.0, 0.0)
142  , mySrcPt(srcpt)
143  {
144  }
146 
147  VEXvec3<PREC> pos() const { return myPos; }
148  VEXint<PREC> srcpt() const { return mySrcPt; }
149 
150 protected:
151  // Ideally we'd union, but C++ makes this frustrating.
154 };
155 
156 template <VEX_Precision PREC>
158 {
159 public:
162  : VEX_GeoCommand<PREC>(srcelem)
163  , myPrimNum(primnum)
164  , myPtNum(ptnum)
165  {
166  }
168 
169  VEXint<PREC> primnum() const { return myPrimNum; }
170  VEXint<PREC> ptnum() const { return myPtNum; }
171 
172 protected:
175 };
176 
177 template <VEX_Precision PREC>
179 {
180 public:
182  : VEX_GeoCommand<PREC>(srcelem)
183  , myObjNum(objnum)
184  {
185  }
187 
188  VEXint<PREC> objnum() const { return myObjNum; }
189 
190 protected:
192 };
193 
194 template <VEX_Precision PREC, typename T>
196 {
197 public:
201  : VEX_GeoCommand<PREC>(srcelem)
202  , myObjNum(objnum)
203  , mySecNum(secnum)
204  , myMode(mode)
205  , myData(data)
206  {
207  }
209  : myObjNum(-1)
210  , mySecNum(-1)
212  , myData(T()) {}
213 
214  VEXint<PREC> objnum() const { return myObjNum; }
215  VEXint<PREC> secnum() const { return mySecNum; }
216  VEX_GeoMode mode() const { return myMode; }
217  T data() const { return myData; }
218 
219 protected:
224 };
225 
226 template <VEX_Precision PREC>
228 {
229 public:
232  VEXint<PREC> vtxidx, VEXint<PREC> newptnum)
233  : VEX_GeoCommand<PREC>(srcelem)
234  , myPrimNum(primnum)
235  , myVtxIdx(vtxidx)
236  , myPtNum(newptnum)
237  {
238  }
240 
241  // -1 for primnum implies a linear vertex
242  VEXint<PREC> primnum() const { return myPrimNum; }
243  VEXint<PREC> vtxidx() const { return myVtxIdx; }
244  VEXint<PREC> ptnum() const { return myPtNum; }
245 
246 protected:
248 };
249 
250 template <VEX_Precision PREC>
252 {
253 public:
256  bool worldspace)
257  : VEX_GeoCommand<PREC>(srcelem),
258  myPrimNum(primnum),
259  myData(SingleEdit(xform, xformidx)),
260  myWorldSpace(worldspace)
261  {
262  }
264  const UT_Array<VEXmat4<PREC>> &xforms,
265  bool worldspace)
266  : VEX_GeoCommand<PREC>(srcelem),
267  myPrimNum(primnum),
269  myWorldSpace(worldspace)
270  {
271  }
273 
274  VEXint<PREC> primnum() const { return myPrimNum; }
275  const VEXmat4<PREC> &xform() const
276  {
277  UT_ASSERT(myData.which() == 0);
278  return hboost::get<SingleEdit>(myData).first;
279  }
281  {
282  UT_ASSERT(myData.which() == 0);
283  return hboost::get<SingleEdit>(myData).second;
284  }
286  {
287  UT_ASSERT(myData.which() == 1);
288  return hboost::get<FullEdit>(myData);
289  }
290  bool worldspace() const { return myWorldSpace; }
291 
292  bool isSingleEdit() const { return myData.which() == 0; }
293 
294 protected:
295  typedef std::pair<VEXmat4<PREC>,VEXint<PREC>> SingleEdit;
297 
299  // Allow setting a single transform or setting all of them
300  hboost::variant<SingleEdit, FullEdit> myData;
302 };
303 
304 template <VEX_Precision PREC>
306 {
307 public:
309  const UT_StringArray &clipnames,
317  : VEX_GeoCommand<PREC>(srcelem),
318  myPrimNum(primnum),
319  myClipNames(clipnames),
322  myClipXformGroups(clipxformgroups),
327  {
328  }
329 
330  VEX_GeoCommandAgentClipEdit() = default;
335 
336  const VEXint<PREC> primnum() const { return myPrimNum; }
337  const UT_StringArray &clipnames() const { return myClipNames; }
338  const UT_Array<VEXfloat<PREC>> &cliptimes() const { return myClipTimes; }
345 
346 protected:
356 };
357 
358 class CL_Clip;
359 
360 template <VEX_Precision PREC>
362 {
363 public:
365  VEXint<PREC> srcelem,
367  const UT_StringHolder &clip_name,
368  const UT_StringHolder &clip_path,
369  bool keep_ref)
370  : VEX_GeoCommand<PREC>(srcelem)
371  , myPrimNum(primnum)
372  , myClipName(clip_name)
373  , myClipPath(clip_path)
374  , myKeepRef(keep_ref)
375  {
376  }
378  : VEX_GeoCommand<PREC>()
379  , myPrimNum(-1)
380  , myClipName()
381  , myClipPath()
382  , myKeepRef(true)
383  {
384  }
385 
386  VEXint<PREC> primnum() const { return myPrimNum; }
387 
391  bool myKeepRef;
392 };
393 
394 template <VEX_Precision PREC>
396 {
397 public:
398  //
399  // A variant of all VEXint,VEXfloat,VEXvecN,VEXmatN types
401  {
402  public:
403  DefaultValue() { memset(f, 0, sizeof(VEXfloat<PREC>)*16); i = 0; }
404 
405  void set(VEXint<PREC> v) { i = v; }
406  void set(VEXfloat<PREC> v) { f[0] = v; }
407  void set(VEXvec2<PREC> v) { memcpy(f, &v, sizeof(v)); }
408  void set(VEXvec3<PREC> v) { memcpy(f, &v, sizeof(v)); }
409  void set(VEXvec4<PREC> v) { memcpy(f, &v, sizeof(v)); }
410  void set(VEXmat2<PREC> v) { memcpy(f, &v, sizeof(v)); }
411  void set(VEXmat3<PREC> v) { memcpy(f, &v, sizeof(v)); }
412  void set(VEXmat4<PREC> v) { memcpy(f, &v, sizeof(v)); }
413 
416  };
417 
418  VEX_GeoAttribEdit(VEX_GeoDictType dict, const char *name);
420  void setTypeInfo(VEXint<PREC> srcelem,
421  const char *typeinfo);
422 
423  void addAttribute(VEXint<PREC> srcelem,
424  VEX_Type type,
425  bool isarray,
426  const DefaultValue &value);
427 
428  void appendEdit(VEXint<PREC> srcelem,
429  VEXint<PREC> objnum,
430  VEXint<PREC> secnum,
433  void appendEdit(VEXint<PREC> srcelem,
434  VEXint<PREC> objnum,
435  VEXint<PREC> secnum,
438  void appendEdit(VEXint<PREC> srcelem,
439  VEXint<PREC> objnum,
440  VEXint<PREC> secnum,
443  void appendEdit(VEXint<PREC> srcelem,
444  VEXint<PREC> objnum,
445  VEXint<PREC> secnum,
448  void appendEdit(VEXint<PREC> srcelem,
449  VEXint<PREC> objnum,
450  VEXint<PREC> secnum,
453  void appendEdit(VEXint<PREC> srcelem,
454  VEXint<PREC> objnum,
455  VEXint<PREC> secnum,
458  void appendEdit(VEXint<PREC> srcelem,
459  VEXint<PREC> objnum,
460  VEXint<PREC> secnum,
463  void appendEdit(VEXint<PREC> srcelem,
464  VEXint<PREC> objnum,
465  VEXint<PREC> secnum,
468  void appendEdit(VEXint<PREC> srcelem,
469  VEXint<PREC> objnum,
470  VEXint<PREC> secnum,
472  const char *data);
473  void appendEdit(VEXint<PREC> srcelem,
474  VEXint<PREC> objnum,
475  VEXint<PREC> secnum,
477  const UT_Array<VEXfloat<PREC>> *data);
478  void appendEdit(VEXint<PREC> srcelem,
479  VEXint<PREC> objnum,
480  VEXint<PREC> secnum,
482  const UT_Array<VEXvec2<PREC>> *data);
483  void appendEdit(VEXint<PREC> srcelem,
484  VEXint<PREC> objnum,
485  VEXint<PREC> secnum,
487  const UT_Array<VEXvec3<PREC>> *data);
488  void appendEdit(VEXint<PREC> srcelem,
489  VEXint<PREC> objnum,
490  VEXint<PREC> secnum,
492  const UT_Array<VEXvec4<PREC>> *data);
493  void appendEdit(VEXint<PREC> srcelem,
494  VEXint<PREC> objnum,
495  VEXint<PREC> secnum,
497  const UT_Array<VEXmat2<PREC>> *data);
498  void appendEdit(VEXint<PREC> srcelem,
499  VEXint<PREC> objnum,
500  VEXint<PREC> secnum,
502  const UT_Array<VEXmat3<PREC>> *data);
503  void appendEdit(VEXint<PREC> srcelem,
504  VEXint<PREC> objnum,
505  VEXint<PREC> secnum,
507  const UT_Array<VEXmat4<PREC>> *data);
508  void appendEdit(VEXint<PREC> srcelem,
509  VEXint<PREC> objnum,
510  VEXint<PREC> secnum,
512  const UT_Array<VEXint<PREC>> *data);
513  void appendEdit(VEXint<PREC> srcelem,
514  VEXint<PREC> objnum,
515  VEXint<PREC> secnum,
518 
519 
520  // This may steal the command list from the source!
521  void merge(VEX_GeoAttribEdit &src);
522 
523  void sort();
524 
525  void clear();
526 
527  // These convert our command list to the specified type.
528  //
529  // If the stored VEX_Type matches the return type, the result will be
530  // valid. Otherwise nullptr is returned.
531 
532  // Functions:
533  // fCmd, iCmd, v2Cmd, v3Cmd, v4Cmd, m2Cmd, m3Cmd, m4Cmd, sCmd
534  // afCmd, aiCmd, av2Cmd, av3Cmd, av4Cmd, am2Cmd, am3Cmd, am4Cmd, asCmd
535 #define VEX_GEOATTRIBEDIT_CASE(vtype, type, name, isarray) \
536  UT_Array<VEX_GeoCommandAttribEdit<PREC, type>> * name##Cmd()\
537  {\
538  if (myType == vtype && myIsArray == isarray)\
539  return (UT_Array<VEX_GeoCommandAttribEdit<PREC, type>>*) myCmdList;\
540  return nullptr;\
541  }
542 #define VEX_GEOATTRIBEDIT_CASE_DIRECT(ty, name) \
543  VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,VEX##ty<PREC>,name,false)
544 #define VEX_GEOATTRIBEDIT_CASE_ARRAY(ty, name) \
545  VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,const UT_Array<VEX##ty<PREC>>*,name,true)
546 
555 
557 
566 
567  VEX_GEOATTRIBEDIT_CASE(VEX_TYPE_STRING, const UT_Array<const char*>*, as, true)
568 
569 #undef VEX_GEOATTRIBEDIT_CASE_ARRAY
570 #undef VEX_GEOATTRIBEDIT_CASE_DIRECT
571 #undef VEX_GEOATTRIBEDIT_CASE
572 
573  VEX_GeoDictType dict() const { return myDict; }
574  const char *name() const { return myName; }
575  VEX_Type type() const { return myType; }
576  bool isArray() const { return myIsArray; }
577  bool shouldcreate() const { return myDoCreate; }
578  VEX_GeoTypeInfo typeinfo() const { return myTypeInfo; }
579  const DefaultValue &defaultValue() const { return myDefValue; }
580 
581 protected:
582  // The earliest proc that refered to us.
587  bool myIsArray;
588  // Who set the typeinfo.
589  // Because we are logically overwriting, it makes sense for this
590  // to be the last person to set it!
593 
594  void *myCmdList;
595  // The proc that marked us for creation
599 };
600 
601 template <VEX_Precision PREC>
603 {
604 public:
606  VEXint<PREC> srcelem,
607  VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
609  : VEX_GeoCommand<PREC>(srcelem)
610  , myPtNum0(ptnum0)
611  , myPtNum1(ptnum1)
612  , myData(data)
613  {
614  }
616  : VEX_GeoCommand<PREC>(), myPtNum0(-1) , myPtNum1(-1), myData(-1)
617  {}
618 
619  VEXint<PREC> ptNum0() const { return myPtNum0; }
620  VEXint<PREC> ptNum1() const { return myPtNum1; }
621  VEXint<PREC> data() const { return myData; }
622 
623 protected:
627 };
628 
629 template <VEX_Precision PREC>
631 {
632 public:
633  VEX_GeoEdgeGroupEdit(const UT_StringHolder &groupname): myGroupName(groupname) {}
634 
635  const UT_StringHolder &groupName() const { return myGroupName; }
636 
637  const UT_Array<VEX_GeoCommandEdgeGroupEdit<PREC>> &cmd() const { return myCmdList; }
638 
639  void appendEdit(VEXint<PREC> srcelem,
640  VEXint<PREC> ptnum0,
641  VEXint<PREC> ptnum1,
643 
644  void merge(VEX_GeoEdgeGroupEdit &src);
645 
646  void sort();
647 
648 protected:
651 };
652 
653 template <VEX_Precision PREC>
655 {
656 public:
659 
660  // Converts the given string to one in our string table, ensuring
661  // the pointer remains valid and avoids duplication.
662  const char *hardenString(const char *str);
663 
664  // Creates a new array which is owned by this queue. Does
665  // not de-duplicate, but will return 0 for empty lists.
666  const UT_Array<VEXfloat<PREC>> *hardenArray(const UT_Array<VEXfloat<PREC>> &arr);
667  const UT_Array<VEXvec2<PREC>> *hardenArray(const UT_Array<VEXvec2<PREC>> &arr);
668  const UT_Array<VEXvec3<PREC>> *hardenArray(const UT_Array<VEXvec3<PREC>> &arr);
669  const UT_Array<VEXvec4<PREC>> *hardenArray(const UT_Array<VEXvec4<PREC>> &arr);
670  const UT_Array<VEXmat2<PREC>> *hardenArray(const UT_Array<VEXmat2<PREC>> &arr);
671  const UT_Array<VEXmat3<PREC>> *hardenArray(const UT_Array<VEXmat3<PREC>> &arr);
672  const UT_Array<VEXmat4<PREC>> *hardenArray(const UT_Array<VEXmat4<PREC>> &arr);
673  const UT_Array<VEXint<PREC>> *hardenArray(const UT_Array<VEXint<PREC>> &arr);
674  // ALSO hardens the contents:
675  const UT_Array<const char *> *hardenArray(const UT_Array<const char *> &arr);
676 
677  // Merges the src into us. Note that the result may still
678  // reference strings in the stringtable of src, so src must *not*
679  // be deleted until the queue is processed!
680  // This also may destroy src in the merging if stealing is more
681  // efficient.
682  void merge(VEX_GeoCommandQueue &src);
683  // Ensure our commands are in srcelem order.
684  void sort();
685 
686  bool isEmpty() const
687  {
688  return myPointAdd.isEmpty() &&
689  myPrimAdd.isEmpty() &&
690  myVertexAdd.isEmpty() &&
691  myVertexRewire.isEmpty() &&
692  myAttribEdit.isEmpty() &&
693  myEdgeGroupEdit.isEmpty() &&
694  myAgentXformEdit.isEmpty() &&
695  myAgentClipEdit.isEmpty() &&
696  myAgentAddClip.isEmpty() &&
697  myPointRemove.isEmpty() &&
698  myPointWithPrimRemove.isEmpty() &&
699  myPrimRemove.isEmpty() &&
700  myPrimWithPointRemove.isEmpty() &&
701  myLocalVariables.empty() &&
702  !myNewVisualizers;
703  }
704 
705  // These return the new element number *relative* to the srcelem!
706  VEXint<PREC> addPrim(VEXint<PREC> srcelem, VEX_GeoPrimType primtype);
707  VEXint<PREC> addPoint(VEXint<PREC> srcelem, VEXvec3<PREC> pos);
708  VEXint<PREC> addPoint(VEXint<PREC> srcelem, VEXint<PREC> srcpt);
709  VEXint<PREC> addVertex(VEXint<PREC> srcelem, VEXint<PREC> primnum, VEXint<PREC> ptnum);
710 
711  void setEdgeGroup(
712  VEXint<PREC> srcelem,
713  const UT_StringHolder &groupname,
714  VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
716 
717  void addLocalVariable(VEXint<PREC> srcelem, const char *attrib, const char *local);
718  void addVisualizer(const UT_StringHolder &visualizer);
719 
720  // If the given primnum is -1, it will treat vtxidx as a linear vertex
721  void rewireVertex(
722  VEXint<PREC> srcelem, VEXint<PREC> primum,
723  VEXint<PREC> vtxidx, VEXint<PREC> ptnum);
724 
725  void removePoint(VEXint<PREC> srcelem, VEXint<PREC> ptnum, bool includeprims);
726  void removePrim(VEXint<PREC> srcelem, VEXint<PREC> primnum, bool includepoints);
727 
728  void setAgentTransform(VEXint<PREC> srcelem, VEXint<PREC> primnum,
729  const VEXmat4<PREC> &xform, VEXint<PREC> xformidx,
730  bool worldspace);
731 
732  void setAgentTransforms(VEXint<PREC> srcelem, VEXint<PREC> primnum,
733  const UT_Array<VEXmat4<PREC>> &xforms,
734  bool worldspace);
735 
736  void setAgentClips(VEXint<PREC> srcelem, VEXint<PREC> primnum,
737  const UT_StringArray &clipnames,
738  const UT_Array<VEXfloat<PREC>> &cliptimes,
739  const UT_Array<VEXfloat<PREC>> &clipweights,
740  const UT_StringArray &clipxformgroups,
741  const UT_Array<VEXint<PREC>> &cliplayerids,
742  const UT_Array<VEXint<PREC>> &cliplayermodes,
743  const UT_Array<VEXfloat<PREC>> &cliplayerweights,
744  const UT_Array<VEXint<PREC>> &cliplayerparents);
745 
746  void agentAddClip(
747  VEXint<PREC> srcelem,
748  VEXint<PREC> primnum,
749  const UT_StringHolder &clip_name,
750  const UT_StringHolder &clip,
751  const bool keep_ref);
752 
753  VEX_GeoAttribEdit<PREC> *findEdit(
754  VEX_GeoDictType dict,
755  const char *name);
756  VEX_GeoAttribEdit<PREC> *findOrCreateEdit(
757  VEX_GeoDictType dict,
758  const char *name);
759 
760  VEX_GeoEdgeGroupEdit<PREC> *findOrCreateEdgeGroupEdit(const UT_StringHolder &groupname);
761 
762  // Creators
766  // Requested local variables.
768  {
770  const char *local; // hardened!
771  };
773 
775 
776  // Edits
783 
784  // Destructors
785  // Note we don't have to sort these. We do need to track
786  // the source element to be able to lookup the relevant point
787  // or primitive number, however.
792 
793  typedef UT_PageArray<
794  /* DATA_T */ VEXint<PREC>,
795  /* TSIZE */ 1,
796  /* TABLEHARDENED (owns its data) */ true,
797  /* PAGESHARDENED */ false,
798  /* THEPAGEBITS (2^10 tuples/page) */ 10,
799  /* INDEX_T */ VEXint<PREC>
804 
805  int myNumPrim, myNumPoint, myNumVertex;
806 
807 private:
808  UT_SharedString *myStrings;
809  UT_Array< UT_Array<VEXint<PREC>> *> myIntArrays;
810  UT_Array< UT_Array<VEXfloat<PREC>> *> myFloatArrays;
811  UT_Array< UT_Array<VEXvec2<PREC>> *> myV2Arrays;
812  UT_Array< UT_Array<VEXvec3<PREC>> *> myV3Arrays;
813  UT_Array< UT_Array<VEXvec4<PREC>> *> myV4Arrays;
814  UT_Array< UT_Array<VEXmat2<PREC>> *> myM2Arrays;
815  UT_Array< UT_Array<VEXmat3<PREC>> *> myM3Arrays;
816  UT_Array< UT_Array<VEXmat4<PREC>> *> myM4Arrays;
817  UT_Array< UT_Array<const char *> *> myCstArrays;
818 };
819 
826 
827 #endif
VEX_Type
VEX variable types.
Definition: VEX_VexTypes.h:18
UT_Array< VEX_GeoCommandPrimAdd< PREC > > myPrimAdd
GLint first
Definition: glcorearb.h:404
const UT_Array< VEXfloat< PREC > > & clipweights() const
#define VEX_GEOATTRIBEDIT_CASE_ARRAY(ty, name)
VEX_GeoCommandAgentXformEdit(VEXint< PREC > srcelem, VEXint< PREC > primnum, const VEXmat4< PREC > &xform, VEXint< PREC > xformidx, bool worldspace)
VEX_GeoCommandAgentClipEdit(VEXint< PREC > srcelem, VEXint< PREC > primnum, const UT_StringArray &clipnames, const UT_Array< VEXfloat< PREC >> &cliptimes, const UT_Array< VEXfloat< PREC >> &clipweights, const UT_StringArray &clipxformgroups, const UT_Array< VEXint< PREC >> &cliplayerids, const UT_Array< VEXint< PREC >> &cliplayermodes, const UT_Array< VEXfloat< PREC >> &cliplayerweights, const UT_Array< VEXint< PREC >> &cliplayerparents)
UT_Array< VEX_GeoCommandAgentXformEdit< PREC > > myAgentXformEdit
const char * local
VEX_GeoCommandAgentAddClip(VEXint< PREC > srcelem, VEXint< PREC > primnum, const UT_StringHolder &clip_name, const UT_StringHolder &clip_path, bool keep_ref)
VEXint< PREC > primnum() const
void set(VEXvec4< PREC > v)
UT_StringMap< VariableEntry > myLocalVariables
UT_Array< VEX_GeoEdgeGroupEdit< PREC > * > myEdgeGroupEdit
const UT_Array< VEXint< PREC > > & cliplayerids() const
const char * name() const
bool isArray() const
VEX_GeoCommandVertexAdd(VEXint< PREC > srcelem, VEXint< PREC > primnum, VEXint< PREC > ptnum)
VEX_GeoDictType myDict
BlockArray myNetVertices
std::pair< VEXmat4< PREC >, VEXint< PREC > > SingleEdit
const GLdouble * v
Definition: glcorearb.h:836
VEXint< PREC > objnum() const
DefaultValue myDefValue
VEXint< PREC > primnum() const
VEX_GeoDictType dict() const
VEX_GeoCommandObjectRemove(VEXint< PREC > srcelem, VEXint< PREC > objnum)
VEX_GeoEdgeGroupEdit(const UT_StringHolder &groupname)
UT_Array< VEX_GeoCommandEdgeGroupEdit< PREC > > myCmdList
VEXint< PREC > myCreationElem
UT_StringSet * myNewVisualizers
UT_Array< VEXfloat< PREC > > myClipTimes
VEX_API VEX_GeoPrimType typeFromString(const char *)
UT_Array< VEXint< PREC > > myClipLayerIds
VEXint< PREC > ptnum() const
void set(VEXvec3< PREC > v)
VEX_GeoCommandPointAdd(VEXint< PREC > srcelem, VEXint< PREC > srcpt)
#define VEX_GEOATTRIBEDIT_CASE_DIRECT(ty, name)
GLfloat GLfloat GLfloat v2
Definition: glcorearb.h:817
#define VEX_API
Definition: VEX_API.h:12
const UT_StringHolder & groupName() const
GLfloat GLfloat GLfloat GLfloat v3
Definition: glcorearb.h:818
typename VEX_PrecisionResolver< P >::vec3_type VEXvec3
Definition: VEX_PodTypes.h:70
png_uint_32 i
Definition: png.h:2877
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPrimRemove
VEXint< PREC > primnum() const
#define VEX_GEOATTRIBEDIT_CASE(vtype, type, name, isarray)
VEXint< PREC > data() const
UT_Array< VEXmat4< PREC > > FullEdit
UT_Array< VEXint< PREC > > myClipLayerParents
bool isEmpty() const
VEX_GeoDictType
VEX_GeoCommandEdgeGroupEdit(VEXint< PREC > srcelem, VEXint< PREC > ptnum0, VEXint< PREC > ptnum1, VEXint< PREC > data)
VEX_GeoCommandPointAdd(VEXint< PREC > srcelem, VEXvec3< PREC > pos)
UT_Array< VEX_GeoCommandAgentClipEdit< PREC > > myAgentClipEdit
VEXint< PREC > myDefiningElem
VEX_GeoTypeInfo
GLfloat f
Definition: glcorearb.h:1925
VEXint< PREC > xformidx() const
VEX_GeoMode mode() const
UT_StringHolder myGroupName
bool shouldcreate() const
const UT_Array< VEX_GeoCommandEdgeGroupEdit< PREC > > & cmd() const
int64 exint
Definition: SYS_Types.h:116
typename VEX_PrecisionResolver< P >::float_type VEXfloat
Definition: VEX_PodTypes.h:67
VEX_GeoMode
VEXint< PREC > elem
VEXint< PREC > myPrimNum
const DefaultValue & defaultValue() const
UT_Array< VEX_GeoCommandPointAdd< PREC > > myPointAdd
VEXint< PREC > srcpt() const
VEX_GeoPrimType myType
VEX_GeoTypeInfo typeinfo() const
typename VEX_PrecisionResolver< P >::mat4_type VEXmat4
Definition: VEX_PodTypes.h:74
VEX_GeoCommandAgentXformEdit(VEXint< PREC > srcelem, VEXint< PREC > primnum, const UT_Array< VEXmat4< PREC >> &xforms, bool worldspace)
const VEXmat4< PREC > & xform() const
GLboolean * data
Definition: glcorearb.h:130
GLuint const GLchar * name
Definition: glcorearb.h:785
VEXint< PREC > myTypeInfoElem
hboost::variant< SingleEdit, FullEdit > myData
void set(VEXmat2< PREC > v)
VEXint< PREC > ptNum0() const
VEXint< PREC > ptNum1() const
const UT_Array< VEXint< PREC > > & cliplayermodes() const
GLenum mode
Definition: glcorearb.h:98
VEX_API VEX_GeoMode modeFromString(const char *)
const UT_StringArray & clipnames() const
UT_PageArray< VEXint< PREC >, 1, true, false, 10, VEXint< PREC > > BlockArray
typename VEX_PrecisionResolver< P >::mat2_type VEXmat2
Definition: VEX_PodTypes.h:72
VEXint< PREC > primnum() const
void set(VEXmat4< PREC > v)
GLsizei const GLfloat * value
Definition: glcorearb.h:823
IMATH_INTERNAL_NAMESPACE_HEADER_ENTER T clip(const T &p, const Box< T > &box)
Definition: ImathBoxAlgo.h:89
VEXint< PREC > mySourceElem
typename VEX_PrecisionResolver< P >::vec2_type VEXvec2
Definition: VEX_PodTypes.h:69
const UT_Array< VEXfloat< PREC > > & cliplayerweights() const
VEX_EXTERN_TEMPLATE(VEX_GeoAttribEdit< VEX_32 >)
VEXint< PREC > ptnum() const
UT_Array< VEX_GeoCommandVertexAdd< PREC > > myVertexAdd
UT_Array< VEXint< PREC > > myClipLayerModes
UT_Array< VEXfloat< PREC > > myClipLayerWeights
void set(VEXint< PREC > v)
const UT_Array< VEXmat4< PREC > > & xforms() const
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPointWithPrimRemove
VEXvec3< PREC > myPos
VEX_GeoPrimType type() const
void set(VEXfloat< PREC > v)
UT_Array< VEX_GeoCommandVertexRewire< PREC > > myVertexRewire
VEXint< PREC > mySrcPt
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPrimWithPointRemove
typename VEX_PrecisionResolver< P >::vec4_type VEXvec4
Definition: VEX_PodTypes.h:71
VEX_GeoCommandVertexRewire(VEXint< PREC > srcelem, VEXint< PREC > primnum, VEXint< PREC > vtxidx, VEXint< PREC > newptnum)
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:107
UT_Array< VEXfloat< PREC > > myClipWeights
typename VEX_PrecisionResolver< P >::int_type VEXint
Definition: VEX_PodTypes.h:68
VEX_GeoCommandPrimAdd(VEXint< PREC > srcelem, VEX_GeoPrimType primtype)
VEXint< PREC > vtxidx() const
VEX_API VEX_GeoDictType dictFromString(const char *)
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:126
const VEXint< PREC > primnum() const
VEX_GeoPrimType
const UT_Array< VEXfloat< PREC > > & cliptimes() const
UT_Array< VEX_GeoCommandAgentAddClip< PREC > > myAgentAddClip
#define const
Definition: zconf.h:214
VEX_GeoTypeInfo myTypeInfo
VEXint< PREC > objnum() const
const UT_Array< VEXint< PREC > > & cliplayerparents() const
VEX_GeoCommandAttribEdit(VEXint< PREC > srcelem, VEXint< PREC > objnum, VEXint< PREC > secnum, VEX_GeoMode mode, T data)
typename VEX_PrecisionResolver< P >::mat3_type VEXmat3
Definition: VEX_PodTypes.h:73
VEXvec3< PREC > pos() const
UT_Array< VEX_GeoAttribEdit< PREC > * > myAttribEdit
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPointRemove
VEXint< PREC > elem() const
VEX_Type type() const
VEX_GeoCommandAgentClipEdit & operator=(const VEX_GeoCommandAgentClipEdit &)=default
VEX_GeoCommand(exint srcelem)
void set(VEXmat3< PREC > v)
const UT_StringArray & clipxformgroups() const
void set(VEXvec2< PREC > v)
UT_StringArray myClipXformGroups
GLenum src
Definition: glcorearb.h:1792
VEX_API VEX_GeoTypeInfo typeinfoFromString(const char *)
VEXint< PREC > secnum() const