過濾器 圖片數據體積裁剪
介紹
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橋梁,聚合團隊。
本學習分享資料不得用于商業用途,僅做學習交流!!如有侵權立即刪除!!