欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Learning vtkjs之ImageMarchingSquares

Learning vtkjs之ImageMarchingSquares

2025/5/1 23:21:02 来源:https://blog.csdn.net/weixin_44204198/article/details/147630157  浏览:    关键词:Learning vtkjs之ImageMarchingSquares

体积 等值线处理

介绍

vtkImageMarchingSquares - 对图像(或来自体积的切片)进行等值线处理

给定一个指定的等值,使用Marching Squares算法(3D Marching Cubes算法的2D版本)生成等值线。

效果

在这里插入图片描述
自己增加了两个小球,主要是对比一下ISO前后的效果

核心代码

参数更新

const updateParam = (value) => {const { mSquares, renderWindow } = context.current;mSquares.setSlicingMode(value);setState({...state,slicingMode: value,});renderWindow.render();};

主要流程

const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerRef.current,});const renderer = fullScreenRenderer.getRenderer();const renderWindow = fullScreenRenderer.getRenderWindow();const { Operation } = vtkImplicitBoolean;const actor = vtkActor.newInstance();renderer.addActor(actor);const mapper = vtkMapper.newInstance();actor.setMapper(mapper);// Build pipelineconst sphere = vtkSphere.newInstance({center: [-2.5, 0.0, 0.0],radius: 3.0,});const sphere2 = vtkSphere.newInstance({center: [2.5, 0.0, 0.0],radius: 0.5,});// const plane = vtkPlane.newInstance({ origin: [0, 0, 0], normal: [0, 1, 0] });const impBool = vtkImplicitBoolean.newInstance({operation: Operation.UNION,functions: [sphere, sphere2],});const sample = vtkSampleFunction.newInstance({implicitFunction: impBool,sampleDimensions: [50, 50, 50],modelBounds: [-5.0, 5.0, -2.0, 2.0, -1.0, 1.0],});// Isocontourconst mSquares = vtkImageMarchingSquares.newInstance({ slice: 1 });mSquares.setSlicingMode(2);// Connect the pipeline propermSquares.setInputConnection(sample.getOutputPort());mapper.setInputConnection(mSquares.getOutputPort());// Update the pipeline to obtain metadata (range) about scalarssample.update();const cValues = [];const [min, max] = sample.getOutputData().getPointData().getScalars().getRange();const step = 20;for (let i = 0; i < step; ++i) {cValues[i] = min + (i / (step - 1)) * (max - min);}mSquares.setContourValues(cValues);mSquares.setSlice(25);// Create an outline// Bounding boxconst outline = vtkOutlineFilter.newInstance();outline.setInputConnection(sample.getOutputPort());const outlineMapper = vtkMapper.newInstance();outlineMapper.setInputConnection(outline.getOutputPort());const outlineActor = vtkActor.newInstance();outlineActor.setMapper(outlineMapper);renderer.addActor(outlineActor);context.current = {mSquares,renderer,renderWindow,};// 同步sphereconst sphereReference = createSphere([-2.5, 0.0, 0.0], 3.0);renderer.addActor(sphereReference);const sphereReference2 = createSphere([2.5, 0.0, 0.0], 0.5);renderer.addActor(sphereReference2);renderer.resetCamera();renderWindow.render();

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

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

大鸿

WeChat : HugeYen
WeChat Public Account : BIM树洞

做一个静谧的树洞君

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

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

共建BIM桥梁,聚合团队。

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词