rewritten InitQualityVertVoronoiArea function
This commit is contained in:
parent
8b49a7803a
commit
1990de4809
|
|
@ -900,6 +900,49 @@ public:
|
||||||
return MeshArea;
|
return MeshArea;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static void InitQualityVertVoronoiArea(PolyMeshType &poly_m)
|
||||||
|
// {
|
||||||
|
// for (size_t i=0;i<poly_m.vert.size();i++)
|
||||||
|
// poly_m.vert[i].Q()=0;
|
||||||
|
|
||||||
|
// //set the sum of angle for each face
|
||||||
|
|
||||||
|
// std::vector<ScalarType> SumAngle(poly_m.face.size(),0);
|
||||||
|
// for (size_t i=0;i<poly_m.face.size();i++)
|
||||||
|
// {
|
||||||
|
// size_t sizeV=poly_m.face[i].VN()-1;
|
||||||
|
// for (size_t j=0;j<sizeV;j++)
|
||||||
|
// {
|
||||||
|
// CoordType P0=poly_m.face[i].P((j+1)%sizeV);
|
||||||
|
// CoordType P1=poly_m.face[i].P(j);
|
||||||
|
// CoordType P2=poly_m.face[i].P1(j);
|
||||||
|
// CoordType dir0=P0-P1;
|
||||||
|
// CoordType dir1=P2-P1;
|
||||||
|
// dir0.Normalize();
|
||||||
|
// dir1.Normalize();
|
||||||
|
// SumAngle[i]+=vcg::Angle(dir0,dir1);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// for (size_t i=0;i<poly_m.face.size();i++)
|
||||||
|
// {
|
||||||
|
// ScalarType AreaF=vcg::PolyArea(poly_m.face[i]);
|
||||||
|
// size_t sizeV=poly_m.face[i].VN()-1;
|
||||||
|
// for (size_t j=0;j<poly_m.face[i].VN();j++)
|
||||||
|
// {
|
||||||
|
// CoordType P0=poly_m.face[i].P((j+1)%sizeV);
|
||||||
|
// CoordType P1=poly_m.face[i].P(j);
|
||||||
|
// CoordType P2=poly_m.face[i].P1(j);
|
||||||
|
// CoordType dir0=P0-P1;
|
||||||
|
// CoordType dir1=P2-P1;
|
||||||
|
// dir0.Normalize();
|
||||||
|
// dir1.Normalize();
|
||||||
|
// ScalarType CurrAngle=vcg::Angle(dir0,dir1);
|
||||||
|
// poly_m.face[i].V(j)->Q()+=AreaF * CurrAngle/SumAngle[i];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
static void InitQualityVertVoronoiArea(PolyMeshType &poly_m)
|
static void InitQualityVertVoronoiArea(PolyMeshType &poly_m)
|
||||||
{
|
{
|
||||||
for (size_t i=0;i<poly_m.vert.size();i++)
|
for (size_t i=0;i<poly_m.vert.size();i++)
|
||||||
|
|
@ -907,9 +950,20 @@ public:
|
||||||
|
|
||||||
for (size_t i=0;i<poly_m.face.size();i++)
|
for (size_t i=0;i<poly_m.face.size();i++)
|
||||||
{
|
{
|
||||||
ScalarType AreaF=vcg::PolyArea(poly_m.face[i]);
|
// ScalarType AreaF=vcg::PolyArea(poly_m.face[i]);
|
||||||
|
size_t sizeV=poly_m.face[i].VN()-1;
|
||||||
|
CoordType baryF=vcg::PolyBarycenter(poly_m.face[i]);
|
||||||
for (size_t j=0;j<poly_m.face[i].VN();j++)
|
for (size_t j=0;j<poly_m.face[i].VN();j++)
|
||||||
poly_m.face[i].V(j)->Q()+=AreaF/(ScalarType)poly_m.face[i].VN();
|
{
|
||||||
|
CoordType P0=poly_m.face[i].P((j+sizeV-1)%sizeV);
|
||||||
|
CoordType P1=poly_m.face[i].P(j);
|
||||||
|
CoordType P2=poly_m.face[i].P1(j);
|
||||||
|
vcg::Triangle3<ScalarType> T0(P1,(P0+P1)/2,baryF);
|
||||||
|
vcg::Triangle3<ScalarType> T1(P1,(P1+P2)/2,baryF);
|
||||||
|
|
||||||
|
poly_m.face[i].V(j)->Q()+=vcg::DoubleArea(T0)/2;
|
||||||
|
poly_m.face[i].V(j)->Q()+=vcg::DoubleArea(T1)/2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue