sdk-floorplan.html 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. <style>
  8. html,
  9. body {
  10. width: 100%;
  11. height: 100%;
  12. margin: 0;
  13. overflow: hidden;
  14. }
  15. .scene {
  16. width: 100%;
  17. height: 100%;
  18. }
  19. #toolbar {
  20. position: absolute;
  21. left: 10px;
  22. bottom: 10px;
  23. z-index: 10000;
  24. }
  25. #toolbar2 {
  26. position: absolute;
  27. right: 10px;
  28. bottom: 10px;
  29. z-index: 10000;
  30. }
  31. li {
  32. list-style: none;
  33. margin-bottom: 10px;
  34. }
  35. </style>
  36. </head>
  37. <body>
  38. <div id="scene" class="scene"></div>
  39. <div id="toolbar"></div>
  40. <div id="toolbar2">
  41. <button onclick="click1()">切换</button>
  42. </div>
  43. <script src="../dist/sdk/kankan-sdk-deps.js"></script>
  44. <script src="../dist/sdk/kankan-sdk.js"></script>
  45. <script>
  46. localStorage.setItem('token','eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxNTkxNTgxNjA0MSIsImxvZ2luVHlwZSI6InVzZXIiLCJ1c2VyTmFtZSI6IjE1OTE1ODE2MDQxIiwiaWF0IjoxNjcyODg4ODQ1LCJqdGkiOiI2NjViMGJmNi01ZDY2LTQ2MjMtODQyOS05NzFlNDFkMGQ0YWUifQ.w2Xoqoafq-8qUO1oFfw-qxcb3CCh0DEXg3_WFQDtv1Y')
  47. // var kankan = new KanKan({
  48. // dom: '#scene',
  49. // view:false,
  50. // num: 'KJ-5K1AhMORlta',
  51. // server: 'https://4dmanage.autohome.com.cn/',
  52. // resource: 'https://vrs3three.autohome.com.cn/fdkankan-qczj-1/',
  53. // useStatistics:false
  54. // })
  55. var kankan = new KanKan({
  56. dom: '#scene',
  57. view:false,
  58. server: 'https://www.4dkankan.com/',
  59. num: 'LeNGVvARb7',
  60. useStatistics:false
  61. })
  62. function click1(){
  63. var floorplan = kankan.Plugins.Floorplan
  64. if(floorplan.display){
  65. floorplan.leave()
  66. }else {
  67. floorplan.enter()
  68. }
  69. }
  70. kankan.store.on('floorcad', data => {
  71. var html = []
  72. html.push('<ul>')
  73. data.floors.forEach(floor => {
  74. html.push('<li><button data-floor="' + floor.subgroup + '">' + floor.name + '</button></li>')
  75. })
  76. html.push('</ul>')
  77. document.getElementById('toolbar').innerHTML = html.join('')
  78. document
  79. .getElementById('toolbar')
  80. .querySelectorAll('button')
  81. .forEach(el => {
  82. el.addEventListener('click', e => {
  83. var floor = el.getAttribute('data-floor')
  84. kankan.use('Floorplan').then(floorplan => floorplan.setFloor(floor))
  85. })
  86. })
  87. })
  88. kankan.Camera.on('mode.beforeChange', ({ toMode, floorIndex }) => {
  89. console.log(floorIndex)
  90. })
  91. // 3d转2d
  92. // KanKan.Utils.convert.pointFrom3DTo2D({x:0,y:0,z:0}, floorplan.player || kankan.Camera.player)
  93. // 2d转23
  94. // KanKan.Utils.convert.pointFrom2DTo3D({x:0,y:0}, floorplan.player || kankan.Camera.player)
  95. kankan
  96. .use('Floorplan', {
  97. init: function (floorplan) {
  98. floorplan.$dom.addEventListener('click', e => {
  99. // 飞到附近的点位
  100. //let info = floorplan.flyToNearPano({ x: e.clientX, y: e.clientY })
  101. //console.log(info)
  102. // 获取附近的点位
  103. let info = floorplan.getNearPano({ x: e.clientX, y: e.clientY })
  104. console.log(info)
  105. })
  106. },
  107. render: function (floorplan, panos, zoom) {
  108. let radius = 5 * zoom
  109. floorplan.context.clearRect(0, 0, floorplan.$canvas.width, floorplan.$canvas.height)
  110. panos.forEach(pano => {
  111. var point = floorplan.getScreenPosition(pano.position) // KanKan.Utils.convert.pointFrom3DTo2D(pano.position, floorplan.player)
  112. floorplan.context.save()
  113. floorplan.context.beginPath()
  114. floorplan.context.arc(point.x, point.y, radius, 0, Math.PI * 2, true)
  115. floorplan.context.fillStyle = 'blue'
  116. floorplan.context.fill()
  117. floorplan.context.closePath()
  118. floorplan.context.beginPath()
  119. floorplan.context.font = '20px 微软雅黑'
  120. floorplan.context.fillStyle = '#fff'
  121. floorplan.context.textAlign = 'center'
  122. floorplan.context.textBaseline = 'middle'
  123. floorplan.context.fillText(pano.id, point.x, point.y)
  124. floorplan.context.closePath()
  125. floorplan.context.restore()
  126. })
  127. },
  128. })
  129. .then(floorplan => {
  130. // 进行平面图状态
  131. //floorplan.enter()
  132. })
  133. // 退出平面图状态
  134. // kankan.use('Floorplan').then(floorplan=>floorplan.leave())
  135. // 或
  136. // kankan.Plugins.Floorplan.leave()
  137. kankan.render()
  138. </script>
  139. </body>
  140. </html>