vtk操作STL模型

vtk操作STL模型系列


前言:STL三维模型文件是被广泛使用的三维模型文件格式,对其的各种操作自然就有很多实用价值

一、读取STL

使用vtkStlReader读取,再用渲染管线渲染出来。

	 vtkSmartPointer<vtkSTLReader> reader=vtkSmartPointer<vtkSTLReader>::New();
	 reader->SetFileName(filePath.c_str());
	 reader->Update();
	 
	vtkSmartPointer<vtkPolyDataMapper> mapper=vtksmartPointer<vtkPolyDataMapper>::New();
	mapper->SetinputConnection(reader->GetoutputPort());

二、将STL模型放大,缩小,移动

首先设定一种变换(放大&放缩&移动),再将设定好的变换传递给变换过滤器,再用mapper渲染

	// 定义变换
	 vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
	 transform->Translate(400.0,0.0,0.0);//移动到(400,0,0)的位置
	 transform->Scale(1.0, 0.5, 2.0);//将stl模型沿着x,y,z轴变形(a,b,c)倍
	//定义变换过滤器
	 vtkSmartPointer<vtkTransformPolyDataFilter> transfilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
	 transfilter->SetInputConnection(reader->GetOutputPort());//得到模型数据
	 transfilter->SetTransform(transform);//设定变换
	 transfilter->Update();//对模型实施变换
	 //定义映射器
	 vtkSmartPointer<vtkPolyDataMapper> mapper= vtkSmartPointer<vtkPolyDataMapper>::New();
	 mapper->SetInputConnection(transfilter->GetOutputPort());//再次回归到渲染流程

三、STL网格三角面片数量降低

stl模型由顶点和三角面片构成,若减少顶点数量,则三角面片也会减少,从而丢失细节,变得粗糙,实现网格粗糙化

   //读取
    vtkSmartPointer<vtkSTLReader> reader = vtkSmartPointer<vtkSTLReader>::New();
	reader->SetFileName(filepath.c_str());
	reader->Update();

	vtkSmartPointer<vtkPolyData> orig = reader->GetOutput();

	//网格三角面片数量降低
	vtkSmartPointer<vtkDecimatePro> decimate = vtkSmartPointer<vtkDecimatePro>::New();
	decimate->SetInputData(orig);
	decimate->SetTargetReduction(0.7);//去掉百分之70的三角面片
	decimate->Update();

	vtkSmartPointer<vtkPolyData> decimated = decimate->GetOutput();
	
	vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputData(decimated);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值