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

使用C#开发VTK笔记(二)Part1-VTK系统结构解析

一.VTK系统架构初步分析

1.VTK开源软件项目的背景

VTK全称是Visualization ToolKit,是一个开源的软件项目,具体项目为多个c++类库构成,由原生的C++语言进行开发,同时通过众多的翻译接口层(.net,Python,Java)包装为支持C#(所有.NET语言),Python和Java,Js的开发工具。
VTK是在三维函数库OpenGL 的基础上采用面向对象的设计的,最初是GE(应该是医学设备相关部门)研发部的几位员工在公司支持下完成,后来他们成立了Kitware公司来发展这个项目,软件的主要功能是作为一个应用方便广泛且功能强大的二维和三维可视化工具开发。
由于初始开发者有一定的医学背景,所以比较有意思的一点是,软件中集成了很多医学相关的比如超声波造影影像图分析,以及以复杂的热力图,彩虹图等功能,可视化功能确实很强大。但就工程设计而言,在模型支持上,似乎只是在点云和网格面这些数据类型支持比较好。对于工程设计领域比较流行的Catia,Ug,Pro/E,AutoCAD等数据格式以及中间格式Iges,Step的支持都比较欠缺。这一点,应该和另一个开源项目Occ(OpenCasCade)有所不同,因为Occ是由法国Matra Datavision公司开发的CAD/CAE/CAM软件平台,相对来说开发目标上就有比较面向工程领域。
好了,这只是我从网络上找到的一些信息的理解,很多可能存在偏差,随着后面学习的深入,应该在理解上会有所变化吧。

2.VTK项目的核心类

我数了一下VTK9.2项目的dll,总计149个,相对与早期版本已经非常庞大。结合VTK的介绍,我梳理了以下VTK的核心类,后续也会根据理解进行更新。

  1. vtkRenderWindow 渲染窗口和vtkRenderer 渲染器
    vtkRenderWindow是VTK引擎与当前软件的图形接口,以控件方式加载到当前软件的图形窗口的容器中。
    vtkRenderer 渲染器是将内容渲染到vtkRenderWindow的绘制接口。
    用户可以绘制多个窗口vtkRenderWindow,而每个窗口也可以有多个Vtk的渲染区域,因此软件中可以存在多个vtkRenderWindow和vtkRenderer。
  2. vtkRenderWindowInteractor窗口交互类
    vtkRenderWindowInteractor是用户与渲染窗口的交互工具,可以用来操纵摄像机平移,旋转,缩放视口,也可以用来拾取窗口中生成的对象。
  3. vtkLight光线类
    vtkLight在3D环境下设置光线的参数,2D环境下不可用。
  4. vtkCamera摄像机类
    vtkCamera用来设置3D场景中的摄像机,对相机进行控制,也可以用来控制透视等观察方法。
  5. vtkActor、vtkActor2D类,是渲染窗口中的具体角色
    这是非常重要的类,也包含很多的子类,比较常用的点/线/面/文字/立方体/球形/复杂图形/点云都是以Actor的形式加载到Render中的,当然这里有一个加载的流程。
    vtkActor用于3D,而vtkActor2D用于2D。
    vtkActor的建立和加载流程: 以圆柱体创建为例,经过观察代码,流程如下:
Created with Raphaël 2.3.0

http://www.kler.cn/a/417332.html

相关文章:

  • matlab simulink 汽车四分之一模型轮胎带阻尼
  • 如何利用Python爬虫获取商品销量详情:应对eBay反爬策略的实战指南与代码示例
  • 解决使用python提取word文档中所有的图片时图片丢失的问题
  • 华为支付-免密支付接入免密代扣说明
  • 寒假2.5
  • arm 下 多线程访问同一变量 ,使用原子操作 性能差问题
  • 使用Github Action将Docker镜像转存到阿里云私有仓库,供国内服务器使用,免费易用
  • TouchGFX源码分析1---(Event类 和Click Event类)
  • C++多态的实现原理
  • 最短距离和路径问题 ford
  • 数据结构-图-领接表存储
  • HDLCPPP原理与配置
  • 关于最近win11不能使用ie,而不能使用考试客户端的解决方法
  • 人工智能 实验2 jupyter notebook平台 打印出分类器的正确率
  • 11 设计模式之代理模式(送资料案例)
  • 373. 查找和最小的 K 对数字
  • QTableView 实现表格及相关用法(C++)(QStandardItemModel+QItemSelectionModel)
  • [Linux] 进程间通信——匿名管道命名管道
  • 提升异步编程性能:使用 uvloop 加速你的 Python 应用
  • 云硬盘挂载到新服务器,怎么恢复数据?
  • 命令提示符窗口(CMD)控制windows操作系统
  • MySQL自启动失败(MySQL不能开机自启)解决方案_MySQL开机自启疑难杂症解决,适用Win11/Win10
  • Redis 分布式锁实现方案
  • Leecode刷题C语言之判断是否可以赢得数字游戏
  • 在CentOS7上更换为阿里云源
  • 【RK3588 Linux 5.x 内核编程】-发送信号到用户空间