MeshLib C++ Docs
Loading...
Searching...
No Matches
MRObjectLinesHolder.h
Go to the documentation of this file.
1#pragma once
2#include "MRVisualObject.h"
3#include "MRXfBasedCache.h"
4#include "MRHeapBytes.h"
5#include "MRVector.h"
6
7namespace MR
8{
11
12
13enum class MRMESH_CLASS LinesVisualizePropertyType
14{
18 _count [[maybe_unused]],
19};
20template <> struct IsVisualizeMaskEnum<LinesVisualizePropertyType> : std::true_type {};
21
28
32{
33public:
37
38 constexpr static const char* StaticTypeName() noexcept { return "LinesHolder"; }
39 virtual const char* typeName() const override { return StaticTypeName(); }
40
41 MRMESH_API virtual void applyScale( float scaleFactor ) override;
42
43 MRMESH_API virtual bool hasVisualRepresentation() const override;
44
45 [[nodiscard]] virtual bool hasModel() const override { return bool( polyline_ ); }
46
47 MRMESH_API virtual std::shared_ptr<Object> clone() const override;
48 MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;
49
51 [[nodiscard]] Polyline3* varPolylinePtr() { return polyline_.get(); }
52
54 [[nodiscard]] const Polyline3* polylinePtr() const { return polyline_.get(); }
55
56 #ifdef __GNUC__
57 #pragma GCC diagnostic push
58 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
59 #endif
61 [[deprecated( "use polylinePtr() instead" )]]
62 const std::shared_ptr<const Polyline3>& polyline() const
63 { return reinterpret_cast< const std::shared_ptr<const Polyline3>& >( polyline_ ); }
64 #ifdef __GNUC__
65 #pragma GCC diagnostic pop
66 #endif
67
68 MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;
69
75 MRMESH_API virtual void setDashPattern( const DashPattern& pattern, ViewportId vpId = {} );
76 virtual const DashPattern& getDashPattern( ViewportId vpId = {}, bool* isDef = nullptr ) const { return dashPattern_.get( vpId, isDef ); }
77
78 MRMESH_API virtual void setLineWidth( float width );
79 virtual float getLineWidth() const { return lineWidth_; }
80 MRMESH_API virtual void setPointSize( float size );
81 virtual float getPointSize() const { return pointSize_; }
82
85
87 const VertColors& getVertsColorMap() const { return vertsColorMap_; }
88
90 virtual void setVertsColorMap( VertColors vertsColorMap ) { vertsColorMap_ = std::move( vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
91
93 virtual void updateVertsColorMap( VertColors& vertsColorMap ) { std::swap( vertsColorMap_, vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
94
95 const UndirectedEdgeColors& getLinesColorMap() const { return linesColorMap_; }
96 virtual void setLinesColorMap( UndirectedEdgeColors linesColorMap ) { linesColorMap_ = std::move( linesColorMap ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
97 virtual void updateLinesColorMap( UndirectedEdgeColors& updated ) { std::swap( linesColorMap_, updated ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
98
99 [[nodiscard]] MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type ) const override;
104
106 MRMESH_API virtual void copyColors( const ObjectLinesHolder& src, const VertMap& thisToSrc );
107
110 MRMESH_API virtual Box3f getWorldBox( ViewportId = {} ) const override;
111
113 [[nodiscard]] MRMESH_API virtual size_t heapBytes() const override;
114
116 [[nodiscard]] MRMESH_API float avgEdgeLen() const;
117
119 [[nodiscard]] MRMESH_API size_t numUndirectedEdges() const;
120
122 [[nodiscard]] MRMESH_API size_t numComponents() const;
123
125 [[nodiscard]] MRMESH_API float totalLength() const;
126
129
131 using LinesChangedSignal = Signal<void( uint32_t mask )>;
133
134protected:
136
138 MRMESH_API virtual void swapBase_( Object& other ) override;
139
142 MRMESH_API virtual void swapSignals_( Object& other ) override;
143
146 MRMESH_API void serializeBaseFields_( Json::Value& root ) const;
148 MRMESH_API virtual void serializeFields_( Json::Value& root ) const override;
149
150 MRMESH_API Expected<void> deserializeModel_( const std::filesystem::path& path, ProgressCallback progressCb = {} ) override;
151
154 MRMESH_API void deserializeBaseFields_( const Json::Value& root );
155
157 MRMESH_API virtual void deserializeFields_( const Json::Value& root ) override;
158
159 MRMESH_API virtual Box3f computeBoundingBox_() const override;
160
161 MRMESH_API virtual void setupRenderObject_() const override;
162
164 MRMESH_API void setAllVisualizeProperties_( const AllVisualizeProperties& properties, std::size_t& pos ) override;
165
166 mutable std::optional<size_t> numUndirectedEdges_;
167 mutable std::optional<size_t> numComponents_;
168 mutable std::optional<float> avgEdgeLen_;
169 mutable std::optional<float> totalLength_;
171
172 VertColors vertsColorMap_;
173 UndirectedEdgeColors linesColorMap_;
174
179
181 float lineWidth_{ 1.0f };
182 float pointSize_{ 5.f };
183 std::shared_ptr<Polyline3> polyline_;
184
185private:
187 void setDefaultColors_();
188
190 void setDefaultSceneProperties_();
191};
192
193
194}
#define MRMESH_API
Definition MRMeshFwd.h:85
#define MRMESH_CLASS
Definition MRMeshFwd.h:92
Definition MRVisualObject.h:54
named object in the data model
Definition MRObject.h:61
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
Definition MRViewportProperty.h:17
std::function< bool(float)> ProgressCallback
Definition MRMeshFwd.h:759
auto width(const Box< V > &box)
returns size along x axis
Definition MRBox.h:354
size_t numComponents() const
returns cached information about the number of components in the polyline
const ViewportMask & getVisualizePropertyMask(AnyVisualizeMaskEnum type) const override
returns mask of viewports where given property is set
virtual void copyColors(const ObjectLinesHolder &src, const VertMap &thisToSrc)
copies vertex colors from given source object
void resetFrontColor() override
reset basic object colors to their default values from the current theme
void setAllVisualizeProperties_(const AllVisualizeProperties &properties, std::size_t &pos) override
set all visualize properties masks
void serializeBaseFields_(Json::Value &root) const
virtual void setupRenderObject_() const override
virtual std::shared_ptr< Object > clone() const override
std::optional< float > avgEdgeLen_
Definition MRObjectLinesHolder.h:168
virtual void setDirtyFlags(uint32_t mask, bool invalidateCaches=true) override
reinterpret_cast to avoid making a copy of shared_ptr
const VertColors & getVertsColorMap() const
returns per-vertex colors of the object
Definition MRObjectLinesHolder.h:87
ImVec2 size(const ViewportRectangle &rect)
Definition MRViewport.h:32
ObjectLinesHolder & operator=(ObjectLinesHolder &&)=default
Dashed
Definition MRObjectLinesHolder.h:17
const UndirectedEdgeColors & getLinesColorMap() const
Definition MRObjectLinesHolder.h:95
virtual void serializeFields_(Json::Value &root) const override
serializeFields_: serializeBaseFields_ plus polyline serialization
LinesChangedSignal linesChangedSignal
Definition MRObjectLinesHolder.h:132
Signal< void(uint32_t mask)> LinesChangedSignal
signal about lines changing, triggered in setDirtyFlag
Definition MRObjectLinesHolder.h:131
Points
Definition MRObjectLinesHolder.h:15
size_t numUndirectedEdges() const
returns cached information about the number of undirected edges in the polyline
UndirectedEdgeColors linesColorMap_
Definition MRObjectLinesHolder.h:173
virtual void updateLinesColorMap(UndirectedEdgeColors &updated)
Definition MRObjectLinesHolder.h:97
virtual void swapSignals_(Object &other) override
ViewportMask smoothConnections_
Definition MRObjectLinesHolder.h:176
float totalLength() const
return cached total length
ViewportMask dashed_
Definition MRObjectLinesHolder.h:177
virtual const char * typeName() const override
Definition MRObjectLinesHolder.h:39
_count
If true, show additional details on the name tag, such as point coordinates. Not all features use thi...
Definition MRFeatureObject.h:90
virtual void setDashPattern(const DashPattern &pattern, ViewportId vpId={})
tl::expected< T, E > Expected
Definition MRExpected.h:31
virtual float getPointSize() const
Definition MRObjectLinesHolder.h:81
virtual const DashPattern & getDashPattern(ViewportId vpId={}, bool *isDef=nullptr) const
Definition MRObjectLinesHolder.h:76
virtual bool hasModel() const override
Definition MRObjectLinesHolder.h:45
virtual std::shared_ptr< Object > shallowClone() const override
virtual Box3f getWorldBox(ViewportId={}) const override
bool supportsVisualizeProperty(AnyVisualizeMaskEnum type) const override
Returns true if this class supports the property type. Otherwise passing it to the functions below is...
float pointSize_
Definition MRObjectLinesHolder.h:182
static constexpr const char * StaticTypeName() noexcept
Definition MRObjectLinesHolder.h:38
std::optional< size_t > numUndirectedEdges_
Definition MRObjectLinesHolder.h:166
virtual void deserializeFields_(const Json::Value &root) override
deserializeFields_: deserializeBaseFields_ plus polyline deserialization
Smooth
Definition MRObjectLinesHolder.h:16
Polyline3 * varPolylinePtr()
returns the polyline of this object for modification, or nullptr if it is not set
Definition MRObjectLinesHolder.h:51
AllVisualizeProperties getAllVisualizeProperties() const override
get all visualize properties masks
ObjectLinesHolder(ObjectLinesHolder &&)=default
static constexpr Vector4 diagonal(uint8_t a) noexcept
Definition MRVector4.h:41
virtual void updateVertsColorMap(VertColors &vertsColorMap)
swaps per-vertex colors of the object with given argument
Definition MRObjectLinesHolder.h:93
float lineWidth_
width on lines on screen in pixels
Definition MRObjectLinesHolder.h:181
float avgEdgeLen() const
returns cached average edge length
ViewportProperty< DashPattern > dashPattern_
Definition MRObjectLinesHolder.h:178
Expected< void > deserializeModel_(const std::filesystem::path &path, ProgressCallback progressCb={}) override
Reads model from file.
std::optional< size_t > numComponents_
Definition MRObjectLinesHolder.h:167
ObjectLinesHolder(const ObjectLinesHolder &other)=default
virtual void setPointSize(float size)
ViewportMask showPoints_
Definition MRObjectLinesHolder.h:175
virtual void swapBase_(Object &other) override
swaps this object with other
virtual void setLinesColorMap(UndirectedEdgeColors linesColorMap)
Definition MRObjectLinesHolder.h:96
virtual void setVertsColorMap(VertColors vertsColorMap)
sets per-vertex colors of the object
Definition MRObjectLinesHolder.h:90
void deserializeBaseFields_(const Json::Value &root)
virtual Box3f computeBoundingBox_() const override
virtual float getLineWidth() const
Definition MRObjectLinesHolder.h:79
const Polyline3 * polylinePtr() const
returns the polyline of this object, or nullptr if it is not set
Definition MRObjectLinesHolder.h:54
virtual bool hasVisualRepresentation() const override
does the object have any visual representation (visible points, triangles, edges, etc....
const std::shared_ptr< const Polyline3 > & polyline() const
Definition MRObjectLinesHolder.h:62
virtual void setLineWidth(float width)
Vector4< uint8_t > DashPattern
Definition MRObjectLinesHolder.h:27
VertColors vertsColorMap_
Definition MRObjectLinesHolder.h:172
ObjectLinesHolder(ProtectedStruct, const ObjectLinesHolder &obj)
Definition MRObjectLinesHolder.h:84
std::optional< float > totalLength_
Definition MRObjectLinesHolder.h:169
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
ViewportProperty< XfBasedCache< Box3f > > worldBox_
Definition MRObjectLinesHolder.h:170
std::shared_ptr< Polyline3 > polyline_
Definition MRObjectLinesHolder.h:183
virtual void applyScale(float scaleFactor) override
scale object size (all point positions)
@ other
Angle, normally float. Measure in radians.
Definition MRFeatureObject.h:27
std::vector< ViewportMask > AllVisualizeProperties
Definition MRVisualObject.h:72
@ DIRTY_PRIMITIVE_COLORMAP
Definition MRVisualObject.h:87
@ DIRTY_VERTS_COLORMAP
Definition MRVisualObject.h:86
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRVisualObject.h:32
Definition MRObject.h:289
Definition MRSignal.h:28
Definition MRVector4.h:26