import * as THREE from "../../libs/three.js/build/three.module.js"; import math from './utils/math.js' import browser from './utils/browser.js' import './three.shim.js' import "./potree.shim.js" export function start(dom, navDom, number ){ //t-Zvd3w0m Potree.settings.number = number || 't-o5YMR13'// 't-iksBApb'// 写在viewer前 if(browser.urlHasValue('timing'))Potree.measureTimings = 1 let viewer = new Potree.Viewer(dom , navDom); viewer.setEDLEnabled(false); viewer.setFOV(Potree.config.view.fov); if(!Potree.settings.isOfficial){ viewer.loadGUI(() => { viewer.setLanguage('en'); $("#menu_tools").next().show(); $("#menu_scene").next().show(); viewer.toggleSidebar(); }); Potree.settings.sizeFitToLevel = true//当type为衰减模式时自动根据level调节大小。每长一级,大小就除以2 Potree.settings.rotAroundPoint = false if( browser.isMobile()){ changeLog() } } { var cloudPath = //`${Potree.settings.urls.prefix1}/${dataset.webBin}` //webBin添加原因:每次裁剪之类的操作会换路径,因为oss文件缓存太严重,更新慢 `${Potree.settings.urls.prefix1}/webcloud/cloud.js` var timeStamp = 0 //var timeStamp = dataset.updateTime ? dataset.updateTime.replace(/[^0-9]/ig,'') : ''; //每重算一次后缀随updateTime更新一次 Potree.loadPointCloud(cloudPath, timeStamp, e => { let scene = viewer.scene; let pointcloud = e.pointcloud; let config = Potree.config.material let material = pointcloud.material; //pointcloud.datasetData = dataset //pointcloud.dataset_id = dataset.id;//供漫游点找到属于的dataset点云 pointcloud.hasDepthTex = Potree.settings.useDepthTex material.minSize = config.minSize material.maxSize = config.maxSize material.pointSizeType =/* Potree.settings.isOfficial ? */ config.pointSizeType /* : 'ADAPTIVE' */ //Potree.PointSizeType[config.pointSizeType]//Potree.PointSizeType.ADAPTIVE;//FIXED pointcloud.changePointSize(config.realPointSize) //material.size = config.pointSize; pointcloud.changePointOpacity(1) material.shape = Potree.PointShape.SQUARE; //pointcloud.color = pointcloud.material.color = dataset.color pointcloud.timeStamp = timeStamp //transformPointcloud(pointcloud,dataset) scene.addPointCloud(pointcloud); Potree.loadPanos( (data) => { //console.log('loadPanos',dataset.sceneCode, dataset.id, data) viewer.images360.addPanoData(data ) viewer.images360.loadDone() viewer.scene.add360Images(viewer.images360); viewer.updateModelBound() //需等pano加载完 let {boundSize, center} = viewer.bound viewer.dispatchEvent({type:'loadPointCloudDone'}) if(!Potree.settings.UserPointDensity){ Potree.settings.UserPointDensity = 'high'//'middle' } {//初始位置 var panoId = browser.urlHasValue('pano',true); if(panoId !== ''){ var pos var pano = viewer.images360.panos.find(e=>e.id==panoId); if(pano){ viewer.images360.focusPano({ pano, duration:0, callback:()=>{/* Potree.settings.displayMode = 'showPanos' */} }) } }else{//考虑到多数据集距离很远,或者像隧道那种场景,要使视野范围内一定能看到点云,最好初始点设置在漫游点上 let {boundSize, center} = viewer.bound let pano = viewer.images360.findNearestPano(center) pano && viewer.images360.flyToPano({ pano, duration:0, target : viewer.images360.bound.center.setZ(pano.position.z) //平视中心区域(但也不能保证这个方向一定能看到点云密集区,如果在边缘的话) }) } } console.log('allLoaded') viewer.dispatchEvent('allLoaded') }) }) } window.THREE = THREE if(Potree.settings.isLocalhost){ let before = {} viewer.inputHandler.addEventListener('keydown',e=>{ //测试的代码 if(e.event.key == 't'){ viewer.images360.cube.visible = true viewer.images360.cube.material.wireframe = true }else if(e.event.key == 'y'){ viewer.images360.cube.material.wireframe = false viewer.images360.cube.visible = Potree.settings.displayMode == 'showPanos' } }) } //-------------------------------- /* if(!number){ Potree.settings.boundAddObjs = true Potree.settings.intersectOnObjs = true // Load untextured bunny from ply viewer.loadModel({ fileType:'ply', url:Potree.resourcePath + "/models/indoor.ply", name:'test', }, (object)=>{ object.isModel = true viewer.updateModelBound() } ) } */ } var changeLog = ()=>{ var textarea = document.createElement('textarea'); textarea.id = "consoleLog"; textarea.style.width = '160px'; textarea.style.height = '200px' textarea.style.position = 'fixed' textarea.style.left = 0 textarea.style.bottom = '50px' textarea.style['z-index'] = 9999; textarea.style.color = 'black'; textarea.style.opacity = 0.9; textarea.style['font-size'] = '12px'; textarea.style['backgroundColor'] = '#ffffff' document.getElementsByTagName("body")[0].appendChild(textarea); var list = ["log", "error", "warn", "debug", "info", "time", "timeEnd"] var exchange = function (o) { console["old" + o] = console[o]; console[o] = function () { var args = Array.from(arguments) console["old" + o].apply(this, arguments) var t = document.getElementById("consoleLog").innerHTML; var str = '' args.forEach(a=>{ str += a + ' ' }) document.getElementById("consoleLog").innerHTML = str + "\n\n" + t; } } for (var i = 0; i < list.length; i++) { exchange(list[i]) } }