在计算机图形学中,三维坐标点用齐次坐标表示。利用其次坐标,可以将空间变换用4x4的矩阵来表示。这些变换都可以用矩阵的运算完成。
当从外界读入STL等三维模型时,其会按照它内部的坐标位置进行显示。因此它的位置和大小是确定的。但是在实际应用中,有可能需要人为地对这个模型在空间中进行旋转、平移或缩放等操作。VTK中有许多和旋转、平移相关的函数

VTK相关的类有:

vtkTransform, vtkTransformFilter, vtkMatrix4x4等

SetPosition、AddPosition(设置物体在世界坐标系中的位置)

SetPosition(x, y, z)—— 指定vtkProp3D对象在世界坐标系中的位置。AddPosition(deltaX, deltaY, deltaZ) —— 用指定的X、Y、Z三个方向的增量来平移Prop。
如立方体开始在原点处,调用SetPosition(50,0,0)后其位置变为(50,0,0)。可以通过GetPosition函数查看物体在世界坐标系中的位置

一、绕中心旋转,这个重要

1. 移动Prop到原点;2. 绕Y轴旋转;3. 绕X轴旋转;4. 绕Z轴旋转;5. 从原点中移动回原来的位置;
         double * center = actor->GetCenter();double * origin = actor->GetOrigin();actor->SetOrigin(center);actor->RotateX(10);actor->SetOrigin(origin);

二、 绕左边的边中心旋转

         static int count_rotate = 0;count_rotate++;double   *center  = mProp3DSec->GetCenter();//{ 0 };double *bounds = mProp3DSec->GetBounds();double   newCenter[3]={ 0 };
)//这里是以起点水平为例,超过 90度,左边的边变成右边的,过中心点了if (count_rotate >= 10{newCenter[0] = center[0] + ((bounds[1] - bounds[0]) / 2);newCenter[1] = center[1] + ((bounds[3] - bounds[2]) / 2);newCenter[2] = center[2] + ((bounds[5] - bounds[4]) / 2);}else{newCenter[0] = center[0] - ((bounds[1] - bounds[0]) / 2);newCenter[1] = center[1] - ((bounds[3] - bounds[2]) / 2);newCenter[2] = center[2] + ((bounds[5] - bounds[4]) / 2);}double * origin = mProp3DSec->GetOrigin();mProp3DSec->SetOrigin(newCenter);mProp3DSec->RotateY(10);mProp3DSec->SetOrigin(origin);

数据旋转

 // Read filevtkNew<vtkImageReader2Factory> readerFactory;vtkSmartPointer<vtkImageReader2> reader;reader.TakeReference(readerFactory->CreateImageReader2(argv[1]));reader->SetFileName(argv[1]);reader->Update();double bounds[6];reader->GetOutput()->GetBounds(bounds);// Rotate about the center of the imagevtkNew<vtkTransform> transform;// Compute the center of the imagedouble center[3];center[0] = (bounds[1] + bounds[0]) / 2.0;center[1] = (bounds[3] + bounds[2]) / 2.0;center[2] = (bounds[5] + bounds[4]) / 2.0;// Rotate about the centertransform->Translate(center[0], center[1], center[2]);transform->RotateWXYZ(angle, 0, 0, 1);transform->Translate(-center[0], -center[1], -center[2]);

保存变换

vtkMatrix4x4::Multiply4x4(m_pPlaneSecMatri, transformN->GetMatrix(), m_pPlaneSecMatri);

vtkImageData

vtkSmartPointer<vtkImageData> imageData = vtkSmartPointer<vtkImageData>::New();
...
vtkSmartPointer<vtkTransformFilter> transformFilter = vtkSmartPointer<vtkTransformFilter>::New();
//transformFilter->SetInput(imageData);
transformFilter->SetInputData(imageData);
transformFilter->SetInformation(imageData->GetInformation());
transformFilter->SetTransform(vTransform);
transformFilter->Update();

