HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
LOP_Network.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: LOP manager node for other network types.
9  *
10  */
11 
12 #ifndef __LOP_Network_h__
13 #define __LOP_Network_h__
14 
15 #include "LOP_API.h"
16 #include "LOP_Node.h"
17 #include "LOP_SelectionRule.h"
19 #include <HUSD/HUSD_PostLayers.h>
20 #include <HUSD/HUSD_FindPrims.h>
21 #include <HUSD/HUSD_LoadMasks.h>
22 #include <HUSD/HUSD_Overrides.h>
23 #include <HUSD/HUSD_Utils.h>
24 #include <GU/GU_SelectType.h>
25 #include <UT/UT_StringMap.h>
26 
27 #define LOP_EXPANSION_DATA_BLOCK_TYPE "expansion"
28 #define LOP_OVERRIDES_DATA_BLOCK_TYPE "overrides"
29 #define LOP_LOADMASKS_DATA_BLOCK_TYPE "loadmasks"
30 #define LOP_POSTLAYERS_DATA_BLOCK_TYPE "postlayers"
31 #define LOP_ONLOAD_DATA_BLOCK_PREFIX "__onload__."
32 
34 {
41 };
42 
44 {
49 };
50 
52 {
53 public:
54  // Standard OP_Network stuff:
55  static const char *theChildTableName;
56  static OP_Node *myConstructor(OP_Network *net, const char *name,
57  OP_Operator *entry);
58  static PRM_Template myTemplateList[];
59 
61  UT_String &assetpath) override;
64  resolverstrings) override;
65  bool getVariantSelectionFallbacks(
67  fallbacks);
68  LOP_ExpansionEffect getExpansionEffect();
69  int getLargeLayerModifiedPrimCount();
70 
71  void opChanged(OP_EventType reason,
72  void *data = 0) override;
73  void onCreated() override;
74  int isSubNetwork(bool includemanagementops)
75  const override;
76  OP_Node *getDisplayNodePtr() override;
77  void childFlagChange(OP_Node *nodeptr) override;
78  LOP_Node *getViewerLop() override;
79 
81  { return myOverrides; }
82  void setOverrides(const HUSD_Overrides &overrides);
83  HUSD_OverridesPtr editableOverrides(
84  HUSD_OverridesLayerId active_layer_id =
86  void resetOverrides();
87 
89  { return myPostLayers; }
90  HUSD_PostLayersPtr editablePostLayers();
91  void resetPostLayers();
92 
94  { return myExpansionState; }
95  bool changeExpansionState(const HUSD_Path &path,
96  bool pinned, bool expanded);
97  bool setExpansionState(const HUSD_ExpansionState &
98  expansion_state);
99  bool setExpansionLockState(const HUSD_Path &path,
100  bool locked,
101  const HUSD_PathSet *
102  expanded_subpaths = nullptr,
103  bool use_pinned_subpaths = false,
104  bool preserve_descendant_expansion = false);
105  void undoExpansionLockState(
107  swap_locked_paths,
109  swap_locked_expanded_paths);
110  void updateOverridesWithExpansionState(
111  const HUSD_DataHandle &viewerdatahandle,
112  const HUSD_DataHandle &lopdatahandle);
113 
114  const HUSD_LoadMasks &loadMasks() const
115  { return myLoadMasks; }
116  void setLoadMasks(const HUSD_LoadMasks &load_masks);
117 
118  bool setStateFromDataBlock(
119  const UT_StringRef &blockname,
120  const char *blocktype = nullptr);
121  bool saveExpansionState(
122  const UT_StringHolder &expansionname,
123  const HUSD_ExpansionState &expansion);
124  bool saveOverrides(
125  const UT_StringHolder &overridesname,
126  const HUSD_Overrides &overrides);
127  bool savePostLayers(
128  const UT_StringHolder &postlayersname,
129  const HUSD_PostLayers &postlayers);
130  bool saveLoadMasks(
131  const UT_StringHolder &load_masks_name,
132  const HUSD_LoadMasks &load_masks);
133 
134  const HUSD_PathSet &selection() const
135  { return mySelection; }
137  { return mySelectionCurrentPrim; }
139  { return mySelectionWithInstanceIds; }
140  // Return true if the selection is actually changed by this call.
141  // If not, we do not send the OP_DATA_USERSELECTION_CHANGED event.
142  bool modifySelection(const HUSD_PathSet &paths,
143  const HUSD_InstanceSelection &
144  paths_with_instance_ids,
145  const UT_StringHolder *currentprim =
146  nullptr,
147  GU_SelectionRule rule =
149 
150  const LOP_SelectionRuleMap &selectionRules() const;
151  void clearSelectionRules();
152  void removeSelectionRule(
153  const UT_StringHolder &name);
154  void addSelectionRule(
155  const UT_StringHolder &name,
156  const LOP_SelectionRule &collection);
157 
158  void saveSelectionRules(std::ostream &os) const;
159  bool loadSelectionRules(UT_IStream &is);
160 
161  void getPinnedPrimitives(
162  UT_String &pinnedprims) const;
163  void setPinnedPrimitives(
164  const UT_StringRef &pinnedprims);
165 
166  // Key strings we use during snapshot network serialisation
170 
171  // When we take a render gallery snapshot, we also save the state of the
172  // LOP network. This method encapsulates saving this data.
173  void saveNetworkForSnapshot(std::ostream &os);
174 
175  UT_StringHolder getRenderGallerySource() const;
176  bool saveRenderGalleryToDisk();
177 
178  static UT_StringHolder makeValidSelectionRuleName(
179  const UT_StringHolder &name);
180 
181 protected:
182  LOP_Network(OP_Network *parent, const char *name,
183  OP_Operator *entry);
184  ~LOP_Network() override;
185 
186  void clearAndDestroy() override;
187 
188  OP_ERROR cookMyLop(OP_Context &context) override;
189 
190  OP_ERROR save(std::ostream &os, const OP_SaveFlags &flags,
191  const char *path_prefix,
192  const UT_StringHolder &name_override =
193  UT_StringHolder()) override;
194  bool load(UT_IStream &is, const char *extension,
195  const char *path=0) override;
196  void loadFinished() override;
197 
198 private:
199  static void forceRecookAllChildren(LOP_Node *root, bool firstcall);
200 
201  HUSD_ExpansionState myExpansionState;
202  HUSD_LoadMasks myLoadMasks;
203  HUSD_PostLayersPtr myPostLayers;
204  HUSD_OverridesPtr myOverrides;
205  HUSD_PathSet mySelection;
206  UT_StringHolder mySelectionCurrentPrim;
207  HUSD_InstanceSelection mySelectionWithInstanceIds;
208  LOP_SelectionRuleMap mySelectionRuleMap;
209  int mySelectionVersionId;
210  int myExpansionStateVersionId;
211  LOP_ExpansionEffect myLastExpansionStateEffect;
212  UT_StringHolder myCachedResolverContextAssetPath;
213  UT_StringMap<UT_StringHolder> myCachedResolverContextStrings;
214  UT_StringMap<UT_StringArray> myVariantSelectionFallbacks;
215 };
216 
217 #endif
GLbitfield flags
Definition: glcorearb.h:1596
virtual bool getResolverContextAssetPath(UT_String &assetpath)
const HUSD_InstanceSelection & selectionWithInstanceIds() const
Definition: LOP_Network.h:138
void childFlagChange(OP_Node *nodeptr) override
virtual int isSubNetwork(bool includemanagementops) const
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
void onCreated() override
Overriden in VOPs.
UT_ErrorSeverity
Definition: UT_Error.h:25
const HUSD_ExpansionState & expansionState() const
Definition: LOP_Network.h:93
static const char * theChildTableName
Definition: LOP_Network.h:55
void saveOverrides(std::ostream &os)
const HUSD_PathSet & selection() const
Definition: LOP_Network.h:134
HUSD_OverridesLayerId
Definition: HUSD_Utils.h:77
HUSD_ConstOverridesPtr overrides() const
Definition: LOP_Network.h:80
const HUSD_LoadMasks & loadMasks() const
Definition: LOP_Network.h:114
GU_SelectionRule
Definition: GU_SelectType.h:40
virtual bool getResolverContextStrings(UT_StringMap< UT_StringHolder > &resolverstrings)
virtual void loadFinished()
#define LOP_API
Definition: LOP_API.h:10
GLuint const GLchar * name
Definition: glcorearb.h:786
static const UT_StringHolder EXTRA_DATA_FORMAT
Definition: LOP_Network.h:167
OP_Node * getDisplayNodePtr() override
LOP_ExpansionEffect
Definition: LOP_Network.h:43
virtual OP_ERROR save(std::ostream &os, const OP_SaveFlags &flags, const char *path_prefix="", const UT_StringHolder &name_override=UT_StringHolder())
virtual OP_ERROR cookMyLop(OP_Context &context)=0
void clearAndDestroy() override
void opChanged(OP_EventType reason, void *data=0) override
static const UT_StringHolder LAST_PICKED_NODE
Definition: LOP_Network.h:168
static const UT_StringHolder PICKED_NODES
Definition: LOP_Network.h:169
OP_EventType
Definition: OP_Value.h:22
virtual LOP_Node * getViewerLop()
LOP_NetworkCustomData
Definition: LOP_Network.h:33
HUSD_ConstPostLayersPtr postLayers() const
Definition: LOP_Network.h:88
bool load(UT_IStream &is, const char *ext="", const char *path=nullptr) override
OIIO_UTIL_API std::string extension(string_view filepath, bool include_dot=true) noexcept
const UT_StringHolder & selectionCurrentPrim() const
Definition: LOP_Network.h:136
Definition: format.h:1821