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/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(