48 template <
typename T,
typename C,
typename SetterFunc>
59 return std::invoke( m_getter,
dynamic_cast< const C*
>( objectToInvoke ),
id );
62 if constexpr ( ( std::is_same_v<SetterFunc, void ( C::* )(
const T&,
ViewportId )> )
63 || ( std::is_same_v<SetterFunc,
void ( C::* )( T,
ViewportId )> ) )
67 assert( std::holds_alternative<T>( v ) );
68 if ( std::holds_alternative<T>( v ) )
70 std::invoke( m_setter,
dynamic_cast< C*
> ( objectToInvoke ), std::get<T>( v ),
id );
98 constexpr static const char*
StaticTypeName() noexcept {
return "FeatureObject"; }
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
Definition MRVisualObject.h:53
An interface class which allows feature objects to share setters and getters on their main properties...
Definition MRFeatureObject.h:96
const AffineXf3f & xf(ViewportId id={}, bool *isDef=nullptr) const
Definition MRObject.h:107
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
static ViewportMask all()
mask meaning all or any viewports
Definition MRViewportId.h:49
Definition MRViewportProperty.h:17
static constexpr const char * StaticClassNameInPlural() noexcept
Definition MRFeatureObject.h:104
ImVec2 position(const ViewportRectangle &rect)
Definition MRViewport.h:27
virtual void setSubfeatureAlphaMesh(float alpha)
std::optional< Vector3f > getNormal(const Vector3f &point) const
virtual float getSubfeatureAlphaMesh() const
std::array< ViewportProperty< Color >, 2 > decorationsColor_
scale
Definition MRFeatureObject.h:180
virtual void setPointSize(float pointSize)
bool supportsVisualizeProperty(AnyVisualizeMaskEnum type) const override
Returns true if this class supports the property type. Otherwise passing it to the functions below is...
virtual float getLineWidth() const
virtual float getSubfeatureAlphaPoints() const
virtual const ViewportProperty< Color > & getDecorationsColorForAllViewports(bool selected) const
const Color & getDecorationsColor(bool selected, ViewportId viewportId={}, bool *isDef=nullptr) const
FeaturePropertyKind
Classifies FeatureObjectSharedProperty, mostly for informational purposes.
Definition MRFeatureObject.h:22
float subPointSize_
Point size and line width, for subfeatures rather than primary rendering.
Definition MRFeatureObject.h:189
float lineWidth_
Definition MRFeatureObject.h:186
std::optional< Vector3f > normal
Definition MRFeatureObject.h:83
virtual void setLineWidth(float lineWidth)
void setXf(const AffineXf3f &xf, ViewportId id={}) override
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
virtual void setSubfeaturePointSize(float pointSize)
float mainFeatureAlpha_
Per-component alpha multipliers. The global alpha is multiplied by thise.
Definition MRFeatureObject.h:193
virtual void setSubfeatureLineWidth(float lineWidth)
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,...
_count
If true, show additional details on the name tag, such as point coordinates. Not all features use thi...
Definition MRFeatureObject.h:90
const ViewportMask & getVisualizePropertyMask(AnyVisualizeMaskEnum type) const override
returns mask of viewports where given property is set
virtual void setMainFeatureAlpha(float alpha)
void setAllVisualizeProperties_(const AllVisualizeProperties &properties, std::size_t &pos) override
AllVisualizeProperties getAllVisualizeProperties() const override
get all visualize properties masks
virtual void setDecorationsColorForAllViewports(ViewportProperty< Color > val, bool selected)
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
virtual void setSubfeatureAlphaPoints(float alpha)
Subfeatures
Definition MRFeatureObject.h:88
void deserializeFields_(const Json::Value &root) override
std::string propertyName
Definition MRFeatureObject.h:40
virtual float getSubfeatureLineWidth() const
virtual void setDecorationsColor(const Color &color, bool selected, ViewportId viewportId={})
Matrix3f getRotationMatrix(ViewportId id={}, bool *isDef=nullptr) const
Definition MRFeatureObject.h:131
virtual std::string className() const override
Definition MRFeatureObject.h:102
void serializeFields_(Json::Value &root) const override
virtual float getPointSize() const
Point size and line width, for primary rendering rather than subfeatures.
void resetXf(ViewportId id={}) override
forgets specific transform in given viewport (or forgets all specific transforms for {}...
Vector3f point
Definition MRFeatureObject.h:82
virtual float getSubfeaturePointSize() const
Point size and line width, for subfeatures rather than primary rendering.
ViewportProperty< Matrix3f > s_
rotation
Definition MRFeatureObject.h:177
virtual void setSubfeatureAlphaLines(float alpha)
FeatureObjectSharedProperty(std::string name, FeaturePropertyKind kind, T(C::*m_getter)(ViewportId) const, SetterFunc m_setter)
Definition MRFeatureObject.h:49
ViewportMask subfeatureVisibility_
Definition MRFeatureObject.h:171
virtual float getMainFeatureAlpha() const
Per-component alpha multipliers. The global alpha is multiplied by thise.
FeatureObject(int numDimensions)
numDimensions is 0 for points, 1 for lines, 2 for surface meshes. We don't use 3 at the moment.
constexpr bool dependent_false
Definition MRMeshFwd.h:782
ViewportMask detailsOnNameTag_
Definition MRFeatureObject.h:172
static constexpr const char * StaticClassName() noexcept
Definition MRFeatureObject.h:101
float subLineWidth_
Definition MRFeatureObject.h:190
ViewportProperty< Matrix3f > r_
Definition MRFeatureObject.h:176
virtual float getSubfeatureAlphaLines() const
virtual FeatureObjectProjectPointResult projectPoint(const Vector3f &point, ViewportId id={}) const =0
float subAlphaPoints_
Definition MRFeatureObject.h:194
float pointSize_
Those apply only to some features:
Definition MRFeatureObject.h:185
FeaturePropertyKind kind
Definition MRFeatureObject.h:41
float subAlphaLines_
Definition MRFeatureObject.h:195
virtual Vector3f getBasePoint(ViewportId id={}) const
Returns point considered as base for the feature.
float subAlphaMesh_
Definition MRFeatureObject.h:196
@ linearDimension
Position, normally Vector3f.
Definition MRFeatureObject.h:24
@ other
Angle, normally float. Measure in radians.
Definition MRFeatureObject.h:27
@ angle
Direction, normally Vector3f.
Definition MRFeatureObject.h:26
@ direction
Length or size.
Definition MRFeatureObject.h:25
std::vector< ViewportMask > AllVisualizeProperties
Definition MRVisualObject.h:71
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRFeatureObject.h:81
Definition MRVisualObject.h:31