MeshLib C++ Docs
Loading...
Searching...
No Matches
MRObjectPointsHolder.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRPch/MRBindingMacros.h"
4#include "MRVisualObject.h"
5#include "MRXfBasedCache.h"
6#include "MRPointCloudPart.h"
7
8namespace MR
9{
10
11enum class MRMESH_CLASS PointsVisualizePropertyType
12{
14 _count [[maybe_unused]],
15};
16template <> struct IsVisualizeMaskEnum<PointsVisualizePropertyType> : std::true_type {};
17
21{
22public:
24
25 ObjectPointsHolder( ObjectPointsHolder&& ) noexcept = default;
26 ObjectPointsHolder& operator = ( ObjectPointsHolder&& ) noexcept = default;
27
28 constexpr static const char* StaticTypeName() noexcept { return "PointsHolder"; }
29 virtual const char* typeName() const override { return StaticTypeName(); }
30
31 MRMESH_API virtual void applyScale( float scaleFactor ) override;
32
33 MRMESH_API virtual bool hasVisualRepresentation() const override;
34
35 [[nodiscard]] virtual bool hasModel() const override { return bool( points_ ); }
36
37 const std::shared_ptr<const PointCloud>& pointCloud() const
38 { return reinterpret_cast< const std::shared_ptr<const PointCloud>& >( points_ ); } // reinterpret_cast to avoid making a copy of shared_ptr
39
41 [[nodiscard]] PointCloudPart pointCloudPart() const { return selectedPoints_.any() ? PointCloudPart{ *points_, &selectedPoints_ } : PointCloudPart{ *points_ }; }
42
43 MRMESH_API virtual std::shared_ptr<Object> clone() const override;
44 MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;
45
46 MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;
47
49 const VertBitSet& getSelectedPoints() const { return selectedPoints_; }
50
52 void selectPoints( VertBitSet newSelection ) { updateSelectedPoints( newSelection ); }
53
55 MRMESH_API virtual void updateSelectedPoints( VertBitSet& selection );
56
58 MRMESH_API const VertBitSet& getSelectedPointsOrAll() const;
59
61 const Color& getSelectedVerticesColor( ViewportId id = {} ) const
62 {
63 return selectedVerticesColor_.get( id );
64 }
66 MRMESH_API virtual void setSelectedVerticesColor( const Color& color, ViewportId id = {} );
67
68 MRMESH_API const ViewportProperty<Color>& getSelectedVerticesColorsForAllViewports() const;
69 MRMESH_API virtual void setSelectedVerticesColorsForAllViewports( ViewportProperty<Color> val );
70
72 MRMESH_API void copyAllSolidColors( const ObjectPointsHolder& other );
73
74 [[nodiscard]] MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type ) const override;
75
77 const VertColors& getVertsColorMap() const { return vertsColorMap_; }
78
80 virtual void setVertsColorMap( VertColors vertsColorMap ) { vertsColorMap_ = std::move( vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
81
83 virtual void updateVertsColorMap( VertColors& vertsColorMap ) { std::swap( vertsColorMap_, vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
84
86 MRMESH_API virtual void copyColors( const ObjectPointsHolder & src, const VertMap & thisToSrc, const FaceMap& thisToSrcFaces = {} );
87
89 MRMESH_API AllVisualizeProperties getAllVisualizeProperties() const override;
91 MRMESH_API const ViewportMask& getVisualizePropertyMask( AnyVisualizeMaskEnum type ) const override;
92
94 MRMESH_API virtual void setPointSize( float size );
96 virtual float getPointSize() const { return pointSize_; }
97
99 ObjectPointsHolder( ProtectedStruct, const ObjectPointsHolder& obj ) : ObjectPointsHolder( obj )
100 {}
101
104 MRMESH_API virtual Box3f getWorldBox( ViewportId = {} ) const override;
106 MRMESH_API size_t numValidPoints() const;
108 MRMESH_API size_t numSelectedPoints() const;
109
111 [[nodiscard]] MRMESH_API virtual size_t heapBytes() const override;
112
119 int getRenderDiscretization() const { return renderDiscretization_; }
120
122 MRMESH_API size_t numRenderingValidPoints() const;
123
125 static constexpr int MaxRenderingPointsDefault = 1'000'000;
127 static constexpr int MaxRenderingPointsUnlimited = std::numeric_limits<int>::max();
128
131 MRMESH_API int getMaxRenderingPoints() const { return maxRenderingPoints_; }
132
135 MRMESH_API void setMaxRenderingPoints( int val );
136
138 [[nodiscard]] const char * serializeFormat() const { return serializeFormat_; }
139 [[deprecated]] MR_BIND_IGNORE const char * savePointsFormat() const { return serializeFormat(); }
140
143 MRMESH_API void setSerializeFormat( const char * newFormat );
144 [[deprecated]] MR_BIND_IGNORE void setSavePointsFormat( const char * newFormat ) { setSerializeFormat( newFormat ); }
145
147 MRMESH_API void resetFrontColor() override;
149 MRMESH_API void resetColors() override;
150
152 using SelectionChangedSignal = Signal<void()>;
153 SelectionChangedSignal pointsSelectionChangedSignal;
154
156 Signal<void()> renderDiscretizationChangedSignal;
157
158protected:
159 VertBitSet selectedPoints_;
160 mutable std::optional<size_t> numValidPoints_;
161 mutable std::optional<size_t> numSelectedPoints_;
162 ViewportProperty<Color> selectedVerticesColor_;
163 ViewportMask showSelectedVertices_ = ViewportMask::all();
164 VertColors vertsColorMap_;
165
168 MRMESH_API virtual void swapSignals_( Object& other ) override;
169
170 std::shared_ptr<PointCloud> points_;
171 mutable ViewportProperty<XfBasedCache<Box3f>> worldBox_;
172
174 float pointSize_{ 5.0f };
175
176 ObjectPointsHolder( const ObjectPointsHolder& other ) = default;
177
179 MRMESH_API virtual void swapBase_( Object& other ) override;
180
181 MRMESH_API virtual Box3f computeBoundingBox_() const override;
182
183 MRMESH_API virtual Expected<std::future<Expected<void>>> serializeModel_( const std::filesystem::path& path ) const override;
184
185 MRMESH_API virtual Expected<void> deserializeModel_( const std::filesystem::path& path, ProgressCallback progressCb = {} ) override;
186
187 MRMESH_API virtual void serializeFields_( Json::Value& root ) const override;
188
189 MRMESH_API virtual void deserializeFields_( const Json::Value& root ) override;
190
191 MRMESH_API virtual void setupRenderObject_() const override;
192
194 MRMESH_API void setAllVisualizeProperties_( const AllVisualizeProperties& properties, std::size_t& pos ) override;
195
196 int maxRenderingPoints_ = MaxRenderingPointsDefault;
197
198private:
199
201 void setDefaultColors_();
202
204 void setDefaultSceneProperties_();
205
206 // update renderDiscretization_ as numValidPoints_ / maxRenderingPoints_ (rounded up)
207 void updateRenderDiscretization_();
208
209 int renderDiscretization_ = 1; // auxiliary parameter to avoid recalculation in every frame
210
211 const char * serializeFormat_ = nullptr; // means use defaultSerializePointsFormat()
212};
213
216[[nodiscard]] MRMESH_API const std::string & defaultSerializePointsFormat();
217
220// serialization falls back to the PLY format if given format support is available
221// NOTE: CTM format support is available in the MRIOExtras library; make sure to load it if you prefer CTM
222MRMESH_API void setDefaultSerializePointsFormat( std::string newFormat );
223
224} //namespace MR
_count
Definition MRFeatureObject.h:87
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
SelectedVertices
Definition MRObjectPointsHolder.h:13
Definition MRObjectPointsHolder.h:21
Definition MRVisualObject.h:119
Definition MRCameraOrientationPlugin.h:8
MRMESH_API void setDefaultSerializePointsFormat(std::string newFormat)
MRMESH_API const std::string & defaultSerializePointsFormat()
AllVisualizeProperties
int heapBytes(FloatGrid grid)
Definition MRVisualObject.h:32