MeshLib
 
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 <cassert>
6
7namespace MR
8{
9
11{
13 int iterations = 1;
14
16 const VertBitSet *region = nullptr;
17
19 float force = 0.5f;
20
22 bool limitNearInitial = false;
23
25 float maxInitialDist = 0;
26};
27
29{
30 Planar,
31 Quadric,
32};
33
36template <typename V>
37[[nodiscard]] inline V getLimitedPos( const V & pos, const V & guidePos, typename VectorTraits<V>::BaseType maxGuideDistSq )
38{
39 assert( maxGuideDistSq > 0 );
40 const auto d = pos - guidePos;
41 float distSq = sqr( d );
42 if ( distSq <= maxGuideDistSq )
43 return pos;
44 return guidePos + std::sqrt( maxGuideDistSq / distSq ) * d;
45}
46
47} // namespace MR
Definition MRDotNet/MRBitSet.h:39
Definition MRCameraOrientationPlugin.h:7
constexpr T sqr(T x) noexcept
Definition MRMesh/MRMeshFwd.h:613
RelaxApproxType
Definition MRRelaxParams.h:29
V getLimitedPos(const V &pos, const V &guidePos, typename VectorTraits< V >::BaseType maxGuideDistSq)
Definition MRRelaxParams.h:37
Definition MRRelaxParams.h:11
float force
speed of relaxing, typical values (0.0, 0.5]
Definition MRRelaxParams.h:19
const VertBitSet * region
region to relax
Definition MRRelaxParams.h:16
float maxInitialDist
maximum distance between a point and its position before relaxation, ignored if limitNearInitial = fa...
Definition MRRelaxParams.h:25
bool limitNearInitial
if true then maximal displacement of each point during denoising will be limited
Definition MRRelaxParams.h:22
int iterations
number of iterations
Definition MRRelaxParams.h:13
T BaseType
Definition MRMesh/MRVectorTraits.h:17