基於vtkPolyData,繪制時除了輸入點坐標,還需要通過setVerts指定點繪制信息。
simplePoints.txt的內容為簡單的 xyz,如:
20 20 20
20 20 30
20 20 40
20 30 30
參考vtkSimplePointsReader,此類位於legacy文件夾下,不建議直接使用
// VTK includes
#include "vtkPoints.h"
#include "vtkPolyData.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkPolyDataMapper.h"
#include "vtkInteractorStyle.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkProperty.h"
#include "vtkCellArray.h"
#include "vtkInteractorStyleTrackballCamera.h"
int main(int argc, char *argv[])
{
vtkPoints *points = vtkPoints::New();
vtkCellArray *cells = vtkCellArray::New();
// ifstream fs(argv[1]);
ifstream fs("simplePoints.txt");
vtkIdType idtype;
double x, y, z;
while(fs>>x>>y>>z){
//插入點坐標,此處可改為其它的xyz
idtype = points->InsertNextPoint(x,y,z);
cells->InsertNextCell(1, &idtype);
}
// 渲染機制未知,需要同時設置點坐標與點坐標對應的verts
// verts中的id必須與點坐標對應
vtkPolyData *polyData = vtkPolyData::New();
polyData->SetPoints(points);
polyData->SetVerts(cells);
//下面為正常的可視化流程,可設置的點雲顏色、大小等已注釋
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
mapper->SetInputData(polyData);
vtkActor *actor = vtkActor::New();
actor->SetMapper(mapper);
//設置顏色與點大小
//actor->GetProperty()->SetColor(0.0, 0.0, 0.0);
//actor->GetProperty()->SetPointSize(2);
vtkRenderer *renderer = vtkRenderer::New();
renderer->AddActor(actor);
// 設置背景顏色
// renderer->SetBackground(1, 1, 1);
vtkRenderWindow *renderWindow = vtkRenderWindow::New();
renderWindow->AddRenderer(renderer);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renderWindow);
vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
iren->SetInteractorStyle(style);
iren->Initialize();
iren->Start();
points->Delete();
polyData->Delete();
mapper->Delete();
actor->Delete();
renderer->Delete();
renderWindow->Delete();
iren->Delete();
style->Delete();
return 0;
}