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;
3013 bool triggerSoloParmCallback(
3021 int64 getExtraInputMemoryUsage()
const;
3022 static void printOpMemoryUsageStats(std::ostream &os);
3027 virtual void unscopeChannels(
bool recurse);
3032 virtual void undisplayChannels(
bool recurse);
3037 virtual void unpinChannels(
bool recurse);
3042 virtual void setChannelScope(
const char *
pattern,
3071 bool relative_references =
true)
override;
3073 void clearVersionUserData();
3074 void updateVersionUserData();
3084 void syncNodeVersionIfNeeded(
3086 const char *from_version =
nullptr,
3087 bool update_node_version =
false);
3093 const char *old_version,
3094 const char *current_version,
3095 bool *node_deleted)
override;
3103 bool setGlobalFloatParam(
const char *
param,
3106 bool setGlobalStringParam(
const char *
param,
3107 const char *strvalue,
3112 void beginPropagateModification();
3113 void endPropagateModification();
3116 virtual void getActiveOperatorsDefinedByOTL(
3123 static bool getDoingBulkNotification();
3124 static bool isDirectorDoingBulkNotification();
3129 virtual bool hasDifferentMultiInputs()
const;
3132 virtual bool canCreateNewOpType()
const;
3133 static bool createNewOpType
3137 const char *type_label=
nullptr,
3138 const char *otl_file=
nullptr,
3139 const char *meta_source=
nullptr,
3140 const char *comment=
nullptr,
3142 const char *new_name=
nullptr,
3143 int minimum_inputs=-1,
3144 int maximum_inputs=-1,
3145 bool ignore_external_references=
false,
3146 bool compress_contents=
false,
3148 int *new_node_id=
nullptr,
3149 bool compile_contents =
false,
3150 bool change_node_type =
true,
3151 bool create_backup =
true);
3153 virtual UT_String *getMaterialIconFilename() {
return nullptr; }
3154 virtual void setMaterialIconFilename(
const char * ) {}
3156 virtual bool getMaterialIconAllowRegenerateFlag() {
return true; }
3157 virtual void setMaterialIconAllowRegenerateFlag(
bool) {}
3164 static void startBulkNotifications(
3167 static void endBulkNotifications(
3174 virtual bool willAutoconvertInputType(
OP_InputIdx input_idx);
3180 virtual bool getIsInputVisibleDefault(
OP_InputIdx idx);
3184 bool verifyTemplatesWithParameters()
const;
3189 OP_Input *getNamedInputReferenceConst(
3193 bool mark_used=
false)
const;
3215 bool getUniqueInputNameConst(
3220 bool getUniqueOutputNameConst(
3228 virtual OP_ERROR setNamedIndirectInput(
3231 virtual OP_ERROR setNamedInputReference(
3233 const char *
label,
int,
3248 virtual void onCreated() { }
3250 virtual bool isOrderedInput(
const OP_ConnectorId& input_name)
const;
3258 virtual bool willAutoconvertNamedInputType(
3267 unsigned getInputsArraySize()
3268 {
return myInputs.entries(); }
3271 {
return (getInputsArraySize() > idx) ? 1 : 0; }
3279 bool setLocalVarActive(
bool f)
3281 bool old = myLocalVarActive;
3282 myLocalVarActive =
f;
3287 bool isLocalVarActive()
const
3288 {
return myLocalVarActive; }
3295 void recomputeCompiledHash();
3299 void clearCompiledHash()
3305 { sendEvent(type,
data); }
3307 virtual bool scopedChannelsDirty();
3311 virtual bool getActiveLayerContribution(
const UT_String &track_name,
3317 virtual bool resolveExport(
const PRM_Parm* p,
int subindex,
3323 virtual bool addOrMoveVisualizerToOutput(
int outputidx)
3330 int vec_idx)
const override;
3332 OP_Bundle * getParmBundle(
const char* parm_name,
int vector_index,
3334 const char *
filter,
bool subnet_inclusion);
3338 static const UT_Color &getGlobalDefaultColor();
3344 static fpreal getFlagWidth();
3346 static fpreal getNodeHeight();
3349 static fpreal getNodeButtonWidth();
3351 static fpreal getConnectorHeight();
3358 static bool canDestroyNodes(
OP_Network *src_net,
3372 virtual void getDefaultState(
UT_String &default_state_name);
3392 void clearInputContextOptionDepIfSafe(
3397 virtual bool hasTransformTracks()
const {
return false; }
3410 void getOriginalOperatorTableAndName(
UT_WorkBuffer &name)
const;
3411 void getOriginalOperatorTableAndName(
UT_String &name)
const;
3431 void resolveUnresolvedLoadedInputs();
3435 void finishedLoadingParentNetwork();
3439 static void bumpNameSerialIndex();
3443 void beginScriptBlockingDel()
3444 { myScriptsBlockingDelCount += 1; }
3445 void endScriptBlockingDel()
3446 { myScriptsBlockingDelCount -= 1; }
3450 { myLegacyConnectingInputIndex =
index; }
3454 virtual void clearAndDestroy();
3457 virtual void clearCache();
3459 void clearInterruptedImpl(
bool allow_recook);
3474 virtual void doOverridePreCook() { }
3475 virtual void doOverridePostCook() { }
3480 int getSourceCount()
const;
3481 virtual int bumpSourceCount(
int d);
3488 virtual OP_ERROR saveIntrinsic(std::ostream &os,
3491 const char *path_prefix =
"",
3493 OP_ERROR saveUserDataPacket(std::ostream &os,
3494 const char *path_prefix,
3497 bool loadIntrinsicParentUneditable(
3499 const char *
path =
nullptr);
3502 const char *
path =
nullptr);
3503 virtual bool loadPacket(
UT_IStream &is,
short class_id,
3504 short sig,
const char *
path=
nullptr);
3505 virtual bool loadPacket(
UT_IStream &is,
const char *token,
3506 const char *
path=
nullptr);
3509 const char *
path =
nullptr);
3516 const char *
path =
nullptr);
3519 virtual void loadStart();
3520 virtual void loadFinished();
3524 void loadContentsSection();
3531 void setMatchesOTLDefinition(
int matches);
3533 virtual const char *getFileExtension(
int binary)
const = 0;
3534 virtual const char *getDataFileExtension(
int binary)
const;
3550 virtual void checkTimeDependencies(
int do_parms=1,
3556 virtual void checkContextOptionDependencies(
int do_parms);
3563 int haveSeenDataModification(
exint modification_id);
3573 virtual int propagateModification(
OP_Node *by_whom,
3580 OP_Cache * getCookCache() {
return &myCache; }
3582 static void cmd_locate(
CMD_Args &);
3584 virtual void saveFlagsForUndo();
3585 void saveForUndoLayout();
3587 static void saveForUndoDelete(
OP_NodeList &nodes);
3590 void clearDependency();
3603 bool dirtyForTimeChange(
fpreal t)
3605 if (isCookedTime(t))
3619 virtual void cloneFromProxyRefNode(
OP_Network *proxy );
3624 bool hasOpDependents()
3625 {
return !myOpDependents.isEmpty(); }
3626 virtual int hasProxyRefNodes()
const
3628 virtual void moveProxyRefNodes(
OP_Network * ) { }
3629 void clearOpReferences();
3630 virtual void rebuildOpDependents(
bool proxy_only );
3633 virtual int removeOpDependent(
3636 virtual int removeOpDependent(
3650 virtual void moveDependencies(
OP_Node *from_node );
3656 void notifyRenameDependents(
const UT_String &full_from );
3657 virtual void notifyRenameDependents(
const UT_String &full_from,
3664 void notifyRenameReferences(
const UT_String &full_from );
3665 virtual void notifyRenameReferences(
const UT_String &full_from,
3669 virtual void handleOpDependency(
int referenced_op_id,
3673 const char *old_fullpath,
3674 const char *old_cwd,
3675 const char *old_chan_name );
3676 virtual void buildParmDependency(
int parm_index );
3678 void addOpNameReference(
3682 void addChannelNameReference(
3694 void removeOpReference(
3697 void removeOpReference(
3716 bool changeOpPathRef(
UT_String &value_str,
3717 const char *new_fullpath,
3718 const char *old_fullpath,
3719 const char *old_cwd,
3720 const char *new_cwd );
3724 static bool getStringParmOpPath(
3727 void handleStringParmOpPathDependency(
3728 int parm_index,
int vi,
3729 const char *new_fullpath,
3730 const char *old_fullpath,
const char *old_cwd );
3733 void notifyNodeDeletion();
3737 virtual void nodeDeleted(
OP_Node *op,
int propagate=1);
3739 void startCookTimer(
const OP_Context &context);
3740 void stopCookTimer(
const OP_Context &context);
3742 virtual const char *getCookTimerLabel(
const OP_Context &context)
const;
3758 virtual bool isInputConnectedInsideSubnet(
3760 virtual bool isNamedInputConnectedInsideSubnet(
3764 virtual void nodeUnlocked() { ; }
3767 virtual void setUniqueId(
int id);
3768 void changeOpDependentUniqueId(
int old_id,
int new_id );
3769 void changeOpReferenceUniqueId(
int old_id,
int new_id );
3770 virtual void clearUniqueId();
3772 void setAllowBuildDependencies(
int yesno )
3773 { myAllowBuildDependencies = yesno; }
3774 int allowBuildDependencies()
const
3775 {
return myAllowBuildDependencies; }
3779 void evaluateAllParms(
fpreal t);
3784 virtual void getMyExternalReferences(
3787 bool collapse =
false,
3788 bool check_missing =
false,
3789 bool show_missing_only=
false);
3792 const char *stringparm,
3793 int framestart,
int frameend,
3796 bool show_only_missing,
3802 virtual void getDescriptiveParmName(
UT_String &str)
const;
3807 virtual void getDescriptiveName(
UT_String &str)
const;
3810 void dirtyDescriptiveNameCache();
3813 virtual bool canDestroyNode();
3819 virtual bool cookedDataUsesAllParameters()
const
3823 virtual bool cookedDataNeedsErrors()
const
3831 virtual bool cookDataForAnyOutput()
const
3836 bool getIsRunningInCreateScript()
const;
3842 virtual void refreshRepresentativeNode(
OP_Node &changed_child);
3846 virtual void setupConnectorsAfterLoad();
3853 bool isCookedTime(
fpreal t)
const
3855 return dataMicroNodeConst()
3856 .isEqualToLastUpdateTime(t);
3861 virtual void dumpMicroNodes(
3864 int indent_level)
const;
3869 int myLastGroupMask;
3872 int myParmLastGroupMask;
3888 void updateErrorSeverity();
3891 virtual void onInputAllocated(
OP_Input* new_input,
3895 void checkConnectorsConsistency();
3902 void renameInput(
OP_Input* input,
int new_id);
3904 void notifyChannelOpDependents(
PRM_Parm * in_parm,
int vecid);
3910 void updateSpareParmTemplates(
3912 bool leavedefaultsunchanged)
override;
3914 bool doDebugConsistencyCheck();
3921 OP_ERROR saveGroupMemberships(std::ostream &os,
3923 const char *path_prefix);
3925 const char*
path =
nullptr);
3928 OP_ERROR saveNetworkBox(std::ostream &os,
3930 const char *path_prefix);
3934 const char *
path =
nullptr);
3938 void saveForUndoComment();
3939 void saveForUndoDelScript();
3942 const UT_BitArray &getGroups()
const {
return myGroups; }
3955 bool isOutputIdxWithinMax(
OP_OutputIdx output_idx)
const;
3957 void setInterrupted();
3959 int findAncestor(
const OP_Node *node)
const;
3960 int findDataAncestor(
const OP_Node *node)
const;
3961 void clearRecursionBit()
const;
3963 void initializeExpressions()
const;
3965 void clearOutputs();
3969 static bool getMicroNodesFromRef(
3973 static void traverseInputsAddInputs(
3977 TraverseOptions opts,
3979 bool include_parmlist);
3982 int addOpDependent(
int op_id,
3987 void updateRenameDependent(
OP_Node *dependent,
3988 const char *old_cwd,
3995 void getExistingOpReferencesImpl(
3996 OP_NodeList &refs,
bool include_descendants)
const;
3997 void getExistingOpDependentsImpl(
3998 OP_NodeList &deps,
bool include_descendants)
const;
4000 void buildScriptOpDependencies();
4001 void changeScriptOpRef(
const char *new_fullpath,
4002 const char *old_path,
4003 const char *old_cwd );
4004 static void changeScriptCB(
UT_String &str,
4005 const char *token_start,
4006 const char *&ch,
void *userdata );
4020 char *childpref,
int childpreflen,
4028 bool internalSetGlobalParam(
const char *
param,
4032 bool internalSetPicked(
bool on_off,
4033 bool propagate_parent_event,
4040 virtual void removeInputFromMapping(
OP_InputIdx idx);
4047 uint32 computeCompiledHash()
const;
4051 void addDeprecationWarningsIfAny();
4054 int getConnectorNextId()
const;
4056 bool computeCompiledStatus()
const;
4058 bool isOperatorThreadSafe()
const;
4060 void internalSyncDelayedOTL();
4066 virtual bool isSelectionOwnerType()
const
4073 static void addExtraInputs(
4078 static void addExtraInput(
OP_Node &
source,
int source_pi,
int source_vi,
4079 OP_Node &target,
int target_pi,
int target_vi
4082 static bool getMicroNodesFromRef(
4086 static bool getMicroNodesFromRef(
4087 OP_Node &op,
int parm_i,
int vec_i,
4099 virtual bool isUsingCurrentFrameForVexTransformContext()
const {
return true;}
4104 exint myLastErrorVersion;
4128 EventMicroNodesPtr myEventMicroNodes;
4140 int myScriptsBlockingDelCount;
4142 int myNextIdOverride;
4143 unsigned myActiveInputIndex;
4151 unsigned int myRenameConflict : 1,
4152 myCookedForRender : 1,
4153 myModifyWaiting : 1,
4154 myBuiltExplicitly : 1,
4155 myAllowBuildDependencies : 1,
4157 myRunningCreateScript : 1,
4158 myRunningDelScript : 1,
4159 myAlreadyRunDelScript : 1,
4160 myMatchesOTLDefinition : 1,
4161 myLoadCookedDataError : 1,
4162 myBuiltHashCode : 1,
4163 myIsProxyRefNode : 1,
4164 myInhibitInputConsolidation : 1,
4170 myLocalVarActive : 1,
4172 mySyncingDelayedOTL : 1;
4174 mutable bool myRecursionFlag;
4177 static int thePropagateLevel;
4217 bool myCachedDescriptiveNameDirty;
4222 bool myLoadedNamedInputs;
4229 int myChildErrorSeverityTimestamp;
4235 static int makeUniqueId(
OP_Node *node);
4237 static bool *theCheckConnectionConsistency;
4238 static int theUniqueId;
4239 static int theUniqueSize;
4240 static OP_Node **theUniqueNodes;
4241 static bool theDoingBulkNotification;
4253 friend class OP_UndoCreate;
4254 friend class OP_UndoDelete;
4255 friend class OP_UndoInput;
4256 friend class OP_UndoSpareParm;
4257 friend class OP_UndoUserData;
4259 friend class op_MicroNodeDirtied;
4277 static inline size_t
4286 ::memcpy(buffer, s.
c_str(), len);
4298 #define CAST_INSTANTIATE(PREFIX) \
4299 inline static PREFIX##_Node *CAST_##PREFIX##NODE(OP_Node *op) \
4301 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4304 inline static const PREFIX##_Node *CAST_##PREFIX##NODE(const OP_Node *op) \
4306 return ((op) ? (op)->castTo##PREFIX##Node() : 0); \
4332 #undef CAST_INSTANTIATE
4335 #undef INSTANTIATE_FINDNODE_FUNCTIONS
4336 #undef INSTANTIATE_CASTNODE_FUNCTIONS
4337 #undef INSTANTIATE_FOR_ALL_NODE_TYPES
4350 bool into_subnets =
false,
4351 bool through_dots =
true,
4356 struct IncludeSpareTag {};
4360 bool into_subnets =
false,
4361 bool through_dots =
true,
4371 using Parent::rbegin;
4374 using Parent::operator();
4375 using Parent::entries;
4390 bool into_subnets =
false,
4391 bool through_dots =
true,
4396 struct IncludeSpareTag {};
4400 bool into_subnets =
false,
4401 bool through_dots =
true,
4409 const_reverse_iterator
end()
const {
return Parent::rend(); }
4418 using Parent::operator();
4419 using Parent::entries;
4433 bool isValid()
const
4454 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.