utils.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. import Vue from 'vue'
  2. import { convertJQHotspot } from './hotspot'
  3. let vue = new Vue()
  4. export default class Utils {
  5. constructor() {
  6. }
  7. /**
  8. * 设置初始视角
  9. */
  10. setInitView(krpano, canvas) {
  11. let url = this.setInitAngleImg(canvas);
  12. var sceneName = krpano.get('xml.scene');
  13. var hlookat = krpano.get("view.hlookat");
  14. var vlookat = krpano.get("view.vlookat");
  15. return {
  16. sceneName,
  17. hlookat,
  18. vlookat,
  19. url
  20. }
  21. }
  22. scaleCanvas(canvas, width, height) {
  23. let w = canvas.width
  24. let h = canvas.height;
  25. if (width == undefined) {
  26. width = w;
  27. }
  28. if (height == undefined) {
  29. height = h;
  30. }
  31. var retCanvas = document.createElement('canvas');
  32. var retCtx = retCanvas.getContext('2d');
  33. retCanvas.width = width;
  34. retCanvas.height = height;
  35. retCtx.drawImage(canvas, 0, 0, w, h, 0, 0, width, height);
  36. return retCanvas;
  37. }
  38. getDataURL(canvas, type, width, height) {
  39. let cas = this.scaleCanvas(canvas, width, height);
  40. return cas.toDataURL(type, 1);
  41. }
  42. setInitAngleImg(mycanvas) {
  43. var url = this.getDataURL(mycanvas, "image/jpeg", 600, 400);
  44. return url
  45. }
  46. radarRotate() {
  47. // console.log(sceneName,hlookat);
  48. }
  49. /**
  50. * 编辑热点
  51. */
  52. edithotspot(krpano, param) {
  53. try {
  54. const hotspot = convertJQHotspot(param);
  55. const hotspotStyle = Object.values(hotspot.style);
  56. const hotspotString = hotspotStyle.join('|');
  57. const hotspotSize = (Number(hotspot.size) || 1) * 50;
  58. let icon = hotspot.icon.replace(/,/g, '|');
  59. const callString = `editJQHotspot(
  60. ${hotspot.id},
  61. ${hotspot.type},
  62. ${hotspot.title},
  63. "${icon}",
  64. ${hotspot.ath},
  65. ${hotspot.atv},
  66. "${hotspot.link}",
  67. ${hotspotSize},
  68. ${hotspot.visible},
  69. "${hotspotString}"
  70. )`;
  71. // krpano.stopcall(callString);
  72. krpano.call(callString);
  73. } catch (error) {
  74. console.error('error', error);
  75. }
  76. }
  77. /**
  78. * 添加热点
  79. */
  80. addhotspot(krpano, param, type) {
  81. /**
  82. * type: 0,系统图标 , 1.自定义图际. 2.序列帧 3.个性标签
  83. */
  84. try {
  85. krpano.set("curscreen_x", krpano.get('stagewidth') / 2);
  86. krpano.set("curscreen_y", krpano.get('stageheight') / 2);
  87. krpano.call("screentosphere(curscreen_x, curscreen_y, curscreen_ath, curscreen_atv);");
  88. const hotspot = convertJQHotspot(param);
  89. const hotspotStyle = Object.values(hotspot.style);
  90. const hotspotString = hotspotStyle.join('|');
  91. const hotspotSize = (Number(hotspot.size) || 1) * 50;
  92. const ath = hotspot.ath != '' ? hotspot.ath : krpano.get("curscreen_ath");
  93. const atv = hotspot.atv != '' ? hotspot.atv : krpano.get("curscreen_atv");
  94. let icon = hotspot.icon.replace(/,/g, '|');
  95. const callString = `addJQHotspot(
  96. ${hotspot.id},
  97. ${hotspot.type},
  98. ${hotspot.title},
  99. "${icon}",
  100. ${ath},
  101. ${atv},
  102. "${hotspot.link}",
  103. ${hotspotSize},
  104. ${hotspot.visible},
  105. "${hotspotString}"
  106. )`;
  107. krpano.call(callString);
  108. } catch (error) {
  109. console.error('error', error);
  110. }
  111. // 设置热点图片默认的偏移值
  112. // let offset = '-130%'
  113. // if (param.size < 1) {
  114. // offset = '-200%'
  115. // }
  116. // if (param.size > 1) {
  117. // offset = '-100%'
  118. // }
  119. // krpano.set('layer[tooltip_' + param.name + '].y', `${offset}`)
  120. }
  121. /**
  122. * 获取鼠标当前位置
  123. */
  124. getCurrentMousePosition(krpano, hotspotName) {
  125. let panoW = krpano.get('stagewidth')
  126. let panoH = krpano.get('stageheight')
  127. let stagex = krpano.get('mouse.stagex')
  128. let stagey = krpano.get('mouse.stagey')
  129. if (stagex < 0 || stagex > panoW || stagey < 0 || stagey > panoH) {
  130. return
  131. }
  132. krpano.call('screentosphere(mouse.stagex, mouse.stagey, toh, tov)')
  133. krpano.set(`hotspot[${hotspotName}].ath`, krpano.get('toh'));
  134. krpano.set(`hotspot[${hotspotName}].atv`, krpano.get('tov'));
  135. }
  136. htmlEncode(str) {
  137. var s = "";
  138. if (str.length == 0) return "";
  139. s = str.replace(/\'/g, "&#39;");
  140. s = s.replace(/\"/g, "&quot;");
  141. s = s.replace(/\(/g, "(");
  142. s = s.replace(/\)/g, ")");
  143. s = s.replace(/,/g, ",");
  144. return s;
  145. }
  146. /**
  147. *
  148. * @param {*} 定位热点
  149. */
  150. looktohotspot(krpano, hotspotName) {
  151. var curFov = krpano.get('view.fov');
  152. krpano.call('looktohotspot(' + hotspotName + ',' + curFov + ')');
  153. }
  154. /**
  155. *
  156. * @param {*} 定位热点
  157. */
  158. getHotspotHV(krpano, hotspotName) {
  159. var ath = krpano.get(`hotspot[${hotspotName}].ath`);
  160. var atv = krpano.get(`hotspot[${hotspotName}].atv`);
  161. return { ath, atv }
  162. }
  163. /**
  164. * 打开热点链接
  165. */
  166. linkopen(sceneCode, id) {
  167. // debugger;
  168. if (window.location.pathname.indexOf('show') > -1) {
  169. vue.$bus.emit('clickHotspot', id)
  170. }
  171. else if (window.location.pathname.indexOf('edit') > -1) {
  172. vue.$bus.emit('openHotspot', id)
  173. }
  174. else {
  175. window.parent.postMessage({ event: 'hotspot', targetCode: sceneCode }, '*')
  176. }
  177. }
  178. /**
  179. * 初始化
  180. */
  181. initHotspot(krpano, someData, type) {
  182. if (!someData) {
  183. return
  184. }
  185. let mysd = someData
  186. if (typeof someData == 'string') {
  187. mysd = JSON.parse(someData)
  188. }
  189. mysd.hotspots.forEach(item => {
  190. this.addhotspot(krpano, item, type)
  191. });
  192. }
  193. /**
  194. * 显示隐藏热点
  195. */
  196. toggleHotspot(krpano, toggle) {
  197. try {
  198. krpano.call(`set_hotspot_visible(${toggle})`);
  199. } catch (e) {
  200. e
  201. }
  202. }
  203. /**
  204. * 显示隐藏热点
  205. */
  206. }
  207. // toggleHotspot(krpano,someData,toggle){
  208. // if (!someData) {
  209. // return
  210. // }
  211. // let mysd = JSON.parse(someData)
  212. // mysd.hotspots.forEach(item => {
  213. // krpano.set(`hotspot[${item.name}].visible`,toggle);
  214. // });
  215. // }