VTK笔记——合并数据(vtkAppendPolyData)

数据的合并在3D应用中时常会用到,怎样合并数据,对于不同类型的数据,合并的方法却不相同。
vtk中的数据集有很多类型,主要包括结构化网络数据集、非结构化网络数据集、多边形数据集、结构化点集、线性网络数据集、非结构化点集等几类。
在这里插入图片描述
下面介绍对多边形数据集(Polygonal Data)做合并。

vtkAppendPolyData

vtkAppendPolyData是一个filter,主要的作用就是将两个或多个多边形数据集合并为一个的多边形数据集。所有的几何信息都会被提取,但是点、单元属性(标量、向量、法线)的提取和扩展需要每个数据集有这个点或者单元属性。例如如果一个数据集有点标量信息(如权重)而另一个数据集没有这个点的标量信息,那个这个点的标量信息就不会被扩展。

使用方法

加入两个或多个数据

	auto appendFilter =
		vtkSmartPointer<vtkAppendPolyData>::New();
	appendFilter->AddInputConnection(tubeFilter->GetOutputPort());
	appendFilter->AddInputConnection(coneSource->GetOutputPort());

如果合并的数据包含多个多边形数据,可以循环加入。
去掉重复多余的点和单元

	auto cleanFilter =
		vtkSmartPointer<vtkCleanPolyData>::New();
	cleanFilter->SetInputConnection(appendFilter->GetOutputPort());
	cleanFilter->Update();

示例

将一个圆柱和圆柱合并成一个多边形数据
在这里插入图片描述

CombinePolyData.cxx

#include <vtkSmartPointer.h>
#include <vtkLineSource.h>
#include <vtkTubeFilter.h>
#include <vtkConeSource.h>
#include <vtkAppendPolyData.h>
#include <vtkCleanPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

int main(int argc, char* argv)
{
	auto lineSource = 
		vtkSmartPointer<vtkLineSource>::New();
	lineSource->SetPoint1(0.0, 0.0, 0.0);
	lineSource->SetPoint2(-6.0, 0.0, 0.0);
	auto tubeFilter =
		vtkSmartPointer<vtkTubeFilter>::New();
	tubeFilter->SetInputConnection(lineSource->GetOutputPort());
	tubeFilter->SetRadius(0.5);
	tubeFilter->SetNumberOfSides(50);
	tubeFilter->CappingOn();
	auto coneSource = 
		vtkSmartPointer<vtkConeSource>::New();
	coneSource->SetHeight(3.0);
	coneSource->SetRadius(1.0);
	coneSource->SetCenter(0.0, 0.0, 0.0);

	auto appendFilter =
		vtkSmartPointer<vtkAppendPolyData>::New();
	appendFilter->AddInputConnection(tubeFilter->GetOutputPort());
	appendFilter->AddInputConnection(coneSource->GetOutputPort());

	auto cleanFilter =
		vtkSmartPointer<vtkCleanPolyData>::New();
	cleanFilter->SetInputConnection(appendFilter->GetOutputPort());
	cleanFilter->Update();

	auto mapper =
		vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputConnection(cleanFilter->GetOutputPort());

	auto actor =
		vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);

	auto renderer =
		vtkSmartPointer<vtkRenderer>::New();
	auto renderWindow =
		vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->SetSize(640, 480);
	renderWindow->AddRenderer(renderer);
	auto renderWindowInteractor =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderer->AddActor(actor);
	renderWindow->Render();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

Ref

VTKExamples/Cxx/Filtering/CombinePolyData
VTK User’s Guide
在这里插入图片描述

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值