123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import Vue from 'vue'
- let vue = new Vue()
- export default class Utils {
- constructor() {
- }
- /**
- * 设置初始视角
- */
- setInitView(krpano, canvas) {
- let url = this.setInitAngleImg(canvas);
- var sceneName = krpano.get('xml.scene');
- var hlookat = krpano.get("view.hlookat");
- var vlookat = krpano.get("view.vlookat");
- return {
- sceneName,
- hlookat,
- vlookat,
- url
- }
- }
- scaleCanvas(canvas, width, height) {
- let w = canvas.width
- let h = canvas.height;
- if (width == undefined) {
- width = w;
- }
- if (height == undefined) {
- height = h;
- }
- var retCanvas = document.createElement('canvas');
- var retCtx = retCanvas.getContext('2d');
- retCanvas.width = width;
- retCanvas.height = height;
- retCtx.drawImage(canvas, 0, 0, w, h, 0, 0, width, height);
- return retCanvas;
- }
- getDataURL(canvas, type, width, height) {
- let cas = this.scaleCanvas(canvas, width, height);
- return cas.toDataURL(type, 1);
- }
- setInitAngleImg(mycanvas) {
- var url = this.getDataURL(mycanvas, "image/jpeg", 600, 400);
- return url
- }
- radarRotate() {
- // console.log(sceneName,hlookat);
- }
- /**
- * 编辑热点
- */
- edithotspot(krpano, param) {
- krpano.call(`editImgTextHotSpot(
- ${param.img},
- ${param.name},
- ${param.hotspotTitle},
- ${param.ath},
- ${param.atv},
- ${true},
- ${true},
- ${param.link},
- ${true},
- ${param.visible},
- ${param.size || 1},
- ${param.fontSize})`);
- }
- /**
- * 添加热点
- */
- addhotspot(krpano, param, type) {
- krpano.set("curscreen_x", krpano.get('stagewidth') / 2);
- krpano.set("curscreen_y", krpano.get('stageheight') / 2);
- krpano.call("screentosphere(curscreen_x, curscreen_y, curscreen_ath, curscreen_atv);");
- let ath = krpano.get("curscreen_ath");
- let atv = krpano.get("curscreen_atv");
- krpano.call(`addImgTextHotSpot(
- ${param.img},
- ${param.name},
- ${param.hotspotTitle},
- ${param.ath != '' ? param.ath : ath},
- ${param.atv != '' ? param.atv : atv},
- ${true},
- ${type},
- ${param.link},
- ${true},
- ${param.visible},
- ${(param.size * 50) || 1},
- ${Number(param.fontSize)})`);
- // 设置热点图片默认的偏移值
- let offset = '-130%'
- if (param.size < 1) {
- offset = '-200%'
- }
- if (param.size > 1) {
- offset = '-100%'
- }
- krpano.set('layer[tooltip_' + param.name + '].y', `${offset}`)
- }
- /**
- * 获取鼠标当前位置
- */
- getCurrentMousePosition(krpano, hotspotName) {
- let panoW = krpano.get('stagewidth')
- let panoH = krpano.get('stageheight')
- let stagex = krpano.get('mouse.stagex')
- let stagey = krpano.get('mouse.stagey')
- if (stagex < 0 || stagex > panoW || stagey < 0 || stagey > panoH) {
- return
- }
- krpano.call('screentosphere(mouse.stagex, mouse.stagey, toh, tov)')
- krpano.set(`hotspot[${hotspotName}].ath`, krpano.get('toh'));
- krpano.set(`hotspot[${hotspotName}].atv`, krpano.get('tov'));
- }
- htmlEncode(str) {
- var s = "";
- if (str.length == 0) return "";
- s = str.replace(/\'/g, "'");
- s = s.replace(/\"/g, """);
- s = s.replace(/\(/g, "(");
- s = s.replace(/\)/g, ")");
- s = s.replace(/,/g, ",");
- return s;
- }
- /**
- *
- * @param {*} 定位热点
- */
- looktohotspot(krpano, hotspotName) {
- var curFov = krpano.get('view.fov');
- krpano.call('looktohotspot(' + hotspotName + ',' + curFov + ')');
- }
- /**
- *
- * @param {*} 定位热点
- */
- getHotspotHV(krpano, hotspotName) {
- var ath = krpano.get(`hotspot[${hotspotName}].ath`);
- var atv = krpano.get(`hotspot[${hotspotName}].atv`);
- return { ath, atv }
- }
- /**
- * 打开热点链接
- */
- linkopen(sceneCode, id) {
- if (window.location.pathname.indexOf('show') > -1) {
- vue.$bus.emit('clickHotspot', id)
- }
- else if (window.location.pathname.indexOf('edit') > -1) {
- vue.$bus.emit('openHotspot', id)
- }
- else {
- window.parent.postMessage({ event: 'hotspot', targetCode: sceneCode }, '*')
- }
- }
- /**
- * 初始化
- */
- initHotspot(krpano, someData, type) {
- if (!someData) {
- return
- }
- let mysd = someData
- if (typeof someData == 'string') {
- mysd = JSON.parse(someData)
- }
-
- mysd.hotspots.forEach(item => {
- this.addhotspot(krpano, item, type)
- });
- }
- /**
- * 显示隐藏热点
- */
- toggleHotspot(krpano, toggle) {
- try {
- krpano.call(`set_hotspot_visible(${toggle})`);
- } catch (e) {
- e
- }
- }
- /**
- * 显示隐藏热点
- */
- }
- // toggleHotspot(krpano,someData,toggle){
- // if (!someData) {
- // return
- // }
- // let mysd = JSON.parse(someData)
- // mysd.hotspots.forEach(item => {
- // krpano.set(`hotspot[${item.name}].visible`,toggle);
- // });
- // }
|