MeshLib C++ Docs
Loading...
Searching...
No Matches
MRVolumeSegment.h
Go to the documentation of this file.
1#pragma once
2#include "MRVoxelsFwd.h"
3
4#include "MRMesh/MRVector3.h"
5#include "MRMesh/MRExpected.h"
6#include "MRVoxelsVolume.h"
7#include "MRMesh/MRBitSet.h"
9#include <string>
10
11namespace MR
12{
13
26MRVOXELS_API Expected<MR::Mesh> meshFromVoxelsMask( const VdbVolume& volume, const VoxelBitSet& mask );
27
34{
36 float buildPathExponentModifier{-1.0f};
38 float segmentationExponentModifier{3000.0f};
40 int voxelsExpansion{25};
41};
42
51MRVOXELS_API Expected<MR::Mesh> segmentVolume( const VdbVolume& volume, const std::vector<std::pair<Vector3f, Vector3f>>& pairs,
53
55
66{
67public:
69
70 enum SeedType
71 {
72 Inside,
73 Outside,
74 Count
75 };
76
78 MRVOXELS_API void addPathSeeds( const VoxelMetricParameters& metricParameters, SeedType seedType, float exponentModifier = -1.0f );
79
81 MRVOXELS_API void setSeeds( const std::vector<Vector3i>& seeds, SeedType seedType );
82
84 MRVOXELS_API void addSeeds( const std::vector<Vector3i>& seeds, SeedType seedType );
85
87 MRVOXELS_API const std::vector<Vector3i>& getSeeds( SeedType seedType ) const;
88
90 MRVOXELS_API Expected<VoxelBitSet> segmentVolume( float segmentationExponentModifier = 3000.0f, int voxelsExpansion = 25, ProgressCallback cb = {} );
91
93 MRVOXELS_API Expected<MR::Mesh> createMeshFromSegmentation( const VoxelBitSet& segmentation ) const;
94
96 MRVOXELS_API const Vector3i& getVolumePartDimensions() const;
97
99 MRVOXELS_API const Vector3i& getMinVoxel() const;
100private:
101 const VdbVolume& volume_;
102
103 SimpleVolumeMinMax volumePart_;
104
105 Vector3i minVoxel_;
106 Vector3i maxVoxel_;
107
108 std::array<std::vector<Vector3i>, size_t( SeedType::Count )> seeds_;
109 std::array<VoxelBitSet, size_t( SeedType::Count )> seedsInVolumePartSpace_;
110
111 bool seedsChanged_{true};
112
113 void setupVolumePart_( int voxelsExpansion );
114};
115
118MRVOXELS_API Expected<std::vector<Mesh>> segmentVoxelMaskToInstances( const VdbVolume& mask, size_t minSize = 100, ProgressCallback cb = {} );
119
121
122}
#define MRVOXELS_API
Definition MRVoxelsFwd.h:14
Definition MRVolumeSegment.h:34
new unsafe ref int voxelsExpansion
new unsafe ref float buildPathExponentModifier
new unsafe ref float segmentationExponentModifier
Definition MRVolumeSegment.h:66
unsafe void setSeeds(MR.Std.Const_Vector_MRVector3i seeds, MR.VolumeSegmenter.SeedType seedType)
unsafe MR.VoxelBitSet segmentVolume(float? segmentationExponentModifier=null, int? voxelsExpansion=null, MR.Std._ByValue_Function_BoolFuncFromFloat? cb=null)
unsafe void addSeeds(MR.Std.Const_Vector_MRVector3i seeds, MR.VolumeSegmenter.SeedType seedType)
unsafe VolumeSegmenter(MR._ByValue_VolumeSegmenter _other)
unsafe void addPathSeeds(MR.Const_VoxelMetricParameters metricParameters, MR.VolumeSegmenter.SeedType seedType, float? exponentModifier=null)
Definition MRVoxelPath.h:38
MRVOXELS_API Expected< std::vector< Mesh > > segmentVoxelMaskToInstances(const VdbVolume &mask, size_t minSize=100, ProgressCallback cb={})
MRVOXELS_API Expected< MR::Mesh > meshFromVoxelsMask(const VdbVolume &volume, const VoxelBitSet &mask)
Creates mesh from voxels mask.
MRVOXELS_API Expected< MR::Mesh > segmentVolume(const VdbVolume &volume, const std::vector< std::pair< Vector3f, Vector3f > > &pairs, const VolumeSegmentationParameters &params=VolumeSegmentationParameters())
Simple segment volume.
Definition MRCameraOrientationPlugin.h:8
MRMESH_API double volume(const MeshTopology &topology, const VertCoords &points, const FaceBitSet *region=nullptr)