var isMobile = false; var radarLayer = null; var keymap = null; $(document).ready(function() { var krpano = document.krpano; if ($('#ismobile-element').css('display') == 'none') { isMobile = true; } if (isMobile == true) { var mapBtn = $("#mapBtn"); mapBtn.removeClass("active-button map-btn-active").addClass("inactive-button map-btn-inactive"); krpano.call("skin_showthumbs(false);"); $("#map").removeClass("show").addClass("hide"); } }); function mapBtnClick() { var map = $("#map"); var mapBtn = $("#mapBtn"); if (map.hasClass("hide")) { map.removeClass("hide").addClass("show"); mapBtn.removeClass("inactive-button map-btn-inactive").addClass("active-button map-btn-active"); } else { map.removeClass("show").addClass("hide"); mapBtn.removeClass("active-button map-btn-active").addClass("inactive-button map-btn-inactive"); } } function fullscreenBtn() { if (screenfull.enabled) { screenfull.toggle(); } } function helpBtnClick() { var helpWindow = $("#helpWindow"); var helpBtn = $("#helpBtn"); var krpano = document.krpano; var isIOS = krpano.get("device.ios"); if(!isIOS){ if (helpWindow.css("display") === "none") { helpWindow.show(); helpBtn.removeClass("inactive-button help-btn-inactive").addClass("active-button help-btn-active"); } else { helpWindow.hide(); helpBtn.removeClass("active-button help-btn-active").addClass("inactive-button help-btn-inactive"); } } else { window.open("https://123bim.com/User_guide_IOS.pdf"); } } var isSound = true; function soundBtnClick() { var soundBtn = $("#soundBtn"); var krpano = document.krpano; if (isSound) { soundBtn.removeClass("active-button sound-btn-active").addClass("inactive-button sound-btn-inactive"); krpano.call("stopsound(bgsnd);"); } else { soundBtn.removeClass("inactive-button sound-btn-inactive").addClass("active-button sound-btn-active"); krpano.call("playsound(bgsnd, 'sound.mp3', 0);"); } isSound = !isSound; } function setTitle(t) { document.title = t; $("#titlebar").html(t); } function changeView(direction) { var krpano = document.krpano; if (direction === "right") { krpano.call("skin_nextscene_loop(+1);"); } else { krpano.call("skin_nextscene_loop(-1);"); } } function openLayesState() { document.getElementById("layersStates").classList.toggle("show-layers-states"); } function thumbsBtnClick() { var krpano = document.krpano; krpano.call("skin_showthumbs();"); } function vrBtnClick(){ var krpano = document.krpano; krpano.call("webvr.enterVR()"); } function openThumbs(isOpen) { var map = $("#map"); var thumbBtn = $("#thumbBtn"); if (isOpen === "true") { thumbBtn.removeClass("inactive-button-thumb thumb-btn-inactive").addClass("active-button-thumb thumb-btn-active"); if (isMobile) { $('#point_title_bar').css('display', 'none'); if (map.css("top") === "-1000px") map.attr('style', 'bottom:180px !important;top:-1000px!important;'); else map.attr('style', 'bottom:180px !important;'); } else { map.css("bottom", 170, "important"); } } else { thumbBtn.removeClass("active-button-thumb thumb-btn-active").addClass(" inactive-button-thumb thumb-btn-inactive"); if (isMobile) { $('#point_title_bar').css('display', 'inline-block'); if (map.css("top") === "-1000px") map.attr('style', 'bottom:80px !important;top:-1000px!important;'); else map.attr('style', 'bottom:80px !important;'); } else { map.css("bottom", 50, "important"); } } } // Close the dropdown menu if the user clicks outside of it window.onclick = function(event) { if (!event.target.matches('.dropbtn')) { var dropdowns = document.getElementsByClassName("dropdown-content"); for (var i = 0; i < dropdowns.length; i++) { var openDropdown = dropdowns[i]; if (openDropdown.classList.contains('show-layers-states')) { openDropdown.classList.remove('show-layers-states'); } } } } function shareMobile() { var shareWindow = $("#share-window-mobile"); if (shareWindow.css("display") === "none") { shareWindow.show(); } else { shareWindow.hide(); } } var stateButtonTpl = ""; function loadStates(scene, defualtLayersState) { var layersStates = states[scene]; var krpano = document.krpano; var currentState = krpano.get("state"); if (defualtLayersState && currentState === null || currentState === undefined || !layersStates.contains(currentState)) { if (currentState != null && !layersStates.contains(currentState)) { showToast("The current alternative selected is not available for this point. The alternative has been automatically changed from '"+ currentState +"' to '" + defualtLayersState +"'."); krpano.set("state", layersStates[0]); currentState = layersStates[0]; } else { krpano.set("state", defualtLayersState); currentState = defualtLayersState; } } var ls = $("#layersStates"); if (ls.children().length > 0) { ls.children().remove(); } for (i = 0; i < layersStates.length; i++) { $("#layersStates").prepend(stateButtonTpl.replace(/%name%/g, layersStates[i])); } if (currentState.length >= 18) { $("#currentState").html(currentState.substr(0, 18) + "..." + "" + currentState + ""); } else { $("#currentState").html(currentState); } //set Title var viewTitle = krpano.get("scene[" + krpano.get("xml.scene") + "].title"); if (viewTitle.length >= 18) { $("#viewTitle").html(viewTitle.substr(0, 18) + "..." + "" + viewTitle + ""); } else { $("#viewTitle").html(viewTitle); } $("#point_title_bar").html(viewTitle); } function setLayersState(layersState) { var krpano = document.krpano; var hlookat = krpano.get("view.hlookat"); var vlookat = krpano.get("view.vlookat"); var fov = krpano.get("view.fov"); krpano.set("state", layersState); krpano.call("loadscene(" + krpano.get("xml.scene") + ",0,null,KEEPVIEW|KEEPHOTSPOTS ,BLEND(1)"); if (layersState.length >= 20) { $("#currentState").html(layersState.substr(0, 20) + "..." + "" + layersState + ""); } else { $("#currentState").html(layersState); } krpano.set("view.hlookat", hlookat); krpano.set("view.vlookat", vlookat); krpano.set("view.fov", fov); } function getViewSettings(scene) { var ViewSettings = { ViewMode: Number(scene.viewmode), Camera: { FOV: Number(scene.fov), Up: JSON.parse(scene.up), Position: JSON.parse(scene.position), Target: JSON.parse(scene.target), } }; return ViewSettings; } function updateRadar(fov, vlookat, hlookat, fovmin, fovmax) { var krpano = document.krpano; var selectedScene = krpano.get("scene[" + krpano.get("xml.scene") + "]"); var viewSettings = getViewSettings(selectedScene); var camera = viewSettings.Camera; hlookat = hlookat % 360; if (hlookat < 0) hlookat += 360; var yaw = Math.toRadians(90 - vlookat); var pitch; if (viewSettings.ViewMode === 0) { pitch = Math.toRadians(hlookat * -1 + 180); } else { var frames = krpano.get("plugin[object].frames"); var frame = Math.round((180 - (hlookat * -1 + 180)) / 360 * (frames - 1)); pitch = frame / (frames - 1) * Math.PI * 2; yaw = Math.toRadians(90 - Number(selectedScene.vlookat)); } var look = vec3.sub(vec3.create(), camera.Target, camera.Position); var dist = vec3.length(look); var q = quat.create(); var rotatex = quat.rotateX(quat.create(), q, yaw); var rotatez = quat.rotateZ(quat.create(), q, pitch); quat.multiply(q, rotatez, rotatex); var up = vec3.fromValues(0, 1, 0); vec3.transformQuat(camera.Up, up, q); look = vec3.fromValues(0, 0, -1); vec3.transformQuat(look, look, q); vec3.scale(look, look, dist); camera.FOV = fov; if (viewSettings.ViewMode === 0) vec3.add(camera.Target, camera.Position, look); else vec3.sub(camera.Position, camera.Target, look); camera.FOV = fov; var VS = { ViewMode: viewSettings.ViewMode, Camera: { FOV: camera.FOV, Up: camera.Up, Position: camera.Position, Target: camera.Target, } }; radarLayer.draw(VS); } function updateKeymap(){ var krpano = document.krpano; var scene = krpano.get("scene[" + krpano.get("xml.scene") + "]"); var position = JSON.parse(scene.position); var target = JSON.parse(scene.target); var component = $("#map"); component.css("height", "200px"); component.css("width", "380px"); keymap.maximized = false; keymap.updateSize(); if (scene.viewmode === "0") { //pano geometry = new ol.geom.Point([position[0], position[1]]); keymap.getView().setCenter([position[0], position[1]]); } else { //flyover geometry = new ol.geom.Point([target[0], target[1]]); keymap.getView().setCenter([target[0], target[1]]); } } function krpanoLoadComplete() { var krpano = document.krpano; var modelBox = JSON.parse(krpano.get("skin_settings.modelbox")); var soundEnabled = JSON.parse(krpano.get("skin_settings.sound")); if (soundEnabled) { if (isMobile) { krpano.set("plugin[sound_mobile].visible", "true"); } else { $("#soundBtn").show(); } krpano.call("playsound(bgsnd, 'sound.mp3', 0);"); } else { if (isMobile) { krpano.set("plugin[sound_mobile].visible", "false"); } else { $("#soundBtn").hide(); } } var helpWindow = $("#helpWindow"); var helpBtn = $("#helpBtn"); if (krpano.get("skin_settings.help_opened") == "true") { helpWindow.show(); helpBtn.removeClass("inactive-button help-btn-inactive").addClass("active-button help-btn-active"); } else { helpWindow.hide(); helpBtn.removeClass("active-button help-btn-active").addClass("inactive-button help-btn-inactive"); } var projectionName = 'RDV'; var proj = new ol.proj.Projection({ code: projectionName, units: 'm', extent: modelBox }); var component = $("#map"); var closemap = new app.KeyMapControl({ html: "", cls: "closemap", tooltip: "Close", handler: function(evt) { var cmp_ = component; cmp_.removeClass("show").addClass("hide"); var mapBtn = $("#mapBtn"); mapBtn.removeClass("active-button map-btn-active").addClass("inactive-button map-btn-inactive"); } }); var maximize = new app.KeyMapControl({ html: "", cls: "maximize", tooltip: "Maximize", handler: function(evt) { var cmp_ = component; if (!keymap.maximized) { cmp_.css("height", cmp_.parent().height() - 230); cmp_.css("width", "99.5%"); keymap.maximized = true; } else { cmp_.css("height", "200px"); cmp_.css("width", "380px"); keymap.maximized = false; } keymap.updateSize(); } }); ol.proj.addProjection(proj); keymap = new ol.Map({ controls: ol.control.defaults({ attribution: false }).extend(isMobile ? [closemap] : [maximize, closemap]), interactions: [ new ol.interaction.DoubleClickZoom(), new ol.interaction.DragPan({ kinetic: new ol.Kinetic(-0.005, 0.05, 100) }), new ol.interaction.PinchZoom(), new ol.interaction.MouseWheelZoom() ], layers: [new ol.layer.Tile({ source: new ol.source.XYZ({ maxZoom: 4, url: 'images/keymap/{z}/{x}.{y}.jpg', wrapX: false, projection: projectionName }) })], target: 'map', view: new ol.View({ center: [(modelBox[2] + modelBox[0]) / 2, (modelBox[3] + modelBox[1]) / 2], zoom: 0, projection: projectionName, maxZoom: 4, extent: modelBox }) }); keymap.maximized = false; var scenesCount = krpano.get("scene.count"); var markers = []; for (i = 0; i < scenesCount; i++) { var scene = krpano.get("scene[" + i + "]"); var position = JSON.parse(scene.position); var target = JSON.parse(scene.target); var geometry; if (scene.viewmode === "0") { //pano geometry = new ol.geom.Point([position[0], position[1]]); keymap.getView().setCenter([position[0], position[1]]); var iconStyle = new ol.style.Style({ image: new ol.style.Icon(({ anchor: [0.5, 34], anchorXUnits: 'fraction', anchorYUnits: 'pixels', opacity: 1, src: 'plugins/images/360.png' })) }); } else { //flyover geometry = new ol.geom.Point([target[0], target[1]]); keymap.getView().setCenter([target[0], target[1]]); var iconStyle = new ol.style.Style({ image: new ol.style.Icon(({ anchor: [0.5, 34], anchorXUnits: 'fraction', anchorYUnits: 'pixels', opacity: 1, src: 'plugins/images/flyover.png' })) }); } var markerFeature = new ol.Feature({ "scene": scene }); markerFeature.setStyle(iconStyle); markerFeature.setGeometry(geometry); markers.push(markerFeature); keymap.on('click', function(evt) { var feature = keymap.forEachFeatureAtPixel(evt.pixel, function(feature) { return feature; }); if (feature) { var scene = feature.get("scene"); if (scene) { var view = $(scene.content).attr("view", "")[0]; var fovmin = 30; var fovmax = 120; krpano.call("loadscene(" + scene.name + ",view.fov=" + view.getAttribute("fov") + "&view.vlookat=" + view.getAttribute("vlookat") + "&view.hlookat=" + view.getAttribute("hlookat") + "&view.fovmin=" + fovmin + "&view.fovmax=" + fovmax + ",null,KEEPVIEW ,BLEND(1)"); radarLayer.draw(getViewSettings(scene)); } } }); } var markerSource = new ol.source.Vector({ features: markers, wrapX: false }); var markerLayer = new ol.layer.Vector({ source: markerSource, name: "marker" }); markerLayer.setZIndex(1); keymap.addLayer(markerLayer); radarLayer = new Radar({ name: "radar" });; radarLayer.setZIndex(0); keymap.addLayer(radarLayer); } function showToast(text) { var krpano = document.krpano; var isWebVr = krpano.get("webvr.isenabled"); if(isWebVr){ var message = text.split("."); var ansMessage = message[0]; for(var i = 1 ; i < message.length; i++ ){ ansMessage = ansMessage + ". [/br] " +message[i]; } krpano.call("show_toast(Info: [/br] "+ ansMessage +")"); } else{ $("#toastMessege").html(text); $("#toastWindow").show(); setTimeout(function() { $("#toastWindow").hide(); }, 6000); } } function getSceneId(){ var krpano = document.krpano; var scene = krpano.get("scene[" + krpano.get("xml.scene") + "]"); var id = scene.name.split('-')[1]; krpano.set("scene_id", id.toUpperCase()); } function GenerateVRThumbs(){ var krpano = document.krpano; var viewTitle = krpano.get("scene[" + krpano.get("xml.scene") + "].title"); var layersStates = states[viewTitle]; getSceneId(); for(var i = 0 ; i < layersStates.length ; i++) { var command = "generate_vr_thumbs(" + layersStates[i] + ");"; krpano.call(command); } } function GetLookView(){ var krpano = document.krpano; var hs = krpano.get("hotspot[skin_webvr_menu_states]"); var h = hs.ath; var viewTitle = krpano.get("scene[" + krpano.get("xml.scene") + "].title"); var layersStates = states[viewTitle]; var between = krpano.get("style[thumb].between"); krpano.set("lookath",h - ((layersStates.length -1) * (between * 0.5))); } function ReloadPageIOS(isIOS, hide){ if(isIOS) { hide = hide === "true"; //convert string to boolean. var headerBar = $("#header_bar"); var tBarBg = $("#tbar-background"); var tBar = $("#tbar"); if(hide) { headerBar.hide(); tBarBg.hide(); tBar.hide(); document.getElementById("point_title_bar").style.visibility = "hidden"; var map = $("#map"); var helpWindow = $("#helpWindow"); var mapBtn = $("#mapBtn"); var helpBtn = $("#helpBtn"); map.removeClass("show").addClass("hide"); mapBtn.removeClass("active-button map-btn-active").addClass("inactive-button map-btn-inactive"); helpWindow.hide(); helpBtn.removeClass("active-button help-btn-active").addClass("inactive-button help-btn-inactive"); } else { headerBar.show(); tBarBg.show(); tBar.show(); document.getElementById("point_title_bar").style.visibility = "visible"; } } }