HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HOM_OpNode.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * COMMENTS:
7  */
8 
9 #ifndef __HOM_OpNode_h__
10 #define __HOM_OpNode_h__
11 
12 #include "HOM_API.h"
13 #include "HOM_Node.h"
14 
15 SWIGOUT(%rename(OpNode) HOM_OpNode;)
16 
17 class HOM_API HOM_OpNode : public HOM_Node
18 {
19 public:
21  : HOM_Node()
22  { HOM_CONSTRUCT_OBJECT(this) }
23  HOM_OpNode(const HOM_OpNode &node)
24  : HOM_Node(node)
26  { HOM_CONSTRUCT_OBJECT(this) }
27  ~HOM_OpNode() override
28  { HOM_DESTRUCT_OBJECT(this) }
29 
30  virtual std::vector<std::string> _getArgumentAutoComplete(
31  const char *method_name, const char *arguments,
32  bool meta_info_only = false) = 0;
33 
34  int __hash__() override = 0;
35  std::string __repr__() override = 0;
36 
37  // We need a quick way to get the OP_OpTypeId from C++ code so we know
38  // which subclass of HOM_Node we should cast to, so that's why
39  // opTypeIdAsInt() exists.
40  SWIGOUT(%ignore opTypeIdAsInt;)
41  virtual int opTypeIdAsInt() = 0;
42  // Further, we need a quick way to get the OBJ_OBJECT_TYPE from C++ code
43  // so we know which subclass of HOM_ObjNode we should cast to.
44  // That's why objTypeAsInt() exists.
45  SWIGOUT(%ignore objTypeAsInt;)
46  virtual int objTypeAsInt() = 0;
47 
48  virtual std::string creatorState() = 0;
49  virtual void setCreatorState(const char *state) = 0;
50 
51  virtual bool isBuiltExplicitly() = 0;
52  virtual void setBuiltExplicitly(bool built_explicitly) = 0;
53 
54  virtual HOM_EnumValue *expressionLanguage() = 0;
55  virtual void setExpressionLanguage(HOM_EnumValue &language) = 0;
56 
57  SWIGOUT(%newobject parm;)
58  virtual HOM_Parm *parm(const char* parm_path) = 0;
59 
60  SWIGOUT(%newobject parmTuple;)
61  virtual HOM_ParmTuple *parmTuple(const char* parm_path) = 0;
62 
63  SWIGOUT(%kwargs globParms;)
64  virtual std::vector<HOM_ElemPtr<HOM_Parm> > globParms(
65  const char *pattern, bool ignore_case=false,
66  bool search_label=false,
67  bool single_pattern=false) = 0;
68 
69  virtual std::vector<HOM_ElemPtr<HOM_Parm> > parms() = 0;
70 
71  virtual std::vector<HOM_ElemPtr<HOM_Parm> > parmsReferencingThis() = 0;
72 
73  virtual std::vector<HOM_ElemPtr<HOM_ParmTuple> > parmTuples() = 0;
74 
75  virtual std::vector<HOM_ElemPtr<HOM_Parm> > spareParms() = 0;
76  virtual void removeSpareParms() = 0;
77 
78  virtual void revertParmInterface() = 0;
79 
80  virtual void syncNodeVersionIfNeeded(const std::string &from_version) = 0;
81 
82  SWIGOUT(%kwargs setParmTemplateGroup;)
83  virtual void setParmTemplateGroup(
84  HOM_ParmTemplateGroup &parm_template_group,
85  bool rename_conflicting_parms=false) = 0;
86 
87  virtual std::vector<HOM_ElemPtr<HOM_ParmTuple> > parmTuplesInFolder(
88  const std::vector<std::string> &folder_names) = 0;
89 
90  virtual std::vector<HOM_ElemPtr<HOM_Parm> > parmsInFolder(
91  const std::vector<std::string> &folder_names) = 0;
92 
93  SWIGOUT(%newobject parmTemplateGroup;)
94  virtual HOM_ParmTemplateGroup *parmTemplateGroup() = 0;
95 
96  virtual std::vector<std::string> localVariables() = 0;
97  virtual std::vector<std::string> localAttributes() = 0;
98 
99  SWIGOUT(%kwargs reorderChild;)
100  virtual void reorderChild(int src, int dest) = 0;
101 
102  // Dependency information.
103  SWIGOUT(%kwargs references;)
104  virtual std::vector<HOM_ElemPtr<HOM_Node> >
105  references(bool include_children=true) = 0;
106  SWIGOUT(%kwargs dependents;)
107  virtual std::vector<HOM_ElemPtr<HOM_Node> >
108  dependents(bool include_children=true) = 0;
109  SWIGOUT(%kwargs fileReferences;)
110  SWIGOUT(%newobject fileReferences;)
111  virtual std::vector<std::pair<HOM_ElemPtr<HOM_Parm>, std::string> >
112  fileReferences(bool recurse = true,
113  const char* project_dir_variable = "HIP",
114  bool include_all_refs = true) = 0;
115  virtual bool isTimeDependent(bool for_last_cook=false) = 0;
116 
117  // If propagate==true, unlock will be propagated to ancestors
118  SWIGOUT(%kwargs allowEditingOfContents;)
119  virtual void allowEditingOfContents(bool propagate=false) = 0;
120  virtual void matchCurrentDefinition() = 0;
121  virtual bool matchesCurrentDefinition() = 0;
122 
123  virtual void syncDelayedDefinition() = 0;
124  virtual bool isDelayedDefinition() = 0;
125 
126  SWIGOUT(%kwargs parmAliases;)
127  virtual std::map<HOM_ElemPtr<HOM_Parm>, std::string>
128  parmAliases(bool recurse=false) = 0;
129 
130  virtual void clearParmAliases() = 0;
131 
132  SWIGOUT(%kwargs createCompiledDigitalAsset);
133  virtual void createCompiledDigitalAsset(const char *name=NULL,
134  const char *hda_file_name=NULL, const char *description=NULL) = 0;
135  virtual bool isInsideLockedHDA() = 0;
136  virtual bool isEditableInsideLockedHDA() = 0;
137  virtual bool isLockedHDA() = 0;
138  virtual bool isCompiled() = 0;
139  virtual bool isMaterialManager() = 0;
140 
141  virtual std::string outputLabel(int output_index) = 0;
142 
143  virtual int outputForViewFlag() = 0;
144  virtual void setOutputForViewFlag(int output) = 0;
145  SWIGOUT(%newobject hdaModule;)
146  virtual HOM_HDAModule *hdaModule() = 0;
147  SWIGOUT(%newobject hdaViewerStateModule;)
148  virtual HOM_HDAViewerStateModule *hdaViewerStateModule() = 0;
149  SWIGOUT(%newobject hdaViewerHandleModule;)
150  virtual HOM_HDAViewerHandleModule *hdaViewerHandleModule() = 0;
151  // hm is an alias for hdaModule.
152  SWIGOUT(%newobject hm;)
153  virtual HOM_HDAModule *hm()
154  { return hdaModule(); }
155  SWIGOUT(%kwargs createDigitalAsset);
156  SWIGOUT(%newobject createDigitalAsset;)
157  virtual HOM_Node *createDigitalAsset(const char *name=NULL,
158  const char *hda_file_name=NULL, const char *description=NULL,
159  int min_num_inputs=0, int max_num_inputs=0,
160  bool compress_contents=false, const char *comment=NULL,
161  const char *version=NULL, bool save_as_embedded=false,
162  bool ignore_external_references=false,
163  bool compile_asset = false,
164  bool change_node_type = true,
165  bool create_backup = true,
166  const char *install_path=NULL) = 0;
167 
168  SWIGOUT(%kwargs changeNodeType);
169  SWIGOUT(%newobject changeNodeType;)
170  virtual HOM_Node *changeNodeType(const char *new_node_type,
171  bool keep_name=true, bool keep_parms=true,
172  bool keep_network_contents=true,
173  bool force_change_on_node_type_match=false) = 0;
174 
175 
176  // TOPs work item navigation, these are here
177  // so both TopNode and SopNode (for sop top networks)
178  // can call them
179  virtual void selectNextVisibleWorkItem() = 0;
180  virtual void selectPreviousVisibleWorkItem() = 0;
181  virtual void deselectWorkItem() = 0;
182  virtual void setCurrentTOPPage(int page) = 0;
183 
184  virtual bool canGenerateCookCode(bool check_parent=false,
185  bool check_auto_shader=true) = 0;
186  SWIGOUT(%newobject cookCodeGeneratorNode;)
187  virtual HOM_Node *cookCodeGeneratorNode() = 0;
188  virtual std::string cookCodeLanguage() = 0;
189  virtual bool supportsMultiCookCodeContexts() = 0;
190 
191  SWIGOUT(%kwargs saveCookCodeToFile;)
192  virtual void saveCookCodeToFile(
193  const char *file_name, bool skip_header=false,
194  const char *context_name = NULL) = 0;
195 
196  // This method is deprecated.
197  void saveCodeToFile(const char *file_name, bool skip_header=false,
198  const char *context_name = NULL)
199  { saveCookCodeToFile(file_name, skip_header, context_name); }
200 
201  virtual void saveCompiledCookCodeToFile(const char *file_name,
202  const char *context_name = NULL) = 0;
203 
204  // This method is deprecated.
205  void saveToCompiledVexFile(const char *file_name,
206  const char *context_name = NULL)
207  { saveCompiledCookCodeToFile(file_name, context_name); }
208 
209  SWIGOUT(%kwargs cook;)
210  virtual void cook(
211  bool force = false,
212  const std::vector<double> frame_range = std::vector<double>()) = 0;
213 
214  SWIGOUT(%kwargs cookNoInterruptInternal;)
215  virtual void _cookNoInterruptInternal(
216  bool force = false,
217  const std::vector<double> frame_range = std::vector<double>()) = 0;
218 
219  /// Determine if this node to cook at the current evaluation time
220  virtual bool needsToCook() = 0;
221  /// Determine if this node to cook at the given time
222  virtual bool needsToCook(double time) = 0;
223 
224  virtual void invalidateOutput() = 0;
225 
226  virtual int cookCount() = 0;
227 
228  virtual std::vector<HOM_ElemPtr<HOM_Node> > cookPathNodes() = 0;
229 
230  SWIGOUT(%kwargs infoTree;)
231  virtual HOM_NodeInfoTree infoTree(
232  bool verbose = false,
233  bool debug = false,
234  int output_index = 0,
235  bool force_cook = false) = 0;
236 
237  virtual std::map<std::string, hboost::any> infoData() = 0;
238 
239  virtual void updateParmStates() = 0;
240 
241  virtual void runInitScripts() = 0;
242  virtual std::string deleteScript() = 0;
243  virtual void setDeleteScript(const std::string &script_text,
244  HOM_EnumValue &language = HOM_scriptLanguage::Python) = 0;
245 
246  SWIGOUT(%newobject addNodeGroup;)
247  virtual HOM_NodeGroup *addNodeGroup(const char *name = NULL) = 0;
248 
249  virtual std::vector<HOM_ElemPtr<HOM_NodeGroup> > nodeGroups() = 0;
250 
251  SWIGOUT(%newobject nodeGroup;)
252  virtual HOM_NodeGroup *nodeGroup(const char *name) = 0;
253 
254  virtual std::string motionEffectsNetworkPath() = 0;
255  SWIGOUT(%newobject findOrCreateMotionEffectsNetwork;)
256  virtual HOM_Node *findOrCreateMotionEffectsNetwork(bool create=true) = 0;
257  virtual void createOrMoveVisualizer(int output_index) = 0;
258 
259  SWIGOUT(%kwargs saveItemsToFile;)
260  virtual void saveItemsToFile(
261  const std::vector<HOM_NetworkMovableItem *> &items,
262  const char *file_name,
263  bool save_hda_fallbacks = false) = 0;
264  SWIGOUT(%kwargs loadItemsFromFile;)
265  virtual void loadItemsFromFile(
266  const char *file_name, bool ignore_load_warnings=false) = 0;
267 
268  SWIGOUT(%ignore addOpaqueEventCallback;)
269  virtual void addOpaqueEventCallback(
270  const std::vector<HOM_EnumValue *> &event_types,
271  void *py_callback) = 0;
272  SWIGOUT(%ignore addOpaqueParmCallback;)
273  virtual void addOpaqueParmCallback(
274  void *py_callback,
275  const std::vector<std::string> &names) = 0;
276  SWIGOUT(%ignore removeOpaqueEventCallback;)
277  virtual void removeOpaqueEventCallback(
278  const std::vector<HOM_EnumValue *> &event_types,
279  void *py_callback) = 0;
280  virtual void removeAllEventCallbacks() = 0;
281  SWIGOUT(%ignore opaqueEventCallbacks;)
282  virtual std::vector<std::pair<std::vector<HOM_EnumValue *>, void *> >
283  opaqueEventCallbacks() = 0;
284 
285  SWIGOUT(%ignore getUniqueId;)
286  virtual int getUniqueId() = 0;
287 
288  virtual double stampValue(const char *name, double default_value) = 0;
289  virtual std::string stampValue(
290  const char *name, const char *default_value) = 0;
291 
292  // asCode methods:
293  SWIGOUT(%kwargs asCode;)
294  virtual std::string asCode(bool brief=false,
295  bool recurse=false,
296  bool save_channels_only=false,
297  bool save_creation_commands=true,
298  bool save_keys_in_frames=false,
299  bool save_outgoing_wires=false,
300  bool save_parm_values_only=false,
301  bool save_spare_parms=true,
302  bool save_box_membership=true,
303  const char *function_name=NULL) = 0;
304 
305  // Data Block methods (like user data, but bigger blobs with associated
306  // data types).
307  virtual std::vector<std::string> dataBlockKeys(
308  const char *blocktype = nullptr) = 0;
309  virtual std::string dataBlockType(const char *key) = 0;
310  virtual HOM_BinaryString dataBlock(const char *key) = 0;
311  SWIGOUT(%kwargs setDataBlock;)
312  virtual void setDataBlock(const char *key, HOM_BinaryString data,
313  const char *block_type = nullptr) = 0;
314  virtual void removeDataBlock(const char *key) = 0;
315 
316  // Cached user data methods:
317  SWIGOUT(%ignore setOpaqueCachedUserData;)
318  virtual void setOpaqueCachedUserData(
319  const char *name, void *opaque_py_object) = 0;
320  SWIGOUT(%ignore opaqueCachedUserData;)
321  virtual void *opaqueCachedUserData(const char *name) = 0;
322  virtual void destroyCachedUserData(
323  const char *name, bool must_exist=true) = 0;
324  virtual void clearCachedUserDataDict() = 0;
325  virtual std::map<std::string, PY_OpaqueObject> cachedUserDataDict() = 0;
326 
327 #ifdef SWIG
328 %extend
329 {
330  void setCachedUserData(const char *name, InterpreterObject value)
331  { return self->setOpaqueCachedUserData(name, value); }
332 
333  InterpreterObject cachedUserData(const char *name)
334  { return HOMincRef((InterpreterObject)self->opaqueCachedUserData(name)); }
335 }
336 #endif
337 
338  SWIGOUT(%newobject simulation;)
339  virtual HOM_DopSimulation *simulation() = 0;
340 
341  virtual std::vector<HOM_ElemPtr<HOM_Node> >
342  findNodesThatProcessedObject(HOM_DopObject &dop_object) = 0;
343 
344  virtual HOM_BinaryString _parmClipData(double start,
345  double end,
346  bool binary = true,
347  bool use_blosc_compression = true,
348  double sample_rate = 0,
349  bool scoped_only = false) = 0;
350 
351  SWIGOUT(%kwargs _setParmClipData;)
352  virtual void _setParmClipData(HOM_BinaryString data,
353  bool binary = true,
354  bool blosc_compressed = true,
355  double sample_rate = 0,
356  double start = HOM_MIN_NEGATIVE_DOUBLE) = 0;
357 
358  virtual void _saveParmClip(std::string file_name,
359  double start,
360  double end,
361  double sample_rate = 0,
362  bool scoped_only = false) = 0;
363 
364  SWIGOUT(%kwargs _loadParmClip;)
365  virtual void _loadParmClip(std::string file_name,
366  double sample_rate = 0,
367  double start = HOM_MIN_NEGATIVE_DOUBLE) = 0;
368 
369  virtual int __creationTime() = 0;
370  virtual int __modificationTime() = 0;
371  virtual void *_asVoidPointer() = 0;
372 
373  SWIGOUT(%kwargs addError;)
374  virtual void addError(const char *message = 0,
376  SWIGOUT(%kwargs addWarning;)
377  virtual void addWarning(const char *message = 0) = 0;
378  SWIGOUT(%kwargs addMessage;)
379  virtual void addMessage(const char *message = 0) = 0;
380 
381  virtual float lastCookTime() = 0;
382  virtual std::map<std::string, hboost::any> lastCookContextOptions(
383  bool only_used_options = false) = 0;
384 
385 #ifdef SWIG
386 %extend
387 {
388  // evalParm() and evalParmTuple() need to be special methods because
389  // their return types can vary.
390  InterpreterObject evalParm(const char *parm_path)
391  {
392  HOM_Parm *parm = self->parm(parm_path);
393 
394  if (!parm)
395  throw HOM_OperationFailed("Invalid parm name");
396 
397  InterpreterObject result = HOMevalParm(*parm);
398  delete parm;
399  return result;
400  }
401 
402  InterpreterObject evalParmTuple(const char *parm_path)
403  {
404  HOM_ParmTuple *parm_tuple = self->parmTuple(parm_path);
405 
406  if (!parm_tuple)
407  throw HOM_OperationFailed("Invalid parm tuple name");
408 
409  InterpreterObject result = HOMevalParmTuple(*parm_tuple);
410  delete parm_tuple;
411  return result;
412  }
413 
414  void addEventCallback(
415  const std::vector<HOM_EnumValue *> &event_types,
416  InterpreterObject callback)
417  { self->addOpaqueEventCallback(event_types, callback); }
418 
419  void addParmCallback(
420  InterpreterObject callback,
421  const std::vector<std::string> &names)
422  { self->addOpaqueParmCallback(callback,names); }
423 
424  void removeEventCallback(
425  const std::vector<HOM_EnumValue *> &event_types,
426  InterpreterObject callback)
427  { self->removeOpaqueEventCallback(event_types, callback); }
428 
429 
430  std::vector<std::pair<std::vector<HOM_EnumValue *>, InterpreterObject> >
431  eventCallbacks()
432  {
433  std::vector<std::pair<std::vector<HOM_EnumValue *>, void *> >
434  opaque_callbacks(self->opaqueEventCallbacks());
435 
436  std::vector<std::pair<std::vector<HOM_EnumValue *>, InterpreterObject> >
437  callbacks;
438  for (int i=0; i< opaque_callbacks.size(); ++i)
439  callbacks.push_back(std::make_pair(
440  opaque_callbacks[i].first,
441  (InterpreterObject)opaque_callbacks[i].second));
442  return callbacks;
443  }
444 }
445 #endif
446 };
447 
448 #endif
GLuint GLsizei const GLchar * message
Definition: glcorearb.h:2543
std::string ignore_case(std::string item)
Helper function to allow ignore_case to be passed to IsMember or Transform.
Definition: CLI11.h:3456
#define HOM_DESTRUCT_OBJECT(pointer)
Definition: HOM_Module.h:1348
GT_API const UT_StringHolder time
GLuint start
Definition: glcorearb.h:475
GLsizei const GLfloat * value
Definition: glcorearb.h:824
const GLuint GLenum const void * binary
Definition: glcorearb.h:1924
#define SWIGOUT(x)
Definition: HOM_Defines.h:24
string __repr__(VtArray< T > const &self)
Definition: wrapArray.h:312
**But if you need a result
Definition: thread.h:622
void saveCodeToFile(const char *file_name, bool skip_header=false, const char *context_name=NULL)
Definition: HOM_OpNode.h:197
#define HOM_API
Definition: HOM_API.h:13
void ignore(T const &) VULKAN_HPP_NOEXCEPT
Definition: vulkan.hpp:6508
GLuint GLuint end
Definition: glcorearb.h:475
#define HOM_CONSTRUCT_OBJECT(pointer)
Definition: HOM_Module.h:1347
void * _asVoidPointer()
Definition: HOM_Vector3.h:148
#define HOM_MIN_NEGATIVE_DOUBLE
Definition: HOM_Defines.h:50
GLenum GLenum severity
Definition: glcorearb.h:2539
GLuint const GLchar * name
Definition: glcorearb.h:786
GLushort pattern
Definition: glad.h:2583
GT_API const UT_StringHolder version
OIIO_API void debug(string_view str)
GA_API const UT_StringHolder parms
HOM_OpNode(const HOM_OpNode &node)
Definition: HOM_OpNode.h:23
Error
Definition: oidn.hpp:577
SIM_API const UT_StringHolder force
OIIO_UTIL_API bool rename(string_view from, string_view to, std::string &err)
virtual HOM_HDAModule * hm()
Definition: HOM_OpNode.h:153
void saveToCompiledVexFile(const char *file_name, const char *context_name=NULL)
Definition: HOM_OpNode.h:205
state
Definition: core.h:2289
~HOM_OpNode() override
Definition: HOM_OpNode.h:27
Definition: format.h:1821
int __hash__()
GLenum src
Definition: glcorearb.h:1793