13using FeaturesPropertyTypesVariant = std::variant<float, Vector3f>;
18enum class FeaturePropertyKind
35struct FeatureObjectSharedProperty
37 std::string propertyName;
38 FeaturePropertyKind kind;
43 std::function<void(
const FeaturesPropertyTypesVariant&, FeatureObject* objectToInvoke, ViewportId
id )> setter;
45 template <
typename T,
typename C,
typename SetterFunc>
48 FeaturePropertyKind kind,
49 T( C::* m_getter )( ViewportId ) const,
52 : propertyName( std::move(
name ) ),
56 return std::invoke( m_getter,
dynamic_cast< const C*
>( objectToInvoke ),
id );
59 if constexpr ( ( std::is_same_v<SetterFunc, void ( C::* )( const T&, ViewportId )> )
60 || ( std::is_same_v<SetterFunc, void ( C::* )( T, ViewportId )> ) )
64 assert( std::holds_alternative<T>( v ) );
65 if ( std::holds_alternative<T>( v ) )
67 std::invoke( m_setter,
dynamic_cast< C*
> ( objectToInvoke ), std::get<T>( v ),
id );
73 static_assert( dependent_false<T>,
"Setter function signature unsupported" );
78struct FeatureObjectProjectPointResult {
80 std::optional<Vector3f> normal;
95 constexpr static const char* StaticTypeName() noexcept {
return "FeatureObject"; }
96 virtual const char* typeName()
const override {
return StaticTypeName(); }
98 constexpr static const char* StaticClassName() noexcept {
return "Feature"; }
99 virtual std::string className()
const override {
return StaticClassName(); }
101 constexpr static const char* StaticClassNameInPlural() noexcept {
return "Features"; }
102 virtual std::string classNameInPlural()
const override {
return StaticClassNameInPlural(); }
105 virtual const std::vector<FeatureObjectSharedProperty>& getAllSharedProperties()
const = 0;
107 [[nodiscard]]
MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type )
const override;
109 MRMESH_API const ViewportMask& getVisualizePropertyMask( AnyVisualizeMaskEnum type )
const override;
111 MRMESH_API void serializeFields_( Json::Value& root )
const override;
112 MRMESH_API void deserializeFields_(
const Json::Value& root )
override;
117 [[nodiscard]]
virtual FeatureObjectProjectPointResult projectPoint(
const Vector3f& point, ViewportId
id = {} )
const = 0;
118 [[nodiscard]]
MRMESH_API std::optional<Vector3f> getNormal(
const Vector3f& point )
const;
120 MRMESH_API void setXf(
const AffineXf3f& xf, ViewportId
id = {} )
override;
121 MRMESH_API void resetXf( ViewportId
id = {} )
override;
124 [[nodiscard]]
MRMESH_API virtual Vector3f getBasePoint( ViewportId
id = {} )
const;
128 [[nodiscard]] Matrix3f getRotationMatrix( ViewportId
id = {},
bool* isDef = nullptr )
const {
return r_.get(
id, isDef ); }
131 [[nodiscard]] Matrix3f getScaleShearMatrix( ViewportId
id = {},
bool* isDef = nullptr )
const {
return s_.get(
id, isDef ); }
135 MRMESH_API const Color& getDecorationsColor(
bool selected, ViewportId viewportId = {},
bool* isDef = nullptr )
const;
136 MRMESH_API virtual void setDecorationsColor(
const Color& color,
bool selected, ViewportId viewportId = {} );
137 MRMESH_API virtual const ViewportProperty<Color>& getDecorationsColorForAllViewports(
bool selected )
const;
138 MRMESH_API virtual void setDecorationsColorForAllViewports( ViewportProperty<Color> val,
bool selected );
141 [[nodiscard]]
MRMESH_API virtual float getPointSize()
const;
142 [[nodiscard]]
MRMESH_API virtual float getLineWidth()
const;
143 MRMESH_API virtual void setPointSize(
float pointSize );
144 MRMESH_API virtual void setLineWidth(
float lineWidth );
147 [[nodiscard]]
MRMESH_API virtual float getSubfeaturePointSize()
const;
148 [[nodiscard]]
MRMESH_API virtual float getSubfeatureLineWidth()
const;
149 MRMESH_API virtual void setSubfeaturePointSize(
float pointSize );
150 MRMESH_API virtual void setSubfeatureLineWidth(
float lineWidth );
153 [[nodiscard]]
MRMESH_API virtual float getMainFeatureAlpha()
const;
154 [[nodiscard]]
MRMESH_API virtual float getSubfeatureAlphaPoints()
const;
155 [[nodiscard]]
MRMESH_API virtual float getSubfeatureAlphaLines()
const;
156 [[nodiscard]]
MRMESH_API virtual float getSubfeatureAlphaMesh()
const;
157 MRMESH_API virtual void setMainFeatureAlpha(
float alpha );
158 MRMESH_API virtual void setSubfeatureAlphaPoints(
float alpha );
159 MRMESH_API virtual void setSubfeatureAlphaLines(
float alpha );
160 MRMESH_API virtual void setSubfeatureAlphaMesh(
float alpha );
164 MRMESH_API FeatureObject(
int numDimensions );
166 MRMESH_API void setAllVisualizeProperties_(
const AllVisualizeProperties& properties, std::size_t& pos )
override;
168 ViewportMask subfeatureVisibility_ = ViewportMask::all();
169 ViewportMask detailsOnNameTag_ = ViewportMask::all();
173 ViewportProperty<Matrix3f> r_;
174 ViewportProperty<Matrix3f> s_;
177 std::array<ViewportProperty<Color>, 2> decorationsColor_;
182 float pointSize_ = 10;
183 float lineWidth_ = 2;
186 float subPointSize_ = 6;
187 float subLineWidth_ = 1;
190 float mainFeatureAlpha_ = 1;
191 float subAlphaPoints_ = 1;
192 float subAlphaLines_ = 1;
193 float subAlphaMesh_ = 0.5f;
_count
Definition MRFeatureObject.h:87
DetailsOnNameTag
Definition MRFeatureObject.h:86
Subfeatures
Definition MRFeatureObject.h:85
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
angle
Definition MRObjectDimensionsEnum.h:13
unsafe FeatureObjectSharedProperty(MR._ByValue_FeatureObjectSharedProperty _other)
Definition MRFeatureObject.h:93
Definition MRVisualObject.h:119
std::string name(const T &primitive)
Definition MRFeatures.h:309
Definition MRCameraOrientationPlugin.h:8
ImVec2 position(const ViewportRectangle &rect)
Definition MRViewport.h:24
FeaturesPropertyTypesVariant
Definition MRVisualObject.h:32