您的位置:首页 > 其它

VTK利用点云高程渲染点云(方法三:vtkPoltData)

2015-10-07 09:53 423 查看
#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"
#include "vtkPolyData.h"
#include "vtkCellArray.h"
#include "vtkHeadFile.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<vtkCellArray> polyvertex = vtkSmartPointer<vtkCellArray>::New();//vtkCell的具体实现
polyvertex->SetNumberOfCells(n);//设置ID个数

int i = 0;
for(i=0;i<n;i++)//建立拓扑关系
{
vtkIdType Cell[1] = {i};
polyvertex->InsertNextCell(1,Cell);//第一个参数:cell由一个点组成;第二个参数:组成cell的pointID
}

vtkSmartPointer<vtkPolyData > grid = vtkSmartPointer<vtkPolyData>::New();
grid->SetPoints(points);
grid->SetVerts(polyvertex);//设置建立vertex的cell array

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->Initialize();
iren->Start();

return EXIT_SUCCESS;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: