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

之前写过一篇与合并数据相关的笔记《VTK笔记——合并数据(vtkAppendPolyData)》,用vtkAppendPolyData合并多边形数据,有个基本的条件就是输入数据类型要一致。如果我们想要合并数据片段,那可能就要用到vtkMergeFilter.

vtkMergeFilter

vtkMergeFilter将多个数据集中的数据片段合并为一个新的数据集。比如,可以将一个数据集的结构(拓扑和几何),第二个数据集的标量数据,第三个数据集的向量数据合并为一个数据集。当合并数据时,数组中的元组数与点的个数一致,单元数据也一样。

使用方法

	auto merge = vtkSmartPointer<vtkMergeFilter>::New();
	merge->SetGeometryConnection(wrap->GetOutputPort());
	merge->SetScalarsConnection(reader->GetOutputPort());

示例

使用vtkMergeFilter将扭曲的表面与原始数据的颜色进行合并。
在这里插入图片描述

ImageWarp.cxx

#include "vtkSmartPointer.h"
#include "vtkBMPReader.h"
#include "vtkImageLuminance.h"
#include "vtkImageDataGeometryFilter.h"
#include "vtkWarpScalar.h"
#include "vtkMergeFilter.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkDataSetMapper.h"
#include "vtkActor.h"

#include <string>

int main(int argc, char* argv[])
{
	if (argc < 2)
	{
		std::cout << "Usage: " << argv[0] << "masonry.bmp" << std::endl;
		return EXIT_FAILURE;
	}

	std::string filename = argv[1];
	auto reader = vtkSmartPointer<vtkBMPReader>::New();
	reader->SetFileName(filename.c_str());
	auto luminance = vtkSmartPointer<vtkImageLuminance>::New();
	luminance->SetInputConnection(reader->GetOutputPort());
	auto geometry = vtkSmartPointer<vtkImageDataGeometryFilter>::New();
	geometry->SetInputConnection(luminance->GetOutputPort());
	auto wrap = vtkSmartPointer<vtkWarpScalar>::New();
	wrap->SetInputConnection(geometry->GetOutputPort());
	wrap->SetScaleFactor(-0.1);

	auto merge = vtkSmartPointer<vtkMergeFilter>::New();
	merge->SetGeometryConnection(wrap->GetOutputPort());
	merge->SetScalarsConnection(reader->GetOutputPort());
	merge->SetGlobalWarningDisplay(0);

	auto mapper = vtkSmartPointer<vtkDataSetMapper>::New();
	mapper->SetInputConnection(merge->GetOutputPort());
	mapper->SetScalarRange(0, 255);
	auto actor = vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);

	auto ren = vtkSmartPointer<vtkRenderer>::New();
	auto renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(ren);
	auto interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	interactor->SetRenderWindow(renWin);

	ren->AddActor(actor);
	ren->ResetCamera();
	ren->SetBackground(60/255.0, 93/255.0, 144/255.0);
	
	renWin->SetSize(512, 512);
	renWin->Render();
	interactor->Start();

	return EXIT_SUCCESS;
}

Ref

VTKExamples/Cxx/Images/ImageWarp
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值