7 #ifndef PXR_USD_USD_GEOM_BBOX_CACHE_H
8 #define PXR_USD_USD_GEOM_BBOX_CACHE_H
92 bool useExtentsHint=
false,
bool ignoreVisibility=
false);
100 UsdGeomBBoxCache &
operator=(UsdGeomBBoxCache
const &other);
142 const UsdPrim &relativeToAncestorPrim);
199 int64_t
const *instanceIdBegin,
227 int64_t
const *instanceIdBegin,
229 const UsdPrim &relativeToAncestorPrim,
238 const UsdPrim &relativeToAncestorPrim) {
241 instancer, &instanceId, 1, relativeToAncestorPrim, &ret);
257 int64_t
const *instanceIdBegin,
265 int64_t instanceId) {
286 int64_t
const *instanceIdBegin,
295 int64_t instanceId) {
298 instancer, &instanceId, 1, &ret);
323 return _useExtentsHint;
329 return _ignoreVisibility;
350 _baseTime = baseTime;
356 return _baseTime.value_or(
GetTime());
362 _baseTime = std::nullopt;
368 return static_cast<bool>(_baseTime);
376 class _PrototypeBBoxResolver;
379 typedef std::map<TfToken, GfBBox3d, TfTokenFastArbitraryLessThan>
399 struct _PrimContext {
405 TfToken instanceInheritablePurpose;
407 _PrimContext() =
default;
408 explicit _PrimContext(
const UsdPrim &prim_,
410 : prim(prim_), instanceInheritablePurpose(purpose) {};
412 bool operator==(
const _PrimContext &rhs)
const {
413 return prim == rhs.prim &&
414 instanceInheritablePurpose == rhs.instanceInheritablePurpose;
418 std::string ToString()
const;
421 template<
typename TransformType>
422 GfBBox3d _ComputeBoundWithOverridesHelper(
429 _ComputePointInstanceBoundsHelper(
431 int64_t
const *instanceIdBegin,
438 bool _ShouldIncludePrim(
const UsdPrim& prim);
449 bool _Resolve(
const UsdPrim& prim, _PurposeToBBoxMap *bboxes);
456 void _ResolvePrim(
const _BBoxTask* task,
457 const _PrimContext& prim,
468 _PurposeToBBoxMap bboxes;
472 std::shared_ptr<UsdAttributeQuery[]> queries;
494 _Entry* _FindOrCreateEntriesForPrim(
495 const _PrimContext& prim,
496 std::vector<_PrimContext> *prototypePrimContexts);
500 GfBBox3d _GetCombinedBBoxForIncludedPurposes(
501 const _PurposeToBBoxMap &bboxes);
506 bool _GetBBoxFromExtentsHint(
509 _PurposeToBBoxMap *bboxes);
513 bool _ShouldPruneChildren(
const UsdPrim &prim, _Entry *entry);
521 template <
bool IsRecursive>
522 void _ComputePurposeInfo(_Entry *entry,
const _PrimContext &prim);
525 inline bool _UseExtentsHintForPrim(
UsdPrim const &prim)
const;
528 template <
typename HashState>
532 h.Append(key.instanceInheritablePurpose);
538 typedef TfHash _PrimContextHash;
542 _Entry *_FindEntry(
const _PrimContext &primContext)
549 _Entry *_InsertEntry(
const _PrimContext &primContext)
551 return &(_bboxCache[primContext]);
556 std::optional<UsdTimeCode> _baseTime;
559 _PrimBBoxHashMap _bboxCache;
560 bool _useExtentsHint;
561 bool _ignoreVisibility;
567 #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)
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.