Kitware/react-vtk-js 是vtk组织官方出的react vtk组件,运用于医学成像。
git地址: https://github.com/alexiusll/react-vtk-js
官方简介(机翻预警):
基于React的声明式vtk.js可视化渲染管线。换句话说,这个项目允许你利用vtk.js使用React/XML语法来描述你的3D场景。有点像X3dom的X3D格式,除了这里我们利用了React组件,可以扩展到构建自己的工具。
该项目于2021年1月份创建,属于是很新的React组件,现在迭代的速度也很快。
相比OHIF出品的 react-vtkjs-viewport 的React组件,虽然两者都是封装vtkjs的组件,但是目前 react-vtkjs-viewport 使用的VTKJS的版本老旧,为 “vtk.js”: “^11.14.0”, ,最新的commit 是2020年,可能官方后续不会再更新这个库了。但是Kitware 写的React组件中,使用的vtkjs版本为 “@kitware/vtk.js”: “18.2.0” ,版本很新。
但是目前 Kitware/react-vtk-js 可用的文档很少,所以现在记录它的使用方法。目前只能通过React props和官方的例子大致窥探一下这个组件的使用方法。
Kitware/react-vtk-js的效果:
1.首先把 Kitware/react-vtk-js 代码克隆到自己的仓库
注意!!!这个项目没有yarn.lock 文件,所以如果要安装依赖,只能使用npm install ,然后再使用yarn import 来生成相应的yarn.lock。
Kitware/react-vtk-js 的项目结构包括自己封装的vtk组件,和使用例子,使用例里面依赖了自己封装的vtk组件。
使用 yarn dev 开启测试服务器,webpack执行打包操作,webpack打包的时间比较长,然后就可以看到官方的使用例。
一个医学影像体绘制的例子:
2.体绘制实现分析
1 | import React from 'react'; |
源码结构非常简单,说明它封装的东西比较多。
对于医学影像系统而言,数据源十分重要,我们首先分析它的数据源的格式:
在Reader中有一个 url : https://data.kitware.com/api/v1/item/59e12e988d777f31ac6455c5/download
点开之后,发现它是一个 .vti格式的文件。
VTI文件大多属于Kitware公司的ParaView。ParaView是一种需要将大型数据集可视化的应用程序。ParaView是一个开源系统。ParaView是一个建立在VTK之上的交钥匙可视化系统,使VTK更容易使用一个点和点击界面。
前面写了一个生成数组的代码,似乎没有任何作用,把它直接注释掉,免得产生干扰。
先从 Reader 进行分析
它的 props
1 | // The ID used to identify this component. |
它的默认参数:
1 | port: 0, |
体渲染的时候,vtkClass 被设置为 vtkXMLImageDataReader,看看它做了什么:
1 | import vtk from '@kitware/vtk.js/vtk.js'; |
它通过 vtkClass 从vtk中拿了一个 reader
这里需要参考一下 vtk 的源码:
1 | var constructor = factoryMapping[obj.vtkClass]; |
发现它是一个工厂方法
而 vtkXMLImageDataReader 其实是一个vtk.js的 api
参考:
https://kitware.github.io/vtk-js/api/IO_XML_XMLImageDataReader.html
VolumeController
它的 props
1 | VolumeController.defaultProps = { |
它提供了一个 控制窗口
VolumeRepresentation
1 | /** |
它的props
1 | VolumeRepresentation.defaultProps = { |
最重要的 view
很长的 props
1 | View.defaultProps = { |
在示例项目中 view 只传入了 id,其他都为默认参数
基本来看,默认参数设置了一些view窗口的操作方式,和它的样式