Я хочу отображать несколько наборов 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);
Выходные данные ofcriticalLines[i][j].PrintSelf();
показывают ожидаемые значения.
При использовании vtkSmartPointer<vtkTriangle> triangle = vtkSmartPointer<vtkTriangle>::New();
вместо vtkPolyLine
все работает нормально.
Решение этого создание нескольких полилиний с заданным набором точек использование vtk как-то связано с проблемой, похоже, не то, что я искал.
Я не уверен, что отсутствует/неправильно в моем коде. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Любая помощь очень ценится!