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;
}
#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;
}
相关文章推荐
- SDN,网络
- 归并排序变种应用–求逆序数
- HibernateTemplate和HibernateDaoSupport
- SSL协议详解
- 出现The connection to adb is down, and a severe error has occured.
- jQuery源码分析之实例find和filter方法的区别七问
- asp.net中获取当前url的方法
- mysql运行的三种方式
- matlab中gscale函数——M文件
- 你能成为什么样的人,取决于你心中的那颗种子!
- 你能成为什么样的人,取决于你心中的那颗种子!
- 你能成为什么样的人,取决于你心中的那颗种子!
- indexDB的概念
- 善变者 -- Togglers
- Quartz2D的使用
- 之前写的python文件
- 【bzoj2836】【魔法树】【树链剖分】
- java,Iterator,两种遍历方法
- Systemd 与 Systemctl 命令指南
- SCrollTOP scrollHeight