5#include <MRPch/MREigenCore.h>
19class PointToPlaneAligningTransform
23 MRMESH_API void add(
const Vector3d& p1,
const Vector3d& p2,
const Vector3d& normal2,
double w = 1 );
26 void add(
const Vector3f& p1,
const Vector3f& p2,
const Vector3f& normal2,
float w = 1 ) {
add( Vector3d( p1 ), Vector3d( p2 ), Vector3d( normal2 ), w ); }
32 void clear() { *
this = {}; }
37 [[nodiscard]] AffineXf3d findBestRigidXf()
const {
return calculateAmendment().rigidScaleXf(); }
40 [[nodiscard]] AffineXf3d findBestRigidScaleXf()
const {
return calculateAmendmentWithScale().rigidScaleXf(); }
43 [[nodiscard]] AffineXf3d findBestRigidXfFixedRotationAxis(
const Vector3d & axis )
const {
return calculateFixedAxisAmendment( axis ).rigidScaleXf(); }
46 [[nodiscard]] AffineXf3d findBestRigidXfOrthogonalRotationAxis(
const Vector3d& ort )
const {
return calculateOrthogonalAxisAmendment( ort ).rigidScaleXf(); }
49 [[nodiscard]]
MRMESH_API Vector3d findBestTranslation( Vector3d rotAngles = {},
double scale = 1 )
const;
52 [[nodiscard]]
MRMESH_API RigidScaleXf3d calculateAmendment()
const;
55 [[nodiscard]]
MRMESH_API RigidScaleXf3d calculateAmendmentWithScale()
const;
58 [[nodiscard]]
MRMESH_API RigidScaleXf3d calculateFixedAxisAmendment(
const Vector3d & axis )
const;
61 [[nodiscard]]
MRMESH_API RigidScaleXf3d calculateOrthogonalAxisAmendment(
const Vector3d& ort )
const;
64 Eigen::Matrix<double, 7, 7> sumA_ = Eigen::Matrix<double, 7, 7>::Zero();
65 Eigen::Vector<double, 7> sumB_ = Eigen::Vector<double, 7>::Zero();
66 bool sumAIsSym_ =
true;
#define MRMESH_API
Definition MRMeshFwd.h:80
MRVIEWER_API float scale()
Definition MRCameraOrientationPlugin.h:8