Removed dependencies from the deprecated linalg.h

This commit is contained in:
Paolo Cignoni cignoni 2012-11-27 12:21:09 +00:00
parent b6b5b4a4c9
commit 92964e574c
2 changed files with 30 additions and 21 deletions

View File

@ -26,7 +26,8 @@
#include <vcg/space/point2.h>
#include <vcg/space/point3.h>
#include <vcg/math/lin_algebra.h>
#include <eigenlib/Eigen/Dense>
#include <eigenlib/Eigen/Eigenvalues>
namespace vcg
{
@ -159,17 +160,30 @@ protected:
{
if (m_kdirAreDirty)
{
MatrixType copy = m_w;
int mrot = 0;
VectorType evals;
MatrixType evecs;
Jacobi(copy, evals, evecs, mrot);
VectorType evalsAbs(fabs(evals[0]),fabs(evals[0]),fabs(evals[0]));
SortEigenvaluesAndEigenvectors(evals,evecs,true);
m_k1 = evals[0];
m_k2 = evals[1];
m_k1dir = evecs[0];
m_k2dir = evecs[1];
Eigen::Matrix<Scalar,3,3> copy;
m_w.ToEigenMatrix(copy);
// MatrixType copy = m_w;
// int mrot = 0;
// VectorType evals;
// MatrixType evecs;
Eigen::SelfAdjointEigenSolver<Eigen::Matrix3f> eig(copy);
Eigen::Vector3f eval = eig.eigenvalues();
Eigen::Matrix3f evec = eig.eigenvectors();
eval = eval.cwiseAbs();
int ind0,ind1,ind2;
eval.minCoeff(&ind0);
ind1=(ind0+1)%3;
ind2=(ind0+2)%3;
if(eval[ind1]>eval[ind2]) std::swap(ind1,ind2);
// Jacobi(copy, evals, evecs, mrot);
// VectorType evalsAbs(fabs(evals[0]),fabs(evals[0]),fabs(evals[0]));
// SortEigenvaluesAndEigenvectors(evals,evecs,true);
m_k1 = eval[ind1];
m_k2 = eval[ind2];
m_k1dir.FromEigenVector(evec.col(ind1));
m_k2dir.FromEigenVector(evec.col(ind2));
m_kdirAreDirty = false;
}
}

View File

@ -467,8 +467,8 @@ bool MlsPlugin::applyFilter(QAction* filter, MeshDocument& md, RichParameterSet&
{
mesh->updateDataMask(MeshModel::MM_FACEFACETOPO);
vcg::tri::UpdateNormals<CMeshO>::PerFace(mesh->cm);
vcg::tri::UpdateNormals<CMeshO>::NormalizeFace(mesh->cm);
vcg::tri::UpdateNormal<CMeshO>::PerFace(mesh->cm);
vcg::tri::UpdateNormal<CMeshO>::NormalizePerFace(mesh->cm);
//vcg::RefineE<CMeshO,vcg::MidPoint<CMeshO> >(m.cm, vcg::MidPoint<CMeshO>(), edgePred, false, cb);
vcg::tri::RefineOddEvenE<CMeshO, tri::OddPointLoop<CMeshO>, tri::EvenPointLoop<CMeshO> >
(mesh->cm, tri::OddPointLoop<CMeshO>(mesh->cm), tri::EvenPointLoop<CMeshO>(), edgePred, selectionOnly, cb);
@ -553,7 +553,7 @@ bool MlsPlugin::applyFilter(QAction* filter, MeshDocument& md, RichParameterSet&
vcg::Histogramf H;
vcg::tri::Stat<CMeshO>::ComputePerVertexQualityHistogram(mesh->cm,H);
vcg::tri::UpdateColor<CMeshO>::VertexQualityRamp(mesh->cm,H.Percentile(0.01f),H.Percentile(0.99f));
vcg::tri::UpdateColor<CMeshO>::PerVertexQualityRamp(mesh->cm,H.Percentile(0.01f),H.Percentile(0.99f));
}
// else if (id & _AFRONT_)
// {
@ -607,12 +607,7 @@ bool MlsPlugin::applyFilter(QAction* filter, MeshDocument& md, RichParameterSet&
}
if (mesh)
{
cb(99, "Update face normals...");
vcg::tri::UpdateNormals<CMeshO>::PerFace(mesh->cm);
cb(100, "Update box...");
vcg::tri::UpdateBounding<CMeshO>::Box(mesh->cm);
}
mesh->UpdateBoxAndNormals();
} // end MLS based stuff