|
@@ -0,0 +1,354 @@
|
|
|
+<krpano version="1.20.9" title="Virtual Tour">
|
|
|
+
|
|
|
+ <action name="mytest">
|
|
|
+ screentosphere(mouse.x, mouse.y, toh, tov);
|
|
|
+ jscall(calc('console.log("'+toh+'")'));
|
|
|
+ jscall(calc('console.log("'+tov+'")'));
|
|
|
+ </action>
|
|
|
+
|
|
|
+ <events onclick="mytest();" />
|
|
|
+
|
|
|
+ <!-- startup action - load the first scene -->
|
|
|
+ <action name="startup" autorun="onstart">
|
|
|
+ if(startscene === null OR !scene[get(startscene)], copy(startscene,scene[0].name); );
|
|
|
+ loadscene(get(startscene), null, MERGE);
|
|
|
+ if(startactions !== null, startactions() );
|
|
|
+ </action>
|
|
|
+ <events onloadcomplete="sceneload"></events>
|
|
|
+ <action name="sceneload">
|
|
|
+ jscall('window.sceneload()');
|
|
|
+ </action>
|
|
|
+ <scene name="mainScene" onstart="" havevrimage.mobilevr="false" havevrimage.no-mobilevr="true" lat="" lng=""
|
|
|
+ heading="">
|
|
|
+
|
|
|
+ <control bouncinglimits="calc:image.cube ? true : false" />
|
|
|
+
|
|
|
+ <view hlookat="50.082" vlookat="12.404" fovtype="MFOV" fov="90.000" maxpixelzoom="2.0" fovmin="70" fovmax="120"
|
|
|
+ limitview="auto" />
|
|
|
+
|
|
|
+ <preview
|
|
|
+ url="https://elab-marketing-web.oss-cn-shanghai.aliyuncs.com/fairyMountain/layout/hospital/panos/ceshi.tiles/preview.jpg" />
|
|
|
+
|
|
|
+ <image if="!(webvr.isenabled OR device.mobilevr)">
|
|
|
+ <sphere url="%$panorama_url%" />
|
|
|
+ </image>
|
|
|
+
|
|
|
+ <image if="webvr.isenabled OR device.mobilevr">
|
|
|
+ <sphere url="%$panorama_url%" />
|
|
|
+ </image>
|
|
|
+ <!-- <preview url="test3333.png"/> onloaded.addevent="sceneload();"-->
|
|
|
+ <hotspot name="video" ath="50.082" atv="14" url="https://dm.static.elab-plus.com/videoplayer.js" videourl=""
|
|
|
+ width="90" height="160" chromakey="0x238E54|0.294|0.133" preload="true" pausedonstart="false" loop="true"
|
|
|
+ distorted="true" muted="true" zoom="true" autopause="true" autoresume="true" scale="1"
|
|
|
+ onvideoready="videoreadyFunc" onvideoplay="videoplayHandle" cursor="grab"
|
|
|
+ ondown.addevent="set(cursor,grabbing);" onup.addevent="set(cursor,grab);" />
|
|
|
+ <action name="mobilescale" autorun="preinit" devices="mobile">
|
|
|
+ mul(stagescale,0.5);
|
|
|
+ </action>
|
|
|
+ <action name="playSceneName">
|
|
|
+ def(scale, string, get(hotspot[video].scale));
|
|
|
+ <!-- 打印日志 -->
|
|
|
+ <!-- showlog(true, top); -->
|
|
|
+ <!-- 播放视频 -->
|
|
|
+ hotspot[video].playvideo(%1, '', false);
|
|
|
+ set(hotspot[video].scale, get(scale));
|
|
|
+ </action>
|
|
|
+ <!-- 设置缩放大小 -->
|
|
|
+ <action name="scaleChange">
|
|
|
+ set(hotspot[video].scale, %1);
|
|
|
+ </action>
|
|
|
+ <!-- 获取缩放大小 -->
|
|
|
+ <action name="getmyScale">
|
|
|
+ def(scale, string, get(hotspot[video].scale));
|
|
|
+ jscall(calc("window.getScaleHandle('"+ get(scale) +"')") );
|
|
|
+ </action>
|
|
|
+ <!-- 切换状态播放,暂停 -->
|
|
|
+ <action name="toggleMute">
|
|
|
+ set(hotspot[video].muted, %1);
|
|
|
+ </action>
|
|
|
+ <!-- 视频初始化完成 -->
|
|
|
+ <action name="videoreadyFunc">
|
|
|
+ jscall('window.videoready()');
|
|
|
+ <!-- set(hotspot[video].scale, 0.3); -->
|
|
|
+ </action>
|
|
|
+ <!-- 视频播放 -->
|
|
|
+ <action name="videoplayHandle">
|
|
|
+ jscall('window.onvideoplay()');
|
|
|
+ <!-- set(hotspot[video].scale, 0.3); -->
|
|
|
+ </action>
|
|
|
+ <!-- 截图 -->
|
|
|
+ <action name="makescreenshot_init" type="Javascript" autorun="onstart"><![CDATA[
|
|
|
+ // Load the FileSaver.js script for saving files locally cross browser.
|
|
|
+ // Source: https://github.com/eligrey/FileSaver.js/
|
|
|
+
|
|
|
+ // count the screenshots (for the filenames)
|
|
|
+ krpano.makescreenshot_count = 1;
|
|
|
+
|
|
|
+
|
|
|
+ // create an empty Object as makeScreenshot cache
|
|
|
+ var makeScreenshotCache = {};
|
|
|
+
|
|
|
+
|
|
|
+ // add a 'makescreenshot' action to krpano
|
|
|
+ krpano.makescreenshot = function(leftX,leftY,screenshotwidth,screenshotheight)
|
|
|
+ {
|
|
|
+ // if there is already a screenshot layer, remove it now
|
|
|
+ // krpano.call("removelayer(screenshot,true)");
|
|
|
+ console.warn("***leftX***",leftX,leftY,screenshotwidth,screenshotheight)
|
|
|
+ // make a screenshot as canvas
|
|
|
+ var sizeinfo = {w:screenshotwidth, h:screenshotheight};
|
|
|
+ var crop = {
|
|
|
+ x:leftX,
|
|
|
+ y:leftY,
|
|
|
+ w:screenshotwidth,
|
|
|
+ h:screenshotheight
|
|
|
+ };
|
|
|
+ var screenshotcanvas = krpano.webGL.makeScreenshot(
|
|
|
+ 0,
|
|
|
+ 0,
|
|
|
+ true,
|
|
|
+ "canvas",
|
|
|
+ 0,
|
|
|
+ crop,
|
|
|
+ sizeinfo,
|
|
|
+ makeScreenshotCache);
|
|
|
+
|
|
|
+ if (screenshotcanvas)
|
|
|
+ {
|
|
|
+ // example - draw something on the canvas, set to 1 to enable
|
|
|
+ if (0)
|
|
|
+ {
|
|
|
+ var ctx = screenshotcanvas.getContext("2d");
|
|
|
+ ctx.font = "25px Times";
|
|
|
+ ctx.fillStyle = "#FFFFFF";
|
|
|
+ ctx.fillText("krpano makeScreenshot() API Test", 50, screenshotcanvas.height-50);
|
|
|
+ }
|
|
|
+
|
|
|
+ // add some krpano layers that show the screenshot and allow saving it
|
|
|
+ var imgBase64 = screenshotcanvas.toDataURL();
|
|
|
+
|
|
|
+ screenshot(imgBase64);
|
|
|
+
|
|
|
+ function screenshot(imgBase64){
|
|
|
+ var savecreenshot = window.$config.api_url + 'elab-marketing-file/upload/uploadBase64';
|
|
|
+ var data = JSON.stringify({
|
|
|
+ base64Str: imgBase64
|
|
|
+ })
|
|
|
+ var request = $.ajax({
|
|
|
+ type: "POST",
|
|
|
+ url: savecreenshot,
|
|
|
+ contentType: 'application/json;charset=UTF-8',
|
|
|
+ data: data
|
|
|
+ });
|
|
|
+
|
|
|
+ request.done(function(result) {
|
|
|
+ console.warn("***krpano-request-result****",result)
|
|
|
+ if (result && result.success) {
|
|
|
+ let shottingImg = result.single.filePath;
|
|
|
+ window.show_img(shottingImg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ request.fail(function(jqXHR, textStatus) {
|
|
|
+ console.warn("Request failed: " + textStatus);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ]]>
|
|
|
+ </action>
|
|
|
+
|
|
|
+ <action name="makescreenshot" type="Javascript">
|
|
|
+ <![CDATA[
|
|
|
+ if (krpano.webGL && krpano.webGL.context.getContextAttributes().preserveDrawingBuffer)
|
|
|
+ {
|
|
|
+ try{
|
|
|
+ var canvas = krpano.webGL.canvas,
|
|
|
+ screenx = Number(args[1]),
|
|
|
+ screeny = Number(args[2]),
|
|
|
+ vfw = Number(args[3]),
|
|
|
+ vfh = Number(args[4]),
|
|
|
+ maxsize = Number(args[5]),
|
|
|
+ jpeg_quality = krpano.get('panoshot.jpeg_quality'),
|
|
|
+ watermark = krpano.get('panoshot.watermark'),
|
|
|
+ scaledCanvas=document.createElement("canvas"),
|
|
|
+ scaledContext=scaledCanvas.getContext('2d');
|
|
|
+
|
|
|
+ if(vfw > vfh){
|
|
|
+ if(vfw > maxsize){
|
|
|
+ scaledCanvas.width=maxsize;
|
|
|
+ scaledCanvas.height=maxsize*vfh/vfw;
|
|
|
+ }else{
|
|
|
+ scaledCanvas.width=vfw;
|
|
|
+ scaledCanvas.height=vfh;
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ if(vfh > maxsize){
|
|
|
+ scaledCanvas.height=maxsize;
|
|
|
+ scaledCanvas.width=maxsize*vfw/vfh;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ scaledCanvas.width=vfw;
|
|
|
+ scaledCanvas.height=vfh;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ scaledContext.drawImage(canvas,screenx,screeny,vfw,vfh,0,0,scaledCanvas.width,scaledCanvas.height);
|
|
|
+ var img_src = scaledCanvas.toDataURL("image/jpeg",+jpeg_quality);
|
|
|
+ screenshot(img_src,watermark);
|
|
|
+ }catch(err){
|
|
|
+ krpano.trace(3,err);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ krpano.trace(3,"no webgl or no preserveDrawingBuffer");
|
|
|
+ }
|
|
|
+
|
|
|
+ function screenshot(dataURL,watermark){
|
|
|
+ var pluginpath = krpano.get('panoshot.snapshot_path'),
|
|
|
+ savecreenshot = pluginpath + 'savescreenshot.php';
|
|
|
+ var request = $.ajax({
|
|
|
+ type: "POST",
|
|
|
+ url: savecreenshot,
|
|
|
+ data: {
|
|
|
+ imgBase64: dataURL,
|
|
|
+ watermark: watermark
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ request.done(function(file) {
|
|
|
+ var url = document.URL,
|
|
|
+ new_url = url.split("?")[0],
|
|
|
+ almostpath = url.substring(0,url.lastIndexOf("/")),
|
|
|
+ path = almostpath + '/',
|
|
|
+ imgurl = pluginpath +file,
|
|
|
+ vtb_url = krpano.get('vtbuilder_snapshotlink'),
|
|
|
+ scene = krpano.get('scene[get(xml.scene)].name');
|
|
|
+ vh = krpano.get('vh'),
|
|
|
+ vv = krpano.get('vv'),
|
|
|
+ vf = krpano.get('vf');
|
|
|
+ if(vtb_url !== null){new_url = vtb_url}
|
|
|
+ else
|
|
|
+ if(scene !== null){new_url = new_url + '?sceneview=' + scene + ',' + vh + ',' + vv + ',' + vf};
|
|
|
+ var viewurl_encode = encodeURIComponent(new_url);
|
|
|
+ krpano.set("viewurl", viewurl_encode);
|
|
|
+ krpano.set("panourl", url);
|
|
|
+ krpano.set("fullpath", path);
|
|
|
+ krpano.set("imgurl", imgurl);
|
|
|
+ krpano.call("show_img()");
|
|
|
+ });
|
|
|
+
|
|
|
+ request.fail(function(jqXHR, textStatus) {
|
|
|
+ alert("Request failed: " + textStatus);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ ]]>
|
|
|
+ </action>
|
|
|
+ <action name="makescreenshot_mobile" type="Javascript">
|
|
|
+ <![CDATA[
|
|
|
+ if (krpano.webGL && krpano.webGL.context.getContextAttributes().preserveDrawingBuffer)
|
|
|
+ {
|
|
|
+ try{
|
|
|
+ var canvas = krpano.webGL.canvas,
|
|
|
+ vfw = Number(args[1]),
|
|
|
+ vfh = Number(args[2]),
|
|
|
+ maxsize = Number(args[3]),
|
|
|
+ jpeg_quality = krpano.get('panoshot.jpeg_quality'),
|
|
|
+ watermark = krpano.get('panoshot.watermark'),
|
|
|
+ scaledCanvas = document.createElement("canvas"),
|
|
|
+ scaledContext = scaledCanvas.getContext('2d');
|
|
|
+
|
|
|
+ scaledCanvas.style.visibility = 'hidden';
|
|
|
+
|
|
|
+ if(vfw > vfh){
|
|
|
+ if( vfw > maxsize ){
|
|
|
+ scaledCanvas.width=maxsize;
|
|
|
+ scaledCanvas.height=maxsize*vfh/vfw;
|
|
|
+ } else {
|
|
|
+ scaledCanvas.width=vfw;
|
|
|
+ scaledCanvas.height=vfh;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if( vfh > maxsize ){
|
|
|
+ scaledCanvas.height=maxsize;
|
|
|
+ scaledCanvas.width=maxsize*vfw/vfh;
|
|
|
+ }else{
|
|
|
+ scaledCanvas.width=vfw;
|
|
|
+ scaledCanvas.height=vfh;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ var img = new Image();
|
|
|
+ img.src = krpano.webGL.canvas.toDataURL();
|
|
|
+ img.onload = function(){
|
|
|
+ scaledContext.drawImage(canvas,0,0,scaledCanvas.width,scaledCanvas.height);
|
|
|
+ var img_src = scaledCanvas.toDataURL("image/jpeg",+jpeg_quality);
|
|
|
+
|
|
|
+ var blank = isCanvasBlank(document.getElementById('canvas'));
|
|
|
+
|
|
|
+ function isCanvasBlank(scaledCanvas) {
|
|
|
+ var blank = document.createElement('canvas');
|
|
|
+ blank.width = canvas.width;
|
|
|
+ blank.height = canvas.height;
|
|
|
+
|
|
|
+ return canvas.toDataURL() == blank.toDataURL();
|
|
|
+ }
|
|
|
+ if (blank) {
|
|
|
+ krpano.call("try_again()");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ screenshot(img_src,watermark)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }catch(err){
|
|
|
+ krpano.trace(3,err);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ krpano.trace(3,"no webgl or no preserveDrawingBuffer");
|
|
|
+ }
|
|
|
+
|
|
|
+ function screenshot(dataURL,watermark){
|
|
|
+ var pluginpath = krpano.get('panoshot.snapshot_path'),
|
|
|
+ savecreenshot = pluginpath + 'savescreenshot.php';
|
|
|
+ var request = $.ajax({
|
|
|
+ type: "POST",
|
|
|
+ url: savecreenshot,
|
|
|
+ data: {
|
|
|
+ imgBase64: dataURL,
|
|
|
+ watermark: watermark
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ request.done(function(file) {
|
|
|
+ var url = document.URL,
|
|
|
+ new_url = url.split("?")[0],
|
|
|
+ almostpath = url.substring(0,url.lastIndexOf("/")),
|
|
|
+ path = almostpath + '/',
|
|
|
+ imgurl = pluginpath +file,
|
|
|
+ vtb_url = krpano.get('vtbuilder_snapshotlink'),
|
|
|
+ scene = krpano.get('scene[get(xml.scene)].name');
|
|
|
+ vh = krpano.get('vh'),
|
|
|
+ vv = krpano.get('vv'),
|
|
|
+ vf = krpano.get('vf');
|
|
|
+ if(vtb_url !== null){new_url = vtb_url}
|
|
|
+ else
|
|
|
+ if(scene !== null){new_url = new_url + '?sceneview=' + scene + ',' + vh + ',' + vv + ',' + vf};
|
|
|
+ var viewurl_encode = encodeURIComponent(new_url);
|
|
|
+ krpano.set("viewurl", viewurl_encode);
|
|
|
+ krpano.set("panourl", url);
|
|
|
+ krpano.set("fullpath", path);
|
|
|
+ krpano.set("imgurl", imgurl);
|
|
|
+ krpano.call("show_img()");
|
|
|
+ });
|
|
|
+
|
|
|
+ request.fail(function(jqXHR, textStatus) {
|
|
|
+ alert("Request failed: " + textStatus);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ ]]>
|
|
|
+ </action>
|
|
|
+ </scene>
|
|
|
+
|
|
|
+
|
|
|
+</krpano>
|