vtkPoints 是由点云组成的数组,不包含任何的vertex, 直接放进vtkPolyData 中进行显示是看不到的。两种显示方式可参考以下代码。
1)C++ 版
vtkSmartPointer<vtkActor> points_actor=
vtkSmartPointer<vtkActor>::New();
vtkSmartPointer<vtkCellArray> polyvertex=
vtkSmartPointer<vtkCellArray>::New();
int Num=points->GetNumberOfPoints();
polyvertex->SetNumberOfCells(Num);
for(vtkIdType i=0;i<Num;i++)
{
vtkIdType cell[1]={i};
polyvertex->InsertNextCell(1,cell);
}
vtkSmartPointer<vtkPolyData> polydata_surf=
vtkSmartPointer<vtkPolyData>::New();
polydata_surf->SetPoints(points);
polydata_surf->SetVerts(polyvertex);
vtkSmartPointer<vtkDataSetMapper> points_map =
vtkSmartPointer<vtkDataSetMapper>::New();
points_map->SetInputData(polydata_surf);
points_actor->SetMapper(points_map);
render->AddActor(points_actor);
2) C++ 版
vtkSmartPointer<vtkPolyData> polydata =
vtkSmartPointer<vtkPolyData>::New();
polydata->SetPoints(points);
vtkSmartPointer<vtkVertexGlyphFilter> vertexFilter =
vtkSmartPointer<vtkVertexGlyphFilter>::New();
vertexFilter->SetInputData(polydata);
vertexFilter->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(vertexFilter->GetOutput());
mapper->Update();
vtkSmartPointer<vtkActor>actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
render->AddActor(actor);
3) python 版
def PointsDisplay(points):
Points = vtk.vtkPoints()
vertices = vtk.vtkCellArray()
for v in points:
point_tmp = [v[0], v[1], v[2]]
id=Points.InsertNextPoint(point_tmp)
vertices.InsertNextCell(1)
vertices.InsertCellPoint(id)
polydata = vtk.vtkPolyData()
polydata.SetPoints(Points)
polydata.SetVerts(vertices)
Mapper = vtk.vtkPolyDataMapper()
Mapper.SetInputData(polydata)
Actor = vtk.vtkActor()
Actor.SetMapper(Mapper)
Actor.GetProperty().SetColor(1, 0, 0)
ren1 = vtk.vtkRenderer()
ren1.AddActor(Actor)
# ren1.AddActor(ref_Actor)
ren1.SetBackground(0.1, 0.2, 0.4)
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1)
# renWin.SetFullScreen(True)
renWin.SetSize(300, 300)
renWin.Render()
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
iren.Initialize()
iren.Start()