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{
13 _count [[maybe_unused]],
14};
15template <> struct IsVisualizeMaskEnum<LinesVisualizePropertyType> : std::true_type {};
16
22using DashPattern = Vector4<uint8_t>;
23
27{
28public:
31 ObjectLinesHolder& operator=( ObjectLinesHolder&& ) = default;
32
33 constexpr static const char* StaticTypeName() noexcept { return "LinesHolder"; }
34 virtual const char* typeName() const override { return StaticTypeName(); }
35
36 MRMESH_API virtual void applyScale( float scaleFactor ) override;
37
38 MRMESH_API virtual bool hasVisualRepresentation() const override;
39
40 [[nodiscard]] virtual bool hasModel() const override { return bool( polyline_ ); }
41
42 MRMESH_API virtual std::shared_ptr<Object> clone() const override;
43 MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;
44
45 const std::shared_ptr<const Polyline3>& polyline() const
46 { return reinterpret_cast< const std::shared_ptr<const Polyline3>& >( polyline_ ); } // reinterpret_cast to avoid making a copy of shared_ptr
47
48 MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;
49
55 MRMESH_API virtual void setDashPattern( const DashPattern& pattern, ViewportId vpId = {} );
56 virtual const DashPattern& getDashPattern( ViewportId vpId = {}, bool* isDef = nullptr ) const { return dashPattern_.get( vpId, isDef ); }
57
58 MRMESH_API virtual void setLineWidth( float width );
59 virtual float getLineWidth() const { return lineWidth_; }
60 MRMESH_API virtual void setPointSize( float size );
61 virtual float getPointSize() const { return pointSize_; }
62
64 ObjectLinesHolder( ProtectedStruct, const ObjectLinesHolder& obj ) : ObjectLinesHolder( obj ) {}
65
67 const VertColors& getVertsColorMap() const { return vertsColorMap_; }
68
70 virtual void setVertsColorMap( VertColors vertsColorMap ) { vertsColorMap_ = std::move( vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
71
73 virtual void updateVertsColorMap( VertColors& vertsColorMap ) { std::swap( vertsColorMap_, vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
74
75 const UndirectedEdgeColors& getLinesColorMap() const { return linesColorMap_; }
76 virtual void setLinesColorMap( UndirectedEdgeColors linesColorMap ) { linesColorMap_ = std::move( linesColorMap ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
77 virtual void updateLinesColorMap( UndirectedEdgeColors& updated ) { std::swap( linesColorMap_, updated ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
78
79 [[nodiscard]] MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type ) const override;
81 MRMESH_API AllVisualizeProperties getAllVisualizeProperties() const override;
83 MRMESH_API const ViewportMask& getVisualizePropertyMask( AnyVisualizeMaskEnum type ) const override;
84
86 MRMESH_API virtual void copyColors( const ObjectLinesHolder& src, const VertMap& thisToSrc );
87
90 MRMESH_API virtual Box3f getWorldBox( ViewportId = {} ) const override;
91
93 [[nodiscard]] MRMESH_API virtual size_t heapBytes() const override;
94
96 [[nodiscard]] MRMESH_API float avgEdgeLen() const;
97
99 [[nodiscard]] MRMESH_API size_t numUndirectedEdges() const;
100
102 [[nodiscard]] MRMESH_API size_t numComponents() const;
103
105 [[nodiscard]] MRMESH_API float totalLength() const;
106
108 MRMESH_API void resetFrontColor() override;
109
110protected:
111 ObjectLinesHolder( const ObjectLinesHolder& other ) = default;
112
114 MRMESH_API virtual void swapBase_( Object& other ) override;
115
118 MRMESH_API void serializeBaseFields_( Json::Value& root ) const;
120 MRMESH_API virtual void serializeFields_( Json::Value& root ) const override;
121
122 MRMESH_API Expected<void> deserializeModel_( const std::filesystem::path& path, ProgressCallback progressCb = {} ) override;
123
126 MRMESH_API void deserializeBaseFields_( const Json::Value& root );
127
129 MRMESH_API virtual void deserializeFields_( const Json::Value& root ) override;
130
131 MRMESH_API virtual Box3f computeBoundingBox_() const override;
132
133 MRMESH_API virtual void setupRenderObject_() const override;
134
136 MRMESH_API void setAllVisualizeProperties_( const AllVisualizeProperties& properties, std::size_t& pos ) override;
137
138 mutable std::optional<size_t> numUndirectedEdges_;
139 mutable std::optional<size_t> numComponents_;
140 mutable std::optional<float> avgEdgeLen_;
141 mutable std::optional<float> totalLength_;
142 mutable ViewportProperty<XfBasedCache<Box3f>> worldBox_;
143
144 VertColors vertsColorMap_;
145 UndirectedEdgeColors linesColorMap_;
146
147 ViewportMask showPoints_;
148 ViewportMask smoothConnections_;
149 ViewportMask dashed_;
150 ViewportProperty<DashPattern> dashPattern_ = DashPattern::diagonal( 20 );
151
153 float lineWidth_{ 1.0f };
154 float pointSize_{ 5.f };
155 std::shared_ptr<Polyline3> polyline_;
156
157private:
159 void setDefaultColors_();
160
162 void setDefaultSceneProperties_();
163};
164
165
166} // namespace MR
_count
Definition MRFeatureObject.h:87
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
Dashed
Definition MRObjectLinesHolder.h:12
Points
Definition MRObjectLinesHolder.h:10
Smooth
Definition MRObjectLinesHolder.h:11
Definition MRObjectLinesHolder.h:27
Definition MRVisualObject.h:119
Definition MRCameraOrientationPlugin.h:8
AllVisualizeProperties
int heapBytes(FloatGrid grid)
Definition MRVisualObject.h:32
Definition MRVector4.h:23