20 using namespace UT::Literal;
43 if (bindname != src.
bindname)
return false;
44 if (bindparm != src.
bindparm)
return false;
60 for (
int i = 0; i < list.
entries(); i++)
85 bindgroupname =
""_sh;
86 bindgroupparm =
""_sh;
109 for (
int i = 0; i < list.
entries(); i++)
130 myVexOutputMask =
"*"_sh;
132 myGroupAutobind =
true;
136 myMultiThread =
true;
137 myUpdateNormals =
false;
139 myThreadJobSize = 1024;
140 myMatchAttrib =
"id"_sh;
141 mySelectionGroup =
""_sh;
142 myCookInPlace =
false;
143 myVexPrecision =
"auto"_sh;
153 if (myVexCWD != src.myVexCWD)
return false;
154 if (myVexOutputMask != src.myVexOutputMask)
return false;
155 if (myBindings != src.myBindings)
return false;
156 if (myGroupBindings != src.myGroupBindings)
return false;
157 if (myAutobind != src.myAutobind)
return false;
158 if (myGroupAutobind != src.myGroupAutobind)
return false;
159 if (myBindClass != src.myBindClass)
return false;
160 if (myBindGroup != src.myBindGroup)
return false;
161 if (myBindGroupType != src.myBindGroupType)
return false;
162 if (myMultiThread != src.myMultiThread)
return false;
163 if (myUpdateNormals != src.myUpdateNormals)
return false;
164 if (myNumCount != src.myNumCount)
return false;
165 if (myThreadJobSize != src.myThreadJobSize)
return false;
166 if (myMatchAttrib != src.myMatchAttrib)
return false;
167 if (mySelectionGroup != src.mySelectionGroup)
return false;
168 if (myCookInPlace != src.myCookInPlace)
return false;
169 if (myVexPrecision != src.myVexPrecision)
return false;
184 graph->
evalOpParm(myVexCWD, nodeidx,
"vex_cwdpath", time, 0);
185 myVexOutputMask =
"*"_sh;
187 graph->
evalOpParm(myVexOutputMask, nodeidx,
"vex_outputmask", time, 0);
191 graph->
evalOpParm(length, nodeidx,
"bindings", time, 0);
192 myBindings.entries(length);
196 auto && _curentry = myBindings(i);
198 myBindings(i).bindname =
""_sh;
200 graph->
evalOpParmInst(myBindings(i).bindname, nodeidx,
"bindname#", &parmidx, time, 0);
201 myBindings(i).bindparm =
""_sh;
203 graph->
evalOpParmInst(myBindings(i).bindparm, nodeidx,
"bindparm#", &parmidx, time, 0);
212 graph->
evalOpParm(length, nodeidx,
"groupbindings", time, 0);
213 myGroupBindings.entries(length);
217 auto && _curentry = myGroupBindings(i);
219 myGroupBindings(i).bindgroupname =
""_sh;
221 graph->
evalOpParmInst(myGroupBindings(i).bindgroupname, nodeidx,
"bindgroupname#", &parmidx, time, 0);
222 myGroupBindings(i).bindgroupparm =
""_sh;
224 graph->
evalOpParmInst(myGroupBindings(i).bindgroupparm, nodeidx,
"bindgroupparm#", &parmidx, time, 0);
229 myGroupBindings.clear();
232 graph->
evalOpParm(myAutobind, nodeidx,
"autobind", time, 0);
233 myGroupAutobind =
true;
235 graph->
evalOpParm(myGroupAutobind, nodeidx,
"groupautobind", time, 0);
238 graph->
evalOpParm(myBindClass, nodeidx,
"bindclass", time, 0);
241 graph->
evalOpParm(myBindGroup, nodeidx,
"bindgroup", time, 0);
244 graph->
evalOpParm(myBindGroupType, nodeidx,
"bindgrouptype", time, 0);
245 myMultiThread =
true;
247 graph->
evalOpParm(myMultiThread, nodeidx,
"vex_multithread", time, 0);
248 myUpdateNormals =
false;
250 graph->
evalOpParm(myUpdateNormals, nodeidx,
"vex_updatenmls", time, 0);
252 if (
true && ( (getBindClass()==4) ) )
253 graph->
evalOpParm(myNumCount, nodeidx,
"vex_numcount", time, 0);
254 myThreadJobSize = 1024;
255 if (
true && ( (getBindClass()==4) ) )
256 graph->
evalOpParm(myThreadJobSize, nodeidx,
"vex_threadjobsize", time, 0);
257 myMatchAttrib =
"id"_sh;
259 graph->
evalOpParm(myMatchAttrib, nodeidx,
"vex_matchattrib", time, 0);
260 mySelectionGroup =
""_sh;
262 graph->
evalOpParm(mySelectionGroup, nodeidx,
"vex_selectiongroup", time, 0);
263 myCookInPlace =
false;
265 graph->
evalOpParm(myCookInPlace, nodeidx,
"vex_inplace", time, 0);
266 myVexPrecision =
"auto"_sh;
268 graph->
evalOpParm(myVexPrecision, nodeidx,
"vex_precision", time, 0);
307 loadData(is, rampdata);
325 int typelen = colon - data.
buffer();
339 {
int64 iv =
v; UTwrite(os, &iv); }
341 { UTwrite<fpreal64>(os, &
v); }
343 { UTwrite<fpreal64>(os, &v.
x()); UTwrite<fpreal64>(os, &v.
y()); }
345 { UTwrite<fpreal64>(os, &v.
x()); UTwrite<fpreal64>(os, &v.
y());
346 UTwrite<fpreal64>(os, &v.
z()); }
348 { UTwrite<fpreal64>(os, &v.
x()); UTwrite<fpreal64>(os, &v.
y());
349 UTwrite<fpreal64>(os, &v.
z()); UTwrite<fpreal64>(os, &v.
w()); }
361 if (s) s->save(ostr);
363 saveData(os, result);
370 ostr << s->getDataTypeToken();
375 saveData(os, result);
379 void save(std::ostream &os)
const
383 saveData(os, myVexCWD);
384 saveData(os, myVexOutputMask);
387 UTwrite(os, &length);
390 saveData(os, myBindings(i).bindname);
391 saveData(os, myBindings(i).bindparm);
397 UTwrite(os, &length);
400 saveData(os, myGroupBindings(i).bindgroupname);
401 saveData(os, myGroupBindings(i).bindgroupparm);
405 saveData(os, myAutobind);
406 saveData(os, myGroupAutobind);
407 saveData(os, myBindClass);
408 saveData(os, myBindGroup);
409 saveData(os, myBindGroupType);
410 saveData(os, myMultiThread);
411 saveData(os, myUpdateNormals);
412 saveData(os, myNumCount);
413 saveData(os, myThreadJobSize);
414 saveData(os, myMatchAttrib);
415 saveData(os, mySelectionGroup);
416 saveData(os, myCookInPlace);
417 saveData(os, myVexPrecision);
430 loadData(is, myVexCWD);
431 loadData(is, myVexOutputMask);
435 myBindings.entries(length);
438 loadData(is, myBindings(i).bindname);
439 loadData(is, myBindings(i).bindparm);
446 myGroupBindings.entries(length);
449 loadData(is, myGroupBindings(i).bindgroupname);
450 loadData(is, myGroupBindings(i).bindgroupparm);
454 loadData(is, myAutobind);
455 loadData(is, myGroupAutobind);
456 loadData(is, myBindClass);
457 loadData(is, myBindGroup);
458 loadData(is, myBindGroupType);
459 loadData(is, myMultiThread);
460 loadData(is, myUpdateNormals);
461 loadData(is, myNumCount);
462 loadData(is, myThreadJobSize);
463 loadData(is, myMatchAttrib);
464 loadData(is, mySelectionGroup);
465 loadData(is, myCookInPlace);
466 loadData(is, myVexPrecision);
476 if (!thissop)
return getVexCWD();
478 OP_Utils::evalOpParm(result, thissop,
"vex_cwdpath", cookparms.
getCookTime(), 0);
486 if (!thissop)
return getVexOutputMask();
488 OP_Utils::evalOpParm(result, thissop,
"vex_outputmask", cookparms.
getCookTime(), 0);
496 if (!thissop)
return getBindings().entries();
498 OP_Utils::evalOpParm(result, thissop,
"bindings", cookparms.
getCookTime(), 0);
504 if (!thissop)
return (myBindings(_idx).bindname);
505 int _parmidx = _idx + 1;
507 OP_Utils::evalOpParmInst(result, thissop,
"bindname#", &_parmidx, cookparms.
getCookTime(), 0);
513 if (!thissop)
return (myBindings(_idx).bindparm);
514 int _parmidx = _idx + 1;
516 OP_Utils::evalOpParmInst(result, thissop,
"bindparm#", &_parmidx, cookparms.
getCookTime(), 0);
525 if (!thissop)
return getGroupBindings().entries();
527 OP_Utils::evalOpParm(result, thissop,
"groupbindings", cookparms.
getCookTime(), 0);
533 if (!thissop)
return (myGroupBindings(_idx).bindgroupname);
534 int _parmidx = _idx + 1;
536 OP_Utils::evalOpParmInst(result, thissop,
"bindgroupname#", &_parmidx, cookparms.
getCookTime(), 0);
542 if (!thissop)
return (myGroupBindings(_idx).bindgroupparm);
543 int _parmidx = _idx + 1;
545 OP_Utils::evalOpParmInst(result, thissop,
"bindgroupparm#", &_parmidx, cookparms.
getCookTime(), 0);
554 if (!thissop)
return getAutobind();
556 OP_Utils::evalOpParm(result, thissop,
"autobind", cookparms.
getCookTime(), 0);
564 if (!thissop)
return getGroupAutobind();
566 OP_Utils::evalOpParm(result, thissop,
"groupautobind", cookparms.
getCookTime(), 0);
574 if (!thissop)
return getBindClass();
576 OP_Utils::evalOpParm(result, thissop,
"bindclass", cookparms.
getCookTime(), 0);
584 if (!thissop)
return getBindGroup();
586 OP_Utils::evalOpParm(result, thissop,
"bindgroup", cookparms.
getCookTime(), 0);
594 if (!thissop)
return getBindGroupType();
596 OP_Utils::evalOpParm(result, thissop,
"bindgrouptype", cookparms.
getCookTime(), 0);
604 if (!thissop)
return getMultiThread();
606 OP_Utils::evalOpParm(result, thissop,
"vex_multithread", cookparms.
getCookTime(), 0);
614 if (!thissop)
return getUpdateNormals();
616 OP_Utils::evalOpParm(result, thissop,
"vex_updatenmls", cookparms.
getCookTime(), 0);
624 if (!thissop)
return getNumCount();
626 OP_Utils::evalOpParm(result, thissop,
"vex_numcount", cookparms.
getCookTime(), 0);
634 if (!thissop)
return getThreadJobSize();
636 OP_Utils::evalOpParm(result, thissop,
"vex_threadjobsize", cookparms.
getCookTime(), 0);
644 if (!thissop)
return getMatchAttrib();
646 OP_Utils::evalOpParm(result, thissop,
"vex_matchattrib", cookparms.
getCookTime(), 0);
654 if (!thissop)
return getSelectionGroup();
656 OP_Utils::evalOpParm(result, thissop,
"vex_selectiongroup", cookparms.
getCookTime(), 0);
664 if (!thissop)
return getCookInPlace();
666 OP_Utils::evalOpParm(result, thissop,
"vex_inplace", cookparms.
getCookTime(), 0);
674 if (!thissop)
return getVexPrecision();
676 OP_Utils::evalOpParm(result, thissop,
"vex_precision", cookparms.
getCookTime(), 0);
686 bool myGroupAutobind;
689 int64 myBindGroupType;
691 bool myUpdateNormals;
693 int64 myThreadJobSize;
UT_StringHolder opBindings_bindname(const SOP_NodeVerb::CookParms &cookparms, exint _idx) const
static void loadData(UT_IStream &is, fpreal64 &v)
const UT_Array< GroupBindings > & getGroupBindings() const
void buildFromOp(const SOP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
static void loadData(UT_IStream &is, UT_Vector3D &v)
exint opGroupBindings(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Matrix3D &v)
SOP_Node * getNode() const
const UT_StringHolder & getMatchAttrib() const
bool operator==(const GroupBindings &src) const
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, int *inst, fpreal time, DEP_MicroNode *depnode) const =0
UT_StringHolder opVexOutputMask(const SOP_NodeVerb::CookParms &cookparms) const
exint opBindings(const SOP_NodeVerb::CookParms &cookparms) const
exint bread(int32 *buffer, exint asize=1)
GT_API const UT_StringHolder time
UT_StringHolder opVexCWD(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getVexPrecision() const
GLuint const GLfloat * val
void setMultiThread(bool val)
UT_StringHolder opMatchAttrib(const SOP_NodeVerb::CookParms &cookparms) const
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
void setVexCWD(const UT_StringHolder &val)
SYS_FORCE_INLINE const char * buffer() const
An output stream object that owns its own string buffer storage.
UT_StringHolder bindgroupparm
void setMatchAttrib(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_Vector4I &v)
bool operator!=(const Bindings &src) const
static void saveData(std::ostream &os, fpreal64 v)
UT_StringHolder createString(const UT_Array< Bindings > &list) const
int64 opNumCount(const SOP_NodeVerb::CookParms &cookparms) const
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
static void loadData(UT_IStream &is, bool &v)
static void saveData(std::ostream &os, UT_Matrix3D v)
void setBindGroupType(int64 val)
void setBindGroup(const UT_StringHolder &val)
static void saveData(std::ostream &os, UT_Matrix4D v)
UT_StringHolder createString(const UT_Array< GroupBindings > &list) const
bool opMultiThread(const SOP_NodeVerb::CookParms &cookparms) const
void setThreadJobSize(int64 val)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
static void saveData(std::ostream &os, UT_Vector2D v)
const UT_StringHolder & getBindGroup() const
void setAutobind(bool val)
bool getUpdateNormals() const
void setGroupBindings(const UT_Array< GroupBindings > &val)
const UT_StringHolder & getSelectionGroup() const
bool getGroupAutobind() const
bool opGroupAutobind(const SOP_NodeVerb::CookParms &cookparms) const
void save(std::ostream &os) const
const UT_StringHolder & getVexCWD() const
int64 getBindGroupType() const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
UT_StringHolder opVexPrecision(const SOP_NodeVerb::CookParms &cookparms) const
void setCookInPlace(bool val)
GLint GLenum GLsizei GLint GLsizei const void * data
static void loadData(UT_IStream &is, UT_StringHolder &v)
bool operator!=(const GroupBindings &src) const
exint read(bool *array, exint sz=1)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
static void saveData(std::ostream &os, UT_StringHolder s)
static void loadData(UT_IStream &is, UT_Vector2D &v)
GLuint GLsizei GLsizei * length
static void saveData(std::ostream &os, UT_Vector3D v)
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
static void saveData(std::ostream &os, UT_Vector4D v)
const UT_Array< Bindings > & getBindings() const
bool operator==(const SOP_AttribVopParms &src) const
bool load(UT_IStream &is)
bool operator==(const Bindings &src) const
static void loadData(UT_IStream &is, int64 &v)
void setUpdateNormals(bool val)
static void saveData(std::ostream &os, PRM_DataItemHandle s)
static void loadData(UT_IStream &is, UT_Matrix4D &v)
SYS_FORCE_INLINE void strcat(const char *src)
void saveBinary(std::ostream &os) const
Save string to binary stream.
static void loadData(UT_IStream &is, UT_Vector2I &v)
UT_StringHolder opBindGroup(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opSelectionGroup(const SOP_NodeVerb::CookParms &cookparms) const
GT_API const UT_StringHolder version
void setBindings(const UT_Array< Bindings > &val)
exint entries() const
Alias of size(). size() is preferred.
int64 opBindGroupType(const SOP_NodeVerb::CookParms &cookparms) const
UT_StringHolder opBindings_bindparm(const SOP_NodeVerb::CookParms &cookparms, exint _idx) const
static void loadData(UT_IStream &is, UT_Vector3I &v)
bool getCookInPlace() const
bool opUpdateNormals(const SOP_NodeVerb::CookParms &cookparms) const
static void saveData(std::ostream &os, bool v)
void setBindClass(int64 val)
Utility class for containing a color ramp.
bool operator!=(const SOP_AttribVopParms &src) const
UT_StringHolder opGroupBindings_bindgroupparm(const SOP_NodeVerb::CookParms &cookparms, exint _idx) const
SYS_FORCE_INLINE void append(char character)
GLdouble GLdouble GLdouble r
bool opAutobind(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getVexOutputMask() const
void setSelectionGroup(const UT_StringHolder &val)
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
int64 getThreadJobSize() const
fpreal getCookTime() const
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
UT_StringHolder bindgroupname
const char * findChar(int c) const
bool opCookInPlace(const SOP_NodeVerb::CookParms &cookparms) const
int64 opBindClass(const SOP_NodeVerb::CookParms &cookparms) const
bool getMultiThread() const
static void saveData(std::ostream &os, UT_Matrix2D v)
void setVexOutputMask(const UT_StringHolder &val)
void setGroupAutobind(bool val)
int64 opThreadJobSize(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, UT_Vector4D &v)
int64 getNumCount() const
GLenum GLuint GLsizei const GLchar * buf
void setVexPrecision(const UT_StringHolder &val)
UT_StringHolder opGroupBindings_bindgroupname(const SOP_NodeVerb::CookParms &cookparms, exint _idx) const
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
int64 getBindClass() const
SYS_FORCE_INLINE bool isstring() const
static void saveData(std::ostream &os, int64 v)
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
void setNumCount(int64 val)