前一篇博客介绍的方法多绕了一步(重新写了一个文件),本文介绍的方法省去了那一步,感觉更好。
文件格式:
0.029800 -31.861797 19.528000
0.029600 -31.681202 19.348801
0.029600 -31.700199 19.292200
0.029700 -31.707401 19.228399
0.029600 -31.692402 19.151301
。。。。。。
代码:
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkProperty.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkPoints.h"
#include "vtkPolyVertex.h"
#include "vtkUnstructuredGrid.h"
#include "vtkDataSetMapper.h"
#include "vtkSmartPointer.h"
#include "vtkPointData.h"
#include "vtkDoubleArray.h"
int main(int argc, char* argv[])
{
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkDoubleArray>scalar = vtkSmartPointer<vtkDoubleArray>::New();//用高程值(Z坐标值)填充,用于显示
//读取文件,将点云存储在vtkPoints对象中,并用高程值作为属性信息存储在vtkDoubleArray对象中
FILE * fRead;
fRead = fopen("d:\\01.txt","r");
double pt[3];
int n=0;
while (!feof(fRead))
{
fscanf(fRead,"%lf %lf %lf",pt,pt+1,pt+2);
points->InsertPoint(n,pt[0],pt[1],pt[2]);
scalar->InsertNextTuple1(pt[2]);
n++;
}
vtkSmartPointer<vtkPolyVertex> polyvertex = vtkSmartPointer<vtkPolyVertex>::New();//vtkCell的具体实现
polyvertex->GetPointIds()->SetNumberOfIds(n);//设置ID个数并分配存储ID的内存
int i=0;
for(i=0;i<n;i++)//建立拓扑关系
{
polyvertex->GetPointIds()->SetId(i,i);
}
vtkSmartPointer<vtkUnstructuredGrid> grid = vtkSmartPointer<vtkUnstructuredGrid>::New();
grid->SetPoints(points);
grid->InsertNextCell(polyvertex->GetCellType(),polyvertex->GetPointIds());//************************************没懂
grid->GetPointData()->SetScalars(scalar);
vtkSmartPointer<vtkDataSetMapper> map1 = vtkSmartPointer<vtkDataSetMapper>::New();
map1->SetInput(grid);
map1->SetScalarRange(-2,20);
vtkSmartPointer<vtkActor> actor1 = vtkSmartPointer<vtkActor>::New();
actor1->SetMapper(map1);
vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
ren->SetBackground(0, 0, 0);
vtkSmartPointer<vtkRenderWindow> win = vtkSmartPointer<vtkRenderWindow>::New();
win->AddRenderer(ren);
win->SetSize(1000,1000);
//win->FullScreenOn();
//win->HideCursor();
//win->BordersOn();
vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetRenderWindow(win);
vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
iren->SetInteractorStyle(style);
ren->AddActor(actor1);
win->Render();
iren->Start();
return EXIT_SUCCESS;
}