VTK Actor ImageData polyData,Transform 平移,旋转相关推荐

  1. Unity 触屏手势控制Camera平移旋转缩放

    Unity 触屏手势控制Camera平移旋转缩放 实现思路 单点触屏,位移增量控制相机平移: 两点触屏,两点位移控制相机前后移动(缩放):两点中一点不位移控制相机绕点旋转: 实现需要的API Touc ...

  2. 放大 旋转 css3,CSS3详解:transform 的旋转、旋转放大、放大、移动

    CSS3 transform是什么? transform的含义是:改变,使-变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ...

  3. css对称旋转,CSS3 transform平面旋转

    CSS3 transform平面旋转 1.translate(x,y) 设置盒子位移 2.scale(x,y) 设置盒子缩放 3.rotate(deg) 设置盒子旋转 4.skew(x-angle,y ...

  4. VTK:交叉点 PolyData 过滤器用法实战

    VTK:交叉点 PolyData 过滤器用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkInter ...

  5. VTK:导出PolyData场景用法实战

    VTK:导出PolyData场景用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkActorColl ...

  6. Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊)

    Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊) 目录 Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊) 前言 简单的平移.旋转和放缩 其他元素的一些基本使用 qm ...

  7. 20P46 Premiere预设800种干扰缩放平移旋转分割拉伸全景透视扭曲炫光视频无缝转场

    20P46 Premiere预设800种干扰缩放平移旋转分割拉伸全景透视扭曲炫光视频无缝转场 模版信息: 适用软件:Premiere Pro CC 2015.3 或更高版本 使用插件:无需外置插件 分 ...

  8. 三维空间中的几何变换-平移旋转缩放

    前言 前段时间由于项目需要,深入学习了下图形几何变换,主要是绕任意轴旋转部分(其他的已有一定基础),现记录学习笔记. 文章内容部分引用并参考了下面的博客: http://netclass.csu.ed ...

  9. flutter Transform 矩阵变换(平移旋转缩放)

    Transform其子Widget绘制时外面包着矩阵变换(transformation),通过它可以实现各种矩阵操作. 1.widget平移 效果图 2.旋转(rotate) 效果图: 3.缩放 Tr ...

最新文章

  1. 写给大忙人看的死锁详解
  2. 桌面虚拟化之资源分配
  3. Struts1.x系列教程(20):使用EventDispatchAction类处理一个form多个submit
  4. 导入Vitamio库后libBaiduMapSDK找不到
  5. 《Orange’s 一个操作系统的实现》3.保护模式1----pm.inc分析
  6. 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
  7. 到底什么样的ABAP系统能运行Fiori应用
  8. linux通过spi和stm32通信,双STM32通过SPI进行通信
  9. 1936 问题 B: 打印极值点下标(C语言)
  10. Spring - 理解BeanDefinition
  11. NASM环境搭建+创建虚拟软盘镜像
  12. AI和人工智能入门级视频
  13. 计算机显示屏知识,电脑显示器知识大全
  14. CCNet: Criss-Cross Attention for Semantic Segmentation阅读笔记
  15. 【高通量测序】.dna文件批量读取CAG重复序列长度
  16. linux添加一块20G的scsi硬盘,Linux下添加第二块scsi硬盘.doc
  17. 修改hexo的主题nexT中的Pisces主题宽度
  18. Python实现计算器四则运算小程序
  19. HashMap扩容全过程
  20. 【STM32F429的DSP教程】第2章 Matlab R2018a的安装

热门文章

  1. SSH端口转发(ssh隧道)
  2. 电厂计算机房消防,3 燃煤电厂建(构)筑物的火灾危险性分类、耐火等级及防火分区...
  3. 智能车单车组之平衡控制理论分析篇
  4. 无业务不技术:那些誓用区块链重塑的行业,发展怎么样了?
  5. html怎么设置加qq,qq密友 怎么把QQ好友加为密友啊?
  6. 同轴电缆传输容易出现哪些干扰?
  7. 机器学习讲堂 ACF 聚合通道检测
  8. 使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)
  9. 附录2-PS基本操作
  10. js如何实现复制功能