24 #ifndef PXR_USD_USD_GEOM_BBOX_CACHE_H
25 #define PXR_USD_USD_GEOM_BBOX_CACHE_H
36 #include <hboost/optional.hpp>
37 #include <hboost/shared_array.hpp>
109 bool useExtentsHint=
false,
bool ignoreVisibility=
false);
117 UsdGeomBBoxCache &
operator=(UsdGeomBBoxCache
const &other);
140 const UsdPrim &relativeToAncestorPrim);
197 int64_t
const *instanceIdBegin,
225 int64_t
const *instanceIdBegin,
227 const UsdPrim &relativeToAncestorPrim,
236 const UsdPrim &relativeToAncestorPrim) {
239 instancer, &instanceId, 1, relativeToAncestorPrim, &ret);
255 int64_t
const *instanceIdBegin,
263 int64_t instanceId) {
284 int64_t
const *instanceIdBegin,
293 int64_t instanceId) {
296 instancer, &instanceId, 1, &ret);
321 return _useExtentsHint;
327 return _ignoreVisibility;
348 _baseTime = baseTime;
354 return _baseTime.get_value_or(
GetTime());
360 _baseTime = hboost::none;
366 return static_cast<bool>(_baseTime);
374 class _PrototypeBBoxResolver;
377 typedef std::map<TfToken, GfBBox3d, TfTokenFastArbitraryLessThan>
397 struct _PrimContext {
403 TfToken instanceInheritablePurpose;
405 _PrimContext() =
default;
406 explicit _PrimContext(
const UsdPrim &prim_,
408 : prim(prim_), instanceInheritablePurpose(purpose) {};
410 bool operator==(
const _PrimContext &rhs)
const {
411 return prim == rhs.prim &&
412 instanceInheritablePurpose == rhs.instanceInheritablePurpose;
420 _ComputePointInstanceBoundsHelper(
422 int64_t
const *instanceIdBegin,
429 bool _ShouldIncludePrim(
const UsdPrim& prim);
440 bool _Resolve(
const UsdPrim& prim, _PurposeToBBoxMap *bboxes);
446 VtVec3fArray*
extent)
const;
453 void _ResolvePrim(_BBoxTask* task,
454 const _PrimContext& prim,
465 _PurposeToBBoxMap bboxes;
483 hboost::shared_array<UsdAttributeQuery> queries;
491 _Entry* _FindOrCreateEntriesForPrim(
492 const _PrimContext& prim,
493 std::vector<_PrimContext> *prototypePrimContexts);
497 GfBBox3d _GetCombinedBBoxForIncludedPurposes(
498 const _PurposeToBBoxMap &bboxes);
503 bool _GetBBoxFromExtentsHint(
506 _PurposeToBBoxMap *bboxes);
510 bool _ShouldPruneChildren(
const UsdPrim &prim, _Entry *entry);
518 template <
bool IsRecursive>
519 void _ComputePurposeInfo(_Entry *entry,
const _PrimContext &prim);
522 inline bool _UseExtentsHintForPrim(
UsdPrim const &prim)
const;
525 friend size_t hash_value(
const _PrimContext &key);
527 typedef hboost::hash<_PrimContext> _PrimContextHash;
531 _Entry *_FindEntry(
const _PrimContext &primContext)
538 _Entry *_InsertEntry(
const _PrimContext &primContext)
540 return &(_bboxCache[primContext]);
545 hboost::optional<UsdTimeCode> _baseTime;
548 _PrimBBoxHashMap _bboxCache;
549 bool _useExtentsHint;
550 bool _ignoreVisibility;
556 #endif // PXR_USD_USD_GEOM_BBOX_CACHE_H
USDGEOM_API GfBBox3d ComputeUntransformedBound(const UsdPrim &prim)
USDGEOM_API bool ComputePointInstanceLocalBounds(const UsdGeomPointInstancer &instancer, int64_t const *instanceIdBegin, size_t numIds, GfBBox3d *result)
USDGEOM_API void SetIncludedPurposes(const TfTokenVector &includedPurposes)
GLint GLenum GLsizei GLsizei GLsizei GLsizei extent
GT_API const UT_StringHolder time
USDGEOM_API GfBBox3d ComputeLocalBound(const UsdPrim &prim)
USDGEOM_API bool ComputePointInstanceWorldBounds(const UsdGeomPointInstancer &instancer, int64_t const *instanceIdBegin, size_t numIds, GfBBox3d *result)
bool GetIgnoreVisibility() const
USDGEOM_API void Clear()
Clears all pre-cached values.
bool GetUseExtentsHint() const
USDGEOM_API bool ComputePointInstanceUntransformedBounds(const UsdGeomPointInstancer &instancer, int64_t const *instanceIdBegin, size_t numIds, GfBBox3d *result)
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
USDGEOM_API UsdGeomBBoxCache & operator=(UsdGeomBBoxCache const &other)
Copy assignment.
friend size_t hash_value(const _PrimContext &key)
Container::mapped_type * TfMapLookupPtr(Container &map, Key const &key)
GLsizei const GLchar *const * string
GfBBox3d ComputePointInstanceRelativeBound(const UsdGeomPointInstancer &instancer, int64_t instanceId, const UsdPrim &relativeToAncestorPrim)
USDGEOM_API bool ComputePointInstanceRelativeBounds(const UsdGeomPointInstancer &instancer, int64_t const *instanceIdBegin, size_t numIds, const UsdPrim &relativeToAncestorPrim, GfBBox3d *result)
std::vector< TfToken > TfTokenVector
Convenience types.
void SetBaseTime(UsdTimeCode baseTime)
GfBBox3d ComputePointInstanceUntransformedBound(const UsdGeomPointInstancer &instancer, int64_t instanceId)
std::set< class SdfPath > SdfPathSet
A set of SdfPaths.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
GfBBox3d ComputePointInstanceLocalBound(const UsdGeomPointInstancer &instancer, int64_t instanceId)
Compute the oriented bounding boxes of the given point instances.
GfBBox3d ComputePointInstanceWorldBound(const UsdGeomPointInstancer &instancer, int64_t instanceId)
#define PXR_NAMESPACE_CLOSE_SCOPE
USDGEOM_API void SetTime(UsdTimeCode time)
UsdTimeCode GetBaseTime() const
USDGEOM_API GfBBox3d ComputeWorldBound(const UsdPrim &prim)
USDGEOM_API GfBBox3d ComputeRelativeBound(const UsdPrim &prim, const UsdPrim &relativeToAncestorPrim)
USDGEOM_API UsdGeomBBoxCache(UsdTimeCode time, TfTokenVector includedPurposes, bool useExtentsHint=false, bool ignoreVisibility=false)
const TfTokenVector & GetIncludedPurposes()
Get the current set of included purposes.
UsdTimeCode GetTime() const
Get the current time from which this cache is reading values.