3#ifndef MRMESH_NO_OPENVDB
24 constexpr static const
char* TypeName() noexcept {
return "ObjectVoxels"; }
25 virtual const char*
typeName()
const override {
return TypeName(); }
30 const std::shared_ptr<Mesh>&
surface()
const {
return mesh_; }
33 const VdbVolume&
vdbVolume()
const {
return vdbVolume_; };
39 [[nodiscard]]
virtual bool hasModel()
const override {
return bool( vdbVolume_.data ); }
43 {
return vdbVolume_.dims; }
49 {
return histogram_; }
52 {
return vdbVolume_.voxelSize; }
55 virtual std::string
getClassName()
const override {
return "Voxels"; }
107 void selectVoxels(
const VoxelBitSet& selectedVoxels ) { selectedVoxels_ = selectedVoxels; }
147 } shadingType{ ShadingType::None };
154 } lutType{ LutType::Rainbow };
167 } alphaType{ AlphaType::Constant };
168 uint8_t alphaLimit{ 10 };
209 int maxSurfaceVertices_{ 5'000'000 };
210 VdbVolume vdbVolume_;
211 float isoValue_{0.0f};
212 bool dualMarchingCubes_{
true};
214 Histogram histogram_;
215 mutable std::optional<Box3i> activeBounds_;
216 mutable std::optional<size_t> activeVoxels_;
218 const char * serializeFormat_ =
".raw";
221 VolumeIndexer indexer_ = VolumeIndexer( vdbVolume_.dims );
224 void updateHistogram_(
float min,
float max, ProgressCallback cb = {} );
228 void setDefaultColors_();
231 void setDefaultSceneProperties_();
238 bool volumeRendering_{
false };
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:46
#define MRMESH_CLASS
Definition MRMesh/MRMeshFwd.h:50
Definition MRHistogram.h:10
Definition MRObjectMeshHolder.h:30
Definition MRObjectVoxels.h:17
virtual MRMESH_API std::shared_ptr< Object > clone() const override
virtual MRMESH_API void applyScale(float scaleFactor) override
scale object size (all point positions)
const Vector3i & dimensions() const
Returns dimensions of voxel objects.
Definition MRObjectVoxels.h:42
VdbVolume & varVdbVolume()
Definition MRObjectVoxels.h:34
MRMESH_API const Box3i & getActiveBounds() const
MRMESH_API void updateHistogramAndSurface(ProgressCallback cb={})
std::unique_ptr< SimpleVolume > getVolumeRenderingData() const
Definition MRObjectVoxels.h:134
const Vector3f & voxelSize() const
Definition MRObjectVoxels.h:51
MRMESH_API void construct(const SimpleVolume &simpleVolume, ProgressCallback cb={})
Clears all internal data and then creates grid and calculates histogram (surface is not built,...
virtual MRMESH_API Expected< bool > setIsoValue(float iso, ProgressCallback cb={}, bool updateSurface=true)
const VoxelBitSet & getVolumeRenderActiveVoxels() const
get active (visible) voxels
Definition MRObjectVoxels.h:110
virtual MRMESH_API void serializeFields_(Json::Value &root) const override
const char * serializeFormat() const
returns file extension used to serialize the voxels
Definition MRObjectVoxels.h:196
bool isVolumeRenderingEnabled() const
Definition MRObjectVoxels.h:128
const VolumeRenderingParams & getVolumeRenderingParams() const
Definition MRObjectVoxels.h:171
virtual MRMESH_API std::shared_ptr< Object > shallowClone() const override
const VoxelBitSet & getSelectedVoxels() const
Definition MRObjectVoxels.h:106
virtual MRMESH_API void setDirtyFlags(uint32_t mask, bool invalidateCaches=true) override
bool getDualMarchingCubes() const
returns true if the iso-surface is built using Dual Marching Cubes algorithm or false if using Standa...
Definition MRObjectVoxels.h:88
float getIsoValue() const
Returns current iso value.
Definition MRObjectVoxels.h:45
const std::shared_ptr< Mesh > & surface() const
Returns iso surface, empty if iso value is not set.
Definition MRObjectVoxels.h:30
virtual MRMESH_API size_t heapBytes() const override
returns the amount of memory this object occupies on heap
MRMESH_API Histogram updateHistogram(Histogram histogram)
IsoSurfaceChangedSignal isoSurfaceChangedSignal
Definition MRObjectVoxels.h:203
MRMESH_API Vector3i getCoordinateByVoxelId(VoxelId id) const
MRMESH_API Expected< std::shared_ptr< Mesh > > recalculateIsoSurface(const VdbVolume &volume, float iso, ProgressCallback cb={}) const
Same as above, but takes external volume.
const VdbVolume & vdbVolume() const
Return VdbVolume.
Definition MRObjectVoxels.h:33
void selectVoxels(const VoxelBitSet &selectedVoxels)
Definition MRObjectVoxels.h:107
MRMESH_API void setSerializeFormat(const char *newFormat)
sets file extension used to serialize the voxels: must be not null and must start from '....
const FloatGrid & grid() const
Returns Float grid which contains voxels data, see more on openvdb::FloatGrid.
Definition MRObjectVoxels.h:37
VoxelBitSet volumeRenderActiveVoxels_
Definition MRObjectVoxels.h:235
virtual MRMESH_API Expected< std::future< VoidOrErrStr > > serializeModel_(const std::filesystem::path &path) const override
MRMESH_API size_t activeVoxels() const
returns cached information about the number of active voxels
MRMESH_API void construct(const FloatGrid &grid, const Vector3f &voxelSize, ProgressCallback cb={})
Clears all internal data and calculates histogram.
MRMESH_API VoxelId getVoxelIdByPoint(const Vector3f &point) const
virtual std::string getClassName() const override
return human readable name of subclass
Definition MRObjectVoxels.h:55
const VolumeIndexer & getVolumeIndexer() const
Returns indexer with more options.
Definition MRObjectVoxels.h:122
MRMESH_API void deserializeFields_(const Json::Value &root) override
virtual MRMESH_API bool hasVisualRepresentation() const override
mesh object can be seen if the mesh has at least one edge
virtual MRMESH_API void setActiveBounds(const Box3i &activeBox, ProgressCallback cb={}, bool updateSurface=true)
virtual MRMESH_API void swapSignals_(Object &other) override
MRMESH_API void enableVolumeRendering(bool on)
MRMESH_API void construct(const VdbVolume &vdbVolume, ProgressCallback cb={})
Clears all internal data and calculates histogram.
MRMESH_API Histogram recalculateHistogram(std::optional< Vector2f > minmax, ProgressCallback cb={}) const
Calculates and returns new histogram.
MRMESH_API bool prepareDataForVolumeRendering(ProgressCallback cb={}) const
int getMaxSurfaceVertices() const
gets top limit on the number of vertices in the iso-surface
Definition MRObjectVoxels.h:179
MRMESH_API VdbVolume updateVdbVolume(VdbVolume vdbVolume)
MRMESH_API VoidOrErrStr deserializeModel_(const std::filesystem::path &path, ProgressCallback progressCb={}) override
Reads model from file.
MRMESH_API std::shared_ptr< Mesh > updateIsoSurface(std::shared_ptr< Mesh > mesh)
virtual MRMESH_API void setDualMarchingCubes(bool on, bool updateSurface=true, ProgressCallback cb={})
virtual MRMESH_API void invalidateActiveBoundsCaches()
Call this function in main thread post processing if you call setActiveBounds from progress bar threa...
ObjectVoxels(ProtectedStruct, const ObjectVoxels &obj)
Definition MRObjectVoxels.h:190
MRMESH_API ObjectVoxels()
MRMESH_API Expected< std::shared_ptr< Mesh > > recalculateIsoSurface(float iso, ProgressCallback cb={}) const
Calculates and return new mesh or error message.
MRMESH_API void setVolumeRenderingParams(const VolumeRenderingParams ¶ms)
MRMESH_API VoxelId getVoxelIdByCoordinate(const Vector3i &coord) const
virtual MRMESH_API std::vector< std::string > getInfoLines() const override
return several info lines that can better describe the object in the UI
MRMESH_API void setMaxSurfaceVertices(int maxVerts)
sets top limit on the number of vertices in the iso-surface
VoxelBitSet selectedVoxels_
Definition MRObjectVoxels.h:234
virtual MRMESH_API void swapBase_(Object &other) override
swaps this object with other
MRMESH_API void setVolumeRenderActiveVoxels(const VoxelBitSet &activeVoxels)
set active (visible) voxels (using only in Volume Rendering mode)
virtual const char * typeName() const override
Definition MRObjectVoxels.h:25
virtual void setVoxelPointPositioner(VoxelPointPositioner positioner)
set voxel point positioner for Marching Cubes (only for Standard Marching Cubes)
Definition MRObjectVoxels.h:93
ObjectVoxels(const ObjectVoxels &other)=default
const Histogram & histogram() const
Returns histogram.
Definition MRObjectVoxels.h:48
virtual bool hasModel() const override
Definition MRObjectVoxels.h:39
named object in the data model
Definition MRObject.h:60
Definition MRVolumeIndexer.h:65
represents a 3-dimentional float-typed vector
Definition MRDotNet/MRVector3.h:8
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:589
@ None
special value not to limit path in one slice
Definition MRVoxelPath.h:33
Definition MRCameraOrientationPlugin.h:7
std::shared_ptr< OpenVdbFloatGrid > FloatGrid
Definition MRMesh/MRMeshFwd.h:537
FilterType
Definition MRMesh/MRMeshFwd.h:592
tl::expected< T, E > Expected
Definition MRExpected.h:49
std::function< Vector3f(const Vector3f &, const Vector3f &, float, float, float)> VoxelPointPositioner
Definition MRMarchingCubes.h:16
Expected< void > VoidOrErrStr
return type for a void function that can produce an error string
Definition MRExpected.h:60
Definition MRObjectVoxels.h:138
ShadingType
Definition MRObjectVoxels.h:143
bool operator==(const VolumeRenderingParams &) const =default
LutType
Definition MRObjectVoxels.h:150
AlphaType
Definition MRObjectVoxels.h:163
Definition MRObject.h:246
Definition MRUniquePtr.h:12