
APS Viewer の使用時には、アプリ側でさまざまなイベントを利用することが出来ます。この中で ESCAPE_EVENT を利用すると、[ESC] キーの押下を検出してアプリ側の設定や環境をリセットする挙動を実装することが出来ます。
例えば、APS Viewer:NPR エクステンションの調整 でご紹介した Autodesk.NPR エクステンションのスタイル表現や各値設定用の UI をリセットするような場面です。
...
Autodesk.Viewing.Initializer(options, function () {
_viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('viewer3d'));
var startedCode = _viewer.start();
if (startedCode > 0) {
console.error('Failed to create a Viewer: WebGL not supported.');
return;
}
_viewer.addEventListener(Autodesk.Viewing.ESCAPE_EVENT, onViewerESC);
var documentId = 'urn:' + urn;
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
});
...
function onViewerESC(event) {
console.log("*** onViewerESC");
$("#filter").val('none');
$('#adjust').css('display', 'none');
_viewer.getExtensionAsync('Autodesk.NPR').then(ext => {
ext.setParameter('style', 'none');
});
}
...

ただ、一部のエクステンションがアクティブな場合、ESCAPE_EVENT イベントを得られない場合があります。例えば、計測ツールでジオメトリの計測中、あるいは、断面解析ツールでライブ断面を設定中、ESC キーは、それぞれのツールの非アクティブ化に消費されてしまい、addEventListener() で ESCAPE_EVENT イベントを設定したアプリのコールバックには通知が届きません。

このような場面では、HotkeyManager を使って、ESC キーの押下を低レベル OnPress、Onrelease イベント ハンドラーとして利用することが出来ます。
...
const hotkeys = [{
keycodes: [
Autodesk.Viewing.KeyCode.ESCAPE
],
onPress: (e) => { console.log("ESC KeyDown") },
onRelease: (e) => { console.log("ESC KeyUp") }
}];
_viewer.getHotkeyManager().pushHotkeys("MYHOTKEYS", hotkeys);
...
By Toshiaki Isezaki

Leave a Reply