diff --git a/examples/browser/control.html b/examples/browser/control.html index 1bef914..2b8e101 100644 --- a/examples/browser/control.html +++ b/examples/browser/control.html @@ -30,6 +30,7 @@ Save Load + Snapshot Self / Self diff --git a/examples/browser/js/control.js b/examples/browser/js/control.js index cf4bba5..8b578b7 100644 --- a/examples/browser/js/control.js +++ b/examples/browser/js/control.js @@ -278,6 +278,19 @@ $(document).ready(function () { }); }); + $("#snapshot").on("click",function() { + match.viewControl("takeSnapshot") + .then((snapshot)=>{ + var a = document.createElement("a"); + a.href = snapshot; + a.setAttribute("download",gameName+".png"); + a.click(); + }) + .catch((error)=>{ + console.warn("failed:",error); + }) + }); + // reading file locally var fileElem = $("#fileElem").on("change",function() { var fileReader = new FileReader(); diff --git a/src/browser/jocly.xd-view.js b/src/browser/jocly.xd-view.js index 9e74f64..665360e 100644 --- a/src/browser/jocly.xd-view.js +++ b/src/browser/jocly.xd-view.js @@ -2771,6 +2771,15 @@ if(window.JoclyXdViewCleanup) }); xdv.removeGadget("panorama"); } + resolve(); + break; + case "takeSnapshot": + if(threeCtx) { + var canvas = threeCtx.renderer.domElement; + threeCtx.renderer.render( threeCtx.scene, threeCtx.camera ); + resolve(canvas.toDataURL("image/png")); + } else + reject(new Error("Snapshot only available on 3D views")); break; default: