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>
413 template <VEX_Precision PREC>
447 template <VEX_Precision PREC,
typename OBJ_ID,
typename SEC_ID>
473 void setTypeInfo(
exint srcelem,
474 const char *typeinfo);
476 void addAttribute(
exint srcelem,
481 void appendEdit(
exint srcelem,
482 const OBJ_ID &obj_id,
483 const SEC_ID &sec_id,
486 void appendEdit(
exint srcelem,
487 const OBJ_ID &obj_id,
488 const SEC_ID &sec_id,
491 void appendEdit(
exint srcelem,
492 const OBJ_ID &obj_id,
493 const SEC_ID &sec_id,
496 void appendEdit(
exint srcelem,
497 const OBJ_ID &obj_id,
498 const SEC_ID &sec_id,
501 void appendEdit(
exint srcelem,
502 const OBJ_ID &obj_id,
503 const SEC_ID &sec_id,
506 void appendEdit(
exint srcelem,
507 const OBJ_ID &obj_id,
508 const SEC_ID &sec_id,
511 void appendEdit(
exint srcelem,
512 const OBJ_ID &obj_id,
513 const SEC_ID &sec_id,
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,
598 #define VEX_GEOATTRIBEDIT_CASE(vtype, type, name, isarray) \
599 UT_Array<VEX_DataCommandAttribEdit<PREC, OBJ_ID, SEC_ID, type>> * \
602 if (myType == vtype && myIsArray == isarray)\
603 return (UT_Array<VEX_DataCommandAttribEdit<PREC, OBJ_ID, SEC_ID, type>>*) myCmdList;\
606 #define VEX_GEOATTRIBEDIT_CASE_DIRECT(ty, name) \
607 VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,VEX##ty<PREC>,name,false)
608 #define VEX_GEOATTRIBEDIT_CASE_ARRAY(ty, name) \
609 VEX_GEOATTRIBEDIT_CASE(VEX_VexTypeResolver<VEX##ty<PREC>>::type,const UT_Array<VEX##ty<PREC>>*,name,true)
635 #undef VEX_GEOATTRIBEDIT_CASE_ARRAY
636 #undef VEX_GEOATTRIBEDIT_CASE_DIRECT
637 #undef VEX_GEOATTRIBEDIT_CASE
640 const char *
name()
const {
return myName; }
667 template <VEX_Precision PREC>
669 template <VEX_Precision PREC>
672 template <VEX_Precision PREC>
678 VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
700 template <VEX_Precision PREC>
710 void appendEdit(
exint srcelem,
724 template <VEX_Precision PREC>
733 const char *hardenString(
const char *str);
761 return myPointAdd.isEmpty() &&
762 myPrimAdd.isEmpty() &&
763 myVertexAdd.isEmpty() &&
764 myVertexRewire.isEmpty() &&
765 myAttribEdit.isEmpty() &&
766 myUsdAttribEdit.isEmpty() &&
767 myEdgeGroupEdit.isEmpty() &&
768 myAgentChannelEdit.isEmpty() &&
769 myAgentXformEdit.isEmpty() &&
770 myAgentClipEdit.isEmpty() &&
771 myAgentAddClip.isEmpty() &&
772 myPointRemove.isEmpty() &&
773 myPointWithPrimRemove.isEmpty() &&
774 myPrimRemove.isEmpty() &&
775 myPrimWithPointRemove.isEmpty() &&
776 myVertexRemove.isEmpty() &&
777 myLocalVariables.empty() &&
784 VEXint<PREC> addPoint(
exint srcelem, VEXint<PREC> srcpt);
785 VEXint<PREC> addVertex(
exint srcelem, VEXint<PREC> primnum,
791 VEXint<PREC> ptnum0, VEXint<PREC> ptnum1,
794 void addLocalVariable(
exint srcelem,
const char *attrib,
const char *local);
798 void rewireVertex(
exint srcelem, VEXint<PREC> primum,
799 VEXint<PREC> vtxidx, VEXint<PREC> ptnum);
801 void removePoint(
exint srcelem, VEXint<PREC> ptnum,
bool includeprims);
802 void removePrim(
exint srcelem, VEXint<PREC> primnum,
bool includepoints);
803 void removeVertex(
exint srcelem, VEXint<PREC> primnum);
805 void setAgentChannelValue(
exint srcelem, VEXint<PREC> primnum,
807 VEXint<PREC> channelidx);
809 void setAgentTransform(
exint srcelem, VEXint<PREC> primnum,
813 void setAgentTransforms(
exint srcelem, VEXint<PREC> primnum,
817 void setAgentClips(
exint srcelem, VEXint<PREC> primnum,
822 const UT_Array<VEXint<PREC>> &cliplayerids,
823 const UT_Array<VEXint<PREC>> &cliplayermodes,
825 const UT_Array<VEXint<PREC>> &cliplayerparents);
829 VEXint<PREC> primnum,
832 const bool keep_ref);
VEX_GeoCommandAgentAddClip(exint srcelem, VEXint< PREC > primnum, const UT_StringHolder &clip_name, const UT_StringHolder &clip_path, bool keep_ref)
const char * name() const
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)
UT_Array< VEX_GeoCommandAgentXformEdit< PREC > > myAgentXformEdit
void set(VEXmat3< PREC > v)
VEX_GeoCommandEdgeGroupEdit()
VEXint< PREC > primnum() const
GLuint const GLchar * name
UT_StringMap< VariableEntry > myLocalVariables
UT_Array< VEX_GeoEdgeGroupEdit< PREC > * > myEdgeGroupEdit
const UT_Array< VEXint< PREC > > & cliplayerids() const
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
VEX_GeoEdgeGroupEdit(const UT_StringHolder &groupname)
UT_Array< VEX_GeoCommandEdgeGroupEdit< PREC > > myCmdList
UT_StringSet * myNewVisualizers
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)
format_arg_store< context, Args...> as
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
UT_Array< VEX_UsdAttribEdit< PREC > * > myUsdAttribEdit
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_GeoCommandAgentClipEdit< PREC > > myAgentClipEdit
void set(VEXfloat< PREC > v)
VEX_GeoCommandEdgeGroupEdit(exint srcelem, VEXint< PREC > ptnum0, VEXint< PREC > ptnum1, VEXint< PREC > data)
GLfloat GLfloat GLfloat v2
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)
GLint GLenum GLsizei GLint GLsizei const void * data
typename VEX_PrecisionResolver< P >::float_type VEXfloat
void set(VEXmat2< PREC > v)
VEX_DataCommandAttribEdit()
VEX_GeoCommandAgentClipEdit()=default
UT_Array< VEX_GeoCommandPointAdd< PREC > > myPointAdd
UT_StringHolder myClipPath
VEXint< PREC > srcpt() const
UT_StringHolder myClipName
constexpr VEX_Precision VEX_32
typename VEX_PrecisionResolver< P >::mat4_type VEXmat4
GLuint GLuint GLsizei GLenum type
VEXint< PREC > ptNum0() const
void set(VEXvec2< PREC > v)
VEX_GeoCommandVertexAdd()
VEXint< PREC > ptNum1() 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 *)
const UT_StringArray & clipnames() const
typename VEX_PrecisionResolver< P >::mat2_type VEXmat2
VEXint< PREC > primnum() const
VEX_GeoCommandAgentClipEdit(exint 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)
IMATH_INTERNAL_NAMESPACE_HEADER_ENTER T clip(const T &p, const Box< T > &box)
VEX_GeoTypeInfo myTypeInfo
typename VEX_PrecisionResolver< P >::vec2_type VEXvec2
VEX_GeoCommandPointAdd(exint srcelem, VEXvec3< PREC > pos)
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
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPointWithPrimRemove
VEX_GeoPrimType type() const
UT_Array< VEX_GeoCommandVertexRewire< PREC > > myVertexRewire
UT_Array< VEX_GeoCommandObjectRemove< PREC > > myPrimWithPointRemove
typename VEX_PrecisionResolver< P >::vec4_type VEXvec4
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 *)
VEX_GeoCommandVertexAdd(exint srcelem, VEXint< PREC > primnum, VEXint< PREC > ptnum)
const VEXint< PREC > primnum() const
const UT_Array< VEXfloat< PREC > > & cliptimes() const
UT_Array< VEX_GeoCommandAgentAddClip< PREC > > myAgentAddClip
UT_StringArray myClipNames
const DefaultValue & defaultValue() const
void set(VEXvec4< PREC > v)
const UT_Array< VEXint< PREC > > & cliplayerparents() const
typename VEX_PrecisionResolver< P >::mat3_type VEXmat3
GLsizei const GLfloat * value
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
GLfloat GLfloat GLfloat GLfloat v3
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)
const UT_StringArray & clipxformgroups() const
UT_StringArray myClipXformGroups
VEXint< PREC > objID() const
VEX_API VEX_GeoTypeInfo typeinfoFromString(const char *)