3#include "MRPch/MRBindingMacros.h"
39 constexpr static const
char* StaticTypeName() noexcept {
return "MeshHolder"; }
40 virtual const char* typeName()
const override {
return StaticTypeName(); }
42 MRMESH_API virtual void applyScale(
float scaleFactor )
override;
45 MRMESH_API virtual bool hasVisualRepresentation()
const override;
47 [[nodiscard]]
virtual bool hasModel()
const override {
return bool( data_.mesh ); }
50 #pragma GCC diagnostic push
51 #pragma GCC diagnostic ignored "-Wstrict-aliasing"
53 const std::shared_ptr< const Mesh >& mesh()
const
54 {
return reinterpret_cast< const std::shared_ptr<const Mesh>&
>( data_.mesh ); }
56 #pragma GCC diagnostic pop
60 MeshPart meshPart()
const {
return data_.selectedFaces.any() ? MeshPart{ *data_.mesh, &data_.selectedFaces } : *data_.mesh; }
62 MRMESH_API virtual std::shared_ptr<Object> clone()
const override;
63 MRMESH_API virtual std::shared_ptr<Object> shallowClone()
const override;
65 MRMESH_API virtual void setDirtyFlags( uint32_t mask,
bool invalidateCaches =
true )
override;
67 const FaceBitSet& getSelectedFaces()
const {
return data_.selectedFaces; }
68 MRMESH_API virtual void selectFaces( FaceBitSet newSelection );
70 MRMESH_API const Color& getSelectedFacesColor( ViewportId
id = {} )
const;
72 MRMESH_API virtual void setSelectedFacesColor(
const Color& color, ViewportId
id = {} );
74 const UndirectedEdgeBitSet& getSelectedEdges()
const {
return data_.selectedEdges; }
75 MRMESH_API virtual void selectEdges( UndirectedEdgeBitSet newSelection );
77 MRMESH_API const Color& getSelectedEdgesColor( ViewportId
id = {} )
const;
79 MRMESH_API virtual void setSelectedEdgesColor(
const Color& color, ViewportId
id = {} );
81 MRMESH_API const ViewportProperty<Color>& getSelectedEdgesColorsForAllViewports()
const;
82 MRMESH_API virtual void setSelectedEdgesColorsForAllViewports( ViewportProperty<Color> val );
84 MRMESH_API const ViewportProperty<Color>& getSelectedFacesColorsForAllViewports()
const;
85 MRMESH_API virtual void setSelectedFacesColorsForAllViewports( ViewportProperty<Color> val );
87 MRMESH_API const ViewportProperty<Color>& getEdgesColorsForAllViewports()
const;
88 MRMESH_API virtual void setEdgesColorsForAllViewports( ViewportProperty<Color> val );
90 MRMESH_API const ViewportProperty<Color>& getPointsColorsForAllViewports()
const;
91 MRMESH_API virtual void setPointsColorsForAllViewports( ViewportProperty<Color> val );
93 MRMESH_API const ViewportProperty<Color>& getBordersColorsForAllViewports()
const;
94 MRMESH_API virtual void setBordersColorsForAllViewports( ViewportProperty<Color> val );
97 MRMESH_API void copyAllSolidColors(
const ObjectMeshHolder& other );
100 const UndirectedEdgeBitSet& creases()
const {
return data_.creases; }
101 MRMESH_API virtual void setCreases( UndirectedEdgeBitSet creases );
104 void setFlatShading(
bool on )
105 {
return setVisualizeProperty( on, MeshVisualizePropertyType::FlatShading, ViewportMask::all() ); }
106 bool flatShading()
const
107 {
return getVisualizeProperty( MeshVisualizePropertyType::FlatShading, ViewportMask::any() ); }
109 [[nodiscard]]
MRMESH_API bool supportsVisualizeProperty( AnyVisualizeMaskEnum type )
const override;
114 MRMESH_API const ViewportMask& getVisualizePropertyMask( AnyVisualizeMaskEnum type )
const override;
117 const ObjectMeshData& data()
const {
return data_; }
120 virtual void setData( ObjectMeshData && data ) { data_ = std::move( data ); setDirtyFlags( DIRTY_ALL ); }
123 virtual void updateData( ObjectMeshData& data ) { std::swap( data_, data ); setDirtyFlags( DIRTY_ALL ); }
126 const VertColors& getVertsColorMap()
const {
return data_.vertColors; }
129 virtual void setVertsColorMap( VertColors vertsColorMap ) { data_.vertColors = std::move( vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
132 virtual void updateVertsColorMap( VertColors& vertsColorMap ) { std::swap( data_.vertColors, vertsColorMap ); setDirtyFlags( DIRTY_VERTS_COLORMAP ); }
134 const FaceColors& getFacesColorMap()
const {
return data_.faceColors; }
135 virtual void setFacesColorMap( FaceColors facesColorMap ) { data_.faceColors = std::move( facesColorMap ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
136 virtual void updateFacesColorMap( FaceColors& updated ) { std::swap( data_.faceColors, updated ); setDirtyFlags( DIRTY_PRIMITIVE_COLORMAP ); }
138 MRMESH_API virtual void setEdgeWidth(
float edgeWidth );
139 float getEdgeWidth()
const {
return edgeWidth_; }
140 MRMESH_API virtual void setPointSize(
float size );
141 virtual float getPointSize()
const {
return pointSize_; }
143 const Color& getEdgesColor( ViewportId
id = {} )
const {
return edgesColor_.get(
id); }
144 virtual void setEdgesColor(
const Color& color, ViewportId
id = {} )
145 { edgesColor_.set( color,
id ); needRedraw_ =
true; }
147 const Color& getPointsColor( ViewportId
id = {} )
const {
return pointsColor_.get(
id); }
148 virtual void setPointsColor(
const Color& color, ViewportId
id = {} )
149 { pointsColor_.set( color,
id ); needRedraw_ =
true; }
151 const Color& getBordersColor( ViewportId
id = {} )
const {
return bordersColor_.get(
id ); }
152 virtual void setBordersColor(
const Color& color, ViewportId
id = {} )
153 { bordersColor_.set( color,
id ); needRedraw_ =
true; }
156 ObjectMeshHolder( ProtectedStruct,
const ObjectMeshHolder& obj ) : ObjectMeshHolder( obj )
162 [[deprecated]]
MRMESH_API MR_BIND_IGNORE
virtual void setTexture( MeshTexture texture );
163 [[deprecated]]
MRMESH_API MR_BIND_IGNORE
virtual void updateTexture( MeshTexture& updated );
164 const Vector<MeshTexture, TextureId>& getTextures()
const {
return textures_; }
165 virtual void setTextures( Vector<MeshTexture, TextureId> texture ) { textures_ = std::move( texture ); setDirtyFlags( DIRTY_TEXTURE ); }
166 virtual void updateTextures( Vector<MeshTexture, TextureId>& updated ) { std::swap( textures_, updated ); setDirtyFlags( DIRTY_TEXTURE ); }
170 virtual void setTexturePerFace( Vector<TextureId, FaceId> texturePerFace ) { data_.texturePerFace = std::move( texturePerFace ); setDirtyFlags( DIRTY_TEXTURE_PER_FACE ); }
171 virtual void updateTexturePerFace( Vector<TextureId, FaceId>& texturePerFace ) { std::swap( data_.texturePerFace, texturePerFace ); setDirtyFlags( DIRTY_TEXTURE_PER_FACE ); }
172 virtual void addTexture( MeshTexture texture ) { textures_.emplace_back( std::move( texture ) ); setDirtyFlags( DIRTY_TEXTURE_PER_FACE ); }
173 const TexturePerFace& getTexturePerFace()
const {
return data_.texturePerFace; }
175 const VertUVCoords& getUVCoords()
const {
return data_.uvCoordinates; }
176 virtual void setUVCoords( VertUVCoords uvCoordinates ) { data_.uvCoordinates = std::move( uvCoordinates ); setDirtyFlags( DIRTY_UV ); }
177 virtual void updateUVCoords( VertUVCoords& updated ) { std::swap( data_.uvCoordinates, updated ); setDirtyFlags( DIRTY_UV ); }
180 MRMESH_API virtual void copyTextureAndColors(
const ObjectMeshHolder& src,
const VertMap& thisToSrc,
const FaceMap& thisToSrcFaces = {} );
183 MRMESH_API virtual void copyColors(
const ObjectMeshHolder& src,
const VertMap& thisToSrc,
const FaceMap& thisToSrcFaces = {} );
186 const MeshTexture& getAncillaryTexture()
const {
return ancillaryTexture_; }
187 virtual void setAncillaryTexture( MeshTexture texture ) { ancillaryTexture_ = std::move( texture ); setDirtyFlags( DIRTY_TEXTURE ); }
189 const VertUVCoords& getAncillaryUVCoords()
const {
return ancillaryUVCoordinates_; }
190 virtual void setAncillaryUVCoords( VertUVCoords uvCoordinates ) { ancillaryUVCoordinates_ = std::move( uvCoordinates ); setDirtyFlags( DIRTY_UV ); }
191 void updateAncillaryUVCoords( VertUVCoords& updated ) { std::swap( ancillaryUVCoordinates_, updated ); setDirtyFlags( DIRTY_UV ); }
193 bool hasAncillaryTexture()
const {
return !ancillaryUVCoordinates_.empty() && !ancillaryTexture_.pixels.empty(); }
197 MRMESH_API uint32_t getNeededNormalsRenderDirtyValue( ViewportMask viewportMask )
const;
199 MRMESH_API virtual bool getRedrawFlag( ViewportMask viewportMask )
const override;
202 [[nodiscard]]
MRMESH_API bool isMeshClosed()
const;
206 [[nodiscard]]
MRMESH_API virtual Box3f getWorldBox( ViewportId = {} )
const override;
209 [[nodiscard]]
MRMESH_API size_t numSelectedFaces()
const;
212 [[nodiscard]]
MRMESH_API size_t numSelectedEdges()
const;
215 [[nodiscard]]
MRMESH_API size_t numCreaseEdges()
const;
218 [[nodiscard]]
MRMESH_API double totalArea()
const;
221 [[nodiscard]]
MRMESH_API double selectedArea()
const;
227 [[nodiscard]]
MRMESH_API float avgEdgeLen()
const;
230 [[nodiscard]]
MRMESH_API size_t numUndirectedEdges()
const;
233 [[nodiscard]]
MRMESH_API size_t numHoles()
const;
236 [[nodiscard]]
MRMESH_API size_t numComponents()
const;
239 [[nodiscard]]
MRMESH_API size_t numHandles()
const;
245 [[nodiscard]]
const char * serializeFormat()
const {
return serializeFormat_; }
248 [[nodiscard]]
MRMESH_API const char * actualSerializeFormat()
const;
252 MRMESH_API void setSerializeFormat(
const char * newFormat );
259 MRMESH_API virtual size_t getModelHash()
const override;
260 MRMESH_API virtual bool sameModels(
const Object& other )
const override;
263 using SelectionChangedSignal = Signal<void()>;
264 SelectionChangedSignal faceSelectionChangedSignal;
265 SelectionChangedSignal edgeSelectionChangedSignal;
266 SelectionChangedSignal creasesChangedSignal;
269 ObjectMeshData data_;
272 Vector<MeshTexture, TextureId> textures_;
274 MeshTexture ancillaryTexture_;
277 mutable std::optional<size_t> numHoles_;
278 mutable std::optional<size_t> numComponents_;
279 mutable std::optional<size_t> numUndirectedEdges_;
280 mutable std::optional<size_t> numHandles_;
281 mutable std::optional<bool> meshIsClosed_;
282 mutable std::optional<size_t> numSelectedFaces_, numSelectedEdges_, numCreaseEdges_;
283 mutable std::optional<double> totalArea_, selectedArea_;
284 mutable std::optional<double> volume_;
285 mutable std::optional<float> avgEdgeLen_;
286 mutable ViewportProperty<XfBasedCache<Box3f>> worldBox_;
288 ObjectMeshHolder(
const ObjectMeshHolder& other ) =
default;
291 MRMESH_API virtual void swapBase_( Object& other )
override;
294 MRMESH_API virtual void swapSignals_( Object& other )
override;
296 MRMESH_API virtual Expected<std::future<Expected<void>>> serializeModel_(
const std::filesystem::path& path )
const override;
298 MRMESH_API virtual void serializeFields_( Json::Value& root )
const override;
300 MRMESH_API void deserializeFields_(
const Json::Value& root )
override;
302 MRMESH_API Expected<void> deserializeModel_(
const std::filesystem::path& path, ProgressCallback progressCb = {} )
override;
303 MRMESH_API virtual Expected<void> setSharedModel_(
const Object& other )
override;
306 MRMESH_API void setAllVisualizeProperties_(
const AllVisualizeProperties& properties, std::size_t& pos )
override;
308 MRMESH_API virtual Box3f computeBoundingBox_()
const override;
310 MRMESH_API virtual void setupRenderObject_()
const override;
312 ViewportMask showTexture_;
313 ViewportMask showFaces_ = ViewportMask::all();
314 ViewportMask showEdges_;
315 ViewportMask showPoints_;
316 ViewportMask showSelectedEdges_ = ViewportMask::all();
317 ViewportMask showSelectedFaces_ = ViewportMask::all();
318 ViewportMask showBordersHighlight_;
319 ViewportMask polygonOffset_;
320 ViewportMask flatShading_;
324 ViewportMask shadingEnabled_ = ViewportMask::all();
326 ViewportMask onlyOddFragments_;
328 ViewportProperty<Color> edgesColor_;
329 ViewportProperty<Color> pointsColor_;
330 ViewportProperty<Color> bordersColor_;
331 ViewportProperty<Color> edgeSelectionColor_;
332 ViewportProperty<Color> faceSelectionColor_;
334 float edgeWidth_{ 0.5f };
335 float pointSize_{ 5.f };
339 void setDefaultColors_();
342 void setDefaultSceneProperties_();
344 const char * serializeFormat_ =
nullptr;
_count
Definition MRFeatureObject.h:87
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
Points
Definition MRObjectLinesHolder.h:10
OnlyOddFragments
Definition MRObjectMeshHolder.h:22
Faces
Definition MRObjectMeshHolder.h:14
SelectedFaces
Definition MRObjectMeshHolder.h:18
Edges
Definition MRObjectMeshHolder.h:16
EnableShading
Definition MRObjectMeshHolder.h:20
PolygonOffsetFromCamera
Definition MRObjectMeshHolder.h:24
FlatShading
Definition MRObjectMeshHolder.h:21
SelectedEdges
Definition MRObjectMeshHolder.h:19
Texture
Definition MRObjectMeshHolder.h:15
BordersHighlight
Definition MRObjectMeshHolder.h:23
Definition MRObjectMeshHolder.h:32
Definition MRVisualObject.h:119
MRVIEWER_API std::unique_ptr< ImGuiImage > & getTexture(TextureType type)
Definition MRCameraOrientationPlugin.h:8
MRMESH_API void setDefaultSerializeMeshFormat(std::string newFormat)
MRMESH_API const std::string & defaultSerializeMeshFormat()
int heapBytes(FloatGrid grid)
float volume(MeshTopology topology, VertCoords points, FaceBitSet region=None)
Definition MRVisualObject.h:32