refactoring to remove quality
This commit is contained in:
parent
d03a5a97d2
commit
eb2b5e7fa5
|
@ -39,7 +39,9 @@ class MeshToMatrix
|
||||||
// define types
|
// define types
|
||||||
|
|
||||||
typedef typename MeshType::FaceType FaceType;
|
typedef typename MeshType::FaceType FaceType;
|
||||||
|
typedef typename MeshType::FaceIterator FaceIterator;
|
||||||
typedef typename MeshType::VertexType VertexType;
|
typedef typename MeshType::VertexType VertexType;
|
||||||
|
typedef typename MeshType::VertexIterator VertexIterator;
|
||||||
typedef typename MeshType::CoordType CoordType;
|
typedef typename MeshType::CoordType CoordType;
|
||||||
typedef typename MeshType::ScalarType ScalarType;
|
typedef typename MeshType::ScalarType ScalarType;
|
||||||
typedef typename Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic> MatrixXm;
|
typedef typename Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic> MatrixXm;
|
||||||
|
@ -218,27 +220,37 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void MassMatrixEntry(MeshType &mesh,
|
static void MassMatrixEntry(MeshType &m,
|
||||||
std::vector<std::pair<int,int> > &index,
|
std::vector<std::pair<int,int> > &index,
|
||||||
std::vector<ScalarType> &entry)
|
std::vector<ScalarType> &entry)
|
||||||
{
|
{
|
||||||
//calculate area
|
tri::RequireCompactness(m);
|
||||||
UpdateQuality<MeshType>::FaceArea(mesh);
|
|
||||||
//then distribute per vertex
|
|
||||||
UpdateQuality<MeshType>::VertexFromFace(mesh);
|
|
||||||
|
|
||||||
std::pair<float,float> minmax=Stat<MeshType>::ComputePerVertexQualityMinMax(mesh);
|
typename MeshType::template PerVertexAttributeHandle<ScalarType> h =
|
||||||
|
tri::Allocator<MeshType>:: template GetPerVertexAttribute<ScalarType>(m, "area");
|
||||||
|
for(size_t i=0;i<m.vn;++i) h[i]=0;
|
||||||
|
|
||||||
|
for(FaceIterator fi=m.face.begin(); fi!=m.face.end();++fi)
|
||||||
|
{
|
||||||
|
ScalarType a = DoubleArea(*fi);
|
||||||
|
for(int j=0;j<fi->VN();++j)
|
||||||
|
h[tri::Index(m,fi->V(j))] += a;
|
||||||
|
}
|
||||||
|
ScalarType maxA=0;
|
||||||
|
for(size_t i=0;i<m.vn;++i)
|
||||||
|
maxA = max(maxA,h[i]);
|
||||||
|
|
||||||
//store the index and the scalar for the sparse matrix
|
//store the index and the scalar for the sparse matrix
|
||||||
for (size_t i=0;i<mesh.vert.size();i++)
|
for (size_t i=0;i<m.vert.size();i++)
|
||||||
{
|
{
|
||||||
for (size_t j=0;j<3;j++)
|
for (size_t j=0;j<3;j++)
|
||||||
{
|
{
|
||||||
int currI=(i*3)+j;
|
int currI=(i*3)+j;
|
||||||
index.push_back(std::pair<int,int>(currI,currI));
|
index.push_back(std::pair<int,int>(currI,currI));
|
||||||
entry.push_back(mesh.vert[i].Q()/(ScalarType)minmax.second);
|
entry.push_back(h[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tri::Allocator<MeshType>::template DeletePerVertexAttribute<ScalarType>(m,h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue