23 MRMESH_API
void init(
const Vector3i& resolution = Vector3i::diagonal( 2 ),
const Box3f& initialBox = Box3f() );
34 MRMESH_API
int getIndex(
const Vector3i& coordOfPointInGrid )
const;
36 MRMESH_API Vector3i
getCoord(
int index )
const;
43 const VertBitSet& validPoints_;
44 std::vector<Vector3f> refPointsGrid_;
46 VertCoords normedCoords_;
49 Vector3f applyToNormedPoint_(
const Vector3f& normedPoint, std::vector<Vector3f>& xPlaneCache, std::vector<Vector3f>& yLineCache, std::vector<Vector3f>& tempPoints )
const;
59 MRMESH_API
FreeFormBestFit(
const Box3d& box,
const Vector3i& resolution = Vector3i::diagonal( 2 ) );
62 MRMESH_API
void addPair(
const Vector3d& src,
const Vector3d& tgt,
double w = 1.0 );
63 void addPair(
const Vector3f& src,
const Vector3f& tgt,
float w = 1.0f ) {
addPair( Vector3d( src ), Vector3d( tgt ),
double( w ) ); }
80 double sumWeight_{ 0.0 };
82 Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> accumA_;
83 Eigen::Matrix<double, Eigen::Dynamic, 3> accumB_;
85 std::vector<int> pascalLineX_;
86 std::vector<int> pascalLineY_;
87 std::vector<int> pascalLineZ_;
89 Vector3d reverseDiagonal_;
91 double stabilizer_{ 0.1 };
102MRMESH_API std::vector<Vector3f>
findBestFreeformDeformation(
const Box3f& box,
const std::vector<Vector3f>& source,
const std::vector<Vector3f>& target,
103 const Vector3i& resolution = Vector3i::diagonal( 2 ),
const AffineXf3f* samplesToBox =
nullptr );
MRMESH_API void addPair(const Vector3d &src, const Vector3d &tgt, double w=1.0)
add pair of source and target point to accumulator
MRMESH_API void setRefGridPointPosition(const Vector3i &coordOfPointInGrid, const Vector3f &newPos)
Updates ref grid point position.
MRMESH_API FreeFormDeformer(VertCoords &coords, const VertBitSet &valid)
Only set mesh ref.
MRMESH_API FreeFormDeformer(Mesh &mesh, const VertBitSet *region=nullptr)
MRMESH_API std::vector< Vector3f > findBestFreeformDeformation(const Box3f &box, const std::vector< Vector3f > &source, const std::vector< Vector3f > &target, const Vector3i &resolution=Vector3i::diagonal(2), const AffineXf3f *samplesToBox=nullptr)
const Vector3i & getResolution() const
Definition MRFreeFormDeformer.h:40
void addPair(const Vector3f &src, const Vector3f &tgt, float w=1.0f)
Definition MRFreeFormDeformer.h:63
MRMESH_API const Vector3f & getRefGridPointPosition(const Vector3i &coordOfPointInGrid) const
Gets ref grid point position.
double getStabilizer() const
Definition MRFreeFormDeformer.h:71
MRMESH_API Vector3i getCoord(int index) const
Get grid coord by index.
void setStabilizer(double stabilizer)
Definition MRFreeFormDeformer.h:70
MRMESH_API int getIndex(const Vector3i &coordOfPointInGrid) const
Get one dimension index by grid coord.
MRMESH_API Vector3f applySinglePoint(const Vector3f &point) const
Apply updated grid to given point.
MRMESH_API std::vector< Vector3f > findBestDeformationReferenceGrid()
finds best grid points positions to align source points to target points
MRMESH_API void init(const Vector3i &resolution=Vector3i::diagonal(2), const Box3f &initialBox=Box3f())
MRMESH_API void addOther(const FreeFormBestFit &other)
adds other instance of FreeFormBestFit if it has same ref grid
void setAllRefGridPositions(const std::vector< Vector3f > &refPoints)
Definition MRFreeFormDeformer.h:39
MRMESH_API void apply() const
const std::vector< Vector3f > & getAllRefGridPositions() const
Definition MRFreeFormDeformer.h:38
MRMESH_API FreeFormBestFit(const Box3d &box, const Vector3i &resolution=Vector3i::diagonal(2))
initialize the class, compute cached values and reserve space for matrices
MRMESH_API std::vector< Vector3f > makeFreeFormOriginGrid(const Box3f &box, const Vector3i &resolution)
Returns positions of grid points in given box with given resolution.
only for bindings generation
Definition MRCameraOrientationPlugin.h:8