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

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桥梁,聚合团队。

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

相关文章:

  • Qt/C++面试【速通笔记六】—Qt 中的线程同步
  • 代码随想录算法训练营Day39
  • 运用ESS(弹性伸缩)技术实现服务能力的纵向扩展
  • DeepSeek-Prover-V2-671B
  • 数据编码(Encoding)
  • 01_K近邻
  • 网络基础-----C语言经典题目(12)
  • kivy android打包buildozer.spec GUI配置
  • LeetCode 1295.统计位数为偶数的数字:模拟
  • 4:机器人目标识别无序抓取程序二次开发
  • 4.30阅读
  • 变量char2、*char2、pChar3、*pChar3的存储位置
  • Qwen3-32B的幻觉问题
  • uv安装及使用
  • C++初阶-string类2
  • Vue Router路由原理
  • 网工_ICMP协议
  • ZYNQ MPSOC之PL与PS数据交互DMA方式
  • MCP 服务器搭建【sse 类型】实现上市公司年报查询总结, 127.0.0.1:8000/sse直接配置配合 Cherry Studio使用简单
  • 讯飞星辰焕新发布!Agent规模化应用的通关密码
  • 人民日报社论:坚定信心、奋发有为、创新创造——写在“五一”国际劳动节
  • 原国家有色金属工业局副局长黄春萼逝世,享年86岁
  • 广东省副省长刘红兵跨省调任湖南省委常委、宣传部长
  • 四川省社科联期刊:不建议在读硕士、博士将导师挂名为第一作者
  • 江苏银行一季度净赚近98亿增逾8%,不良贷款率微降
  • 视觉周刊|2025上海车展的科技范