MeshLib C++ Docs
Loading...
Searching...
No Matches
MRAddVisualPropertiesMixin.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace MR
6{
9
10
14template <typename BaseObjectType, auto ...Properties>
15requires ( IsVisualizeMaskEnum<decltype(Properties)>::value && ... )
16class AddVisualProperties : public BaseObjectType
17{
18public:
19 using BaseObjectType::BaseObjectType;
20
22 {
23 return BaseObjectType::supportsVisualizeProperty( type ) || ( ( type.tryGet<decltype( Properties )>() == Properties ) || ... );
24 }
25
27 {
28 AllVisualizeProperties ret = BaseObjectType::getAllVisualizeProperties();
29 ret.reserve( ret.size() + sizeof...(Properties) );
30 ( void( ret.push_back( this->getVisualizePropertyMask( Properties ) ) ), ... );
31 return ret;
32 }
33
35 {
36 const ViewportMask* ret = nullptr;
37 std::size_t i = 0;
38 (void)( ( type.tryGet<decltype( Properties )>() == Properties ? ( ret = &propertyMasks_[i], true ) : ( i++, false ) ) || ... );
39 if ( ret )
40 return *ret;
41 else
42 return BaseObjectType::getVisualizePropertyMask( type );
43 }
44
45protected:
46 void setAllVisualizeProperties_( const AllVisualizeProperties& properties, std::size_t& pos ) override
47 {
48 BaseObjectType::setAllVisualizeProperties_( properties, pos );
49 for ( std::size_t i = 0; i < sizeof...(Properties); i++ )
50 propertyMasks_[i] = properties[pos++];
51 }
52
54 std::array<ViewportMask, sizeof...(Properties)> propertyMasks_ = []{
55 std::array<ViewportMask, sizeof...(Properties)> ret;
56 ret.fill( ViewportMask::all() );
57 return ret;
58 }();
59};
60
61}
Definition MRAddVisualPropertiesMixin.h:17
Definition MRVisualObject.h:54
std::optional< T > tryGet() const
Definition MRVisualObject.h:63
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
static ViewportMask all()
mask meaning all or any viewports
Definition MRViewportId.h:49
bool supportsVisualizeProperty(AnyVisualizeMaskEnum type) const override
Definition MRAddVisualPropertiesMixin.h:21
void setAllVisualizeProperties_(const AllVisualizeProperties &properties, std::size_t &pos) override
Definition MRAddVisualPropertiesMixin.h:46
std::array< ViewportMask, sizeof...(Properties)> propertyMasks_
All enabled by default.
Definition MRAddVisualPropertiesMixin.h:54
AllVisualizeProperties getAllVisualizeProperties() const override
Definition MRAddVisualPropertiesMixin.h:26
const ViewportMask & getVisualizePropertyMask(AnyVisualizeMaskEnum type) const override
Definition MRAddVisualPropertiesMixin.h:34
std::vector< ViewportMask > AllVisualizeProperties
Definition MRVisualObject.h:72
only for bindings generation
Definition MRCameraOrientationPlugin.h:8