start.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. import * as THREE from "../../libs/three.js/build/three.module.js";
  2. import math from './utils/math.js'
  3. import browser from './utils/browser.js'
  4. import './three.shim.js'
  5. import "./potree.shim.js"
  6. export function start(dom, navDom, number ){ //t-Zvd3w0m
  7. Potree.settings.number = number || 't-o5YMR13'// 't-iksBApb'// 写在viewer前
  8. if(browser.urlHasValue('timing'))Potree.measureTimings = 1
  9. let viewer = new Potree.Viewer(dom , navDom);
  10. viewer.setEDLEnabled(false);
  11. viewer.setFOV(Potree.config.view.fov);
  12. if(!Potree.settings.isOfficial){
  13. viewer.loadGUI(() => {
  14. viewer.setLanguage('en');
  15. $("#menu_tools").next().show();
  16. $("#menu_scene").next().show();
  17. viewer.toggleSidebar();
  18. });
  19. Potree.settings.sizeFitToLevel = true//当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2
  20. Potree.settings.rotAroundPoint = false
  21. }
  22. if( browser.isMobile() && browser.urlHasValue('log')){
  23. changeLog()
  24. }
  25. {
  26. var cloudPath = //`${Potree.settings.urls.prefix1}/webcloud/cloud.js`
  27. Potree.settings.cloudPath || `${Potree.settings.urls.prefix1}/floor_0_webcloud/cloud.js`
  28. var timeStamp = 0 //var timeStamp = dataset.updateTime ? dataset.updateTime.replace(/[^0-9]/ig,'') : ''; //每重算一次后缀随updateTime更新一次
  29. Potree.loadPointCloud(cloudPath, timeStamp, e => {
  30. let scene = viewer.scene;
  31. let pointcloud = e.pointcloud;
  32. let config = Potree.config.material
  33. let material = pointcloud.material;
  34. //pointcloud.datasetData = dataset
  35. //pointcloud.dataset_id = dataset.id;//供漫游点找到属于的dataset点云
  36. pointcloud.hasDepthTex = Potree.settings.useDepthTex
  37. material.minSize = config.minSize
  38. material.maxSize = config.maxSize
  39. material.pointSizeType =/* Potree.settings.isOfficial ? */ config.pointSizeType /* : 'ADAPTIVE' */ //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED
  40. pointcloud.changePointSize(config.realPointSize) //material.size = config.pointSize;
  41. pointcloud.changePointOpacity(1)
  42. material.shape = Potree.PointShape.SQUARE;
  43. //pointcloud.color = pointcloud.material.color = dataset.color
  44. pointcloud.timeStamp = timeStamp
  45. //transformPointcloud(pointcloud,dataset)
  46. scene.addPointCloud(pointcloud);
  47. let done = ()=>{
  48. viewer.updateModelBound() //需等pano加载完
  49. let {boundSize, center} = viewer.bound
  50. viewer.dispatchEvent({type:'loadPointCloudDone'})
  51. if(!Potree.settings.UserPointDensity){
  52. Potree.settings.UserPointDensity = 'high'//'middle'
  53. }
  54. {//初始位置
  55. var panoId = browser.urlHasValue('pano',true);
  56. if(panoId !== ''){
  57. var pos
  58. var pano = viewer.images360.panos.find(e=>e.id==panoId);
  59. if(pano){
  60. viewer.images360.focusPano({
  61. pano,
  62. duration:0,
  63. callback:()=>{/* Potree.settings.displayMode = 'showPanos' */}
  64. })
  65. }
  66. }else{//考虑到多数据集距离很远,或者像隧道那种场景,要使视野范围内一定能看到点云,最好初始点设置在漫游点上
  67. let {boundSize, center} = viewer.bound
  68. let pano = viewer.images360.findNearestPano(center)
  69. pano && viewer.images360.flyToPano({
  70. pano, duration:0,
  71. target : viewer.images360.bound.center.setZ(pano.position.z) //平视中心区域(但也不能保证这个方向一定能看到点云密集区,如果在边缘的话)
  72. })
  73. }
  74. }
  75. let boxHelper = new Potree.Box3Helper(viewer.bound.boundingBox);
  76. boxHelper.matrixAutoUpdate = false;
  77. viewer.scene.scene.add(boxHelper)
  78. viewer.bound.boxHelper = boxHelper
  79. boxHelper.visible = false
  80. console.log('allLoaded')
  81. viewer.dispatchEvent('allLoaded')
  82. }
  83. if(Potree.settings.noPanos){
  84. done()
  85. }else{
  86. Potree.loadPanos( (data) => {
  87. //console.log('loadPanos',dataset.sceneCode, dataset.id, data)
  88. viewer.images360.addPanoData(data )
  89. viewer.images360.loadDone()
  90. done()
  91. })
  92. }
  93. })
  94. }
  95. window.THREE = THREE
  96. if(Potree.settings.isLocalhost){
  97. let before = {}
  98. viewer.inputHandler.addEventListener('keydown',e=>{ //测试的代码
  99. if(e.event.key == 't'){
  100. viewer.images360.cube.visible = true
  101. viewer.images360.cube.material.wireframe = true
  102. }else if(e.event.key == 'y'){
  103. viewer.images360.cube.material.wireframe = false
  104. viewer.images360.cube.visible = Potree.settings.displayMode == 'showPanos'
  105. }
  106. })
  107. }
  108. //--------------------------------
  109. /* if(!number){
  110. Potree.settings.boundAddObjs = true
  111. Potree.settings.intersectOnObjs = true
  112. // Load untextured bunny from ply
  113. viewer.loadModel({
  114. fileType:'ply',
  115. url:Potree.resourcePath + "/models/indoor.ply",
  116. name:'test',
  117. },
  118. (object)=>{
  119. object.isModel = true
  120. viewer.updateModelBound()
  121. }
  122. )
  123. } */
  124. }
  125. var changeLog = ()=>{
  126. var textarea = document.createElement('textarea');
  127. textarea.id = "consoleLog";
  128. textarea.style.width = '160px';
  129. textarea.style.height = '200px'
  130. textarea.style.position = 'fixed'
  131. textarea.style.right = 0
  132. textarea.style.bottom = '1px'
  133. textarea.style['z-index'] = 9999;
  134. textarea.style.color = 'black';
  135. textarea.style.opacity = 0.9;
  136. textarea.style['font-size'] = '12px';
  137. textarea.style['backgroundColor'] = '#ffffff'
  138. document.getElementsByTagName("body")[0].appendChild(textarea);
  139. var list = ["log", "error", "warn", "debug", "info", "time", "timeEnd"]
  140. var exchange = function (o) {
  141. console["old" + o] = console[o];
  142. console[o] = function () {
  143. var args = Array.from(arguments)
  144. console["old" + o].apply(this, arguments)
  145. var t = document.getElementById("consoleLog").innerHTML;
  146. var str = ''
  147. args.forEach(a=>{
  148. str += a + ' '
  149. })
  150. document.getElementById("consoleLog").innerHTML = str + "\n\n" + t;
  151. }
  152. }
  153. for (var i = 0; i < list.length; i++) {
  154. exchange(list[i])
  155. }
  156. }