MeshLib C++ Docs
Loading...
Searching...
No Matches
MRSceneCache.h
Go to the documentation of this file.
1#pragma once
2#include "MRMesh/MRMeshFwd.h"
5#include "exports.h"
6#include <unordered_map>
7#include <typeindex>
8
9namespace MR
10{
13
14
16class MRVIEWER_CLASS SceneCache
17{
18public:
21 MRVIEWER_API static void invalidateAll();
22
23 template <typename ObjectType>
24 using ObjectList = std::vector<std::shared_ptr<ObjectType>>;
27 template <typename ObjectType, ObjectSelectivityType SelectivityType>
28 static const ObjectList<ObjectType>& getAllObjects();
29
30private:
31 MRVIEWER_API static SceneCache& instance_();
32 SceneCache() = default;
33
34 struct MRVIEWER_CLASS BasicVectorHolder
35 {
36 BasicVectorHolder() = default;
37 BasicVectorHolder( const BasicVectorHolder& ) = default;
38 BasicVectorHolder( BasicVectorHolder&& ) = default;
39 virtual ~BasicVectorHolder() = default;
40 };
41 template <typename ObjectType, ObjectSelectivityType SelectivityType>
42 struct MRVIEWER_CLASS VectorHolder : BasicVectorHolder
43 {
45 };
46 std::unordered_map<std::type_index, std::shared_ptr<BasicVectorHolder>> cachedData_;
47};
48
49template <typename ObjectType, ObjectSelectivityType SelectivityType>
51{
52 using ResultType = VectorHolder<ObjectType, SelectivityType>;
53 const auto typeIndex = std::type_index( typeid( ResultType ) );
54 auto& cachedData = instance_().cachedData_;
55 auto& cachedVec = cachedData[typeIndex];
56 if ( !cachedVec )
57 {
58 auto dataList = std::make_shared<ResultType>();
59 dataList->value = getAllObjectsInTree<ObjectType>( &SceneRoot::get(), SelectivityType );
60 cachedVec = dataList;
61 }
62 assert( cachedVec );
63 auto resPtr = dynamic_pointer_cast< ResultType >( cachedVec );
64 assert( resPtr );
65 return resPtr->value;
66}
67
68}
class to cached scene objects data
Definition MRSceneCache.h:17
virtual ~BasicVectorHolder()=default
static MRMESH_API SceneRootObject & get()
ObjectList< ObjectType > value
Definition MRSceneCache.h:44
std::vector< std::shared_ptr< ObjectT > > getAllObjectsInTree(Object *root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable)
std::vector< std::shared_ptr< ObjectType > > ObjectList
Definition MRSceneCache.h:24
static MRVIEWER_API void invalidateAll()
BasicVectorHolder(BasicVectorHolder &&)=default
BasicVectorHolder(const BasicVectorHolder &)=default
static const ObjectList< ObjectType > & getAllObjects()
Definition MRSceneCache.h:50
only for bindings generation
Definition MRCameraOrientationPlugin.h:8