VTK生成分布在球内部或者表面的三维点云坐标,将点云坐标保存为txt文本文档

使用VTK生成分布在球内部或者表面的三维点云数据,可以设置球的中心,半径以及生成的三维点的个数并选择可以设置在球内部生成或者是球表面生成。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "vtkInteractorStyleTrackballCamera.h"
#include 
#include 

int main(int, char *[])
{
	vtkSmartPointer pointSource = 
		vtkSmartPointer::New();
	pointSource->SetNumberOfPoints(1500);//设置点的个数
	pointSource->SetCenter(0,0,0);//设置球心
	pointSource->SetRadius(4); //设置半径
	pointSource->SetDistributionToShell();//该模式为随机产生的点在球的表面,SetDistributionToUniform()这种模式随机产生的点在球的内部
	pointSource->Update();//更新数据

	//输出球的坐标到文本文档
	vtkPolyData* polydata = pointSource->GetOutput();
	ofstream s;
	s.open("球三维表面点云.txt");
	for(vtkIdType i = 0; i < polydata->GetNumberOfPoints(); i++)
	{
		double p[3];
		polydata->GetPoint(i,p);
		s< mapper =
		vtkSmartPointer::New();
	mapper->SetInputConnection(pointSource->GetOutputPort());

	vtkSmartPointer actor =
		vtkSmartPointer::New();
	actor->SetMapper(mapper);
	actor->GetProperty()->SetPointSize(6);

	vtkSmartPointer renderer =
		vtkSmartPointer::New();
	vtkSmartPointer renderWindow =
		vtkSmartPointer::New();
	renderWindow->AddRenderer(renderer);
	vtkSmartPointer renderWindowInteractor =
		vtkSmartPointer::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);

	vtkInteractorStyleTrackballCamera * style = vtkInteractorStyleTrackballCamera::New();
	renderWindowInteractor->SetInteractorStyle(style);

	renderer->AddActor(actor);
	renderer->SetBackground(0.1, 0.2, 0.3); 

	renderWindow->Render();
	renderWindowInteractor->Start();

	style->Delete();
	return EXIT_SUCCESS;
}

VTK生成分布在球内部或者表面的三维点云坐标,将点云坐标保存为txt文本文档_第1张图片

你可能感兴趣的:(VTK,C++)