| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- 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() && browser.urlHasValue('log')){
- changeLog()
- }
- {
-
- var cloudPath = //`${Potree.settings.urls.prefix1}/webcloud/cloud.js`
- Potree.settings.cloudPath || `${Potree.settings.urls.prefix1}/floor_0_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);
-
-
- let done = ()=>{
- 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) //平视中心区域(但也不能保证这个方向一定能看到点云密集区,如果在边缘的话)
- })
- }
- }
-
-
- let boxHelper = new Potree.Box3Helper(viewer.bound.boundingBox);
- boxHelper.matrixAutoUpdate = false;
- viewer.scene.scene.add(boxHelper)
- viewer.bound.boxHelper = boxHelper
- boxHelper.visible = false
-
- console.log('allLoaded')
- viewer.dispatchEvent('allLoaded')
- }
-
-
- if(Potree.settings.noPanos){
- done()
- }else{
- Potree.loadPanos( (data) => {
- //console.log('loadPanos',dataset.sceneCode, dataset.id, data)
- viewer.images360.addPanoData(data )
- viewer.images360.loadDone()
-
- done()
- })
- }
- })
-
- }
-
-
- 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.right = 0
- textarea.style.bottom = '1px'
- 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])
- }
-
-
-
- }
-
-
-
-
-
-
-
|