3#include "MRPch/MRBindingMacros.h"
74 virtual
size_t size() const = 0;
82 virtual size_t size()
const override {
return vec.size(); }
83 std::vector<PointPair>
vec;
121 ICPMode mode,
float angleLimit,
float scaleLimit,
const Vector3f & fixedRotationAxis );
183 float cosThreshold,
float distThresholdSq,
bool mutualClosest );
199 const VertBitSet& fltSamples = {},
const VertBitSet& refSamples = {} ) : ICP( { flt, fltXf }, { ref, refXf }, fltSamples, refSamples ) {}
209 float samplingVoxelSize ) :
ICP( { flt, fltXf }, { ref, refXf }, samplingVoxelSize ) {}
284 void deactivatefarDistPairs_();
290 void calcGen_(
float (
ICP::*dist)()
const,
bool (
ICP::*iter)() );
293 void calcCombined_();
constexpr A operator+(A a)
Operators.
Definition MRImGuiVectorOperators.h:97
#define MRMESH_API
Definition MRMeshFwd.h:80
size_type size() const noexcept
Definition MRBitSet.h:99
Definition MRMeshOrPoints.h:21
void setRefSamples(const VertBitSet &refSamples)
select pairs with origin samples on reference object
friend bool operator==(const ICPPairData &, const ICPPairData &)=default
float normalsAngleCos
cosine between normals in source and target points
Definition MRICP.h:53
VertId srcVertId
id of the source point
Definition MRICP.h:46
float cosThreshold
Definition MRICP.h:140
size_t getNumSamples() const
returns status info string
Definition MRICP.h:251
struct
Definition MRMeshFwd.h:204
ICP(const MeshOrPointsXf &flt, const MeshOrPointsXf &ref, const VertBitSet &fltSamples={}, const VertBitSet &refSamples={})
Vector3f fixedRotationAxis
Additional parameter for ICPMode::OrthogonalAxis and ICPMode::FixedAxis transformation groups.
Definition MRICP.h:158
virtual size_t size() const =0
bool mutualClosest
[distance]
Definition MRICP.h:174
NumSum getSumSqDistToPoint(const IPointPairs &pairs, std::optional< double > inaccuracy={})
int badIterStopCount
Definition MRICP.h:166
Vector3f srcNorm
normal in source point after transforming in world space
Definition MRICP.h:25
size_t getNumActivePairs(const IPointPairs &pairs)
computes the number of active pairs
float getMeanSqDistToPlane(const IPointPairs &pairs)
computes root-mean-square deviation from points to target planes
Definition MRICP.h:114
ICPMode
The group of transformations, each with its own degrees of freedom.
Definition MRICPEnums.h:23
const ICPProperties & getParams() const
Definition MRICP.h:246
IPointPairs(const IPointPairs &)=default
void setParams(const ICPProperties &prop)
tune algorithm params before run calculateTransformation()
Definition MRICP.h:213
float distThresholdSq
in [-1,1]
Definition MRICP.h:145
std::string getStatusInfo() const
int iterLimit
Definition MRICP.h:162
void updatePointPairs(PointPairs &pairs, const MeshOrPointsXf &src, const MeshOrPointsXf &tgt, float cosThreshold, float distThresholdSq, bool mutualClosest)
in each pair updates the target data and performs basic filtering (activation)
void setFloatXf(const AffineXf3f &fltXf)
sets to-world transformation for the floating object
void setCosineLimit(const float cos)
void samplePoints(float samplingVoxelSize)
select pairs with origin samples on both objects
Definition MRICP.h:228
virtual size_t size() const override
Definition MRICP.h:82
Vector3f tgtPoint
coordinates of the closest point on target after transforming in world space
Definition MRICP.h:28
const PointPairs & getRef2FltPairs() const
returns current pairs formed from samples on reference object and projections on floating object
Definition MRICP.h:266
friend bool operator==(const PointPair &, const PointPair &)=default
const PointPairs & getFlt2RefPairs() const
returns current pairs formed from samples on floating object and projections on reference object
Definition MRICP.h:263
size_t getNumActivePairs() const
computes the number of active point pairs
Definition MRICP.h:254
size_t getNumSamples(const IPointPairs &pairs)
returns the number of samples able to form pairs
Definition MRICP.h:87
float rootMeanSqF() const
Definition MRICP.h:99
VertId tgtCloseVert
Definition MRICP.h:50
void setFarDistFactor(const float factor)
ICPMode icpMode
dimensionless
Definition MRICP.h:155
ICP(const MeshOrPoints &flt, const MeshOrPoints &ref, const AffineXf3f &fltXf, const AffineXf3f &refXf, float samplingVoxelSize)
Definition MRICP.h:208
void sampleFltPoints(float samplingVoxelSize)
Vector3f tgtNorm
normal in the target point after transforming in world space
Definition MRICP.h:31
void setBadIterCount(const int iter)
float getMeanSqDistToPoint(const IPointPairs &pairs)
computes root-mean-square deviation between points
Definition MRICP.h:111
std::string getICPStatusInfo(int iterations, ICPExitType exitType)
returns status info string
size_t deactivateFarPairs(IPointPairs &pairs, float maxDistSq)
reset active bit if pair distance is further than maxDistSq
IPointPairs(IPointPairs &&) noexcept=default
float farDistFactor
[distance^2]
Definition MRICP.h:151
std::vector< PointPair > vec
vector of all point pairs both active and not
Definition MRICP.h:83
void setFltSamples(const VertBitSet &fltSamples)
select pairs with origin samples on floating object
ICPMethod method
The method how to update transformation from point pairs, see description of each option in ICPMethod...
Definition MRICP.h:127
BitSet active
whether corresponding pair from vec must be considered during minimization
Definition MRICP.h:75
AffineXf3d getAligningXf(const PointToPlaneAligningTransform &p2pl, ICPMode mode, float angleLimit, float scaleLimit, const Vector3f &fixedRotationAxis)
given prepared (p2pl) object, finds the best transformation from it of given type with given limitati...
virtual const ICPPairData & operator[](size_t idx) const override
Definition MRICP.h:80
IPointPairs & operator=(const IPointPairs &)=default
MR_BIND_IGNORE void recomputeBitSet(float fltSamplingVoxelSize)
Definition MRICP.h:230
ICP(const MeshOrPoints &flt, const MeshOrPoints &ref, const AffineXf3f &fltXf, const AffineXf3f &refXf, const VertBitSet &fltSamples={}, const VertBitSet &refSamples={})
Definition MRICP.h:198
void setXfs(const AffineXf3f &fltXf, const AffineXf3f &refXf)
sets to-world transformations both for floating and reference objects
std::array< Vector3f, 3 > MR_BIND_IGNORE
Definition MRMeshBuilderTypes.h:13
ICPExitType
types of exit conditions in calculation
Definition MRICPEnums.h:32
float weight
weight of the pair (to prioritize over other pairs)
Definition MRICP.h:37
NumSum getSumSqDistToPlane(const IPointPairs &pairs, std::optional< double > inaccuracy={})
ICP(const MeshOrPointsXf &flt, const MeshOrPointsXf &ref, float samplingVoxelSize)
void setDistanceLimit(const float dist)
double sum
Definition MRICP.h:95
IPointPairs()=default
required to declare explicitly to avoid warnings
ICPMethod
The method how to update transformation from point pairs.
Definition MRICPEnums.h:9
float getMeanSqDistToPoint() const
computes root-mean-square deviation between points
float getMeanSqDistToPlane() const
computes root-mean-square deviation from points to target planes
void sampleRefPoints(float samplingVoxelSize)
AffineXf3f autoSelectFloatXf()
bool tgtOnBd
true if if the closest point on target is located on the boundary (only for meshes)
Definition MRICP.h:56
float p2plAngleLimit
Definition MRICP.h:131
virtual ICPPairData & operator[](size_t idx) override
Definition MRICP.h:81
Vector3f srcPoint
coordinates of the source point after transforming in world space
Definition MRICP.h:22
AffineXf3f calculateTransformation()
float p2plScaleLimit
[radians]
Definition MRICP.h:135
void updatePointPairs()
recompute point pairs after manual change of transformations or parameters
int num
Definition MRICP.h:94
float distSq
squared distance between source and target points
Definition MRICP.h:34
float exitVal
Definition MRICP.h:170
@ AnyRigidXf
rigid body transformation (6 degrees of freedom)
Definition MRICPEnums.h:25
@ factor
Definition MRUnitInfo.h:51
@ NotStarted
Definition MRICPEnums.h:33
@ PointToPlane
Definition MRICPEnums.h:13
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
parameters of ICP algorithm
Definition MRICP.h:125
Simple interface for pairs holder.
Definition MRICP.h:63
an object and its transformation to global space with other objects
Definition MRMeshOrPoints.h:109
Stores a pair of points: one samples on the source and the closest to it on the target.
Definition MRICP.h:44