VTK 视角的旋转、平移、缩放
在CAD/CAM软件中,都需要旋转、平移和缩放视角,来观察操作图形。由于VTK定义的交互的类型不是很适用,所有通过定义一套自己的交互方式。
在下面代码中,鼠标左键平移,滚轮缩放,右键旋转。
先定义一个交互类型。继承自vtkInteractorStyleTrackballCamera,并且交换按键。
class Normal3DCameraStyle : public vtkInteractorStyleTrackballCamera
{
public:
static Normal3DCameraStyle* New();
vtkTypeMacro(Normal3DCameraStyle, vtkInteractorStyleTrackballCamera); virtual void OnLeftButtonDown(void);
virtual void OnLeftButtonUp(void);
virtual void OnRightButtonDown(void);
virtual void OnRightButtonUp(void);
virtual void OnMiddleButtonDown(void);
virtual void OnMiddleButtonUp(void);
virtual void OnMouseWheelForward(void);
virtual void OnMouseWheelBackward(void);
virtual void OnMouseMove(void);
}; vtkStandardNewMacro(Normal3DCameraStyle);//必须加!!!! void Normal3DCameraStyle::OnLeftButtonDown(void)
{
vtkInteractorStyleTrackballCamera::OnMiddleButtonDown();
} void Normal3DCameraStyle::OnLeftButtonUp(void)
{
vtkInteractorStyleTrackballCamera::OnMiddleButtonUp();
} void Normal3DCameraStyle::OnRightButtonDown(void)
{
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
} void Normal3DCameraStyle::OnRightButtonUp(void)
{
vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
} void Normal3DCameraStyle::OnMiddleButtonDown(void)
{ } void Normal3DCameraStyle::OnMiddleButtonUp(void)
{ } void Normal3DCameraStyle::OnMouseWheelForward(void)
{
vtkInteractorStyleTrackballCamera::OnMouseWheelForward();
}; void Normal3DCameraStyle::OnMouseWheelBackward(void)
{
vtkInteractorStyleTrackballCamera::OnMouseWheelBackward();
}; void Normal3DCameraStyle::OnMouseMove(void)
{
vtkInteractorStyleTrackballCamera::OnMouseMove();
}
添加Normal3DCameraStyle到交换器中
vtkNew<Normal3DCameraStyle> style;
ui.vtk_main->interactor()->SetInteractorStyle(style);
下面是完整代码
class Normal3DCameraStyle : public vtkInteractorStyleTrackballCamera
{
public:
static Normal3DCameraStyle* New();
vtkTypeMacro(Normal3DCameraStyle, vtkInteractorStyleTrackballCamera); virtual void OnLeftButtonDown(void);
virtual void OnLeftButtonUp(void);
virtual void OnRightButtonDown(void);
virtual void OnRightButtonUp(void);
virtual void OnMiddleButtonDown(void);
virtual void OnMiddleButtonUp(void);
virtual void OnMouseWheelForward(void);
virtual void OnMouseWheelBackward(void);
virtual void OnMouseMove(void);
}; vtkStandardNewMacro(Normal3DCameraStyle);//必须加!!!! void Normal3DCameraStyle::OnLeftButtonDown(void)
{
vtkInteractorStyleTrackballCamera::OnMiddleButtonDown();
} void Normal3DCameraStyle::OnLeftButtonUp(void)
{
vtkInteractorStyleTrackballCamera::OnMiddleButtonUp();
} void Normal3DCameraStyle::OnRightButtonDown(void)
{
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
} void Normal3DCameraStyle::OnRightButtonUp(void)
{
vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
} void Normal3DCameraStyle::OnMiddleButtonDown(void)
{ } void Normal3DCameraStyle::OnMiddleButtonUp(void)
{ } void Normal3DCameraStyle::OnMouseWheelForward(void)
{
vtkInteractorStyleTrackballCamera::OnMouseWheelForward();
}; void Normal3DCameraStyle::OnMouseWheelBackward(void)
{
vtkInteractorStyleTrackballCamera::OnMouseWheelBackward();
}; void Normal3DCameraStyle::OnMouseMove(void)
{
vtkInteractorStyleTrackballCamera::OnMouseMove();
} QtVtkTest::QtVtkTest(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this); QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat()); vtkNew<vtkRenderer> renderer;
vtkNew<vtkNamedColors> colors; //定义球
vtkNew<vtkSphereSource> sphereSource;
sphereSource->SetRadius(5);
sphereSource->SetCenter(5, 0, 0);
vtkNew<vtkPolyDataMapper> sphereMapper;
sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
vtkNew<vtkActor> sphereActor;
sphereActor->SetMapper(sphereMapper);
sphereActor->GetProperty()->SetColor(colors->GetColor4d("Green").GetData());
sphereActor->GetProperty()->EdgeVisibilityOn(); //显示线框 renderer->AddActor(sphereActor); renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData()); vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
renderWindow->AddRenderer(renderer);
renderWindow->SetWindowName("RenderWindowNoUIFile"); ui.vtk_main->setRenderWindow(renderWindow);
//
vtkNew<Normal3DCameraStyle> style;
ui.vtk_main->interactor()->SetInteractorStyle(style);
}
VTK 视角的旋转、平移、缩放的更多相关文章
- OpenGL中旋转平移缩放等变换的顺序对模型的影响
l 前提: 0x01. 假设绘制顶点的语句为Draw Array,变换的语句(旋转.平移.缩放)为M,而 M0; M1; M2; Draw Array; 则称对Array先进行M2再进行M1.M0 0 ...
- Three.js三维模型几何体旋转、缩放和平移
创建场景中的三维模型往往需要设置显示大小.位置.角度,three.js提供了一系列网格模型对象的几何变换方法,从WebGL的角度看,旋转.缩放.平移对应的都是模型变换矩阵,关于矩阵变换内容可以观看本人 ...
- 【Unity3D】简单常用的功能实现2——视角的跟随、旋转、缩放
[视角的跟随.旋转.缩放实现] 首先,在实现这些功能之前,我们给Hierarchy面板中的主摄像机额外包装几层Empty Object,形成一个新的摄像机结构,如下图(当然这些空物体的命名大家按自己方 ...
- 【转载】Unity中矩阵的平移、旋转、缩放
By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文 ...
- 二维坐标的平移,旋转,缩放及matlab实现
本文结合matlab 软件解释二维坐标系下的平移,旋转,缩放 首先确定点在二维坐标系下的表达方法,使用一个1*3矩阵: Pt = [x,y,1] 其中x,y 分别为点的X,Y坐标,1为对二维坐标的三维 ...
- opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移
常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...
- WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示
原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图:XAML代码:// Transform.XAML< ...
- 使用C++实现图形的旋转、缩放、平移
编译环境:VS2017 编译框架:MFC 实验内容:显示一个三角形,并将其绕中心进行旋转.缩放以及平移等操作 实验步骤: 1.打开VS2017,并创建MFC项目,具体方法参见:http://www.c ...
- 初学Direct X(7) ——位图的旋转,缩放以及平移
初学Direct X(7) --位图的旋转,缩放以及平移 本文旨在实现通过D3DXMatrixTransformation2D函数实现位图的旋转,缩放以及平移操作,但是具体的原理部分会在后面进一步的探 ...
- threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸
这个小案例是当初我在学习的时候,小的一个小案例,代码还需要进一步优化:还请谅解~~:主要用到了threeJS创建mesh,创建平面,设置mesh的平移,旋转.缩放.自传.透明度.拉伸等这些小功能: 采 ...
随机推荐
- Go runtime 调度器精讲(七):案例分析
0. 前言 前面用了六讲介绍 Go runtime 调度器,这一讲我们看一个关于调度 goroutine 的程序案例分析下调度器做了什么.需要说明的是,这个程序和抢占有关,抢占目前为止还没有介绍到,如 ...
- JavaScript Bom和Dom的一般性详解
一.JavaScript的组成 JavaScript的实现包括以下3个部分: ECMAScript(核心) 描述了JS的语法和基本对象. 文档对象模型 (DOM) 处理网页内容的方法和接口 浏览器对象 ...
- MyBatisPlus——简介
概述 MyBatisPlus(简称MP)是基于MyBatisPlus框架基础上开发的增强型工具,旨在简化开发.提高效率 国内开发的技术 特性 无侵入:只做增强不做改变,不会对现有工程产生影响 强大的C ...
- 深度DFS 和 广度BFS搜索算法学习
目录 广度优先的动态图 深度优先的动态图 广度和深度的具体步骤 深度和广度的应用场景 图的两种遍历方式: 深度优先遍历(DFS--Depth First Search) 广度优先遍历(BFS--Bre ...
- 2款.NET开源且免费的Git可视化管理工具
Git是什么? Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发.Git最初是由Linux开发者Linus Torvalds创建的,它具有高效.灵活.稳定等优 ...
- 北京智和信通 | 无人值守的IDC机房动环综合监控运维
随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...
- Spring技术书的代码资源下载
我是清华社编辑,这些资源获得作者授权,免费提供给读者个人学习使用.禁止任何形式的商用. 二维码用微信扫,按提示填写你的邮箱,转到电脑上打开邮箱下载.清华国企网盘,比较快速.安全.放心下载. 百度网盘链 ...
- 《Spring Data JPA从入门到精通》内容简介、前言
内容简介 本书以Spring Boot为技术基础,从入门到精通,由浅入深地介绍Spring Data JPA的使用.有语法,有实践,有原理剖析. 本书分为12章,内容包括整体认识JPA.JPA基础查询 ...
- C# 中的四种整形数据
// C# 中有四种整数类型 byte short int long byte bMax = byte.MaxValue; /// 255 最大值 byte bMin = byte.MinValue; ...
- 【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的证书
问题描述 当根据Cloud Service (Extended Support) 文档更新证书 ( https://docs.azure.cn/zh-cn/cloud-services-extende ...