
VTK程序设计
文章平均质量分 77
Dezeming
研究方向:数学原理,GPU加速技术,数据结构与算法,机器学习,深度学习神经网络,3D可视化,计算机图形学,图像处理,计算机视觉,Qt程序设计,C++编程
曾学习和研究过:Java,51,stm32,msp430等单片机,嵌入式ARM,DSP,模拟/数字电路,树莓派
展开
-
VTK程序设计系列
在使用VTK的过程中,针对有些难以实现的细节性需求,本人在工程中找到了相关解决方案,并整理为博客。目前已完成3个版块,在以后程序设计如果用到则增加新的版块内容。一、VTK显示像素图。将数组构成的图片显示在VTK显示区内。VTK显示像素图二、VTK的Mapper针对VTK非常重要的一种类型。VTK的Mapper三、VTK交互器样式介绍VTK图形图像开发中的交互器样式类...原创 2020-03-27 11:49:16 · 6751 阅读 · 0 评论 -
Windows11的VTK安装:VS201x+Qt5/Qt6 +VTK7.1/VTK9.2.6
需要提前安装好VS2017和VS2019和Qt VS开发控件以及Qt VS-addin。首先下载VTK,需要下载源码和data:然后这两个文件同时解压,会自动解压到一个文件夹里。原创 2023-07-22 01:00:25 · 950 阅读 · 0 评论 -
VTK体渲染应用实例:读取并可视化MHD数据的程序
全部VTK程序设计系列博客见VTK程序设计系列给代码进行了详细的注释,所以就不再赘述过程了。#include "vtkAutoInit.h"VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2VTK_MODULE_INIT(vtkInteractionStyle);#include "vtkDICOMImageReader.h"#include <vtkSmartPointe..原创 2020-11-23 10:47:59 · 1207 阅读 · 3 评论 -
VTK7.1版本显示图像的两种方法
全部VTK程序设计系列博客见VTK程序设计系列自从VTK5以后的版本对管线进行了一定的更改以后,老版的一些功能发生了改变,这里给出新版本的两个程序,用来显示一张图片:程序1:#include <vtkSmartPointer.h>#include <vtkPNGReader.h>#include <vtkImageViewer2.h>#include <vtkRenderWindowInteractor.h>#include <..原创 2020-05-23 13:54:16 · 5283 阅读 · 0 评论 -
VTK读取三维Mhd文件,并把数据存放在三维数组里
mhd文件包含一个.mhd用来存放信息,和一个.raw文件来存放数据。我们用记事本随便打开一个三维的Mhd文件:ObjectType = ImageNDims = 3BinaryData = TrueBinaryDataByteOrderMSB = FalseCompressedData = TrueCompressedDataSize = 6193601TransformMatrix = 1 0 0 0 1 0 0 0 1Offset = -125 -858 -63CenterO原创 2020-05-23 13:46:57 · 6389 阅读 · 1 评论 -
VTK交互系统 4 自定义交互器样式2 键盘鼠标交互器设置
现在我们修改一下其中一个事件函数:void my3DCameraStyle::OnLeftButtonDown(void){ vtkInteractorStyleUser::OnLeftButtonDown(); GetLastPos(m_OldPos[0], m_OldPos[1]); cout << "m_OldPos = " << m_OldPos[0]...原创 2019-11-23 22:19:50 · 9093 阅读 · 17 评论 -
VTK交互系统 3 自定义交互器样式
我觉得还是从头到尾教大家写一个交互器样式比较好,而不是直接列上一大堆程序。可能一节到两节就能写完了,因为内容也不复杂。首先我们把之前写好的数组显示vtk程序放上,我们在它的基础上添加自己想要等功能。#include<vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2)VTK_MODULE_INIT(vtkInteract...原创 2019-11-23 16:27:00 · 8595 阅读 · 2 评论 -
VTK显示像素图
VTK用来显示一些内定的数据结构,立体图像和图片很容易,但是很多人都找不到怎么显示出一张像素图。有人问我相关的技术,我整理了整理,弄成了一篇博客。先把所需的头文件包含一下:#include<vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2)VTK_MODULE_INIT(vtkInteractionStyle);VTK_...原创 2019-11-22 00:07:52 · 6443 阅读 · 0 评论 -
VTK交互系统 2 交互器样式
所谓交互器样式,就是你设置了交互器,然后它里面会有各种默认的或者你自己定义的交互方式,比如你可以设置滚轮来将图片放大或者缩小。或者你可以设置鼠标点击移动来改变摄像机的视角,从而看到物体的不同面。VTK程序需要首先捕获你的事件,然后根据你触发的事件,结合交互器的样式,来执行相应的函数。之前在学习的时候我看了很多例子,模仿着写了很多自定义的样式,但是对里面的机制有些难以理解。后来我看了《VTK...原创 2019-11-22 22:41:06 · 7371 阅读 · 0 评论 -
VTK交互系统 1 交互模式入门
在VTK中,交互一般使用 命令/观察者模式来进行交互,即观察者等待命令,一旦有命令触发,就去执行该交互函数。有两种实现模式:1. 设置回调函数 2. 继承command类,然后实现内部函数我们先看第一种方式。我们看代码,首先定义一个回调函数,注意回调函数的函数签名,除了函数名以外其他部分例如返回值,参数列表都必须一样。void MyCallbackFunc(vtkObje...原创 2019-11-21 16:59:28 · 7794 阅读 · 0 评论 -
VTK的Mapper
类vtkMapper及其派生类,把输入的数据转换成几何图元(例如转换成点,转换成线,转换成面等)进行渲染。该类存储需要进行渲染的数据,和一些渲染信息。我们经常能在vtk程序中看到vtkImageActor(派生自vtkActor)使用vtkActor::SetMapper()函数。该函数设置生成几何图元的Mapper,也就是说把负责图像显示和渲染的渲染引擎vtkActor连接到生成用于渲染的几...原创 2019-11-11 21:07:34 · 8498 阅读 · 0 评论 -
QT传输函数控件设计13 大结局
虽然感觉像是过了很久,其实时间也没有几天。我是从10月27号开始写这个系列的。从27号到11月8号,总共也就才十三天而已。本来我觉得这个比较复杂的控件要想实现可能得一个月,从解析XML文件,到图元的设计,再到实现具体细节,因为本人主业还是做算法的,很少会直接使用Qt界面编程,所以对我来说该项目也算是一个挑战。该控件的实现,到目前大概3千行代码,里面还有很多功能尚待发掘,目前我们就只先实现这一个简单...原创 2019-11-08 19:28:39 · 6162 阅读 · 0 评论 -
QT传输函数控件设计12 自定义信号和槽
现在我们这么思考一下:我们已经在每个NodeGraphicsItem里面定义了一个指针,指向了每个原始数据的NodeXmlItem,我们可以在itemChange函数中坐标修改的时候对其进行修改,但是问题来了,我们修改了值,但是只有当更新update的时候才会重新显示位置。我们在鼠标松开事件中使用了update,但是如果鼠标不松开,我们只是单纯地移动小圆点,能不能把实时移动的信息发给上层呢?...原创 2019-11-08 19:05:32 · 6539 阅读 · 1 评论 -
QT传输函数控件设计11 包含小圆点的图形项2
然后我们写一下void TsfunGraphicsItem::itemsUpdate()函数,其实首先我们应该清空NodeGraItem列表:for(int i = 0;i < NdGraItemlist.count();i++){ scene()->removeItem(NdGraItemlist[i]); delete NdGraItemlist[i]; } N...原创 2019-11-08 18:10:34 · 6161 阅读 · 1 评论 -
QT传输函数控件设计10 包含小圆点的图形项
在NodeGraphicsItem小圆点类里面加入新的成员: double lastPos; double currentPos; double nextPos; double opacity; void setMargin(int x,int y,int w,int h); int xStart; int yStart; i...原创 2019-11-08 17:50:20 · 6265 阅读 · 0 评论 -
QT传输函数控件设计9 初步设计视口类
我们先按照之前的布局设计中,先把 TsfunDockWidget 以及 TsfunWidget 对象设计完。注意 DockWidget 里的中心窗体设置。然后定义继承自QWidget的类TsfunWidget类以及继承自QGraphicsView类的TsfunView类,并把这个类实例化加到TsfunWidget类里面,为了玩玩布局我们也可以在TsfunWidget的布局里再加个按键(没啥用,就是...原创 2019-11-08 15:38:28 · 6161 阅读 · 0 评论 -
QT传输函数控件设计8 设计小圆点
首先看一下小圆点:如图,左图上有很多小圆点,这些小圆点是由蓝色的中心和红边构成。点击小圆点的时候,小圆点的红边会消失,松开鼠标红边又会出现。我们首先要把这些小圆点能够显示在QGraphicsView上面,还记得之前讲过的图形项嘛?每个小圆点就是一个图形项。现在我们就开始设计图形项类。因为这是圆的,所以我们就继承一个QGraphicsEllipse椭圆类。#ifndef __Nod...原创 2019-11-08 00:13:08 · 6685 阅读 · 0 评论 -
QT传输函数控件设计7 边界和布局规划
我们先定义一个关于边界的类。因为我们在设计的时候,需要明确很多因素:1.我们假设把整个针对传输函数来设计的控件都放在一个QDockWidget上,那么首先我们先构思一个DockWidget这些设计以后真正设计的时候还会讲,这里提到只是为了方便说明布局。2.在DockWidget上,我们需要定义很多控件,这些控件中的一个是之前我们看到的一个大的内部窗体结构,以及其他内部窗体结构...原创 2019-11-07 23:40:02 · 6189 阅读 · 1 评论 -
QT传输函数控件设计6 设计Dock窗体结构
我们新建一个QT类,叫MyTransferFuncDockWidget,继承自QDockWidget。然后在继承mainWindow的类中声明MyTransferFuncDockWidget *mytfDockWidget;然后在其构造函数中new一个实体。因为我们有许多功能,多个功能作为一个功能集体,我们把相同功能的控件都定义在一个GroupBox里面,首先我们先定义一个关于节...原创 2019-11-06 10:23:30 · 6188 阅读 · 0 评论 -
QT传输函数控件设计5 显示体渲染效果
初期为了简单,我们就直接在open()函数下面直接继续写。为了保证没有读到文件就不处理下面的显示,我们就在上面定义一个flag,只有在文件数量>20的时候,flag = 1; 然后接着写: if (flag == 1) { }我们接下来的功能都是在这里面实现的。注意先包含一堆头文件:#include <vtkImageData.h>#include ...原创 2019-11-03 15:48:31 · 6418 阅读 · 0 评论 -
QT传输函数控件设计4 接着进行融合
既上节之后,我们要定义一个打开文件的菜单,用于打开我们想用来可视化的文件:在头文件类中声明:pravite: QAction *action; QToolBar *mainToolBar; QStatusBar *statusBar; QMenuBar *menuBar; QMenu *menu; void setup();然后写实体:(注意这里面有些东西是从以前...原创 2019-11-03 12:29:32 · 6138 阅读 · 0 评论 -
QT传输函数控件设计3 QVTKWidget和QT图形界面的融合
当然我们的项目不可能真的是零基础的,如果你连什么是QDockWidget,连怎么写个信号和槽都不清楚,那就去学QT吧,反正又不难,期待我们再会。之前是因为xml和图形项场景之类的我觉得可能大家接触比较少,而且网上的资料特别是xml文件解析的资料不太全面,所以我才单独花了一周多的时间写了二十多节来讲解的,这里关于QWidget的常见的各种控件的用法不再做单独解释(反正很简单,有点经验一看就知道啥...原创 2019-11-03 11:46:34 · 7271 阅读 · 0 评论 -
QT传输函数控件设计2 体渲染和VTK
程序我就先直接放这里:#include<vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2)VTK_MODULE_INIT(vtkInteractionStyle);VTK_MODULE_INIT(vtkRenderingFreeType);VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)...原创 2019-11-02 21:33:18 · 6496 阅读 · 1 评论