13#include "cncFormulaEigen.h"
14#include "weightFunc.h"
15#include "weightKernel.h"
29 template <
class DataPo
int>
33 using Scalar =
typename DataPoint::Scalar;
34 using VectorType =
typename DataPoint::VectorType;
35 using MatrixType =
typename DataPoint::MatrixType;
38 std::array<VectorType, 3> m_points;
39 std::array<VectorType, 3> m_normals;
48 Triangle(
const std::array<VectorType, 3>& points,
const std::array<VectorType, 3>&
normals)
59 PONCA_MULTIARCH [[
nodiscard]] VectorType&
getPos(
const int index) {
return m_points[index]; }
63 return (m_points[0] ==
other.m_points[0]) && (m_points[1] ==
other.m_points[1]) &&
64 (m_points[2] ==
other.m_points[2]);
67 PONCA_MULTIARCH [[
nodiscard]]
bool operator!=(
const Triangle&
other)
const {
return !((*this) ==
other); }
69#define DEFINE_CNC_FUNC(CNC_FUNC, RETURN_TYPE) \
70 template <bool differentOrder = false> \
71 inline RETURN_TYPE CNC_FUNC() \
73 return CNCEigen<DataPoint>::CNC_FUNC(m_points[0], m_points[2 - differentOrder], m_points[1 + differentOrder], \
74 m_normals[0], m_normals[2 - differentOrder], \
75 m_normals[1 + differentOrder]); \
78 DEFINE_CNC_FUNC(mu0InterpolatedU, Scalar)
79 DEFINE_CNC_FUNC(mu1InterpolatedU, Scalar)
80 DEFINE_CNC_FUNC(mu2InterpolatedU, Scalar)
81 DEFINE_CNC_FUNC(muXYInterpolatedU, MatrixType)
92 IndependentGeneration,
105 template <
class P, TriangleGenerationMethod _method = UniformGeneration>
111 PROVIDES_PRINCIPAL_CURVATURES
116 using MatrixType =
typename DataPoint::MatrixType;
118 using VectorType =
typename DataPoint::VectorType;
119 using DenseVector = Eigen::VectorXd;
120 using DenseMatrix = Eigen::MatrixXd;
129 std::vector<internal::Triangle<DataPoint>> m_triangles;
154 PONCA_FITTING_DECLARE_FINALIZE
157 PONCA_MULTIARCH
inline void init()
174 template <
typename Po
intContainer>
182 template <
typename IndexRange,
typename Po
intContainer>
192 PONCA_FITTING_APIDOC_SETWFUNC
209 (m_T11 ==
other.m_T11) && (m_T12 ==
other.m_T12) && (m_T13 ==
other.m_T13) &&
210 (m_T22 ==
other.m_T22) && (m_T23 ==
other.m_T23) && (m_T33 ==
other.m_T33);
217 return !(
this == &
other);
222 const CNC&
other,
const Scalar& epsilon = Eigen::NumTraits<Scalar>::dummy_precision())
const
224 PONCA_MULTIARCH_STD_MATH(
abs);
228 (std::abs(
kmin() -
other.kmin()) < epsilon) && (std::abs(
kmax() -
other.kmax()) < epsilon);
Aggregator class used to declare specialized structures using CRTP.
typename P::Scalar Scalar
Scalar type used for computation, as defined from template parameter P
Corrected Normal Current Fit type.
void setNeighborFilter(const NeighborFilter &_nFilter)
Init the WeightFunc, without changing the other internal states.
void init()
Set the scalar field values to 0 and reset the isNormalized() status.
size_t getNumTriangles() const
Get the number of triangles that were generated with the compute method.
bool operator==(const CNC &other) const
Comparison operator.
bool isApprox(const CNC &other, const Scalar &epsilon=Eigen::NumTraits< Scalar >::dummy_precision()) const
Approximate operator.
Scalar GaussianCurvature() const
Returns an estimate of the Gaussian curvature.
VectorType kmaxDirection() const
Returns an estimate of the maximal principal curvature direction.
FIT_RESULT m_eCurrentState
Represent the current state of the fit (finalize function update the state)
Scalar kmax() const
Returns an estimate of the maximal principal curvature value.
bool operator!=(const CNC &other) const
Comparison operator, convenience function.
bool isStable() const
Is the fitted primitive ready to use (finalize has been called and the result is stable)
Scalar kMean() const
Returns an estimate of the mean curvature.
std::vector< internal::Triangle< DataPoint > > & getTriangles()
Returns the triangles.
FIT_RESULT compute(const PointContainer &points)
Compute function for STL-like containers.
FIT_RESULT computeWithIds(const IndexRange &ids, const PointContainer &points)
Compute function that iterates over a subset of sampled points from an STL-Like container.
VectorType kminDirection() const
Returns an estimate of the minimal principal curvature direction.
Scalar kmin() const
Returns an estimate of the minimal principal curvature value.
This Source Code Form is subject to the terms of the Mozilla Public License, v.
TriangleGenerationMethod
\breif Generation method of the triangles for the Corrected Normal Current formula
FIT_RESULT
Enum corresponding to the state of a fitting method (and what the finalize function returns)
@ UNDEFINED
The fitting is undefined, you can't use it for valid results.
@ STABLE
The fitting is stable and ready to use.
ComputeObject is a virtual object that represents an algorithm which can be used with the compute fun...
Stores the three points and normals of the triangles and provides access to Corrected Normal Current ...
VectorType & getPos(const int index)
Get the position of the point at the given index.