123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- import Vue from 'vue'
- import { convertJQHotspot } from './hotspot'
- 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) {
- try {
- const hotspot = convertJQHotspot(param);
- const hotspotStyle = Object.values(hotspot.style);
- const hotspotString = hotspotStyle.join('|');
- const hotspotSize = (Number(hotspot.size) || 1) * 50;
- let icon = hotspot.icon.replace(/,/g, '|');
- const callString = `editJQHotspot(
- ${hotspot.id},
- ${hotspot.type},
- ${hotspot.title},
- "${icon}",
- ${hotspot.ath},
- ${hotspot.atv},
- "${hotspot.link}",
- ${hotspotSize},
- ${hotspot.visible},
- "${hotspotString}"
- )`;
- // krpano.stopcall(callString);
- krpano.call(callString);
- } catch (error) {
- console.error('error', error);
- }
- }
- /**
- * 添加热点
- */
- addhotspot(krpano, param, type) {
- /**
- * type: 0,系统图标 , 1.自定义图际. 2.序列帧 3.个性标签
- */
- try {
- 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);");
- const hotspot = convertJQHotspot(param);
- const hotspotStyle = Object.values(hotspot.style);
- const hotspotString = hotspotStyle.join('|');
- const hotspotSize = (Number(hotspot.size) || 1) * 50;
- const ath = hotspot.ath != '' ? hotspot.ath : krpano.get("curscreen_ath");
- const atv = hotspot.atv != '' ? hotspot.atv : krpano.get("curscreen_atv");
- let icon = hotspot.icon.replace(/,/g, '|');
- const callString = `addJQHotspot(
- ${hotspot.id},
- ${hotspot.type},
- ${hotspot.title},
- "${icon}",
- ${ath},
- ${atv},
- "${hotspot.link}",
- ${hotspotSize},
- ${hotspot.visible},
- "${hotspotString}"
- )`;
- krpano.call(callString);
- } catch (error) {
- console.error('error', error);
- }
- // 设置热点图片默认的偏移值
- // 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) {
- // debugger;
- 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);
- // });
- // }
|