Learning vtkjs之ImageCropFilter
过滤器 图片数据体积裁剪
介绍
vtkImageCropFilter可以裁剪vtkImageData。这只适用于IJK对齐的平面。
请注意,由于CPU限制的裁剪,这在大型数据集上会很慢。
效果
核心代码
需要实现这个代码主要逻辑
1、设定的crop的包围盒
其实主要是IMax IMin JMin JMax KMin KMax的数值
const { cropFilter, renderWindow } = context.current;let newObj = {...state,...obj,};cropFilter.setCroppingPlanes(...Object.values(newObj));setState(newObj);renderWindow.render();
2、主流程
const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerRef.current,});const renderer = fullScreenRenderer.getRenderer();const renderWindow = fullScreenRenderer.getRenderWindow();// create filterconst cropFilter = vtkImageCropFilter.newInstance();const reader = vtkHttpDataSetReader.newInstance({ fetchGzip: true });const actor = vtkVolume.newInstance();const mapper = vtkVolumeMapper.newInstance();mapper.setSampleDistance(1.1);actor.setMapper(mapper);// create color and opacity transfer functionsconst ctfun = vtkColorTransferFunction.newInstance();ctfun.addRGBPoint(0, 85 / 255.0, 0, 0);ctfun.addRGBPoint(95, 1.0, 1.0, 1.0);ctfun.addRGBPoint(225, 0.66, 0.66, 0.5);ctfun.addRGBPoint(255, 0.3, 1.0, 0.5);const ofun = vtkPiecewiseFunction.newInstance();ofun.addPoint(0.0, 0.0);ofun.addPoint(255.0, 1.0);actor.getProperty().setRGBTransferFunction(0, ctfun);actor.getProperty().setScalarOpacity(0, ofun);actor.getProperty().setScalarOpacityUnitDistance(0, 3.0);actor.getProperty().setInterpolationTypeToLinear();actor.getProperty().setUseGradientOpacity(0, true);actor.getProperty().setGradientOpacityMinimumValue(0, 2);actor.getProperty().setGradientOpacityMinimumOpacity(0, 0.0);actor.getProperty().setGradientOpacityMaximumValue(0, 20);actor.getProperty().setGradientOpacityMaximumOpacity(0, 1.0);actor.getProperty().setShade(true);actor.getProperty().setAmbient(0.2);actor.getProperty().setDiffuse(0.7);actor.getProperty().setSpecular(0.3);actor.getProperty().setSpecularPower(8.0);cropFilter.setInputConnection(reader.getOutputPort());mapper.setInputConnection(cropFilter.getOutputPort());context.current = {reader,actor,cropFilter,renderer,renderWindow,};GetModel();
全部代码都放到github上了
新坑_Learning vtkjs_git地址
关注我,我持续更新vtkjs的example学习案例
也欢迎各位给我提意见,技术交流~
大鸿
WeChat : HugeYen
WeChat Public Account : BIM树洞
做一个静谧的树洞君
用建筑的语言描述IT事物;
用IT的思维解决建筑问题;
共建BIM桥梁,聚合团队。
本学习分享资料不得用于商业用途,仅做学习交流!!如有侵权立即删除!!