3#include "MRVoxelsFwd.h"
110template <
typename VolumeType = VdbVolume>
112 Mesh& mesh,
const AffineXf3f& meshXf,
113 const VolumeType&
volume,
const AffineXf3f& volumeXf,
115 ProgressCallback callback = {}
119 const VdbVolume&
volume,
const AffineXf3f& volumeXf,
121 ProgressCallback callback );
123 const SimpleVolumeMinMax&
volume,
const AffineXf3f& volumeXf,
125 ProgressCallback callback );
127 const FunctionVolume&
volume,
const AffineXf3f& volumeXf,
129 ProgressCallback callback );
135template <
typename MeshType,
typename VolumeType>
139 MRVOXELS_API
MeshOnVoxelsT( MeshType& mesh,
const AffineXf3f& meshXf,
const VolumeType&
volume,
const AffineXf3f& volumeXf );
143 MRVOXELS_API MeshType&
mesh()
const;
145 MRVOXELS_API
const VolumeType&
volume()
const;
157 MRVOXELS_API AffineXf3f
xf()
const;
159 MRVOXELS_API Vector3f
xf(
const Vector3f& pt )
const;
161 MRVOXELS_API AffineXf3f
xfInv()
const;
163 MRVOXELS_API Vector3f
xfInv(
const Vector3f &pt )
const;
167 MRVOXELS_API Vector3f
point( VertId v )
const;
170 MRVOXELS_API
float getValue(
const Vector3f& pos )
const;
184 MRVOXELS_API
void getPoints( std::vector<Vector3f>& result,
const Vector3f& pos,
const Vector3f& offset )
const;
187 MRVOXELS_API
void getValues( std::vector<float>& result,
const Vector3f& pos,
const Vector3f& offset )
const;
190 MRVOXELS_API
static void getDerivatives( std::vector<float>& result,
const std::vector<float>& values );
197 for (
auto it =
begin; it !=
end; ++it )
202 template <
size_t degree>
206 for (
size_t i = 0; i < values.size(); ++i )
207 bestFit.
addPoint( pseudoIndex(
int( i ),
int( values.size() ) ), values[i] );
216 const VolumeType& volume_;
220 AffineXf3f xf_, xfInv_;
accumulates a number of (x,y) points to find the best-least-squares parabola approximating them
Definition MRBestFitParabola.h:15
Definition MRBestFitPolynomial.h:98
Definition MRMoveMeshToVoxelMaxDeriv.h:137
MRVOXELS_API MeshType & mesh() const
Access to base data.
MRVOXELS_API int numVerts() const
Cached number of valid vertices.
MRVOXELS_API MeshOnVoxelsT(const MeshOnVoxelsT &other)
MRVOXELS_API Vector3f point(VertId v) const
Vertex position.
MRVOXELS_API float voxelSize() const
Voxel size as scalar.
static MRVOXELS_API float pseudoIndex(float index, int count)
MRVOXELS_API void getValues(std::vector< float > &result, const Vector3f &pos, const Vector3f &offset) const
Get volume values for a row of points.
MRVOXELS_API float getValue(const Vector3f &pos) const
Volume value.
static MRVOXELS_API void getDerivatives(std::vector< float > &result, const std::vector< float > &values)
Get derivatives from result of getValues
MRVOXELS_API Vector3f xfInv(const Vector3f &pt) const
MRVOXELS_API Vector3f getOffsetVector(VertId v) const
Get offset vector (mesh normal for a vertex with voxelSize length)
MRVOXELS_API Vector3f xf(const Vector3f &pt) const
static Polynomialf< degree > getBestPolynomial(const std::vector< float > &values)
Definition MRMoveMeshToVoxelMaxDeriv.h:203
MRVOXELS_API const VolumeType & volume() const
static MRVOXELS_API float pseudoIndex(int index, int count)
static Parabolaf getBestParabola(auto begin, auto end)
Get best fit parabola in pseudo-index space for a zero-centered array.
Definition MRMoveMeshToVoxelMaxDeriv.h:193
MRVOXELS_API void getPoints(std::vector< Vector3f > &result, const Vector3f &pos, const Vector3f &offset) const
Get row of points with offset stride.
MRVOXELS_API MeshOnVoxelsT(MeshType &mesh, const AffineXf3f &meshXf, const VolumeType &volume, const AffineXf3f &volumeXf)
static MRVOXELS_API float indexFromPseudoIndex(float pseudoIndex, int count)
MRVOXELS_API AffineXf3f xfInv() const
MRVOXELS_API AffineXf3f xf() const
static MRVOXELS_API PolynomialWrapperf getBestPolynomial(const std::vector< float > &values, size_t degree)
helper class for generalized voxel volume data access
Definition MRVoxelsVolumeAccess.h:17
Definition MRVolumeInterpolation.h:21
MR_BIND_IGNORE_PY auto end(const BitSet &)
Definition MRBitSet.h:397
MR_BIND_IGNORE_PY auto begin(const BitSet &a)
Definition MRBitSet.h:395
MRMESH_API void addPoint(T x, T y)
ImVec2 size(const ViewportRectangle &rect)
Definition MRViewport.h:32
Parabola< T > getBestParabola(T tol=std::numeric_limits< T >::epsilon()) const
computes the best approximating parabola from the accumulated points;
Definition MRBestFitParabola.h:48
tl::expected< T, E > Expected
Definition MRExpected.h:31
MRMESH_API double volume(const MeshTopology &topology, const VertCoords &points, const FaceBitSet *region=nullptr)
void addPoint(T x, T y)
accumulates one more point for parabola fitting
Definition MRBestFitParabola.h:32
MRMESH_API Polynomial< T, degree > getBestPolynomial() const
@ other
Angle, normally float. Measure in radians.
MRVOXELS_API Expected< VertBitSet > moveMeshToVoxelMaxDeriv(Mesh &mesh, const AffineXf3f &meshXf, const VolumeType &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback={})
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
template MRVOXELS_API Expected< VertBitSet > moveMeshToVoxelMaxDeriv< SimpleVolumeMinMax >(Mesh &mesh, const AffineXf3f &meshXf, const SimpleVolumeMinMax &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback)
template MRVOXELS_API Expected< VertBitSet > moveMeshToVoxelMaxDeriv< VdbVolume >(Mesh &mesh, const AffineXf3f &meshXf, const VdbVolume &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback)
template MRVOXELS_API Expected< VertBitSet > moveMeshToVoxelMaxDeriv< FunctionVolume >(Mesh &mesh, const AffineXf3f &meshXf, const FunctionVolume &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback)
Definition MRMoveMeshToVoxelMaxDeriv.h:82
float intermediateSmoothForce
force of the smoothing (relaxation) of vector field of shifts on each iteration
Definition MRMoveMeshToVoxelMaxDeriv.h:99
float preparationSmoothForce
force of initial smoothing of vertices, before applying the algorithm
Definition MRMoveMeshToVoxelMaxDeriv.h:102
float outlierThreshold
Definition MRMoveMeshToVoxelMaxDeriv.h:96
int iters
number of iterations. Each iteration moves vertex only slightly and smooths the vector field of shift...
Definition MRMoveMeshToVoxelMaxDeriv.h:84
int samplePoints
Definition MRMoveMeshToVoxelMaxDeriv.h:88
int degree
degree of the polynomial used to fit sampled points. Must be in range [3; 6]
Definition MRMoveMeshToVoxelMaxDeriv.h:91
This is a unifying interface for a polynomial of some degree, known only in runtime.
Definition MRBestFitPolynomial.h:77
Definition MRBestFitPolynomial.h:35