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

Learning vtkjs之ImageMarchingCubes

体积 等值面处理

介绍

vtkImageMarchingCubes - 对体积进行等值面处理

给定一个指定的等值,使用Marching Cubes算法生成一个等值面。

效果

在这里插入图片描述
新建了一个球,对比一下原始的(透明的)和ISO的效果

核心代码

参数部分

const updateParam = (type, obj) => {const { sample, sphere, sphereSource, mCubes, renderWindow } =context.current;let value;switch (type) {case "volumeResolution":value = obj.volumeResolution;sample.setSampleDimensions(value, value, value);renderWindow.render();setState({ ...state, ...obj });break;case "isoValue":value = obj.isoValue;mCubes.setContourValue(value);console.log(value);renderWindow.render();setState({ ...state, ...obj });break;case "sphereRadius":value = obj.sphereRadius;sphere.setRadius(value);  renderWindow.render();setState({ ...state, ...obj });break;case "computeNormals":value = obj.computeNormals;mCubes.setComputeNormals(!!value);renderWindow.render();setState({ ...state, ...obj });break;case "mergePoints":value = obj.mergePoints;mCubes.setMergePoints(!!value);renderWindow.render();setState({ ...state, ...obj });break;default:break;}};

主体流程

const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerRef.current,});const renderer = fullScreenRenderer.getRenderer();const renderWindow = fullScreenRenderer.getRenderWindow();const actor = vtkActor.newInstance();renderer.addActor(actor);const mapper = vtkMapper.newInstance();actor.setMapper(mapper);// Build pipelineconst radius = 1;const sampleDimension = 50;const sphere = vtkSphere.newInstance({center: [0.0, 0.0, 0.0],radius: radius,});// value of implicit function // x = x1 - center// x*x + y*y + z*z - R*R = valueconst sample = vtkSampleFunction.newInstance({implicitFunction: sphere,sampleDimensions: [sampleDimension, sampleDimension, sampleDimension],modelBounds: [-radius, radius, -radius, radius, -radius, radius],});// Create the isosurface by contourValueconst mCubes = vtkImageMarchingCubes.newInstance({ contourValue: 0.0 });// Connect the pipeline propermCubes.setInputConnection(sample.getOutputPort());mapper.setInputConnection(mCubes.getOutputPort());context.current = {sample,mCubes,sphere,renderer,renderWindow,};// 同步sphereconst sphereActor = createSphere();renderer.addActor(sphereActor);renderer.resetCamera();renderWindow.render();

全部代码都放到github上了
新坑_Learning vtkjs_git地址
关注我,我持续更新vtkjs的example学习案例

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

大鸿

WeChat : HugeYen
WeChat Public Account : BIM树洞

做一个静谧的树洞君

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

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

共建BIM桥梁,聚合团队。

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

http://www.xdnf.cn/news/3407.html

相关文章:

  • 100 个 NumPy 练习
  • centos安装nginx
  • 新手小白如何查找科研论文?
  • 2025深圳杯东三省数学建模竞赛选题建议+初步分析
  • 26个脑影像工具包合集分享:从预处理到SCI成图
  • 为什么定位关闭了还显示IP属地?
  • 软考中级-软件设计师 数据库(手写笔记)
  • TS类型体操练习
  • Rancher 2.6.3企业级容器管理平台部署实践
  • ESP32-C3 Secure Boot 使用多个签名 Key
  • FEKO许可管理
  • YOLO11改进-模块-引入跨模态注意力机制CMA 提高多尺度 遮挡
  • 6轴、智能、低功耗惯性测量单元BMI270及其OIS接口
  • 开源 RAG 框架对比:LangChain、Haystack、DSPy 技术选型指南
  • 常用矩阵求导
  • Java父类、子类实例初始化顺序详解
  • 92.一个简单的输入与显示示例 Maui例子 C#例子
  • 论文速读 - 通过提示工程创建全面的合成数据集以支持医疗领域模型训练
  • 【Scrapy】简单项目实战--爬取dangdang图书信息
  • 柯希霍夫积分法偏移成像中数据分布不均匀的处理方法
  • Windows和 macOS 上安装 `nvm` 和 Node.js 16.16.0 的详细教程。
  • 深度解析| 信创浪潮下,传统AD域如何破局?
  • HCIP-security常见名词
  • 软考中级-软件设计师 操作系统(手写笔记)
  • pinia-plugin-persistedstate的使用
  • win11 终端 安装ffmpeg 使用终端Scoop
  • Copilot 上线深度推理智能体 Researcher
  • Android pm命令参考
  • Windows系统下MinerU的CUDA加速配置指南
  • 6.1/Q1,浙江医院用NHANES:膳食中摄入黄酮类化合物有助于延缓生物衰老过程