MeshLib C++ Docs
Loading...
Searching...
No Matches
MRFeatureObject.h
Go to the documentation of this file.
1#pragma once
3#include "MRMeshFwd.h"
4
5#include "MRVector3.h"
6
7#include <cassert>
8#include <variant>
9
10namespace MR
11{
14
15
16using FeaturesPropertyTypesVariant = std::variant<float, Vector3f>;
17
18class FeatureObject;
19
22{
23 position,
25 direction,
26 angle,
27 other,
28};
29
39{
40 std::string propertyName;
43 std::function<FeaturesPropertyTypesVariant( const FeatureObject* objectToInvoke, ViewportId id )> getter;
46 std::function<void( const FeaturesPropertyTypesVariant&, FeatureObject* objectToInvoke, ViewportId id )> setter;
47
48 template <typename T, typename C, typename SetterFunc>
50 std::string name,
52 T( C::* m_getter )( ViewportId ) const,
53 SetterFunc m_setter
54 )
55 : propertyName( std::move( name ) ),
56 kind( kind ),
57 getter( [m_getter] ( const FeatureObject* objectToInvoke, ViewportId id ) -> FeaturesPropertyTypesVariant
58 {
59 return std::invoke( m_getter, dynamic_cast< const C* >( objectToInvoke ), id );
60 } )
61 {
62 if constexpr ( ( std::is_same_v<SetterFunc, void ( C::* )( const T&, ViewportId )> )
63 || ( std::is_same_v<SetterFunc, void ( C::* )( T, ViewportId )> ) )
64 {
65 setter = [m_setter] ( const FeaturesPropertyTypesVariant& v, FeatureObject* objectToInvoke, ViewportId id )
66 {
67 assert( std::holds_alternative<T>( v ) );
68 if ( std::holds_alternative<T>( v ) )
69 {
70 std::invoke( m_setter, dynamic_cast< C* > ( objectToInvoke ), std::get<T>( v ), id );
71 }
72 };
73 }
74 else
75 {
76 static_assert( dependent_false<T>, "Setter function signature unsupported" );
77 }
78 }
79};
80
82 Vector3f point;
83 std::optional<Vector3f> normal;
84};
85
86enum class MRMESH_CLASS FeatureVisualizePropertyType
87{
90 _count [[maybe_unused]],
91};
92template <> struct IsVisualizeMaskEnum<FeatureVisualizePropertyType> : std::true_type {};
93
95class MRMESH_CLASS FeatureObject : public VisualObject
96{
97public:
98 constexpr static const char* StaticTypeName() noexcept { return "FeatureObject"; }
99 virtual const char* typeName() const override { return StaticTypeName(); }
100
101 constexpr static const char* StaticClassName() noexcept { return "Feature"; }
102 virtual std::string className() const override { return StaticClassName(); }
103
104 constexpr static const char* StaticClassNameInPlural() noexcept { return "Features"; }
105 virtual std::string classNameInPlural() const override { return StaticClassNameInPlural(); }
106
108 virtual const std::vector<FeatureObjectSharedProperty>& getAllSharedProperties() const = 0;
109
110 [[nodiscard]] MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type ) const override;
112 MRMESH_API const ViewportMask& getVisualizePropertyMask( AnyVisualizeMaskEnum type ) const override;
113
114 MRMESH_API void serializeFields_( Json::Value& root ) const override;
115 MRMESH_API void deserializeFields_( const Json::Value& root ) override;
116
117
120 [[nodiscard]] virtual FeatureObjectProjectPointResult projectPoint( const Vector3f& point, ViewportId id = {} ) const = 0;
121 [[nodiscard]] MRMESH_API std::optional<Vector3f> getNormal( const Vector3f& point ) const;
122
123 MRMESH_API void setXf( const AffineXf3f& xf, ViewportId id = {} ) override;
124 MRMESH_API void resetXf( ViewportId id = {} ) override;
125
127 [[nodiscard]] MRMESH_API virtual Vector3f getBasePoint( ViewportId id = {} ) const;
128
131 [[nodiscard]] Matrix3f getRotationMatrix( ViewportId id = {}, bool* isDef = nullptr ) const { return r_.get( id, isDef ); }
134 [[nodiscard]] Matrix3f getScaleShearMatrix( ViewportId id = {}, bool* isDef = nullptr ) const { return s_.get( id, isDef ); }
135
138 MRMESH_API const Color& getDecorationsColor( bool selected, ViewportId viewportId = {}, bool* isDef = nullptr ) const;
139 MRMESH_API virtual void setDecorationsColor( const Color& color, bool selected, ViewportId viewportId = {} );
140 MRMESH_API virtual const ViewportProperty<Color>& getDecorationsColorForAllViewports( bool selected ) const;
141 MRMESH_API virtual void setDecorationsColorForAllViewports( ViewportProperty<Color> val, bool selected );
142
144 [[nodiscard]] MRMESH_API virtual float getPointSize() const;
145 [[nodiscard]] MRMESH_API virtual float getLineWidth() const;
146 MRMESH_API virtual void setPointSize( float pointSize );
147 MRMESH_API virtual void setLineWidth( float lineWidth );
148
150 [[nodiscard]] MRMESH_API virtual float getSubfeaturePointSize() const;
151 [[nodiscard]] MRMESH_API virtual float getSubfeatureLineWidth() const;
152 MRMESH_API virtual void setSubfeaturePointSize( float pointSize );
153 MRMESH_API virtual void setSubfeatureLineWidth( float lineWidth );
154
156 [[nodiscard]] MRMESH_API virtual float getMainFeatureAlpha() const;
157 [[nodiscard]] MRMESH_API virtual float getSubfeatureAlphaPoints() const;
158 [[nodiscard]] MRMESH_API virtual float getSubfeatureAlphaLines() const;
159 [[nodiscard]] MRMESH_API virtual float getSubfeatureAlphaMesh() const;
160 MRMESH_API virtual void setMainFeatureAlpha( float alpha );
161 MRMESH_API virtual void setSubfeatureAlphaPoints( float alpha );
162 MRMESH_API virtual void setSubfeatureAlphaLines( float alpha );
163 MRMESH_API virtual void setSubfeatureAlphaMesh( float alpha );
164
165protected:
167 MRMESH_API FeatureObject( int numDimensions );
168
169 MRMESH_API void setAllVisualizeProperties_( const AllVisualizeProperties& properties, std::size_t& pos ) override;
170
171 ViewportMask subfeatureVisibility_ = ViewportMask::all();
172 ViewportMask detailsOnNameTag_ = ViewportMask::all();
173
178
180 std::array<ViewportProperty<Color>, 2> decorationsColor_;
181
183
185 float pointSize_ = 10;
186 float lineWidth_ = 2;
187
189 float subPointSize_ = 6;
190 float subLineWidth_ = 1;
191
193 float mainFeatureAlpha_ = 1;
194 float subAlphaPoints_ = 1;
195 float subAlphaLines_ = 1;
196 float subAlphaMesh_ = 0.5f;
197};
198
199}
Definition MRVisualObject.h:54
An interface class which allows feature objects to share setters and getters on their main properties...
Definition MRFeatureObject.h:96
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
Definition MRViewportProperty.h:17
Visual Object.
Definition MRVisualObject.h:116
static constexpr const char * StaticClassNameInPlural() noexcept
Definition MRFeatureObject.h:104
MRMESH_API AllVisualizeProperties getAllVisualizeProperties() const override
get all visualize properties masks
virtual MRMESH_API float getMainFeatureAlpha() const
Per-component alpha multipliers. The global alpha is multiplied by thise.
MRMESH_API const ViewportMask & getVisualizePropertyMask(AnyVisualizeMaskEnum type) const override
returns mask of viewports where given property is set
virtual MRMESH_API float getPointSize() const
Point size and line width, for primary rendering rather than subfeatures.
std::array< ViewportProperty< Color >, 2 > decorationsColor_
scale
Definition MRFeatureObject.h:180
virtual MRMESH_API void setLineWidth(float lineWidth)
FeaturePropertyKind
Classifies FeatureObjectSharedProperty, mostly for informational purposes.
Definition MRFeatureObject.h:22
MRMESH_API void setXf(const AffineXf3f &xf, ViewportId id={}) override
virtual MRMESH_API void setSubfeatureAlphaLines(float alpha)
virtual MRMESH_API float getSubfeatureAlphaMesh() const
virtual MRMESH_API float getSubfeaturePointSize() const
Point size and line width, for subfeatures rather than primary rendering.
virtual MRMESH_API const ViewportProperty< Color > & getDecorationsColorForAllViewports(bool selected) const
std::optional< Vector3f > normal
Definition MRFeatureObject.h:83
virtual MRMESH_API void setDecorationsColor(const Color &color, bool selected, ViewportId viewportId={})
virtual MRMESH_API float getLineWidth() const
virtual const char * typeName() const override
Definition MRFeatureObject.h:99
std::variant< float, Vector3f > FeaturesPropertyTypesVariant
Definition MRFeatureObject.h:16
Matrix3f getScaleShearMatrix(ViewportId id={}, bool *isDef=nullptr) const
Definition MRFeatureObject.h:134
MRMESH_API FeatureObject(int numDimensions)
numDimensions is 0 for points, 1 for lines, 2 for surface meshes. We don't use 3 at the moment.
std::function< FeaturesPropertyTypesVariant(const FeatureObject *objectToInvoke, ViewportId id)> getter
due to getAllSharedProperties in FeatureObject returns static vector, we need externaly setup object ...
Definition MRFeatureObject.h:43
static constexpr const char * StaticTypeName() noexcept
Definition MRFeatureObject.h:98
virtual const std::vector< FeatureObjectSharedProperty > & getAllSharedProperties() const =0
Create and generate list of bounded getters and setters for the main properties of feature object,...
virtual MRMESH_API void setPointSize(float pointSize)
std::function< void(const FeaturesPropertyTypesVariant &, FeatureObject *objectToInvoke, ViewportId id)> setter
Definition MRFeatureObject.h:46
virtual std::string classNameInPlural() const override
Definition MRFeatureObject.h:105
DetailsOnNameTag
Definition MRFeatureObject.h:89
Subfeatures
Definition MRFeatureObject.h:88
virtual MRMESH_API Vector3f getBasePoint(ViewportId id={}) const
Returns point considered as base for the feature.
std::string propertyName
Definition MRFeatureObject.h:40
Matrix3f getRotationMatrix(ViewportId id={}, bool *isDef=nullptr) const
Definition MRFeatureObject.h:131
virtual std::string className() const override
Definition MRFeatureObject.h:102
virtual MRMESH_API void setSubfeatureAlphaPoints(float alpha)
MRMESH_API bool supportsVisualizeProperty(AnyVisualizeMaskEnum type) const override
Returns true if this class supports the property type. Otherwise passing it to the functions below is...
Vector3f point
Definition MRFeatureObject.h:82
ViewportProperty< Matrix3f > s_
rotation
Definition MRFeatureObject.h:177
MRMESH_API void resetXf(ViewportId id={}) override
forgets specific transform in given viewport (or forgets all specific transforms for {}...
virtual MRMESH_API float getSubfeatureLineWidth() const
FeatureObjectSharedProperty(std::string name, FeaturePropertyKind kind, T(C::*m_getter)(ViewportId) const, SetterFunc m_setter)
Definition MRFeatureObject.h:49
virtual MRMESH_API void setDecorationsColorForAllViewports(ViewportProperty< Color > val, bool selected)
virtual MRMESH_API float getSubfeatureAlphaLines() const
static constexpr const char * StaticClassName() noexcept
Definition MRFeatureObject.h:101
MRMESH_API void serializeFields_(Json::Value &root) const override
ViewportProperty< Matrix3f > r_
Definition MRFeatureObject.h:176
virtual MRMESH_API void setSubfeaturePointSize(float pointSize)
virtual FeatureObjectProjectPointResult projectPoint(const Vector3f &point, ViewportId id={}) const =0
FeaturePropertyKind kind
Definition MRFeatureObject.h:41
virtual MRMESH_API void setSubfeatureAlphaMesh(float alpha)
MRMESH_API std::optional< Vector3f > getNormal(const Vector3f &point) const
virtual MRMESH_API void setMainFeatureAlpha(float alpha)
MRMESH_API void deserializeFields_(const Json::Value &root) override
MRMESH_API void setAllVisualizeProperties_(const AllVisualizeProperties &properties, std::size_t &pos) override
virtual MRMESH_API void setSubfeatureLineWidth(float lineWidth)
MRMESH_API const Color & getDecorationsColor(bool selected, ViewportId viewportId={}, bool *isDef=nullptr) const
virtual MRMESH_API float getSubfeatureAlphaPoints() const
@ linearDimension
Position, normally Vector3f.
@ other
Angle, normally float. Measure in radians.
@ angle
Direction, normally Vector3f.
@ direction
Length or size.
std::vector< ViewportMask > AllVisualizeProperties
Definition MRVisualObject.h:72
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRColor.h:12
Definition MRFeatureObject.h:81
Definition MRFeatureObject.h:39
Definition MRVisualObject.h:32