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
5namespace MR
6{
7
8enum class MRMESH_CLASS LinesVisualizePropertyType
9{
12 _count [[maybe_unused]],
13};
14template <> struct IsVisualizeMaskEnum<LinesVisualizePropertyType> : std::true_type {};
15
19{
20public:
24
25 constexpr static const char* TypeName() noexcept { return "LinesHolder"; }
26 virtual const char* typeName() const override { return TypeName(); }
27
28 MRMESH_API virtual void applyScale( float scaleFactor ) override;
29
30 MRMESH_API virtual bool hasVisualRepresentation() const override;
31
32 [[nodiscard]] virtual bool hasModel() const override { return bool( polyline_ ); }
33
34 MRMESH_API virtual std::shared_ptr<Object> clone() const override;
35 MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;
36
37 const std::shared_ptr<const Polyline3>& polyline() const
38 { return reinterpret_cast< const std::shared_ptr<const Polyline3>& >( polyline_ ); } // reinterpret_cast to avoid making a copy of shared_ptr
39
40 MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;
41
42 MRMESH_API virtual void setLineWidth( float width );
43 virtual float getLineWidth() const { return lineWidth_; }
44 MRMESH_API virtual void setPointSize( float size );
45 virtual float getPointSize() const { return pointSize_; }
46
49
51 const VertColors& getVertsColorMap() const { return vertsColorMap_; }
52
54 virtual void setVertsColorMap( VertColors vertsColorMap ) { vertsColorMap_ = std::move( vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
55
57 virtual void updateVertsColorMap( VertColors& vertsColorMap ) { std::swap( vertsColorMap_, vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
58
59 const UndirectedEdgeColors& getLinesColorMap() const { return linesColorMap_; }
60 virtual void setLinesColorMap( UndirectedEdgeColors linesColorMap ) { linesColorMap_ = std::move( linesColorMap ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
61 virtual void updateLinesColorMap( UndirectedEdgeColors& updated ) { std::swap( linesColorMap_, updated ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
62
63 [[nodiscard]] MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type ) const override;
68
70 MRMESH_API virtual void copyColors( const ObjectLinesHolder& src, const VertMap& thisToSrc );
71
74 MRMESH_API virtual Box3f getWorldBox( ViewportId = {} ) const override;
75
77 [[nodiscard]] MRMESH_API virtual size_t heapBytes() const override;
78
80 [[nodiscard]] MRMESH_API float avgEdgeLen() const;
81
83 [[nodiscard]] MRMESH_API size_t numUndirectedEdges() const;
84
86 [[nodiscard]] MRMESH_API size_t numComponents() const;
87
89 [[nodiscard]] MRMESH_API float totalLength() const;
90
92 MRMESH_API void resetFrontColor() override;
93
94protected:
95 ObjectLinesHolder( const ObjectLinesHolder& other ) = default;
96
98 MRMESH_API virtual void swapBase_( Object& other ) override;
99
102 MRMESH_API void serializeBaseFields_( Json::Value& root ) const;
104 MRMESH_API virtual void serializeFields_( Json::Value& root ) const override;
105
106 MRMESH_API Expected<void> deserializeModel_( const std::filesystem::path& path, ProgressCallback progressCb = {} ) override;
107
110 MRMESH_API void deserializeBaseFields_( const Json::Value& root );
111
113 MRMESH_API virtual void deserializeFields_( const Json::Value& root ) override;
114
115 MRMESH_API virtual Box3f computeBoundingBox_() const override;
116
117 MRMESH_API virtual void setupRenderObject_() const override;
118
120 MRMESH_API void setAllVisualizeProperties_( const AllVisualizeProperties& properties, std::size_t& pos ) override;
121
122 mutable std::optional<size_t> numUndirectedEdges_;
123 mutable std::optional<size_t> numComponents_;
124 mutable std::optional<float> avgEdgeLen_;
125 mutable std::optional<float> totalLength_;
127
128 VertColors vertsColorMap_;
129 UndirectedEdgeColors linesColorMap_;
130
133
135 float lineWidth_{ 1.0f };
136 float pointSize_{ 5.f };
137 std::shared_ptr<Polyline3> polyline_;
138
139private:
141 void setDefaultColors_();
142
144 void setDefaultSceneProperties_();
145};
146
147
148} // namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMesh/MRMeshFwd.h:84
Points
Definition MRObjectLinesHolder.h:10
Definition MRVisualObject.h:57
Definition MRObjectLinesHolder.h:19
MRMESH_API size_t numUndirectedEdges() const
returns cached information about the number of undirected edges in the polyline
MRMESH_API ObjectLinesHolder()
virtual MRMESH_API void swapBase_(Object &other) override
swaps this object with other
virtual MRMESH_API void setPointSize(float size)
virtual MRMESH_API void setLineWidth(float width)
std::optional< float > avgEdgeLen_
Definition MRObjectLinesHolder.h:124
const VertColors & getVertsColorMap() const
returns per-vertex colors of the object
Definition MRObjectLinesHolder.h:51
ObjectLinesHolder & operator=(ObjectLinesHolder &&)=default
virtual MRMESH_API void setupRenderObject_() const override
const UndirectedEdgeColors & getLinesColorMap() const
Definition MRObjectLinesHolder.h:59
virtual MRMESH_API void setDirtyFlags(uint32_t mask, bool invalidateCaches=true) override
virtual MRMESH_API Box3f computeBoundingBox_() const override
UndirectedEdgeColors linesColorMap_
Definition MRObjectLinesHolder.h:129
virtual void updateLinesColorMap(UndirectedEdgeColors &updated)
Definition MRObjectLinesHolder.h:61
ViewportMask smoothConnections_
Definition MRObjectLinesHolder.h:132
MRMESH_API void serializeBaseFields_(Json::Value &root) const
MRMESH_API float avgEdgeLen() const
returns cached average edge length
MRMESH_API size_t numComponents() const
returns cached information about the number of components in the polyline
virtual const char * typeName() const override
Definition MRObjectLinesHolder.h:26
static constexpr const char * TypeName() noexcept
Definition MRObjectLinesHolder.h:25
virtual float getPointSize() const
Definition MRObjectLinesHolder.h:45
MRMESH_API void resetFrontColor() override
reset basic object colors to their default values from the current theme
virtual bool hasModel() const override
Definition MRObjectLinesHolder.h:32
MRMESH_API void setAllVisualizeProperties_(const AllVisualizeProperties &properties, std::size_t &pos) override
set all visualize properties masks
virtual MRMESH_API void applyScale(float scaleFactor) override
scale object size (all point positions)
virtual MRMESH_API void copyColors(const ObjectLinesHolder &src, const VertMap &thisToSrc)
copies vertex colors from given source object
MRMESH_API float totalLength() const
return cached total length
virtual MRMESH_API std::shared_ptr< Object > clone() const override
virtual MRMESH_API void deserializeFields_(const Json::Value &root) override
deserializeFields_: deserializeBaseFields_ plus polyline deserialization
std::optional< size_t > numUndirectedEdges_
Definition MRObjectLinesHolder.h:122
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...
virtual MRMESH_API std::shared_ptr< Object > shallowClone() const override
ObjectLinesHolder(ObjectLinesHolder &&)=default
MRMESH_API void deserializeBaseFields_(const Json::Value &root)
MRMESH_API const ViewportMask & getVisualizePropertyMask(AnyVisualizeMaskEnum type) const override
returns mask of viewports where given property is set
virtual MRMESH_API bool hasVisualRepresentation() const override
does the object have any visual representation (visible points, triangles, edges, etc....
virtual void updateVertsColorMap(VertColors &vertsColorMap)
swaps per-vertex colors of the object with given argument
Definition MRObjectLinesHolder.h:57
MRMESH_API Expected< void > deserializeModel_(const std::filesystem::path &path, ProgressCallback progressCb={}) override
Reads model from file.
virtual MRMESH_API Box3f getWorldBox(ViewportId={}) const override
std::optional< size_t > numComponents_
Definition MRObjectLinesHolder.h:123
virtual MRMESH_API void serializeFields_(Json::Value &root) const override
serializeFields_: serializeBaseFields_ plus polyline serialization
ObjectLinesHolder(const ObjectLinesHolder &other)=default
ViewportMask showPoints_
Definition MRObjectLinesHolder.h:131
virtual void setLinesColorMap(UndirectedEdgeColors linesColorMap)
Definition MRObjectLinesHolder.h:60
virtual void setVertsColorMap(VertColors vertsColorMap)
sets per-vertex colors of the object
Definition MRObjectLinesHolder.h:54
virtual float getLineWidth() const
Definition MRObjectLinesHolder.h:43
virtual MRMESH_API size_t heapBytes() const override
returns the amount of memory this object occupies on heap
const std::shared_ptr< const Polyline3 > & polyline() const
Definition MRObjectLinesHolder.h:37
VertColors vertsColorMap_
Definition MRObjectLinesHolder.h:128
ObjectLinesHolder(ProtectedStruct, const ObjectLinesHolder &obj)
Definition MRObjectLinesHolder.h:48
std::optional< float > totalLength_
Definition MRObjectLinesHolder.h:125
MRMESH_API AllVisualizeProperties getAllVisualizeProperties() const override
get all visualize properties masks
ViewportProperty< XfBasedCache< Box3f > > worldBox_
Definition MRObjectLinesHolder.h:126
std::shared_ptr< Polyline3 > polyline_
Definition MRObjectLinesHolder.h:137
named object in the data model
Definition MRObject.h:62
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
Definition MRViewportProperty.h:17
Visual Object.
Definition MRVisualObject.h:122
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:728
std::vector< ViewportMask > AllVisualizeProperties
Definition MRVisualObject.h:75
@ DIRTY_PRIMITIVE_COLORMAP
Definition MRVisualObject.h:91
@ DIRTY_VERTS_COLORMAP
Definition MRVisualObject.h:90
Definition MRCameraOrientationPlugin.h:8
tl::expected< T, E > Expected
Definition MRExpected.h:25
@ Smooth
create mesh using dual marching cubes from OpenVDB library
Definition MRVisualObject.h:35
Definition MRObject.h:274