Ошибка сегментации при использовании vtkPolyLine в пользовательском фильтре Paraview

Я хочу отобразить несколько наборов 3D-точек, используя vtkPolyLine.
Точки хранятся в виде узлов (пользовательский класс) в многомерном векторе:
vector<vector <Node> > criticalLines; где узел имеет: double posX; double posY; double posZ; сохранить свою позицию.

В следующем разделе я попытался использовать vtkPolyLine, похожий на этот пример:
http://www.paraview.org/Wiki/VTK/Examples/Cxx/GeometricObjects/PolyLine

Эта функция вызывается после заполнения вектора узлами:

void Algorithm::displayLines(vtkSmartPointer<vtkPoints> points,vtkSmartPointer<vtkCellArray> lines)
{
for(int i = 0; i<criticalLines.size(); i++)
{
if(criticalLines[i].empty())
{
continue;
}

vtkSmartPointer<vtkPolyLine> polyLine =
vtkSmartPointer<vtkPolyLine>::New()

for(int j =0; j< criticalLines[i].size(); ++j)
{

vtkIdType idx=points->InsertNextPoint(criticalLines[i][j].posX,
criticalLines[i][j].posY,
criticalLines[i][j].posZ);
//print posX,posY,posZ of current Node
criticalLines[i][j].PrintSelf();//Seg. Fault occurs here
polyLine->GetPointIds()->SetId(j,idx);}
lines->InsertNextCell(polyLine);

}

}

И то и другое points а также lines определяются в файле Algorithm.h и инициализируются в конструкторе следующим образом:

points = vtkSmartPointer<vtkPoints>::New();
lines = vtkSmartPointer<vtkCellArray>::New();

И добавил к vtkPolyData позже:

vtkSmartPointer<vtkPolyData> opd=vtkSmartPointer<vtkPolyData>::New() ;
opd->SetPoints(algorithm.points);
opd->SetLines(algorithm.lines);

Выход изcriticalLines[i][j].PrintSelf(); показывает значения, как ожидалось.

Когда используешь vtkSmartPointer<vtkTriangle> triangle = vtkSmartPointer<vtkTriangle>::New(); вместо vtkPolyLine все отлично работает

Решение этой проблемы создать несколько полилиний с заданным набором точек, используя vtk каким-то образом связанная проблема, казалось, не была тем, что я искал.

Я не уверен, что отсутствует / неправильно в моем кодексе.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Любая помощь очень ценится!

2

Решение

Ваш vtkPolyLine необходимо выделить место для идентификаторов точек, например

polyLine->GetPointIds()->SetNumberOfIds(5);

в примере, на который вы ссылались. В вашем случае вам нужно позвонить

polyLine->GetPointIds()->SetNumberOfIds(criticalLines[i].size());

сразу после создания polyLine,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]