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(
1613 target_node, input_on_target_node).value_or(-1);
1636 return whichOutputIsFollowingIndirectIncludeSpare(
1637 target_node, input_on_target_node).value_or(-1);
1655 void consolidateInputs();
1656 virtual void clearUnreferencedInputs();
1657 virtual bool allowConsolidatingInput(
OP_InputIdx idx);
1669 virtual int doDeleteRewire()
const {
return 1; }
1674 bool forcesubnet =
false);
1687 virtual int getInputEditorInputs();
1689 virtual bool allowInputEditorInputParm();
1691 virtual bool allowInputEditorInputDelete();
1698 dataMicroNodeConst()
const
1699 {
return myDataMicroNode; }
1703 dataMicroNodeConst());
1709 parmListMicroNodeConst()
const
1710 {
return dataMicroNodeConst(); }
1714 parmListMicroNodeConst());
1717 bool hasIndepParmListMicroNode()
const
1719 return (&parmListMicroNodeConst()
1720 != &dataMicroNodeConst());
1725 {
return myFlagMicroNode; }
1729 {
return myIndividualFlagMicroNodes[flag]; }
1744 if (!myEventMicroNodes)
1746 return bool(myEventMicroNodes[e]);
1752 virtual void getOwnedMicroNodes(
1757 void propagateDirtyMicroNode(
1761 bool send_root_event);
1770 void addExtraInput(
OP_Node &
op,
int parm_i,
int vec_i);
1790 static void addExtraInputToEvalChannel(
1794 addExtraInputToEvalChannel(
1798 static void addExtraInputToEvalChannel(
1802 addExtraInputToEvalChannel(
1806 static void addExtraInputToEvalChannel(
1811 target = getEvalChannelMicroNode(thread);
1815 static void addExtraInputToEvalChannel(
1820 target = getEvalChannelMicroNode(thread);
1830 static void addExtraInput(
1833 static void addExtraInput(
1836 static void addExtraInput(
1841 static void addMultiparmInterests(
const OP_InterestRef &target_ref,
1848 void getExtraInputNodes(
1850 bool remove_duplicates =
true,
1851 bool data_interest =
true,
1852 bool parm_interest =
true,
1853 bool flag_interest =
true,
1854 bool include_parmlist =
true,
1855 bool follow_simulation_inputs =
false)
const;
1856 void getExtraOutputNodes(
1858 bool remove_duplicates =
true,
1859 bool data_interest =
true,
1860 bool parm_interest =
true,
1861 bool flag_interest =
true)
const;
1863 int getNumExtraInputs()
const;
1865 void dumpExtraInputs(
1868 int indent_level = 0)
const;
1873 virtual bool buildDefaultCopContext(
OP_Context &context,
1878 static void addExprOpDependency(
const char *arg_str,
1881 static void addExprOpDependency1From2(
const char *arg_str1,
1882 const char *arg_str2,
1885 static void addExprOpParmDependency(
const char *arg_str,
1889 static void changeExprOpRef(
const char *arg_str,
1891 const char *new_fullpath,
1892 const char *old_fullpath,
1893 const char *old_cwd);
1895 static void changeExprOpRef1From2(
const char *arg_str1,
1896 const char *arg_str2,
1899 const char *new_fullpath,
1900 const char *old_fullpath,
1901 const char *old_cwd);
1903 static void changeExprOpParmRef(
const char *arg_str,
1905 const char *new_fullpath,
1906 const char *old_fullpath,
1907 const char *old_cwd,
1908 const char *chan_name,
1909 const char *old_chan_name);
1911 void addGenericOpNameReference(
const UT_String &oppath );
1912 void addGenericOpNameReference(
const PRM_RefId &ref_id,
1914 void addGenericOpInputReference(
const PRM_RefId &ref_id,
1917 static void moveAndUpdateDependencies(
1923 bool getParmBaseNodePath(
1936 void decrementOpReference(
int node_id);
1938 virtual void dumpDependencies(std::ostream &os);
1939 void dumpOpDependents(
OP_Node *
ref,
int brief,
1942 &getOpDependents()
const {
return myOpDependents; }
1946 int countReferences(
int op_id);
1951 bool recurse)
const;
1958 bool include_descendants)
const;
1963 bool include_descendants)
const;
1970 bool include_descendants)
const;
1973 void getParmsThatReference(
const char *channame,
1977 virtual void inputConnectChanged(
OP_InputIdx which);
1981 unsigned nOutputEntries()
const;
1987 static constexpr
bool include_spare =
false;
1989 return static_cast<int>(
1990 nOutputItemsIncludeSpare(
1993 return static_cast<int>(
1994 nOutputItemsIncludeSpare(
1995 output_idx, include_spare));
2000 static constexpr
bool include_spare =
false;
2002 return getOutputItemIncludeSpare(
2005 return getOutputItemIncludeSpare(
2006 idx, output_idx, include_spare);
2013 exint nOutputItemsIncludeSpare(
2016 bool include_spare =
true)
const;
2021 bool include_spare =
true)
const;
2024 bool hasAnyOutputNodes(
2025 bool through_dots =
true,
2032 void getOutputNodes(
2034 bool into_subnets =
false,
2035 bool through_dots =
true,
2038 constexpr
bool include_spare =
false;
2040 return getOutputNodesIncludeSpare(
2041 outputs, into_subnets, through_dots,
2044 return getOutputNodesIncludeSpare(
2045 outputs, into_subnets, through_dots,
2046 output_idx, include_spare);
2050 void getOutputNodesIncludeSpare(
2052 bool into_subnets =
false,
2053 bool through_dots =
true,
2056 bool include_spare =
true)
const;
2061 bool through_dots =
true,
2078 virtual void fillInfoTreeNodeSpecific(
UT_InfoTree &tree,
2084 virtual bool fillInfoTreeChildSpecific(
UT_InfoTree &tree,
2105 virtual void unlockInputs();
2110 int getCookCount()
const {
return myCookCount; }
2111 void triggerOutputChanged();
2113 void triggerUIChanged(
2117 virtual OP_InputIdx cookedInputIndex()
const {
return -1; }
2132 virtual OP_Node *getPassThroughNode(
2134 bool mark_used =
false);
2136 bool setMinimumCacheSize(
int min_size);
2139 {
return dataMicroNodeConst().modVersion(); }
2143 virtual bool handleTimeChange(
fpreal ) {
return false; }
2147 bool isTimeDependent(
const OP_Context &context);
2151 virtual bool isDiveable()
const;
2170 virtual void getExtraNodesForCopyOrDelete(
OP_NodeList &extras)
const;
2176 virtual bool runCreateScript();
2179 void updateParmsToMatchCurrentUnits();
2183 bool getDelaySyncOTL()
const
2184 {
return myDelaySyncOTL; }
2187 void setDelaySyncOTL(
bool isdelayed);
2190 bool shouldDelaySyncOTL()
const;
2193 void syncDelayedOTL()
2195 if (!getDelaySyncOTL())
return;
2196 internalSyncDelayedOTL();
2201 virtual void matchOTLDefinition();
2204 virtual void unmatchOTLDefinition();
2208 virtual void handleOTLIndexFileCleared();
2213 {
return mySyncErrors; }
2216 {
return mySyncErrorLevel; }
2222 bool isAnyAncestorBeingSynced()
const;
2225 int getMatchesOTLDefinition()
const;
2228 static void propagateMatchOTLDefinitionToAncestors(
OP_Node *node,
2233 int getCanDeviateFromOTLDefinition()
const;
2234 void setAllChildAssetPermissions(
int permission);
2237 void computeAllChildAssetPermissions();
2240 bool getIsEditableAssetSubNode()
const;
2243 void turnOffAllChildExports();
2246 bool haveLicenseToAccessContents(
2247 OP_Node* opt_specific_child =
nullptr)
const;
2248 bool haveLicenseToAccessParentContents()
const;
2249 bool haveAncestorWithoutFullLicense(
bool ignore_self)
const;
2252 OP_Node *getFirstExecLicenseOnlyAncestor(
2253 bool ignore_self =
true)
const;
2255 OP_Node *getLastExecLicenseOnlyAncestor(
2256 bool ignore_self =
true)
const;
2258 bool isCompiled()
const;
2261 void saveWires(std::ostream &os,
const char *name,
2263 void saveOutputWires(std::ostream &os,
const char *name,
2265 virtual void saveIntrinsicCommand(std::ostream &os,
2269 virtual OP_ERROR saveCommand(std::ostream &os,
2273 const char *netboxname,
2290 void saveParameterFlags(std::ostream &os,
const char *name,
2291 const char *command,
2292 bool (
PRM_Parm::*flag_method)(
int)
const,
2293 bool defaultstoo,
bool reverse,
2296 void saveUserDataCommand(
2297 std::ostream &os,
const char *node_name,
2298 bool omit_version =
false);
2306 virtual RampError rampCommand(
bool remove,
fpreal pos,
float rgba[4]);
2307 RampError rampCommand(
bool remove,
fpreal pos,
float rgba[4],
2313 const char *
path=
nullptr);
2315 const char *name =
nullptr,
int command = 0);
2326 {
return myUserData; }
2328 OP_ERROR saveUserData(std::ostream &os,
const char *
path);
2329 void clearUserData(
bool save_undo);
2333 static const char *internalUserDataPrefix() {
return "sidefx::"; }
2344 template<
typename T>
2357 bool hasBlindData(
const char *key)
const;
2361 bool deleteBlindData(
const char *key);
2368 OP_ERROR saveDataBlocksPacket(std::ostream &os,
2369 const char *path_prefix,
2372 bool clearDataBlocks();
2378 virtual int deleteNodeData(
void *);
2379 void propagateNodeDataDeleted();
2386 void setCachedPythonObject(
2389 bool deleteCachedPythonObject(
const UT_StringRef &key);
2390 void clearCachedPythonObjects();
2394 {
return myCachedPythonObjects; }
2397 const char *
path =
nullptr);
2399 void saveOverrides(std::ostream &os);
2400 void saveOverrides(std::ostream &os,
OP_Node *root,
2403 void saveChildOverrides(std::ostream &os,
OP_Node *root,
2409 const char *parm_name,
2410 int vec_idx)
override;
2412 int vec_idx)
const override;
2415 virtual void removeOverrideDestination(
OP_Node * ) {}
2416 virtual void removeOverrideDestination(
OP_Node * ,
2422 std::ostream *err)
const override;
2428 OP_ERROR executeHscriptScript(
const char *script,
2430 OP_ERROR executePythonScript(
const char *script,
2433 void addPythonNodeError(
const PY_Result &py_result);
2435 void saveInputs(std::ostream &os,
bool compile_basic);
2438 const char *
path =
nullptr,
2439 bool named =
false);
2440 void saveNamedInputs(std::ostream &os,
bool compile_basic);
2441 void saveNamedOutputs(std::ostream &os);
2442 bool loadNamedOutputs(
2444 const char *
path =
nullptr);
2455 void saveEditableInputData(std::ostream &os)
const;
2477 virtual void saveDialogScriptExtraInfo(std::ostream &os);
2493 int &op_id,
fpreal &op_time,
2495 static int findOpFramePair(
const char *
path,
int &op_id,
2499 static void buildXformOrder(
int trs,
int xyz,
2502 static const UT_XformOrder& buildXformOrder(
int trs,
int xyz );
2525 fpreal pivot_rz,
bool inverse =
false);
2533 fpreal pivot_rz,
bool inverse =
false);
2535 static void buildXform(
int trs,
int xyz,
2536 float tx,
float ty,
float tz,
2537 float rx,
float ry,
float rz,
2538 float sx,
float sy,
float sz,
2539 float px,
float py,
float pz,
2541 static void buildXform(
int trs,
int xyz,
2542 double tx,
double ty,
double tz,
2543 double rx,
double ry,
double rz,
2544 double sx,
double sy,
double sz,
2545 double px,
double py,
double pz,
2547 static void buildXform(
int trs,
int xyz,
2548 float tx,
float ty,
float tz,
2549 float rx,
float ry,
float rz,
2550 float sx,
float sy,
float sz,
2553 static void buildXform(
int trs,
int xyz,
2554 double tx,
double ty,
double tz,
2555 double rx,
double ry,
double rz,
2556 double sx,
double sy,
double sz,
2559 static void buildXform(
int trs,
int xyz,
2560 float tx,
float ty,
float tz,
2561 float rx,
float ry,
float rz,
2562 float sx,
float sy,
float sz,
2563 float s_xy,
float s_xz,
float s_yz,
2564 float px,
float py,
float pz,
2566 static void buildXform(
int trs,
int xyz,
2567 double tx,
double ty,
double tz,
2568 double rx,
double ry,
double rz,
2569 double sx,
double sy,
double sz,
2570 double s_xy,
double s_xz,
double s_yz,
2571 double px,
double py,
double pz,
2573 static void buildXform(
int trs,
int xyz,
2574 float tx,
float ty,
float tz,
2575 float rx,
float ry,
float rz,
2576 float sx,
float sy,
float sz,
2577 float s_xy,
float s_xz,
float s_yz,
2580 static void buildXform(
int trs,
int xyz,
2581 double tx,
double ty,
double tz,
2582 double rx,
double ry,
double rz,
2583 double sx,
double sy,
double sz,
2584 double s_xy,
double s_xz,
double s_yz,
2587 static void buildXform(
2588 const UT_Matrix4F::FullTransformModel &
parms,
2590 static void buildXform(
2591 const UT_Matrix4D::FullTransformModel &
parms,
2593 static void buildXform(
int trs,
2594 float tx,
float ty,
float rz,
2595 float sx,
float sy,
float px,
float py,
2597 static void buildXform(
int trs,
2598 double tx,
double ty,
double rz,
2599 double sx,
double sy,
double px,
double py,
2601 static void buildXform(
int trs,
2602 float tx,
float ty,
float rz,
2603 float sx,
float sy,
float s_xy,
2606 static void buildXform(
int trs,
2607 double tx,
double ty,
double rz,
2608 double sx,
double sy,
double s_xy,
2609 double px,
double py,
2612 virtual int getTranslateParmIndex();
2616 void resolveInputReferences();
2618 static void clearAllPendingUndoFlags();
2622 void saveForUndoInput();
2633 void blockModify(
int on_off,
int propagate = 1);
2635 int isBlockModify()
const;
2636 bool isModifyWaiting()
const;
2637 virtual void propagateEndBlockModify();
2646 fpreal getLastCookTime()
const;
2648 void getLastCookTime(
UT_String &last_cook_time)
const;
2650 void getCookInfo(
UT_String &info)
const;
2657 virtual int isCookingRender()
const {
return 0; }
2658 virtual void setCookingRender(
int val);
2660 virtual void clearInterrupted()
2661 { clearInterruptedImpl(
true); }
2663 {
return flags().getInterrupted(); }
2668 void setRenameConflict()
2669 { myRenameConflict = 1; }
2670 void setRunningCreateScript(
int onoff);
2676 virtual void getInputRes(
int input,
fpreal t,
2683 int group_mask = 1);
2685 virtual int getNumInputsToHash();
2688 void clearHashCodeFlags();
2689 bool isHashCodeBuilt()
const {
return myBuiltHashCode;}
2690 void builtHashCode(
bool b =
true) { myBuiltHashCode =
b; }
2697 void setCreatorState(
const char *s)
2698 { myCreatorState.harden(s); }
2699 const UT_String &getCreatorState()
const {
return myCreatorState; }
2700 void builtExplicitly(
int yn) { myBuiltExplicitly = yn; }
2701 int wasBuiltExplicitly()
const{
return myBuiltExplicitly; }
2703 bool matchesState(
const char *
state)
const;
2711 virtual void changeParmTemplate(
PRM_Template *new_template);
2714 virtual void ensureInputsAndOutputsAreValid();
2718 void connectToInputNode(
OP_Node &inputnode,
2735 static void buildQuadricXform(
UT_Matrix4 &mat,
2736 float tx,
float ty,
float tz,
2737 float sx,
float sy,
float sz,
2739 float rx = 0.0
f,
float ry = 0.0
f,
2743 double tx,
double ty,
double tz,
2744 double sx,
double sy,
double sz,
2746 double rx = 0.0,
double ry = 0.0,
2749 static int buildOpMenu(
2753 int (*do_add)(
OP_Node *) =
nullptr,
2756 int show_subnets = 1,
2757 int expand_subnets = 1,
2758 bool recurse =
false);
2763 static void buildPreDefRulesMenu(
PRM_Name *menu,
2775 static int getNameSerialIndex();
2778 virtual void setMapping(
int idx,
int type,
2779 const char *
label =
nullptr);
2780 virtual int getMapping(
int idx,
const char *&
label)
const;
2788 bool hasComment()
const;
2789 bool hasParmsNotAtFactoryDefault()
const;
2790 bool hasAnimatedParms()
const;
2791 bool hasChopOverriddenParms()
const;
2821 TRAVERSE_DEFAULT = 0x0000,
2822 TRAVERSE_INTO_SUBNETS = 0x0001,
2823 TRAVERSE_REF_INPUTS = 0x0002,
2824 TRAVERSE_ONLY_USED_INPUTS = 0x0004,
2825 TRAVERSE_PASSTHROUGH_INPUTS = 0x0008,
2826 TRAVERSE_EXTRA_INPUTS = 0x0010,
2827 TRAVERSE_SIMULATION_INPUTS = 0x0020,
2828 TRAVERSE_COOKED_INPUT_INDEX_INPUTS = 0x0040,
2830 bool traverseInputs(
bool (*callback)(
OP_Node &,
void *),
2832 TraverseOptions opts,
2835 bool traverseInputs(
bool (*callback)(
const OP_Node &,
void*),
2837 TraverseOptions opts,
2849 bool traverseChildren(
bool (*callback)(
OP_Node &,
void*),
2851 bool recurse_into_subnets);
2855 bool isCooking(
bool include_ancestors)
const;
2859 virtual bool usesFootprint()
const {
return false; }
2861 void getExternalReferences(
2864 bool from_children_too =
true,
2865 bool collapse =
false,
2866 bool check_missing =
false,
2867 bool show_missing_only =
false);
2868 virtual bool getSaveWithVopnets();
2869 virtual void runDelScript();
2872 virtual void preDelete() { }
2876 virtual DOP_Parent *castToDOPParent() {
return nullptr; }
2877 virtual const DOP_Parent *castToDOPParent()
const {
return nullptr; }
2893 *getVopAutoCodeGenerator()
const{
return nullptr; }
2896 virtual void buildVopCodeGenerator() {}
2904 bool create_if_needed=
false)
2914 virtual int beginVopCodeGeneratorUpdate() {
return 0; }
2915 virtual void endVopCodeGeneratorUpdate(
int update_level) {}
2925 int end_parm = INT_MAX,
2926 bool use_parmvop_tag=
true
2928 int buildVexCommandWithDependencies(
OP_Node *owner,
2934 int end_parm = INT_MAX,
2935 bool use_parmvop_tag=
true
2946 static PRM_Name theVexClearParmName;
2957 virtual bool hasVexShaderParameter(
const char *parm_name);
2967 virtual bool getScriptMaterialInfo(
UT_String & mat_info,
2975 virtual const char *getHDASubType()
2980 bool setChannelAlias(
PRM_Parm &parm,
int subindex,
2981 const char *alias_name);
2983 void disconnectAllInputsOutputs(
2985 bool force_disconnect_outputs =
false);
2987 void disconnectAllInputs();
2988 void disconnectAllOutputs();
2991 virtual void notifyParmRenameDependents(
2995 void writeChannel(
CH_Channel *channel, std::ostream &os,
2996 const char *name,
bool frames);
2997 void writeAllChannels(std::ostream &os,
const char *name,
2998 bool frames,
bool dochblock,
3009 const UT_Options *options =
nullptr)
override;
3012 int64 getExtraInputMemoryUsage()
const;
3013 static void printOpMemoryUsageStats(std::ostream &os);
3018 virtual void unscopeChannels(
bool recurse);
3023 virtual void undisplayChannels(
bool recurse);
3028 virtual void unpinChannels(
bool recurse);
3033 virtual void setChannelScope(
const char *
pattern,
3062 bool relative_references =
true)
override;
3064 void clearVersionUserData();
3065 void updateVersionUserData();
3075 void syncNodeVersionIfNeeded(
3077 const char *from_version =
nullptr,
3078 bool update_node_version =
false);
3084 const char *old_version,
3085 const char *current_version,
3086 bool *node_deleted)
override;
3094 bool setGlobalFloatParam(
const char *
param,
3097 bool setGlobalStringParam(
const char *
param,
3098 const char *strvalue,
3103 void beginPropagateModification();
3104 void endPropagateModification();
3107 virtual void getActiveOperatorsDefinedByOTL(
3114 static bool getDoingBulkNotification();
3115 static bool isDirectorDoingBulkNotification();
3120 virtual bool hasDifferentMultiInputs()
const;
3123 virtual bool canCreateNewOpType()
const;
3124 static bool createNewOpType
3128 const char *type_label=
nullptr,
3129 const char *otl_file=
nullptr,
3130 const char *meta_source=
nullptr,
3131 const char *comment=
nullptr,
3133 const char *new_name=
nullptr,
3134 int minimum_inputs=-1,
3135 int maximum_inputs=-1,
3136 bool ignore_external_references=
false,
3137 bool compress_contents=
false,
3139 int *new_node_id=
nullptr,
3140 bool compile_contents =
false,
3141 bool change_node_type =
true,
3142 bool create_backup =
true);
3144 virtual UT_String *getMaterialIconFilename() {
return nullptr; }
3145 virtual void setMaterialIconFilename(
const char * ) {}
3147 virtual bool getMaterialIconAllowRegenerateFlag() {
return true; }
3148 virtual void setMaterialIconAllowRegenerateFlag(
bool) {}
3155 static void startBulkNotifications(
3158 static void endBulkNotifications(
3165 virtual bool willAutoconvertInputType(
OP_InputIdx input_idx);
3171 virtual bool getIsInputVisibleDefault(
OP_InputIdx idx);
3175 bool verifyTemplatesWithParameters()
const;
3180 OP_Input *getNamedInputReferenceConst(
3184 bool mark_used=
false)
const;
3206 bool getUniqueInputNameConst(
3211 bool getUniqueOutputNameConst(
3219 virtual OP_ERROR setNamedIndirectInput(
3222 virtual OP_ERROR setNamedInputReference(
3224 const char *
label,
int,
3239 virtual void onCreated() { }
3241 virtual bool isOrderedInput(
const OP_ConnectorId& input_name)
const;
3249 virtual bool willAutoconvertNamedInputType(
3258 unsigned getInputsArraySize()
3259 {
return myInputs.entries(); }
3262 {
return (getInputsArraySize() > idx) ? 1 : 0; }
3270 bool setLocalVarActive(
bool f)
3272 bool old = myLocalVarActive;
3273 myLocalVarActive =
f;
3278 bool isLocalVarActive()
const
3279 {
return myLocalVarActive; }
3286 void recomputeCompiledHash();
3290 void clearCompiledHash()
3296 { sendEvent(type,
data); }
3298 virtual bool scopedChannelsDirty();
3302 virtual bool getActiveLayerContribution(
const UT_String &track_name,
3308 virtual bool resolveExport(
const PRM_Parm* p,
int subindex,
3314 virtual bool addOrMoveVisualizerToOutput(
int outputidx)
3321 int vec_idx)
const override;
3323 OP_Bundle * getParmBundle(
const char* parm_name,
int vector_index,
3325 const char *
filter,
bool subnet_inclusion);
3329 static const UT_Color &getGlobalDefaultColor();
3335 static fpreal getFlagWidth();
3337 static fpreal getNodeHeight();
3340 static fpreal getNodeButtonWidth();
3342 static fpreal getConnectorHeight();
3349 static bool canDestroyNodes(
OP_Network *src_net,
3363 virtual void getDefaultState(
UT_String &default_state_name);
3383 void clearInputContextOptionDepIfSafe(
3388 virtual bool hasTransformTracks()
const {
return false; }
3401 void getOriginalOperatorTableAndName(
UT_WorkBuffer &name)
const;
3402 void getOriginalOperatorTableAndName(
UT_String &name)
const;
3422 void resolveUnresolvedLoadedInputs();
3426 void finishedLoadingParentNetwork();
3430 static void bumpNameSerialIndex();
3434 void beginScriptBlockingDel()
3435 { myScriptsBlockingDelCount += 1; }
3436 void endScriptBlockingDel()
3437 { myScriptsBlockingDelCount -= 1; }
3441 { myLegacyConnectingInputIndex =
index; }
3445 virtual void clearAndDestroy();
3448 virtual void clearCache();
3450 void clearInterruptedImpl(
bool allow_recook);
3465 virtual void doOverridePreCook() { }
3466 virtual void doOverridePostCook() { }
3471 int getSourceCount()
const;
3472 virtual int bumpSourceCount(
int d);
3479 virtual OP_ERROR saveIntrinsic(std::ostream &os,
3482 const char *path_prefix =
"",
3484 OP_ERROR saveUserDataPacket(std::ostream &os,
3485 const char *path_prefix,
3488 bool loadIntrinsicParentUneditable(
3490 const char *
path =
nullptr);
3493 const char *
path =
nullptr);
3494 virtual bool loadPacket(
UT_IStream &is,
short class_id,
3495 short sig,
const char *
path=
nullptr);
3496 virtual bool loadPacket(
UT_IStream &is,
const char *token,
3497 const char *
path=
nullptr);
3500 const char *
path =
nullptr);
3507 const char *
path =
nullptr);
3510 virtual void loadStart();
3511 virtual void loadFinished();
3515 void loadContentsSection();
3522 void setMatchesOTLDefinition(
int matches);
3524 virtual const char *getFileExtension(
int binary)
const = 0;
3525 virtual const char *getDataFileExtension(
int binary)
const;
3541 virtual void checkTimeDependencies(
int do_parms=1,
3547 virtual void checkContextOptionDependencies(
int do_parms);
3554 int haveSeenDataModification(
exint modification_id);
3564 virtual int propagateModification(
OP_Node *by_whom,
3571 OP_Cache * getCookCache() {
return &myCache; }
3573 static void cmd_locate(
CMD_Args &);
3575 virtual void saveFlagsForUndo();
3576 void saveForUndoLayout();
3578 static void saveForUndoDelete(
OP_NodeList &nodes);
3581 void clearDependency();
3594 bool dirtyForTimeChange(
fpreal t)
3596 if (isCookedTime(t))
3610 virtual void cloneFromProxyRefNode(
OP_Network *proxy );
3615 bool hasOpDependents()
3616 {
return !myOpDependents.isEmpty(); }
3617 virtual int hasProxyRefNodes()
const
3619 virtual void moveProxyRefNodes(
OP_Network * ) { }
3620 void clearOpReferences();
3621 virtual void rebuildOpDependents(
bool proxy_only );
3624 virtual int removeOpDependent(
3627 virtual int removeOpDependent(
3641 virtual void moveDependencies(
OP_Node *from_node );
3647 void notifyRenameDependents(
const UT_String &full_from );
3648 virtual void notifyRenameDependents(
const UT_String &full_from,
3655 void notifyRenameReferences(
const UT_String &full_from );
3656 virtual void notifyRenameReferences(
const UT_String &full_from,
3660 virtual void handleOpDependency(
int referenced_op_id,
3664 const char *old_fullpath,
3665 const char *old_cwd,
3666 const char *old_chan_name );
3667 virtual void buildParmDependency(
int parm_index );
3669 void addOpNameReference(
3673 void addChannelNameReference(
3685 void removeOpReference(
3688 void removeOpReference(
3707 bool changeOpPathRef(
UT_String &value_str,
3708 const char *new_fullpath,
3709 const char *old_fullpath,
3710 const char *old_cwd,
3711 const char *new_cwd );
3715 static bool getStringParmOpPath(
3718 void handleStringParmOpPathDependency(
3719 int parm_index,
int vi,
3720 const char *new_fullpath,
3721 const char *old_fullpath,
const char *old_cwd );
3724 void notifyNodeDeletion();
3728 virtual void nodeDeleted(
OP_Node *op,
int propagate=1);
3730 void startCookTimer(
const OP_Context &context);
3731 void stopCookTimer(
const OP_Context &context);
3733 virtual const char *getCookTimerLabel(
const OP_Context &context)
const;
3749 virtual bool isInputConnectedInsideSubnet(
3751 virtual bool isNamedInputConnectedInsideSubnet(
3755 virtual void nodeUnlocked() { ; }
3758 virtual void setUniqueId(
int id);
3759 void changeOpDependentUniqueId(
int old_id,
int new_id );
3760 void changeOpReferenceUniqueId(
int old_id,
int new_id );
3761 virtual void clearUniqueId();
3763 void setAllowBuildDependencies(
int yesno )
3764 { myAllowBuildDependencies = yesno; }
3765 int allowBuildDependencies()
const
3766 {
return myAllowBuildDependencies; }
3770 void evaluateAllParms(
fpreal t);
3775 virtual void getMyExternalReferences(
3778 bool collapse =
false,
3779 bool check_missing =
false,
3780 bool show_missing_only=
false);
3783 const char *stringparm,
3784 int framestart,
int frameend,
3787 bool show_only_missing,
3793 virtual void getDescriptiveParmName(
UT_String &str)
const;
3798 virtual void getDescriptiveName(
UT_String &str)
const;
3801 void dirtyDescriptiveNameCache();
3804 virtual bool canDestroyNode();
3810 virtual bool cookedDataUsesAllParameters()
const
3814 virtual bool cookedDataNeedsErrors()
const
3822 virtual bool cookDataForAnyOutput()
const
3827 bool getIsRunningInCreateScript()
const;
3833 virtual void refreshRepresentativeNode(
OP_Node &changed_child);
3837 virtual void setupConnectorsAfterLoad();
3844 bool isCookedTime(
fpreal t)
const
3846 return dataMicroNodeConst()
3847 .isEqualToLastUpdateTime(t);
3852 virtual void dumpMicroNodes(
3855 int indent_level)
const;
3860 int myLastGroupMask;
3863 int myParmLastGroupMask;
3879 void updateErrorSeverity();
3882 virtual void onInputAllocated(
OP_Input* new_input,
3886 void checkConnectorsConsistency();
3893 void renameInput(
OP_Input* input,
int new_id);
3895 void notifyChannelOpDependents(
PRM_Parm * in_parm,
int vecid);
3901 void updateSpareParmTemplates(
3903 bool leavedefaultsunchanged)
override;
3905 bool doDebugConsistencyCheck();
3912 OP_ERROR saveGroupMemberships(std::ostream &os,
3914 const char *path_prefix);
3916 const char*
path =
nullptr);
3919 OP_ERROR saveNetworkBox(std::ostream &os,
3921 const char *path_prefix);
3925 const char *
path =
nullptr);
3929 void saveForUndoComment();
3930 void saveForUndoDelScript();
3933 const UT_BitArray &getGroups()
const {
return myGroups; }
3946 bool isOutputIdxWithinMax(
OP_OutputIdx output_idx)
const;
3948 void setInterrupted();
3950 int findAncestor(
const OP_Node *node)
const;
3951 int findDataAncestor(
const OP_Node *node)
const;
3952 void clearRecursionBit()
const;
3954 void initializeExpressions()
const;
3956 void clearOutputs();
3960 static bool getMicroNodesFromRef(
3964 static void traverseInputsAddInputs(
3968 TraverseOptions opts,
3970 bool include_parmlist);
3973 int addOpDependent(
int op_id,
3978 void updateRenameDependent(
OP_Node *dependent,
3979 const char *old_cwd,
3986 void getExistingOpReferencesImpl(
3987 OP_NodeList &refs,
bool include_descendants)
const;
3988 void getExistingOpDependentsImpl(
3989 OP_NodeList &deps,
bool include_descendants)
const;
3991 void buildScriptOpDependencies();
3992 void changeScriptOpRef(
const char *new_fullpath,
3993 const char *old_path,
3994 const char *old_cwd );
3995 static void changeScriptCB(
UT_String &str,
3996 const char *token_start,
3997 const char *&ch,
void *userdata );
4011 char *childpref,
int childpreflen,
4019 bool internalSetGlobalParam(
const char *
param,
4023 bool internalSetPicked(
bool on_off,
4024 bool propagate_parent_event,
4031 virtual void removeInputFromMapping(
OP_InputIdx idx);
4038 uint32 computeCompiledHash()
const;
4042 void addDeprecationWarningsIfAny();
4045 int getConnectorNextId()
const;
4047 bool computeCompiledStatus()
const;
4049 bool isOperatorThreadSafe()
const;
4051 void internalSyncDelayedOTL();
4057 virtual bool isSelectionOwnerType()
const
4064 static void addExtraInputs(
4069 static void addExtraInput(
OP_Node &
source,
int source_pi,
int source_vi,
4070 OP_Node &target,
int target_pi,
int target_vi
4073 static bool getMicroNodesFromRef(
4077 static bool getMicroNodesFromRef(
4078 OP_Node &op,
int parm_i,
int vec_i,
4090 virtual bool isUsingCurrentFrameForVexTransformContext()
const {
return true;}
4095 exint myLastErrorVersion;
4119 EventMicroNodesPtr myEventMicroNodes;
4131 int myScriptsBlockingDelCount;
4133 int myNextIdOverride;
4134 unsigned myActiveInputIndex;
4142 unsigned int myRenameConflict : 1,
4143 myCookedForRender : 1,
4144 myModifyWaiting : 1,
4145 myBuiltExplicitly : 1,
4146 myAllowBuildDependencies : 1,
4148 myRunningCreateScript : 1,
4149 myRunningDelScript : 1,
4150 myAlreadyRunDelScript : 1,
4151 myMatchesOTLDefinition : 1,
4152 myLoadCookedDataError : 1,
4153 myBuiltHashCode : 1,
4154 myIsProxyRefNode : 1,
4155 myInhibitInputConsolidation : 1,
4161 myLocalVarActive : 1,
4163 mySyncingDelayedOTL : 1;
4165 mutable bool myRecursionFlag;
4168 static int thePropagateLevel;
4208 bool myCachedDescriptiveNameDirty;
4213 bool myLoadedNamedInputs;
4220 int myChildErrorSeverityTimestamp;
4226 static int makeUniqueId(
OP_Node *node);
4228 static bool *theCheckConnectionConsistency;
4229 static int theUniqueId;
4230 static int theUniqueSize;
4231 static OP_Node **theUniqueNodes;
4232 static bool theDoingBulkNotification;
4244 friend class OP_UndoCreate;
4245 friend class OP_UndoDelete;
4246 friend class OP_UndoInput;
4247 friend class OP_UndoSpareParm;
4248 friend class OP_UndoUserData;
4250 friend class op_MicroNodeDirtied;
4268 static inline size_t
4277 ::memcpy(buffer, s.
c_str(), len);
4289 #define CAST_INSTANTIATE(PREFIX) \
4290 inline static PREFIX##_Node *CAST_##PREFIX##NODE(OP_Node *op) \
4292 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4295 inline static const PREFIX##_Node *CAST_##PREFIX##NODE(const OP_Node *op) \
4297 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4323 #undef CAST_INSTANTIATE
4326 #undef INSTANTIATE_FINDNODE_FUNCTIONS
4327 #undef INSTANTIATE_CASTNODE_FUNCTIONS
4328 #undef INSTANTIATE_FOR_ALL_NODE_TYPES
4341 bool into_subnets =
false,
4342 bool through_dots =
true,
4347 struct IncludeSpareTag {};
4351 bool into_subnets =
false,
4352 bool through_dots =
true,
4362 using Parent::rbegin;
4365 using Parent::operator();
4366 using Parent::entries;
4381 bool into_subnets =
false,
4382 bool through_dots =
true,
4387 struct IncludeSpareTag {};
4391 bool into_subnets =
false,
4392 bool through_dots =
true,
4400 const_reverse_iterator
end()
const {
return Parent::rend(); }
4409 using Parent::operator();
4410 using Parent::entries;
4424 bool isValid()
const
4445 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.
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
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
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.