MeshLib C++ Docs
Loading...
Searching...
No Matches
MRVoxelsConversionsByParts.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRVoxelsFwd.h"
4#include "MRMesh/MRExpected.h"
6#include "MRMesh/MRVector3.h"
7#include <optional>
8
9namespace MR
10{
11
19struct MergeVolumePartSettings
20{
22 using PreCutCallback = std::function<void( Mesh& mesh, float leftCutPosition, float rightCutPosition )>;
25 using PostCutCallback = std::function<void( Mesh& )>;
30 using PostMergeCallback = std::function<void( Mesh&, const PartMapping& )>;
35 Vector3f origin = {};
36};
37
59template <typename Volume>
61mergeVolumePart( Mesh& mesh, std::vector<EdgePath>& cutContours, Volume&& volume, float leftCutPosition, float rightCutPosition,
62 const MergeVolumePartSettings& settings = {} );
63
66template <typename Volume>
67using VolumePartBuilder = std::function<Expected<Volume> ( int begin, int end, std::optional<Vector3i>& offset )>;
68
77{
79 size_t maxVolumePartMemoryUsage = 2 << 28; // 256 MiB
81 size_t stripeOverlap = 4;
82};
83
96template <typename Volume>
98volumeToMeshByParts( const VolumePartBuilder<Volume>& builder, const Vector3i& dimensions, const Vector3f& voxelSize,
99 const VolumeToMeshByPartsSettings& settings = {}, const MergeVolumePartSettings& mergeSettings = {} );
100
101}
MR_BIND_IGNORE auto begin(const BitSet &a)
Definition MRMesh/MRBitSet.h:308
MR_BIND_IGNORE auto end(const BitSet &)
Definition MRMesh/MRBitSet.h:310
Definition MRCameraOrientationPlugin.h:8
tl::expected< T, E > Expected
Definition MRExpected.h:25
MRMESH_API double volume(const MeshTopology &topology, const VertCoords &points, const FaceBitSet *region=nullptr)
Expected< void > mergeVolumePart(Mesh &mesh, std::vector< EdgePath > &cutContours, Volume &&volume, float leftCutPosition, float rightCutPosition, const MergeVolumePartSettings &settings={})
Merge one mesh with another generated from a voxel volume part.
std::function< Expected< Volume >(int begin, int end, std::optional< Vector3i > &offset)> VolumePartBuilder
Definition MRVoxelsConversionsByParts.h:67
Expected< Mesh > volumeToMeshByParts(const VolumePartBuilder< Volume > &builder, const Vector3i &dimensions, const Vector3f &voxelSize, const VolumeToMeshByPartsSettings &settings={}, const MergeVolumePartSettings &mergeSettings={})
converts a voxel volume into a mesh without full memory loading
Parameters' structure for MR::mergeVolumePart.
PartMapping mapping
mapping with initialized maps required for the postMerge callback
Definition MRVoxelsConversionsByParts.h:33
PostCutCallback postCut
Definition MRVoxelsConversionsByParts.h:26
Vector3f origin
origin (position of the (0;0;0) voxel) of the voxel volume part, usually specified for SimpleVolume
Definition MRVoxelsConversionsByParts.h:35
std::function< void(Mesh &, const PartMapping &)> PostMergeCallback
Definition MRVoxelsConversionsByParts.h:30
PreCutCallback preCut
Definition MRVoxelsConversionsByParts.h:23
std::function< void(Mesh &mesh, float leftCutPosition, float rightCutPosition)> PreCutCallback
callback to process the generated mesh before the side cutting, e.g. fixing specific generation artif...
Definition MRVoxelsConversionsByParts.h:22
std::function< void(Mesh &)> PostCutCallback
callback to process the generated mesh after the side cutting, e.g. decimating
Definition MRVoxelsConversionsByParts.h:25
PostMergeCallback postMerge
Definition MRVoxelsConversionsByParts.h:31
Definition MRMesh/MRMesh.h:23
mapping among elements of source mesh, from which a part is taken, and target mesh
Definition MRPartMapping.h:10
Parameters' structure for MR::volumeToMeshByParts.
size_t stripeOverlap
overlap in voxels between two parts
Definition MRVoxelsConversionsByParts.h:81
size_t maxVolumePartMemoryUsage
the upper limit of memory amount used to store a voxel volume part
Definition MRVoxelsConversionsByParts.h:79