utils.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  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. // 1280x720
  53. // 1440x900
  54. //1290x 1280
  55. // 998px
  56. edithotspot(krpano, param) {
  57. try {
  58. const hotspot = convertJQHotspot(param);
  59. const hotspotStyle = Object.values(hotspot.style);
  60. const hotspotString = hotspotStyle.join('|');
  61. const hotspotSize = (Number(hotspot.size) || 1) * 40;
  62. let icon = hotspot.icon.replace(/,/g, '|');
  63. const callString = `editJQHotspot(
  64. ${hotspot.id},
  65. ${hotspot.type},
  66. ${hotspot.title},
  67. "${icon}",
  68. ${hotspot.ath},
  69. ${hotspot.atv},
  70. "${hotspot.link}",
  71. ${hotspotSize},
  72. ${hotspot.visible},
  73. "${hotspotString}"
  74. )`;
  75. // krpano.stopcall(callString);
  76. krpano.call(callString);
  77. } catch (error) {
  78. console.error('error', error);
  79. }
  80. }
  81. /**
  82. * 添加热点
  83. */
  84. addhotspot(krpano, param, type) {
  85. /**
  86. * type: 0,系统图标 , 1.自定义图际. 2.序列帧 3.个性标签
  87. */
  88. try {
  89. krpano.set("curscreen_x", krpano.get('stagewidth') / 2);
  90. krpano.set("curscreen_y", krpano.get('stageheight') / 2);
  91. krpano.call("screentosphere(curscreen_x, curscreen_y, curscreen_ath, curscreen_atv);");
  92. const hotspot = convertJQHotspot(param);
  93. const hotspotStyle = Object.values(hotspot.style);
  94. const hotspotString = hotspotStyle.join('|');
  95. const hotspotSize = (Number(hotspot.size) || 1) * 40;
  96. const ath = hotspot.ath != '' ? hotspot.ath : krpano.get("curscreen_ath");
  97. const atv = hotspot.atv != '' ? hotspot.atv : krpano.get("curscreen_atv");
  98. let icon = hotspot.icon.replace(/,/g, '|');
  99. const callString = `addJQHotspot(
  100. ${hotspot.id},
  101. ${hotspot.type},
  102. ${hotspot.title},
  103. "${icon}",
  104. ${ath},
  105. ${atv},
  106. "${hotspot.link}",
  107. ${hotspotSize},
  108. ${hotspot.visible},
  109. "${hotspotString}"
  110. )`;
  111. krpano.call(callString);
  112. } catch (error) {
  113. console.error('error', error);
  114. }
  115. }
  116. /**
  117. * 获取鼠标当前位置
  118. */
  119. getCurrentMousePosition(krpano, hotspotName) {
  120. let panoW = krpano.get('stagewidth')
  121. let panoH = krpano.get('stageheight')
  122. let stagex = krpano.get('mouse.stagex')
  123. let stagey = krpano.get('mouse.stagey')
  124. if (stagex < 0 || stagex > panoW || stagey < 0 || stagey > panoH) {
  125. return
  126. }
  127. krpano.call('screentosphere(mouse.stagex, mouse.stagey, toh, tov)')
  128. // const toh = krpano.get('toh');
  129. // const tov = krpano.get('tov');
  130. // console.log('toh', toh);
  131. // console.log('tov', tov);
  132. krpano.set(`hotspot[${hotspotName}].ath`, krpano.get('toh'));
  133. krpano.set(`hotspot[${hotspotName}].atv`, krpano.get('tov'));
  134. }
  135. htmlEncode(str) {
  136. var s = "";
  137. if (str.length == 0) return "";
  138. s = str.replace(/\'/g, "&#39;");
  139. s = s.replace(/\"/g, "&quot;");
  140. s = s.replace(/\(/g, "(");
  141. s = s.replace(/\)/g, ")");
  142. s = s.replace(/,/g, ",");
  143. return s;
  144. }
  145. /**
  146. *
  147. * @param {*} 定位热点
  148. */
  149. looktohotspot(krpano, hotspotName) {
  150. var curFov = krpano.get('view.fov');
  151. krpano.call('looktohotspot(' + hotspotName + ',' + curFov + ')');
  152. }
  153. /**
  154. *
  155. * @param {*} 定位热点
  156. */
  157. getHotspotHV(krpano, hotspotName) {
  158. var ath = krpano.get(`hotspot[${hotspotName}].ath`);
  159. var atv = krpano.get(`hotspot[${hotspotName}].atv`);
  160. return { ath, atv }
  161. }
  162. /**
  163. * 打开热点链接
  164. */
  165. linkopen(sceneCode, id) {
  166. if (window.location.pathname.indexOf('show') > -1) {
  167. vue.$bus.emit('clickHotspot', id)
  168. }
  169. else if (window.location.pathname.indexOf('edit') > -1) {
  170. vue.$bus.emit('openHotspot', id)
  171. }
  172. else {
  173. window.parent.postMessage({ event: 'hotspot', targetCode: sceneCode }, '*')
  174. }
  175. }
  176. /**
  177. * 初始化
  178. */
  179. initHotspot(krpano, someData, type) {
  180. if (!someData) {
  181. return
  182. }
  183. let mysd = someData
  184. if (typeof someData == 'string') {
  185. mysd = JSON.parse(someData)
  186. }
  187. mysd.hotspots.forEach(item => {
  188. this.addhotspot(krpano, item, type)
  189. });
  190. }
  191. /**
  192. * 显示隐藏热点
  193. */
  194. toggleHotspot(krpano, toggle) {
  195. try {
  196. krpano.call(`set_hotspot_visible(${toggle})`);
  197. } catch (e) {
  198. e
  199. }
  200. }
  201. /**
  202. * 显示隐藏热点
  203. */
  204. }
  205. // toggleHotspot(krpano,someData,toggle){
  206. // if (!someData) {
  207. // return
  208. // }
  209. // let mysd = JSON.parse(someData)
  210. // mysd.hotspots.forEach(item => {
  211. // krpano.set(`hotspot[${item.name}].visible`,toggle);
  212. // });
  213. // }