当前位置: 首页 > news >正文

【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮,如下图所示:在这里插入图片描述
本文介绍如何实现。

FastCAE集成了Python解析器,当单击按钮时,中间用Python执行的,最后调用MainWindow.dll库接口实现的。

具体的Python代码在Python模块的py文件夹下的MainWindow.py文件中。这几个按钮都是调用的setView方法,只是入参不同而已。
在这里插入图片描述

MainWindow.dll库对外的接口在MainWindowPy.h文件中定义。这里调用的是setView接口。
在这里插入图片描述
继续跟踪代码,发现setView具体实现在graphWindowBase.cpp文件中。具体代码如下:

void GraphWindowBase::setView(QString view)
{if (view.toLower() == "fit")fitView();else if (view.toLower() == "xplus")setViewXPlus();else if (view.toLower() == "xminus")setViewXMiuns();else if (view.toLower() == "yplus")setViewYPlus();else if (view.toLower() == "yminus")setViewYMiuns();else if (view.toLower() == "zplus")setViewZPlus();else if (view.toLower() == "zminus")setViewZMiuns();
}

其具体实现只是根据入参不同调用不同的方法。适应窗口(Fit window)调用的是fitView方法,我们来看其实现:

void Graph3DWindow::fitView()
{resetCamera();
}void Graph3DWindow::resetCamera()
{_render->ResetCamera();_renderWindow->Render();this->mouseWheelMove();
}void Graph3DWindow::setViewXPlus()
{vtkCamera *camera = _render->GetActiveCamera();camera->SetViewUp(0, 0, 1);camera->SetPosition(5000, 0, 0);camera->SetFocalPoint(0, 0, 0);resetCamera();
}

发现最后调用vtkRenderer的ResetCamera()方法就实现了适应窗口。其他视图调整是直接操作摄像机,指定其Up轴、位置及焦点实现的。

相关文章:

  • 【论文阅读】多模态NeRF:Cross-Spectral Neural Radiance Fields
  • LeetCode(1)合并两个有序数组【数组/字符串】【简单】
  • k8s持久化存储PV、PVC
  • 【Ruoyi管理后台】用户登录强制修改密码
  • Linux awk命令
  • 百度上线“文心一言”付费版本,AI聊天机器人市场竞争加剧
  • docker下的nginx代理转发到tomcat
  • 自然语言处理中的文本聚类:揭示模式和见解
  • Python+reuqests自动化接口测试
  • yolov5 利用Labelimg对图片进行标注
  • VR虚拟现实:VR技术如何进行原型制作
  • 数字滤波器设计---FIR 滤波器设计
  • 基于SSM的中学课内小说阅读与学习系统的设计与实现
  • app自动化测试(Android)--显式等待机制
  • 【面经】api接口响应超时如何排查解决
  • 【刷算法】从上往下打印二叉树
  • Java 网络编程(2):UDP 的使用
  • js递归,无限分级树形折叠菜单
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • QQ浏览器x5内核的兼容性问题
  • Vue.js-Day01
  • WebSocket使用
  • 从零开始的无人驾驶 1
  • 服务器之间,相同帐号,实现免密钥登录
  • 我从编程教室毕业
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小试R空间处理新库sf
  • 写代码的正确姿势
  • 应用生命周期终极 DevOps 工具包
  • 正则表达式小结
  • python最赚钱的4个方向,你最心动的是哪个?
  • 正则表达式-基础知识Review
  • ​ssh免密码登录设置及问题总结
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #1015 : KMP算法
  • #HarmonyOS:Web组件的使用
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • %@ page import=%的用法
  • ()、[]、{}、(())、[[]]命令替换
  • (arch)linux 转换文件编码格式
  • (笔试题)合法字符串
  • (二)构建dubbo分布式平台-平台功能导图
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (十三)Flask之特殊装饰器详解
  • (算法二)滑动窗口
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core 6 集成和使用 mongodb
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