MeshLib C++ Docs
Loading...
Searching...
No Matches
MRRelaxParams.h
Go to the documentation of this file.
1#pragma once
2
3#include "MRVector3.h"
4#include "MRVectorTraits.h"
5#include "MRPch/MRBindingMacros.h"
6#include <cassert>
7
8namespace MR
9{
12
13
15{
17 int iterations = 1;
18
20 const VertBitSet *region = nullptr;
21
23 float force = 0.5f;
24
26 bool limitNearInitial = false;
27
29 float maxInitialDist = 0;
30
36};
37
39{
40 Planar,
41 Quadric,
42};
43
46template <typename V>
47[[nodiscard]] inline V getLimitedPos( const V & pos, const V & guidePos, typename VectorTraits<V>::BaseType maxGuideDistSq )
48{
49 assert( maxGuideDistSq > 0 );
50 const auto d = pos - guidePos;
51 float distSq = sqr( d );
52 if ( distSq <= maxGuideDistSq )
53 return pos;
54 return guidePos + std::sqrt( maxGuideDistSq / distSq ) * d;
55}
56
57}
MR_BIND_IGNORE int _padding
Definition MRRelaxParams.h:35
RelaxApproxType
Definition MRRelaxParams.h:39
float force
speed of relaxing, typical values (0.0, 0.5]
Definition MRRelaxParams.h:23
V getLimitedPos(const V &pos, const V &guidePos, typename VectorTraits< V >::BaseType maxGuideDistSq)
Definition MRRelaxParams.h:47
const VertBitSet * region
region to relax
Definition MRRelaxParams.h:20
std::array< Vector3f, 3 > MR_BIND_IGNORE
Definition MRMeshBuilderTypes.h:13
T BaseType
The base template handles scalars (or just non-vectors).
Definition MRMesh/MRVectorTraits.h:21
float maxInitialDist
maximum distance between a point and its position before relaxation, ignored if limitNearInitial = fa...
Definition MRRelaxParams.h:29
bool limitNearInitial
if true then maximal displacement of each point during denoising will be limited
Definition MRRelaxParams.h:26
int iterations
number of iterations
Definition MRRelaxParams.h:17
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRRelaxParams.h:15