QT传输函数控件设计1 引子

2024-04-07 21:08

本文主要是介绍QT传输函数控件设计1 引子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这又是一个系列的开头。

说实话本来我想先写写关于QT三维物体显示的功能的,因为后面也会遇到。但是鉴于有些朋友表示急需使用关于渲染的传输函数控件,这里我就先把这个传输函数控件搞定,然后再来写一下怎么实现小三维模型显示和交互。

老规矩:各位务必放心,本人开坑必填,预计一周内填完此坑。

各位注意了,我之前写的关于xml文件读写,以及QT图形图像显示的系列内容都是为这个来做铺垫。以前讲过的这两个系列的内容大部分我是不会再讲了,各位如果有看不懂的函数可以自己百度,也可以去看完我的这两个系列,相信你一定会有收获。而且就算您的需求不是做这么一个控件,相信学完这个博客也能加深对QT程序设计的理解。

哦对了,提一句,xml文件读写系列的《XML语言数据读写理解8》一直到《XML语言数据读写理解16》,这部分内容都是在做这个传输函数控件。里面的内容也都是跟设置传输函数控件读写类有关的,大家务必注意到这一点。也就是说我们开始做的内容是从《XML语言数据读写理解16》已经完成的内容开始的。

现在的情况是:我们已经有了xml文件读写类,其中最底层是节点读取类,然后是TsfunItem读取类,最后是根节点TsfunGroup读取类,用来调用低层次的类来实现读取整个记载了传输函数控件的xml文件的类。

我们要实现通过移动绘图面板上的图元,来实现定义修改传输函数节点的例子。

现在我再来说说几句,给之前不了解传输函数控件的人讲一下我们要做个什么东西。

首先我们有这个一个xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<TsfunGroup><TsfunItem Name="normalMode"><Nodes><Node><NormalizedIntensity Value="0"/><Opacity Value="0"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.23597"/><Opacity Value="0"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.288538"/><Opacity Value="0.0179028"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.288578"/><Opacity Value="0.563501"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.35417"/><Opacity Value="1"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="1"/><Opacity Value="1"/><Emission G="0" R="0" B="0"/></Node></Nodes><DensityScale Value="100"/><ShadingType Value="2"/><GradientFactor Value="3"/></TsfunItem><TsfunItem Name="maxMode"><Nodes><Node><NormalizedIntensity Value="0"/><Opacity Value="0"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.13597"/><Opacity Value="0"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.188538"/><Opacity Value="0.0279028"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.288578"/><Opacity Value="0.363502"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="0.45417"/><Opacity Value="1"/><Emission G="0" R="0" B="0"/></Node><Node><NormalizedIntensity Value="1"/><Opacity Value="1"/><Emission G="0" R="0" B="0"/></Node></Nodes><DensityScale Value="100"/><ShadingType Value="2"/><GradientFactor Value="3"/></TsfunItem>
</TsfunGroup>

然后我们要做一个界面:

注意图中的6个节点,对应了上面xml文件的6个Node,然后,我们可以在底下自己选择节点,实现对单个节点的修改,通过设置diffuse,specular以及emission,我们可以设置参数。为了简单我们就不加diffuse和specular了,只保留一个emission。然后是opacity,intensity表示这个点的横纵坐标(从0—1映射到图中的-1000—3095)

绘制图元的场景上有格子,以及背景是一个曲线图,曲线图是干嘛用的,我们以后再慢慢解释。面板底下有三个长矩形,用来对应表示上面的各个节点之间不同的颜色之间的混合过渡形成的混合颜色,没看懂没关系,这个的作用以后我们也会慢慢解释。

这是软件exposureRender的传输函数效果。现在你们什么都不需要知道,你们只需要知道,通过我们设置不同的节点,我们可以显示不同的效果。

那我们下一节就进入正题,开始讲一下VTK与体渲染显示。大家放心,这个我只讲一节,充其量就是给大家一个模板程序,我们要实现可以通过自己设置传输函数来显示不同效果的医学图像三维可视化系统。

这篇关于QT传输函数控件设计1 引子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883675

相关文章

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function