MeshLib C++ Docs
Loading...
Searching...
No Matches
MRObjectsAccess.h
Go to the documentation of this file.
1#pragma once
2#include "MRObject.h"
3#include "MRPch/MRBindingMacros.h"
4
5namespace MR
6{
7
10
11enum class MRMESH_CLASS ObjectSelectivityType
12{
15 Any
16};
17
19template<typename ObjectT = Object>
20std::shared_ptr<ObjectT> asSelectivityType( std::shared_ptr<Object> obj, const ObjectSelectivityType& type );
21
24template<typename ObjectT = Object>
25std::vector<std::shared_ptr<ObjectT>> getAllObjectsInTree( Object* root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable );
26template<typename ObjectT = Object>
27MR_BIND_IGNORE inline std::vector<std::shared_ptr<ObjectT>> getAllObjectsInTree( Object& root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable )
28 { return getAllObjectsInTree<ObjectT>( &root, type ); }
29
31template<typename ObjectT = Object>
32std::vector<std::shared_ptr<ObjectT>> getTopmostVisibleObjects( Object* root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable )
33 { return getTopmostObjects<ObjectT>( root, type, true ); }
34template<typename ObjectT = Object>
35MR_BIND_IGNORE inline std::vector<std::shared_ptr<ObjectT>> getTopmostVisibleObjects( Object& root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable )
36 { return getTopmostObjects<ObjectT>( &root, type, true ); }
37
39template<typename ObjectT = Object>
40std::vector<std::shared_ptr<ObjectT>> getTopmostObjects( Object* root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable, bool visibilityCheck = false );
41template<typename ObjectT = Object>
42MR_BIND_IGNORE inline std::vector<std::shared_ptr<ObjectT>> getTopmostObjects( Object& root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable, bool visibilityCheck = false )
43 { return getTopmostObjects<ObjectT>( &root, type, visibilityCheck ); }
44
46template<typename ObjectT = Object>
47std::shared_ptr<ObjectT> getDepthFirstObject( Object* root, const ObjectSelectivityType& type );
48template<typename ObjectT = Object>
49MR_BIND_IGNORE inline std::shared_ptr<ObjectT> getDepthFirstObject( Object& root, const ObjectSelectivityType& type )
50 { return getDepthFirstObject<ObjectT>( &root, type ); }
51
53
54inline bool objectHasSelectableChildren( const MR::Object& object )
55{
56 for ( const auto& child : object.children() )
57 {
58 if ( !child->isAncillary() || objectHasSelectableChildren( *child ) )
59 return true;
60 }
61 return false;
62}
63
64}
65
66#include "MRObjectsAccess.hpp"
#define MRMESH_CLASS
Definition MRMesh/MRMeshFwd.h:84
Selectable
Definition MRObjectsAccess.h:13
Selected
Definition MRObjectsAccess.h:14
named object in the data model
Definition MRObject.h:62
Definition MRCameraOrientationPlugin.h:8
std::vector< std::shared_ptr< ObjectT > > getAllObjectsInTree(Object *root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable)
std::shared_ptr< ObjectT > asSelectivityType(std::shared_ptr< Object > obj, const ObjectSelectivityType &type)
if input object is of given type then returns another pointer on it
std::vector< std::shared_ptr< ObjectT > > getTopmostVisibleObjects(Object *root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable)
Returns all topmost visible objects of given type (if an object is returned, its children are not) ex...
Definition MRObjectsAccess.h:32
bool objectHasSelectableChildren(const MR::Object &object)
Definition MRObjectsAccess.h:54
std::array< Vector3f, 3 > MR_BIND_IGNORE
Definition MRMeshBuilderTypes.h:10
std::vector< std::shared_ptr< ObjectT > > getTopmostObjects(Object *root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable, bool visibilityCheck=false)
Returns all topmost objects of given type (if an object is returned, its children are not) excluding ...
std::shared_ptr< ObjectT > getDepthFirstObject(Object *root, const ObjectSelectivityType &type)
return first object of given type in depth-first traverse order excluding root