|
@@ -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,9 +12,9 @@ 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
|
|
|
}
|
|
|
-
|
|
|
+let cesAspect
|
|
|
|
|
|
export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
console.warn('新的页面')
|
|
@@ -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,24 +447,27 @@ 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();
|
|
|
finishPromise.done(({ 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)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ Potree.cesScreenshot(width, height).done((mapBGurl)=>{
|
|
|
+ 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)
|
|
|
}
|
|
@@ -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
|
|
@@ -894,6 +899,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
model.isPointcloud && model.changePointSize(Potree.config.material.realPointSize * s)
|
|
|
|
|
|
model.dispatchEvent("scale_changed")
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
},
|
|
|
changeOpacity(opacity) { //见笔记:透明物体的材质设置
|
|
@@ -1066,6 +1073,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
destroy() {
|
|
|
model && MergeEditor.removeModel(model)
|
|
|
+ result.changeSelect(false)
|
|
|
viewer.dispatchEvent('content_changed')
|
|
|
}
|
|
|
|
|
@@ -1362,15 +1370,35 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
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.scene.canvas.style.visibility = 'hidden'
|
|
|
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
|
|
|
+ cesAspect = w/h
|
|
|
+ let deferred = $.Deferred();
|
|
|
+
|
|
|
+ updateMap(w/h)//hfov可能改变了需要update。
|
|
|
+
|
|
|
+ setTimeout(()=>{ //延迟是似乎还要做别的处理,否则立即截图的话可能得到绿色底图(俯视状态容易触发)
|
|
|
+ let oldMode = window.cesiumViewer._cesiumWidget._scene.requestRenderMode
|
|
|
+ window.cesiumViewer._cesiumWidget._scene.requestRenderMode = 0 //强制render,否则会黑屏
|
|
|
+ cesiumViewer.render();
|
|
|
+ let dataUrl = window.cesiumViewer.scene.canvas.toDataURL('image/png')
|
|
|
+ window.cesiumViewer._cesiumWidget._scene.requestRenderMode = oldMode
|
|
|
+
|
|
|
+ //Potree.Common.downloadFile(dataUrl, 'screenshot.png')
|
|
|
+ cesAspect = null
|
|
|
+ cesiumViewer.scene.canvas.style.width = ''
|
|
|
+ cesiumViewer.scene.canvas.style.height = ''
|
|
|
+ cesiumViewer.scene.canvas.style.visibility = ''
|
|
|
+
|
|
|
+ deferred.resolve(dataUrl)
|
|
|
+ },200) //时间短了容易黑屏
|
|
|
+
|
|
|
+
|
|
|
+ return deferred.promise()
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
updateMap()
|
|
@@ -1380,7 +1408,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
- function updateMap(){
|
|
|
+ function updateMap( ){
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
if (Potree.settings.showCesium && Potree.settings.displayMode == 'showPointCloud') {
|
|
|
let camera = viewer.mainViewport.camera
|
|
|
let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
@@ -1406,7 +1437,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
cDir = Cesium.Cartesian3.normalize(cDir, new Cesium.Cartesian3());
|
|
|
cUp = Cesium.Cartesian3.normalize(cUp, new Cesium.Cartesian3());
|
|
|
-
|
|
|
+
|
|
|
cesiumViewer.camera.setView({
|
|
|
destination: cPos,
|
|
|
orientation: {
|
|
@@ -1417,7 +1448,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
- let aspect = viewer.scene.getActiveCamera().aspect;
|
|
|
+ let aspect = cesAspect || viewer.scene.getActiveCamera().aspect;
|
|
|
+
|
|
|
+ console.log('updateMap', aspect)
|
|
|
+
|
|
|
if (aspect < 1) {
|
|
|
let fovy = Math.PI * (viewer.scene.getActiveCamera().fov / 180);
|
|
|
cesiumViewer.camera.frustum.fov = fovy;
|
|
@@ -1426,8 +1460,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
let fovx = Math.atan(Math.tan(0.5 * fovy) * aspect) * 2
|
|
|
cesiumViewer.camera.frustum.fov = fovx;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
cesiumViewer.render(); //立即render,否则会和点云render不同步而错位
|
|
|
}
|
|
|
}
|
|
@@ -1445,6 +1478,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
暂定不同场景间的漫游点不能互通。虽然它们可能是摆放正确的,如果是组成一整个场景的话还是要打通……
|
|
|
不互通的方法是设置pano.enable
|
|
|
+
|
|
|
+ 现在需要互通了。但是还需要设置neibgbours, 有点麻烦,暂时没写。
|
|
|
|
|
|
*/
|
|
|
|