199 int *timedep =
nullptr)
205 , myParentXfo(parent_cb)
213 int *timedep =
nullptr)
214 : myTrackIndex(index)
218 , myParentXfo(parent_cb)
243 #define OPREF_PREFIX "op:"
244 #define OPREF_PREFIX_LEN 3
248 #define OP_NODE_DATA_SEPARATOR ':'
252 #define DEFAULT_COMP_HASH_VALUE (17*19)
255 #define INVALID_TABLE_NAME "Node"
256 #define OBJ_TABLE_NAME "Object"
257 #define SOP_TABLE_NAME "Sop"
258 #define CHOPNET_TABLE_NAME "ChopNet"
259 #define CHOP_TABLE_NAME "Chop"
260 #define ROP_TABLE_NAME "Driver"
261 #define SHOP_TABLE_NAME "Shop"
262 #define COP_TABLE_NAME "Cop"
263 #define COP2_TABLE_NAME "Cop2"
264 #define COP2NET_TABLE_NAME "CopNet"
265 #define VOP_TABLE_NAME "Vop"
266 #define VOPNET_TABLE_NAME "VopNet"
267 #define DOP_TABLE_NAME "Dop"
268 #define TOP_TABLE_NAME "Top"
269 #define TOPNET_TABLE_NAME "TopNet"
270 #define LOP_TABLE_NAME "Lop"
273 #define MGR_TABLE_NAME "Manager"
274 #define DIR_TABLE_NAME "Director"
275 #define DATA_TABLE_NAME "Data"
279 #define INVALID_SCRIPT_NAME "node"
280 #define OBJ_SCRIPT_NAME "obj"
281 #define SOP_SCRIPT_NAME "sop"
282 #define CHOPNET_SCRIPT_NAME "ch"
283 #define CHOP_SCRIPT_NAME "chop"
284 #define ROP_SCRIPT_NAME "out"
285 #define SHOP_SCRIPT_NAME "shop"
286 #define COP_SCRIPT_NAME "cop"
287 #define COP2_SCRIPT_NAME "cop2"
288 #define COP2NET_SCRIPT_NAME "img"
289 #define VOP_SCRIPT_NAME "vop"
290 #define VOPNET_SCRIPT_NAME "vex"
291 #define DOP_SCRIPT_NAME "dop"
292 #define TOP_SCRIPT_NAME "top"
293 #define TOPNET_SCRIPT_NAME "tasks"
294 #define LOP_SCRIPT_NAME "lop"
297 #define MGR_SCRIPT_NAME "mgr"
298 #define DIR_SCRIPT_NAME "dir"
299 #define MAT_SCRIPT_NAME "mat"
300 #define DATA_SCRIPT_NAME "data"
303 #define INVALID_OPTYPE_NAME "NODE"
304 #define OBJ_OPTYPE_NAME "OBJ"
305 #define SOP_OPTYPE_NAME "SOP"
306 #define CHOPNET_OPTYPE_NAME "CHOPNET"
307 #define CHOP_OPTYPE_NAME "CHOP"
308 #define ROP_OPTYPE_NAME "ROP"
309 #define SHOP_OPTYPE_NAME "SHOP"
310 #define COP_OPTYPE_NAME "COP"
311 #define COP2_OPTYPE_NAME "COP2"
312 #define COP2NET_OPTYPE_NAME "IMG"
313 #define VOP_OPTYPE_NAME "VOP"
314 #define VOPNET_OPTYPE_NAME "VOPNET"
315 #define DOP_OPTYPE_NAME "DOP"
316 #define TOP_OPTYPE_NAME "TOP"
317 #define TOPNET_OPTYPE_NAME "TOPNET"
318 #define LOP_OPTYPE_NAME "LOP"
324 #define MGR_OPTYPE_NAME "MGR"
325 #define DIR_OPTYPE_NAME "DIR"
326 #define DATA_OPTYPE_NAME "DATA"
343 #define OP_NAME_INPUT "input"
344 #define OP_NAME_OUTPUT "output"
345 #define OP_NAME_SUBOUTPUT "suboutput"
346 #define OP_NAME_SUBINPUT "subinput"
347 #define OP_NAME_COLLECT "collect"
351 #define SHOP_MANAGEMENT_OPTYPE "shopnet"
352 #define COP_MANAGEMENT_OPTYPE "copnet"
353 #define COP_FILTERLIST_OPTYPE "copnet_filterlist"
354 #define COP2_MANAGEMENT_OPTYPE "cop2net"
355 #define ROP_MANAGEMENT_OPTYPE "ropnet"
356 #define CHOP_MANAGEMENT_OPTYPE "chopnet"
357 #define SOP_MANAGEMENT_OPTYPE "sopnet"
358 #define OBJ_MANAGEMENT_OPTYPE "objnet"
359 #define VOP_MANAGEMENT_OPTYPE "vopnet"
360 #define DOP_MANAGEMENT_OPTYPE "dopnet"
361 #define TOP_MANAGEMENT_OPTYPE "topnet"
362 #define LOP_MANAGEMENT_OPTYPE "lopnet"
382 (
bool values_only_ =
false
383 ,
bool defaultstoo_ =
true
384 ,
bool docreate_ =
true
385 ,
bool doparms_ =
true
386 ,
bool doflags_ =
true
387 ,
bool dowires_ =
true
388 ,
bool dowiresout_ =
true
389 ,
bool frames_ =
false
390 ,
bool dogeneral_ =
false
391 ,
bool dochblock_ =
true
392 ,
bool dospareparms_ =
true
393 ,
bool omit_version_info_ =
false
395 : values_only(values_only_)
396 , defaultstoo(defaultstoo_)
397 , docreate(docreate_)
401 , dowiresout(dowiresout_)
403 , dogeneral(dogeneral_)
404 , dochblock(dochblock_)
405 , dospareparms(dospareparms_)
406 , omit_version_info(omit_version_info_)
441 return (myValue == v.
myValue &&
468 #define INSTANTIATE_FINDNODE_FUNCTIONS(PREFIX) \
469 PREFIX##_Node *find##PREFIX##Node(const char *path) const \
473 node = findNode(path); \
474 if (node) return node->castTo##PREFIX##Node(); \
477 #define INSTANTIATE_CASTNODE_FUNCTIONS(PREFIX) \
478 PREFIX##_Node *castTo##PREFIX##Node() const \
483 { const void *this_local = this; \
484 UT_ASSERT(this_local); \
485 if (!this_local) return 0; } \
486 if (getOpTypeID() == PREFIX##_OPTYPE_ID) \
488 return (PREFIX##_Node *) this; \
494 #define INSTANTIATE_FOR_ALL_NODE_TYPES(MACRO_FUNC) \
497 MACRO_FUNC(CHOPNET) \
503 MACRO_FUNC(COP2NET) \
524 static const OP_TypeInfo *getOpInfoFromTableName(
const char *name);
525 static const OP_TypeInfo *getOpInfoFromScriptDir(
const char *dir);
530 {
return myRootCompiledParent; }
539 bool getIsContainedBy(
const OP_Node *testparent)
const;
554 virtual const char *getOpType()
const;
613 const
UT_String &getDelScript()
const {
return myDelScript; }
617 bool setDelScript(
const char *str);
621 const UT_String &getComment()
const {
return myComment; }
622 bool setComment(
const char *str);
635 bool getColorDefault()
const;
636 bool setColorDefault(
bool usedefault);
650 fpreal getX()
const override {
return myPosX; }
651 fpreal getY()
const override {
return myPosY; }
656 void pickRequest(
int shift);
660 bool allow_rel_paths =
false,
661 bool ignore_node_names_env_var =
false);
662 static bool isValidOpName(
const char *
s,
663 bool allow_rel_paths =
false,
664 bool ignore_node_names_env_var =
false)
668 ignore_node_names_env_var);
671 bool allow_rel_paths =
false,
672 bool ignore_node_names_env_var =
false)
674 return isValidOpName(str.
c_str(),
676 ignore_node_names_env_var);
678 static bool isValidOpName(
const UT_String &str,
679 bool allow_rel_paths =
false,
680 bool ignore_node_names_env_var =
false)
682 return isValidOpName(str.
c_str(),
684 ignore_node_names_env_var);
687 static bool forceValidOpName(
UT_String &name);
692 int findString(
const char *str,
bool fullword,
693 bool usewildcards)
const override;
695 bool fullword)
override;
702 bool notifyVarChange(
707 virtual int getNchildren()
const;
708 virtual OP_Node *getChild(
const char *name,
int *hint=
nullptr)
const;
711 bool include_hidden=
false)
const;
716 const char *optype =
nullptr,
717 int casesensitive = 0)
const;
718 virtual OP_Node *matchChildBackwards(
721 const char *optype =
nullptr,
722 int casesensitive = 0)
const;
733 virtual void getPotentialChildErrorNodes(
OP_NodeList &nodes)
const;
736 static OP_Node *lookupNode(
int unique_id,
bool include_proxy=
false)
738 if( unique_id >= 0 && unique_id <= theUniqueId
739 && theUniqueNodes[unique_id] )
741 if( include_proxy || !theUniqueNodes[unique_id]
743 return theUniqueNodes[unique_id];
747 static int getNumUniqueIds()
748 {
return theUniqueId + 1; }
752 int getUniqueId()
const
753 {
return myUniqueId; }
755 {
return myUniqueId; }
760 bool expandGroupPattern(
const char *
pattern,
762 bool expand_to_full_paths =
false);
766 bool patternContainsBundle(
const char *
pattern,
768 bool patternContainsGroup(
const char *
pattern,
771 virtual int isManager()
const;
775 virtual int isManagementNode()
const;
780 bool isEffectivelyAManagementNode()
const;
783 virtual bool isMaterialManager()
const;
793 virtual int isSubNetwork(
bool includemanagementops)
const;
794 virtual int isNetwork()
const;
795 virtual int isInSubNetwork()
const;
797 bool isProxyRefNode()
const
798 {
return myIsProxyRefNode; }
799 void setProxyRefNode(
bool f)
800 { myIsProxyRefNode =
f; }
803 virtual bool isOutputNode()
const;
810 int isNetworkWithKids()
const;
812 virtual int isVex()
const;
818 OP_Bundle * getParmBundle(
const char* parm_name,
int vector_index,
821 void markBundleRefsAsUnused();
822 void cleanUnusedBundleRefs();
823 void cleanAllBundleRefs();
825 static void getValueAsBundlePaths(
fpreal t,
830 static void getValueAsBundlePaths(
fpreal t,
841 virtual bool bundleChanged(
const OP_Bundle *bundle);
844 void touchBundleParm(
const char *name);
845 void touchBundleParm(
int parm_index);
848 virtual int getDandROpsEqual() {
return 1; }
851 virtual int updateDandROpsEqual(
int = 1) {
return 1; }
857 bool isInputAncestor(
const OP_Node *parent,
858 bool check_extra=
true)
const;
863 bool isParentAncestor(
const OP_Node *parent)
const;
876 virtual void getNodeSpecificInfoText(
OP_Context &context,
895 OP_Node *findNode(
const char *
path, OTLSyncMode syncmode = OTLSYNC_DOSYNC)
const;
907 virtual OP_PostIt *findPostItNote(
const char *const_path)
909 virtual OP_Dot *findDot(
const char *const_path)
923 SOP_Node *getSOPNode(
const char *
path,
int addextra = 0,
924 bool *got_by_flag=
nullptr)
const;
927 COP_Node *getCOPNode(
const char *
path,
int addextra = 0)
const;
928 COP2_Node *getCOP2Node(
const char *
path,
int addextra = 0)
const;
932 DOP_Node *getDOPNode(
const char *
path,
int addextra = 0)
const;
933 ROP_Node *getROPNode(
const char *
path,
int addextra = 0)
const;
936 bool *got_by_flag=
nullptr)
const;
938 TOP_Node *getTOPNode(
const char *
path,
int addextra = 0)
const;
940 LOP_Node *getLOPNode(
const char *
path,
int addextra = 0)
const;
947 virtual void getPathWithSubnet(
UT_String &str)
const;
955 void completePath(
const char *prefixpath,
958 virtual CH_Channel *getTrackChannel(
const char *name);
961 const char *trackname,
975 void globNodes(
const char *pat,
UT_String *expand,
978 const char *prefix =
" ");
981 void globChannels(
const char *,
UT_String &expand,
983 const char *prefix =
" ")
const;
985 void globChannels(
const char *
pattern,
994 void globChanRefs(
const char *
pattern,
998 bool use_multi_match =
true);
1004 int calc_value = 1);
1012 bool animated_only);
1015 void globNodeChannels(
const char *
pattern,
1018 int *parm_start =
nullptr,
1027 void globNodeChanRefs(
const char *
pattern,
1030 int *parm_start =
nullptr,
1033 bool use_multi_match =
true
1039 virtual void globNetworkBoxes(
const char *pat,
UT_String *expand,
1042 const char *prefix =
" ");
1044 virtual void globPostIts(
const char *pat,
UT_String *expand,
1047 const char *prefix =
" ");
1055 void *
data =
nullptr)
override;
1059 virtual bool opShouldHandleChange(
OP_EventType reason);
1064 virtual void referencedParmChanged(
int pi);
1070 virtual void forceRecook(
bool evensmartcache =
true);
1076 virtual void reloadExternalFiles();
1082 virtual unsigned needToCook(
OP_Context &context,
bool queryonly=
false);
1098 template <
typename F>
1099 void cookLockedExecute(
const F &functor);
1103 OP_CookLock & getCookLock() {
return myCookLock; }
1110 void bumpVersionParm()
1112 dataMicroNode().bumpModVersion();
1113 if (hasIndepParmListMicroNode())
1114 parmListMicroNode().bumpModVersion();
1116 int cookParmsModified()
const
1117 {
return parmListMicroNodeConst()
1118 .isModVersionOutdated(); }
1125 virtual int getDataClass()
const;
1134 virtual OP_DataType getCookedDataType()
const = 0;
1135 virtual void *getCookedData(
const OP_Context &);
1136 virtual void deleteCookedData() = 0;
1138 virtual int saveCookedData(std::ostream &os,
OP_Context &,
1141 const char *
path =
nullptr);
1151 virtual int getRelativeCaptureTransform(
OP_Node &to,
1154 virtual int getRelativeCaptureTransform(
OP_Node &to,
1159 static bool getCameraInfoAndRelativeTransform(
1162 const OP_Node *paths_relative_to_node,
1163 bool get_inverse_xform,
1174 virtual bool getWorldTransformFromData(
const UT_StringRef &
id,
1176 bool get_inverse_xform,
1187 TRANSFORM_PRECONSTRAINT,
1188 TRANSFORM_PARENTBONE,
1191 TRANSFORM_PRERAWPARM,
1204 bool ok = getWorldTransform(m, ctx);
1211 bool ok = getIWorldTransform(m, ctx);
1218 bool ok = getTransform(mode, m, ctx);
1225 void addTransformError(
const OP_Node &node,
1226 const char *
label =
nullptr)
const;
1234 virtual const char *getInternalOpTable()
const
1239 virtual const char *inputLabel(
OP_InputIdx idx)
const;
1240 virtual const char *outputLabel(
OP_OutputIdx idx)
const;
1251 virtual const char *inputConnectorLabel(
OP_InputIdx idx);
1258 virtual int getAuxInput()
const;
1272 bool getLock()
const {
return flags().isLocked(); }
1274 bool getSoftLock()
const {
return flags().getSoftLocked();}
1275 void setSoftLock(
bool on_off)
1281 bool getHardLock()
const {
return flags().getHardLocked();}
1282 void setHardLock(
bool on_off)
1290 virtual OP_LockTypes setModelLock(OP_LockTypes
state,
1291 void *modeler =
nullptr,
1292 bool allow_softlock_promotion =
false,
1301 bool relaxedlockcheck =
false,
1302 const OP_Node *input_node =
nullptr)
const;
1307 bool setUnload(
bool on_off);
1308 bool getUnload()
const;
1311 virtual bool isLoaded()
const {
return true; }
1316 virtual bool unloadData();
1319 void takeActivateFlag(
uchar flag,
bool enable=
true,
1320 bool send_flag_event=
true);
1321 void takeDeactivateFlag(
uchar flag)
1322 { takeActivateFlag(flag,
false); }
1323 bool takeIsActiveFlag(
uchar flag)
const;
1324 void setHasTakeData(
bool onoff);
1326 bool canAccessFlag(
unsigned mask,
uchar flag)
const;
1334 bool propagate_parent_event =
true)
override;
1340 bool setEditPicked(
bool on_off,
1341 bool propagate_parent_event =
true);
1346 void setAutoscope(
bool on_off) { myAutoscope = on_off; }
1347 bool isAutoscope() {
return myAutoscope; }
1349 bool setCurrent(
bool on_off);
1350 bool setExpose(
bool on_off);
1351 bool setBypass(
bool on_off);
1352 bool setTemplate(
bool on_off);
1353 bool setFootprint(
bool on_off);
1354 bool setXray(
bool on_off);
1355 bool setDisplay(
bool on_off);
1356 bool setRender(
bool on_off);
1357 bool setHighlight(
bool on_off);
1358 bool setModified(
bool on_off);
1359 bool setSaveBypass(
bool on_off);
1360 bool setSaveData(
bool on_off);
1362 virtual bool setPickable(
bool on_off)
1364 virtual bool setAudio(
bool on_off)
1366 virtual bool setExport(
bool on_off)
1368 virtual bool setDebug(
bool on_off)
1370 virtual bool setDisplayOrigin(
bool on_off_unchanged)
1376 void userSetTemplate(
bool onoff);
1381 void userSetSelectableTemplate(
bool onoff);
1385 virtual void setFlag(
char tag,
int8 val);
1386 virtual int8 getFlag(
char tag)
const;
1389 {
return flags().getPicked(); }
1390 virtual bool getEditPicked()
const
1392 bool getCurrent()
const;
1393 bool getDisplay()
const {
return flags().getDisplay(); }
1395 bool getDisplay3D();
1396 bool getRender()
const {
return flags().getRender(); }
1397 bool getHighlight()
const {
return flags().getHighlight();}
1398 bool getBypass()
const {
return flags().getBypass(); }
1399 bool getTemplate()
const {
return flags().getTemplate(); }
1400 bool getFootprint()
const {
return flags().getFootprint(); }
1401 bool getXray()
const {
return flags().getXray(); }
1402 bool getExpose()
const {
return flags().getExpose(); }
1403 bool getModified()
const {
return flags().getModified(); }
1404 bool getSaveBypass()
const{
return flags().getSaveBypass(); }
1405 bool getSaveData()
const {
return flags().getSaveData(); }
1407 {
return flags().getHasTakeData(); }
1408 virtual bool getPickable()
1410 virtual bool getAudio()
const
1412 virtual bool getExport()
const
1414 virtual bool getDebug()
const
1416 virtual bool getDisplayOrigin()
const
1419 {
return getExpose(); }
1421 { setExpose(expose); }
1424 bool getDisplayDescriptiveName()
const
1425 {
return flags().getDisplayDescriptiveName();}
1426 bool setDisplayDescriptiveName(
bool state);
1427 bool getDisplayComment()
const
1429 bool setDisplayComment(
bool state);
1430 int8 getOutputForView()
const
1431 {
return flags().getOutputForView(); }
1432 int8 setOutputForView(
int8 output);
1434 OP_Node *getPickableSelfOrParent();
1439 bool setCompress(
bool on_off);
1440 bool getCompress()
const;
1444 void setCurrentAndPicked();
1452 virtual bool setVisible(
bool onoff);
1453 virtual bool getVisible()
const;
1460 virtual void getSaveFlagsString(
UT_String &cmd,
1462 bool save_to_hip)
const;
1463 virtual void getPreParmSaveFlagsString(
UT_String &cmd )
const;
1464 virtual void getPostParmSaveFlagsString(
UT_String &cmd )
const;
1469 {
return myEventValue.hasOpInterest(data, m); }
1474 { myEventValue.addOpInterest(data, m); }
1478 { myEventValue.removeOpInterest(data, m); }
1480 int isBeingDeleted()
const
1481 {
return myBeingDeleted; }
1482 void setNodeBeingDeleted(
int beingdeleted);
1486 bool setInhibitInputConsolidation(
bool value);
1499 virtual unsigned minInputs()
const;
1502 virtual unsigned maxInputs()
const;
1506 virtual unsigned getNumVisibleInputs()
const;
1516 virtual unsigned orderedInputs()
const;
1520 virtual unsigned maxOutputs()
const;
1524 virtual exint maxSpareOutputs()
const;
1528 virtual unsigned getNumVisibleOutputs()
const;
1531 bool hasUnorderedInputs()
const;
1541 virtual unsigned nInputs()
const;
1548 unsigned nConnectedInputs(
bool check_subnet_inside=
true)
const;
1550 unsigned getActiveInputIndex()
const
1551 {
return myActiveInputIndex; }
1552 void setActiveInputIndex(
unsigned idx);
1573 virtual void getParallelInputs(
OP_Context &context,
1588 virtual OP_ERROR setInputReference(
1639 void consolidateInputs();
1640 virtual void clearUnreferencedInputs();
1641 virtual bool allowConsolidatingInput(
OP_InputIdx idx);
1653 virtual int doDeleteRewire()
const {
return 1; }
1658 bool forcesubnet =
false);
1671 virtual int getInputEditorInputs();
1673 virtual bool allowInputEditorInputParm();
1675 virtual bool allowInputEditorInputDelete();
1682 dataMicroNodeConst()
const
1683 {
return myDataMicroNode; }
1687 dataMicroNodeConst());
1693 parmListMicroNodeConst()
const
1694 {
return dataMicroNodeConst(); }
1698 parmListMicroNodeConst());
1701 bool hasIndepParmListMicroNode()
const
1703 return (&parmListMicroNodeConst()
1704 != &dataMicroNodeConst());
1709 {
return myFlagMicroNode; }
1713 {
return myIndividualFlagMicroNodes[flag]; }
1728 if (!myEventMicroNodes)
1730 return bool(myEventMicroNodes[e]);
1736 virtual void getOwnedMicroNodes(
1741 void propagateDirtyMicroNode(
1745 bool send_root_event);
1754 void addExtraInput(
OP_Node &
op,
int parm_i,
int vec_i);
1774 static void addExtraInputToEvalChannel(
1778 addExtraInputToEvalChannel(
1782 static void addExtraInputToEvalChannel(
1786 addExtraInputToEvalChannel(
1790 static void addExtraInputToEvalChannel(
1795 target = getEvalChannelMicroNode(thread);
1799 static void addExtraInputToEvalChannel(
1804 target = getEvalChannelMicroNode(thread);
1814 static void addExtraInput(
1817 static void addExtraInput(
1820 static void addExtraInput(
1825 static void addMultiparmInterests(
const OP_InterestRef &target_ref,
1832 void getExtraInputNodes(
1834 bool remove_duplicates =
true,
1835 bool data_interest =
true,
1836 bool parm_interest =
true,
1837 bool flag_interest =
true,
1838 bool include_parmlist =
true,
1839 bool follow_simulation_inputs =
false)
const;
1840 void getExtraOutputNodes(
1842 bool remove_duplicates =
true,
1843 bool data_interest =
true,
1844 bool parm_interest =
true,
1845 bool flag_interest =
true)
const;
1847 int getNumExtraInputs()
const;
1849 void dumpExtraInputs(
1852 int indent_level = 0)
const;
1857 virtual bool buildDefaultCopContext(
OP_Context &context,
1862 static void addExprOpDependency(
const char *arg_str,
1865 static void addExprOpDependency1From2(
const char *arg_str1,
1866 const char *arg_str2,
1869 static void addExprOpParmDependency(
const char *arg_str,
1873 static void changeExprOpRef(
const char *arg_str,
1875 const char *new_fullpath,
1876 const char *old_fullpath,
1877 const char *old_cwd);
1879 static void changeExprOpRef1From2(
const char *arg_str1,
1880 const char *arg_str2,
1883 const char *new_fullpath,
1884 const char *old_fullpath,
1885 const char *old_cwd);
1887 static void changeExprOpParmRef(
const char *arg_str,
1889 const char *new_fullpath,
1890 const char *old_fullpath,
1891 const char *old_cwd,
1892 const char *chan_name,
1893 const char *old_chan_name);
1895 void addGenericOpNameReference(
const UT_String &oppath );
1896 void addGenericOpNameReference(
const PRM_RefId &ref_id,
1898 void addGenericOpInputReference(
const PRM_RefId &ref_id,
1901 static void moveAndUpdateDependencies(
1907 bool getParmBaseNodePath(
1920 void decrementOpReference(
int node_id);
1922 virtual void dumpDependencies(std::ostream &os);
1923 void dumpOpDependents(
OP_Node *
ref,
int brief,
1926 &getOpDependents()
const {
return myOpDependents; }
1930 int countReferences(
int op_id);
1935 bool recurse)
const;
1942 bool include_descendants)
const;
1947 bool include_descendants)
const;
1954 bool include_descendants)
const;
1957 void getParmsThatReference(
const char *channame,
1961 virtual void inputConnectChanged(
OP_InputIdx which);
1965 unsigned nOutputEntries()
const;
1981 exint nOutputItems2(
1990 bool hasAnyOutputNodes(
1991 bool through_dots =
true,
1998 void getOutputNodes(
2000 bool into_subnets =
false,
2001 bool through_dots =
true,
2004 void getOutputNodes2(
2006 bool into_subnets =
false,
2007 bool through_dots =
true,
2014 bool through_dots =
true,
2031 virtual void fillInfoTreeNodeSpecific(
UT_InfoTree &tree,
2037 virtual bool fillInfoTreeChildSpecific(
UT_InfoTree &tree,
2058 virtual void unlockInputs();
2063 int getCookCount()
const {
return myCookCount; }
2064 void triggerOutputChanged();
2066 void triggerUIChanged(
2070 virtual OP_InputIdx cookedInputIndex()
const {
return -1; }
2085 virtual OP_Node *getPassThroughNode(
2087 bool mark_used =
false);
2089 bool setMinimumCacheSize(
int min_size);
2092 {
return dataMicroNodeConst().modVersion(); }
2096 virtual bool handleTimeChange(
fpreal ) {
return false; }
2100 bool isTimeDependent(
const OP_Context &context);
2104 virtual bool isDiveable()
const;
2123 virtual void getExtraNodesForCopyOrDelete(
OP_NodeList &extras)
const;
2129 virtual bool runCreateScript();
2132 void updateParmsToMatchCurrentUnits();
2136 bool getDelaySyncOTL()
const
2137 {
return myDelaySyncOTL; }
2140 void setDelaySyncOTL(
bool isdelayed);
2143 bool shouldDelaySyncOTL()
const;
2146 void syncDelayedOTL()
2148 if (!getDelaySyncOTL())
return;
2149 internalSyncDelayedOTL();
2154 virtual void matchOTLDefinition();
2157 virtual void unmatchOTLDefinition();
2161 virtual void handleOTLIndexFileCleared();
2166 {
return mySyncErrors; }
2169 {
return mySyncErrorLevel; }
2175 bool isAnyAncestorBeingSynced()
const;
2178 int getMatchesOTLDefinition()
const;
2181 static void propagateMatchOTLDefinitionToAncestors(
OP_Node *node,
2186 int getCanDeviateFromOTLDefinition()
const;
2187 void setAllChildAssetPermissions(
int permission);
2190 void computeAllChildAssetPermissions();
2193 bool getIsEditableAssetSubNode()
const;
2196 void turnOffAllChildExports();
2199 bool haveLicenseToAccessContents(
2200 OP_Node* opt_specific_child =
nullptr)
const;
2201 bool haveLicenseToAccessParentContents()
const;
2202 bool haveAncestorWithoutFullLicense(
bool ignore_self)
const;
2205 OP_Node *getFirstExecLicenseOnlyAncestor(
2206 bool ignore_self =
true)
const;
2208 OP_Node *getLastExecLicenseOnlyAncestor(
2209 bool ignore_self =
true)
const;
2211 bool isCompiled()
const;
2214 void saveWires(std::ostream &os,
const char *name,
2216 void saveOutputWires(std::ostream &os,
const char *name,
2218 virtual void saveIntrinsicCommand(std::ostream &os,
2222 virtual OP_ERROR saveCommand(std::ostream &os,
2226 const char *netboxname,
2243 void saveParameterFlags(std::ostream &os,
const char *name,
2244 const char *command,
2245 bool (
PRM_Parm::*flag_method)(
int)
const,
2246 bool defaultstoo,
bool reverse,
2249 void saveUserDataCommand(
2250 std::ostream &os,
const char *node_name,
2251 bool omit_version =
false);
2259 virtual RampError rampCommand(
bool remove,
fpreal pos,
float rgba[4]);
2260 RampError rampCommand(
bool remove,
fpreal pos,
float rgba[4],
2266 const char *
path=
nullptr);
2268 const char *name =
nullptr,
int command = 0);
2279 {
return myUserData; }
2281 OP_ERROR saveUserData(std::ostream &os,
const char *
path);
2282 void clearUserData(
bool save_undo);
2286 static const char *internalUserDataPrefix() {
return "sidefx::"; }
2297 template<
typename T>
2310 bool hasBlindData(
const char *key)
const;
2314 bool deleteBlindData(
const char *key);
2321 OP_ERROR saveDataBlocksPacket(std::ostream &os,
2322 const char *path_prefix,
2325 bool clearDataBlocks();
2331 virtual int deleteNodeData(
void *);
2332 void propagateNodeDataDeleted();
2339 void setCachedPythonObject(
2342 bool deleteCachedPythonObject(
const UT_StringRef &key);
2343 void clearCachedPythonObjects();
2347 {
return myCachedPythonObjects; }
2350 const char *
path =
nullptr);
2352 void saveOverrides(std::ostream &os);
2353 void saveOverrides(std::ostream &os,
OP_Node *root,
2356 void saveChildOverrides(std::ostream &os,
OP_Node *root,
2362 const char *parm_name,
2363 int vec_idx)
override;
2365 int vec_idx)
const override;
2368 virtual void removeOverrideDestination(
OP_Node * ) {}
2369 virtual void removeOverrideDestination(
OP_Node * ,
2375 std::ostream *err)
const override;
2381 OP_ERROR executeHscriptScript(
const char *script,
2383 OP_ERROR executePythonScript(
const char *script,
2386 void addPythonNodeError(
const PY_Result &py_result);
2388 void saveInputs(std::ostream &os,
bool compile_basic);
2391 const char *
path =
nullptr,
2392 bool named =
false);
2393 void saveNamedInputs(std::ostream &os,
bool compile_basic);
2394 void saveNamedOutputs(std::ostream &os);
2395 bool loadNamedOutputs(
2397 const char *
path =
nullptr);
2408 void saveEditableInputData(std::ostream &os)
const;
2430 virtual void saveDialogScriptExtraInfo(std::ostream &os);
2446 int &op_id,
fpreal &op_time,
2448 static int findOpFramePair(
const char *
path,
int &op_id,
2452 static void buildXformOrder(
int trs,
int xyz,
2455 static const UT_XformOrder& buildXformOrder(
int trs,
int xyz );
2478 fpreal pivot_rz,
bool inverse =
false);
2486 fpreal pivot_rz,
bool inverse =
false);
2488 static void buildXform(
int trs,
int xyz,
2489 float tx,
float ty,
float tz,
2490 float rx,
float ry,
float rz,
2491 float sx,
float sy,
float sz,
2492 float px,
float py,
float pz,
2494 static void buildXform(
int trs,
int xyz,
2495 double tx,
double ty,
double tz,
2496 double rx,
double ry,
double rz,
2497 double sx,
double sy,
double sz,
2498 double px,
double py,
double pz,
2500 static void buildXform(
int trs,
int xyz,
2501 float tx,
float ty,
float tz,
2502 float rx,
float ry,
float rz,
2503 float sx,
float sy,
float sz,
2506 static void buildXform(
int trs,
int xyz,
2507 double tx,
double ty,
double tz,
2508 double rx,
double ry,
double rz,
2509 double sx,
double sy,
double sz,
2512 static void buildXform(
int trs,
int xyz,
2513 float tx,
float ty,
float tz,
2514 float rx,
float ry,
float rz,
2515 float sx,
float sy,
float sz,
2516 float s_xy,
float s_xz,
float s_yz,
2517 float px,
float py,
float pz,
2519 static void buildXform(
int trs,
int xyz,
2520 double tx,
double ty,
double tz,
2521 double rx,
double ry,
double rz,
2522 double sx,
double sy,
double sz,
2523 double s_xy,
double s_xz,
double s_yz,
2524 double px,
double py,
double pz,
2526 static void buildXform(
int trs,
int xyz,
2527 float tx,
float ty,
float tz,
2528 float rx,
float ry,
float rz,
2529 float sx,
float sy,
float sz,
2530 float s_xy,
float s_xz,
float s_yz,
2533 static void buildXform(
int trs,
int xyz,
2534 double tx,
double ty,
double tz,
2535 double rx,
double ry,
double rz,
2536 double sx,
double sy,
double sz,
2537 double s_xy,
double s_xz,
double s_yz,
2540 static void buildXform(
2541 const UT_Matrix4F::FullTransformModel &
parms,
2543 static void buildXform(
2544 const UT_Matrix4D::FullTransformModel &
parms,
2546 static void buildXform(
int trs,
2547 float tx,
float ty,
float rz,
2548 float sx,
float sy,
float px,
float py,
2550 static void buildXform(
int trs,
2551 double tx,
double ty,
double rz,
2552 double sx,
double sy,
double px,
double py,
2554 static void buildXform(
int trs,
2555 float tx,
float ty,
float rz,
2556 float sx,
float sy,
float s_xy,
2559 static void buildXform(
int trs,
2560 double tx,
double ty,
double rz,
2561 double sx,
double sy,
double s_xy,
2562 double px,
double py,
2565 virtual int getTranslateParmIndex();
2569 void resolveInputReferences();
2571 static void clearAllPendingUndoFlags();
2575 void saveForUndoInput();
2586 void blockModify(
int on_off,
int propagate = 1);
2588 int isBlockModify()
const;
2589 bool isModifyWaiting()
const;
2590 virtual void propagateEndBlockModify();
2599 fpreal getLastCookTime()
const;
2601 void getLastCookTime(
UT_String &last_cook_time)
const;
2603 void getCookInfo(
UT_String &info)
const;
2610 virtual int isCookingRender()
const {
return 0; }
2611 virtual void setCookingRender(
int val);
2613 virtual void clearInterrupted()
2614 { clearInterruptedImpl(
true); }
2616 {
return flags().getInterrupted(); }
2621 void setRenameConflict()
2622 { myRenameConflict = 1; }
2623 void setRunningCreateScript(
int onoff);
2629 virtual void getInputRes(
int input,
fpreal t,
2636 int group_mask = 1);
2638 virtual int getNumInputsToHash();
2641 void clearHashCodeFlags();
2642 bool isHashCodeBuilt()
const {
return myBuiltHashCode;}
2643 void builtHashCode(
bool b =
true) { myBuiltHashCode =
b; }
2650 void setCreatorState(
const char *s)
2651 { myCreatorState.harden(s); }
2652 const UT_String &getCreatorState()
const {
return myCreatorState; }
2653 void builtExplicitly(
int yn) { myBuiltExplicitly = yn; }
2654 int wasBuiltExplicitly()
const{
return myBuiltExplicitly; }
2656 bool matchesState(
const char *
state)
const;
2664 virtual void changeParmTemplate(
PRM_Template *new_template);
2667 virtual void ensureInputsAndOutputsAreValid();
2671 void connectToInputNode(
OP_Node &inputnode,
2688 static void buildQuadricXform(
UT_Matrix4 &mat,
2689 float tx,
float ty,
float tz,
2690 float sx,
float sy,
float sz,
2692 float rx = 0.0
f,
float ry = 0.0
f,
2696 double tx,
double ty,
double tz,
2697 double sx,
double sy,
double sz,
2699 double rx = 0.0,
double ry = 0.0,
2702 static int buildOpMenu(
2706 int (*do_add)(
OP_Node *) =
nullptr,
2709 int show_subnets = 1,
2710 int expand_subnets = 1,
2711 bool recurse =
false);
2716 static void buildPreDefRulesMenu(
PRM_Name *menu,
2728 static int getNameSerialIndex();
2731 virtual void setMapping(
int idx,
int type,
2732 const char *
label =
nullptr);
2733 virtual int getMapping(
int idx,
const char *&
label)
const;
2741 bool hasComment()
const;
2742 bool hasParmsNotAtFactoryDefault()
const;
2743 bool hasAnimatedParms()
const;
2744 bool hasChopOverriddenParms()
const;
2774 TRAVERSE_DEFAULT = 0x0000,
2775 TRAVERSE_INTO_SUBNETS = 0x0001,
2776 TRAVERSE_REF_INPUTS = 0x0002,
2777 TRAVERSE_ONLY_USED_INPUTS = 0x0004,
2778 TRAVERSE_PASSTHROUGH_INPUTS = 0x0008,
2779 TRAVERSE_EXTRA_INPUTS = 0x0010,
2780 TRAVERSE_SIMULATION_INPUTS = 0x0020,
2781 TRAVERSE_COOKED_INPUT_INDEX_INPUTS = 0x0040,
2783 bool traverseInputs(
bool (*callback)(
OP_Node &,
void *),
2785 TraverseOptions opts,
2788 bool traverseInputs(
bool (*callback)(
const OP_Node &,
void*),
2790 TraverseOptions opts,
2802 bool traverseChildren(
bool (*callback)(
OP_Node &,
void*),
2804 bool recurse_into_subnets);
2808 bool isCooking(
bool include_ancestors)
const;
2812 virtual bool usesFootprint()
const {
return false; }
2814 void getExternalReferences(
2817 bool from_children_too =
true,
2818 bool collapse =
false,
2819 bool check_missing =
false,
2820 bool show_missing_only =
false);
2821 virtual bool getSaveWithVopnets();
2822 virtual void runDelScript();
2825 virtual void preDelete() { }
2829 virtual DOP_Parent *castToDOPParent() {
return nullptr; }
2830 virtual const DOP_Parent *castToDOPParent()
const {
return nullptr; }
2846 *getVopAutoCodeGenerator()
const{
return nullptr; }
2849 virtual void buildVopCodeGenerator() {}
2857 bool create_if_needed=
false)
2867 virtual int beginVopCodeGeneratorUpdate() {
return 0; }
2868 virtual void endVopCodeGeneratorUpdate(
int update_level) {}
2878 int end_parm = INT_MAX,
2879 bool use_parmvop_tag=
true
2881 int buildVexCommandWithDependencies(
OP_Node *owner,
2887 int end_parm = INT_MAX,
2888 bool use_parmvop_tag=
true
2899 static PRM_Name theVexClearParmName;
2910 virtual bool hasVexShaderParameter(
const char *parm_name);
2920 virtual bool getScriptMaterialInfo(
UT_String & mat_info,
2928 virtual const char *getHDASubType()
2933 bool setChannelAlias(
PRM_Parm &parm,
int subindex,
2934 const char *alias_name);
2936 void disconnectAllInputsOutputs(
2938 bool force_disconnect_outputs =
false);
2940 void disconnectAllInputs();
2941 void disconnectAllOutputs();
2944 virtual void notifyParmRenameDependents(
2948 void writeChannel(
CH_Channel *channel, std::ostream &os,
2949 const char *name,
bool frames);
2950 void writeAllChannels(std::ostream &os,
const char *name,
2951 bool frames,
bool dochblock,
2962 const UT_Options *options =
nullptr)
override;
2965 int64 getExtraInputMemoryUsage()
const;
2966 static void printOpMemoryUsageStats(std::ostream &os);
2971 virtual void unscopeChannels(
bool recurse);
2976 virtual void undisplayChannels(
bool recurse);
2981 virtual void unpinChannels(
bool recurse);
2986 virtual void setChannelScope(
const char *
pattern,
3015 bool relative_references =
true)
override;
3017 void clearVersionUserData();
3018 void updateVersionUserData();
3028 void syncNodeVersionIfNeeded(
3030 const char *from_version =
nullptr,
3031 bool update_node_version =
false);
3037 const char *old_version,
3038 const char *current_version,
3039 bool *node_deleted)
override;
3047 bool setGlobalFloatParam(
const char *
param,
3050 bool setGlobalStringParam(
const char *
param,
3051 const char *strvalue,
3056 void beginPropagateModification();
3057 void endPropagateModification();
3060 virtual void getActiveOperatorsDefinedByOTL(
3067 static bool getDoingBulkNotification();
3068 static bool isDirectorDoingBulkNotification();
3073 virtual bool hasDifferentMultiInputs()
const;
3076 virtual bool canCreateNewOpType()
const;
3077 static bool createNewOpType
3081 const char *type_label=
nullptr,
3082 const char *otl_file=
nullptr,
3083 const char *meta_source=
nullptr,
3084 const char *comment=
nullptr,
3086 const char *new_name=
nullptr,
3087 int minimum_inputs=-1,
3088 int maximum_inputs=-1,
3089 bool ignore_external_references=
false,
3090 bool compress_contents=
false,
3092 int *new_node_id=
nullptr,
3093 bool compile_contents =
false,
3094 bool change_node_type =
true,
3095 bool create_backup =
true);
3097 virtual UT_String *getMaterialIconFilename() {
return nullptr; }
3098 virtual void setMaterialIconFilename(
const char * ) {}
3100 virtual bool getMaterialIconAllowRegenerateFlag() {
return true; }
3101 virtual void setMaterialIconAllowRegenerateFlag(
bool) {}
3108 static void startBulkNotifications(
3111 static void endBulkNotifications(
3118 virtual bool willAutoconvertInputType(
OP_InputIdx input_idx);
3124 virtual bool getIsInputVisibleDefault(
OP_InputIdx idx);
3128 bool verifyTemplatesWithParameters()
const;
3133 OP_Input *getNamedInputReferenceConst(
3137 bool mark_used=
false)
const;
3159 bool getUniqueInputNameConst(
3164 bool getUniqueOutputNameConst(
3172 virtual OP_ERROR setNamedIndirectInput(
3175 virtual OP_ERROR setNamedInputReference(
3177 const char *
label,
int,
3192 virtual void onCreated() { }
3194 virtual bool isOrderedInput(
const OP_ConnectorId& input_name)
const;
3202 virtual bool willAutoconvertNamedInputType(
3211 unsigned getInputsArraySize()
3212 {
return myInputs.entries(); }
3215 {
return (getInputsArraySize() > idx) ? 1 : 0; }
3223 bool setLocalVarActive(
bool f)
3225 bool old = myLocalVarActive;
3226 myLocalVarActive =
f;
3231 bool isLocalVarActive()
const
3232 {
return myLocalVarActive; }
3239 void recomputeCompiledHash();
3243 void clearCompiledHash()
3249 { sendEvent(type,
data); }
3251 virtual bool scopedChannelsDirty();
3255 virtual bool getActiveLayerContribution(
const UT_String &track_name,
3261 virtual bool resolveExport(
const PRM_Parm* p,
int subindex,
3267 virtual bool addOrMoveVisualizerToOutput(
int outputidx)
3274 int vec_idx)
const override;
3276 OP_Bundle * getParmBundle(
const char* parm_name,
int vector_index,
3278 const char *
filter,
bool subnet_inclusion);
3282 static const UT_Color &getGlobalDefaultColor();
3288 static fpreal getFlagWidth();
3290 static fpreal getNodeHeight();
3293 static fpreal getNodeButtonWidth();
3295 static fpreal getConnectorHeight();
3302 static bool canDestroyNodes(
OP_Network *src_net,
3316 virtual void getDefaultState(
UT_String &default_state_name);
3336 void clearInputContextOptionDepIfSafe(
3341 virtual bool hasTransformTracks()
const {
return false; }
3354 void getOriginalOperatorTableAndName(
UT_WorkBuffer &name)
const;
3355 void getOriginalOperatorTableAndName(
UT_String &name)
const;
3375 void resolveUnresolvedLoadedInputs();
3379 void finishedLoadingParentNetwork();
3383 static void bumpNameSerialIndex();
3387 void beginScriptBlockingDel()
3388 { myScriptsBlockingDelCount += 1; }
3389 void endScriptBlockingDel()
3390 { myScriptsBlockingDelCount -= 1; }
3394 { myLegacyConnectingInputIndex =
index; }
3398 virtual void clearAndDestroy();
3401 virtual void clearCache();
3403 void clearInterruptedImpl(
bool allow_recook);
3418 virtual void doOverridePreCook() { }
3419 virtual void doOverridePostCook() { }
3424 int getSourceCount()
const;
3425 virtual int bumpSourceCount(
int d);
3432 virtual OP_ERROR saveIntrinsic(std::ostream &os,
3435 const char *path_prefix =
"",
3437 OP_ERROR saveUserDataPacket(std::ostream &os,
3438 const char *path_prefix,
3441 bool loadIntrinsicParentUneditable(
3443 const char *
path =
nullptr);
3446 const char *
path =
nullptr);
3447 virtual bool loadPacket(
UT_IStream &is,
short class_id,
3448 short sig,
const char *
path=
nullptr);
3449 virtual bool loadPacket(
UT_IStream &is,
const char *token,
3450 const char *
path=
nullptr);
3453 const char *
path =
nullptr);
3460 const char *
path =
nullptr);
3463 virtual void loadStart();
3464 virtual void loadFinished();
3468 void loadContentsSection();
3475 void setMatchesOTLDefinition(
int matches);
3477 virtual const char *getFileExtension(
int binary)
const = 0;
3478 virtual const char *getDataFileExtension(
int binary)
const;
3494 virtual void checkTimeDependencies(
int do_parms=1,
3500 virtual void checkContextOptionDependencies(
int do_parms);
3507 int haveSeenDataModification(
exint modification_id);
3517 virtual int propagateModification(
OP_Node *by_whom,
3524 OP_Cache * getCookCache() {
return &myCache; }
3526 static void cmd_locate(
CMD_Args &);
3528 virtual void saveFlagsForUndo();
3529 void saveForUndoLayout();
3531 static void saveForUndoDelete(
OP_NodeList &nodes);
3534 void clearDependency();
3547 bool dirtyForTimeChange(
fpreal t)
3549 if (isCookedTime(t))
3563 virtual void cloneFromProxyRefNode(
OP_Network *proxy );
3568 bool hasOpDependents()
3569 {
return !myOpDependents.isEmpty(); }
3570 virtual int hasProxyRefNodes()
const
3572 virtual void moveProxyRefNodes(
OP_Network * ) { }
3573 void clearOpReferences();
3574 virtual void rebuildOpDependents(
bool proxy_only );
3577 virtual int removeOpDependent(
3580 virtual int removeOpDependent(
3594 virtual void moveDependencies(
OP_Node *from_node );
3600 void notifyRenameDependents(
const UT_String &full_from );
3601 virtual void notifyRenameDependents(
const UT_String &full_from,
3608 void notifyRenameReferences(
const UT_String &full_from );
3609 virtual void notifyRenameReferences(
const UT_String &full_from,
3613 virtual void handleOpDependency(
int referenced_op_id,
3617 const char *old_fullpath,
3618 const char *old_cwd,
3619 const char *old_chan_name );
3620 virtual void buildParmDependency(
int parm_index );
3622 void addOpNameReference(
3626 void addChannelNameReference(
3638 void removeOpReference(
3641 void removeOpReference(
3660 bool changeOpPathRef(
UT_String &value_str,
3661 const char *new_fullpath,
3662 const char *old_fullpath,
3663 const char *old_cwd,
3664 const char *new_cwd );
3668 static bool getStringParmOpPath(
3671 void handleStringParmOpPathDependency(
3672 int parm_index,
int vi,
3673 const char *new_fullpath,
3674 const char *old_fullpath,
const char *old_cwd );
3677 void notifyNodeDeletion();
3681 virtual void nodeDeleted(
OP_Node *op,
int propagate=1);
3683 void startCookTimer(
const OP_Context &context);
3684 void stopCookTimer(
const OP_Context &context);
3686 virtual const char *getCookTimerLabel(
const OP_Context &context)
const;
3702 virtual bool isInputConnectedInsideSubnet(
3704 virtual bool isNamedInputConnectedInsideSubnet(
3708 virtual void nodeUnlocked() { ; }
3711 virtual void setUniqueId(
int id);
3712 void changeOpDependentUniqueId(
int old_id,
int new_id );
3713 void changeOpReferenceUniqueId(
int old_id,
int new_id );
3714 virtual void clearUniqueId();
3716 void setAllowBuildDependencies(
int yesno )
3717 { myAllowBuildDependencies = yesno; }
3718 int allowBuildDependencies()
const
3719 {
return myAllowBuildDependencies; }
3723 void evaluateAllParms(
fpreal t);
3728 virtual void getMyExternalReferences(
3731 bool collapse =
false,
3732 bool check_missing =
false,
3733 bool show_missing_only=
false);
3736 const char *stringparm,
3737 int framestart,
int frameend,
3740 bool show_only_missing,
3746 virtual void getDescriptiveParmName(
UT_String &str)
const;
3751 virtual void getDescriptiveName(
UT_String &str)
const;
3754 void dirtyDescriptiveNameCache();
3757 virtual bool canDestroyNode();
3763 virtual bool cookedDataUsesAllParameters()
const
3767 virtual bool cookedDataNeedsErrors()
const
3775 virtual bool cookDataForAnyOutput()
const
3780 bool getIsRunningInCreateScript()
const;
3786 virtual void refreshRepresentativeNode(
OP_Node &changed_child);
3790 virtual void setupConnectorsAfterLoad();
3797 bool isCookedTime(
fpreal t)
const
3799 return dataMicroNodeConst()
3800 .isEqualToLastUpdateTime(t);
3805 virtual void dumpMicroNodes(
3808 int indent_level)
const;
3813 int myLastGroupMask;
3816 int myParmLastGroupMask;
3832 void updateErrorSeverity();
3835 virtual void onInputAllocated(
OP_Input* new_input,
3839 void checkConnectorsConsistency();
3846 void renameInput(
OP_Input* input,
int new_id);
3848 void notifyChannelOpDependents(
PRM_Parm * in_parm,
int vecid);
3854 void updateSpareParmTemplates(
3856 bool leavedefaultsunchanged)
override;
3858 bool doDebugConsistencyCheck();
3865 OP_ERROR saveGroupMemberships(std::ostream &os,
3867 const char *path_prefix);
3869 const char*
path =
nullptr);
3872 OP_ERROR saveNetworkBox(std::ostream &os,
3874 const char *path_prefix);
3878 const char *
path =
nullptr);
3882 void saveForUndoComment();
3883 void saveForUndoDelScript();
3886 const UT_BitArray &getGroups()
const {
return myGroups; }
3900 void setInterrupted();
3902 int findAncestor(
const OP_Node *node)
const;
3903 int findDataAncestor(
const OP_Node *node)
const;
3904 void clearRecursionBit()
const;
3906 void initializeExpressions()
const;
3908 void clearOutputs();
3912 static bool getMicroNodesFromRef(
3916 static void traverseInputsAddInputs(
3920 TraverseOptions opts,
3922 bool include_parmlist);
3925 int addOpDependent(
int op_id,
3930 void updateRenameDependent(
OP_Node *dependent,
3931 const char *old_cwd,
3938 void getExistingOpReferencesImpl(
3939 OP_NodeList &refs,
bool include_descendants)
const;
3940 void getExistingOpDependentsImpl(
3941 OP_NodeList &deps,
bool include_descendants)
const;
3943 void buildScriptOpDependencies();
3944 void changeScriptOpRef(
const char *new_fullpath,
3945 const char *old_path,
3946 const char *old_cwd );
3947 static void changeScriptCB(
UT_String &str,
3948 const char *token_start,
3949 const char *&ch,
void *userdata );
3963 char *childpref,
int childpreflen,
3971 bool internalSetGlobalParam(
const char *
param,
3975 bool internalSetPicked(
bool on_off,
3976 bool propagate_parent_event,
3983 virtual void removeInputFromMapping(
OP_InputIdx idx);
3990 uint32 computeCompiledHash()
const;
3994 void addDeprecationWarningsIfAny();
3997 int getConnectorNextId()
const;
3999 bool computeCompiledStatus()
const;
4001 bool isOperatorThreadSafe()
const;
4003 void internalSyncDelayedOTL();
4009 virtual bool isSelectionOwnerType()
const
4016 static void addExtraInputs(
4021 static void addExtraInput(
OP_Node &
source,
int source_pi,
int source_vi,
4022 OP_Node &target,
int target_pi,
int target_vi
4025 static bool getMicroNodesFromRef(
4029 static bool getMicroNodesFromRef(
4030 OP_Node &op,
int parm_i,
int vec_i,
4042 virtual bool isUsingCurrentFrameForVexTransformContext()
const {
return true;}
4047 exint myLastErrorVersion;
4071 EventMicroNodesPtr myEventMicroNodes;
4083 int myScriptsBlockingDelCount;
4085 int myNextIdOverride;
4086 unsigned myActiveInputIndex;
4094 unsigned int myRenameConflict : 1,
4095 myCookedForRender : 1,
4096 myModifyWaiting : 1,
4097 myBuiltExplicitly : 1,
4098 myAllowBuildDependencies : 1,
4100 myRunningCreateScript : 1,
4101 myRunningDelScript : 1,
4102 myAlreadyRunDelScript : 1,
4103 myMatchesOTLDefinition : 1,
4104 myLoadCookedDataError : 1,
4105 myBuiltHashCode : 1,
4106 myIsProxyRefNode : 1,
4107 myInhibitInputConsolidation : 1,
4113 myLocalVarActive : 1,
4115 mySyncingDelayedOTL : 1;
4117 mutable bool myRecursionFlag;
4120 static int thePropagateLevel;
4160 bool myCachedDescriptiveNameDirty;
4165 bool myLoadedNamedInputs;
4172 int myChildErrorSeverityTimestamp;
4178 static int makeUniqueId(
OP_Node *node);
4180 static bool *theCheckConnectionConsistency;
4181 static int theUniqueId;
4182 static int theUniqueSize;
4183 static OP_Node **theUniqueNodes;
4184 static bool theDoingBulkNotification;
4196 friend class OP_UndoCreate;
4197 friend class OP_UndoDelete;
4198 friend class OP_UndoInput;
4199 friend class OP_UndoSpareParm;
4200 friend class OP_UndoUserData;
4202 friend class op_MicroNodeDirtied;
4220 static inline size_t
4229 ::memcpy(buffer, s.
c_str(), len);
4241 #define CAST_INSTANTIATE(PREFIX) \
4242 inline static PREFIX##_Node *CAST_##PREFIX##NODE(OP_Node *op) \
4244 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4247 inline static const PREFIX##_Node *CAST_##PREFIX##NODE(const OP_Node *op) \
4249 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4275 #undef CAST_INSTANTIATE
4278 #undef INSTANTIATE_FINDNODE_FUNCTIONS
4279 #undef INSTANTIATE_CASTNODE_FUNCTIONS
4280 #undef INSTANTIATE_FOR_ALL_NODE_TYPES
4293 bool into_subnets =
false,
4294 bool through_dots =
true,
4299 struct Version2Tag {};
4303 bool into_subnets =
false,
4304 bool through_dots =
true,
4313 using Parent::rbegin;
4316 using Parent::operator();
4317 using Parent::entries;
4332 bool into_subnets =
false,
4333 bool through_dots =
true,
4338 struct Version2Tag {};
4342 bool into_subnets =
false,
4343 bool through_dots =
true,
4350 const_reverse_iterator
end()
const {
return Parent::rend(); }
4359 using Parent::operator();
4360 using Parent::entries;
4374 bool isValid()
const
4395 void setId(
int id) { myId =
id; }
OP_API const UT_StringHolder OP_USERDATA_NODESHAPE
The change type wasn't set, so it could be any of them.
virtual void executeCommand(const char *command, std::ostream *out, std::ostream *err) const =0
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
virtual bool setColor(const UT_Color &color)
void adoptFromString(UT_String &str)
shared_ptr< Output > OutputPtr
A shared pointer to an Output.
#define CAST_INSTANTIATE(PREFIX)
OP_API void OPgetUniqueCollections(const CH_ChannelList &channels, CH_CollectionList &collections)
virtual const VOP_CodeGenerator * getVopAutoCodeGenerator() const
GT_API const UT_StringHolder filename
const PRM_Parm * myParmRef
GLuint GLsizei const GLchar * label
virtual UT_ErrorSeverity prmCookOverrides(fpreal, int, const char *, int)
virtual OP_ItemType getItemType() const =0
Our children should implement this and return what type of item they are.
OP_ConnectorInputMap::iterator OP_ConnectorInputIter
#define SYS_DEPRECATED(__V__)
virtual void checkChannelDependencies(CH_Channel *, CH_CHANGE_TYPE)
int64 getMemoryUsage(bool inclusive) const
std::pair< const OP_Node *, OP_OutputIdx > opNodeOutput
virtual int changeString(const char *from, const char *to, bool fullword)
OP_API void OPlinkNodeToChannel(const OP_Node *node, const CH_Channel *chp)
UT_CycleDetect< OP_Node * > OP_NodeCycleDetect
GT_API const UT_StringHolder time
void addExplicitInput(DEP_MicroNode &inp, bool check_dup)
Methods for manipulating explicit edges.
GLsizei const GLfloat * value
const UT_StringHolder myTableName
const GLuint GLenum const void * binary
UT_LockedRawPtr< OP_NodeList, OP_Lock > OP_LockedNodeList
virtual bool setItemName(const UT_StringHolder &name)=0
GLsizei const GLchar *const * path
SYS_FORCE_INLINE T * SYSconst_cast(const T *foo)
base_iterator< const OP_Node *, false > const_reverse_iterator
#define INSTANTIATE_CASTNODE_FUNCTIONS(PREFIX)
virtual void setXY(fpreal x, fpreal y)=0
UT_StringMap< UT_UniquePtr< PY_OpaqueObject > > OP_PythonObjectCache
virtual fpreal getY() const =0
virtual bool getHasTakeData() const
PUGI__FN void reverse(I begin, I end)
virtual fpreal getX() const =0
Parameters for OP_Node::getInfoText()/OP_Node::getNodeSpecificInfoText()
OP_API const UT_StringHolder OP_USERDATA_BGIMAGES
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
PUGI__FN void sort(I begin, I end, const Pred &pred)
virtual OP_Network * getParentNetwork() const =0
Returns the network that is our parent.
**But if you need a result
GLdouble GLdouble GLdouble q
#define OP_INVALID_NODE_ID
virtual void clearParmDependency(int parmidx)=0
int(* OP_EditCallback)(void *data, OP_Node *src, CL_Track *track, fpreal t, fpreal value)
const char * c_str() const
virtual UT_StringHolder evaluateDisableExpression(const PRM_Parm &prm, const UT_StringRef &function) const
constexpr auto in(type t, int set) -> bool
virtual int findString(const char *str, bool fullword, bool usewildcards) const
std::optional< T > UT_Optional
virtual bool setPicked(bool on_off, bool propagate_parent_event=true)=0
base_iterator< OP_Node *, false > reverse_iterator
const OP_Node * myEvalNode
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
void setDirty(bool flag, bool allow_clear=true)
Flag accessors.
virtual void setAnyUndoFlag()
PivotSpaceT< fpreal32 > PivotSpace
virtual int64 getItemUniqueId() const =0
Functions to get hip-file-unique ids for any item type.
OP_OutputPair(OP_Output *p, OP_ConnectorId n)
PRM_ParmList * createObsoleteParmList() override
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
A utility class to do read-only operations on a subset of an existing string.
const char * getFullPath(UT_String &str) const
virtual fpreal getW() const =0
GLint GLint GLsizei GLint GLenum GLenum type
const UT_StringHolder myScriptDir
#define INSTANTIATE_FOR_ALL_NODE_TYPES(MACRO_FUNC)
This macro allows us to run another macro for all node types.
UT_ValArray< const CL_Track * > CL_TrackListC
reverse_iterator rbegin()
Begin iterating over the array in reverse.
virtual bool triggerParmCallback(PRM_Parm *parmptr, fpreal now, int value, void *data, const UT_Options *options=nullptr)=0
Mapper that provides an HDA section name for a given shader node.
virtual const OP_DopParent * castToOpDopParent() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
void(* OP_EventMethod)(OP_Node *caller, void *callee, OP_EventType type, void *data)
PXL_API const char * getName(const ColorSpace *space)
Return the name of the color space.
void resolveAndDeleteObsoleteParmList(PRM_ParmList *&obsolete_parms) override
void getOutputNodes2(UT_Array< OP_Node * > &outputs, bool into_subnets=false, bool through_dots=true, UT_Optional< OP_OutputIdx > output_idx=UT_NULLOPT) const
OP_API const UT_StringHolder OP_USERDATA_OPMENUFILE
constexpr std::enable_if< I< type_count_base< T >::value, int >::type tuple_type_size(){return subtype_count< typename std::tuple_element< I, T >::type >::value+tuple_type_size< T, I+1 >);}template< typename T > struct type_count< T, typename std::enable_if< is_tuple_like< T >::value >::type >{static constexpr int value{tuple_type_size< T, 0 >)};};template< typename T > struct subtype_count{static constexpr int value{is_mutable_container< T >::value?expected_max_vector_size:type_count< T >::value};};template< typename T, typename Enable=void > struct type_count_min{static const int value{0};};template< typename T >struct type_count_min< T, typename std::enable_if<!is_mutable_container< T >::value &&!is_tuple_like< T >::value &&!is_wrapper< T >::value &&!is_complex< T >::value &&!std::is_void< T >::value >::type >{static constexpr int value{type_count< T >::value};};template< typename T > struct type_count_min< T, typename std::enable_if< is_complex< T >::value >::type >{static constexpr int value{1};};template< typename T >struct type_count_min< T, typename std::enable_if< is_wrapper< T >::value &&!is_complex< T >::value &&!is_tuple_like< T >::value >::type >{static constexpr int value{subtype_count_min< typename T::value_type >::value};};template< typename T, std::size_t I >constexpr typename std::enable_if< I==type_count_base< T >::value, int >::type tuple_type_size_min(){return 0;}template< typename T, std::size_t I > constexpr typename std::enable_if< I< type_count_base< T >::value, int >::type tuple_type_size_min(){return subtype_count_min< typename std::tuple_element< I, T >::type >::value+tuple_type_size_min< T, I+1 >);}template< typename T > struct type_count_min< T, typename std::enable_if< is_tuple_like< T >::value >::type >{static constexpr int value{tuple_type_size_min< T, 0 >)};};template< typename T > struct subtype_count_min{static constexpr int value{is_mutable_container< T >::value?((type_count< T >::value< expected_max_vector_size)?type_count< T >::value:0):type_count_min< T >::value};};template< typename T, typename Enable=void > struct expected_count{static const int value{0};};template< typename T >struct expected_count< T, typename std::enable_if<!is_mutable_container< T >::value &&!is_wrapper< T >::value &&!std::is_void< T >::value >::type >{static constexpr int value{1};};template< typename T > struct expected_count< T, typename std::enable_if< is_mutable_container< T >::value >::type >{static constexpr int value{expected_max_vector_size};};template< typename T >struct expected_count< T, typename std::enable_if<!is_mutable_container< T >::value &&is_wrapper< T >::value >::type >{static constexpr int value{expected_count< typename T::value_type >::value};};enum class object_category:int{char_value=1, integral_value=2, unsigned_integral=4, enumeration=6, boolean_value=8, floating_point=10, number_constructible=12, double_constructible=14, integer_constructible=16, string_assignable=23, string_constructible=24, other=45, wrapper_value=50, complex_number=60, tuple_value=70, container_value=80,};template< typename T, typename Enable=void > struct classify_object{static constexpr object_category value{object_category::other};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_integral< T >::value &&!std::is_same< T, char >::value &&std::is_signed< T >::value &&!is_bool< T >::value &&!std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::integral_value};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_integral< T >::value &&std::is_unsigned< T >::value &&!std::is_same< T, char >::value &&!is_bool< T >::value >::type >{static constexpr object_category value{object_category::unsigned_integral};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_same< T, char >::value &&!std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::char_value};};template< typename T > struct classify_object< T, typename std::enable_if< is_bool< T >::value >::type >{static constexpr object_category value{object_category::boolean_value};};template< typename T > struct classify_object< T, typename std::enable_if< std::is_floating_point< T >::value >::type >{static constexpr object_category value{object_category::floating_point};};template< typename T >struct classify_object< T, typename std::enable_if<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&std::is_assignable< T &, std::string >::value >::type >{static constexpr object_category value{object_category::string_assignable};};template< typename T >struct classify_object< T, typename std::enable_if<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&!std::is_assignable< T &, std::string >::value &&(type_count< T >::value==1)&&std::is_constructible< T, std::string >::value >::type >{static constexpr object_category value{object_category::string_constructible};};template< typename T > struct classify_object< T, typename std::enable_if< std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::enumeration};};template< typename T > struct classify_object< T, typename std::enable_if< is_complex< T >::value >::type >{static constexpr object_category value{object_category::complex_number};};template< typename T > struct uncommon_type{using type=typename std::conditional<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&!std::is_assignable< T &, std::string >::value &&!std::is_constructible< T, std::string >::value &&!is_complex< T >::value &&!is_mutable_container< T >::value &&!std::is_enum< T >::value, std::true_type, std::false_type >::type;static constexpr bool value=type::value;};template< typename T >struct classify_object< T, typename std::enable_if<(!is_mutable_container< T >::value &&is_wrapper< T >::value &&!is_tuple_like< T >::value &&uncommon_type< T >::value)>::type >{static constexpr object_category value{object_category::wrapper_value};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&is_direct_constructible< T, double >::value &&is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::number_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&!is_direct_constructible< T, double >::value &&is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::integer_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&is_direct_constructible< T, double >::value &&!is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::double_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< is_tuple_like< T >::value &&((type_count< T >::value >=2 &&!is_wrapper< T >::value)||(uncommon_type< T >::value &&!is_direct_constructible< T, double >::value &&!is_direct_constructible< T, int >::value)||(uncommon_type< T >::value &&type_count< T >::value >=2))>::type >{static constexpr object_category value{object_category::tuple_value};};template< typename T > struct classify_object< T, typename std::enable_if< is_mutable_container< T >::value >::type >{static constexpr object_category value{object_category::container_value};};template< typename T, enable_if_t< classify_object< T >::value==object_category::char_value, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"CHAR";}template< typename T, enable_if_t< classify_object< T >::value==object_category::integral_value||classify_object< T >::value==object_category::integer_constructible, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"INT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::unsigned_integral, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"UINT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::floating_point||classify_object< T >::value==object_category::number_constructible||classify_object< T >::value==object_category::double_constructible, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"FLOAT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::enumeration, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"ENUM";}template< typename T, enable_if_t< classify_object< T >::value==object_category::boolean_value, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"BOOLEAN";}template< typename T, enable_if_t< classify_object< T >::value==object_category::complex_number, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"COMPLEX";}template< typename T, enable_if_t< classify_object< T >::value >=object_category::string_assignable &&classify_object< T >::value<=object_category::other, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"TEXT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value >=2, detail::enabler >=detail::dummy >std::string type_name();template< typename T, enable_if_t< classify_object< T >::value==object_category::container_value||classify_object< T >::value==object_category::wrapper_value, detail::enabler >=detail::dummy >std::string type_name();template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value==1, detail::enabler >=detail::dummy >inline std::string type_name(){return type_name< typename std::decay< typename std::tuple_element< 0, T >::type >::type >);}template< typename T, std::size_t I >inline typename std::enable_if< I==type_count_base< T >::value, std::string >::type tuple_name(){return std::string{};}template< typename T, std::size_t I >inline typename std::enable_if<(I< type_count_base< T >::value), std::string >::type tuple_name(){auto str=std::string{type_name< typename std::decay< typename std::tuple_element< I, T >::type >::type >)}+ ','+tuple_name< T, I+1 >);if(str.back()== ',') str.pop_back();return str;}template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value >=2, detail::enabler > > std::string type_name()
Recursively generate the tuple type name.
GLint GLint GLsizei GLint GLenum format
GLsizei GLsizei GLchar * source
#define INVALID_TABLE_NAME
OP_Network * getRootCompiledParent() const
virtual void opChanged(OP_EventType type, void *dataptr=nullptr)=0
Wrapper around hboost::intrusive_ptr.
GLdouble GLdouble GLint GLint order
#define SYS_NO_DISCARD_RESULT
DEP_MicroNode & parmMicroNode(int parm_idx, int vi)
SYS_FORCE_INLINE const char * c_str() const
SYS_FORCE_INLINE bool isTimeDependent() const
Flag accessors.
HUSD_API bool eval(VtValue &val, T &ret_val)
#define INSTANTIATE_FINDNODE_FUNCTIONS(PREFIX)
UT_ArrayMap< OP_ConnectorId, OP_Input * > OP_ConnectorInputMap
GLuint const GLchar * name
virtual void setItemExpose(bool expose)
virtual void buildOpDependencies()
GLboolean GLboolean GLboolean b
virtual bool getItemExpose() const
UT_ArrayMap< OP_ConnectorId, OP_Output * > OP_ConnectorOutputMap
reverse_iterator rend()
End reverse iterator.
virtual OP_OpTypeId getOpTypeID() const
virtual bool changeSpareParms(UT_IStream &ds, UT_String &errors)
OP_API void OPclearNodeToChannelLinks()
GT_API const UT_StringHolder version
void doGetFullPath(UT_WorkBuffer &str) const override
Compute the full path of the node.
virtual void rebuildParmDependency(int parmidx)=0
unsigned int OP_ItemTypeMask
**Note that the tasks the is the thread number *for the or if it s being executed by a non pool thread(this *can happen in cases where the whole pool is occupied and the calling *thread contributes to running the work load).**Thread pool.Have fun
const UT_StringHolder myOptypeName
OP_API const char * OPtypeIdLabels[NUM_MANAGERS]
Nice label names used by network view, corresponding to OP_OpTypeId.
A map of string to various well defined value types.
GA_API const UT_StringHolder parms
Parameters for OP_Node::fillInfoTree()/OP_Node::fillInfoTreeNodeSpecific()
bool operator==(const OP_NodeParmRef &other)
virtual const UT_StringHolder & getItemName() const =0
SIM_API const UT_StringHolder force
virtual void addExtraInput(OP_Node *op, OP_InterestType type)
__hostdev__ constexpr T pi()
Pi constant taken from Boost to match old behaviour.
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
typename set_type::iterator iterator
Inherit iterator and const_iterator.
virtual unsigned referenceAllParameters(OP_Parameters *from, bool relative_references=true)
OP_NodeParmRef(const OP_Node *eval_node=nullptr, const PRM_Parm *parm_ref=nullptr, int vi=-1)
OP_API const UT_StringHolder OP_USERDATA_CHILDOPMENUFILE
A global error manager scope.
GA_API const UT_StringHolder pivot
base_iterator< const OP_Node *, true > const_iterator
**If you just want to fire and args
OP_API const UT_StringHolder OP_USERDATA_WIRESTYLE
static OP_Node * lookupNode(int unique_id, bool include_proxy=false)
UT_CycleDetect< OP_NodeParmRef > OP_NodeParmRefCycle
OP_Network * getParent() const
virtual void clearUndoFlags()
virtual UT_Color getColor() const
Accessors for color used in the network view.
virtual bool getPicked() const =0
virtual void convertOpdefToAbsolutePath(UT_String &str) const =0
This is the base class for all DOP nodes.
GLubyte GLubyte GLubyte GLubyte w
virtual OP_Node * castToOPNode()
virtual void spareParmRemoved(const char *parmname)=0
virtual fpreal getH() const =0
bool operator!=(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
int operator==(const opParmData &v) const
virtual void syncNodeVersion(const char *old_version, const char *current_version, bool *node_deleted)
void getOutputNodes(UT_Array< OP_Node * > &outputs, bool into_subnets=false, bool through_dots=true, OP_OutputIdx output_idx=-1) const
Safe reference to an OP node.
Options class for use with OP_Node::saveCommand()
#define DEFAULT_COMP_HASH_VALUE
bool wasInterrupted(T *i, int percent=-1)
SYS_FORCE_INLINE PRM_ParmList * getParmList()
virtual PRM_ParmMicroNode * createParmMicroNodes(PRM_Parm &parm) const
#define UTstatic_pointer_cast
OP_API const UT_StringHolder OP_USERDATA_DESCRIPTIVE_PARM
UT_LockedRawPtr< const OP_NodeList, OP_Lock > OP_LockedConstNodeList
iterator end()
End iterator.
OP_API OP_Node * OPgetNodeFromChannel(const CH_Channel *chp)
virtual bool isParmPendingOverride(const char *, int) const
ImageBuf OIIO_API channels(const ImageBuf &src, int nchannels, cspan< int > channelorder, cspan< float > channelvalues={}, cspan< std::string > newchannelnames={}, bool shuffle_channel_names=false, int nthreads=0)
virtual void permissionError(const char *chname=nullptr)
virtual SYS_NO_DISCARD_RESULT UT_UniquePtr< PRM_ParmOwnerContext > pushAsPwd() const =0
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
virtual const PRM_Parm * traverseRef(int *sub_idx, fpreal time, int parm_idx, int vec_idx) const =0
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.