VTK Actor ImageData polyData,Transform 平移,旋转
在计算机图形学中,三维坐标点用齐次坐标表示。利用其次坐标,可以将空间变换用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 平移,旋转相关推荐
- Unity 触屏手势控制Camera平移旋转缩放
Unity 触屏手势控制Camera平移旋转缩放 实现思路 单点触屏,位移增量控制相机平移: 两点触屏,两点位移控制相机前后移动(缩放):两点中一点不位移控制相机绕点旋转: 实现需要的API Touc ...
- 放大 旋转 css3,CSS3详解:transform 的旋转、旋转放大、放大、移动
CSS3 transform是什么? transform的含义是:改变,使-变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ...
- css对称旋转,CSS3 transform平面旋转
CSS3 transform平面旋转 1.translate(x,y) 设置盒子位移 2.scale(x,y) 设置盒子缩放 3.rotate(deg) 设置盒子旋转 4.skew(x-angle,y ...
- VTK:交叉点 PolyData 过滤器用法实战
VTK:交叉点 PolyData 过滤器用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkInter ...
- VTK:导出PolyData场景用法实战
VTK:导出PolyData场景用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkActorColl ...
- Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊)
Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊) 目录 Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊) 前言 简单的平移.旋转和放缩 其他元素的一些基本使用 qm ...
- 20P46 Premiere预设800种干扰缩放平移旋转分割拉伸全景透视扭曲炫光视频无缝转场
20P46 Premiere预设800种干扰缩放平移旋转分割拉伸全景透视扭曲炫光视频无缝转场 模版信息: 适用软件:Premiere Pro CC 2015.3 或更高版本 使用插件:无需外置插件 分 ...
- 三维空间中的几何变换-平移旋转缩放
前言 前段时间由于项目需要,深入学习了下图形几何变换,主要是绕任意轴旋转部分(其他的已有一定基础),现记录学习笔记. 文章内容部分引用并参考了下面的博客: http://netclass.csu.ed ...
- flutter Transform 矩阵变换(平移旋转缩放)
Transform其子Widget绘制时外面包着矩阵变换(transformation),通过它可以实现各种矩阵操作. 1.widget平移 效果图 2.旋转(rotate) 效果图: 3.缩放 Tr ...
最新文章
- 写给大忙人看的死锁详解
- 桌面虚拟化之资源分配
- Struts1.x系列教程(20):使用EventDispatchAction类处理一个form多个submit
- 导入Vitamio库后libBaiduMapSDK找不到
- 《Orange’s 一个操作系统的实现》3.保护模式1----pm.inc分析
- 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
- 到底什么样的ABAP系统能运行Fiori应用
- linux通过spi和stm32通信,双STM32通过SPI进行通信
- 1936 问题 B: 打印极值点下标(C语言)
- Spring - 理解BeanDefinition
- NASM环境搭建+创建虚拟软盘镜像
- AI和人工智能入门级视频
- 计算机显示屏知识,电脑显示器知识大全
- CCNet: Criss-Cross Attention for Semantic Segmentation阅读笔记
- 【高通量测序】.dna文件批量读取CAG重复序列长度
- linux添加一块20G的scsi硬盘,Linux下添加第二块scsi硬盘.doc
- 修改hexo的主题nexT中的Pisces主题宽度
- Python实现计算器四则运算小程序
- HashMap扩容全过程
- 【STM32F429的DSP教程】第2章 Matlab R2018a的安装