|
@@ -687,8 +687,11 @@ export class Viewer extends ViewerBase{
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
- this.addEventListener('pointcloud_changed',(e)=>{
|
|
|
|
- this.lazyRenderViewports()
|
|
|
|
|
|
+ this.addEventListener('pointcloud_changed',(e)=>{
|
|
|
|
+ if(this.screenshoting){
|
|
|
|
+ this.viewports.filter(e=>!e.noPointcloud).forEach(e =>e.needRender = true)
|
|
|
|
+ }
|
|
|
|
+ else this.lazyRenderViewports()
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
@@ -865,7 +868,7 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
let now = Date.now()
|
|
let now = Date.now()
|
|
|
|
|
|
- let count = 1
|
|
|
|
|
|
+ let maxRenderCount = 1
|
|
|
|
|
|
viewports.forEach(e=>{
|
|
viewports.forEach(e=>{
|
|
if(now - e.lastRenderTime > maxWaitTime){
|
|
if(now - e.lastRenderTime > maxWaitTime){
|
|
@@ -873,20 +876,20 @@ export class Viewer extends ViewerBase{
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
- let useCount = viewports.filter(e=>e.needRender).length
|
|
|
|
- //console.log('useCount', useCount)
|
|
|
|
|
|
+ let renderCount = viewports.filter(e=>e.needRender).length
|
|
|
|
+ //console.log('renderCount', renderCount)
|
|
|
|
|
|
- let list = viewports.filter(e=>!e.needRender).sort((a,b)=>a.lastRenderTime - b.lastRenderTime)
|
|
|
|
|
|
+ let list = viewports.filter(e=>!e.needRender).sort((a,b)=>a.lastRenderTime - b.lastRenderTime)//没有准备render的,按上次渲染时间排序,作为候补
|
|
|
|
|
|
- if(useCount < count){
|
|
|
|
- list.slice(0, count - useCount).forEach(e=>{
|
|
|
|
|
|
+ if(renderCount < maxRenderCount){ //还有名额,补齐
|
|
|
|
+ list.slice(0, maxRenderCount - renderCount).forEach(e=>{
|
|
e.needRender = true
|
|
e.needRender = true
|
|
})
|
|
})
|
|
- }else if(list[0] && now - list[0].lastRenderTime > maxWaitTime){
|
|
|
|
|
|
+ }else if(list[0] && now - list[0].lastRenderTime > maxWaitTime){//名额不足时,考虑候补队列第一个是否超时,超时的话也渲染
|
|
list[0].needRender = true
|
|
list[0].needRender = true
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -3528,6 +3531,14 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
{//恢复:
|
|
{//恢复:
|
|
|
|
|
|
|
|
+ setTimeout(()=>{
|
|
|
|
+ if(!this.screenshoting){
|
|
|
|
+ //otree.settings.pointNoLimit = false
|
|
|
|
+ Potree.settings.pointDensity = 'high'
|
|
|
|
+ }
|
|
|
|
+ },100) //延迟:避免连续多次截图时释放点云
|
|
|
|
+ this.screenshoting = false
|
|
|
|
+
|
|
if(info.type == 'measure'){
|
|
if(info.type == 'measure'){
|
|
this.scene.measurements.forEach(e=>Potree.Utils.updateVisible(e, 'screenshot',true))
|
|
this.scene.measurements.forEach(e=>Potree.Utils.updateVisible(e, 'screenshot',true))
|
|
info.measurement.setSelected(false, 'screenshot')
|
|
info.measurement.setSelected(false, 'screenshot')
|
|
@@ -3611,10 +3622,38 @@ export class Viewer extends ViewerBase{
|
|
})
|
|
})
|
|
}
|
|
}
|
|
Potree.Utils.updateVisible(this.reticule, 'screenshot', false)//令reticule不可见
|
|
Potree.Utils.updateVisible(this.reticule, 'screenshot', false)//令reticule不可见
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ Potree.settings.pointDensity = 'screenshot'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ let waitPointLoad = (done)=>{
|
|
|
|
+ done = done || screenshot
|
|
|
|
+ let maxTime = 5000;
|
|
|
|
+ setTimeout(()=>{
|
|
|
|
+ if(Potree.pointsLoading){//如果还在加载
|
|
|
|
+ let finish
|
|
|
|
+
|
|
|
|
+ viewer.addEventListener('pointsLoaded',()=>{ //点云加载完时(不一定准确)
|
|
|
|
+ finish || done()
|
|
|
|
+ },{once:true})
|
|
|
|
+
|
|
|
|
+ setTimeout(()=>{//超时不候
|
|
|
|
+ done();
|
|
|
|
+ finish = true
|
|
|
|
+ },maxTime)
|
|
|
|
+ }else{
|
|
|
|
+ done()
|
|
|
|
+ }
|
|
|
|
+ },200)//先加载一段时间
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ let waitPointsTime = Potree.settings.displayMode == 'showPointCloud' ? 300 : 0 //等点云加载
|
|
|
|
+
|
|
|
|
|
|
if(info.type == 'measure'){//要截图双屏
|
|
if(info.type == 'measure'){//要截图双屏
|
|
this.scene.measurements.forEach(e=>Potree.Utils.updateVisible(e,'screenshot',e == info.measurement) )
|
|
this.scene.measurements.forEach(e=>Potree.Utils.updateVisible(e,'screenshot',e == info.measurement) )
|
|
@@ -3629,21 +3668,23 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
let begin = ()=>{
|
|
let begin = ()=>{
|
|
useMap = this.mapViewer.attachedToViewer
|
|
useMap = this.mapViewer.attachedToViewer
|
|
- updateCamera()
|
|
|
|
- let waitTime = Potree.settings.displayMode == 'showPointCloud' ? 500 : 0 //等点云加载 网速差的话还是加载稀疏 是否要用最高质量点云
|
|
|
|
|
|
+ updateCamera()
|
|
if(useMap){
|
|
if(useMap){
|
|
let waitMap = ()=>{
|
|
let waitMap = ()=>{
|
|
//console.log('waitMap: '+sid)
|
|
//console.log('waitMap: '+sid)
|
|
this.mapViewer.waitLoadDone(screenshot.bind(this))//等待地图所有加载完
|
|
this.mapViewer.waitLoadDone(screenshot.bind(this))//等待地图所有加载完
|
|
}
|
|
}
|
|
- setTimeout(waitMap.bind(this), waitTime)
|
|
|
|
- }else{
|
|
|
|
- setTimeout(screenshot.bind(this), waitTime)
|
|
|
|
|
|
|
|
|
|
+ waitPointLoad(waitMap)
|
|
|
|
+
|
|
|
|
+ //setTimeout(waitMap.bind(this), waitPointsTime)
|
|
|
|
+ }else{
|
|
|
|
+ //setTimeout(screenshot.bind(this), waitPointsTime)
|
|
|
|
+ waitPointLoad()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- let {promise}= this.focusOnObject(info.measurement, 'measure', 0, {basePanoSize:1024} )//注意:不同角度截图 得到三维的会不一样,因为focusOnObject是根据方向的
|
|
|
|
|
|
+ let {promise} = this.focusOnObject(info.measurement, 'measure', 0, {basePanoSize:1024} )//注意:不同角度截图 得到三维的会不一样,因为focusOnObject是根据方向的
|
|
promise.done(()=>{
|
|
promise.done(()=>{
|
|
//console.log('promise.done')
|
|
//console.log('promise.done')
|
|
//根据当前位置更新floorplan显示
|
|
//根据当前位置更新floorplan显示
|
|
@@ -3669,14 +3710,15 @@ export class Viewer extends ViewerBase{
|
|
})
|
|
})
|
|
|
|
|
|
}else{
|
|
}else{
|
|
- screenshot()
|
|
|
|
|
|
+
|
|
|
|
+ waitPointLoad()
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
测量线的截图因为要调用分屏的,会改变画面
|
|
测量线的截图因为要调用分屏的,会改变画面
|
|
但是普通截图的话,不会改变画面
|
|
但是普通截图的话,不会改变画面
|
|
*/
|
|
*/
|
|
-
|
|
|
|
|
|
+ this.screenshoting = true
|
|
return {getImagePromise:getImageDeferred.promise(), finishPromise:finishDeferred.promise()}
|
|
return {getImagePromise:getImageDeferred.promise(), finishPromise:finishDeferred.promise()}
|
|
|
|
|
|
|
|
|