12 #ifndef __VEX_GeoCommand__
13 #define __VEX_GeoCommand__
136 template <VEX_Precision PREC>
153 template <VEX_Precision PREC>
165 ,
myPos(0.0, 0.0, 0.0)
180 template <VEX_Precision PREC>
201 template <VEX_Precision PREC>
218 namespace VEX_DataObjID
228 {
return id.isstring(); }
232 {
return !
id.isEmpty(); }
235 template <VEX_Precision PREC,
typename OBJ_ID,
typename SEC_ID,
typename T>
240 exint srcelem,
const OBJ_ID &obj_id,
const SEC_ID &sec_id,
254 VEX_DataObjID::initID(
myObjID);
269 template <VEX_Precision PREC,
typename T>
272 template <VEX_Precision PREC,
typename T>
276 template <VEX_Precision PREC>
282 VEXint<PREC>
vtxidx, VEXint<PREC> newptnum)
300 template <VEX_Precision PREC>
306 VEXint<PREC> channelidx)
310 myChannelIdx(channelidx)
315 : myPrimNum(-1), myValue(0.0), myChannelIdx(-1)
319 VEXint<PREC>
primnum()
const {
return myPrimNum; }
324 VEXint<PREC> myPrimNum;
326 VEXint<PREC> myChannelIdx;
329 template <VEX_Precision PREC>
360 return std::get<SingleEdit>(
myData).second;
365 return std::get<FullEdit>(
myData);
377 std::variant<SingleEdit, FullEdit>
myData;
381 template <VEX_Precision PREC>
435 template <VEX_Precision PREC>
440 const UT_Array<VEXint<PREC>> &layer_ids,
bool is_collision)
443 myLayerIds(layer_ids),
444 myIsCollision(is_collision)
449 VEXint<PREC>
primnum()
const {
return myPrimNum; }
454 VEXint<PREC> myPrimNum = -1;
456 bool myIsCollision =
false;
461 template <VEX_Precision PREC>
495 template <VEX_Precision PREC>
533 template <VEX_Precision PREC,
typename OBJ_ID,
typename SEC_ID>
573 const
char *typeinfo);
575 void addAttribute(
exint srcelem,
580 void appendEdit(
exint srcelem,
581 const OBJ_ID &obj_id,
582 const SEC_ID &sec_id,
585 void appendEdit(
exint srcelem,
586 const OBJ_ID &obj_id,
587 const SEC_ID &sec_id,
590 void appendEdit(
exint srcelem,
591 const OBJ_ID &obj_id,
592 const SEC_ID &sec_id,
595 void appendEdit(
exint srcelem,
596 const OBJ_ID &obj_id,
597 const SEC_ID &sec_id,
600 void appendEdit(
exint srcelem,
601 const OBJ_ID &obj_id,
602 const SEC_ID &sec_id,
605 void appendEdit(
exint srcelem,
606 const OBJ_ID &obj_id,
607 const SEC_ID &sec_id,
610 void appendEdit(
exint srcelem,
611 const OBJ_ID &obj_id,
612 const SEC_ID &sec_id,
615 void appendEdit(
exint srcelem,
616 const OBJ_ID &obj_id,
617 const SEC_ID &sec_id,
620 void appendEdit(
exint srcelem,
621 const OBJ_ID &obj_id,
622 const SEC_ID &sec_id,
625 void appendEdit(
exint srcelem,
626 const OBJ_ID &obj_id,
627 const SEC_ID &sec_id,
630 void appendEdit(
exint srcelem,
631 const OBJ_ID &obj_id,
632 const SEC_ID &sec_id,
635 void appendEdit(
exint srcelem,
636 const OBJ_ID &obj_id,
637 const SEC_ID &sec_id,
640 void appendEdit(
exint srcelem,
641 const OBJ_ID &obj_id,
642 const SEC_ID &sec_id,
645 void appendEdit(
exint srcelem,
646 const OBJ_ID &obj_id,
647 const SEC_ID &sec_id,
650 void appendEdit(
exint srcelem,
651 const OBJ_ID &obj_id,
652 const SEC_ID &sec_id,
655 void appendEdit(
exint srcelem,
656 const OBJ_ID &obj_id,
657 const SEC_ID &sec_id,
660 void appendEdit(
exint srcelem,
661 const OBJ_ID &obj_id,
662 const SEC_ID &sec_id,
665 void appendEdit(
exint srcelem,
666 const OBJ_ID &obj_id,
667 const SEC_ID &sec_id,
670 void appendEdit(
exint srcelem,
671 const OBJ_ID &obj_id,
672 const SEC_ID &sec_id,
674 const
UT_Array<const
char *> *data);
675 void appendEdit(
exint srcelem,
676 const OBJ_ID &obj_id,
677 const SEC_ID &sec_id,
697 #define VEX_GEOATTRIBEDIT_CASE(vtype, type, name, isarray) \
698 UT_Array<VEX_DataCommandAttribEdit<PREC, OBJ_ID, SEC_ID, type>> * \
701 if (myType == vtype && myIsArray == isarray)\
702 return (UT_Array<VEX_DataCommandAttribEdit<PREC, OBJ_ID, SEC_ID, type>>*) myCmdList;\
705 #define VEX_GEOATTRIBEDIT_CASE_DIRECT(ty, name) \
706 VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,VEX##ty<PREC>,name,false)
707 #define VEX_GEOATTRIBEDIT_CASE_ARRAY(ty, name) \
708 VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,const UT_Array<VEX##ty<PREC>>*,name,true)
734 #undef VEX_GEOATTRIBEDIT_CASE_ARRAY
735 #undef VEX_GEOATTRIBEDIT_CASE_DIRECT
736 #undef VEX_GEOATTRIBEDIT_CASE
808 template <VEX_Precision PREC>
810 template <VEX_Precision PREC>
813 template <VEX_Precision PREC>
819 VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
841 template <VEX_Precision PREC>
851 void appendEdit(
exint srcelem,
865 template <VEX_Precision PREC>
875 const char *hardenString(
const char *str);
903 return myPointAdd.isEmpty() &&
904 myPrimAdd.isEmpty() &&
905 myVertexAdd.isEmpty() &&
906 myVertexRewire.isEmpty() &&
907 myAttribEdit.isEmpty() &&
908 myUsdEdit.isEmpty() &&
909 myEdgeGroupEdit.isEmpty() &&
910 myAgentChannelEdit.isEmpty() &&
911 myAgentXformEdit.isEmpty() &&
912 myAgentClipEdit.isEmpty() &&
913 myAgentLayerEdit.isEmpty() &&
914 myAgentAddClip.isEmpty() &&
915 myPrimChannelEdit.isEmpty() &&
916 myPointRemove.isEmpty() &&
917 myPointWithPrimRemove.isEmpty() &&
918 myPrimRemove.isEmpty() &&
919 myPrimWithPointRemove.isEmpty() &&
920 myVertexRemove.isEmpty() &&
921 myLocalVariables.empty() &&
937 VEXint<PREC> addPoint(
exint srcelem, VEXint<PREC> srcpt);
938 VEXint<PREC> addVertex(
exint srcelem, VEXint<PREC> primnum,
944 VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
947 void addLocalVariable(
exint srcelem,
const char *attrib,
const char *local);
951 void rewireVertex(
exint srcelem, VEXint<PREC> primum,
952 VEXint<PREC> vtxidx, VEXint<PREC> ptnum);
955 void removePoint(
exint srcelem, VEXint<PREC> ptnum,
bool includeprims);
956 void removePrim(
exint srcelem, VEXint<PREC> primnum,
bool includepoints);
957 void removeVertex(
exint srcelem, VEXint<PREC> primnum);
959 void setAgentChannelValue(
exint srcelem, VEXint<PREC> primnum,
961 VEXint<PREC> channelidx);
963 void setAgentTransform(
exint srcelem, VEXint<PREC> primnum,
967 void setAgentTransforms(
exint srcelem, VEXint<PREC> primnum,
971 void setAgentClips(
exint srcelem, VEXint<PREC> primnum,
972 const UT_Array<VEXint<PREC>> &clipids,
975 const UT_Array<VEXint<PREC>> &clipxformgroupids,
976 const UT_Array<VEXint<PREC>> &cliplayerids,
977 const UT_Array<VEXint<PREC>> &cliplayermodes,
979 const UT_Array<VEXint<PREC>> &cliplayerparents);
981 void setAgentLayers(
exint srcelem, VEXint<PREC> primnum,
982 const UT_Array<VEXint<PREC>> &layer_ids,
987 VEXint<PREC> primnum,
990 const bool keep_ref);
992 void primChannelInsertKey(
exint srcelem,
993 VEXint<PREC> primnum,
996 void primChannelDestroyKey(
exint srcelem,
997 VEXint<PREC> primnum,
1000 void primChannelClear(
exint srcelem, VEXint<PREC> primnum);
1002 void primChannelSetKeyValue(
exint srcelem, VEXint<PREC> primnum,
1003 float time,
float value,
1006 void primChannelSetKeySlope(
exint srcelem, VEXint<PREC> primnum,
1007 float time,
float slope,
1010 void primChannelSetKeyAccel(
exint srcelem, VEXint<PREC> primnum,
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)
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
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()
GA_API const UT_StringHolder accel
imath_half_bits_t half
if we're in a C-only context, alias the half bits type to half
void set(VEXint< PREC > v)
const SEC_ID & secID() const
UT_PageArray< VEXint< PREC >, 1, true, false, 10, exint > BlockArray
GT_API const UT_StringHolder time
const OBJ_ID & objID() const
GLsizei const GLfloat * value
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
PUGI__FN void sort(I begin, I end, const Pred &pred)
#define VEX_GEOATTRIBEDIT_CASE_DIRECT(ty, name)
const UT_StringHolder & name() const
GLfloat GLfloat GLfloat v2
const UT_StringHolder & groupName() const
VEX_GeoDictType dict() const
VEX_GeoCommandVertexRewire()
GLfloat GLfloat GLfloat GLfloat v3
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
VEX_GeoCommandPrimChannelEdit()
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)
GLint GLint GLsizei GLint GLenum GLenum type
UT_StringHolder myGroupName
const UT_Array< VEX_GeoCommandEdgeGroupEdit< PREC > > & cmd() const
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
VEXint< PREC > primnum() const
#define UT_NON_COPYABLE(CLASS)
Define deleted copy constructor and assignment operator inside a class.
UT_Array< VEX_GeoCommandPrimChannelEdit< PREC > > myPrimChannelEdit
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
typename VEX_PrecisionResolver< P >::mat4_type VEXmat4
GLuint const GLchar * name
VEX_API std::size_t hash_value(const VEX_AttribEditId &id)
const UT_Array< VEXint< PREC > > & clipxformgroupids() const
VEXint< PREC > ptNum0() const
VEX_GeoCommandPrimChannelEdit(exint srcelem, VEXint< PREC > primnum, VEX_GeoPrimChannelOperation operation, float time=0.0, float value=0.0, VEX_GeoPrimChannelKeyHalf half=VEX_GeoPrimChannelKeyHalf::InOut)
void set(VEXvec2< PREC > v)
VEX_GeoCommandVertexAdd()
VEX_GeoPrimChannelKeyHalf
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
VEX_GeoPrimChannelKeyHalf myHalf
void set(VEXvec4< PREC > v)
const UT_Array< VEXint< PREC > > & cliplayerparents() const
VEX_GeoPrimChannelOperation
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
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)
VEX_GeoPrimChannelOperation myOperation
void set(VEXvec3< PREC > v)
VEXint< PREC > objID() const
VEX_API VEX_GeoTypeInfo typeinfoFromString(const char *)