Количество обнаруженных самопересечений в vcglib не совпадает с числом Meshlab
Когда я выполняю свою программу
C:\Users\me\Documents\projectCGALII\build\Debug>test.exe pig.obj
Я получаю 6 пересечений, и когда это проверено в Meshlab, это говорит 4 пересечения. Это моя программа:
void countSelfIntersection(const char* filename)
{
OpenMesh(filename, pm);
vcg::tri::UpdateTopology<PMesh>::FaceFace(pm);
std::vector<PMesh::FaceType *> intersections;
bool SelfIntersect = tri::Clean<PMesh>::SelfIntersections(pm, intersections);
std::cout << "Count Intersection: " << intersections.size() << std::endl;
for (std::vector<PMesh::FaceType *>::iterator it = intersections.begin(); it != intersections.end(); it++)
{
PMesh::FaceType *face = *it;
for (int i = 0; i < 3; ++i)
{
std::cout << "Vertex(" <<i<<")"<< std::dec <<(int) face->cV0(i) << " " << std::dec << (int)face->cV1(i) << " " << std::dec << (int)face->cV2(i) << std::endl;
}
std::cout<<std::endl;
}
}
int main(int argc, char* argv[])
{
nonManinfoldEdge(argv[1]);
return 0;
}
Прикрепленный файл pig.obj здесь:
https://drive.google.com/open?id=1fEqZft_OhHxTsAvio58_TWOtvrYbGCOA
повторяются ли лица в результате? Как получить правильный результат, как это делает меш мешка? Какой лучший способ напечатать свойства каждой грани или вершин, чтобы проверить, существуют ли некоторые повторяющиеся грани? Как убрать повторяющиеся лица, если они существуют?
1 ответ
Решено!
int countSelfIntersections(PMesh &pm)
{
vcg::tri::UpdateTopology<PMesh>::FaceFace(pm);
std::vector<PFace *> intersections;
bool SelfIntersect = tri::Clean<PMesh>::SelfIntersections(pm, intersections);
tri::UpdateSelection<PMesh>::FaceClear(pm);
for (std::vector<PFace*>::iterator it = intersections.begin(); it != intersections.end(); it++)
{
PFace *face = *it;
face->SetS();
}
PMesh::FaceIterator f;
f = pm.face.begin();
std::vector<PFace*> sf;
for (; f != pm.face.end(); ++f)
{
if (f->IsS())
{
sf.push_back(&(*f));
}
}
return sf.size();
}