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{
22 Any
23};
24
26template<typename ObjectT = Object>
27std::shared_ptr<ObjectT> asSelectivityType( std::shared_ptr<Object> obj, const ObjectSelectivityType& type );
28
31template<typename ObjectT = Object>
32std::vector<std::shared_ptr<ObjectT>> getAllObjectsInTree( Object* root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable );
33template<typename ObjectT = Object>
34MR_BIND_IGNORE inline std::vector<std::shared_ptr<ObjectT>> getAllObjectsInTree( Object& root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable )
35 { return getAllObjectsInTree<ObjectT>( &root, type ); }
36
38template<typename ObjectT = Object>
39std::vector<std::shared_ptr<ObjectT>> getTopmostVisibleObjects( Object* root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable )
40 { return getTopmostObjects<ObjectT>( root, type, true ); }
41template<typename ObjectT = Object>
42MR_BIND_IGNORE inline std::vector<std::shared_ptr<ObjectT>> getTopmostVisibleObjects( Object& root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable )
43 { return getTopmostObjects<ObjectT>( &root, type, true ); }
44
46template<typename ObjectT = Object>
47std::vector<std::shared_ptr<ObjectT>> getTopmostObjects( Object* root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable, bool visibilityCheck = false );
48template<typename ObjectT = Object>
49MR_BIND_IGNORE inline std::vector<std::shared_ptr<ObjectT>> getTopmostObjects( Object& root, const ObjectSelectivityType& type = ObjectSelectivityType::Selectable, bool visibilityCheck = false )
50 { return getTopmostObjects<ObjectT>( &root, type, visibilityCheck ); }
51
53template<typename ObjectT = Object>
54std::shared_ptr<ObjectT> getDepthFirstObject( Object* root, const ObjectSelectivityType& type );
55template<typename ObjectT = Object>
56MR_BIND_IGNORE inline std::shared_ptr<ObjectT> getDepthFirstObject( Object& root, const ObjectSelectivityType& type )
57 { return getDepthFirstObject<ObjectT>( &root, type ); }
58
60
63inline bool objectHasSelectableChildren( const MR::Object& object, bool recurse = false )
64{
65 for ( const auto& child : object.children() )
66 {
67 if ( !child->isAncillary() || ( recurse && objectHasSelectableChildren( *child, recurse ) ) )
68 return true;
69 }
70 return false;
71}
72
73}
74
75#include "MRObjectsAccess.hpp"
#define MRMESH_CLASS
Definition MRMesh/MRMeshFwd.h:84
Selectable
object itself and all its ancestors are selectable
Definition MRObjectsAccess.h:14
LocalSelectable
object itself is selectable
Definition MRObjectsAccess.h:16
LocalSelected
object itself is selected
Definition MRObjectsAccess.h:20
Selected
object itself is selected and all its ancestors are selectable
Definition MRObjectsAccess.h:18
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
bool objectHasSelectableChildren(const MR::Object &object, bool recurse=false)
Definition MRObjectsAccess.h:63
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:39
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