浏览代码

fix: lonlat 为无时不加载地图

xzw 11 月之前
父节点
当前提交
7c99a89571
共有 3 个文件被更改,包括 1141 次插入9365 次删除
  1. 1079 9347
      public/lib/potree/potree.js
  2. 1 1
      public/lib/potree/potree.js.map
  3. 61 17
      src/sdk/cover/index.js

文件差异内容过多而无法显示
+ 1079 - 9347
public/lib/potree/potree.js


文件差异内容过多而无法显示
+ 1 - 1
public/lib/potree/potree.js.map


+ 61 - 17
src/sdk/cover/index.js

@@ -3,6 +3,17 @@ import mitt from 'mitt'
 import axios from 'axios' //{ axios } from '@/api'
 
 let requestLoadCount = 0
+//0看看,1看见,2深时,3用户上传三维模型,4深时mesh,5深光点云,6深光mesh
+const ModelTypes = {
+    0 : {name:'看看(八目)', panos4dkk:true},
+    1 : {name:'看见(双目转台)', panos4dkk:true, rot90:true},
+    2 : {name:'深时', },
+    3 : {name:'用户上传三维模型'},
+    4 : {name:'深时mesh(激光转台)',panos4dkk:true, rot90:true},//3dtiles
+    5 : {name:'深光点云' },
+    6 : {name:'深光mesh',panos4dkk:true, rot90:true},
+}
+
 
 export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
     console.warn('新的页面')
@@ -37,7 +48,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
     let MergeEditor = viewer.modules.MergeEditor
     Potree.settings.unableNavigate = false
     
-    Potree.settings.showCesium = true
+    Potree.settings.showCesium = !!lonlat
     if (Potree.settings.showCesium) {
 
         viewer.backgroundOpacity = 0
@@ -76,6 +87,18 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         
         //lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
         Potree.setLonlat(lonlat[0], lonlat[1])
+        
+        Potree.cesScreenshot = (w,h)=>{
+            cesiumViewer.scene.canvas.style.width = w+'px'
+            cesiumViewer.scene.canvas.style.height = h+'px'
+            cesiumViewer.resize()
+            cesiumViewer.render();
+            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 = ''
+            return dataUrl
+        }
     }
     
 
@@ -186,6 +209,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
             pano.setEnable(e.mode == 'showPanos' ? pano.pointcloud == viewer.images360.currentPano.model : true)
         })
+        
+        Potree.settings.unableNavigate = e.mode == 'showPointCloud'
     })
     
     
@@ -504,14 +529,34 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
         setCameraFov(fov) {
             viewer.setFOV(fov)
         },
+  
 
-
-        screenshot: (width, height, bgOpacity = 1) => {
-            //截图  
+        screenshot: (width, height/* , bgOpacity=0 */ ) => {//
+            //截图 
+            let bgOpacity = 0 //因为要画map底图所以上层只能透明。之后需要的话再改
+            Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', false)
             var { getImagePromise, finishPromise } = viewer.startScreenshot({ type: 'default', /* useRenderTarget:true,  */bgOpacity }, width, height)
             var deferred = $.Deferred();
             finishPromise.done(({ dataUrl }) => {
-                deferred.resolve(dataUrl)
+                if(Potree.settings.displayMode != 'showPanos' && Potree.settings.showCesium){//need map background
+                    let mapBGurl = Potree.cesScreenshot(width, height)
+                    let img = new Image(); img.src = dataUrl
+                    let imgBG = new Image(); imgBG.src = mapBGurl
+                    let loadCount = 0
+                    img.onload = imgBG.onload = ()=>{
+                        loadCount++;
+                        if(loadCount == 2){
+                            let url = Potree.Common.imgAddLabel(imgBG,img,{leftRatioToImg:0,topRatioToImg:0})
+                            deferred.resolve(url)
+                        }
+                    }
+                    
+                }else{
+                    deferred.resolve(dataUrl)
+                }
+                
+                
+                Potree.Utils.updateVisible(MergeEditor.boxHelper, 'screenshot', true)
             })
 
             return deferred.promise()
@@ -684,7 +729,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
 
             return {
                 bus,
-                play() {
+                play() { 
                     MergeEditor.selectModel(null)
                     ani.play()
                 },
@@ -729,8 +774,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 }
             }
             let getDefaultRotation = () => {
-                //0看看,1看见,2深时,3用户上传三维模型,4深时mesh,5深光点云,6深光mesh
-                if (props.fromType == 1 || props.fromType == 6 || props.fromType == 4 && props.type != 'glb') {//来自4dkk的3dtiles初始需要转90度
+                if(ModelTypes[props.fromType]?.rot90 && props.type != 'glb'){
                     return new THREE.Euler(Math.PI / 2, 0, 0)
                 } else return new THREE.Euler(0, 0, 0)
             }
@@ -775,6 +819,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 model.result_ = result
                 model.props = props
                 result.model = model
+                model.fromType = ModelTypes[props.fromType].name
                 if (!props.isFirstLoad) {
                     model.visible = false//先不显示,防止卡顿
                 }
@@ -804,18 +849,21 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                 spliceFromArr(model, props, true)
  
                 model.addEventListener('changeSelect', (e) => {
-                    e.selected && MergeEditor.transformControls.attach(model, e.clickPos) //: MergeEditor.transformControls.detach()
+                    MergeEditor.selected && e.selected && MergeEditor.transformControls.attach(model, e.clickPos) //: MergeEditor.transformControls.detach()
                 }) 
 
-
+ 
+                        
+                        
+                        
                 if (props.mode == 'single') {//模型查看页
                     MergeEditor.noNeedSelection = true
                     setTimeout(() => {
                         MergeEditor.focusOn([model], 1000, true, true)
                     }, 1)
                 }
-                if (props.fromType == 6 || props.fromType == 4 || props.fromType == 0 || props.fromType == 1) {
-                    Potree.load4dkkPanos(props.raw.num, model, () => {
+                if(ModelTypes[props.fromType].panos4dkk){
+                    Potree.load4dkkPanos(props.raw.num, model, getDefaultRotation(), () => {
                         bus.emit('loadDone')
                     },    props.fromType == 0 ? '2k' : '4k' ) //看看场景是2k
                 } else {
@@ -902,11 +950,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
                     if (model) {
                         let fly = viewer.images360.latestRequestMode != 'showPanos'
                         MergeEditor.selectModel(model, state, fly, true)
-
-
-                        if (state && viewer.inputHandler.selection[0]) {
-                            MergeEditor.transformControls.attach(model) //viewer.transformObject(model); //交换
-                        }
+ 
                         //console.log('changeSelect',  props.id, state)
                     }
                 },