Xtk 更改切片X法线时,体积将消失

Xtk 更改切片X法线时,体积将消失,xtk,volume-rendering,Xtk,Volume Rendering,我想融合第10课和第17课来可视化音量,第10课中的规范切片和第17课中的切片。为此,我修改了第10课的代码 检测到的问题有: 启用体积渲染时,将显示切片X。 音量消失了!!!! 启用体积渲染时,仅在屏幕上显示X切片。 出现以下问题时: 问题出现在体积可视化上。当我们在体积可视化和切片可视化之间切换时,当我们在体积可视化上时,我们需要移动体积,然后错误就会出现 具体错误在昨天下载的主分支volume.js的第1385行,提交318986e6b1d4a195a78b87f81a082ca249cb

我想融合第10课和第17课来可视化音量,第10课中的规范切片和第17课中的切片。为此,我修改了第10课的代码

检测到的问题有:

启用体积渲染时,将显示切片X。 音量消失了!!!! 启用体积渲染时,仅在屏幕上显示X切片。 出现以下问题时:

问题出现在体积可视化上。当我们在体积可视化和切片可视化之间切换时,当我们在体积可视化上时,我们需要移动体积,然后错误就会出现

具体错误在昨天下载的主分支volume.js的第1385行,提交318986e6b1d4a195a78b87f81a082ca249cbd866…屏幕截图:

错误:未捕获类型错误:无法设置未定义卷的属性“\u visible”。js:1385

二,。添加Listen to sliceXController以允许在修改法线时自动更新:

三,。添加代码,用于在用户更改卷排序时存储和恢复法线和切片索引

我希望你能帮助我。提前感谢

当我显示errormp4和webm时,我共享了一个视频,第10课修改的完整源代码需要存储在X-master\testing\visualization和错误的屏幕截图上

编辑1,问题解决:对于未编译的XTK,我使用以下代码:

//Modify Normals
volume.xNormX = _xNormX_current;
volume.xNormY = _xNormY_current;
volume.xNormZ = _xNormZ_current;
//Rebuild the sliceX data
volume.sliceInfoChanged(0);
//reset the "volume._volumeRenderingCache", thanks Nicolas :)
//this is the trick
volume._volumeRenderingCache = [];
//Modify the indexX slice
volume.indexX = _indexX_current;
功能代码为heredemo_ok.js:
mega.co.nz/!R1p0lKAC!C806T7tLTpQTdBN7mJBRS0_ANWa4fqv3wvJtZR_kMg4

您是否尝试重置卷。\u volumeRenderingCache在修改切片后是否正常

比如:

...
volume.sliceInfoChanged(0);
volume._volumeRenderingCache = [];
...
如果它确实与未编译的XTK一起工作,我们可以添加getter/setter来从已编译的XTK访问该变量

这有意义吗


谢谢

效果很好!。。。它适用于未编译的XTK,getter/setter将非常有用!!!谢谢您现在应该可以使用XTK edge了:
var sliceXController = volumegui.add(volume, 'indexX', 0.00, volume.range[0] - 1).listen();
//Store the initial normals
var _xNormX_initial = volume.xNormX; 
var _xNormY_initial = volume.yNormX;
var _xNormZ_initial = volume.zNormX;
//Store the user defined normals
var _xNormX_current = null; 
var _xNormY_current = null;
var _xNormZ_current = null;

//store the initial indexX slice
var _indexX_initial = volume.indexX;
//store the user defined indexX slice
var _indexX_current = null;

//IF volumeRendering  change we catch the event
vrController.onChange(function(value) {
  if (value == true) {
    //Store the user defined normals
    _xNormX_current = volume.xNormX;
    _xNormY_current = volume.xNormY;
    _xNormZ_current = volume.xNormZ;
    //store  user defined indexX slice
    _indexX_current = volume.indexX;

    //set the initials normals
    volume.xNormX = _xNormX_initial;
    volume.xNormY = _xNormY_initial;
    volume.xNormZ = _xNormZ_initial;  
    //Set the initial indexX slice
    volume.indexX = _indexX_initial;                
  }else{
    //Go back to the  user defined normals
    volume.xNormX = _xNormX_current;
    volume.xNormY = _xNormY_current;
    volume.xNormZ = _xNormZ_current;
    //Go back to the  user defined indexX slice
    volume.indexX = _indexX_current;
  }
  volume.sliceInfoChanged(0);
});
//Modify Normals
volume.xNormX = _xNormX_current;
volume.xNormY = _xNormY_current;
volume.xNormZ = _xNormZ_current;
//Rebuild the sliceX data
volume.sliceInfoChanged(0);
//reset the "volume._volumeRenderingCache", thanks Nicolas :)
//this is the trick
volume._volumeRenderingCache = [];
//Modify the indexX slice
volume.indexX = _indexX_current;
...
volume.sliceInfoChanged(0);
volume._volumeRenderingCache = [];
...