MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMarchingCubes.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRVoxelsFwd.h"
5#include "MRVoxelsVolume.h"
8#include "MRMesh/MRExpected.h"
9#include <climits>
10
11namespace MR
12{
13
14// Callback type for positioning marching cubes vertices
15// args: position0, position1, value0, value1, iso
16using VoxelPointPositioner = std::function<Vector3f( const Vector3f&, const Vector3f&, float, float, float )>;
17
18struct MarchingCubesParams
19{
21 Vector3f origin;
22
24 ProgressCallback cb;
25
27 float iso{ 0.0f };
28
30 bool lessInside{ false };
31
33 Vector<VoxelId, FaceId>* outVoxelPerFaceMap{ nullptr };
34
38 VoxelPointPositioner positioner = {};
39
41 int maxVertices = INT_MAX;
42
45 enum class CachingMode
46 {
49 Automatic,
51 None,
53 Normal,
54 } cachingMode = CachingMode::Automatic;
55
57 std::function<void()> freeVolume;
58
59 // To allow passing Python lambdas into `positioner`.
60 MR_BIND_PREFER_UNLOCK_GIL_WHEN_USED_AS_PARAM
61};
62
63// makes Mesh from SimpleVolume with given settings using Marching Cubes algorithm
64MRVOXELS_API Expected<Mesh> marchingCubes( const SimpleVolume& volume, const MarchingCubesParams& params = {} );
65MRVOXELS_API Expected<TriMesh> marchingCubesAsTriMesh( const SimpleVolume& volume, const MarchingCubesParams& params = {} );
66
67// makes Mesh from SimpleVolumeMinMax with given settings using Marching Cubes algorithm
68MRVOXELS_API Expected<Mesh> marchingCubes( const SimpleVolumeMinMax& volume, const MarchingCubesParams& params = {} );
70
71// makes Mesh from VdbVolume with given settings using Marching Cubes algorithm
72MRVOXELS_API Expected<Mesh> marchingCubes( const VdbVolume& volume, const MarchingCubesParams& params = {} );
73MRVOXELS_API Expected<TriMesh> marchingCubesAsTriMesh( const VdbVolume& volume, const MarchingCubesParams& params = {} );
74
75// makes Mesh from FunctionVolume with given settings using Marching Cubes algorithm
76MRVOXELS_API Expected<Mesh> marchingCubes( const FunctionVolume& volume, const MarchingCubesParams& params = {} );
77MRVOXELS_API Expected<TriMesh> marchingCubesAsTriMesh( const FunctionVolume& volume, const MarchingCubesParams& params = {} );
78
79// makes Mesh from SimpleBinaryVolume with given settings using Marching Cubes algorithm
80MRVOXELS_API Expected<Mesh> marchingCubes( const SimpleBinaryVolume& volume, const MarchingCubesParams& params = {} );
82
91class MarchingCubesByParts
92{
93public:
96 MRVOXELS_API explicit MarchingCubesByParts( const Vector3i & dims, const MarchingCubesParams& params, int layersPerBlock = 0 );
97
98 MRVOXELS_API ~MarchingCubesByParts();
100 MRVOXELS_API MarchingCubesByParts & operator=( MarchingCubesByParts && s ) noexcept;
101
103 MRVOXELS_API int layersPerBlock() const;
104
106 MRVOXELS_API int nextZ() const;
107
109 MRVOXELS_API Expected<void> addPart( const SimpleVolume& part );
110
112 MRVOXELS_API Expected<TriMesh> finalize();
113
114private:
115 struct Impl;
116 std::unique_ptr<Impl> impl_;
117};
118
119} //namespace MR
#define MRVOXELS_API
Definition MRVoxelsFwd.h:14
unsafe MR.TriMesh finalize()
unsafe void addPart(MR.Const_SimpleVolume part)
unsafe MarchingCubesByParts(MR._ByValue_MarchingCubesByParts s)
Definition MRMarchingCubes.h:19
new unsafe ref MR.Vector3f origin
new unsafe ref bool lessInside
new unsafe MR.Std.Function_BoolFuncFromFloat cb
new unsafe MR.Std.Function_VoidFunc freeVolume
new unsafe ref int maxVertices
new unsafe MR.? Vector_MRVoxelId_MRFaceId outVoxelPerFaceMap
new unsafe MR.Std.Function_MRVector3fFuncFromConstMRVector3fRefConstMRVector3fRefFloatFloatFloat positioner
new unsafe ref float iso
Definition MRCameraOrientationPlugin.h:8
MRMESH_API double volume(const MeshTopology &topology, const VertCoords &points, const FaceBitSet *region=nullptr)
MRVOXELS_API Expected< Mesh > marchingCubes(const SimpleVolume &volume, const MarchingCubesParams &params={})
MRVOXELS_API Expected< TriMesh > marchingCubesAsTriMesh(const SimpleVolume &volume, const MarchingCubesParams &params={})