All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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  */
18 #ifndef __XUSD_Utils_h__
19 #define __XUSD_Utils_h__
21 #include "HUSD_API.h"
22 #include "HUSD_DataHandle.h"
23 #include "HUSD_Utils.h"
24 #include "XUSD_PathSet.h"
25 #include <OP/OP_ItemId.h>
26 #include <UT/UT_StringHolder.h>
27 #include <UT/UT_StringArray.h>
28 #include <UT/UT_StringMMPattern.h>
29 #include <UT/UT_Map.h>
30 #include <pxr/usd/sdf/fileFormat.h>
31 #include <pxr/usd/sdf/layer.h>
33 #include <pxr/usd/sdf/path.h>
34 #include <pxr/usd/usd/prim.h>
35 #include <pxr/usd/usd/stage.h>
36 #include <pxr/usd/usd/timeCode.h>
39 class HUSD_LayerOffset;
40 class HUSD_LoadMasks;
41 class HUSD_TimeCode;
45 class UsdGeomPrimvar;
46 class UsdGeomXformCache;
49 {
50 public:
52  { }
54  { }
56  virtual int getPriority() const = 0;
57  virtual UsdStageRefPtr createStage(UsdStage::InitialLoadSet loadset,
58  int nodeid) const = 0;
59 };
61 extern "C" {
64 };
67 {
68 public:
69  explicit XUSD_SavePathInfo()
70  : myNodeBasedPath(false)
71  { }
72  explicit XUSD_SavePathInfo(const UT_StringHolder &finalpath)
73  : myFinalPath(finalpath),
74  myOriginalPath(finalpath),
75  myNodeBasedPath(false)
76  { }
77  explicit XUSD_SavePathInfo(const UT_StringHolder &finalpath,
78  const UT_StringHolder &originalpath,
79  bool node_based_path)
80  : myFinalPath(finalpath),
81  myOriginalPath(originalpath),
82  myNodeBasedPath(node_based_path)
83  { }
88 };
95 // Helper function to convert a node id directly to a node path, and return
96 // true if the conversion was successful.
97 HUSD_API bool HUSDgetNodePath(int nodeid, UT_StringHolder &nodepath);
98 // Similar to the above method, but for the dedicated purpose of returning a
99 // std::string to pass to HUSDcreateAnonymousLayer.
114 HUSD_API const TfType &HUSDfindType(const UT_StringRef &type_name);
115 HUSD_API bool HUSDisDerivedType(const UsdPrim &prim,
116  const TfType &base_type);
118 // Path conversion functions.
123 // Timecode conversion functions.
127  const HUSD_TimeCode &timecode);
129  const HUSD_TimeCode &timecode,
130  const UsdAttribute &attr);
132  const HUSD_TimeCode &timecode,
133  const UsdAttribute &attr);
136 // Layer offset conversion.
138 HUSDgetSdfLayerOffset(const HUSD_LayerOffset &layeroffset);
140 HUSDgetLayerOffset(const SdfLayerOffset &layeroffset);
142 // Other functions to convert from HUSD classes to USD equivalents.
146 HUSDgetUsdListPosition(const UT_StringRef &editopstr);
152 // Determine if a layer comes from a SOP or not.
153 HUSD_API bool
154 HUSDisSopLayer(const std::string &identifier);
155 HUSD_API bool
156 HUSDisSopLayer(const SdfLayerHandle &layer);
158 // Determine if the specified layer should be saved to disk when saving a
159 // LOP network which sublayers or references this layer.
160 HUSD_API bool
161 HUSDshouldSaveLayerToDisk(const SdfLayerHandle &layer);
163 // Figures out from the layer metadata where the layer should be saved. This
164 // method only works on layers that return true from HUSDshouldSaveLayerToDisk.
166 HUSDgetLayerSaveLocation(const SdfLayerHandle &layer,
167  bool *using_node_path = nullptr);
169 // Get (creating if requested) the special prim that gets put on LOP layers
170 // to hold special layer information (save path, creator node, editor nodes,
171 // etc.) We store this on the custom data of a dedicated prim instead of on
172 // the layer root because custom data on the layer root can cause a whole lot
173 // of recomposition.
174 HUSD_API SdfPrimSpecHandle
175 HUSDgetLayerInfoPrim(const SdfLayerHandle &layer, bool create);
177 // Get or set the save path custom data on a layer. Used by the above
178 // HUSDgetLayerSaveLocation as one of the methods to determine where a layer
179 // should be saved.
180 HUSD_API void
181 HUSDsetSavePath(const SdfLayerHandle &layer,
182  const UT_StringRef &savepath);
183 HUSD_API bool
184 HUSDgetSavePath(const SdfLayerHandle &layer,
185  std::string &savepath);
187 // Get or set the save control token which modified how the USD ROP treats
188 // this layer when it is being saved with various options.
189 HUSD_API void
190 HUSDsetSaveControl(const SdfLayerHandle &layer,
191  const UT_StringRef &savecontrol);
192 HUSD_API bool
193 HUSDgetSaveControl(const SdfLayerHandle &layer,
194  std::string &savecontrol);
196 HUSD_API void
197 HUSDsetCreatorNode(const SdfLayerHandle &layer, int node_id);
198 HUSD_API void
199 HUSDsetCreatorNode(const SdfLayerHandle &layer, const std::string &nodepath);
200 HUSD_API bool
201 HUSDgetCreatorNode(const SdfLayerHandle &layer, std::string &nodepath);
203 HUSD_API void
204 HUSDsetSourceNode(const UsdPrim &prim, int node_id);
205 HUSD_API bool
206 HUSDgetSourceNode(const UsdPrim &prim, std::string &nodepath);
208 HUSD_API void
209 HUSDclearEditorNodes(const SdfLayerHandle &layer);
210 HUSD_API void
211 HUSDaddEditorNode(const SdfLayerHandle &layer, int node_id);
212 HUSD_API bool
213 HUSDgetEditorNodes(const SdfLayerHandle &layer,
214  std::vector<std::string> &nodepaths);
216 // Set the list of SdfPaths of all solo'ed lights. This information is stored
217 // as custom data on the HoudiniLayerInfo prim. These methods should only be
218 // used by HUSD_Overrides.
219 HUSD_API void
220 HUSDsetSoloLightPaths(const SdfLayerHandle &layer,
221  const std::vector<std::string> &paths);
222 HUSD_API bool
223 HUSDgetSoloLightPaths(const SdfLayerHandle &layer,
224  std::vector<std::string> &paths);
226 // Set the list of SdfPaths of all solo'ed geometry. This information is stored
227 // as custom data on the HoudiniLayerInfo prim. These methods should only be
228 // used by HUSD_Overrides.
229 HUSD_API void
230 HUSDsetSoloGeometryPaths(const SdfLayerHandle &layer,
231  const std::vector<std::string> &paths);
232 HUSD_API bool
233 HUSDgetSoloGeometryPaths(const SdfLayerHandle &layer,
234  std::vector<std::string> &paths);
236 // Set the Editor node for a specific USD primitive. This is stored as custom
237 // data on the primitive, and indicates the node that last modified this
238 // primitive, and so the node that we should use for any future requests to
239 // edit the prim.
240 HUSD_API void
241 HUSDsetPrimEditorNodeId(const UsdPrim &prim, int node_id);
242 HUSD_API void
243 HUSDsetPrimEditorNodeId(const SdfPrimSpecHandle &prim, int node_id);
245 HUSD_API void
246 HUSDclearDataId(const UsdAttribute &attr);
249 HUSDgetParentKind(const TfToken &kind);
251 // Create a new primitive in the specified layer. The stage parameter may or
252 // may not include the layer. It is used only to look up any existing prims
253 // so we know which ancestors of the new prim should be defined and which
254 // should simply be over prims. If the requested prim already exists on the
255 // stage, this function does nothing.
256 HUSD_API SdfPrimSpecHandle
258  const SdfLayerHandle &layer,
259  const SdfPath &path,
260  const TfToken &kind,
261  bool parent_prims_define,
262  const std::string &parent_prims_type);
264 HUSD_API bool
265 HUSDcopySpec(const SdfLayerHandle &srclayer,
266  const SdfPath &srcpath,
267  const SdfLayerHandle &destlayer,
268  const SdfPath &destath,
269  const SdfPath &srcroot = SdfPath(),
270  const SdfPath &destroot = SdfPath());
272 // This function duplicates the functionality of
273 // SdfLayer::UpdateExternalRefernce, but can retarget a bunch of references
274 // with a single method call, and thus a single traversal.
275 HUSD_API bool
276 HUSDupdateExternalReferences(const SdfLayerHandle &layer,
277  const std::map<std::string, std::string> &pathmap);
279 HUSD_API bool
280 HUSDcopyLayerMetadata(const SdfLayerHandle &srclayer,
281  const SdfLayerHandle &destlayer);
283 HUSD_API bool
284 HUSDclearLayerMetadata(const SdfLayerHandle &destlayer);
286 // Utility function used for stitching stages together and saving them.
287 HUSD_API void
289  XUSD_IdentifierToLayerMap &layermap,
290  bool recursive);
292 // Calls the USD stitch function but with a callback that looks for SOP data
293 // ids on the attributes to avoid creating duplicate time samples.
294 HUSD_API void
295 HUSDstitchLayers(const SdfLayerHandle &strongLayer,
296  const SdfLayerHandle &weakLayer);
297 // Stitch two stages together by stitching together their "corresponding"
298 // layers, as determined by the requested save paths for each layer.
299 HUSD_API bool
301  const UsdStageRefPtr &dest,
302  SdfLayerRefPtrVector &hold_layers);
304 // Create a new in-memory stage. Use this method instead of calling
305 // UsdStage::CreateInMemory directly, as we want to configure the stage
306 // with a reasonable identifier, and a path resolver context. The first
307 // version only sets the payload loading option, which must be set when
308 // the stage is constructed. The second version sets the payload loading
309 // option, the stage population maks, and the layer muting based on the
310 // values set in the provided load masks object.
311 HUSD_API UsdStageRefPtr
313  int resolver_context_nodeid = OP_INVALID_ITEM_ID,
314  const UsdStageWeakPtr &resolver_context_state = UsdStageWeakPtr(),
315  const ArResolverContext *resolver_context = nullptr);
316 HUSD_API UsdStageRefPtr
317 HUSDcreateStageInMemory(const HUSD_LoadMasks *load_masks,
318  int resolver_context_nodeid = OP_INVALID_ITEM_ID,
319  const UsdStageWeakPtr &resolver_context_state = UsdStageWeakPtr(),
320  const ArResolverContext *resolver_context = nullptr);
322 // Create a new anonymous layer. Usd this method instead of calling
323 // SdfLayer::CreateAnonymous directly, as we want to configure the layer
324 // with some common default data.
327  bool set_up_axis = false);
334 };
336 // Combine layers together based on some options and custom data set on each
337 // layer in the stack (or referenced by a layer in the stack).
340  int flatten_flags,
341  SdfLayerRefPtrVector &explicit_layers);
343 // Combine all layers in the stack by calling the USD flatten layers method.
345 HUSDflattenLayers(const UsdStageWeakPtr &stage);
347 // Check if the supplied layer is completely devoid of any useful information.
348 // This includes both primitives and layer level metadata. However the presence
349 // of only a HoudiniLayerInfo prim may still indicate an "empty" layer if it
350 // only contains creator node information.
351 HUSD_API bool
352 HUSDisLayerEmpty(const SdfLayerHandle &layer);
353 // Check if the supplied layer is a placeholder layer.
354 HUSD_API bool
355 HUSDisLayerPlaceholder(const SdfLayerHandle &layer);
356 // As above, but takes an identifier, which is used to find the layer handle.
357 HUSD_API bool
358 HUSDisLayerPlaceholder(const std::string &identifier);
360 // Return the SdfPath that should be passed to create a reference to the
361 // specified layer. This gives priority to any passed in ref prim path
362 // string, then the layer's default prim (if one is set), then looks at
363 // the layer root prims and picks the first geometry primitive, or the
364 // first primitive if there are no geometry primitives. Raises an warning
365 // if it picks a primitive, but there are other primitives.
367 HUSDgetBestRefPrimPath(const UT_StringRef &reffilepath,
369  const UT_StringRef &refprimpath,
370  UsdStageRefPtr &stage);
371 HUSD_API void
372 HUSDclearBestRefPathCache(const std::string &layeridentifier = std::string());
374 // Functions for checking the amount of time sampling of an attribute/xfrom:
384 // Conveninece methods for updating the given time sampling.
385 HUSD_API void
387  HUSD_TimeSampling new_sampling );
388 HUSD_API void
390  const UsdAttribute &attrib);
391 HUSD_API void
393  const UsdGeomPrimvar &primvar);
394 HUSD_API void
396  const UsdPrim &prim);
397 HUSD_API void
399  const UsdPrim &prim);
401 // Returns ture if an attribute (or any aspect of a local transform)
402 // has more than 1 time sample.
403 HUSD_API bool
405 HUSD_API bool
408 // Takes a set of paths, and compares them to a stage. In any case where all
409 // the children of a prim are in the set, remove the children, and add the
410 // parent prim instead. This finds the smallest possible set of prims on which
411 // to set an inheritable attribute such that it will affect the original set
412 // of paths. The "skip_point_instancers" flag can be set to true if point
413 // instancers should not be allowed to combine with its siblings, for cases
414 // where the point instancer instances need to be treated individually.
415 HUSD_API void
417  bool skip_point_instancers,
418  const UsdStageRefPtr &stage,
423 #endif
HUSD_API UsdTimeCode HUSDgetNonDefaultUsdTimeCode(const HUSD_TimeCode &timecode)
HUSD_API const SdfPath & HUSDgetHoudiniLayerInfoSdfPath()
HUSD_API bool HUSDgetSoloGeometryPaths(const SdfLayerHandle &layer, std::vector< std::string > &paths)
HUSD_API void HUSDaddEditorNode(const SdfLayerHandle &layer, int node_id)
HUSD_API const TfToken & HUSDgetSoloLightPathsToken()
GLenum src
Definition: glew.h:2410
HUSD_API void HUSDupdateValueTimeSampling(HUSD_TimeSampling &sampling, const UsdAttribute &attrib)
HUSD_API bool HUSDisLayerEmpty(const SdfLayerHandle &layer)
HUSD_API const TfToken & HUSDgetPrimEditorNodeIdToken()
Definition: common.h:110
Unsorted map container.
Definition: UT_Map.h:83
virtual UsdStageRefPtr createStage(UsdStage::InitialLoadSet loadset, int nodeid) const =0
HUSD_API void HUSDsetSaveControl(const SdfLayerHandle &layer, const UT_StringRef &savecontrol)
HUSD_API bool HUSDvalueMightBeTimeVarying(const UsdAttribute &attrib)
HUSD_API SdfLayerRefPtr HUSDcreateAnonymousLayer(const std::string &tag=std::string(), bool set_up_axis=false)
const Args & args
Definition: printf.h:628
HUSD_API void HUSDupdateTimeSampling(HUSD_TimeSampling &sampling, HUSD_TimeSampling new_sampling)
Definition: OP_ItemId.h:23
HUSD_API HUSD_LayerOffset HUSDgetLayerOffset(const SdfLayerOffset &layeroffset)
UT_Map< std::string, SdfLayerRefPtr > XUSD_IdentifierToLayerMap
Definition: XUSD_Utils.h:91
HUSD_API std::string HUSDgetLayerSaveLocation(const SdfLayerHandle &layer, bool *using_node_path=nullptr)
HUSD_API Usd_PrimFlagsPredicate HUSDgetUsdPrimPredicate(HUSD_PrimTraversalDemands demands)
HUSD_API bool HUSDgetNodePath(int nodeid, UT_StringHolder &nodepath)
HUSD_API SdfPath HUSDgetBestRefPrimPath(const UT_StringRef &reffilepath, const SdfFileFormat::FileFormatArguments &args, const UT_StringRef &refprimpath, UsdStageRefPtr &stage)
HUSD_API SdfLayerOffset HUSDgetSdfLayerOffset(const HUSD_LayerOffset &layeroffset)
#define HUSD_API
Definition: HUSD_API.h:32
HUSD_API SdfVariability HUSDgetSdfVariability(HUSD_Variability variability)
HUSD_API void HUSDclearEditorNodes(const SdfLayerHandle &layer)
HUSD_API const TfToken & HUSDgetMaterialBindingIdToken()
HUSD_API bool HUSDgetSoloLightPaths(const SdfLayerHandle &layer, std::vector< std::string > &paths)
HUSD_API HUSD_TimeCode HUSDgetEffectiveTimeCode(const HUSD_TimeCode &timecode, const UsdAttribute &attr)
HUSD_API void HUSDclearBestRefPathCache(const std::string &layeridentifier=std::string())
Definition: stage.h:155
HUSD_API bool HUSDisSopLayer(const std::string &identifier)
HUSD_API HUSD_TimeSampling HUSDgetWorldTransformTimeSampling(const UsdPrim &pr)
Definition: HUSD_Utils.h:29
HUSD_API UsdListPosition HUSDgetUsdListPosition(const UT_StringRef &editopstr)
HUSD_API bool HUSDupdateExternalReferences(const SdfLayerHandle &layer, const std::map< std::string, std::string > &pathmap)
HUSD_API bool HUSDgetSaveControl(const SdfLayerHandle &layer, std::string &savecontrol)
HUSD_API UsdStagePopulationMask HUSDgetUsdStagePopulationMask(const HUSD_LoadMasks &load_masks)
HUSD_API bool HUSDgetSourceNode(const UsdPrim &prim, std::string &nodepath)
HUSD_API bool HUSDcopyLayerMetadata(const SdfLayerHandle &srclayer, const SdfLayerHandle &destlayer)
HUSD_API bool HUSDgetSavePath(const SdfLayerHandle &layer, std::string &savepath)
HUSD_API SdfPrimSpecHandle HUSDgetLayerInfoPrim(const SdfLayerHandle &layer, bool create)
HUSD_API void HUSDsetSoloGeometryPaths(const SdfLayerHandle &layer, const std::vector< std::string > &paths)
HUSD_API bool HUSDaddStageTimeSample(const UsdStageWeakPtr &src, const UsdStageRefPtr &dest, SdfLayerRefPtrVector &hold_layers)
Definition: HUSD_Utils.h:67
HUSD_API UsdStageRefPtr HUSDcreateStageInMemory(UsdStage::InitialLoadSet load, int resolver_context_nodeid=OP_INVALID_ITEM_ID, const UsdStageWeakPtr &resolver_context_state=UsdStageWeakPtr(), const ArResolverContext *resolver_context=nullptr)
Definition: token.h:89
UT_Map< std::string, XUSD_SavePathInfo > XUSD_IdentifierToSavePathMap
Definition: XUSD_Utils.h:93
HUSD_API void HUSDaddExternalReferencesToLayerMap(const SdfLayerRefPtr &layer, XUSD_IdentifierToLayerMap &layermap, bool recursive)
HUSD_API const TfToken & HUSDgetSavePathToken()
UT_StringHolder myFinalPath
Definition: XUSD_Utils.h:85
HUSD_API bool HUSDgetCreatorNode(const SdfLayerHandle &layer, std::string &nodepath)
std::vector< TfRefPtr< SdfLayer > > SdfLayerRefPtrVector
HUSD_API bool HUSDclearLayerMetadata(const SdfLayerHandle &destlayer)
HUSD_API HUSD_TimeSampling HUSDgetValueTimeSampling(const UsdAttribute &attrib)
Definition: HUSD_Utils.h:82
HUSD_API void HUSDsetPrimEditorNodeId(const UsdPrim &prim, int node_id)
HUSD_API void HUSDupdateWorldTransformTimeSampling(HUSD_TimeSampling &samplig, const UsdPrim &prim)
HUSD_API const TfToken & HUSDgetEditorNodesToken()
HUSD_API void HUSDsetCreatorNode(const SdfLayerHandle &layer, int node_id)
Definition: prim.h:131
HUSD_API bool HUSDisLayerPlaceholder(const SdfLayerHandle &layer)
HUSD_API const TfType & HUSDfindType(const UT_StringRef &type_name)
virtual ~XUSD_StageFactory()
Definition: XUSD_Utils.h:53
HUSD_API SdfLayerRefPtr HUSDflattenLayers(const UsdStageWeakPtr &stage)
HUSD_API void HUSDsetSavePath(const SdfLayerHandle &layer, const UT_StringRef &savepath)
HUSD_API UsdTimeCode HUSDgetEffectiveUsdTimeCode(const HUSD_TimeCode &timecode, const UsdAttribute &attr)
Definition: path.h:287
HUSD_API HUSD_TimeSampling HUSDgetLocalTransformTimeSampling(const UsdPrim &pr)
std::vector< class SdfPath > SdfPathVector
A vector of SdfPaths.
Definition: path.h:208
HUSD_API const TfToken & HUSDgetSaveControlToken()
Definition: types.h:182
GLsizei const GLchar *const * path
Definition: glew.h:6461
UsdStagePtr UsdStageWeakPtr
Definition: common.h:55
HUSD_API const TfToken & HUSDgetSourceNodeToken()
GLsizei const GLchar *const * string
Definition: glew.h:1844
HUSD_API void HUSDsetSourceNode(const UsdPrim &prim, int node_id)
SYS_VISIBILITY_EXPORT void newStageFactory(UT_Array< XUSD_StageFactory * > *factories)
HUSD_API bool HUSDcopySpec(const SdfLayerHandle &srclayer, const SdfPath &srcpath, const SdfLayerHandle &destlayer, const SdfPath &destath, const SdfPath &srcroot=SdfPath(), const SdfPath &destroot=SdfPath())
HUSD_API UsdTimeCode HUSDgetCurrentUsdTimeCode()
Definition: path.h:1245
HUSD_API const TfToken & HUSDgetCreatorNodeToken()
HUSD_API bool HUSDlocalTransformMightBeTimeVarying(const UsdPrim &prim)
HUSD_API const TfToken & HUSDgetSoloGeometryPathsToken()
virtual int getPriority() const =0
HUSD_API UsdTimeCode HUSDgetUsdTimeCode(const HUSD_TimeCode &timecode)
HUSD_API SdfPath HUSDgetSdfPath(const UT_StringRef &path)
Definition: XUSD_Utils.h:329
XUSD_SavePathInfo(const UT_StringHolder &finalpath, const UT_StringHolder &originalpath, bool node_based_path)
Definition: XUSD_Utils.h:77
HUSD_API void HUSDgetMinimalPathsForInheritableProperty(bool skip_point_instancers, const UsdStageRefPtr &stage, XUSD_PathSet &paths)
HUSD_API SdfPrimSpecHandle HUSDcreatePrimInLayer(const UsdStageWeakPtr &stage, const SdfLayerHandle &layer, const SdfPath &path, const TfToken &kind, bool parent_prims_define, const std::string &parent_prims_type)
GLint GLboolean GLint layer
Definition: glew.h:3601
Definition: pxr.h:83
HUSD_API void HUSDstitchLayers(const SdfLayerHandle &strongLayer, const SdfLayerHandle &weakLayer)
HUSD_API void HUSDsetSoloLightPaths(const SdfLayerHandle &layer, const std::vector< std::string > &paths)
HUSD_API bool HUSDshouldSaveLayerToDisk(const SdfLayerHandle &layer)
Definition: type.h:70
HUSD_API const TfToken & HUSDgetDataIdToken()
HUSD_API bool HUSDgetEditorNodes(const SdfLayerHandle &layer, std::vector< std::string > &nodepaths)
HUSD_API const TfToken & HUSDgetMaterialIdToken()
XUSD_SavePathInfo(const UT_StringHolder &finalpath)
Definition: XUSD_Utils.h:72
HUSD_API void HUSDclearDataId(const UsdAttribute &attr)
HUSD_API void HUSDupdateLocalTransformTimeSampling(HUSD_TimeSampling &samplig, const UsdPrim &prim)
std::map< std::string, std::string > FileFormatArguments
Definition: fileFormat.h:113
HUSD_API std::string HUSDgetTag(const XUSD_DataLockPtr &datalock)
HUSD_API SdfLayerRefPtr HUSDflattenLayerPartitions(const UsdStageWeakPtr &stage, int flatten_flags, SdfLayerRefPtrVector &explicit_layers)
UT_StringHolder myOriginalPath
Definition: XUSD_Utils.h:86
HUSD_API TfToken HUSDgetParentKind(const TfToken &kind)
GLenum const void * paths
Definition: glew.h:13589
HUSD_API bool HUSDisDerivedType(const UsdPrim &prim, const TfType &base_type)
HUSD_API SdfPathVector HUSDgetSdfPaths(const UT_StringArray &paths)