24 #ifndef PXR_USD_USD_GEOM_BBOX_CACHE_H
25 #define PXR_USD_USD_GEOM_BBOX_CACHE_H
37 #include <hboost/optional.hpp>
38 #include <hboost/shared_array.hpp>
110 bool useExtentsHint=
false,
bool ignoreVisibility=
false);
118 UsdGeomBBoxCache &
operator=(UsdGeomBBoxCache
const &other);
160 const UsdPrim &relativeToAncestorPrim);
217 int64_t
const *instanceIdBegin,
245 int64_t
const *instanceIdBegin,
247 const UsdPrim &relativeToAncestorPrim,
256 const UsdPrim &relativeToAncestorPrim) {
259 instancer, &instanceId, 1, relativeToAncestorPrim, &ret);
275 int64_t
const *instanceIdBegin,
283 int64_t instanceId) {
304 int64_t
const *instanceIdBegin,
313 int64_t instanceId) {
316 instancer, &instanceId, 1, &ret);
341 return _useExtentsHint;
347 return _ignoreVisibility;
368 _baseTime = baseTime;
374 return _baseTime.get_value_or(
GetTime());
380 _baseTime = hboost::none;
386 return static_cast<bool>(_baseTime);
394 class _PrototypeBBoxResolver;
397 typedef std::map<TfToken, GfBBox3d, TfTokenFastArbitraryLessThan>
417 struct _PrimContext {
423 TfToken instanceInheritablePurpose;
425 _PrimContext() =
default;
426 explicit _PrimContext(
const UsdPrim &prim_,
428 : prim(prim_), instanceInheritablePurpose(purpose) {};
430 bool operator==(
const _PrimContext &rhs)
const {
431 return prim == rhs.prim &&
432 instanceInheritablePurpose == rhs.instanceInheritablePurpose;
439 template<
typename TransformType>
440 GfBBox3d _ComputeBoundWithOverridesHelper(
447 _ComputePointInstanceBoundsHelper(
449 int64_t
const *instanceIdBegin,
456 bool _ShouldIncludePrim(
const UsdPrim& prim);
467 bool _Resolve(
const UsdPrim& prim, _PurposeToBBoxMap *bboxes);
474 void _ResolvePrim(_BBoxTask* task,
475 const _PrimContext& prim,
486 _PurposeToBBoxMap bboxes;
490 hboost::shared_array<UsdAttributeQuery> queries;
512 _Entry* _FindOrCreateEntriesForPrim(
513 const _PrimContext& prim,
514 std::vector<_PrimContext> *prototypePrimContexts);
518 GfBBox3d _GetCombinedBBoxForIncludedPurposes(
519 const _PurposeToBBoxMap &bboxes);
524 bool _GetBBoxFromExtentsHint(
527 _PurposeToBBoxMap *bboxes);
531 bool _ShouldPruneChildren(
const UsdPrim &prim, _Entry *entry);
539 template <
bool IsRecursive>
540 void _ComputePurposeInfo(_Entry *entry,
const _PrimContext &prim);
543 inline bool _UseExtentsHintForPrim(
UsdPrim const &prim)
const;
546 template <
typename HashState>
550 h.Append(key.instanceInheritablePurpose);
556 typedef TfHash _PrimContextHash;
560 _Entry *_FindEntry(
const _PrimContext &primContext)
567 _Entry *_InsertEntry(
const _PrimContext &primContext)
569 return &(_bboxCache[primContext]);
574 hboost::optional<UsdTimeCode> _baseTime;
577 _PrimBBoxHashMap _bboxCache;
578 bool _useExtentsHint;
579 bool _ignoreVisibility;
585 #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)
USDGEOM_API GfBBox3d ComputeWorldBoundWithOverrides(const UsdPrim &prim, const SdfPathSet &pathsToSkip, const GfMatrix4d &primOverride, const TfHashMap< SdfPath, GfMatrix4d, SdfPath::Hash > &ctmOverrides)
GT_API const UT_StringHolder time
USDGEOM_API GfBBox3d ComputeLocalBound(const UsdPrim &prim)
GLsizei const GLchar *const * string
USDGEOM_API bool ComputePointInstanceWorldBounds(const UsdGeomPointInstancer &instancer, int64_t const *instanceIdBegin, size_t numIds, GfBBox3d *result)
**But if you need a 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)
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)
friend void TfHashAppend(HashState &h, const _PrimContext &key)
std::set< class SdfPath > SdfPathSet
A set of SdfPaths.
GLfloat GLfloat GLfloat GLfloat h
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.