Learning vtkjs之hello vtk

学习vtkjs

最近由于工作需要,开始学习vtkjs的相关内容,发现其实在医疗和工业领域,这个vtk的库的example还是非常有帮助,但是实际用的一些开发工具,或者研发生态却没有three的好,也就是能抄写的东西不多,所以给自己开一个坑吧,先学习一下这个库使用,整理一下自己使用过程的一些心得。

主要的渲染逻辑

目前接触的第一个例子是hellvtk,也比较简单,流程是从source -> mapper -> actor,其中我理解到actor就是类似three里面的mesh,是一个基础渲染物体,vtk的应用场景是典型不同的,它更侧重于一些工程数据的渲染,比如切面,等值线,体渲染。

数据处理管理管线

看了别人文章可以了解到,其实vtk里面有一个比较重要的数据管线,这些都是在前端完成的,所以,在想是不是可以把这部分功能移植到three上,然后three之前开发的功能就不用修改了,同时可以拓展一下接入的数据的种类

Hellovtk

上面说的,可能需要更多了解vtk之后才知道,目前计划是先把所有的vtk的例子跑一边,然后在react的前端框架里面简单封装应用一下,逼迫自己强制学习,就给自己开一个新的坑

第一个hellovtk的例子代码

js 复制代码
import React, { useState, useRef, useEffect } from "react";
import Viewer from "../vtkView/Viewer";

function HelloVTK() {
  const vtkContainerRef = useRef(null);
  const [coneResolution, setConeResolution] = useState(6);
  const [representation, setRepresentation] = useState(2);
  let viewer3D = useRef(null);

  useEffect(() => {
    if (!viewer3D.current) {
      viewer3D.current = new Viewer(vtkContainerRef.current);
      viewer3D.current.init();
      viewer3D.current.addCone();
    }

    return () => {
      if (viewer3D.current) {
        viewer3D.current.destory();
        viewer3D.current = null;
      }
    };
  }, [vtkContainerRef]);

  useEffect(() => {
    if (viewer3D.current) {
      viewer3D.current.coneSource.setResolution(coneResolution);
      viewer3D.current.render();
    }
  }, [coneResolution]);

  useEffect(() => {
    if (viewer3D.current) {
      viewer3D.current.actor.getProperty().setRepresentation(representation);
      viewer3D.current.render();
    }
  }, [representation]);

  return (
    <div>
      <div
        ref={vtkContainerRef}
        style={{ position: "absolute", width: "100%", height: "100%" }}
      />
      <table
        style={{
          position: "absolute",
          top: "25px",
          left: "25px",
          background: "white",
          padding: "12px",
        }}
      >
        <tbody>
          <tr>
            <td>
              <select
                value={representation}
                style={{ width: "100%" }}
                onInput={(ev) => setRepresentation(Number(ev.target.value))}
              >
                <option value="0">Points</option>
                <option value="1">Wireframe</option>
                <option value="2">Surface</option>
              </select>
            </td>
          </tr>
          <tr>
            <td>
              <input
                type="range"
                min="4"
                max="80"
                value={coneResolution}
                onChange={(ev) => setConeResolution(Number(ev.target.value))}
              />
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  );
}

export default HelloVTK;

这个例子是参考了官网的vtkjs +react写的

全部代码都放到github上了
新坑_Learning vtkjs_git地址

关注我,我持续更新vtkjs的example学习案例

也欢迎各位给我提意见,技术交流~

大鸿

WeChat : HugeYen

WeChat Public Account : BIM树洞

做一个静谧的树洞君

用建筑的语言描述IT事物;

用IT的思维解决建筑问题;

共建BIM桥梁,聚合团队。

本学习分享资料不得用于商业用途,仅做学习交流!!如有侵权立即删除!!

相关推荐
IT_陈寒15 分钟前
JavaScript开发者必知的5个性能杀手,你踩了几个坑?
前端·人工智能·后端
跟着珅聪学java19 分钟前
Electron 精美菜单设计
运维·前端·数据库
日光倾19 分钟前
【Vue.js 入门笔记】闭包和对象引用
前端·vue.js·笔记
EstherNi21 分钟前
左右两侧定位的效果,vue3
javascript·vue.js
一只程序熊26 分钟前
UniappX 未找到 “video“ 组件,已自动当做 “view“ 组件处理。请确保代码正确,或重新生成自定义基座后再试。
前端
林小帅27 分钟前
【笔记】xxx 技术分享文档模板
前端
雾岛心情33 分钟前
【HTML&CSS】HTML为文字添加格式和内容
前端·css·html
心.c41 分钟前
如何在项目中减少 XSS 攻击
前端·xss
Rsun045511 小时前
Vue相关面试题
前端·javascript·vue.js
TON_G-T1 小时前
前端包管理器(npm、yarn、pnpm)
前端