VTK利用点云高程渲染点云(方法二:vtkUnstructuredGrid)

前一篇博客介绍的方法多绕了一步(重新写了一个文件),本文介绍的方法省去了那一步,感觉更好。

文件格式:

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值