我想使用vtkPolyLine显示多组3D点。
这些点作为节点(自定义类)存储在多维 vector 中:
节点具有的vector<vector <Node> > criticalLines;:用来存储其位置的double posX; double posY; double posZ;

对于以下部分,我尝试使用类似于此示例的vtkPolyLine:
http://www.paraview.org/Wiki/VTK/Examples/Cxx/GeometricObjects/PolyLine

在 vector 填充节点后调用此函数:

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);

}

}
pointslines均在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时,一切正常。

某种与create multiple polylines given a set of points using vtk相关的问题的解决方案似乎并不是我想要的。

我不确定我的代码中有什么缺失/错误。
如果您需要更多信息,请告诉我。

很感谢任何形式的帮助!

最佳答案

您的vtkPolyLine需要为点ID分配一些空间,例如

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

在您链接到的示例中。您需要致电
polyLine->GetPointIds()->SetNumberOfIds(criticalLines[i].size());

在创建polyLine之后。

关于c++ - 在自定义Paraview滤镜中使用vtkPolyLine时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40704534/

10-11 21:07