utils.js 4.8 KB

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