12 #ifndef __VEX_GeoCommand__
13 #define __VEX_GeoCommand__
28 #include <hboost/variant.hpp>
112 template <VEX_Precision PREC>
129 template <VEX_Precision PREC>
141 ,
myPos(0.0, 0.0, 0.0)
156 template <VEX_Precision PREC>
177 template <VEX_Precision PREC>
194 namespace VEX_DataObjID
204 {
return id.isstring(); }
208 {
return !
id.isEmpty(); }
211 template <VEX_Precision PREC,
typename OBJ_ID,
typename SEC_ID,
typename T>
216 exint srcelem,
const OBJ_ID &obj_id,
const SEC_ID &sec_id,
230 VEX_DataObjID::initID(
myObjID);
245 template <VEX_Precision PREC,
typename T>
248 template <VEX_Precision PREC,
typename T>
252 template <VEX_Precision PREC>
258 VEXint<PREC>
vtxidx, VEXint<PREC> newptnum)
276 template <VEX_Precision PREC>
282 VEXint<PREC> channelidx)
286 myChannelIdx(channelidx)
291 : myPrimNum(-1), myValue(0.0), myChannelIdx(-1)
295 VEXint<PREC>
primnum()
const {
return myPrimNum; }
300 VEXint<PREC> myPrimNum;
302 VEXint<PREC> myChannelIdx;
305 template <VEX_Precision PREC>
336 return hboost::get<SingleEdit>(
myData).second;
341 return hboost::get<FullEdit>(
myData);
353 hboost::variant<SingleEdit, FullEdit>
myData;
357 template <VEX_Precision PREC>
411 template <VEX_Precision PREC>
416 const UT_Array<VEXint<PREC>> &layer_ids,
bool is_collision)
419 myLayerIds(layer_ids),
420 myIsCollision(is_collision)
425 VEXint<PREC>
primnum()
const {
return myPrimNum; }
430 VEXint<PREC> myPrimNum = -1;
432 bool myIsCollision =
false;
437 template <VEX_Precision PREC>
471 template <VEX_Precision PREC,
typename OBJ_ID,
typename SEC_ID>
508 void setTypeInfo(
exint srcelem,
509 const char *typeinfo);
511 void addAttribute(
exint srcelem,
516 void appendEdit(
exint srcelem,
517 const OBJ_ID &obj_id,
518 const SEC_ID &sec_id,
521 void appendEdit(
exint srcelem,
522 const OBJ_ID &obj_id,
523 const SEC_ID &sec_id,
526 void appendEdit(
exint srcelem,
527 const OBJ_ID &obj_id,
528 const SEC_ID &sec_id,
531 void appendEdit(
exint srcelem,
532 const OBJ_ID &obj_id,
533 const SEC_ID &sec_id,
536 void appendEdit(
exint srcelem,
537 const OBJ_ID &obj_id,
538 const SEC_ID &sec_id,
541 void appendEdit(
exint srcelem,
542 const OBJ_ID &obj_id,
543 const SEC_ID &sec_id,
546 void appendEdit(
exint srcelem,
547 const OBJ_ID &obj_id,
548 const SEC_ID &sec_id,
551 void appendEdit(
exint srcelem,
552 const OBJ_ID &obj_id,
553 const SEC_ID &sec_id,
556 void appendEdit(
exint srcelem,
557 const OBJ_ID &obj_id,
558 const SEC_ID &sec_id,
561 void appendEdit(
exint srcelem,
562 const OBJ_ID &obj_id,
563 const SEC_ID &sec_id,
566 void appendEdit(
exint srcelem,
567 const OBJ_ID &obj_id,
568 const SEC_ID &sec_id,
571 void appendEdit(
exint srcelem,
572 const OBJ_ID &obj_id,
573 const SEC_ID &sec_id,
576 void appendEdit(
exint srcelem,
577 const OBJ_ID &obj_id,
578 const SEC_ID &sec_id,
581 void appendEdit(
exint srcelem,
582 const OBJ_ID &obj_id,
583 const SEC_ID &sec_id,
586 void appendEdit(
exint srcelem,
587 const OBJ_ID &obj_id,
588 const SEC_ID &sec_id,
591 void appendEdit(
exint srcelem,
592 const OBJ_ID &obj_id,
593 const SEC_ID &sec_id,
596 void appendEdit(
exint srcelem,
597 const OBJ_ID &obj_id,
598 const SEC_ID &sec_id,
601 void appendEdit(
exint srcelem,
602 const OBJ_ID &obj_id,
603 const SEC_ID &sec_id,
606 void appendEdit(
exint srcelem,
607 const OBJ_ID &obj_id,
608 const SEC_ID &sec_id,
611 void appendEdit(
exint srcelem,
612 const OBJ_ID &obj_id,
613 const SEC_ID &sec_id,
633 #define VEX_GEOATTRIBEDIT_CASE(vtype, type, name, isarray) \
634 UT_Array<VEX_DataCommandAttribEdit<PREC, OBJ_ID, SEC_ID, type>> * \
637 if (myType == vtype && myIsArray == isarray)\
638 return (UT_Array<VEX_DataCommandAttribEdit<PREC, OBJ_ID, SEC_ID, type>>*) myCmdList;\
641 #define VEX_GEOATTRIBEDIT_CASE_DIRECT(ty, name) \
642 VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,VEX##ty<PREC>,name,false)
643 #define VEX_GEOATTRIBEDIT_CASE_ARRAY(ty, name) \
644 VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,const UT_Array<VEX##ty<PREC>>*,name,true)
670 #undef VEX_GEOATTRIBEDIT_CASE_ARRAY
671 #undef VEX_GEOATTRIBEDIT_CASE_DIRECT
672 #undef VEX_GEOATTRIBEDIT_CASE
744 template <VEX_Precision PREC>
746 template <VEX_Precision PREC>
749 template <VEX_Precision PREC>
755 VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
777 template <VEX_Precision PREC>
787 void appendEdit(
exint srcelem,
801 template <VEX_Precision PREC>
810 const char *hardenString(
const char *str);
838 return myPointAdd.isEmpty() &&
839 myPrimAdd.isEmpty() &&
840 myVertexAdd.isEmpty() &&
841 myVertexRewire.isEmpty() &&
842 myAttribEdit.isEmpty() &&
843 myUsdEdit.isEmpty() &&
844 myEdgeGroupEdit.isEmpty() &&
845 myAgentChannelEdit.isEmpty() &&
846 myAgentXformEdit.isEmpty() &&
847 myAgentClipEdit.isEmpty() &&
848 myAgentLayerEdit.isEmpty() &&
849 myAgentAddClip.isEmpty() &&
850 myPointRemove.isEmpty() &&
851 myPointWithPrimRemove.isEmpty() &&
852 myPrimRemove.isEmpty() &&
853 myPrimWithPointRemove.isEmpty() &&
854 myVertexRemove.isEmpty() &&
855 myLocalVariables.empty() &&
870 VEXint<PREC> addPoint(
exint srcelem, VEXint<PREC> srcpt);
871 VEXint<PREC> addVertex(
exint srcelem, VEXint<PREC> primnum,
877 VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
880 void addLocalVariable(
exint srcelem,
const char *attrib,
const char *local);
884 void rewireVertex(
exint srcelem, VEXint<PREC> primum,
885 VEXint<PREC> vtxidx, VEXint<PREC> ptnum);
888 void removePoint(
exint srcelem, VEXint<PREC> ptnum,
bool includeprims);
889 void removePrim(
exint srcelem, VEXint<PREC> primnum,
bool includepoints);
890 void removeVertex(
exint srcelem, VEXint<PREC> primnum);
892 void setAgentChannelValue(
exint srcelem, VEXint<PREC> primnum,
894 VEXint<PREC> channelidx);
896 void setAgentTransform(
exint srcelem, VEXint<PREC> primnum,
900 void setAgentTransforms(
exint srcelem, VEXint<PREC> primnum,
904 void setAgentClips(
exint srcelem, VEXint<PREC> primnum,
905 const UT_Array<VEXint<PREC>> &clipids,
908 const UT_Array<VEXint<PREC>> &clipxformgroupids,
909 const UT_Array<VEXint<PREC>> &cliplayerids,
910 const UT_Array<VEXint<PREC>> &cliplayermodes,
912 const UT_Array<VEXint<PREC>> &cliplayerparents);
914 void setAgentLayers(
exint srcelem, VEXint<PREC> primnum,
915 const UT_Array<VEXint<PREC>> &layer_ids,
920 VEXint<PREC> primnum,
923 const bool keep_ref);
VEX_GeoCommandAgentAddClip(exint srcelem, VEXint< PREC > primnum, const UT_StringHolder &clip_name, const UT_StringHolder &clip_path, bool keep_ref)
VEX_Type
VEX variable types.
UT_Array< VEX_GeoCommandPrimAdd< PREC > > myPrimAdd
const UT_Array< VEXfloat< PREC > > & clipweights() const
#define VEX_GEOATTRIBEDIT_CASE_ARRAY(ty, name)
VEX_GeoCommandAgentClipEdit(exint srcelem, VEXint< PREC > primnum, const UT_Array< VEXint< PREC >> &clipids, const UT_Array< VEXfloat< PREC >> &cliptimes, const UT_Array< VEXfloat< PREC >> &clipweights, const UT_Array< VEXint< PREC >> &clipxformgroupids, 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
void set(VEXmat3< PREC > v)
VEX_GeoCommandEdgeGroupEdit()
VEXint< PREC > primnum() const
UT_StringMap< VariableEntry > myLocalVariables
UT_Array< VEX_GeoEdgeGroupEdit< PREC > * > myEdgeGroupEdit
const UT_Array< VEXint< PREC > > & cliplayerids() const
VEX_GeoCommandAgentLayerEdit(exint srcelem, VEXint< PREC > primnum, const UT_Array< VEXint< PREC >> &layer_ids, bool is_collision)
VEX_GeoCommandAgentAddClip()
void set(VEXint< PREC > v)
const SEC_ID & secID() const
UT_PageArray< VEXint< PREC >, 1, true, false, 10, exint > BlockArray
const OBJ_ID & objID() const
VEXint< PREC > primnum() const
GLsizei const GLchar *const * path
VEX_GeoEdgeGroupEdit(const UT_StringHolder &groupname)
UT_Array< VEX_GeoCommandEdgeGroupEdit< PREC > > myCmdList
UT_StringSet * myNewVisualizers
UT_Array< VEXint< PREC > > myClipXformGroupIds
constexpr VEX_Precision VEX_64
VEX_GeoCommandAgentChannelEdit()
UT_Array< VEXfloat< PREC > > myClipTimes
VEX_API VEX_GeoPrimType typeFromString(const char *)
UT_Array< VEXint< PREC > > myClipLayerIds
VEX_GeoCommandPrimAdd(exint srcelem, VEX_GeoPrimType primtype)
VEXint< PREC > ptnum() const
VEX_GeoCommandPointAdd(exint srcelem, VEXint< PREC > srcpt)
UT_Array< VEX_GeoCommandAgentChannelEdit< PREC > > myAgentChannelEdit
#define VEX_GEOATTRIBEDIT_CASE_DIRECT(ty, name)
GLuint const GLchar * name
const UT_StringHolder & name() const
const UT_StringHolder & groupName() const
VEX_GeoDictType dict() const
VEX_GeoCommandVertexRewire()
VEX_GeoCommandObjectRemove()
VEX_GeoCommandAgentChannelEdit(exint srcelem, VEXint< PREC > primnum, const VEXfloat< PREC > &value, VEXint< PREC > channelidx)
typename VEX_PrecisionResolver< P >::vec3_type VEXvec3
VEX_GeoTypeInfo typeinfo() const
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPrimRemove
VEXint< PREC > primnum() const
#define VEX_GEOATTRIBEDIT_CASE(vtype, type, name, isarray)
void set(VEXmat4< PREC > v)
VEXint< PREC > data() const
UT_Array< VEXint< PREC > > myClipLayerParents
UT_Array< VEX_UsdEdit< PREC > * > myUsdEdit
VEX_AttribEditIndexMap myUsdEditIndexMap
UT_Array< VEX_GeoCommandAgentClipEdit< PREC > > myAgentClipEdit
void set(VEXfloat< PREC > v)
VEX_GeoCommandEdgeGroupEdit(exint srcelem, VEXint< PREC > ptnum0, VEXint< PREC > ptnum1, VEXint< PREC > data)
UT_StringHolder myGroupName
const UT_Array< VEX_GeoCommandEdgeGroupEdit< PREC > > & cmd() const
GLfloat GLfloat GLfloat v2
VEXfloat< PREC > value() const
VEX_GeoCommand(exint srcelem)
bool shouldcreate() const
VEX_GeoCommandObjectRemove(exint srcelem, VEXint< PREC > obj_id)
VEXint< PREC > primnum() const
typename VEX_PrecisionResolver< P >::float_type VEXfloat
void set(VEXmat2< PREC > v)
VEX_DataCommandAttribEdit()
SYS_FORCE_INLINE const UT_StringHolder & UTmakeUnsafeRef(const UT_StringRef &ref)
Convert a UT_StringRef into a UT_StringHolder that is a shallow reference.
VEX_GeoCommandAgentClipEdit()=default
UT_Array< VEX_GeoCommandPointAdd< PREC > > myPointAdd
UT_StringHolder myClipPath
VEX_AttribEditIndexMap myAttribEditIndexMap
VEXint< PREC > srcpt() const
UT_Array< VEXint< PREC > > myClipIds
UT_StringHolder myClipName
constexpr VEX_Precision VEX_32
typedef int(WINAPI *PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer
typename VEX_PrecisionResolver< P >::mat4_type VEXmat4
std::size_t hash_value(const VEX_AttribEditId &id)
GLfloat GLfloat GLfloat GLfloat v3
const UT_Array< VEXint< PREC > > & clipxformgroupids() const
VEXint< PREC > ptNum0() const
void set(VEXvec2< PREC > v)
VEX_GeoCommandVertexAdd()
VEXint< PREC > ptNum1() const
const UT_Array< VEXint< PREC > > & layerIds() const
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myVertexRemove
const UT_Array< VEXint< PREC > > & cliplayermodes() const
VEX_DataCommandAttribEdit(exint srcelem, const OBJ_ID &obj_id, const SEC_ID &sec_id, VEX_GeoMode mode, T data)
VEX_EXTERN_TEMPLATE(VEX_AttribEdit< VEX_32, VEXint< VEX_32 >, VEXint< VEX_32 >>)
VEX_API VEX_GeoMode modeFromString(const char *)
VEX_GeoCommandAgentLayerEdit()=default
typename VEX_PrecisionResolver< P >::mat2_type VEXmat2
VEXint< PREC > primnum() const
VEX_GeoTypeInfo myTypeInfo
typename VEX_PrecisionResolver< P >::vec2_type VEXvec2
VEX_GeoCommandPointAdd(exint srcelem, VEXvec3< PREC > pos)
VEX_AttribEditId(VEX_GeoDictType dict, const UT_StringRef &path, const UT_StringRef &name, UseUnsafeStringsType)
const UT_Array< VEXfloat< PREC > > & cliplayerweights() const
VEXint< PREC > ptnum() const
UT_Array< VEX_GeoCommandVertexAdd< PREC > > myVertexAdd
UT_Array< VEXint< PREC > > myClipLayerModes
UT_Array< VEXfloat< PREC > > myClipLayerWeights
bool operator==(const VEX_AttribEditId &other) const
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPointWithPrimRemove
VEX_GeoPrimType type() const
UT_Array< VEX_GeoCommandVertexRewire< PREC > > myVertexRewire
VEX_AttribEditId(VEX_GeoDictType dict, const UT_StringHolder &path, const UT_StringHolder &name)
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPrimWithPointRemove
typename VEX_PrecisionResolver< P >::vec4_type VEXvec4
UT_Array< VEX_GeoCommandAgentLayerEdit< PREC > > myAgentLayerEdit
VEXint< PREC > channelIdx() const
UT_Array< VEXfloat< PREC > > myClipWeights
typename VEX_PrecisionResolver< P >::int_type VEXint
VEXint< PREC > vtxidx() const
VEX_API VEX_GeoDictType dictFromString(const char *)
const UT_StringHolder & path() const
VEX_GeoCommandVertexAdd(exint srcelem, VEXint< PREC > primnum, VEXint< PREC > ptnum)
const UT_Array< VEXint< PREC > > & clipids() const
const VEXint< PREC > primnum() const
const UT_Array< VEXfloat< PREC > > & cliptimes() const
UT_Array< VEX_GeoCommandAgentAddClip< PREC > > myAgentAddClip
const DefaultValue & defaultValue() const
void set(VEXvec4< PREC > v)
const UT_Array< VEXint< PREC > > & cliplayerparents() const
IMATH_INTERNAL_NAMESPACE_HEADER_ENTER IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T clip(const T &p, const Box< T > &box) IMATH_NOEXCEPT
typename VEX_PrecisionResolver< P >::mat3_type VEXmat3
void sort(I begin, I end, const Pred &pred)
VEXvec3< PREC > pos() const
UT_Array< VEX_GeoAttribEdit< PREC > * > myAttribEdit
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPointRemove
VEX_GeoCommandAgentClipEdit & operator=(const VEX_GeoCommandAgentClipEdit &)=default
VEX_GeoCommandVertexRewire(exint srcelem, VEXint< PREC > primnum, VEXint< PREC > vtxidx, VEXint< PREC > newptnum)
void set(VEXvec3< PREC > v)
VEXint< PREC > objID() const
VEX_API VEX_GeoTypeInfo typeinfoFromString(const char *)