HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HUSD_Info.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_Info_h__
19 #define __HUSD_Info_h__
20 
21 #include "HUSD_API.h"
22 #include "HUSD_DataHandle.h"
23 #include "HUSD_Utils.h"
24 #include <UT/UT_ArrayStringSet.h>
25 #include <UT/UT_CameraParms.h>
26 #include <UT/UT_StringMap.h>
27 #include <UT/UT_UniquePtr.h>
28 #include <UT/UT_VectorTypes.h>
29 
30 class husd_InfoPrivate;
31 class HUSD_TimeCode;
32 class HUSD_Path;
33 enum class HUSD_XformType;
34 enum class HUSD_TimeSampling;
35 template <typename T> class UT_BoundingBoxT;
37 class UT_InfoTree;
38 class UT_Options;
40 
42 {
43 public:
44  explicit HUSD_Info(HUSD_AutoAnyLock &lock);
45  ~HUSD_Info();
46 
47  static bool isArrayValueType(const UT_StringRef &valueType);
48  static bool isTokenArrayValueType(const UT_StringRef &valueType);
49  static int valueTypeScalarSize(const UT_StringRef &valueType);
50  static bool isPrimvarName(const UT_StringRef &name);
51  static void getPrimitiveKinds(UT_StringArray &kinds);
52  static void getUsdVersionInfo(UT_StringMap<UT_StringHolder> &info);
53  static bool getUsingStageSceneIndex();
54 
55  // Get kind hierarchy information.
56  static bool isModelKind(const UT_StringRef &kind);
57  static bool isGroupKind(const UT_StringRef &kind);
58  static bool isComponentKind(const UT_StringRef &kind);
59 
60  // Test for paths that represent instance prototypes.
61  static bool isPathInPrototype(const HUSD_Path &primpath);
62 
63  // Get the global variant selection fallback settings from the USD library.
64  static void getGlobalVariantSelectionFallbacks(
66  variantselections);
67 
68  // Test if a string is a stage variable expression, optionally setting
69  // an error if the expression isn't valid.
70  static bool isStageVariableExpression(const UT_StringRef &expr,
71  bool check_for_errors = true);
72 
73  // Return true if a layer identifier indicates that this is an
74  // anonymous layer.
75  static bool isAnonymousLayer(const UT_StringRef &identifier);
76 
77  // Get basic information from the auto lock used to construct this
78  // info object.
79  bool isStageValid() const;
80  bool getStageRootLayer(UT_StringHolder &identifier) const;
81  static bool isLopLayer(const UT_StringRef &identifier);
82  static bool getLayerSavePath(const UT_StringHolder &identifier,
83  const UT_StringMap<UT_StringHolder> &refargs,
84  UT_StringHolder &savepath);
85 
86  // Reload a layer. Does the USD reload and clears Houdini-specific caches
87  // associated with loaded layers. Optionally finds all referenced layers
88  // and also reloads them (recursively).
89  static bool reload(const UT_StringRef &filepath,
90  bool recursive,
91  bool force_load = false);
92  // Reloads as above, but uses the asset resolver context from the auto lock
93  // used to construct this info object.
94  bool reloadWithContext(const UT_StringRef &filepath,
95  bool recursive,
96  bool force_load = false) const;
97  // Clear the current stage from the GusdUSD_XformCache.
98  void clearGusdXformCache() const;
99 
100  // Returns the identifiers and a human readable name for all sublayers of
101  // the stage root layer in strongest to weakest order.
102  bool getSourceLayers(UT_StringArray &names,
103  UT_StringArray &identifiers,
104  UT_IntArray &fromlops,
105  UT_IntArray &fromsops) const;
106  bool getLayerHierarchy(UT_InfoTree &hierarchy) const;
107  bool getLayerSavePath(UT_StringHolder &savepath) const;
108  bool getLayersAboveLayerBreak(
109  UT_StringArray &identifiers) const;
110 
111  // Check if the layer specified by the file path can be found. Uses the
112  // stage's resolver context if this object was created with a lock.
113  bool getLayerExists(const UT_StringRef &filepath) const;
114 
115  // Layer information
116  bool getStartTimeCode(fpreal64 &starttimecode) const;
117  bool getEndTimeCode(fpreal64 &endtimecode) const;
118  bool getFramesPerSecond(fpreal64 &fps) const;
119  bool getTimeCodesPerSecond(fpreal64 &tcs) const;
120  bool getMetrics(UT_StringHolder &upaxis,
121  fpreal64 &metersperunit) const;
122 
123  // Return the paths to all render settings prims on the stage.
124  bool getAllRenderSettings(UT_StringArray &paths) const;
125  // Return a render settings path using the following priorities:
126  // 1. The provided explicit_path, if a prim exists there.
127  // 2. The settings prim specified in the renderSource attribute on the
128  // pass prim given in renderpass_path, if a prim exists there.
129  // 3. The current settings prim according to the stage metadata.
130  // 4. If there is exactly one settings prim on the stage, return it.
131  // If pick_first_of_many is true and there is more than one render
132  // settings prim, pick the first one.
133  // 5. Return an empty path.
134  HUSD_Path getBestRenderSettings(
135  const UT_StringRef &explicit_path =
137  const UT_StringRef &renderpass_path =
139  bool pick_first_of_many = false) const;
140  // Return the paths to all render pass prims on the stage.
141  bool getAllRenderPasses(UT_StringArray &paths) const;
142  // Return a camera path using the following priorities:
143  // 1. The provided explicit_path, if a camera exists there.
144  // 2. The camera according to the supplied render_settings prim
145  // (note that no smart fallback is used here if the prim is empty
146  // or doesn't point to a render settings prim - use the result of
147  // getBestRenderSettings if this is the intent).
148  // 3. If there is exactly one camera prim on the stage, return it.
149  // If pick_first_of_many is true and there is more than one camera
150  // prim, pick the first one.
151  // 4. Return an empty path.
152  HUSD_Path getBestCamera(
153  const UT_StringRef &explicit_path =
155  const UT_StringHolder &render_settings =
157  bool pick_first_of_many = false) const;
158 
159  // General primitive information (parent, children, kinds)
160  bool isPrimAtPath(const UT_StringRef &primpath) const;
161  bool isActive(const UT_StringRef &primpath) const;
162  bool isVisible(const UT_StringRef &primpath,
163  const HUSD_TimeCode &time_code,
164  HUSD_TimeSampling *time_sampling=nullptr) const;
165  bool isInstance(const UT_StringRef &primpath) const;
166  bool isInstanceProxy(const UT_StringRef &primpath) const;
167  UT_StringHolder getKind(const UT_StringRef &primpath) const;
168  bool isKind(const UT_StringRef &primpath,
169  const UT_StringRef &kind) const;
170  UT_StringHolder getSpecifier(const UT_StringRef &primpath) const;
171  bool isAbstract(const UT_StringRef &primpath) const;
172  bool isModel(const UT_StringRef &primpath) const;
173  bool isComponent(const UT_StringRef &primpath) const;
174  UT_StringHolder getPrimType(const UT_StringRef &primpath) const;
175  bool isPrimType(const UT_StringRef &primpath,
176  const UT_StringRef &type) const;
177  bool hasPrimAPI(const UT_StringRef &primpath,
178  const UT_StringRef &api) const;
179  bool hasPayload(const UT_StringRef &primpath) const;
180  UT_StringHolder getIcon(const UT_StringRef &primpath) const;
181  UT_StringHolder getPurpose(const UT_StringRef &primpath) const;
182  UT_StringHolder getDrawMode(const UT_StringRef &primpath) const;
183 
184  // Tests the value of the "editable" attribute from the HoudiniEditableAPI
185  // schema, used to indicate if a prim should be modified by LOPs.
186  bool isEditable(const UT_StringRef &primpath) const;
187  // Tests the value of the "selectable" attribute from the
188  // HoudiniSelectableAPI schema, used to indicate if a prim is selectable.
189  bool isSelectable(const UT_StringRef &primpath,
190  UT_Map<HUSD_Path, bool> *cache = nullptr) const;
191  // Tests the value of the IsHidden metadata, used to indicate if a prim
192  // should be shown in the scene graph tree.
193  bool isHiddenInUi(const UT_StringRef &primpath) const;
194 
195  // Determines the primitive kind that should be used for the specified
196  // primitive to maintain a valid model kind hierarchy.
197  UT_StringHolder getAutoParentPrimKind(
198  const UT_StringRef &primpath) const;
199 
200  // Get information about child primitives.
201  bool hasChildren(const UT_StringRef &primpath) const;
202  void getChildren(const UT_StringRef &primpath,
203  UT_StringArray &childnames) const;
204  // Get the names of the child tombstones created by relocates at the prim path given.
205  UT_StringArray getTombstones(const UT_StringRef &primpath) const;
206 
207  // Return a simple count of the number of direct child prims.
208  exint getChildCount(const UT_StringRef &primpath,
210  bool includerelocates=false) const;
211  // Return a simple count of the number of descendant prims.
212  exint getDescendantCount(const UT_StringRef &primpath,
213  HUSD_PrimTraversalDemands demands) const;
214 
215  // Gather general statistics about the descendants of a primitive.
217  STATS_SIMPLE_COUNTS = 0x0000,
218  STATS_PURPOSE_COUNTS = 0x0001,
219  STATS_GEOMETRY_COUNTS = 0x0002,
220  STATS_KIND_COUNTS = 0x0004,
221  STATS_EXCLUDE_ROOT_PRIM = 0x0008
222  };
223  void getDescendantStats(const UT_StringRef &primpath,
224  UT_Options &stats,
225  DescendantStatsFlags
226  flags = STATS_SIMPLE_COUNTS) const;
227 
228  // Searches up the scene graph tree starting from "primpath" looking for
229  // the first prim with the specified kindhint. If none of that kind are
230  // found, it will look for the least nested prim of the base kind. So
231  // if kindhint is assembly, and there is no assembly, it will return
232  // the least nested group. Then fall back to the least nested model.
233  // Then finall fall back to returning the original primpath. This
234  // method will never return an empty string. If kindhint is an empty
235  // string, the original primpath is always returned.
236  UT_StringHolder getSelectionAncestor(const UT_StringRef &primpath,
237  const UT_StringRef &kindhint,
238  bool allow_kind_mismatch,
239  bool allow_instance_proxies,
240  bool allow_hidden_prims) const;
241 
242  // Populates "stats" with counts of various features of the stage.
243  // Wrapper around API method UsdUtilsComputeUsdStageStats
244  bool computeStageStats(UT_Options &stats) const;
245 
246  static bool computeStageStats(const UT_StringRef &path,
247  UT_Options &stats);
248 
249  // Wrapper for UsdUtilsComputeAllDependencies
250  static bool computeAllDependencies(const UT_StringRef &path,
251  UT_StringArray &layers,
252  UT_StringArray &resolved,
253  UT_StringArray &unresolved);
254 
255  // Wrapper for UsdUtilsExtractExternalReferences
256  static bool extractExternalReferences(const UT_StringRef &path,
257  UT_StringArray &sub_layers,
258  UT_StringArray &references,
259  UT_StringArray &payloads);
260 
261  // Evaluates a primitive pattern on a stage created by loading the
262  // specified USD file.
263  static bool getExpandedPathSet(const UT_StringRef &filepath,
264  const UT_StringRef &primpattern,
265  HUSD_PathSet &paths);
266 
267  // Return true if the layer identified by the path and file format
268  // arguments provided has any prims outside the specified path.
269  static bool hasAnyPrimsOutside(const UT_StringRef &filepath,
270  const UT_StringMap<UT_StringHolder> &fileargs,
271  const UT_StringRef &primpath);
272 
273  // Return the root prim metadata of the supplied layer.
274  static bool getLayerMetadata(const UT_StringRef &filepath,
275  fpreal64 &starttime, fpreal64 &endtime, fpreal64 &tcps);
276 
277  // Return a map of strings to strings that should be used when creating
278  // a USD stage from the provided layer file. Return false if the layer
279  // could not be opened.
280  static bool getResolverContextStrings(const UT_StringRef &filepath,
282 
283  // Properties, Relationships & Attributes
284  enum class QueryAspect
285  {
286  ANY, // Any attribute
287  ARRAY // Attribute of some array type.
288  };
289 
290  // Checks existence or property of a prim's attribute.
291  bool isAttribAtPath(const UT_StringRef &attribpath,
292  QueryAspect query = QueryAspect::ANY) const;
293  bool isAttribAtPath(const UT_StringRef &primpath,
294  const UT_StringRef &attribname,
295  QueryAspect query = QueryAspect::ANY) const;
296 
297  // Check if an attribute has authored values
298  bool hasAuthoredValueForAttrib(const UT_StringRef &primpath,
299  const UT_StringRef &attribname) const;
300 
301  // Length of array attributes (1 for non-arrays).
302  exint getAttribLength(const UT_StringRef &attribpath,
303  const HUSD_TimeCode &time_code,
304  HUSD_TimeSampling *time_sampling=nullptr) const;
305  exint getAttribLength(const UT_StringRef &primpath,
306  const UT_StringRef &attribname,
307  const HUSD_TimeCode &time_code,
308  HUSD_TimeSampling *time_sampling=nullptr) const;
309 
310  // Tuple size of attributes (eg, 2,3,4 for vectors, 1 for scalars)
311  // For array attributes, returns the tuple size of contained element type.
312  exint getAttribSize(const UT_StringRef &attribpath) const;
313  exint getAttribSize(const UT_StringRef &primpath,
314  const UT_StringRef &attribname) const;
315 
316  // Returns the name of the attribute type (eg, "float", "double3[]").
317  // Note, this is different than attribute value type name (eg, "GfVec3d")
318  UT_StringHolder getAttribTypeName(const UT_StringRef &attrpath) const;
319  UT_StringHolder getAttribTypeName(const UT_StringRef &primpath,
320  const UT_StringRef &attribname) const;
321 
322  // Time samples array (may be empty)
323  bool getAttribTimeSamples(const UT_StringRef &attribpath,
324  UT_FprealArray &time_samples) const;
325  bool getAttribTimeSamples(const UT_StringRef &primpath,
326  const UT_StringRef &attribname,
327  UT_FprealArray &time_samples) const;
328 
329  // Transforms
330  UT_Matrix4D getLocalXform(const UT_StringRef &primpath,
331  const HUSD_TimeCode &time_code,
332  HUSD_TimeSampling *time_sampling=nullptr) const;
333  UT_Matrix4D getWorldXform(const UT_StringRef &primpath,
334  const HUSD_TimeCode &time_code,
335  HUSD_TimeSampling *time_sampling=nullptr) const;
336  UT_Matrix4D getParentXform(const UT_StringRef &primpath,
337  const HUSD_TimeCode &time_code,
338  HUSD_TimeSampling *time_sampling=nullptr) const;
339  bool getXformOrder(const UT_StringRef &primpath,
340  UT_StringArray &xform_order) const;
341  bool isXformReset(const UT_StringRef &primpath) const;
342  bool getXformTimeSamples(const UT_StringRef &primpath,
343  const UT_Vector2F &interval,
344  bool include_interval_limits,
345  UT_Array<HUSD_TimeCode> &timecodes) const;
346 
347  UT_StringHolder findXformName(const UT_StringRef &primpath,
348  const UT_StringRef &xform_name_suffix) const;
349  UT_StringHolder getUniqueXformName(const UT_StringRef &primpath,
350  HUSD_XformType type,
351  const UT_StringRef &xform_name_suffix) const;
352 
353  static const UT_StringHolder &getTransformAttribName();
354  static const UT_StringHolder &getTimeVaryingAttribName();
355  void getAttributeNames(const UT_StringRef &primpath,
356  UT_ArrayStringSet &attrib_names) const;
357  void extractAttributes(const UT_StringRef &primpath,
358  const UT_ArrayStringSet &which_attribs,
359  const HUSD_TimeCode &tc,
361  HUSD_TimeSampling *time_sampling=nullptr) const;
362 
363  // Bounds
364  UT_BoundingBoxD getBounds(const UT_StringRef &primpath,
365  const UT_StringArray &purposes,
366  const HUSD_TimeCode &time_code) const;
367  // Returns the world-space bounds of any selection path: a plain prim
368  // path, a single point-instance selection (/foo[id]), or an arbitrarily
369  // nested point-instance selection (/foo[id1:/p1][id2:/p2]...[idN:/pN]).
370  // For nested selections each outer (non-innermost) bracket must include
371  // its ":/proto" suffix naming the next instancer in the chain - selections
372  // missing a required proto suffix yield an invalid bounding box.
373  UT_BoundingBoxD getSelectionBounds(const UT_StringRef &selpath,
374  const UT_StringArray &purposes,
375  const HUSD_TimeCode &time_code) const;
376 
377  // Get the path to our thumbanil from the prim's asset info.
378  UT_StringHolder getThumbnail(const UT_StringRef &primpath) const;
379 
380  // Point Instancers
381  bool getPointInstancerXforms( const UT_StringRef &primpath,
382  UT_Array<UT_Matrix4D> &xforms,
383  const HUSD_TimeCode &time_code);
384  UT_BoundingBoxD getPointInstancerBounds(const UT_StringRef &primpath,
385  exint instance_index,
386  const UT_StringArray &purposes,
387  const HUSD_TimeCode &time_code) const;
388  int getPointInstancerInstanceCount(
389  const UT_StringRef &primpath,
390  const HUSD_TimeCode &time_code) const;
391  // Looks up the instance index for the instance with the given id on the
392  // point instancer at primpath. Selection strings use ids, but the bounds
393  // and xform APIs need indices. Returns -1 if the prim is not a point
394  // instancer or no instance with that id exists at the given time.
395  exint getPointInstancerInstanceIndex(
396  const UT_StringRef &primpath,
397  int64 instance_id,
398  const HUSD_TimeCode &time_code) const;
399 
400  // Lights
401  bool hasAnyVisibleLights(
402  const HUSD_TimeCode &time_code) const;
403 
404  // Cameras
405  bool getCameraParms(const UT_StringRef &primpath,
406  const HUSD_TimeCode &time_code,
407  UT_CameraParms &camparms) const;
408 
409  // Variants
410  bool getVariantSets(const UT_StringRef &primpath,
411  UT_StringArray &vset_names) const;
412  bool getVariants(const UT_StringRef &primpath,
413  const UT_StringRef &variantset,
414  UT_StringArray &vset_names) const;
415  UT_StringHolder getVariantSelection(const UT_StringRef &primpath,
416  const UT_StringRef &variantset) const;
417 
418  // Collections
419  bool isCollectionAtPath(
420  const UT_StringRef &collectionpath) const;
421  UT_StringHolder getCollectionExpansionRule(
422  const UT_StringRef &collectionpath) const;
423  bool getCollectionIncludePaths(
424  const UT_StringRef &collectionpath,
425  UT_StringArray &primpaths) const;
426  bool getCollectionExcludePaths(
427  const UT_StringRef &collectionpath,
428  UT_StringArray &primpaths) const;
429  bool getCollectionComputedPaths(
430  const UT_StringRef &collectionpath,
431  UT_StringArray &primpaths) const;
432  bool collectionContains(
433  const UT_StringRef &collectionpath,
434  const UT_StringRef &primpath) const;
435  bool getCollections(const UT_StringRef &primpath,
437  &collection_info_map) const;
438 
439  // Materials
440  UT_StringHolder getBoundMaterial(const UT_StringRef &primpath) const;
441 
442  // Primvars
443  bool isPrimvarAtPath(const UT_StringRef &primpath,
444  const UT_StringRef &primvarname,
445  QueryAspect query = QueryAspect::ANY,
446  bool allow_inheritance = false) const;
447  void getPrimvarNames(const UT_StringRef &primpath,
448  UT_ArrayStringSet &primvar_names,
449  bool allow_inheritance = false) const;
450  exint getPrimvarLength(const UT_StringRef &primpath,
451  const UT_StringRef &primvarname,
452  const HUSD_TimeCode &time_code,
453  HUSD_TimeSampling *time_sampling=nullptr,
454  bool allow_inheritance = false) const;
455  exint getPrimvarSize(const UT_StringRef &primpath,
456  const UT_StringRef &primvarname,
457  bool allow_inheritance = false) const;
458  UT_StringHolder getPrimvarTypeName(const UT_StringRef &primpath,
459  const UT_StringRef &primvarname,
460  bool allow_inheritance = false) const;
461  bool getPrimvarTimeSamples(const UT_StringRef &primpath,
462  const UT_StringRef &primvarname,
463  UT_FprealArray &time_samples,
464  bool allow_inheritance = false) const;
465 
466  // Relationships
467  void getRelationshipNames(const UT_StringRef &primpath,
468  UT_ArrayStringSet &rel_names) const;
469 
470  bool isRelationshipAtPath(
471  const UT_StringRef &relpath) const;
472  bool isRelationshipAtPath(const UT_StringRef &primpath,
473  const UT_StringRef &relationahipname) const;
474 
475  bool getRelationshipTargets (
476  const UT_StringRef &relpath,
477  UT_StringArray &target_paths) const;
478  bool getRelationshipTargets (
479  const UT_StringRef &primpath,
480  const UT_StringRef &relationshipname,
481  UT_StringArray &target_paths) const;
482 
483  bool getRelationshipForwardedTargets (
484  const UT_StringRef &relpath,
485  UT_StringArray &target_paths) const;
486  bool getRelationshipForwardedTargets (
487  const UT_StringRef &primpath,
488  const UT_StringRef &relationshipname,
489  UT_StringArray &target_paths) const;
490 
491  bool hasAuthoredTargetsForRelationship(
492  const UT_StringRef &primpath,
493  const UT_StringRef &relationshipname) const;
494 
495  // Properties
496  bool isPropertyAtPath(
497  const UT_StringRef &propertypath) const;
498  bool isPropertyAtPath(const UT_StringRef &primpath,
499  const UT_StringRef &propertyname) const;
500 
501  bool hasAuthoredValueForProperty(
502  const UT_StringRef &primpath,
503  const UT_StringRef &propertyname) const;
504 
505  // Metadata
506  void getMetadataNames(const UT_StringRef &object_path,
507  UT_ArrayStringSet &metadata_names) const;
508  bool isMetadataAtPath(const UT_StringRef &object_path,
509  const UT_StringRef &metadata_name,
510  QueryAspect query = QueryAspect::ANY) const;
511  exint getMetadataLength(const UT_StringRef &object_path,
512  const UT_StringRef &metadata_name) const;
513 
514  // Access information from the active layer, rather than the stage.
515  bool isActiveLayerPrimAtPath(const UT_StringRef &primpath,
516  const UT_StringRef &prim_type =
518  // Returns the identifiers and a human readable name for all sublayers of
519  // the active layer in strongest to weakest order.
520  bool getActiveLayerSubLayers(UT_StringArray &names,
521  UT_StringArray &identifiers,
522  UT_IntArray &fromlops,
523  UT_IntArray &fromsops) const;
524  // Return the root prims in the layer identified by the path and file
525  // format arguments provided. The root prims are added to the output
526  // string set as paths. This method is non-static because it needs to
527  // know the asset resolver context from the stage.
528  bool getLayerRootPrims(const UT_StringRef &filepath,
529  const UT_StringMap<UT_StringHolder> &fileargs,
530  HUSD_PathSet &rootprims);
531 
532  // Shader parameters.
533  void getShaderInputAttributeNames(
534  const UT_StringRef &primpath,
535  UT_ArrayStringSet &attrib_names) const;
536 
537  // Obtains a value for a metadata on a given object.
538  // The object path can point to a primitive, attribute, or a relationship.
539  // The metadata name can be a simple name (eg, "active") or a name path
540  // into metadata dictionaries (eg "assetInfo:foo" or "customData:bar:baz").
541  template<typename UtValueType>
542  bool getMetadata(const UT_StringRef &object_path,
543  const UT_StringRef &name,
544  UtValueType &value) const;
545 
546  // Obtains a value for custom data on a given object.
547  template<typename UtValueType>
548  bool getCustomData(const UT_StringRef &primpath,
549  const UT_StringRef &name,
550  UtValueType &value) const;
551 
552  // Obtains a value for asset info on a given object.
553  template<typename UtValueType>
554  bool getAssetInfo(const UT_StringRef &primpath,
555  const UT_StringRef &name,
556  UtValueType &value) const;
557 
558 private:
560  HUSD_AutoAnyLock &myAnyLock;
561 };
562 
563 #endif
564 
GLenum query
Definition: glad.h:2772
GLbitfield flags
Definition: glcorearb.h:1596
PXL_API void reload()
Reload the configuration.
Unsorted map container.
Definition: UT_Map.h:114
Axis-aligned bounding box (AABB).
Definition: GEO_Detail.h:41
GLsizei const GLfloat * value
Definition: glcorearb.h:824
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
int64 exint
Definition: SYS_Types.h:125
#define HUSD_API
Definition: HUSD_API.h:31
HUSD_PrimTraversalDemands
Definition: HUSD_Utils.h:39
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
Definition: UT_UniquePtr.h:39
double fpreal64
Definition: SYS_Types.h:201
DescendantStatsFlags
Definition: HUSD_Info.h:216
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:108
GU_API GA_OffsetArray getChildren(const GU_Detail *gdp, const GA_Offset &node, bool recurse=false)
static const UT_StringHolder theEmptyString
HUSD_XformType
Definition: HUSD_Utils.h:332
HUSD_TimeSampling
Definition: HUSD_Utils.h:104
long long int64
Definition: SYS_Types.h:116
GLuint const GLchar * name
Definition: glcorearb.h:786
A map of string to various well defined value types.
Definition: UT_Options.h:87
GLenum GLsizei GLsizei GLint * values
Definition: glcorearb.h:1602
GEO_API int getPrimType(const TypeMask &mask)
UT_StringMap< UT_StringHolder > HUSD_CollectionInfoMap
Definition: HUSD_Info.h:38