20 ObjectVoxels& operator = ( ObjectVoxels&& ) noexcept = default;
21 ObjectVoxels( ObjectVoxels&& ) noexcept = default;
22 virtual ~ObjectVoxels() = default;
24 constexpr static const
char* StaticTypeName() noexcept {
return "ObjectVoxels"; }
25 virtual const char* typeName()
const override {
return StaticTypeName(); }
27 constexpr static const char* StaticClassName() noexcept {
return "Voxel Volume"; }
28 virtual std::string className()
const override {
return StaticClassName(); }
30 constexpr static const char* StaticClassNameInPlural() noexcept {
return "Voxel Volumes"; }
31 virtual std::string classNameInPlural()
const override {
return StaticClassNameInPlural(); }
33 MRVOXELS_API virtual void applyScale(
float scaleFactor )
override;
36 const std::shared_ptr<Mesh>& surface()
const {
return data_.mesh; }
39 const VdbVolume& vdbVolume()
const {
return vdbVolume_; };
40 VdbVolume& varVdbVolume() {
return vdbVolume_; }
43 const FloatGrid& grid()
const {
return vdbVolume_.data; }
45 [[nodiscard]]
virtual bool hasModel()
const override {
return bool( vdbVolume_.data ); }
48 const Vector3i& dimensions()
const
49 {
return vdbVolume_.dims; }
51 float getIsoValue()
const
54 const Histogram& histogram()
const
55 {
return histogram_; }
57 const Vector3f& voxelSize()
const
58 {
return vdbVolume_.voxelSize; }
60 MRVOXELS_API virtual std::vector<std::string> getInfoLines()
const override;
66 MRVOXELS_API void construct(
const SimpleVolume& simpleVolume,
const std::optional<Vector2f> & minmax = {}, ProgressCallback cb = {},
bool normalPlusGrad = false );
71 MRVOXELS_API void construct(
const SimpleVolumeMinMax& simpleVolumeMinMax, ProgressCallback cb = {},
bool normalPlusGrad = false );
75 MRVOXELS_API void construct(
const FloatGrid& grid,
const Vector3f& voxelSize,
const std::optional<Vector2f> & minmax = {} );
78 MRVOXELS_API void construct(
const VdbVolume& vdbVolume );
82 MRVOXELS_API void updateHistogramAndSurface( ProgressCallback cb = {} );
86 MRVOXELS_API virtual Expected<bool> setIsoValue(
float iso, ProgressCallback cb = {},
bool updateSurface = true );
90 MRVOXELS_API std::shared_ptr<Mesh> updateIsoSurface( std::shared_ptr<Mesh> mesh );
93 MRVOXELS_API VdbVolume updateVdbVolume( VdbVolume vdbVolume );
96 MRVOXELS_API Histogram updateHistogram( Histogram histogram );
99 MRVOXELS_API Expected<std::shared_ptr<Mesh>> recalculateIsoSurface(
float iso, ProgressCallback cb = {} )
const;
101 MRVOXELS_API Expected<std::shared_ptr<Mesh>> recalculateIsoSurface(
const VdbVolume& volume,
float iso, ProgressCallback cb = {} )
const;
103 MRVOXELS_API Histogram recalculateHistogram( std::optional<Vector2f> minmax, ProgressCallback cb = {} )
const;
105 bool getDualMarchingCubes()
const {
return dualMarchingCubes_; }
108 MRVOXELS_API virtual void setDualMarchingCubes(
bool on,
bool updateSurface =
true, ProgressCallback cb = {} );
110 virtual void setVoxelPointPositioner( VoxelPointPositioner positioner ) { positioner_ = positioner; }
116 MRVOXELS_API virtual void setActiveBounds(
const Box3i& activeBox, ProgressCallback cb = {},
bool updateSurface = true );
121 MRVOXELS_API virtual void invalidateActiveBoundsCaches();
124 void selectVoxels(
const VoxelBitSet& selectedVoxels ) { selectedVoxels_ = selectedVoxels; }
127 const VoxelBitSet& getVolumeRenderActiveVoxels()
const {
return volumeRenderActiveVoxels_; }
129 MRVOXELS_API void setVolumeRenderActiveVoxels(
const VoxelBitSet& activeVoxels );
134 MRVOXELS_API VoxelId getVoxelIdByCoordinate(
const Vector3i& coord )
const;
135 MRVOXELS_API VoxelId getVoxelIdByPoint(
const Vector3f& point )
const;
136 MRVOXELS_API Vector3i getCoordinateByVoxelId( VoxelId
id )
const;
139 const VolumeIndexer& getVolumeIndexer()
const {
return indexer_; }
143 MRVOXELS_API bool prepareDataForVolumeRendering( ProgressCallback cb = {} )
const;
145 bool isVolumeRenderingEnabled()
const {
return volumeRendering_; }
151 [[nodiscard]] std::unique_ptr<SimpleVolume> getVolumeRenderingData()
const {
return std::move( volumeRenderingData_ ); }
157 FilterType volumeFilterType{ FilterType::Linear };
164 } shadingType{ ShadingType::None };
171 } lutType{ LutType::Rainbow };
180 float samplingStep{ -1.0f };
187 } alphaType{ AlphaType::Constant };
188 uint8_t alphaLimit{ 10 };
192 MRVOXELS_API void setVolumeRenderingParams(
const VolumeRenderingParams& params );
194 MRVOXELS_API virtual bool hasVisualRepresentation()
const override;
197 MRVOXELS_API void setMaxSurfaceVertices(
int maxVerts );
199 int getMaxSurfaceVertices()
const {
return maxSurfaceVertices_; }
201 MRVOXELS_API virtual std::shared_ptr<Object> clone()
const override;
202 MRVOXELS_API virtual std::shared_ptr<Object> shallowClone()
const override;
204 MRVOXELS_API virtual void setDirtyFlags( uint32_t mask,
bool invalidateCaches =
true )
override;
210 ObjectVoxels( ProtectedStruct,
const ObjectVoxels& obj ) : ObjectVoxels( obj ) {}
216 [[nodiscard]]
const char * serializeFormat()
const {
return serializeFormat_; }
220 MRVOXELS_API void setSerializeFormat(
const char * newFormat );
226 using IsoSurfaceChangedSignal = Signal<void()>;
227 IsoSurfaceChangedSignal isoSurfaceChangedSignal;
230 using VoxelsChangedSignal = Signal<void()>;
231 VoxelsChangedSignal voxelsChangedSignal;
234 VolumeRenderingParams volumeRenderingParams_;
235 mutable UniquePtr<SimpleVolume> volumeRenderingData_;
237 int maxSurfaceVertices_{ 5'000'000 };
238 VdbVolume vdbVolume_;
239 float isoValue_{0.0f};
240 bool dualMarchingCubes_{
true};
241 VoxelPointPositioner positioner_ = {};
242 Histogram histogram_;
243 mutable std::optional<Box3i> activeBounds_;
244 mutable std::optional<size_t> activeVoxels_;
246 const char * serializeFormat_ =
nullptr;
249 VolumeIndexer indexer_ = VolumeIndexer( vdbVolume_.dims );
250 Vector3f reverseVoxelSize_;
252 void updateHistogram_(
float min,
float max, ProgressCallback cb = {} );
256 void setDefaultColors_();
259 void setDefaultSceneProperties_();
262 VoxelBitSet selectedVoxels_;
263 VoxelBitSet volumeRenderActiveVoxels_;
265 ObjectVoxels(
const ObjectVoxels& other ) =
default;
266 bool volumeRendering_{
false };
269 MRVOXELS_API virtual void swapBase_( Object& other )
override;
272 MRVOXELS_API virtual void swapSignals_( Object& other )
override;
274 MRVOXELS_API virtual void serializeFields_( Json::Value& root )
const override;
276 MRVOXELS_API void deserializeFields_(
const Json::Value& root )
override;
278 MRVOXELS_API Expected<void> deserializeModel_(
const std::filesystem::path& path, ProgressCallback progressCb = {} )
override;
280 MRVOXELS_API virtual Expected<std::future<Expected<void>>> serializeModel_(
const std::filesystem::path& path )
const override;
#define MRVOXELS_API
Definition MRVoxelsFwd.h:14
#define MRVOXELS_CLASS
Definition MRVoxelsFwd.h:18
Definition MRCameraOrientationPlugin.h:8
MRVOXELS_API const std::string & defaultSerializeVoxelsFormat()
MRVOXELS_API void setDefaultSerializeVoxelsFormat(std::string newFormat)
int heapBytes(FloatGrid grid)
meshlib.mrmeshpy.std_vector_VoxelsVolumeMinMax_FloatGrid getSelectedVoxels()
Definition MRMesh/MRColor.h:9
Definition MRObjectVoxels.h:155
ShadingType
Definition MRObjectVoxels.h:160
bool operator==(const VolumeRenderingParams &) const =default
LutType
Definition MRObjectVoxels.h:167
AlphaType
Definition MRObjectVoxels.h:183