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  void resetOverrides();
85 
87  { return myPostLayers; }
88  HUSD_PostLayersPtr editablePostLayers();
89  void resetPostLayers();
90 
92  { return myExpansionState; }
93  bool changeExpansionState(const HUSD_Path &path,
94  bool pinned, bool expanded);
95  bool setExpansionState(const HUSD_ExpansionState &
96  expansion_state);
97  bool setExpansionLockState(const HUSD_Path &path,
98  bool locked,
99  const HUSD_PathSet *
100  expanded_subpaths = nullptr,
101  bool use_pinned_subpaths = false,
102  bool preserve_descendant_expansion = false);
103  void undoExpansionLockState(
105  swap_locked_paths,
107  swap_locked_expanded_paths);
108  void updateOverridesWithExpansionState(
109  const HUSD_DataHandle &viewerdatahandle,
110  const HUSD_DataHandle &lopdatahandle);
111 
112  const HUSD_LoadMasks &loadMasks() const
113  { return myLoadMasks; }
114  void setLoadMasks(const HUSD_LoadMasks &load_masks);
115 
116  bool setStateFromDataBlock(
117  const UT_StringRef &blockname,
118  const char *blocktype = nullptr);
119  bool saveExpansionState(
120  const UT_StringHolder &expansionname,
121  const HUSD_ExpansionState &expansion);
122  bool saveOverrides(
123  const UT_StringHolder &overridesname,
124  const HUSD_Overrides &overrides);
125  bool savePostLayers(
126  const UT_StringHolder &postlayersname,
127  const HUSD_PostLayers &postlayers);
128  bool saveLoadMasks(
129  const UT_StringHolder &load_masks_name,
130  const HUSD_LoadMasks &load_masks);
131 
132  const HUSD_PathSet &selection() const
133  { return mySelection; }
135  { return mySelectionCurrentPrim; }
137  { return mySelectionWithInstanceIds; }
138  // Return true if the selection is actually changed by this call.
139  // If not, we do not send the OP_DATA_USERSELECTION_CHANGED event.
140  bool modifySelection(const HUSD_PathSet &paths,
141  const HUSD_InstanceSelection &
142  paths_with_instance_ids,
143  const UT_StringHolder *currentprim =
144  nullptr,
145  GU_SelectionRule rule =
147 
148  const LOP_SelectionRuleMap &selectionRules() const;
149  void clearSelectionRules();
150  void removeSelectionRule(
151  const UT_StringHolder &name);
152  void addSelectionRule(
153  const UT_StringHolder &name,
154  const LOP_SelectionRule &collection);
155 
156  void saveSelectionRules(std::ostream &os) const;
157  bool loadSelectionRules(UT_IStream &is);
158 
159  void getPinnedPrimitives(
160  UT_String &pinnedprims) const;
161  void setPinnedPrimitives(
162  const UT_StringRef &pinnedprims);
163 
164  // Key strings we use during snapshot network serialisation
168 
169  // When we take a render gallery snapshot, we also save the state of the
170  // LOP network. This method encapsulates saving this data.
171  void saveNetworkForSnapshot(std::ostream &os);
172 
173  UT_StringHolder getRenderGallerySource() const;
174  bool saveRenderGalleryToDisk();
175 
176  static UT_StringHolder makeValidSelectionRuleName(
177  const UT_StringHolder &name);
178 
179 protected:
180  LOP_Network(OP_Network *parent, const char *name,
181  OP_Operator *entry);
182  ~LOP_Network() override;
183 
184  void clearAndDestroy() override;
185 
186  OP_ERROR cookMyLop(OP_Context &context) override;
187 
188  OP_ERROR save(std::ostream &os, const OP_SaveFlags &flags,
189  const char *pathPrefix,
190  const UT_StringHolder &name_override =
191  UT_StringHolder()) override;
192  bool load(UT_IStream &is, const char *extension,
193  const char *path=0) override;
194  void loadFinished() override;
195 
196 private:
197  static void forceRecookAllChildren(LOP_Node *root, bool firstcall);
198 
199  HUSD_ExpansionState myExpansionState;
200  HUSD_LoadMasks myLoadMasks;
201  HUSD_PostLayersPtr myPostLayers;
202  HUSD_OverridesPtr myOverrides;
203  HUSD_PathSet mySelection;
204  UT_StringHolder mySelectionCurrentPrim;
205  HUSD_InstanceSelection mySelectionWithInstanceIds;
206  LOP_SelectionRuleMap mySelectionRuleMap;
207  int mySelectionVersionId;
208  int myExpansionStateVersionId;
209  LOP_ExpansionEffect myLastExpansionStateEffect;
210  UT_StringHolder myCachedResolverContextAssetPath;
211  UT_StringMap<UT_StringHolder> myCachedResolverContextStrings;
212  UT_StringMap<UT_StringArray> myVariantSelectionFallbacks;
213 };
214 
215 #endif
GLbitfield flags
Definition: glcorearb.h:1596
virtual bool getResolverContextAssetPath(UT_String &assetpath)
const HUSD_InstanceSelection & selectionWithInstanceIds() const
Definition: LOP_Network.h:136
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:91
static const char * theChildTableName
Definition: LOP_Network.h:55
void saveOverrides(std::ostream &os)
const HUSD_PathSet & selection() const
Definition: LOP_Network.h:132
HUSD_ConstOverridesPtr overrides() const
Definition: LOP_Network.h:80
const HUSD_LoadMasks & loadMasks() const
Definition: LOP_Network.h:112
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:165
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:166
static const UT_StringHolder PICKED_NODES
Definition: LOP_Network.h:167
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:86
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:134
Definition: format.h:1821