Я хочу использовать vcglib для восстановления поверхности на основе облака точек. Но всякий раз, когда я запускаю свою программу (также с предоставленными примерами, например, / vcglib / apps / sample / trimesh_allocate), я получаю следующий вывод:
trimesh_allocate: ../../../vcg/simplex/vertex/component.h:50: int
vcg :: vertex :: EmptyCore :: cFlags () const [с TT = MyUsedTypes]:
Утверждение `0 ‘не удалось.
Есть идеи как решить это? Я использую QT-Creator 2.4.1 в Ubuntu 12.04. Я не получаю никаких ошибок компилятора или компоновщика.
Большое спасибо заранее, Мирко
Чтобы избавиться от такой ошибки, вам, как правило, необходимо изменить определение вершины, ребра, грани, определения сетки. Я мог бы заставить этот пример работать, используя:
class MyFace;
class MyVertex;
struct MyUsedTypes : public vcg::UsedTypes< vcg::Use<MyVertex>::AsVertexType,
vcg::Use<MyFace>::AsFaceType>{};
class MyVertex : public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::VFAdj, vcg::vertex::BitFlags, vcg::vertex::Mark>{};
class MyFace : public vcg::Face < MyUsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::FFAdj, vcg::face::Mark, vcg::face::VFAdj, vcg::face::BitFlags > {};
class MyMesh : public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> > {};
Я верю vcg::xx::BitFlags
те, которые вам нужно добавить как для вершины, так и для лица. Это видно из вашей ошибки о cFlags ().
Кроме того, в trimesh_allocate.cpp
Например, вам необходимо закомментировать следующий раздел:
// WRONG WAY of iterating: FN() != m.face.size() if there are deleted elements
/*for(int i=0;i<m.FN();++i)
{
if(!fi->IsD())
{
MyMesh::CoordType b = vcg::Barycenter(*fi);
}
}*/
Других решений пока нет …