HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
LOP_Node.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  * NAME: LOP Library (C++)
7  *
8  * COMMENTS: The base class for all Lighting Operators
9  *
10  */
11 
12 #ifndef __LOP_Node_h__
13 #define __LOP_Node_h__
14 
15 #include "LOP_API.h"
16 #include "LOP_Error.h"
17 #include "LOP_LayerCheckpoints.h"
18 #include "HUSD/HUSD_Utils.h"
19 
20 #include <OP/OP_Network.h>
21 #include <HUSD/HUSD_DataHandle.h>
22 #include <HUSD/HUSD_PathSet.h>
23 #include <HUSD/HUSD_TimeCode.h>
24 #include <HUSD/HUSD_Xform.h>
25 #include <GU/GU_DetailHandle.h>
27 #include <UT/UT_Ramp.h>
28 
29 class LOP_Network;
32 class HUSD_FindPrims;
33 class HUSD_FindProps;
34 class HUSD_Info;
35 class PRM_Template;
36 class PRM_Name;
37 class UT_ArrayStringSet;
38 class UT_StringSet;
39 
40 extern "C" {
42 };
43 
44 #define LOP_DEBUG_FLAG 'D'
45 // Names of graph provider classes that can be returned by LOP nodes.
46 #define LOP_USDSHADEUNIGRAPHPROVIDER_TYPE "usdshade"
47 
52 };
53 
57 };
58 
63 };
64 
66 {
67 public:
70  bool myCreateReplacement = false;
71  bool myReplaceSublayersOnly = false;
72  bool myClearSource = false;
73  bool myCreateNewSublayer = false;
76 };
77 
79 {
80 public:
82  : myFrame(1.0),
83  myTime(0.0),
84  myRampBasisIsArray(false),
87  myValueLength(1),
88  myValueIsTimeDep(false),
89  myValueIsOrdered(false),
90  myIsCustom(true), // USD assumes custom attribs
91  myExpandCollection(true),
92  myClearAttrib(false),
95  myXformEntry()
96  { }
97 
112  UT_StringHolder myConnection; // path to the source attrib
115  int myValueInt[16];
126 
127  // Data members specific to authoring a collection from parms. This
128  // data is used if myValueType == HUSD_PROPERTY_VALUETYPE_COLLECTION.
137 };
139 
141 {
142 public:
143  // Standard OP_Network stuff:
144  static const char *theChildTableName;
145  const char *getChildType() const override;
146  const char *getOpType() const override;
147 
148  OP_OpTypeId getChildTypeID() const override;
149  OP_OpTypeId getOpTypeID() const override;
150  OP_DataType getCookedDataType() const override;
151 
152  static void buildOperatorTable(OP_OperatorTable &table);
153  static OP_Operator *getManagementOperator();
154  static void initializeExpressions();
155 
156  // Get a LOP node from the provided path. If the path is a LOP node path,
157  // return that LOP node. If it is a LOP network path, return the path to
158  // that LOP network's viewer node.
159  static LOP_Node *getLopNodeFromLopOrNetworkPath(const char *path,
160  bool default_to_stage = true);
161 
162  // Local variables that can be used by nodes which allow user-specifiable
163  // names on inputs (such as merge into and add variant).
164  static CH_LocalVariable theInputNameLocalVariables[];
165 
166  void opChanged(OP_EventType reason, void *data=0) override;
167  void onCreated() override;
168 
169  fpreal getW() const override;
170  fpreal getH() const override;
171 
172  // Gets/sets the value of the debug flag on this node.
173  bool getDebug() const override;
174  bool setDebug(bool state) override;
175  void setFlag(char flag, int8 val) override;
176  bool getNestedDebug() const;
177 
178  // Overrides the current node pointer method to ensure that we always
179  // find a current node when the old current node is deleted, even in the
180  // absence of a display node.
181  OP_Node *getCurrentNodePtr() override;
182  // Overrides the display node pointer method because a LOP node with LOP
183  // children doesn't need to have a display node, and will return the
184  // display node of the parent LOP network if it doesn't have its own.
185  OP_Node *getDisplayNodePtr() override;
186  void childFlagChange(OP_Node *nodeptr) override;
187  virtual LOP_Node *getViewerLop();
188 
189  // Gets the output child node corresponding to the specified output index.
190  LOP_Node *getOutputLop(int outputidx) const;
191 
192  // Override the function that determines whether this node should be
193  // drawn in the network editor with a "bypass" look. LOPs have an optional
194  // "bypass" spare parameter that makes the node act like it is bypassed,
195  // so it should also be drawn like it's bypassed.
196  bool getUseBypassLook(
197  const OP_EditorContext &ctx) const override;
198 
199  // Cook this node and return a data handle for the resulting stage.
200  const HUSD_DataHandle &getCookedDataHandle(OP_Context &context,
201  int outidx = 0,
202  bool use_last_cook_context_options = false,
203  const UT_StringSet *protect_options = nullptr);
204  // Cook this node and return a data handle for the resulting stage. If
205  // the cook leaves this node in an error state, go to this node's first
206  // connected input, and try to return the cooked data handle for that
207  // node, and so on. This method is useful for the scene graph tree and
208  // similar panels, where it's much more useful to show something than
209  // nothing in the case of an error. Returns the data handle and a
210  // pointer to the node whose data is actually returned.
211  const HUSD_DataHandle &getCookedDataHandleBypassingErrors(
212  LOP_Node *&owner_node,
213  int &owner_outidx,
214  OP_Context &context,
215  int outidx = 0,
216  bool use_last_cook_context_options = false,
217  const UT_StringSet *protect_options = nullptr);
218  // Return true if this node was the most recent node to create a lock
219  // on the stage we may be sharing with many other nodes.
220  bool isMostRecentStageLock() const;
221 
222  // Get the badge clor we should use for this LOP node do indicate which
223  // active layer is modified by this node.
224  bool hasLayerColorIndex(int &clridx) const;
225 
226  // Return true if this node is in an Edit Layer Block, otherwise false.
227  bool inEditLayerBlock(OP_Context &context);
228 
229  // Override this for nodes that want to allow python code to edit their
230  // stage or active layer directly.
231  virtual HUSD_PythonConverter *getEditableObject(LOP_EditableObject obj);
232 
233  // Create a new HUSD_LoadMasks object using parameters on the creator
234  // LOP Network to set variant selection fallback values.
235  HUSD_LoadMasksPtr createNewLoadMasks();
236 
237  // Evaluate a simplified adhoc collection parm and use it to fill in an
238  // HUSD_FindPrims object.
239  static bool getSimplifiedCollection(OP_Node *node,
240  const UT_StringRef &primpattern,
241  HUSD_FindPrims &findprims);
242  // Evaluate a simplified adhoc collection parm and use it to fill in an
243  // HUSD_FindProps object.
244  static bool getSimplifiedCollection(OP_Node *node,
245  const UT_StringRef &primpattern,
246  const UT_StringRef &proppattern,
247  HUSD_FindProps &findprops);
248  // Evaluate a pattern string using an HUSD_FindPrims against a LOP node's
249  // editableDataHandle, and return an array of matching paths. Isolates
250  // the locking of the stage to this function.
251  static bool getPathsFromPattern(LOP_Node &lop,
252  const UT_StringRef &pattern,
253  UT_StringArray &paths,
254  bool allow_missing_explicit_prims = false,
255  HUSD_PrimTraversalDemands demands =
257  // Tests if the provided primitive is editable. Adds the result to the
258  // provided map so the next call with the same path can return the cached
259  // result immediately. The first time each non-editable prim is found,
260  // a warning is added to this node.
261  bool isPrimitiveEditable(
262  UT_StringMap<bool> alloweditmap,
263  const HUSD_Info &info,
264  const UT_StringHolder &path,
265  bool ignoreeditableflag,
266  LOP_ErrorCodes non_editable_error_code =
268 
269  // Return the number of layers in our data handle.
270  int layerCount() const;
271 
272  // Track the set of primitives modified by the most recent cook of
273  // this node.
274  const HUSD_PathSet &lastModifiedPrims() const;
275  void setLastModifiedPrims(const UT_StringRef &path,
276  bool add_to_existing = false);
277  void setLastModifiedPrims(const UT_StringArray &paths,
278  bool add_to_existing = false);
279  void setLastModifiedPrims(const UT_ArrayStringSet &paths,
280  bool add_to_existing = false);
281  void setLastModifiedPrims(const HUSD_FindPrims &findprims,
282  bool add_to_existing = false);
283  void setLastModifiedPrims(const HUSD_PathSet &paths,
284  bool add_to_existing = false);
285  void setLastModifiedPrimsWithPathExpression(
286  HUSD_AutoAnyLock &lock,
287  const UT_StringRef &path_expr,
288  bool add_to_existing = false);
289  void clearLastModifiedPrims();
290 
291  // Tests if this node has an active layer that is large enough that we
292  // want output nodes to always start a new active layer. The default
293  // implementation looks at the number of lastModifiedPrims. This method
294  // is const and should never trigger a cook - it should always look at
295  // data from the most recent cook (and return false if the node has
296  // never been cooked).
297  virtual bool hasLargeActiveLayer() const;
298 
299  // For a new stage being authored by this node, these methods allow the
300  // node to control the asset path or url/string pairs used to configure
301  // the stage's asset resolver context. Individual node types can provide
302  // custom implementations.
303  virtual bool getResolverContextAssetPath(UT_String &assetpath);
304  virtual bool getResolverContextStrings(
305  UT_StringMap<UT_StringHolder> &resolverstrings);
306 
307  // Code for tracking convex hulls around context option "blocks" in the
308  // network editor.
309  virtual bool showConvexHull() const
310  { return false; }
311  virtual int contextOptionsStackEffect(int input) const
312  { return 0; }
313  virtual void findEnclosedItems(OP_EnclosedItems &items) const;
314 
315  // Evaluate local variables common to multiple LOP node types.
316  bool evalVariableValue(fpreal &val, int var_id,
317  int thread) override;
318  bool evalVariableValue(UT_String &val, int var_id,
319  int thread) override;
321  const char *name) override;
323  UT_StringArray &names) override;
324 
326  { return myLastCookActivation; }
327  HUSD_TimeCode getTimeCode(const OP_Context &context,
328  bool timedep) const;
329  HUSD_LoadMasksPtr getLastCookLoadMasks(int outidx = 0);
330 
331  // Public functions for adding warnings and errors, so that utility
332  // methods in LOP_PRMShared and elsewhere can add errors directly to
333  // LOP nodes.
334  void addSystemError(const char *msg = 0)
335  { getLockedErrorManager()->systemError(msg); }
336  void addError(int code, const char *msg = 0)
338  addError(LOP_OPTYPE_NAME, code, msg); }
339  void addWarning(int code, const char *msg = 0)
341  addWarning(LOP_OPTYPE_NAME, code, msg); }
342  void addMessage(int code, const char *msg = 0)
344  addMessage(LOP_OPTYPE_NAME, code, msg); }
345 
346  const char *inputLabel(OP_InputIdx idx) const override;
347  const char *outputLabel(OP_OutputIdx idx) const override;
348 
350  const OP_NodeInfoTreeParms &parms) override;
351 
352  // Guide geometry for display in the viewport, but which does not appear
353  // in the USD stage anywhere.
354  virtual int getNumGuides() const;
355  virtual const char *getGuideColorName(int idx) const;
356  GU_DetailHandle cookGuide(int idx, OP_Context &context);
357 
358  // For transforming between LOP and OBJ spaces.
359  int getRelativeTransform(OP_Node &to,
360  UT_Matrix4 &xform,
361  OP_Context &context) override;
362  int getRelativeTransform(OP_Node &to,
364  OP_Context &context) override;
365 
366  // Extracting camera info directly from a LOP stage.
367  bool getCameraInfo(const UT_StringRef &camid,
368  const OP_Context &context,
369  DEP_MicroNode *depnode,
370  UT_StringHolder &foundcamid,
371  UT_CameraParms &camparms) override;
373  const OP_Context &context,
374  bool get_inverse_xform,
375  DEP_MicroNode *depnode,
376  UT_DMatrix4 &xform) override;
377 
378  // Called on any parm that gets evaluated while in getAttributeParmSet.
379  virtual void handleParmEvaluatedForParmSet(PRM_Parm *parm);
380 
381  // For C++ nodes that want to support multiple outputs, override this
382  // method to return true. The output index will be supplied to the cook
383  // method as a context option.
384  virtual bool supportMultipleOutputsAsContextOption() const;
385 
386  // Returns the name of the context option into which we put the "output
387  // index" to cook for a node that returns true from
388  // supportMultipleOutputsAsContextOption.
389  static const UT_StringHolder &getOutputIndexContextOption();
390 
391 protected:
392  LOP_Node(OP_Network *parent, const char *name,
393  OP_Operator *entry);
394  ~LOP_Node() override;
395 
396  // Common cook method for all LOP nodes. Calls cookMyLop.
397  OP_ERROR cookMe(OP_Context &context) override;
398  // Specific cook method for each LOP node, must be overridden.
399  virtual OP_ERROR cookMyLop(OP_Context &context) = 0;
400  // Specific guide cook method for each LOP node.
401  virtual GU_DetailHandle cookMyGuide(int idx, OP_Context &context);
402  // Clears any cached data for this node. In the case of a LOP node, this
403  // means clearing our locked stage pointer from the GusdStageCache.
404  void clearCache() override;
405  // Makes our own data handle reference or copy the data handle of another
406  // node. Should be used to reference nodes that are not inputs to this
407  // node.
408  OP_ERROR cookReferenceNode(OP_Context &context,
409  LOP_Node *source_lop,
410  int outidx = 0,
411  bool copy_data_handle = false,
412  bool add_extra_input = true,
413  const HUSD_LoadMasksPtr &load_masks =
415  // Makes our own data handle reference or copy the data handle of one
416  // of our input nodes.
417  OP_ERROR cookReferenceInput(OP_Context &context,
418  int which_input = 0,
419  bool require_input = false,
420  bool copy_data_handle = false,
421  const HUSD_LoadMasksPtr &load_masks =
423  // Wrapper to call copyReferenceInput with the copy_data_handle
424  // parameter set to true.
425  OP_ERROR cookModifyInput(OP_Context &context,
426  int which_input = 0,
427  bool require_input = false,
428  const HUSD_LoadMasksPtr &load_masks =
430  // Makes our own data handle reference or copy the data handle of another
431  // node, but replace one layer in the source stage with another layer.
432  // Should be used to reference nodes that are not inputs to this
433  // node.
434  OP_ERROR cookReferenceNodeWithReplacement(OP_Context &context,
435  LOP_Node *source_lop,
436  const UT_StringRef &from_path_pattern,
437  const LOP_LayerReplacementInfo &replacement_info,
438  UT_StringSet &replaced_layers,
439  bool add_extra_input);
440  // Makes our own data handle reference or copy the data handle of one
441  // of our input nodes, but replace one layer in the source stage with
442  // another layer.
443  OP_ERROR cookReferenceInputWithReplacement(OP_Context &context,
444  const UT_StringRef &from_path_pattern,
445  const LOP_LayerReplacementInfo &replacement_info,
446  UT_StringSet &replaced_layers,
447  int which_input,
448  bool require_input);
449  // Access the data handle of one of our inputs, that must have been
450  // locked already to ensure the data is cooked for the current context.
451  const HUSD_DataHandle &lockedInputData(OP_Context &context,
452  int which_input);
453  // Access our own data handle for modification. Should only be called
454  // from within cookMyLop.
455  HUSD_DataHandle &editableDataHandle();
456 
457  // For subnet nodes, this method will return the contained node that
458  // corresponds to specified output connector index. For all other nodes
459  // with will return nullptr. This will trigger a call to syncDelayedOTL
460  // if outidx > 0.
461  LOP_Node *getNodeForSubnetOutput(int outidx);
462 
463  // For nodes with editable input names, this function evaluates all the
464  // input names, assigning any dependencies to the specified parameter.
465  OP_ERROR getInputStrings(const UT_StringRef &key_parm_name,
466  fpreal t,
467  UT_StringArray &input_names,
468  bool allow_empty_strings = false);
469 
470  // Functions for controlling checkpoints created during a cook operation.
471  void setClearCheckpointsOnInputChange(bool clear);
472  void createCheckpoint(const HUSD_AutoAnyLock &lock,
473  const UT_StringHolder &id,
474  const HUSD_PathSet *modified_prims = nullptr);
475  void removeCheckpoint(const UT_StringRef &id);
476  void removeAllCheckpoints();
477 
478  // Functions for accessing existing checkpoitns during a cook operation.
479  void getAvailableCheckpoints(UT_StringArray &ids) const;
480  bool restoreCheckpoint(const HUSD_AutoLayerLock &layerlock,
481  const UT_StringRef &id,
482  HUSD_PathSet *modified_prims = nullptr);
483 
484  OP_ERROR bypassMe(OP_Context &context,
485  int &copied_input) override;
486  void deleteCookedData() override;
487  int saveCookedData(const char *, OP_Context &) override;
488  int saveCookedData(std::ostream &os, OP_Context &,
489  int binary = 0) override;
490  const char *getFileExtension(int bin) const override;
491 
492  // Specifically fills in the ramp attribute names from the spare tags on
493  // a parameter. Used by getAttributeParmSet, but can be called separately
494  // from that function for blocking attributes for a ramp parameter.
495  static void getRampAttributeNamesForParmSet(
496  const PRM_Template *tplate,
497  LOP_AttributeParmSet &pset);
498  // Populates a LOP_AttributeParmSet data structure from a parameter, using
499  // all the USD-specific information in the parameter's spare tags.
500  void getAttributeParmSet(OP_Node *node,
501  const PRM_Template *tplate,
502  LOP_AttributeParmSet &pset,
503  fpreal t);
504  // Returns the frame suffix for the op: path to COP, and also obtains
505  // the time-dependent flag.
506  std::pair<UT_StringHolder /*suffix*/, bool /*is_time_dep*/>
507  getOpPathFrameSuffix(OP_Node *opnode, fpreal t) const;
508  // Updates the passed in string by appending a [frame] suffix to it if
509  // it is an "op:" path that doesn't have such a suffix already. Return
510  // true if the string is an "op:" path we can resolve.
511  bool updateStringForOpReference(fpreal t,
512  UT_StringHolder &str, bool &timedep) const;
513  // Applies any API schema mentioned in the LOP_AttributeParmSet. This
514  // method can be called in a change block before calling
515  // setAttributeFromParmSet for a bunch of LOP_AttributeParmSets.
516  // Applying the schemas first in a change block can greatly reduce the
517  // amount of recomposition done as a result of adding an API schema to
518  // a large number of primitives.
519  bool applySchemaFromParmSet(
520  HUSD_AutoWriteLock &writelock,
521  LOP_AttributeParmSet &pset,
522  UT_StringSet *failedapis = nullptr);
523  // Sets a USD attribute or relationship on a USD primitive based on the
524  // current value of a node parameter. Use getAttributeParmSet to populate
525  // the LOP_AttributeParmSet data structure from the parm first.
526  bool setAttributeFromParmSet(
527  HUSD_AutoWriteLock &writelock,
528  LOP_AttributeParmSet &pset,
529  fpreal t,
530  UT_StringSet *failedapis = nullptr);
531 
532  // Helps with convex hull generation by looking at the context option
533  // stack information implemented by the virtual contextOptionsStackEffect.
534  void encloseInputs(OP_EnclosedItems &items,
535  int stackdepth) const;
536 
537  // Map of attribute names to evaluator objects.
540 
541  // Helper class to determine whether nodes with multiple inputs will be
542  // composing stages with differing time-codes-per-second (TCPS) metadata.
543  //
544  // As of USD 20.08, if you reference/sublayer (i.e., compose) a 60tcps stage
545  // into a 24tcps stage (for example), any time sample data within will be
546  // automatically time-scaled (1.0 -> 0.4, ..., 60.0 -> 24.0, etc).
547  //
548  // If the data for the stage is driven by Houdini expressions/keyframes and
549  // not by cached time samples, this time-scaling is not applied, which might
550  // be unexpected for the user. This class can help warn them.
551  //
552  // Expected usage in `cookMyLop()`:
553  // - sometime after `cookModifyInput(context);`, instantiate a checker:
554  // `DifferingTimeCodesPerSecChecker tcpsChecker(this);`
555  // - whenever you first get your secondary inputs via
556  // `const HUSD_DataHandle &datahandle = lockedInputData(context, i);`,
557  // add this data handle to the checker:
558  // `tcpsChecker.addInput(datahandle, context);`
559  // - whenever you first get your primary input via
560  // `const HUSD_DataHandle &datahandle = editableDataHandle();`
561  // also add this data handle to the checker, with `false`:
562  // `tcpsChecker.addInput(datahandle, context, false);`
563  // - after all the inputs (primary & secondary) have been added to the
564  // checker, check to see if there's an issue:
565  // `tcpsChecker.checkForDifferingTCPS();`
566  //
568  {
569  public:
570  explicit DifferingTimeCodesPerSecChecker(LOP_Node *lop) : myLop(lop) {}
571  void addInput(
572  const HUSD_DataHandle &handle,
573  OP_Context &context,
574  bool only_time_dep = true);
575  // Returns `true` if there are differing values; `false` otherwise
576  bool checkForDifferingTCPS(bool emit_warning = true);
577 
578  private:
579  LOP_Node *myLop;
580  std::set<fpreal64> myTCPSEntries;
581  };
582 
583 private:
584  // Resolves a node path pointing to a LOP node into an HUSD_LockedStagePtr.
585  // This is used by husdLopStageResolver in HUSD_Utils.C to help the
586  // GusdStageCache convert "op:/" USD file names into a stage generated
587  // by a LOP node.
588  static HUSD_LockedStagePtr resolveStage(const UT_StringRef &path);
589 
590  // Helper function used by cookReferenceNodeWithReplacement methods.
591  OP_ERROR copyDataWithReplacement(
592  HUSD_DataHandle &data_handle,
593  const UT_StringRef &from_path_pattern,
594  const LOP_LayerReplacementInfo &replacement_info,
595  UT_StringSet &replaced_layers);
596  void setDebugDirtyRecursive(
597  void *change_data, bool top_level);
598  void resetDataHandle();
599 
600  HUSD_DataHandle myDataHandle;
601  LOP_LayerCheckpoints myCheckpoints;
602  HUSD_PathSet myLastModifiedPrims;
603  bool myLastCookActivation;
604  bool myHasActivationParameter;
605  bool myHasShotActivationParameter;
606 };
607 
608 #endif
virtual int saveCookedData(std::ostream &os, OP_Context &, int binary=0)=0
Definition: UT_Set.h:58
int myEvaluatingInputNameIndex
Definition: LOP_Node.h:539
fpreal getH() const override
Node position/scale is used by the UI.
virtual bool getUseBypassLook(const OP_EditorContext &ctx) const
fpreal getW() const override
Node position/scale is used by the UI.
UT_StringHolder myCollectionExpansionRule
Definition: LOP_Node.h:133
UT_SharedPtr< HUSD_LoadMasks > HUSD_LoadMasksPtr
UT_StringHolder myPrimPath
Definition: LOP_Node.h:100
virtual UT_AttributeEvaluator * createAttributeEvaluator(const char *name)
HUSD_MakeNewPathFunc myMakeNewPathFn
Definition: LOP_Node.h:69
void addMessage(int code, const char *msg=0)
Definition: LOP_Node.h:342
HUSD_XformStyle myValueXformStyle
Definition: LOP_Node.h:118
virtual void getAttributeEvaluatorNames(UT_StringArray &names)
#define SYS_VISIBILITY_EXPORT
HUSD_XformStyle
Definition: HUSD_Xform.h:37
#define LOP_OPTYPE_NAME
Definition: OP_Node.h:328
virtual void setFlag(char tag, int8 val)
HUSD_XformEntry myXformEntry
Definition: LOP_Node.h:119
UT_StringHolder myReplacementIdentifier
Definition: LOP_Node.h:68
UT_StringHolder myRampBasisAttrName
Definition: LOP_Node.h:103
const GLuint GLenum const void * binary
Definition: glcorearb.h:1924
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
int OP_InputIdx
Definition: OP_DataTypes.h:184
UT_StringHolder myValueType
Definition: LOP_Node.h:113
UT_ErrorSeverity
Definition: UT_Error.h:25
LOP_InputNameVariableId
Definition: LOP_Node.h:54
UT_StringHolder myCreateNewSublayerName
Definition: LOP_Node.h:74
HUSD_PrimTraversalDemands
Definition: HUSD_Utils.h:39
Each instance is a tab.
Definition: PRM_Type.h:431
virtual OP_ERROR cookMe(OP_Context &context)=0
virtual void childFlagChange(OP_Node *)
UT_StringHolder myRampPosAttrName
Definition: LOP_Node.h:105
double fpreal64
Definition: SYS_Types.h:201
void opChanged(OP_EventType reason, void *data=nullptr) override
UT_StringHolder myControl
Definition: LOP_Node.h:106
virtual const char * inputLabel(OP_InputIdx idx) const
UT_StringHolder myCollectionIcon
Definition: LOP_Node.h:134
bool myCollectionUsePathExpr
Definition: LOP_Node.h:135
PRM_Type myParmType
Definition: LOP_Node.h:108
virtual bool showConvexHull() const
Definition: LOP_Node.h:309
virtual OP_Node * getCurrentNodePtr()
UT_StringMap< UT_UniquePtr< UT_AttributeEvaluator > > myEvaluators
Definition: LOP_Node.h:538
bool myCollectionAllowInstanceProxies
Definition: LOP_Node.h:136
UT_Array< LOP_AttributeParmSet > LOP_AttributeParms
Definition: LOP_Node.h:138
virtual bool getCameraInfo(const UT_StringRef &camid, const OP_Context &context, DEP_MicroNode *depnode, UT_StringHolder &foundcamid, UT_CameraParms &camparms)
SYS_VISIBILITY_EXPORT void newLopOperator(OP_OperatorTable *table)
OP_OpTypeId
Definition: OP_OpTypeId.h:18
void addWarning(int code, const char *msg=0)
Definition: LOP_Node.h:339
#define LOP_API
Definition: LOP_API.h:10
PRM_MultiType myMultiParmType
Definition: LOP_Node.h:109
GLuint const GLchar * name
Definition: glcorearb.h:786
LOP_ErrorCodes
Definition: LOP_Error.h:16
signed char int8
Definition: SYS_Types.h:35
GLushort pattern
Definition: glad.h:2583
virtual OP_DataType getCookedDataType() const =0
GLenum GLenum GLsizei void * table
Definition: glad.h:5129
virtual OP_OpTypeId getOpTypeID() const
Definition: OP_Node.h:557
UT_StringHolder myConnection
Definition: LOP_Node.h:112
GLdouble t
Definition: glad.h:2397
UT_Function< UT_StringHolder(const UT_StringRef &oldpath)> HUSD_MakeNewPathFunc
UT_StringHolder myRampCountAttrName
Definition: LOP_Node.h:102
virtual int contextOptionsStackEffect(int input) const
Definition: LOP_Node.h:311
virtual const char * getChildType() const
static const char * theChildTableName
Definition: LOP_Node.h:144
UT_StringHolder myAttrName
Definition: LOP_Node.h:101
**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
virtual const char * getFileExtension(int binary) const =0
GA_API const UT_StringHolder parms
void addSystemError(const char *msg=0)
Definition: LOP_Node.h:334
Parameters for OP_Node::fillInfoTree()/OP_Node::fillInfoTreeNodeSpecific()
virtual void fillInfoTreeNodeSpecific(UT_InfoTree &tree, const OP_NodeInfoTreeParms &parms)
LOP_ActivationState
Definition: LOP_Node.h:59
UT_StringHolder myCollectionParmPrefix
Definition: LOP_Node.h:129
LOP_EditableObject
Definition: LOP_Node.h:48
fpreal64 fpreal
Definition: SYS_Types.h:283
UT_StringHolder myCollectionIncludePattern
Definition: LOP_Node.h:131
UT_SharedPtr< HUSD_LockedStage > HUSD_LockedStagePtr
Utility class for containing a color ramp.
Definition: UT_Ramp.h:96
virtual const char * getOpType() const
UT_StringHolder myApiSchema
Definition: LOP_Node.h:110
GLuint GLfloat * val
Definition: glcorearb.h:1608
UT_StringHolder myInterpolation
Definition: LOP_Node.h:107
UT_StringHolder myValueStr
Definition: LOP_Node.h:114
OP_EventType
Definition: OP_Value.h:22
OP_DataType
Definition: OP_DataTypes.h:189
virtual OP_OpTypeId getChildTypeID() const =0
GU_API void xform(CE_Context &context, bool recompile, int npts, const cl::Buffer &outPos, const cl::Buffer &inPos, const cl::Buffer &surfacexform, const cl::Buffer *grp=nullptr)
int OP_OutputIdx
Definition: OP_DataTypes.h:185
virtual int getRelativeTransform(OP_Node &to, UT_Matrix4 &xform, OP_Context &context)
UT_StringHolder myXformParmPrefix
Definition: LOP_Node.h:111
virtual bool evalVariableValue(UT_String &val, int index, int thread)
virtual bool getWorldTransformFromData(const UT_StringRef &id, const OP_Context &context, bool get_inverse_xform, DEP_MicroNode *depnode, UT_DMatrix4 &xform)
void addError(int code, const char *msg=0)
Definition: LOP_Node.h:336
UT_StringHolder myCollectionName
Definition: LOP_Node.h:130
Definition: HUSD_Xform.h:70
virtual bool getDebug() const
Definition: OP_Node.h:1439
virtual const char * outputLabel(OP_OutputIdx idx) const
UT_StringHolder myCollectionExcludePattern
Definition: LOP_Node.h:132
GLuint * ids
Definition: glcorearb.h:652
virtual OP_ERROR bypassMe(OP_Context &context, int &copied_input)=0
state
Definition: core.h:2289
UT_LockedRawPtr< UT_ErrorManager, OP_Lock > getLockedErrorManager()
fpreal64 myValueFloat[16]
Definition: LOP_Node.h:116
Definition: format.h:1821
virtual OP_Node * getDisplayNodePtr()
PRM_MultiType
This type enum defines the different types of multi (dynamic) parameters.
Definition: PRM_Type.h:426
virtual void clearCache()
virtual void onCreated()
Overriden in VOPs.
Definition: OP_Node.h:3277
virtual bool setDebug(bool on_off)
Definition: OP_Node.h:1393
bool lastCookActivationState() const
Definition: LOP_Node.h:325
virtual void deleteCookedData()=0