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;
99 [[nodiscard]]
float rootMeanSqF()
const {
return ( num <= 0 ) ? FLT_MAX : (float)std::sqrt( sum / num ); }
121 ICPMode mode,
float angleLimit,
float scaleLimit,
const Vector3f & fixedRotationAxis );
131 float p2plAngleLimit = PI_F / 6.0f;
135 float p2plScaleLimit = 2;
140 float cosThreshold = 0.7f;
145 float distThresholdSq = 1.f;
151 float farDistFactor = 3.f;
166 int badIterStopCount = 3;
174 bool mutualClosest =
false;
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 ) {}
228 void samplePoints(
float samplingVoxelSize ) { sampleFltPoints( samplingVoxelSize ); sampleRefPoints( samplingVoxelSize ); }
233 MRMESH_API
void setXfs(
const AffineXf3f& fltXf,
const AffineXf3f& refXf );
281 ICPExitType resultType_{ ICPExitType::NotStarted };
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
size_type size() const noexcept
Definition MRBitSet.h:54
Definition MRMeshOrPoints.h:21
MRMESH_API NumSum getSumSqDistToPoint(const IPointPairs &pairs, std::optional< double > inaccuracy={})
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
size_t getNumSamples() const
returns status info string
Definition MRICP.h:251
Vector3f fixedRotationAxis
Additional parameter for ICPMode::OrthogonalAxis and ICPMode::FixedAxis transformation groups.
Definition MRICP.h:158
virtual size_t size() const =0
MRMESH_API void setCosineLimit(const float cos)
Vector3f srcNorm
normal in source point after transforming in world space
Definition MRICP.h:25
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
MRMESH_API NumSum getSumSqDistToPlane(const IPointPairs &pairs, std::optional< double > inaccuracy={})
const ICPProperties & getParams() const
Definition MRICP.h:246
MRMESH_API 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...
MRMESH_API AffineXf3f calculateTransformation()
IPointPairs(const IPointPairs &)=default
void setParams(const ICPProperties &prop)
tune algorithm params before run calculateTransformation()
Definition MRICP.h:213
MRMESH_API void sampleRefPoints(float samplingVoxelSize)
MRMESH_API void setFltSamples(const VertBitSet &fltSamples)
select pairs with origin samples on floating object
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
MRMESH_API size_t getNumActivePairs(const IPointPairs &pairs)
computes the number of active pairs
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
MRMESH_API void setFloatXf(const AffineXf3f &fltXf)
sets to-world transformation for the floating object
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
MRMESH_API std::string getICPStatusInfo(int iterations, ICPExitType exitType)
returns status info string
MRMESH_API void setRefSamples(const VertBitSet &refSamples)
select pairs with origin samples on reference object
MRMESH_API void sampleFltPoints(float samplingVoxelSize)
Vector3f tgtNorm
normal in the target point after transforming in world space
Definition MRICP.h:31
MRMESH_API void setBadIterCount(const int iter)
float getMeanSqDistToPoint(const IPointPairs &pairs)
computes root-mean-square deviation between points
Definition MRICP.h:111
IPointPairs(IPointPairs &&) noexcept=default
std::vector< PointPair > vec
vector of all point pairs both active and not
Definition MRICP.h:83
MRMESH_API void updatePointPairs()
recompute point pairs after manual change of transformations or parameters
BitSet active
whether corresponding pair from vec must be considered during minimization
Definition MRICP.h:75
MRMESH_API void setXfs(const AffineXf3f &fltXf, const AffineXf3f &refXf)
sets to-world transformations both for floating and reference objects
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
std::array< Vector3f, 3 > MR_BIND_IGNORE
Definition MRMeshBuilderTypes.h:13
ICPExitType
types of exit conditions in calculation
Definition MRICPEnums.h:32
MRMESH_API ICP(const MeshOrPointsXf &flt, const MeshOrPointsXf &ref, const VertBitSet &fltSamples={}, const VertBitSet &refSamples={})
float weight
weight of the pair (to prioritize over other pairs)
Definition MRICP.h:37
MRMESH_API float getMeanSqDistToPlane() const
computes root-mean-square deviation from points to target planes
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
MRMESH_API 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)
MRMESH_API float getMeanSqDistToPoint() const
computes root-mean-square deviation between points
MRMESH_API ICP(const MeshOrPointsXf &flt, const MeshOrPointsXf &ref, float samplingVoxelSize)
MRMESH_API std::string getStatusInfo() const
bool tgtOnBd
true if if the closest point on target is located on the boundary (only for meshes)
Definition MRICP.h:56
MRMESH_API size_t deactivateFarPairs(IPointPairs &pairs, float maxDistSq)
reset active bit if pair distance is further than maxDistSq
MRMESH_API ICP(const MeshOrPoints &flt, const MeshOrPoints &ref, const AffineXf3f &fltXf, const AffineXf3f &refXf, float samplingVoxelSize)
Definition MRICP.h:208
virtual ICPPairData & operator[](size_t idx) override
Definition MRICP.h:81
MRMESH_API AffineXf3f autoSelectFloatXf()
MRMESH_API void setDistanceLimit(const float dist)
Vector3f srcPoint
coordinates of the source point after transforming in world space
Definition MRICP.h:22
MRMESH_API void setFarDistFactor(const float factor)
int num
Definition MRICP.h:94
float distSq
squared distance between source and target points
Definition MRICP.h:34
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