start.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. if( browser.isMobile()){
  22. changeLog()
  23. }
  24. }
  25. {
  26. var cloudPath = //`${Potree.settings.urls.prefix1}/${dataset.webBin}` //webBin添加原因:每次裁剪之类的操作会换路径,因为oss文件缓存太严重,更新慢
  27. `${Potree.settings.urls.prefix1}/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. Potree.loadPanos( (data) => {
  48. //console.log('loadPanos',dataset.sceneCode, dataset.id, data)
  49. viewer.images360.addPanoData(data )
  50. viewer.images360.loadDone()
  51. viewer.scene.add360Images(viewer.images360);
  52. viewer.updateModelBound() //需等pano加载完
  53. let {boundSize, center} = viewer.bound
  54. viewer.dispatchEvent({type:'loadPointCloudDone'})
  55. if(!Potree.settings.UserPointDensity){
  56. Potree.settings.UserPointDensity = 'high'//'middle'
  57. }
  58. {//初始位置
  59. var panoId = browser.urlHasValue('pano',true);
  60. if(panoId !== ''){
  61. var pos
  62. var pano = viewer.images360.panos.find(e=>e.id==panoId);
  63. if(pano){
  64. viewer.images360.focusPano({
  65. pano,
  66. duration:0,
  67. callback:()=>{/* Potree.settings.displayMode = 'showPanos' */}
  68. })
  69. }
  70. }else{//考虑到多数据集距离很远,或者像隧道那种场景,要使视野范围内一定能看到点云,最好初始点设置在漫游点上
  71. let {boundSize, center} = viewer.bound
  72. let pano = viewer.images360.findNearestPano(center)
  73. pano && viewer.images360.flyToPano({
  74. pano, duration:0,
  75. target : viewer.images360.bound.center.setZ(pano.position.z) //平视中心区域(但也不能保证这个方向一定能看到点云密集区,如果在边缘的话)
  76. })
  77. }
  78. }
  79. console.log('allLoaded')
  80. viewer.dispatchEvent('allLoaded')
  81. })
  82. })
  83. }
  84. window.THREE = THREE
  85. if(Potree.settings.isLocalhost){
  86. let before = {}
  87. viewer.inputHandler.addEventListener('keydown',e=>{ //测试的代码
  88. if(e.event.key == 't'){
  89. viewer.images360.cube.visible = true
  90. viewer.images360.cube.material.wireframe = true
  91. }else if(e.event.key == 'y'){
  92. viewer.images360.cube.material.wireframe = false
  93. viewer.images360.cube.visible = Potree.settings.displayMode == 'showPanos'
  94. }
  95. })
  96. }
  97. //--------------------------------
  98. /* if(!number){
  99. Potree.settings.boundAddObjs = true
  100. Potree.settings.intersectOnObjs = true
  101. // Load untextured bunny from ply
  102. viewer.loadModel({
  103. fileType:'ply',
  104. url:Potree.resourcePath + "/models/indoor.ply",
  105. name:'test',
  106. },
  107. (object)=>{
  108. object.isModel = true
  109. viewer.updateModelBound()
  110. }
  111. )
  112. } */
  113. }
  114. var changeLog = ()=>{
  115. var textarea = document.createElement('textarea');
  116. textarea.id = "consoleLog";
  117. textarea.style.width = '160px';
  118. textarea.style.height = '200px'
  119. textarea.style.position = 'fixed'
  120. textarea.style.left = 0
  121. textarea.style.bottom = '50px'
  122. textarea.style['z-index'] = 9999;
  123. textarea.style.color = 'black';
  124. textarea.style.opacity = 0.9;
  125. textarea.style['font-size'] = '12px';
  126. textarea.style['backgroundColor'] = '#ffffff'
  127. document.getElementsByTagName("body")[0].appendChild(textarea);
  128. var list = ["log", "error", "warn", "debug", "info", "time", "timeEnd"]
  129. var exchange = function (o) {
  130. console["old" + o] = console[o];
  131. console[o] = function () {
  132. var args = Array.from(arguments)
  133. console["old" + o].apply(this, arguments)
  134. var t = document.getElementById("consoleLog").innerHTML;
  135. var str = ''
  136. args.forEach(a=>{
  137. str += a + ' '
  138. })
  139. document.getElementById("consoleLog").innerHTML = str + "\n\n" + t;
  140. }
  141. }
  142. for (var i = 0; i < list.length; i++) {
  143. exchange(list[i])
  144. }
  145. }