Ошибка утверждения при использовании примеров vcglib

Я хочу использовать 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. Я не получаю никаких ошибок компилятора или компоновщика.

Заранее спасибо, Мирко


person Mirco    schedule 27.11.2012    source источник


Ответы (1)


Чтобы избавиться от такой ошибки, обычно необходимо изменить определение вершины, ребра, грани, сетки. Я мог бы заставить этот пример работать, используя:

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);
   }
}*/
person Deepfreeze    schedule 04.09.2013
comment
Я попробовал ваше решение. Но у меня это не работает... но у меня работают другие простые примеры. Вы знаете, как вставлять вершины в сетку? Я устал, как объяснено в примере. Но когда я пытаюсь вставить MyMesh::VertexPointer ivp[400000]; как 400 тыс. вершин. программа вылетает без ошибок. Пожалуйста, помогите мне Спасибо. - person Teh Sunn Liu; 06.01.2017
comment
Если вы создадите новый вопрос и разместите ссылку здесь, я отвечу на него. - person Deepfreeze; 10.01.2017
comment
Привет. Спасибо за ответ. Я разместил вопрос здесь< /а> - person Teh Sunn Liu; 13.01.2017