xzw 10 months ago
parent
commit
abe0e3787a
3 changed files with 52 additions and 20 deletions
  1. 30 7
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 21 12
      src/sdk/cover/index.js

+ 30 - 7
public/lib/potree/potree.js

@@ -17744,8 +17744,9 @@
 	    };
 	    this.borderRadius = options.borderRadius || 6;
 	    this.margin = options.margin;
-	    this.setText(options.text);
+	    this.textAlign = options.textAlign || 'center';
 	    this.name = options.name;
+	    this.setText(options.text);
 
 	    //this.setText(text);
 	  }
@@ -17901,8 +17902,9 @@
 	      //console.log(actualBoundingBoxAscent)
 
 	      //console.log(this.text, 'y' , y, 'actualBoundingBoxAscent', metrics.actualBoundingBoxAscent,'expand',expand )
-	      var textLeftSpace = (textMaxWidth - infos[i].width) / 2;
+	      var textLeftSpace = this.textAlign == 'center' ? (textMaxWidth - infos[i].width) / 2 : this.textAlign == 'left' ? 0 : textMaxWidth - infos[i].width;
 	      var x = this.rectBorderThick + margin.x + textLeftSpace;
+
 	      // text color
 	      if (this.textBorderThick) {
 	        context.strokeStyle = 'rgba(' + this.textBorderColor.r + ',' + this.textBorderColor.g + ',' + this.textBorderColor.b + ',' + this.textBorderColor.a + ')';
@@ -26894,7 +26896,11 @@
 	    this.floorPosition = floorPosition;
 	    //this.mesh.position.copy(this.position)
 	    this.marker.position.copy(this.floorPosition);
-	    this.marker.position.z += 0.04; //会被点云遮住
+	    this.marker.lookAt(position); //融合页面marker可能跟随模型倾斜
+
+	    var upVec = new Vector3().subVectors(position, floorPosition).normalize().multiplyScalar(0.04);
+	    this.marker.position.add(upVec); //this.marker.position.z+=0.04//会被点云遮住
+
 	    if (this.label) {
 	      if (Potree.settings.editType == 'pano') {
 	        this.label.position.copy(this.position);
@@ -27134,10 +27140,12 @@
 	  dispose() {
 	    var i = viewer.images360.panos.indexOf(this);
 	    if (i == -1) return;
+	    viewer.images360.panos.splice(i, 1);
+	    i = this.pointcloud.panos.indexOf(this);
+	    this.pointcloud.panos.splice(i, 1);
 	    this.marker.parent.remove(this.marker);
 	    this.removeTextLabel();
 	    if (this.depthTex) this.depthTex.dispose();
-	    viewer.images360.panos.splice(i, 1);
 	    this.dispatchEvent('dispose');
 	    //删除tile贴图、depthTex等以后再写
 	  }
@@ -28427,7 +28435,7 @@
 	      if (this.processPriorityQueue) {
 	        Potree.Common.intervalTool.isWaiting('processPriorityQueue', () => {
 	          //延时update,防止崩溃 , 未到时间就拦截(第一次直接执行)
-	          this.queuePrioritizedTilesForPanos(this.panos); //这句比较耗时 降四倍时大概1-2毫秒
+	          this.downloadCubeTex && this.queuePrioritizedTilesForPanos(this.panos); //这句比较耗时 降四倍时大概1-2毫秒
 	        }, 66);
 	        this.priorityQueue.length > 0 && (e = !0);
 	        this.processQueueForDownloading(this.priorityQueue);
@@ -30227,6 +30235,12 @@
 	var HighMapCubeWidth = 1;
 	var directionFactor = 400; //原先10,几乎只往距离近的走了;设置太大容易略过近处漫游点走向下坡,因为鼠标一般在地面,下坡的漫游点更有利
 
+	var getID = function () {
+	  var id = 0;
+	  return function () {
+	    return id++;
+	  };
+	}();
 	class Images360 extends EventDispatcher {
 	  constructor(viewer) {
 	    super();
@@ -32345,12 +32359,15 @@
 
 	    data.forEach(info => {
 	      //if(Potree.fileServer){
-	      info.id = this.panos.length; //把info的id的一长串数字改简单点
+	      info.id = getID(); //把info的id的一长串数字改简单点
 	      info.pointcloud = pointcloud;
 	      //} 
 	      var pano = new Panorama(info, this);
 	      pano.addEventListener('dispose', e => {
 	        if (this.closestPano == pano) this.closestPano = null;
+	        if (this.currentPano == pano && Potree.settings.displayMode == 'showPanos') {
+	          Potree.settings.displayMode = 'showPointCloud';
+	        }
 	      });
 	      this.panos.push(pano);
 	      this.neighbourMap[info.id] = {};
@@ -68798,6 +68815,7 @@
 	    return models.find(e => e.dataset_id == id);
 	  },
 	  removeModel(model) {
+	    var _model$panos;
 	    if (this.selected == model) this.selectModel(null);
 	    var dispose = e => {
 	      e.geometry && e.geometry.dispose();
@@ -68813,6 +68831,10 @@
 	      viewer.objs.remove(model);
 	      this.updateMemoryUsage();
 	    }
+	    (_model$panos = model.panos) === null || _model$panos === void 0 || _model$panos.slice().forEach(e => {
+	      e.dispose();
+	    });
+	    viewer.images360.tileDownloader.setPanoData(viewer.images360.panos, []);
 	  },
 	  selectModel(model) {
 	    var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
@@ -68864,6 +68886,7 @@
 	    //center.add(model.position)     
 	    this.boxHelper.position.copy(center);
 	    this.boxHelper.quaternion.copy(model.quaternion);
+	    viewer.dispatchEvent('content_changed');
 	  },
 	  showModelOutline(model, state) {
 	    if (Potree.settings.mergeType2 || (model ? model.fileType == '3dgs' : this.boxHelper.visible)) {
@@ -69041,7 +69064,7 @@
 	    viewer.mapViewer && Potree.settings.showObjectsOnMap && viewer.mapViewer.dispatchEvent('content_changed');
 
 	    //--------
-	    this.updateBoxHelper(model);
+	    this.selected == model && this.updateBoxHelper(model);
 	  },
 	  changeOpacity(model, opacity) {
 	    var isRoot = model.dataset_id != void 0; //是否是最外层 

File diff suppressed because it is too large
+ 1 - 1
public/lib/potree/potree.js.map


+ 21 - 12
src/sdk/cover/index.js

@@ -3,6 +3,7 @@ import mitt from 'mitt'
 import axios from 'axios' //{ axios } from '@/api'
 
 let requestLoadCount = 0
+let maxLoadingCount = 2; //正在加载模型的最大数目
 //0看看,1看见,2深时,3用户上传三维模型,4深时mesh,5深光点云,6深光mesh
 const ModelTypes = {
     0 : {name:'看看(八目)', panos4dkk:true},
@@ -11,7 +12,7 @@ const ModelTypes = {
     3 : {name:'用户上传三维模型'},
     4 : {name:'深时mesh(激光转台)',panos4dkk:true, rot90:true},//3dtiles
     5 : {name:'深光点云' },
-    6 : {name:'深光mesh',panos4dkk:true, rot90:true},
+    6 : {name:'深光mesh',panos4dkk:true, rot90:true},//3dtiles
 }
 
 
@@ -52,9 +53,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
     Potree.settings.showCesium && buildMap()
      */
     
-    
-    
-    
+    //因为getPose里用的是target,俯视的yaw不准,所以限制一下不要完全俯视
+    viewer.mainViewport.view.maxPitch-=0.001
+    viewer.mainViewport.view.minPitch+=0.001
     
 
     viewer.addEventListener('camera_changed', e => {
@@ -234,7 +235,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
     //isLocal = false 
     let autoLoads = /* window.autoLoads = */ []
     let readyToAddModel
-    let maxLoadingCount = 3; //正在加载模型的最大数目
+    
 
     let mainBackground = viewer.background
 
@@ -446,7 +447,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
         screenshot: (width, height/* , bgOpacity=0 */ ) => {//
             //截图 
-            let bgOpacity = 0 //因为要画map底图所以上层只能透明。之后需要的话再改
+            let bgOpacity =  Potree.settings.showCesium  ? 0 : 1        /* viewer.background == 'skybox' */  //因为要画map底图所以上层只能透明。之后需要的话再改
+            
+            console.log('bgOpacity', bgOpacity)
+            
             Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', false)
             var { getImagePromise, finishPromise } = viewer.startScreenshot({ type: 'default', /* useRenderTarget:true,  */bgOpacity }, width, height)
             var deferred = $.Deferred();
@@ -558,6 +562,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
              
             if(type == 'map'){
                 MergeEditor.setGroundPlaneImg(null)
+                viewer.setBackground(mainBackground)
                 Potree.settings.showCesium = true
                 buildMap()
                 viewer.backgroundOpacity = 0
@@ -1066,6 +1071,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
                 destroy() {
                     model && MergeEditor.removeModel(model)
+                    result.changeSelect(false)
                     viewer.dispatchEvent('content_changed')
                 }
 
@@ -1357,19 +1363,20 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 terrainShadows: Cesium.ShadowMode.DISABLED, //terrain地形
             });
 
-            
-            //lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
+             
             Potree.setLonlat(lonlat[0], lonlat[1])
             
             Potree.cesScreenshot = (w,h)=>{
+                console.log('cesScreenshot',w,h)
                 cesiumViewer.scene.canvas.style.width = w+'px'
                 cesiumViewer.scene.canvas.style.height = h+'px'
                 cesiumViewer.resize()
-                cesiumViewer.render();
+                updateMap(w/h) //hfov可能改变了需要update
+                
                 let dataUrl = window.cesiumViewer.scene.canvas.toDataURL('image/png')
                 //Potree.Common.downloadFile(dataUrl,  'screenshot.png')   
                 cesiumViewer.scene.canvas.style.width = ''
-                cesiumViewer.scene.canvas.style.height = ''
+                cesiumViewer.scene.canvas.style.height = '' 
                 return dataUrl
             }
         }
@@ -1380,7 +1387,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
 
 
-    function updateMap(){
+    function updateMap(aspect_){
         if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
             let camera = viewer.mainViewport.camera
             let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
@@ -1417,7 +1424,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
 
 
-            let aspect = viewer.scene.getActiveCamera().aspect;
+            let aspect = aspect_ || viewer.scene.getActiveCamera().aspect;
             if (aspect < 1) {
                 let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
                 cesiumViewer.camera.frustum.fov = fovy;
@@ -1445,6 +1452,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
     暂定不同场景间的漫游点不能互通。虽然它们可能是摆放正确的,如果是组成一整个场景的话还是要打通……
     不互通的方法是设置pano.enable
+    
+    现在需要互通了。但是还需要设置neibgbours, 有点麻烦,暂时没写。
 
  */