MeshLib
 
Loading...
Searching...
No Matches
MRMarchingCubes.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRMeshFwd.h"
4#include "MRAffineXf3.h"
5#include "MRVoxelsVolume.h"
8#include "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
19{
22
25
27 float iso{ 0.0f };
28
30 bool lessInside{ false };
31
34
39
41 int maxVertices = INT_MAX;
42
55
57 std::function<void()> freeVolume;
58};
59
60// makes Mesh from SimpleVolume with given settings using Marching Cubes algorithm
61MRMESH_API Expected<Mesh> marchingCubes( const SimpleVolume& volume, const MarchingCubesParams& params = {} );
62MRMESH_API Expected<TriMesh> marchingCubesAsTriMesh( const SimpleVolume& volume, const MarchingCubesParams& params = {} );
63
64#ifndef MRMESH_NO_OPENVDB
65// makes Mesh from VdbVolume with given settings using Marching Cubes algorithm
66MRMESH_API Expected<Mesh> marchingCubes( const VdbVolume& volume, const MarchingCubesParams& params = {} );
67MRMESH_API Expected<TriMesh> marchingCubesAsTriMesh( const VdbVolume& volume, const MarchingCubesParams& params = {} );
68#endif
69
70// makes Mesh from FunctionVolume with given settings using Marching Cubes algorithm
71MRMESH_API Expected<Mesh> marchingCubes( const FunctionVolume& volume, const MarchingCubesParams& params = {} );
72MRMESH_API Expected<TriMesh> marchingCubesAsTriMesh( const FunctionVolume& volume, const MarchingCubesParams& params = {} );
73
74} //namespace MR
#define MRMESH_API
Definition MRMesh/MRMeshFwd.h:46
std::vector<T>-like container that requires specific indexing type,
Definition MRMesh/MRVector.h:19
represents a 3-dimentional float-typed vector
Definition MRDotNet/MRVector3.h:8
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:589
Definition MRCameraOrientationPlugin.h:7
MRMESH_API Expected< TriMesh > marchingCubesAsTriMesh(const SimpleVolume &volume, const MarchingCubesParams &params={})
MRMESH_API Expected< Mesh > marchingCubes(const SimpleVolume &volume, const MarchingCubesParams &params={})
Vector3< float > Vector3f
Definition MRDotNet/MRMeshFwd.h:8
tl::expected< T, E > Expected
Definition MRExpected.h:49
std::function< Vector3f(const Vector3f &, const Vector3f &, float, float, float)> VoxelPointPositioner
Definition MRMarchingCubes.h:16
Definition MRMarchingCubes.h:19
std::function< void()> freeVolume
this optional function is called when volume is no longer needed to deallocate it and reduce peak mem...
Definition MRMarchingCubes.h:57
Vector3f origin
origin point of voxels box in 3D space with output mesh
Definition MRMarchingCubes.h:21
int maxVertices
if the mesh exceeds this number of vertices, an error returns
Definition MRMarchingCubes.h:41
enum MR::MarchingCubesParams::CachingMode cachingMode
CachingMode
Definition MRMarchingCubes.h:46
@ Normal
allocates 2 full slices per parallel thread
VoxelPointPositioner positioner
Definition MRMarchingCubes.h:38
ProgressCallback cb
progress callback
Definition MRMarchingCubes.h:24
bool lessInside
should be false for dense volumes, and true for distance volume
Definition MRMarchingCubes.h:30
float iso
target iso-value of the surface to be extracted from volume
Definition MRMarchingCubes.h:27
Vector< VoxelId, FaceId > * outVoxelPerFaceMap
optional output map FaceId->VoxelId
Definition MRMarchingCubes.h:33