HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HUSD_Save.h
Go to the documentation of this file.
1 /*
2  * Copyright 2019 Side Effects Software Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 #ifndef __HUSD_Save_h__
19 #define __HUSD_Save_h__
20 
21 #include "HUSD_API.h"
22 #include "HUSD_DataHandle.h"
23 #include "HUSD_OutputProcessor.h"
24 #include "HUSD_TimeCode.h"
25 #include <UT/UT_Interval.h>
26 #include <UT/UT_Options.h>
27 #include <UT/UT_PathPattern.h>
28 #include <UT/UT_StringHolder.h>
29 #include <UT/UT_StringMap.h>
30 #include <UT/UT_UniquePtr.h>
31 #include <SYS/SYS_Types.h>
32 
33 class OP_Node;
34 
40 };
41 
43 {
45  const UT_Options &overrides=UT_Options())
46  : myProcessor(processor), myOverrides(overrides) {}
49 };
52 
53 // Some simple structs that just handle lumping bits of save configuration
54 // data together.
56 {
57 public:
63  { }
64 
69 };
70 
72 {
73 public:
75  : myConfigNode(nullptr),
76  myLopNode(nullptr),
77  myConfigTime(0.0),
78  myReplaceHfs(true)
79  { }
80 
86 };
87 
89 {
90 public:
92  : myRequireDefaultPrim(false)
93  { }
94 
97 };
98 
100 {
101 public:
103  : myClearHoudiniCustomData(false),
104  myFlattenFileLayers(false),
105  myFlattenSopLayers(false),
108  mySaveFilesFromDisk(false),
109  myEnsureMetricsSet(false),
110  myTrackPrimExistence(false),
111  myMuteLayersBeforeSave(false),
112  myTimeSamplesRange(SYS_FP64_MAX, -SYS_FP64_MAX), // initially "invalid"
114  { }
115 
127 };
128 
130 {
131 public:
132  HUSD_Save();
133  ~HUSD_Save();
134 
135  bool addCombinedTimeSample(const HUSD_AutoReadLock &lock,
136  const HUSD_TimeCode &timecode);
137  bool saveCombined(const UT_StringRef &filepath,
138  bool filepath_is_time_dependent,
139  UT_StringMap<UT_StringHolder> &saved_paths);
140  void clearSaveHistory();
141  bool save(const HUSD_AutoReadLock &lock,
142  const HUSD_TimeCode &timecode,
143  const UT_StringRef &filepath,
144  bool filepath_is_time_dependent,
145  UT_StringMap<UT_StringHolder> &saved_paths);
146 
148  { return mySaveStyle; }
149  void setSaveStyle(HUSD_SaveStyle save_style)
150  { mySaveStyle = save_style; }
151 
152  bool requireDefaultPrim() const
153  { return myDefaultPrimData.myRequireDefaultPrim; }
154  void setRequireDefaultPrim(bool require_default_prim)
155  { myDefaultPrimData.
156  myRequireDefaultPrim = require_default_prim; }
157 
159  { return myDefaultPrimData.myDefaultPrim; }
160  void setDefaultPrim(const UT_StringHolder &defaultprim)
161  { myDefaultPrimData.myDefaultPrim = defaultprim; }
162 
164  { return myFlags.myClearHoudiniCustomData; }
165  void setClearHoudiniCustomData(bool clear_data)
166  { myFlags.myClearHoudiniCustomData = clear_data; }
167 
168  bool flattenFileLayers() const
169  { return myFlags.myFlattenFileLayers; }
170  void setFlattenFileLayers(bool flatten_file_layers)
171  { myFlags.myFlattenFileLayers = flatten_file_layers; }
172 
173  bool flattenSopLayers() const
174  { return myFlags.myFlattenSopLayers; }
175  void setFlattenSopLayers(bool flatten_sop_layers)
176  { myFlags.myFlattenSopLayers = flatten_sop_layers; }
177 
179  { return myFlags.myErrorSavingImplicitPaths; }
181  { myFlags.myErrorSavingImplicitPaths = error; }
182 
184  { return myFlags.myIgnoreSavingImplicitPaths; }
186  { myFlags.myIgnoreSavingImplicitPaths = ignore; }
187 
188  bool saveFilesFromDisk() const
189  { return myFlags.mySaveFilesFromDisk; }
190  void setSaveFilesFromDisk(bool save)
191  { myFlags.mySaveFilesFromDisk = save; }
192 
193  bool ensureMetricsSet() const
194  { return myFlags.myEnsureMetricsSet; }
196  { myFlags.myEnsureMetricsSet = set; }
197 
198  bool trackPrimExistence() const
199  { return myFlags.myTrackPrimExistence; }
200  void setTrackPrimExistence(bool track_existence)
201  { myFlags.myTrackPrimExistence = track_existence; }
202 
203  bool muteLayersBeforeSave() const
204  { return myFlags.myMuteLayersBeforeSave; }
205  void setMuteLayersBeforeSave(bool mute_layers)
206  { myFlags.myMuteLayersBeforeSave = mute_layers; }
207 
209  { return myFlags.myTimeSamplesRange; }
211  { myFlags.myTimeSamplesRange = range; }
213  { return myFlags.myTimeSamplesRangePadding; }
215  { myFlags.myTimeSamplesRangePadding = padding; }
216 
218  { return mySaveFilesPattern.get(); }
220  {
221  if (pattern.isstring())
222  mySaveFilesPattern.reset(
223  new UT_PathPattern(pattern));
224  else
225  mySaveFilesPattern.reset();
226  }
227 
229  { return myTimeData.myStartFrame; }
230  void setStartFrame(fpreal64 start_time = -SYS_FP64_MAX)
231  { myTimeData.myStartFrame = start_time; }
232 
234  { return myTimeData.myEndFrame; }
236  { myTimeData.myEndFrame = end_time; }
237 
239  { return myTimeData.myTimeCodesPerSecond; }
241  { myTimeData.myTimeCodesPerSecond = tps; }
242 
244  { return myTimeData.myFramesPerSecond; }
246  { myTimeData.myFramesPerSecond = fps; }
247 
249  { return myProcessorData.myProcessors; }
251  {
252  myProcessorData.myProcessors.clear();
253  for (auto &&processor : aps)
254  {
255  myProcessorData.myProcessors.append({processor});
256  }
257  }
260  { myProcessorData.myProcessors = aps; }
261 
263  { return myProcessorData.myConfigNode; }
265  { myProcessorData.myConfigNode = config_node; }
266 
268  { return myProcessorData.myConfigTime; }
270  { myProcessorData.myConfigTime = t; }
271 
273  { return myProcessorData.myReplaceHfs; }
274  void setOutputProcessorsReplaceHfs(bool replacehfs)
275  { myProcessorData.myReplaceHfs = replacehfs; }
276 
277 private:
278  class husd_SavePrivate;
279 
281  UT_UniquePtr<UT_PathPattern> mySaveFilesPattern;
282  HUSD_SaveStyle mySaveStyle;
283  husd_SaveProcessorData myProcessorData;
284  husd_SaveDefaultPrimData myDefaultPrimData;
285  husd_SaveTimeData myTimeData;
286  husd_SaveConfigFlags myFlags;
287 };
288 
289 #endif
290 
fpreal64 startFrame() const
Definition: HUSD_Save.h:228
fpreal64 myTimeCodesPerSecond
Definition: HUSD_Save.h:67
bool myClearHoudiniCustomData
Definition: HUSD_Save.h:116
GLenum GLint * range
Definition: glcorearb.h:1925
void setDefaultPrim(const UT_StringHolder &defaultprim)
Definition: HUSD_Save.h:160
bool requireDefaultPrim() const
Definition: HUSD_Save.h:152
fpreal64 endFrame() const
Definition: HUSD_Save.h:233
bool errorSavingImplicitPaths() const
Definition: HUSD_Save.h:178
#define HUSD_API
Definition: HUSD_API.h:31
const HUSD_OutputProcessorAndOverridesArray & outputProcessors() const
Definition: HUSD_Save.h:248
void setSaveStyle(HUSD_SaveStyle save_style)
Definition: HUSD_Save.h:149
fpreal64 framesPerSecond() const
Definition: HUSD_Save.h:243
void setSaveFilesPattern(const UT_StringHolder &pattern)
Definition: HUSD_Save.h:219
const UT_StringHolder & defaultPrim() const
Definition: HUSD_Save.h:158
bool ignoreSavingImplicitPaths() const
Definition: HUSD_Save.h:183
#define SYS_FP64_MAX
Definition: SYS_Types.h:222
HUSD_OutputProcessorAndOverrides(HUSD_OutputProcessorPtr processor, const UT_Options &overrides=UT_Options())
Definition: HUSD_Save.h:44
bool ensureMetricsSet() const
Definition: HUSD_Save.h:193
const UT_IntervalD & timeSamplesRange() const
Definition: HUSD_Save.h:208
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
Definition: UT_UniquePtr.h:39
< returns > If no error
Definition: snippets.dox:2
double fpreal64
Definition: SYS_Types.h:201
void setOutputProcessors(const HUSD_OutputProcessorAndOverridesArray &aps)
Definition: HUSD_Save.h:258
fpreal64 myStartFrame
Definition: HUSD_Save.h:65
OP_Node * outputProcessorsConfigNode() const
Definition: HUSD_Save.h:262
void setOutputProcessorsConfigNode(OP_Node *config_node)
Definition: HUSD_Save.h:264
void ignore(T const &) VULKAN_HPP_NOEXCEPT
Definition: vulkan.hpp:6508
constexpr auto set(type rhs) -> int
Definition: core.h:610
void setTimeCodesPerSecond(fpreal64 tps=SYS_FP64_MAX)
Definition: HUSD_Save.h:240
void setFlattenSopLayers(bool flatten_sop_layers)
Definition: HUSD_Save.h:175
fpreal64 timeCodesPerSecond() const
Definition: HUSD_Save.h:238
HUSD_SaveStyle
Definition: HUSD_Save.h:35
bool myIgnoreSavingImplicitPaths
Definition: HUSD_Save.h:120
GLushort pattern
Definition: glad.h:2583
void setRequireDefaultPrim(bool require_default_prim)
Definition: HUSD_Save.h:154
void setTrackPrimExistence(bool track_existence)
Definition: HUSD_Save.h:200
bool myErrorSavingImplicitPaths
Definition: HUSD_Save.h:119
fpreal outputProcessorsTime() const
Definition: HUSD_Save.h:267
GLdouble t
Definition: glad.h:2397
void setEnsureMetricsSet(bool set)
Definition: HUSD_Save.h:195
fpreal64 myFramesPerSecond
Definition: HUSD_Save.h:68
UT_IntervalD myTimeSamplesRange
Definition: HUSD_Save.h:125
bool flattenFileLayers() const
Definition: HUSD_Save.h:168
A map of string to various well defined value types.
Definition: UT_Options.h:84
void setFramesPerSecond(fpreal64 fps=SYS_FP64_MAX)
Definition: HUSD_Save.h:245
const UT_PathPattern * saveFilesPattern() const
Definition: HUSD_Save.h:217
fpreal64 fpreal
Definition: SYS_Types.h:278
OP_Node * myConfigNode
Definition: HUSD_Save.h:82
HUSD_OutputProcessorPtr myProcessor
Definition: HUSD_Save.h:47
bool flattenSopLayers() const
Definition: HUSD_Save.h:173
void setTimeSamplesRange(const UT_IntervalD &range)
Definition: HUSD_Save.h:210
void setErrorSavingImplicitPaths(bool error)
Definition: HUSD_Save.h:180
UT_StringHolder myDefaultPrim
Definition: HUSD_Save.h:95
void setOutputProcessors(const HUSD_OutputProcessorArray &aps)
Definition: HUSD_Save.h:250
fpreal64 timeSamplesRangePadding() const
Definition: HUSD_Save.h:212
void setIgnoreSavingImplicitPaths(bool ignore)
Definition: HUSD_Save.h:185
bool clearHoudiniCustomData() const
Definition: HUSD_Save.h:163
fpreal64 myEndFrame
Definition: HUSD_Save.h:66
HUSD_OutputProcessorAndOverridesArray myProcessors
Definition: HUSD_Save.h:81
bool muteLayersBeforeSave() const
Definition: HUSD_Save.h:203
void setOutputProcessorsReplaceHfs(bool replacehfs)
Definition: HUSD_Save.h:274
fpreal64 myTimeSamplesRangePadding
Definition: HUSD_Save.h:126
void setStartFrame(fpreal64 start_time=-SYS_FP64_MAX)
Definition: HUSD_Save.h:230
void setTimeSamplesRangePadding(fpreal64 padding)
Definition: HUSD_Save.h:214
void setEndFrame(fpreal64 end_time=SYS_FP64_MAX)
Definition: HUSD_Save.h:235
bool trackPrimExistence() const
Definition: HUSD_Save.h:198
bool saveFilesFromDisk() const
Definition: HUSD_Save.h:188
void setSaveFilesFromDisk(bool save)
Definition: HUSD_Save.h:190
void setOutputProcessorsTime(fpreal t)
Definition: HUSD_Save.h:269
SYS_FORCE_INLINE bool isstring() const
void setFlattenFileLayers(bool flatten_file_layers)
Definition: HUSD_Save.h:170
void setClearHoudiniCustomData(bool clear_data)
Definition: HUSD_Save.h:165
UT_SharedPtr< HUSD_OutputProcessor > HUSD_OutputProcessorPtr
HUSD_SaveStyle saveStyle() const
Definition: HUSD_Save.h:147
bool outputProcessorsReplaceHfs() const
Definition: HUSD_Save.h:272
void setMuteLayersBeforeSave(bool mute_layers)
Definition: HUSD_Save.h:205