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 "current render settings" metadata from the stage. If it's
124  // not set, return an empty string.
125  UT_StringHolder getCurrentRenderSettings() const;
126  // Return the paths to all render settings prims on the stage.
127  bool getAllRenderSettings(UT_StringArray &paths) const;
128  // Return a render settings path using the following priorities:
129  // 1. The provided explicit_path, if a prim exists there.
130  // 2. The current settings prim according to the stage metadata.
131  // 3. If there is exactly one settings prim on the stage, return it.
132  // If pick_first_of_many is true and there is more than one render
133  // settings prim, pick the first one.
134  // 4. Return an empty path.
135  HUSD_Path getBestRenderSettings(
136  const UT_StringRef &explicit_path =
138  bool pick_first_of_many = false) const;
139  // Return the paths to all render pass prims on the stage.
140  bool getAllRenderPasses(UT_StringArray &paths) const;
141  // Return a camera path using the following priorities:
142  // 1. The provided explicit_path, if a camera exists there.
143  // 2. The camera according to the supplied render_settings prim
144  // (note that no smart fallback is used here if the prim is empty
145  // or doesn't point to a render settings prim - use the result of
146  // getBestRenderSettings if this is the intent).
147  // 3. If there is exactly one camera prim on the stage, return it.
148  // If pick_first_of_many is true and there is more than one camera
149  // prim, pick the first one.
150  // 4. Return an empty path.
151  HUSD_Path getBestCamera(
152  const UT_StringRef &explicit_path =
154  const UT_StringHolder &render_settings =
156  bool pick_first_of_many = false) const;
157 
158  // General primitive information (parent, children, kinds)
159  bool isPrimAtPath(const UT_StringRef &primpath) const;
160  bool isActive(const UT_StringRef &primpath) const;
161  bool isVisible(const UT_StringRef &primpath,
162  const HUSD_TimeCode &time_code,
163  HUSD_TimeSampling *time_sampling=nullptr) const;
164  bool isInstance(const UT_StringRef &primpath) const;
165  bool isInstanceProxy(const UT_StringRef &primpath) const;
166  UT_StringHolder getKind(const UT_StringRef &primpath) const;
167  bool isKind(const UT_StringRef &primpath,
168  const UT_StringRef &kind) const;
169  UT_StringHolder getSpecifier(const UT_StringRef &primpath) const;
170  bool isAbstract(const UT_StringRef &primpath) const;
171  bool isModel(const UT_StringRef &primpath) const;
172  bool isComponent(const UT_StringRef &primpath) const;
173  UT_StringHolder getPrimType(const UT_StringRef &primpath) const;
174  bool isPrimType(const UT_StringRef &primpath,
175  const UT_StringRef &type) const;
176  bool hasPrimAPI(const UT_StringRef &primpath,
177  const UT_StringRef &api) const;
178  bool hasPayload(const UT_StringRef &primpath) const;
179  UT_StringHolder getIcon(const UT_StringRef &primpath) const;
180  UT_StringHolder getPurpose(const UT_StringRef &primpath) const;
181  UT_StringHolder getDrawMode(const UT_StringRef &primpath) const;
182 
183  // Tests the value of the "editable" attribute from the HoudiniEditableAPI
184  // schema, used to indicate if a prim should be modified by LOPs.
185  bool isEditable(const UT_StringRef &primpath) const;
186  // Tests the value of the "selectable" attribute from the
187  // HoudiniSelectableAPI schema, used to indicate if a prim is selectable.
188  bool isSelectable(const UT_StringRef &primpath,
189  UT_Map<HUSD_Path, bool> *cache = nullptr) const;
190  // Tests the value of the IsHidden metadata, used to indicate if a prim
191  // should be shown in the scene graph tree.
192  bool isHiddenInUi(const UT_StringRef &primpath) const;
193 
194  // Determines the primitive kind that should be used for the specified
195  // primitive to maintain a valid model kind hierarchy.
196  UT_StringHolder getAutoParentPrimKind(
197  const UT_StringRef &primpath) const;
198 
199  // Get information about child primitives.
200  bool hasChildren(const UT_StringRef &primpath) const;
201  void getChildren(const UT_StringRef &primpath,
202  UT_StringArray &childnames) const;
203 
204  // Return a simple count of the number of direct child prims.
205  exint getChildCount(const UT_StringRef &primpath,
206  HUSD_PrimTraversalDemands demands) const;
207  // Return a simple count of the number of descendant prims.
208  exint getDescendantCount(const UT_StringRef &primpath,
209  HUSD_PrimTraversalDemands demands) const;
210 
211  // Gather general statistics about the descendants of a primitive.
213  STATS_SIMPLE_COUNTS = 0x0000,
214  STATS_PURPOSE_COUNTS = 0x0001,
215  STATS_GEOMETRY_COUNTS = 0x0002,
216  STATS_KIND_COUNTS = 0x0004,
217  STATS_EXCLUDE_ROOT_PRIM = 0x0008
218  };
219  void getDescendantStats(const UT_StringRef &primpath,
220  UT_Options &stats,
221  DescendantStatsFlags
222  flags = STATS_SIMPLE_COUNTS) const;
223 
224  // Searches up the scene graph tree starting from "primpath" looking for
225  // the first prim with the specified kindhint. If none of that kind are
226  // found, it will look for the least nested prim of the base kind. So
227  // if kindhint is assembly, and there is no assembly, it will return
228  // the least nested group. Then fall back to the least nested model.
229  // Then finall fall back to returning the original primpath. This
230  // method will never return an empty string. If kindhint is an empty
231  // string, the original primpath is always returned.
232  UT_StringHolder getSelectionAncestor(const UT_StringRef &primpath,
233  const UT_StringRef &kindhint,
234  bool allow_kind_mismatch,
235  bool allow_instance_proxies,
236  bool allow_hidden_prims) const;
237 
238  // Populates "stats" with counts of various features of the stage.
239  // Wrapper around API method UsdUtilsComputeUsdStageStats
240  bool computeStageStats(UT_Options &stats) const;
241 
242  static bool computeStageStats(const UT_StringRef &path,
243  UT_Options &stats);
244 
245  // Wrapper for UsdUtilsComputeAllDependencies
246  static bool computeAllDependencies(const UT_StringRef &path,
247  UT_StringArray &layers,
248  UT_StringArray &resolved,
249  UT_StringArray &unresolved);
250 
251  // Wrapper for UsdUtilsExtractExternalReferences
252  static bool extractExternalReferences(const UT_StringRef &path,
253  UT_StringArray &sub_layers,
254  UT_StringArray &references,
255  UT_StringArray &payloads);
256 
257  // Evaluates a primitive pattern on a stage created by loading the
258  // specified USD file.
259  static bool getExpandedPathSet(const UT_StringRef &filepath,
260  const UT_StringRef &primpattern,
261  HUSD_PathSet &paths);
262 
263  // Return true if the layer identified by the path and file format
264  // arguments provided has any prims outside the specified path.
265  static bool hasAnyPrimsOutside(const UT_StringRef &filepath,
266  const UT_StringMap<UT_StringHolder> &fileargs,
267  const UT_StringRef &primpath);
268 
269  // Return the root prims in the layer identified by the path and file
270  // format arguments provided. The root prims are added to the output
271  // string set as paths.
272  static bool getLayerRootPrims(const UT_StringRef &filepath,
273  const UT_StringMap<UT_StringHolder> &fileargs,
274  HUSD_PathSet &rootprims);
275 
276  // Return the root prim metadata of the supplied layer.
277  static bool getLayerMetadata(const UT_StringRef &filepath,
278  fpreal64 &starttime, fpreal64 &endtime, fpreal64 &tcps);
279 
280  // Return a map of strings to strings that should be used when creating
281  // a USD stage from the provided layer file. Return false if the layer
282  // could not be opened.
283  static bool getResolverContextStrings(const UT_StringRef &filepath,
285 
286  // Properties, Relationships & Attributes
287  enum class QueryAspect
288  {
289  ANY, // Any attribute
290  ARRAY // Attribute of some array type.
291  };
292 
293  // Checks existence or property of a prim's attribute.
294  bool isAttribAtPath(const UT_StringRef &attribpath,
295  QueryAspect query = QueryAspect::ANY) const;
296  bool isAttribAtPath(const UT_StringRef &primpath,
297  const UT_StringRef &attribname,
298  QueryAspect query = QueryAspect::ANY) const;
299 
300  // Check if an attribute has authored values
301  bool hasAuthoredValueForAttrib(const UT_StringRef &primpath,
302  const UT_StringRef &attribname) const;
303 
304  // Length of array attributes (1 for non-arrays).
305  exint getAttribLength(const UT_StringRef &attribpath,
306  const HUSD_TimeCode &time_code,
307  HUSD_TimeSampling *time_sampling=nullptr) const;
308  exint getAttribLength(const UT_StringRef &primpath,
309  const UT_StringRef &attribname,
310  const HUSD_TimeCode &time_code,
311  HUSD_TimeSampling *time_sampling=nullptr) const;
312 
313  // Tuple size of attributes (eg, 2,3,4 for vectors, 1 for scalars)
314  // For array attributes, returns the tuple size of contained element type.
315  exint getAttribSize(const UT_StringRef &attribpath) const;
316  exint getAttribSize(const UT_StringRef &primpath,
317  const UT_StringRef &attribname) const;
318 
319  // Returns the name of the attribute type (eg, "float", "double3[]").
320  // Note, this is different than attribute value type name (eg, "GfVec3d")
321  UT_StringHolder getAttribTypeName(const UT_StringRef &attrpath) const;
322  UT_StringHolder getAttribTypeName(const UT_StringRef &primpath,
323  const UT_StringRef &attribname) const;
324 
325  // Time samples array (may be empty)
326  bool getAttribTimeSamples(const UT_StringRef &attribpath,
327  UT_FprealArray &time_samples) const;
328  bool getAttribTimeSamples(const UT_StringRef &primpath,
329  const UT_StringRef &attribname,
330  UT_FprealArray &time_samples) const;
331 
332  // Transforms
333  UT_Matrix4D getLocalXform(const UT_StringRef &primpath,
334  const HUSD_TimeCode &time_code,
335  HUSD_TimeSampling *time_sampling=nullptr) const;
336  UT_Matrix4D getWorldXform(const UT_StringRef &primpath,
337  const HUSD_TimeCode &time_code,
338  HUSD_TimeSampling *time_sampling=nullptr) const;
339  UT_Matrix4D getParentXform(const UT_StringRef &primpath,
340  const HUSD_TimeCode &time_code,
341  HUSD_TimeSampling *time_sampling=nullptr) const;
342  UT_Matrix4D getXformFromOpOrder(const UT_StringRef &primpath,
343  const HUSD_TimeCode &time_code,
344  const UT_StringArray &xformOpOrder,
345  HUSD_TimeSampling *time_sampling=nullptr) const;
346  bool getXformOrder(const UT_StringRef &primpath,
347  UT_StringArray &xform_order) const;
348  bool isXformReset(const UT_StringRef &primpath) const;
349  bool getXformTimeSamples(const UT_StringRef &primpath,
350  const UT_Vector2F &interval,
351  UT_Array<HUSD_TimeCode> &timecodes) const;
352 
353  UT_StringHolder findXformName(const UT_StringRef &primpath,
354  const UT_StringRef &xform_name_suffix) const;
355  UT_StringHolder getUniqueXformName(const UT_StringRef &primpath,
356  HUSD_XformType type,
357  const UT_StringRef &xform_name_suffix) const;
358 
359  static const UT_StringHolder &getTransformAttribName();
360  static const UT_StringHolder &getTimeVaryingAttribName();
361  void getAttributeNames(const UT_StringRef &primpath,
362  UT_ArrayStringSet &attrib_names) const;
363  void extractAttributes(const UT_StringRef &primpath,
364  const UT_ArrayStringSet &which_attribs,
365  const HUSD_TimeCode &tc,
367  HUSD_TimeSampling *time_sampling=nullptr) const;
368 
369  // Bounds
370  UT_BoundingBoxD getBounds(const UT_StringRef &primpath,
371  const UT_StringArray &purposes,
372  const HUSD_TimeCode &time_code) const;
373 
374  // Get the path to our thumbanil from the prim's asset info.
375  UT_StringHolder getThumbnail(const UT_StringRef &primpath) const;
376 
377  // Point Instancers
378  bool getPointInstancerXforms( const UT_StringRef &primpath,
379  UT_Array<UT_Matrix4D> &xforms,
380  const HUSD_TimeCode &time_code);
381  UT_BoundingBoxD getPointInstancerBounds(const UT_StringRef &primpath,
382  exint instance_index,
383  const UT_StringArray &purposes,
384  const HUSD_TimeCode &time_code) const;
385  int getPointInstancerInstanceCount(
386  const UT_StringRef &primpath,
387  const HUSD_TimeCode &time_code) const;
388 
389  // Lights
390  bool hasAnyVisibleLights(
391  const HUSD_TimeCode &time_code) const;
392 
393  // Cameras
394  bool getCameraParms(const UT_StringRef &primpath,
395  const HUSD_TimeCode &time_code,
396  UT_CameraParms &camparms) const;
397 
398  // Variants
399  bool getVariantSets(const UT_StringRef &primpath,
400  UT_StringArray &vset_names) const;
401  bool getVariants(const UT_StringRef &primpath,
402  const UT_StringRef &variantset,
403  UT_StringArray &vset_names) const;
404  UT_StringHolder getVariantSelection(const UT_StringRef &primpath,
405  const UT_StringRef &variantset) const;
406 
407  // Collections
408  bool isCollectionAtPath(
409  const UT_StringRef &collectionpath) const;
410  UT_StringHolder getCollectionExpansionRule(
411  const UT_StringRef &collectionpath) const;
412  bool getCollectionIncludePaths(
413  const UT_StringRef &collectionpath,
414  UT_StringArray &primpaths) const;
415  bool getCollectionExcludePaths(
416  const UT_StringRef &collectionpath,
417  UT_StringArray &primpaths) const;
418  bool getCollectionComputedPaths(
419  const UT_StringRef &collectionpath,
420  UT_StringArray &primpaths) const;
421  bool collectionContains(
422  const UT_StringRef &collectionpath,
423  const UT_StringRef &primpath) const;
424  bool getCollections(const UT_StringRef &primpath,
426  &collection_info_map) const;
427 
428  // Materials
429  UT_StringHolder getBoundMaterial(const UT_StringRef &primpath) const;
430 
431  // Primvars
432  bool isPrimvarAtPath(const UT_StringRef &primpath,
433  const UT_StringRef &primvarname,
434  QueryAspect query = QueryAspect::ANY,
435  bool allow_inheritance = false) const;
436  void getPrimvarNames(const UT_StringRef &primpath,
437  UT_ArrayStringSet &primvar_names,
438  bool allow_inheritance = false) const;
439  exint getPrimvarLength(const UT_StringRef &primpath,
440  const UT_StringRef &primvarname,
441  const HUSD_TimeCode &time_code,
442  HUSD_TimeSampling *time_sampling=nullptr,
443  bool allow_inheritance = false) const;
444  exint getPrimvarSize(const UT_StringRef &primpath,
445  const UT_StringRef &primvarname,
446  bool allow_inheritance = false) const;
447  UT_StringHolder getPrimvarTypeName(const UT_StringRef &primpath,
448  const UT_StringRef &primvarname,
449  bool allow_inheritance = false) const;
450  bool getPrimvarTimeSamples(const UT_StringRef &primpath,
451  const UT_StringRef &primvarname,
452  UT_FprealArray &time_samples,
453  bool allow_inheritance = false) const;
454 
455  // Relationships
456  void getRelationshipNames(const UT_StringRef &primpath,
457  UT_ArrayStringSet &rel_names) const;
458 
459  bool isRelationshipAtPath(
460  const UT_StringRef &relpath) const;
461  bool isRelationshipAtPath(const UT_StringRef &primpath,
462  const UT_StringRef &relationahipname) const;
463 
464  bool getRelationshipTargets (
465  const UT_StringRef &relpath,
466  UT_StringArray &target_paths) const;
467  bool getRelationshipTargets (
468  const UT_StringRef &primpath,
469  const UT_StringRef &relationshipname,
470  UT_StringArray &target_paths) const;
471 
472  bool getRelationshipForwardedTargets (
473  const UT_StringRef &relpath,
474  UT_StringArray &target_paths) const;
475  bool getRelationshipForwardedTargets (
476  const UT_StringRef &primpath,
477  const UT_StringRef &relationshipname,
478  UT_StringArray &target_paths) const;
479 
480  bool hasAuthoredTargetsForRelationship(
481  const UT_StringRef &primpath,
482  const UT_StringRef &relationshipname) const;
483 
484  // Properties
485  bool isPropertyAtPath(
486  const UT_StringRef &propertypath) const;
487  bool isPropertyAtPath(const UT_StringRef &primpath,
488  const UT_StringRef &propertyname) const;
489 
490  bool hasAuthoredValueForProperty(
491  const UT_StringRef &primpath,
492  const UT_StringRef &propertyname) const;
493 
494  // Metadata
495  void getMetadataNames(const UT_StringRef &object_path,
496  UT_ArrayStringSet &metadata_names) const;
497  bool isMetadataAtPath(const UT_StringRef &object_path,
498  const UT_StringRef &metadata_name,
499  QueryAspect query = QueryAspect::ANY) const;
500  exint getMetadataLength(const UT_StringRef &object_path,
501  const UT_StringRef &metadata_name) const;
502 
503  // Access information from the active layer, rather than the stage.
504  bool isActiveLayerPrimAtPath(const UT_StringRef &primpath,
505  const UT_StringRef &prim_type =
507  // Returns the identifiers and a human readable name for all sublayers of
508  // the active layer in strongest to weakest order.
509  bool getActiveLayerSubLayers(UT_StringArray &names,
510  UT_StringArray &identifiers,
511  UT_IntArray &fromlops,
512  UT_IntArray &fromsops) const;
513 
514  // Shader parameters.
515  void getShaderInputAttributeNames(
516  const UT_StringRef &primpath,
517  UT_ArrayStringSet &attrib_names) const;
518 
519  // Obtains a value for a metadata on a given object.
520  // The object path can point to a primitive, attribute, or a relationship.
521  // The metadata name can be a simple name (eg, "active") or a name path
522  // into metadata dictionaries (eg "assetInfo:foo" or "customData:bar:baz").
523  template<typename UtValueType>
524  bool getMetadata(const UT_StringRef &object_path,
525  const UT_StringRef &name,
526  UtValueType &value) const;
527 
528  // Obtains a value for custom data on a given object.
529  template<typename UtValueType>
530  bool getCustomData(const UT_StringRef &primpath,
531  const UT_StringRef &name,
532  UtValueType &value) const;
533 
534  // Obtains a value for asset info on a given object.
535  template<typename UtValueType>
536  bool getAssetInfo(const UT_StringRef &primpath,
537  const UT_StringRef &name,
538  UtValueType &value) const;
539 
540 private:
542  HUSD_AutoAnyLock &myAnyLock;
543 };
544 
545 #endif
546 
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:109
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:212
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:310
HUSD_TimeSampling
Definition: HUSD_Utils.h:105
GLuint const GLchar * name
Definition: glcorearb.h:786
A map of string to various well defined value types.
Definition: UT_Options.h:84
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