123 class OP_UniGraphProvider;
190 virtual bool opNotifyVarChange(
const char *varname,
OP_NodeList *changed_nodes =
nullptr) = 0;
209 int *timedep =
nullptr)
215 , myParentXfo(parent_cb)
223 int *timedep =
nullptr)
224 : myTrackIndex(index)
228 , myParentXfo(parent_cb)
253 #define OPREF_PREFIX "op:"
254 #define OPREF_PREFIX_LEN 3
258 #define OP_NODE_DATA_SEPARATOR ':'
262 #define DEFAULT_COMP_HASH_VALUE (17*19)
265 #define INVALID_TABLE_NAME "Node"
266 #define OBJ_TABLE_NAME "Object"
267 #define SOP_TABLE_NAME "Sop"
268 #define CHOPNET_TABLE_NAME "ChopNet"
269 #define CHOP_TABLE_NAME "Chop"
270 #define ROP_TABLE_NAME "Driver"
271 #define SHOP_TABLE_NAME "Shop"
272 #define COP_TABLE_NAME "Cop"
273 #define COP2_TABLE_NAME "Cop2"
274 #define COP2NET_TABLE_NAME "CopNet"
275 #define VOP_TABLE_NAME "Vop"
276 #define VOPNET_TABLE_NAME "VopNet"
277 #define DOP_TABLE_NAME "Dop"
278 #define TOP_TABLE_NAME "Top"
279 #define TOPNET_TABLE_NAME "TopNet"
280 #define LOP_TABLE_NAME "Lop"
283 #define MGR_TABLE_NAME "Manager"
284 #define DIR_TABLE_NAME "Director"
285 #define DATA_TABLE_NAME "Data"
289 #define INVALID_SCRIPT_NAME "node"
290 #define OBJ_SCRIPT_NAME "obj"
291 #define SOP_SCRIPT_NAME "sop"
292 #define CHOPNET_SCRIPT_NAME "ch"
293 #define CHOP_SCRIPT_NAME "chop"
294 #define ROP_SCRIPT_NAME "out"
295 #define SHOP_SCRIPT_NAME "shop"
296 #define COP_SCRIPT_NAME "cop"
297 #define COP2_SCRIPT_NAME "cop2"
298 #define COP2NET_SCRIPT_NAME "img"
299 #define VOP_SCRIPT_NAME "vop"
300 #define VOPNET_SCRIPT_NAME "vex"
301 #define DOP_SCRIPT_NAME "dop"
302 #define TOP_SCRIPT_NAME "top"
303 #define TOPNET_SCRIPT_NAME "tasks"
304 #define LOP_SCRIPT_NAME "lop"
307 #define MGR_SCRIPT_NAME "mgr"
308 #define DIR_SCRIPT_NAME "dir"
309 #define MAT_SCRIPT_NAME "mat"
310 #define DATA_SCRIPT_NAME "data"
313 #define INVALID_OPTYPE_NAME "NODE"
314 #define OBJ_OPTYPE_NAME "OBJ"
315 #define SOP_OPTYPE_NAME "SOP"
316 #define CHOPNET_OPTYPE_NAME "CHOPNET"
317 #define CHOP_OPTYPE_NAME "CHOP"
318 #define ROP_OPTYPE_NAME "ROP"
319 #define SHOP_OPTYPE_NAME "SHOP"
320 #define COP_OPTYPE_NAME "COP"
321 #define COP2_OPTYPE_NAME "COP2"
322 #define COP2NET_OPTYPE_NAME "IMG"
323 #define VOP_OPTYPE_NAME "VOP"
324 #define VOPNET_OPTYPE_NAME "VOPNET"
325 #define DOP_OPTYPE_NAME "DOP"
326 #define TOP_OPTYPE_NAME "TOP"
327 #define TOPNET_OPTYPE_NAME "TOPNET"
328 #define LOP_OPTYPE_NAME "LOP"
334 #define MGR_OPTYPE_NAME "MGR"
335 #define DIR_OPTYPE_NAME "DIR"
336 #define DATA_OPTYPE_NAME "DATA"
353 #define OP_NAME_INPUT "input"
354 #define OP_NAME_OUTPUT "output"
355 #define OP_NAME_SUBOUTPUT "suboutput"
356 #define OP_NAME_SUBINPUT "subinput"
357 #define OP_NAME_COLLECT "collect"
361 #define SHOP_MANAGEMENT_OPTYPE "shopnet"
362 #define COP_MANAGEMENT_OPTYPE "copnet"
363 #define COP_FILTERLIST_OPTYPE "copnet_filterlist"
364 #define COP2_MANAGEMENT_OPTYPE "cop2net"
365 #define ROP_MANAGEMENT_OPTYPE "ropnet"
366 #define CHOP_MANAGEMENT_OPTYPE "chopnet"
367 #define SOP_MANAGEMENT_OPTYPE "sopnet"
368 #define OBJ_MANAGEMENT_OPTYPE "objnet"
369 #define VOP_MANAGEMENT_OPTYPE "vopnet"
370 #define DOP_MANAGEMENT_OPTYPE "dopnet"
371 #define TOP_MANAGEMENT_OPTYPE "topnet"
372 #define LOP_MANAGEMENT_OPTYPE "lopnet"
392 (
bool values_only_ =
false
393 ,
bool defaultstoo_ =
true
394 ,
bool docreate_ =
true
395 ,
bool doparms_ =
true
396 ,
bool doflags_ =
true
397 ,
bool dowires_ =
true
398 ,
bool dowiresout_ =
true
399 ,
bool frames_ =
false
400 ,
bool dogeneral_ =
false
401 ,
bool dochblock_ =
true
402 ,
bool dospareparms_ =
true
403 ,
bool omit_version_info_ =
false
405 : values_only(values_only_)
406 , defaultstoo(defaultstoo_)
407 , docreate(docreate_)
411 , dowiresout(dowiresout_)
413 , dogeneral(dogeneral_)
414 , dochblock(dochblock_)
415 , dospareparms(dospareparms_)
416 , omit_version_info(omit_version_info_)
451 return (myValue == v.
myValue &&
478 #define INSTANTIATE_FINDNODE_FUNCTIONS(PREFIX) \
479 PREFIX##_Node *find##PREFIX##Node(const char *path) const \
483 node = findNode(path); \
484 if (node) return node->castTo##PREFIX##Node(); \
487 #define INSTANTIATE_CASTNODE_FUNCTIONS(PREFIX) \
488 PREFIX##_Node *castTo##PREFIX##Node() const \
493 { const void *this_local = this; \
494 UT_ASSERT(this_local); \
495 if (!this_local) return 0; } \
496 if (getOpTypeID() == PREFIX##_OPTYPE_ID) \
498 return (PREFIX##_Node *) this; \
504 #define INSTANTIATE_FOR_ALL_NODE_TYPES(MACRO_FUNC) \
507 MACRO_FUNC(CHOPNET) \
513 MACRO_FUNC(COP2NET) \
534 static const OP_TypeInfo *getOpInfoFromTableName(
const char *name);
535 static const OP_TypeInfo *getOpInfoFromScriptDir(
const char *dir);
540 {
return myRootCompiledParent; }
549 bool getIsContainedBy(
const OP_Node *testparent)
const;
564 virtual const char *getOpType()
const;
623 const
UT_String &getDelScript()
const {
return myDelScript; }
627 bool setDelScript(
const char *str);
631 const UT_String &getComment()
const {
return myComment; }
632 bool setComment(
const char *str);
645 bool getColorDefault()
const;
646 bool setColorDefault(
bool usedefault);
660 fpreal getX()
const override {
return myPosX; }
661 fpreal getY()
const override {
return myPosY; }
666 void pickRequest(
int shift);
670 bool allow_rel_paths =
false,
671 bool ignore_node_names_env_var =
false);
672 static bool isValidOpName(
const char *
s,
673 bool allow_rel_paths =
false,
674 bool ignore_node_names_env_var =
false)
678 ignore_node_names_env_var);
681 bool allow_rel_paths =
false,
682 bool ignore_node_names_env_var =
false)
684 return isValidOpName(str.
c_str(),
686 ignore_node_names_env_var);
688 static bool isValidOpName(
const UT_String &str,
689 bool allow_rel_paths =
false,
690 bool ignore_node_names_env_var =
false)
692 return isValidOpName(str.
c_str(),
694 ignore_node_names_env_var);
697 static bool forceValidOpName(
UT_String &name);
702 int findString(
const char *str,
bool fullword,
703 bool usewildcards)
const override;
705 bool fullword)
override;
712 bool notifyVarChange(
717 virtual int getNchildren()
const;
718 virtual OP_Node *getChild(
const char *name,
int *hint=
nullptr)
const;
721 bool include_hidden=
false)
const;
726 const char *optype =
nullptr,
727 int casesensitive = 0)
const;
728 virtual OP_Node *matchChildBackwards(
731 const char *optype =
nullptr,
732 int casesensitive = 0)
const;
743 virtual void getPotentialChildErrorNodes(
OP_NodeList &nodes)
const;
747 virtual OP_UniGraphProvider *getUniGraphProvider();
753 virtual OP_Node *getUniGraphProviderNode();
763 static OP_Node *lookupNode(
int unique_id,
bool include_proxy=
false)
765 if( unique_id >= 0 && unique_id <= theUniqueId
766 && theUniqueNodes[unique_id] )
768 if( include_proxy || !theUniqueNodes[unique_id]
770 return theUniqueNodes[unique_id];
774 static int getNumUniqueIds()
775 {
return theUniqueId + 1; }
779 int getUniqueId()
const
780 {
return myUniqueId; }
782 {
return myUniqueId; }
787 bool expandGroupPattern(
const char *
pattern,
789 bool expand_to_full_paths =
false);
793 bool patternContainsBundle(
const char *
pattern,
795 bool patternContainsGroup(
const char *
pattern,
798 virtual int isManager()
const;
802 virtual int isManagementNode()
const;
807 bool isEffectivelyAManagementNode()
const;
810 virtual bool isMaterialManager()
const;
820 virtual int isSubNetwork(
bool includemanagementops)
const;
821 virtual int isNetwork()
const;
822 virtual int isInSubNetwork()
const;
824 bool isProxyRefNode()
const
825 {
return myIsProxyRefNode; }
826 void setProxyRefNode(
bool f)
827 { myIsProxyRefNode =
f; }
830 virtual bool isOutputNode()
const;
837 int isNetworkWithKids()
const;
839 virtual int isVex()
const;
845 OP_Bundle * getParmBundle(
const char* parm_name,
int vector_index,
848 void markBundleRefsAsUnused();
849 void cleanUnusedBundleRefs();
850 void cleanAllBundleRefs();
852 static void getValueAsBundlePaths(
fpreal t,
857 static void getValueAsBundlePaths(
fpreal t,
868 virtual bool bundleChanged(
const OP_Bundle *bundle);
871 void touchBundleParm(
const char *name);
872 void touchBundleParm(
int parm_index);
875 virtual int getDandROpsEqual() {
return 1; }
878 virtual int updateDandROpsEqual(
int = 1) {
return 1; }
884 bool isInputAncestor(
const OP_Node *parent,
885 bool check_extra=
true)
const;
890 bool isParentAncestor(
const OP_Node *parent)
const;
903 virtual void getNodeSpecificInfoText(
OP_Context &context,
922 OP_Node *findNode(
const char *
path, OTLSyncMode syncmode = OTLSYNC_DOSYNC)
const;
934 virtual OP_PostIt *findPostItNote(
const char *const_path)
936 virtual OP_Dot *findDot(
const char *const_path)
950 SOP_Node *getSOPNode(
const char *
path,
int addextra = 0,
951 bool *got_by_flag=
nullptr)
const;
954 COP_Node *getCOPNode(
const char *
path,
int addextra = 0)
const;
955 COP2_Node *getCOP2Node(
const char *
path,
int addextra = 0)
const;
959 DOP_Node *getDOPNode(
const char *
path,
int addextra = 0)
const;
960 ROP_Node *getROPNode(
const char *
path,
int addextra = 0)
const;
963 bool *got_by_flag=
nullptr)
const;
965 TOP_Node *getTOPNode(
const char *
path,
int addextra = 0)
const;
967 LOP_Node *getLOPNode(
const char *
path,
int addextra = 0)
const;
974 virtual void getPathWithSubnet(
UT_String &str)
const;
982 void completePath(
const char *prefixpath,
985 virtual CH_Channel *getTrackChannel(
const char *name);
988 const char *trackname,
1002 void globNodes(
const char *pat,
UT_String *expand,
1005 const char *prefix =
" ");
1008 void globChannels(
const char *,
UT_String &expand,
1010 const char *prefix =
" ")
const;
1012 void globChannels(
const char *
pattern,
1015 OP_Node *dependent =
nullptr);
1021 void globChanRefs(
const char *
pattern,
1025 bool use_multi_match =
true);
1031 int calc_value = 1);
1039 bool animated_only);
1042 void globNodeChannels(
const char *
pattern,
1045 int *parm_start =
nullptr,
1054 void globNodeChanRefs(
const char *
pattern,
1057 int *parm_start =
nullptr,
1060 bool use_multi_match =
true
1066 virtual void globNetworkBoxes(
const char *pat,
UT_String *expand,
1069 const char *prefix =
" ");
1071 virtual void globPostIts(
const char *pat,
UT_String *expand,
1074 const char *prefix =
" ");
1082 void *
data =
nullptr)
override;
1086 virtual bool opShouldHandleChange(
OP_EventType reason);
1091 virtual void referencedParmChanged(
int pi);
1097 virtual void forceRecook(
bool evensmartcache =
true);
1103 virtual void reloadExternalFiles();
1109 virtual unsigned needToCook(
OP_Context &context,
bool queryonly=
false);
1125 template <
typename F>
1126 void cookLockedExecute(
const F &functor);
1130 OP_CookLock & getCookLock() {
return myCookLock; }
1137 void bumpVersionParm()
1139 dataMicroNode().bumpModVersion();
1140 if (hasIndepParmListMicroNode())
1141 parmListMicroNode().bumpModVersion();
1143 int cookParmsModified()
const
1144 {
return parmListMicroNodeConst()
1145 .isModVersionOutdated(); }
1152 virtual int getDataClass()
const;
1161 virtual OP_DataType getCookedDataType()
const = 0;
1162 virtual void *getCookedData(
const OP_Context &);
1163 virtual void deleteCookedData() = 0;
1165 virtual int saveCookedData(std::ostream &os,
OP_Context &,
1168 const char *
path =
nullptr);
1178 virtual int getRelativeCaptureTransform(
OP_Node &to,
1181 virtual int getRelativeCaptureTransform(
OP_Node &to,
1186 static bool getCameraInfoAndRelativeTransform(
1189 const OP_Node *paths_relative_to_node,
1190 bool get_inverse_xform,
1201 virtual bool getWorldTransformFromData(
const UT_StringRef &
id,
1203 bool get_inverse_xform,
1214 TRANSFORM_PRECONSTRAINT,
1215 TRANSFORM_PARENTBONE,
1218 TRANSFORM_PRERAWPARM,
1231 bool ok = getWorldTransform(m, ctx);
1238 bool ok = getIWorldTransform(m, ctx);
1245 bool ok = getTransform(mode, m, ctx);
1252 void addTransformError(
const OP_Node &node,
1253 const char *
label =
nullptr)
const;
1261 virtual const char *getInternalOpTable()
const
1266 virtual const char *inputLabel(
OP_InputIdx idx)
const;
1267 virtual const char *outputLabel(
OP_OutputIdx idx)
const;
1278 virtual const char *inputConnectorLabel(
OP_InputIdx idx);
1285 virtual int getAuxInput()
const;
1299 bool getLock()
const {
return flags().isLocked(); }
1301 bool getSoftLock()
const {
return flags().getSoftLocked();}
1302 void setSoftLock(
bool on_off)
1308 bool getHardLock()
const {
return flags().getHardLocked();}
1309 void setHardLock(
bool on_off)
1317 virtual OP_LockTypes setModelLock(OP_LockTypes
state,
1318 void *modeler =
nullptr,
1319 bool allow_softlock_promotion =
false,
1328 bool relaxedlockcheck =
false,
1329 const OP_Node *input_node =
nullptr)
const;
1334 bool setUnload(
bool on_off);
1335 bool getUnload()
const;
1338 virtual bool isLoaded()
const {
return true; }
1343 virtual bool unloadData();
1346 void takeActivateFlag(
uchar flag,
bool enable=
true,
1347 bool send_flag_event=
true);
1348 void takeDeactivateFlag(
uchar flag)
1349 { takeActivateFlag(flag,
false); }
1350 bool takeIsActiveFlag(
uchar flag)
const;
1351 void setHasTakeData(
bool onoff);
1353 bool canAccessFlag(
unsigned mask,
uchar flag)
const;
1361 bool propagate_parent_event =
true)
override;
1367 bool setEditPicked(
bool on_off,
1368 bool propagate_parent_event =
true);
1373 void setAutoscope(
bool on_off) { myAutoscope = on_off; }
1374 bool isAutoscope() {
return myAutoscope; }
1376 bool setCurrent(
bool on_off);
1377 bool setExpose(
bool on_off);
1378 bool setBypass(
bool on_off);
1379 bool setTemplate(
bool on_off);
1380 bool setFootprint(
bool on_off);
1381 bool setXray(
bool on_off);
1382 bool setDisplay(
bool on_off);
1383 bool setRender(
bool on_off);
1384 bool setHighlight(
bool on_off);
1385 bool setModified(
bool on_off);
1386 bool setSaveBypass(
bool on_off);
1387 bool setSaveData(
bool on_off);
1389 virtual bool setPickable(
bool on_off)
1391 virtual bool setAudio(
bool on_off)
1393 virtual bool setExport(
bool on_off)
1395 virtual bool setDebug(
bool on_off)
1397 virtual bool setDisplayOrigin(
bool on_off_unchanged)
1403 void userSetTemplate(
bool onoff);
1408 void userSetSelectableTemplate(
bool onoff);
1412 virtual void setFlag(
char tag,
int8 val);
1413 virtual int8 getFlag(
char tag)
const;
1416 {
return flags().getPicked(); }
1417 virtual bool getEditPicked()
const
1419 bool getCurrent()
const;
1420 bool getDisplay()
const {
return flags().getDisplay(); }
1422 bool getDisplay3D();
1423 bool getRender()
const {
return flags().getRender(); }
1424 bool getHighlight()
const {
return flags().getHighlight();}
1425 bool getBypass()
const {
return flags().getBypass(); }
1426 bool getTemplate()
const {
return flags().getTemplate(); }
1427 bool getFootprint()
const {
return flags().getFootprint(); }
1428 bool getXray()
const {
return flags().getXray(); }
1429 bool getExpose()
const {
return flags().getExpose(); }
1430 bool getModified()
const {
return flags().getModified(); }
1431 bool getSaveBypass()
const{
return flags().getSaveBypass(); }
1432 bool getSaveData()
const {
return flags().getSaveData(); }
1434 {
return flags().getHasTakeData(); }
1435 virtual bool getPickable()
1437 virtual bool getAudio()
const
1439 virtual bool getExport()
const
1441 virtual bool getDebug()
const
1443 virtual bool getDisplayOrigin()
const
1446 {
return getExpose(); }
1448 { setExpose(expose); }
1451 bool getDisplayDescriptiveName()
const
1452 {
return flags().getDisplayDescriptiveName();}
1453 bool setDisplayDescriptiveName(
bool state);
1454 bool getDisplayComment()
const
1456 bool setDisplayComment(
bool state);
1457 int8 getOutputForView()
const
1458 {
return flags().getOutputForView(); }
1459 int8 setOutputForView(
int8 output);
1461 OP_Node *getPickableSelfOrParent();
1466 bool setCompress(
bool on_off);
1467 bool getCompress()
const;
1471 void setCurrentAndPicked();
1479 virtual bool setVisible(
bool onoff);
1480 virtual bool getVisible()
const;
1487 virtual void getSaveFlagsString(
UT_String &cmd,
1489 bool save_to_hip)
const;
1490 virtual void getPreParmSaveFlagsString(
UT_String &cmd )
const;
1491 virtual void getPostParmSaveFlagsString(
UT_String &cmd )
const;
1496 {
return myEventValue.hasOpInterest(data, m); }
1501 { myEventValue.addOpInterest(data, m); }
1505 { myEventValue.removeOpInterest(data, m); }
1507 int isBeingDeleted()
const
1508 {
return myBeingDeleted; }
1509 void setNodeBeingDeleted(
int beingdeleted);
1513 bool setInhibitInputConsolidation(
bool value);
1526 virtual unsigned minInputs()
const;
1529 virtual unsigned maxInputs()
const;
1533 virtual unsigned getNumVisibleInputs()
const;
1543 virtual unsigned orderedInputs()
const;
1547 virtual unsigned maxOutputs()
const;
1551 virtual exint maxSpareOutputs()
const;
1555 virtual unsigned getNumVisibleOutputs()
const;
1558 bool hasUnorderedInputs()
const;
1568 virtual unsigned nInputs()
const;
1575 unsigned nConnectedInputs(
bool check_subnet_inside=
true)
const;
1577 unsigned getActiveInputIndex()
const
1578 {
return myActiveInputIndex; }
1579 void setActiveInputIndex(
unsigned idx);
1600 virtual void getParallelInputs(
OP_Context &context,
1615 virtual OP_ERROR setInputReference(
1640 target_node, input_on_target_node).value_or(-1);
1663 return whichOutputIsFollowingIndirectIncludeSpare(
1664 target_node, input_on_target_node).value_or(-1);
1682 void consolidateInputs();
1683 virtual void clearUnreferencedInputs();
1684 virtual bool allowConsolidatingInput(
OP_InputIdx idx);
1696 virtual int doDeleteRewire()
const {
return 1; }
1701 bool forcesubnet =
false);
1714 virtual int getInputEditorInputs();
1716 virtual bool allowInputEditorInputParm();
1718 virtual bool allowInputEditorInputDelete();
1725 dataMicroNodeConst()
const
1726 {
return myDataMicroNode; }
1730 dataMicroNodeConst());
1736 parmListMicroNodeConst()
const
1737 {
return dataMicroNodeConst(); }
1741 parmListMicroNodeConst());
1744 bool hasIndepParmListMicroNode()
const
1746 return (&parmListMicroNodeConst()
1747 != &dataMicroNodeConst());
1752 {
return myFlagMicroNode; }
1756 {
return myIndividualFlagMicroNodes[flag]; }
1771 if (!myEventMicroNodes)
1773 return bool(myEventMicroNodes[e]);
1779 virtual void getOwnedMicroNodes(
1784 void propagateDirtyMicroNode(
1788 bool send_root_event);
1797 void addExtraInput(
OP_Node &
op,
int parm_i,
int vec_i);
1817 static void addExtraInputToEvalChannel(
1821 addExtraInputToEvalChannel(
1825 static void addExtraInputToEvalChannel(
1829 addExtraInputToEvalChannel(
1833 static void addExtraInputToEvalChannel(
1838 target = getEvalChannelMicroNode(thread);
1842 static void addExtraInputToEvalChannel(
1847 target = getEvalChannelMicroNode(thread);
1857 static void addExtraInput(
1860 static void addExtraInput(
1863 static void addExtraInput(
1868 static void addMultiparmInterests(
const OP_InterestRef &target_ref,
1875 void getExtraInputNodes(
1877 bool remove_duplicates =
true,
1878 bool data_interest =
true,
1879 bool parm_interest =
true,
1880 bool flag_interest =
true,
1881 bool include_parmlist =
true,
1882 bool follow_simulation_inputs =
false)
const;
1883 void getExtraOutputNodes(
1885 bool remove_duplicates =
true,
1886 bool data_interest =
true,
1887 bool parm_interest =
true,
1888 bool flag_interest =
true)
const;
1890 int getNumExtraInputs()
const;
1892 void dumpExtraInputs(
1895 int indent_level = 0)
const;
1900 virtual bool buildDefaultCopContext(
OP_Context &context,
1905 static void addExprOpDependency(
const char *arg_str,
1908 static void addExprOpDependency1From2(
const char *arg_str1,
1909 const char *arg_str2,
1912 static void addExprOpParmDependency(
const char *arg_str,
1916 static void changeExprOpRef(
const char *arg_str,
1918 const char *new_fullpath,
1919 const char *old_fullpath,
1920 const char *old_cwd);
1922 static void changeExprOpRef1From2(
const char *arg_str1,
1923 const char *arg_str2,
1926 const char *new_fullpath,
1927 const char *old_fullpath,
1928 const char *old_cwd);
1930 static void changeExprOpParmRef(
const char *arg_str,
1932 const char *new_fullpath,
1933 const char *old_fullpath,
1934 const char *old_cwd,
1935 const char *chan_name,
1936 const char *old_chan_name);
1938 void addGenericOpNameReference(
const UT_String &oppath );
1939 void addGenericOpNameReference(
const PRM_RefId &ref_id,
1941 void addGenericOpInputReference(
const PRM_RefId &ref_id,
1944 static void moveAndUpdateDependencies(
1950 bool getParmBaseNodePath(
1963 void decrementOpReference(
int node_id);
1965 virtual void dumpDependencies(std::ostream &os);
1966 void dumpOpDependents(
OP_Node *
ref,
int brief,
1969 &getOpDependents()
const {
return myOpDependents; }
1973 int countReferences(
int op_id);
1978 bool recurse)
const;
1985 bool include_descendants)
const;
1990 bool include_descendants)
const;
1997 bool include_descendants)
const;
2000 void getParmsThatReference(
const char *channame,
2004 virtual void inputConnectChanged(
OP_InputIdx which);
2008 unsigned nOutputEntries()
const;
2014 static constexpr
bool include_spare =
false;
2016 return static_cast<int>(
2017 nOutputItemsIncludeSpare(
2020 return static_cast<int>(
2021 nOutputItemsIncludeSpare(
2022 output_idx, include_spare));
2027 static constexpr
bool include_spare =
false;
2029 return getOutputItemIncludeSpare(
2032 return getOutputItemIncludeSpare(
2033 idx, output_idx, include_spare);
2040 exint nOutputItemsIncludeSpare(
2043 bool include_spare =
true)
const;
2048 bool include_spare =
true)
const;
2051 bool hasAnyOutputNodes(
2052 bool through_dots =
true,
2059 void getOutputNodes(
2061 bool into_subnets =
false,
2062 bool through_dots =
true,
2065 constexpr
bool include_spare =
false;
2067 return getOutputNodesIncludeSpare(
2068 outputs, into_subnets, through_dots,
2071 return getOutputNodesIncludeSpare(
2072 outputs, into_subnets, through_dots,
2073 output_idx, include_spare);
2077 void getOutputNodesIncludeSpare(
2079 bool into_subnets =
false,
2080 bool through_dots =
true,
2083 bool include_spare =
true)
const;
2088 bool through_dots =
true,
2105 virtual void fillInfoTreeNodeSpecific(
UT_InfoTree &tree,
2111 virtual bool fillInfoTreeChildSpecific(
UT_InfoTree &tree,
2132 virtual void unlockInputs();
2137 exint getCookCount()
const {
return myCookCount; }
2141 exint cacheMisses()
const {
return myCacheMisses; }
2142 void triggerOutputChanged();
2144 void triggerUIChanged(
2148 virtual OP_InputIdx cookedInputIndex()
const {
return -1; }
2163 virtual OP_Node *getPassThroughNode(
2165 bool mark_used =
false);
2167 bool setMinimumCacheSize(
int min_size);
2170 {
return dataMicroNodeConst().modVersion(); }
2174 virtual bool handleTimeChange(
fpreal ) {
return false; }
2178 bool isTimeDependent(
const OP_Context &context);
2182 virtual bool isDiveable()
const;
2201 virtual void getExtraNodesForCopyOrDelete(
OP_NodeList &extras)
const;
2207 virtual bool runCreateScript();
2210 void updateParmsToMatchCurrentUnits();
2214 bool getDelaySyncOTL()
const
2215 {
return myDelaySyncOTL; }
2218 void setDelaySyncOTL(
bool isdelayed);
2221 bool shouldDelaySyncOTL()
const;
2224 void syncDelayedOTL()
2226 if (!getDelaySyncOTL())
return;
2227 internalSyncDelayedOTL();
2232 virtual void matchOTLDefinition();
2235 virtual void unmatchOTLDefinition();
2239 virtual void handleOTLIndexFileCleared();
2244 {
return mySyncErrors; }
2247 {
return mySyncErrorLevel; }
2253 bool isAnyAncestorBeingSynced()
const;
2256 int getMatchesOTLDefinition()
const;
2259 static void propagateMatchOTLDefinitionToAncestors(
OP_Node *node,
2264 int getCanDeviateFromOTLDefinition()
const;
2265 void setAllChildAssetPermissions(
int permission);
2268 void computeAllChildAssetPermissions();
2271 bool getIsEditableAssetSubNode()
const;
2274 void turnOffAllChildExports();
2277 bool haveLicenseToAccessContents(
2278 OP_Node* opt_specific_child =
nullptr)
const;
2279 bool haveLicenseToAccessParentContents()
const;
2280 bool haveAncestorWithoutFullLicense(
bool ignore_self)
const;
2283 OP_Node *getFirstExecLicenseOnlyAncestor(
2284 bool ignore_self =
true)
const;
2286 OP_Node *getLastExecLicenseOnlyAncestor(
2287 bool ignore_self =
true)
const;
2289 bool isCompiled()
const;
2292 void saveWires(std::ostream &os,
const char *name,
2294 void saveOutputWires(std::ostream &os,
const char *name,
2296 virtual void saveIntrinsicCommand(std::ostream &os,
2300 virtual OP_ERROR saveCommand(std::ostream &os,
2304 const char *netboxname,
2321 void saveParameterFlags(std::ostream &os,
const char *name,
2322 const char *command,
2323 bool (
PRM_Parm::*flag_method)(
int)
const,
2324 bool defaultstoo,
bool reverse,
2327 void saveUserDataCommand(
2328 std::ostream &os,
const char *node_name,
2329 bool omit_version =
false);
2337 virtual RampError rampCommand(
bool remove,
fpreal pos,
float rgba[4]);
2338 RampError rampCommand(
bool remove,
fpreal pos,
float rgba[4],
2344 const char *
path=
nullptr);
2346 const char *name =
nullptr,
int command = 0);
2357 {
return myUserData; }
2359 OP_ERROR saveUserData(std::ostream &os,
const char *
path);
2360 void clearUserData(
bool save_undo);
2364 static const char *internalUserDataPrefix() {
return "sidefx::"; }
2375 template<
typename T>
2388 bool hasBlindData(
const char *key)
const;
2392 bool deleteBlindData(
const char *key);
2399 OP_ERROR saveDataBlocksPacket(std::ostream &os,
2400 const char *path_prefix,
2403 bool clearDataBlocks();
2409 virtual int deleteNodeData(
void *);
2410 void propagateNodeDataDeleted();
2417 void setCachedPythonObject(
2420 bool deleteCachedPythonObject(
const UT_StringRef &key);
2421 void clearCachedPythonObjects();
2425 {
return myCachedPythonObjects; }
2428 const char *
path =
nullptr);
2430 void saveOverrides(std::ostream &os);
2431 void saveOverrides(std::ostream &os,
OP_Node *root,
2434 void saveChildOverrides(std::ostream &os,
OP_Node *root,
2440 const char *parm_name,
2441 int vec_idx)
override;
2443 int vec_idx)
const override;
2446 virtual void removeOverrideDestination(
OP_Node * ) {}
2447 virtual void removeOverrideDestination(
OP_Node * ,
2453 std::ostream *err)
const override;
2459 OP_ERROR executeHscriptScript(
const char *script,
2461 OP_ERROR executePythonScript(
const char *script,
2464 void addPythonNodeError(
const PY_Result &py_result);
2466 void saveInputs(std::ostream &os,
bool compile_basic);
2469 const char *
path =
nullptr,
2470 bool named =
false);
2471 void saveNamedInputs(std::ostream &os,
bool compile_basic);
2472 void saveNamedOutputs(std::ostream &os);
2473 bool loadNamedOutputs(
2475 const char *
path =
nullptr);
2486 void saveEditableInputData(std::ostream &os)
const;
2508 virtual void saveDialogScriptExtraInfo(std::ostream &os);
2524 int &op_id,
fpreal &op_time,
2526 static int findOpFramePair(
const char *
path,
int &op_id,
2530 static void buildXformOrder(
int trs,
int xyz,
2533 static const UT_XformOrder& buildXformOrder(
int trs,
int xyz );
2556 fpreal pivot_rz,
bool inverse =
false);
2564 fpreal pivot_rz,
bool inverse =
false);
2566 static void buildXform(
int trs,
int xyz,
2567 float tx,
float ty,
float tz,
2568 float rx,
float ry,
float rz,
2569 float sx,
float sy,
float sz,
2570 float px,
float py,
float pz,
2572 static void buildXform(
int trs,
int xyz,
2573 double tx,
double ty,
double tz,
2574 double rx,
double ry,
double rz,
2575 double sx,
double sy,
double sz,
2576 double px,
double py,
double pz,
2578 static void buildXform(
int trs,
int xyz,
2579 float tx,
float ty,
float tz,
2580 float rx,
float ry,
float rz,
2581 float sx,
float sy,
float sz,
2584 static void buildXform(
int trs,
int xyz,
2585 double tx,
double ty,
double tz,
2586 double rx,
double ry,
double rz,
2587 double sx,
double sy,
double sz,
2590 static void buildXform(
int trs,
int xyz,
2591 float tx,
float ty,
float tz,
2592 float rx,
float ry,
float rz,
2593 float sx,
float sy,
float sz,
2594 float s_xy,
float s_xz,
float s_yz,
2595 float px,
float py,
float pz,
2597 static void buildXform(
int trs,
int xyz,
2598 double tx,
double ty,
double tz,
2599 double rx,
double ry,
double rz,
2600 double sx,
double sy,
double sz,
2601 double s_xy,
double s_xz,
double s_yz,
2602 double px,
double py,
double pz,
2604 static void buildXform(
int trs,
int xyz,
2605 float tx,
float ty,
float tz,
2606 float rx,
float ry,
float rz,
2607 float sx,
float sy,
float sz,
2608 float s_xy,
float s_xz,
float s_yz,
2611 static void buildXform(
int trs,
int xyz,
2612 double tx,
double ty,
double tz,
2613 double rx,
double ry,
double rz,
2614 double sx,
double sy,
double sz,
2615 double s_xy,
double s_xz,
double s_yz,
2618 static void buildXform(
2619 const UT_Matrix4F::FullTransformModel &
parms,
2621 static void buildXform(
2622 const UT_Matrix4D::FullTransformModel &
parms,
2624 static void buildXform(
int trs,
2625 float tx,
float ty,
float rz,
2626 float sx,
float sy,
float px,
float py,
2628 static void buildXform(
int trs,
2629 double tx,
double ty,
double rz,
2630 double sx,
double sy,
double px,
double py,
2632 static void buildXform(
int trs,
2633 float tx,
float ty,
float rz,
2634 float sx,
float sy,
float s_xy,
2637 static void buildXform(
int trs,
2638 double tx,
double ty,
double rz,
2639 double sx,
double sy,
double s_xy,
2640 double px,
double py,
2643 virtual int getTranslateParmIndex();
2647 void resolveInputReferences();
2649 static void clearAllPendingUndoFlags();
2653 void saveForUndoInput();
2664 void blockModify(
int on_off,
int propagate = 1);
2666 int isBlockModify()
const;
2667 bool isModifyWaiting()
const;
2668 virtual void propagateEndBlockModify();
2677 fpreal getLastCookTime()
const;
2679 void getLastCookTime(
UT_String &last_cook_time)
const;
2681 void getCookInfo(
UT_String &info)
const;
2688 virtual int isCookingRender()
const {
return 0; }
2689 virtual void setCookingRender(
int val);
2691 virtual void clearInterrupted()
2692 { clearInterruptedImpl(
true); }
2694 {
return flags().getInterrupted(); }
2699 void setRenameConflict()
2700 { myRenameConflict = 1; }
2701 void setRunningCreateScript(
int onoff);
2707 virtual void getInputRes(
int input,
fpreal t,
2714 int group_mask = 1);
2716 virtual int getNumInputsToHash();
2719 void clearHashCodeFlags();
2720 bool isHashCodeBuilt()
const {
return myBuiltHashCode;}
2721 void builtHashCode(
bool b =
true) { myBuiltHashCode =
b; }
2728 void setCreatorState(
const char *s)
2729 { myCreatorState.harden(s); }
2730 const UT_String &getCreatorState()
const {
return myCreatorState; }
2731 void builtExplicitly(
int yn) { myBuiltExplicitly = yn; }
2732 int wasBuiltExplicitly()
const{
return myBuiltExplicitly; }
2734 bool matchesState(
const char *
state)
const;
2742 virtual void changeParmTemplate(
PRM_Template *new_template);
2745 virtual void ensureInputsAndOutputsAreValid();
2749 void connectToInputNode(
OP_Node &inputnode,
2766 static void buildQuadricXform(
UT_Matrix4 &mat,
2767 float tx,
float ty,
float tz,
2768 float sx,
float sy,
float sz,
2770 float rx = 0.0
f,
float ry = 0.0
f,
2774 double tx,
double ty,
double tz,
2775 double sx,
double sy,
double sz,
2777 double rx = 0.0,
double ry = 0.0,
2780 static int buildOpMenu(
2784 int (*do_add)(
OP_Node *) =
nullptr,
2787 int show_subnets = 1,
2788 int expand_subnets = 1,
2789 bool recurse =
false);
2794 static void buildPreDefRulesMenu(
PRM_Name *menu,
2806 static int getNameSerialIndex();
2809 virtual void setMapping(
int idx,
int type,
2810 const char *
label =
nullptr);
2811 virtual int getMapping(
int idx,
const char *&
label)
const;
2819 bool hasComment()
const;
2820 bool hasParmsNotAtFactoryDefault()
const;
2821 bool hasAnimatedParms()
const;
2822 bool hasChopOverriddenParms()
const;
2852 TRAVERSE_DEFAULT = 0x0000,
2853 TRAVERSE_INTO_SUBNETS = 0x0001,
2854 TRAVERSE_REF_INPUTS = 0x0002,
2855 TRAVERSE_ONLY_USED_INPUTS = 0x0004,
2856 TRAVERSE_PASSTHROUGH_INPUTS = 0x0008,
2857 TRAVERSE_EXTRA_INPUTS = 0x0010,
2858 TRAVERSE_SIMULATION_INPUTS = 0x0020,
2859 TRAVERSE_COOKED_INPUT_INDEX_INPUTS = 0x0040,
2861 bool traverseInputs(
bool (*callback)(
OP_Node &,
void *),
2863 TraverseOptions opts,
2866 bool traverseInputs(
bool (*callback)(
const OP_Node &,
void*),
2868 TraverseOptions opts,
2880 bool traverseChildren(
bool (*callback)(
OP_Node &,
void*),
2882 bool recurse_into_subnets);
2886 bool isCooking(
bool include_ancestors)
const;
2890 virtual bool usesFootprint()
const {
return false; }
2892 void getExternalReferences(
2895 bool from_children_too =
true,
2896 bool collapse =
false,
2897 bool check_missing =
false,
2898 bool show_missing_only =
false);
2899 virtual bool getSaveWithVopnets();
2900 virtual void runDelScript();
2903 virtual void preDelete() { }
2907 virtual DOP_Parent *castToDOPParent() {
return nullptr; }
2908 virtual const DOP_Parent *castToDOPParent()
const {
return nullptr; }
2924 *getVopAutoCodeGenerator()
const{
return nullptr; }
2927 virtual void buildVopCodeGenerator() {}
2935 bool create_if_needed=
false)
2945 virtual int beginVopCodeGeneratorUpdate() {
return 0; }
2946 virtual void endVopCodeGeneratorUpdate(
int update_level) {}
2956 int end_parm = INT_MAX,
2957 bool use_parmvop_tag=
true
2959 int buildVexCommandWithDependencies(
OP_Node *owner,
2965 int end_parm = INT_MAX,
2966 bool use_parmvop_tag=
true
2977 static PRM_Name theVexClearParmName;
2988 virtual bool hasVexShaderParameter(
const char *parm_name);
2998 virtual bool getScriptMaterialInfo(
UT_String & mat_info,
3006 virtual const char *getHDASubType()
3011 bool setChannelAlias(
PRM_Parm &parm,
int subindex,
3012 const char *alias_name);
3014 void disconnectAllInputsOutputs(
3016 bool force_disconnect_outputs =
false);
3018 void disconnectAllInputs();
3019 void disconnectAllOutputs();
3022 virtual void notifyParmRenameDependents(
3026 void writeChannel(
CH_Channel *channel, std::ostream &os,
3027 const char *name,
bool frames);
3028 void writeAllChannels(std::ostream &os,
const char *name,
3029 bool frames,
bool dochblock,
3040 const UT_Options *options =
nullptr)
override;
3044 bool triggerSoloParmCallback(
3052 int64 getExtraInputMemoryUsage()
const;
3053 static void printOpMemoryUsageStats(std::ostream &os);
3058 virtual void unscopeChannels(
bool recurse);
3063 virtual void undisplayChannels(
bool recurse);
3068 virtual void unpinChannels(
bool recurse);
3073 virtual void setChannelScope(
const char *
pattern,
3102 bool relative_references =
true)
override;
3104 void clearVersionUserData();
3105 void updateVersionUserData();
3115 void syncNodeVersionIfNeeded(
3117 const char *from_version =
nullptr,
3118 bool update_node_version =
false);
3124 const char *old_version,
3125 const char *current_version,
3126 bool *node_deleted)
override;
3134 bool setGlobalFloatParam(
const char *
param,
3137 bool setGlobalStringParam(
const char *
param,
3138 const char *strvalue,
3143 void beginPropagateModification();
3144 void endPropagateModification();
3147 virtual void getActiveOperatorsDefinedByOTL(
3154 static bool getDoingBulkNotification();
3155 static bool isDirectorDoingBulkNotification();
3160 virtual bool hasDifferentMultiInputs()
const;
3163 virtual bool canCreateNewOpType()
const;
3164 static bool createNewOpType
3168 const char *type_label=
nullptr,
3169 const char *otl_file=
nullptr,
3170 const char *meta_source=
nullptr,
3171 const char *comment=
nullptr,
3173 const char *new_name=
nullptr,
3174 int minimum_inputs=-1,
3175 int maximum_inputs=-1,
3176 bool ignore_external_references=
false,
3177 bool compress_contents=
false,
3179 int *new_node_id=
nullptr,
3180 bool compile_contents =
false,
3181 bool change_node_type =
true,
3182 bool create_backup =
true);
3184 virtual UT_String *getMaterialIconFilename() {
return nullptr; }
3185 virtual void setMaterialIconFilename(
const char * ) {}
3187 virtual bool getMaterialIconAllowRegenerateFlag() {
return true; }
3188 virtual void setMaterialIconAllowRegenerateFlag(
bool) {}
3195 static void startBulkNotifications(
3198 static void endBulkNotifications(
3205 virtual bool willAutoconvertInputType(
OP_InputIdx input_idx);
3211 virtual bool getIsInputVisibleDefault(
OP_InputIdx idx);
3215 bool verifyTemplatesWithParameters()
const;
3220 OP_Input *getNamedInputReferenceConst(
3224 bool mark_used=
false)
const;
3246 bool getUniqueInputNameConst(
3251 bool getUniqueOutputNameConst(
3259 virtual OP_ERROR setNamedIndirectInput(
3262 virtual OP_ERROR setNamedInputReference(
3264 const char *
label,
int,
3279 virtual void onCreated() { }
3281 virtual bool isOrderedInput(
const OP_ConnectorId& input_name)
const;
3289 virtual bool willAutoconvertNamedInputType(
3298 unsigned getInputsArraySize()
3299 {
return myInputs.entries(); }
3302 {
return (getInputsArraySize() > idx) ? 1 : 0; }
3310 bool setLocalVarActive(
bool f)
3312 bool old = myLocalVarActive;
3313 myLocalVarActive =
f;
3318 bool isLocalVarActive()
const
3319 {
return myLocalVarActive; }
3326 void recomputeCompiledHash();
3330 void clearCompiledHash()
3336 { sendEvent(type,
data); }
3338 virtual bool scopedChannelsDirty();
3342 virtual bool getActiveLayerContribution(
const UT_String &track_name,
3348 virtual bool resolveExport(
const PRM_Parm* p,
int subindex,
3354 virtual bool addOrMoveVisualizerToOutput(
int outputidx)
3361 int vec_idx)
const override;
3363 OP_Bundle * getParmBundle(
const char* parm_name,
int vector_index,
3365 const char *
filter,
bool subnet_inclusion);
3369 static const UT_Color &getGlobalDefaultColor();
3375 static fpreal getFlagWidth();
3377 static fpreal getNodeHeight();
3380 static fpreal getNodeButtonWidth();
3382 static fpreal getConnectorHeight();
3389 static bool canDestroyNodes(
OP_Network *src_net,
3403 virtual void getDefaultState(
UT_String &default_state_name);
3423 void clearInputContextOptionDepIfSafe(
3428 virtual bool hasTransformTracks()
const {
return false; }
3441 void getOriginalOperatorTableAndName(
UT_WorkBuffer &name)
const;
3442 void getOriginalOperatorTableAndName(
UT_String &name)
const;
3462 void resolveUnresolvedLoadedInputs();
3466 void finishedLoadingParentNetwork();
3470 static void bumpNameSerialIndex();
3474 void beginScriptBlockingDel()
3475 { myScriptsBlockingDelCount += 1; }
3476 void endScriptBlockingDel()
3477 { myScriptsBlockingDelCount -= 1; }
3481 { myLegacyConnectingInputIndex =
index; }
3485 virtual void clearAndDestroy();
3488 virtual void clearCache();
3490 void clearInterruptedImpl(
bool allow_recook);
3505 virtual void doOverridePreCook() { }
3506 virtual void doOverridePostCook() { }
3511 int getSourceCount()
const;
3512 virtual int bumpSourceCount(
int d);
3519 virtual OP_ERROR saveIntrinsic(std::ostream &os,
3522 const char *path_prefix =
"",
3524 OP_ERROR saveUserDataPacket(std::ostream &os,
3525 const char *path_prefix,
3528 bool loadIntrinsicParentUneditable(
3530 const char *
path =
nullptr);
3533 const char *
path =
nullptr);
3534 virtual bool loadPacket(
UT_IStream &is,
short class_id,
3535 short sig,
const char *
path=
nullptr);
3536 virtual bool loadPacket(
UT_IStream &is,
const char *token,
3537 const char *
path=
nullptr);
3540 const char *
path =
nullptr);
3547 const char *
path =
nullptr);
3550 virtual void loadStart();
3551 virtual void loadFinished();
3555 void loadContentsSection();
3562 void setMatchesOTLDefinition(
int matches);
3564 virtual const char *getFileExtension(
int binary)
const = 0;
3565 virtual const char *getDataFileExtension(
int binary)
const;
3581 virtual void checkTimeDependencies(
int do_parms=1,
3587 virtual void checkContextOptionDependencies(
int do_parms);
3594 int haveSeenDataModification(
exint modification_id);
3604 virtual int propagateModification(
OP_Node *by_whom,
3611 OP_Cache * getCookCache() {
return &myCache; }
3613 static void cmd_locate(
CMD_Args &);
3615 virtual void saveFlagsForUndo();
3616 void saveForUndoLayout();
3618 static void saveForUndoDelete(
OP_NodeList &nodes);
3621 void clearDependency();
3634 bool dirtyForTimeChange(
fpreal t)
3636 if (isCookedTime(t))
3650 virtual void cloneFromProxyRefNode(
OP_Network *proxy );
3655 bool hasOpDependents()
3656 {
return !myOpDependents.isEmpty(); }
3657 virtual int hasProxyRefNodes()
const
3659 virtual void moveProxyRefNodes(
OP_Network * ) { }
3660 void clearOpReferences();
3661 virtual void rebuildOpDependents(
bool proxy_only );
3664 virtual int removeOpDependent(
3667 virtual int removeOpDependent(
3681 virtual void moveDependencies(
OP_Node *from_node );
3687 void notifyRenameDependents(
const UT_String &full_from );
3688 virtual void notifyRenameDependents(
const UT_String &full_from,
3695 void notifyRenameReferences(
const UT_String &full_from );
3696 virtual void notifyRenameReferences(
const UT_String &full_from,
3700 virtual void handleOpDependency(
int referenced_op_id,
3704 const char *old_fullpath,
3705 const char *old_cwd,
3706 const char *old_chan_name );
3707 virtual void buildParmDependency(
int parm_index );
3709 void addOpNameReference(
3713 void addChannelNameReference(
3725 void removeOpReference(
3728 void removeOpReference(
3747 bool changeOpPathRef(
UT_String &value_str,
3748 const char *new_fullpath,
3749 const char *old_fullpath,
3750 const char *old_cwd,
3751 const char *new_cwd );
3755 static bool getStringParmOpPath(
3758 void handleStringParmOpPathDependency(
3759 int parm_index,
int vi,
3760 const char *new_fullpath,
3761 const char *old_fullpath,
const char *old_cwd );
3764 void notifyNodeDeletion();
3768 virtual void nodeDeleted(
OP_Node *op,
int propagate=1);
3770 void startCookTimer(
const OP_Context &context);
3771 void stopCookTimer(
const OP_Context &context);
3773 virtual const char *getCookTimerLabel(
const OP_Context &context)
const;
3789 virtual bool isInputConnectedInsideSubnet(
3791 virtual bool isNamedInputConnectedInsideSubnet(
3795 virtual void nodeUnlocked() { ; }
3798 virtual void setUniqueId(
int id);
3799 void changeOpDependentUniqueId(
int old_id,
int new_id );
3800 void changeOpReferenceUniqueId(
int old_id,
int new_id );
3801 virtual void clearUniqueId();
3803 void setAllowBuildDependencies(
int yesno )
3804 { myAllowBuildDependencies = yesno; }
3805 int allowBuildDependencies()
const
3806 {
return myAllowBuildDependencies; }
3810 void evaluateAllParms(
fpreal t);
3815 virtual void getMyExternalReferences(
3818 bool collapse =
false,
3819 bool check_missing =
false,
3820 bool show_missing_only=
false);
3823 const char *stringparm,
3824 int framestart,
int frameend,
3827 bool show_only_missing,
3833 virtual void getDescriptiveParmName(
UT_String &str)
const;
3838 virtual void getDescriptiveName(
UT_String &str)
const;
3841 void dirtyDescriptiveNameCache();
3844 virtual bool canDestroyNode();
3850 virtual bool cookedDataUsesAllParameters()
const
3854 virtual bool cookedDataNeedsErrors()
const
3862 virtual bool cookDataForAnyOutput()
const
3867 bool getIsRunningInCreateScript()
const;
3873 virtual void refreshRepresentativeNode(
OP_Node &changed_child);
3877 virtual void setupConnectorsAfterLoad();
3884 bool isCookedTime(
fpreal t)
const
3886 return dataMicroNodeConst()
3887 .isEqualToLastUpdateTime(t);
3892 virtual void dumpMicroNodes(
3895 int indent_level)
const;
3900 int myLastGroupMask;
3903 int myParmLastGroupMask;
3919 void updateErrorSeverity();
3922 virtual void onInputAllocated(
OP_Input* new_input,
3926 void checkConnectorsConsistency();
3933 void renameInput(
OP_Input* input,
int new_id);
3935 void notifyChannelOpDependents(
PRM_Parm * in_parm,
int vecid);
3941 void updateSpareParmTemplates(
3943 bool leavedefaultsunchanged)
override;
3945 bool doDebugConsistencyCheck();
3952 OP_ERROR saveGroupMemberships(std::ostream &os,
3954 const char *path_prefix);
3956 const char*
path =
nullptr);
3959 OP_ERROR saveNetworkBox(std::ostream &os,
3961 const char *path_prefix);
3965 const char *
path =
nullptr);
3969 void saveForUndoComment();
3970 void saveForUndoDelScript();
3973 const UT_BitArray &getGroups()
const {
return myGroups; }
3986 bool isOutputIdxWithinMax(
OP_OutputIdx output_idx)
const;
3988 void setInterrupted();
3990 int findAncestor(
const OP_Node *node)
const;
3991 int findDataAncestor(
const OP_Node *node)
const;
3992 void clearRecursionBit()
const;
3994 void initializeExpressions()
const;
3996 void clearOutputs();
4000 static bool getMicroNodesFromRef(
4004 static void traverseInputsAddInputs(
4008 TraverseOptions opts,
4010 bool include_parmlist);
4013 int addOpDependent(
int op_id,
4018 void updateRenameDependent(
OP_Node *dependent,
4019 const char *old_cwd,
4026 void getExistingOpReferencesImpl(
4027 OP_NodeList &refs,
bool include_descendants)
const;
4028 void getExistingOpDependentsImpl(
4029 OP_NodeList &deps,
bool include_descendants)
const;
4031 void buildScriptOpDependencies();
4032 void changeScriptOpRef(
const char *new_fullpath,
4033 const char *old_path,
4034 const char *old_cwd );
4035 static void changeScriptCB(
UT_String &str,
4036 const char *token_start,
4037 const char *&ch,
void *userdata );
4051 char *childpref,
int childpreflen,
4059 bool internalSetGlobalParam(
const char *
param,
4063 bool internalSetPicked(
bool on_off,
4064 bool propagate_parent_event,
4071 virtual void removeInputFromMapping(
OP_InputIdx idx);
4078 uint32 computeCompiledHash()
const;
4082 void addDeprecationWarningsIfAny();
4085 int getConnectorNextId()
const;
4087 bool computeCompiledStatus()
const;
4089 bool isOperatorThreadSafe()
const;
4091 void internalSyncDelayedOTL();
4097 virtual bool isSelectionOwnerType()
const
4104 static void addExtraInputs(
4109 static void addExtraInput(
OP_Node &
source,
int source_pi,
int source_vi,
4110 OP_Node &target,
int target_pi,
int target_vi
4113 static bool getMicroNodesFromRef(
4117 static bool getMicroNodesFromRef(
4118 OP_Node &op,
int parm_i,
int vec_i,
4130 virtual bool isUsingCurrentFrameForVexTransformContext()
const {
return true;}
4135 exint myLastErrorVersion;
4159 EventMicroNodesPtr myEventMicroNodes;
4169 exint myCacheMisses = 0;
4172 int myScriptsBlockingDelCount;
4174 int myNextIdOverride;
4175 unsigned myActiveInputIndex;
4183 unsigned int myRenameConflict : 1,
4184 myCookedForRender : 1,
4185 myModifyWaiting : 1,
4186 myBuiltExplicitly : 1,
4187 myAllowBuildDependencies : 1,
4189 myRunningCreateScript : 1,
4190 myRunningDelScript : 1,
4191 myAlreadyRunDelScript : 1,
4192 myMatchesOTLDefinition : 1,
4193 myLoadCookedDataError : 1,
4194 myBuiltHashCode : 1,
4195 myIsProxyRefNode : 1,
4196 myInhibitInputConsolidation : 1,
4202 myLocalVarActive : 1,
4204 mySyncingDelayedOTL : 1;
4206 mutable bool myRecursionFlag;
4209 static int thePropagateLevel;
4249 bool myCachedDescriptiveNameDirty;
4254 bool myLoadedNamedInputs;
4261 int myChildErrorSeverityTimestamp;
4267 static int makeUniqueId(
OP_Node *node);
4269 static bool *theCheckConnectionConsistency;
4270 static int theUniqueId;
4271 static int theUniqueSize;
4272 static OP_Node **theUniqueNodes;
4273 static bool theDoingBulkNotification;
4285 friend class OP_UndoCreate;
4286 friend class OP_UndoDelete;
4287 friend class OP_UndoInput;
4288 friend class OP_UndoSpareParm;
4289 friend class OP_UndoUserData;
4291 friend class op_MicroNodeDirtied;
4309 static inline size_t
4310 UTformatBuffer(
char *
buffer,
size_t buffer_size,
const OP_Node &
v)
4318 ::memcpy(buffer, s.
c_str(), len);
4330 #define CAST_INSTANTIATE(PREFIX) \
4331 inline static PREFIX##_Node *CAST_##PREFIX##NODE(OP_Node *op) \
4333 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4336 inline static const PREFIX##_Node *CAST_##PREFIX##NODE(const OP_Node *op) \
4338 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4364 #undef CAST_INSTANTIATE
4367 #undef INSTANTIATE_FINDNODE_FUNCTIONS
4368 #undef INSTANTIATE_CASTNODE_FUNCTIONS
4369 #undef INSTANTIATE_FOR_ALL_NODE_TYPES
4382 bool into_subnets =
false,
4383 bool through_dots =
true,
4388 struct IncludeSpareTag {};
4392 bool into_subnets =
false,
4393 bool through_dots =
true,
4403 using Parent::rbegin;
4406 using Parent::operator();
4407 using Parent::entries;
4422 bool into_subnets =
false,
4423 bool through_dots =
true,
4428 struct IncludeSpareTag {};
4432 bool into_subnets =
false,
4433 bool through_dots =
true,
4441 const_reverse_iterator
end()
const {
return Parent::rend(); }
4450 using Parent::operator();
4451 using Parent::entries;
4465 bool isValid()
const
4486 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
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.
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
virtual ~OP_NotifyVarChange()
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)
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.
__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
void getOutputNodesIncludeSpare(UT_Array< OP_Node * > &outputs, bool into_subnets=false, bool through_dots=true, UT_Optional< OP_OutputIdx > output_idx=UT_NULLOPT, bool include_spare=true) 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