|
@@ -14,7 +14,7 @@ const ModelTypes = {
|
|
|
5 : {name:'深光点云' },
|
|
|
6 : {name:'深光mesh',panos4dkk:true, rot90:true},//3dtiles
|
|
|
}
|
|
|
-
|
|
|
+let cesAspect
|
|
|
|
|
|
export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
console.warn('新的页面')
|
|
@@ -456,18 +456,18 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
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)
|
|
|
}
|
|
@@ -899,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) { //见笔记:透明物体的材质设置
|
|
@@ -1363,21 +1365,40 @@ 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.scene.canvas.style.visibility = 'hidden'
|
|
|
cesiumViewer.resize()
|
|
|
- updateMap(w/h) //hfov可能改变了需要update
|
|
|
+ cesAspect = w/h
|
|
|
+ let deferred = $.Deferred();
|
|
|
|
|
|
- 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
|
|
|
+ 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()
|
|
@@ -1387,7 +1408,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
- function updateMap(aspect_){
|
|
|
+ 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);
|
|
@@ -1413,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: {
|
|
@@ -1424,7 +1448,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
|
|
|
|
|
|
- let aspect = 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;
|
|
@@ -1433,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不同步而错位
|
|
|
}
|
|
|
}
|