vtkPolyData 平移、旋转、缩放 vtkTransformPolyDataFilter

vtkPolyData 移动、旋转、平移,可以用 vtkTransformPolyDataFilter 实现,但相关参数怎么得到?

基本思想:
将vtkPolyData 放入Actor ,拖动Actor 使之到达 正确位置,然后获取actor 的位移,再作用到 vtkPolyData 上,就得到位移后的 vtkPolyData 数据了。
实现如下:

	std::string inputFilename1 =   "D:/receive/zhangjin/ray-x-ct/db.stl";
	vtkSmartPointer<vtkSTLReader> reader1 = vtkSmartPointer<vtkSTLReader>::New();
	reader1->SetFileName(inputFilename1.c_str());
	reader1->Update();

	std::string inputFilename2 = "D:/receive/xuxin/stl/J0.stl";
	vtkSmartPointer<vtkSTLReader> reader2 = vtkSmartPointer<vtkSTLReader>::New();
	reader2->SetFileName(inputFilename2.c_str());
	reader2->Update();

	vtkSmartPointer<vtkPolyDataMapper> mapper1 = vtkSmartPointer<vtkPolyDataMapper>::New();//将输入数据渲染多边形的几何数据
	mapper1->SetInputData(skinExtractor->GetOutput());//mapper的输入是boolFilter的输出
	mapper1->ScalarVisibilityOff();
	mapper1->Update();

	vtkSmartPointer<vtkPolyDataMapper> mapper2 = vtkSmartPointer<vtkPolyDataMapper>::New();//将输入数据渲染多边形的几何数据
	mapper2->SetInputData(reader1->GetOutput());//mapper的输入是boolFilter的输出
	mapper2->ScalarVisibilityOff();
	mapper2->Update();

	actor->SetMapper(mapper1);
	actorStl->SetMapper(mapper2);

// 获取 位移后的数据
				vtkSmartPointer<vtkTransform> pTransformSTL = vtkSmartPointer<vtkTransform>::New();
				//pTransformSTL->SetInput(actorStl->GetUserTransform());
				pTransformSTL->SetMatrix(actorStl->GetMatrix());
				pTransformSTL->Update();

				 vtkSmartPointer<vtkTransform> pTransform = vtkSmartPointer<vtkTransform>::New();
				// pTransform->SetInput(actor->GetUserTransform());
				 pTransform->SetMatrix(actor->GetMatrix());
				 pTransform->Update();

				vtkSmartPointer<vtkTransformPolyDataFilter> pTransformPolyDataFilterSTL = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
				pTransformPolyDataFilterSTL->SetInputData(actorStl->GetMapper()->GetInput());
				pTransformPolyDataFilterSTL->SetTransform(pTransformSTL);
				pTransformPolyDataFilterSTL->Update();

				vtkSmartPointer<vtkTransformPolyDataFilter> pTransformPolyDataFilter  = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
				pTransformPolyDataFilter->SetInputData(actor->GetMapper()->GetInput());
				pTransformPolyDataFilter->SetTransform(pTransform);
				pTransformPolyDataFilter->Update();
	
	// 最终得到数据
	pTransformPolyDataFilterSTL->GetOutPut();
    pTransformPolyDataFilter->GetOutPut();			

直接旋转

vtkTransformPolyDataFilter * Transform = vtkTransformPolyDataFilter::New(); 
Transform ->Translate(cx, cy, cz); 
Transform ->Scale(factor,factor,factor); 
Transform ->Translate(-cx, -cy, -cz); 
Transform ->Update();

 

```cpp

```cpp
 vtkSmartPointer<vtkTransform> pTransform = vtkSmartPointer<vtkTransform>::New();
    pTransform->RotateX(90);//x轴旋转90度
    pTransform->RotateZ(180);//z轴旋转180度
 

 
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
VTKvtkPolyDataVTK中的一个重要接口,它用于表示和操作多边形数据。vtkPolyData的数据结构包含了顶点、线段、多边形等几何元素,并且支持属性数据的附加。通过vtkPolyData接口,我们可以进行各种几何操作,如创建、修改、查询和可视化多边形数据。 引用提到了vtkPolyData的重要性,掌握了vtkPolyData的数据结构和相关方法可以更好地理解VTK。这个接口的方法包括添加几何元素、修改属性数据、进行几何操作等,可以通过官方文档或相关教程学习和了解。 如果你想将vtkUnstructuredGrid转换为vtkPolyData,可以参考引用中提供的方法。这个过程涉及重新构建输入vtkPolyData数据的Mesh数据,具体的步骤可以在文章中找到。 另外,引用提供了一篇介绍VTK的文章,可以作为参考。VTK是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。它的内核是用C构建的,支持多种编程语言的调用,如Java、Tcl/Tk和Python。 总之,VTKvtkPolyData是用于表示和操作多边形数据的接口,可以通过学习相关文档和教程来深入了解其数据结构和方法。同时,可以通过转换方法将其他数据类型转换为vtkPolyData进行处理和可视化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [VTK-vtkPolyData解读](https://blog.csdn.net/qq_40041064/article/details/127959529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [VTK基础教程(1)- vtkPolyData 介绍](https://blog.csdn.net/qq_35769071/article/details/122671756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值