レッスン 10 と 17 を融合して、ボリューム、正規のスライス (レッスン 10 のように)、およびスライス X の再スライス (レッスン 17) を視覚化します。そのために、レッスン 10 のコードを修正しました。
検出された問題は次のとおりです。
- ボリューム レンダリングが有効な場合、スライス X が表示されます。
- ボリュームが消える!!!!
- ボリューム レンダリングが有効な場合、画面に X スライスのみが表示されます。
問題は次の場合に発生します。
問題はボリューム ビジュアライゼーションに表示されます。ボリューム ビジュアライゼーションとスライス ビジュアライゼーションを切り替えると、ボリューム ビジュアライゼーションにいるときにボリュームを移動する必要があり、エラーが表示されます。
特定のエラーは、volume.js の 1385 行目です (昨日ダウンロードしたマスター ブランチの 318986e6b1d4a195a78b87f81a082ca249cbd866 をコミットします)...スクリーン ショット: https://mega.co.nz/#!d8hVCIhY!TWegqY2pRPcvl09CyMocJYeZu55sDOc_xRCiAed2Jhg
エラー: Uncaught TypeError: 未定義の volume.js:1385 のプロパティ '_visible' を設定できません
for (i = 0; i < _numberOfSlices; i++) {
//THE ERROR IS IN THE NEXT LINE
_child._children[i]._visible = true;
}
私がすること.... 次の方法でレッスン 10 を変更しました。
1. X スライスの法線コントロールを追加します。xNormX、xNormY、および xNormZ を変更するには、レッスン 17 のコードを使用します。
var slicegui = gui.addFolder('Slice X Orientation');
var sliceXNXController = slicegui.add(volume, 'xNormX', -1.00,1.00).name('Normal X Dir.').listen();
var sliceXNYController = slicegui.add(volume, 'xNormY', -1.00,1.00).name('Normal Y Dir.').listen();
var sliceXNZController = slicegui.add(volume, 'xNormZ', -1.00,1.00).name('Normal Z Dir.').listen();
normalChange = function(value){
volume.sliceInfoChanged(0);
sliceXController.max(volume.range[0] - 1);
}
sliceXNXController.onChange(normalChange);
sliceXNYController.onChange(normalChange);
sliceXNZController.onChange(normalChange);
slicegui.open();
2. Listen() を sliceXController に追加して、法線を変更したときに自動更新できるようにします。
var sliceXController = volumegui.add(volume, 'indexX', 0.00, volume.range[0] - 1).listen();
3. ユーザーが volumeRendering を変更すると、法線と sliceX インデックスを格納および復元するためのコードを追加します。
//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);
});
あなたが私を助けてくれることを願っています。前もって感謝します!!!
エラーが表示されたときにビデオを共有します (mp4 と webm), レッスン 10 の完全なソース コードを修正しました (「X-master\testing\visualization」に保存する必要があります) エラーのスクリーン ショット
https://mega.co.nz/#F!I8pxgBqa!M0ZCBUTWXlcIDtYqvboo3w
EDIT 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;
機能コードはこちら (demo_ok.js): mega.co.nz/#!R1p0lKAC!C806T7tLTpQTdBN7mJBRS0_ANWa4fqv3wvJtZR_kMg4