MeshLib
 
Loading...
Searching...
No Matches
MRObjectPointsHolder.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 PointsVisualizePropertyType
9{
11 _count [[maybe_unused]],
12};
13template <> struct IsVisualizeMaskEnum<PointsVisualizePropertyType> : std::true_type {};
14
18{
19public:
21
22 ObjectPointsHolder( ObjectPointsHolder&& ) noexcept = default;
23 ObjectPointsHolder& operator = ( ObjectPointsHolder&& ) noexcept = default;
24
25 constexpr static const char* TypeName() noexcept { return "PointsHolder"; }
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( points_ ); }
33
34 const std::shared_ptr<const PointCloud>& pointCloud() const
35 { return reinterpret_cast< const std::shared_ptr<const PointCloud>& >( points_ ); } // reinterpret_cast to avoid making a copy of shared_ptr
36
37 MRMESH_API virtual std::shared_ptr<Object> clone() const override;
38 MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;
39
40 MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;
41
42 const VertBitSet& getSelectedPoints() const { return selectedPoints_; }
43 MRMESH_API virtual void selectPoints( VertBitSet newSelection );
44
47
50 {
51 return selectedVerticesColor_.get( id );
52 }
54 MRMESH_API virtual void setSelectedVerticesColor( const Color& color, ViewportId id = {} );
55
58
59 [[nodiscard]] MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type ) const override;
60
65
67 MRMESH_API virtual void setPointSize( float size );
69 virtual float getPointSize() const { return pointSize_; }
70
74
77 MRMESH_API virtual Box3f getWorldBox( ViewportId = {} ) const override;
79 MRMESH_API size_t numValidPoints() const;
82
84 [[nodiscard]] MRMESH_API virtual size_t heapBytes() const override;
85
92 int getRenderDiscretization() const { return renderDiscretization_; }
93
96
98 static constexpr int MaxRenderingPointsDefault = 1'000'000;
100 static constexpr int MaxRenderingPointsUnlimited = std::numeric_limits<int>::max();
101
104 MRMESH_API int getMaxRenderingPoints() const { return maxRenderingPoints_; }
105
109
111 [[nodiscard]] const char * savePointsFormat() const { return savePointsFormat_; }
112
114 MRMESH_API void setSavePointsFormat( const char * newFormat );
115
119
122
123protected:
125 mutable std::optional<size_t> numValidPoints_;
126 mutable std::optional<size_t> numSelectedPoints_;
128 ViewportMask showSelectedVertices_ = ViewportMask::all();
129
132 MRMESH_API virtual void swapSignals_( Object& other ) override;
133
134 std::shared_ptr<PointCloud> points_;
136
138 float pointSize_{ 5.0f };
139
140 ObjectPointsHolder( const ObjectPointsHolder& other ) = default;
141
143 MRMESH_API virtual void swapBase_( Object& other ) override;
144
145 MRMESH_API virtual Box3f computeBoundingBox_() const override;
146
147 MRMESH_API virtual Expected<std::future<VoidOrErrStr>> serializeModel_( const std::filesystem::path& path ) const override;
148
149 MRMESH_API virtual VoidOrErrStr deserializeModel_( const std::filesystem::path& path, ProgressCallback progressCb = {} ) override;
150
151 MRMESH_API virtual void serializeFields_( Json::Value& root ) const override;
152
153 MRMESH_API virtual void deserializeFields_( const Json::Value& root ) override;
154
155 MRMESH_API virtual void setupRenderObject_() const override;
156
158 MRMESH_API void setAllVisualizeProperties_( const AllVisualizeProperties& properties, std::size_t& pos ) override;
159
160 int maxRenderingPoints_ = MaxRenderingPointsDefault;
161
162private:
163
165 void setDefaultColors_();
166
168 void setDefaultSceneProperties_();
169
170 // update renderDiscretization_ as numValidPoints_ / maxRenderingPoints_ (rounded up)
171 void updateRenderDiscretization_();
172
173 int renderDiscretization_ = 1; // auxiliary parameter to avoid recalculation in every frame
174#ifndef MRMESH_NO_OPENCTM
175 const char * savePointsFormat_ = ".ctm";
176#else
177 const char * savePointsFormat_ = ".ply";
178#endif
179};
180
181}
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:46
#define MRMESH_CLASS
Definition MRMesh/MRMeshFwd.h:50
SelectedVertices
Definition MRObjectPointsHolder.h:10
Definition MRDotNet/MRBitSet.h:39
Definition MRVisualObject.h:67
Definition MRObjectPointsHolder.h:18
virtual MRMESH_API Expected< std::future< VoidOrErrStr > > serializeModel_(const std::filesystem::path &path) const override
ViewportProperty< Color > selectedVerticesColor_
Definition MRObjectPointsHolder.h:127
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...
MRMESH_API const ViewportProperty< Color > & getSelectedVerticesColorsForAllViewports() const
MRMESH_API int getMaxRenderingPoints() const
Definition MRObjectPointsHolder.h:104
MRMESH_API ObjectPointsHolder()
ObjectPointsHolder(ProtectedStruct, const ObjectPointsHolder &obj)
Definition MRObjectPointsHolder.h:72
const std::shared_ptr< const PointCloud > & pointCloud() const
Definition MRObjectPointsHolder.h:34
std::optional< size_t > numValidPoints_
Definition MRObjectPointsHolder.h:125
virtual MRMESH_API void swapSignals_(Object &other) override
virtual MRMESH_API size_t heapBytes() const override
returns the amount of memory this object occupies on heap
virtual MRMESH_API void setDirtyFlags(uint32_t mask, bool invalidateCaches=true) override
const char * savePointsFormat() const
returns file extension used to serialize the points
Definition MRObjectPointsHolder.h:111
virtual MRMESH_API void setupRenderObject_() const override
ObjectPointsHolder(ObjectPointsHolder &&) noexcept=default
MRMESH_API void setSavePointsFormat(const char *newFormat)
sets file extension used to serialize the points: must be not null and must start from '....
virtual bool hasModel() const override
Definition MRObjectPointsHolder.h:32
const Color & getSelectedVerticesColor(ViewportId id={}) const
returns colors of selected vertices
Definition MRObjectPointsHolder.h:49
virtual MRMESH_API void selectPoints(VertBitSet newSelection)
MRMESH_API size_t numSelectedPoints() const
returns cached information about the number of selected points
virtual const char * typeName() const override
Definition MRObjectPointsHolder.h:26
MRMESH_API void setAllVisualizeProperties_(const AllVisualizeProperties &properties, std::size_t &pos) override
set all visualize properties masks
MRMESH_API const VertBitSet & getSelectedPointsOrAll() const
returns selected points if any, otherwise returns all valid points
SelectionChangedSignal pointsSelectionChangedSignal
Definition MRObjectPointsHolder.h:118
virtual MRMESH_API void deserializeFields_(const Json::Value &root) override
VertBitSet selectedPoints_
Definition MRObjectPointsHolder.h:124
int getRenderDiscretization() const
Definition MRObjectPointsHolder.h:92
MRMESH_API void setMaxRenderingPoints(int val)
virtual MRMESH_API Box3f computeBoundingBox_() const override
Signal< void()> renderDiscretizationChangedSignal
signal about render discretization changing, triggered in setRenderDiscretization
Definition MRObjectPointsHolder.h:121
MRMESH_API const ViewportMask & getVisualizePropertyMask(AnyVisualizeMaskEnum type) const override
returns mask of viewports where given property is set
virtual MRMESH_API std::shared_ptr< Object > clone() const override
ObjectPointsHolder(const ObjectPointsHolder &other)=default
ViewportProperty< XfBasedCache< Box3f > > worldBox_
Definition MRObjectPointsHolder.h:135
MRMESH_API AllVisualizeProperties getAllVisualizeProperties() const override
get all visualize properties masks
size_t numRenderingValidPoints() const
returns count of valid points that will be rendered
virtual MRMESH_API void setSelectedVerticesColor(const Color &color, ViewportId id={})
sets colors of selected vertices
virtual MRMESH_API VoidOrErrStr deserializeModel_(const std::filesystem::path &path, ProgressCallback progressCb={}) override
Reads model from file.
virtual float getPointSize() const
returns size of points on screen in pixels
Definition MRObjectPointsHolder.h:69
virtual MRMESH_API void setPointSize(float size)
sets size of points on screen in pixels
virtual MRMESH_API bool hasVisualRepresentation() const override
does the object have any visual representation (visible points, triangles, edges, etc....
virtual MRMESH_API std::shared_ptr< Object > shallowClone() const override
MRMESH_API size_t numValidPoints() const
returns cached information about the number of valid points
virtual MRMESH_API void applyScale(float scaleFactor) override
scale object size (all point positions)
std::shared_ptr< PointCloud > points_
Definition MRObjectPointsHolder.h:134
virtual MRMESH_API Box3f getWorldBox(ViewportId={}) const override
const VertBitSet & getSelectedPoints() const
Definition MRObjectPointsHolder.h:42
virtual MRMESH_API void serializeFields_(Json::Value &root) const override
virtual MRMESH_API void swapBase_(Object &other) override
swaps this object with other
virtual MRMESH_API void setSelectedVerticesColorsForAllViewports(ViewportProperty< Color > val)
std::optional< size_t > numSelectedPoints_
Definition MRObjectPointsHolder.h:126
named object in the data model
Definition MRObject.h:60
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:38
Definition MRViewportProperty.h:17
Visual Object.
Definition MRVisualObject.h:131
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:589
std::vector< ViewportMask > AllVisualizeProperties
Definition MRVisualObject.h:85
Definition MRCameraOrientationPlugin.h:7
tl::expected< T, E > Expected
Definition MRExpected.h:49
Expected< void > VoidOrErrStr
return type for a void function that can produce an error string
Definition MRExpected.h:60
Definition MRColor.h:9
Definition MRVisualObject.h:45
Definition MRObject.h:246