|
@@ -3291,19 +3291,26 @@ export class Viewer extends ViewerBase{
|
|
updateCamera()
|
|
updateCamera()
|
|
|
|
|
|
finishDeferred.resolve({dataUrl, pose})
|
|
finishDeferred.resolve({dataUrl, pose})
|
|
-
|
|
|
|
- console.log('screenshot done: '+sid)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- {//恢复:
|
|
|
|
|
|
+
|
|
setTimeout(()=>{
|
|
setTimeout(()=>{
|
|
if(!this.screenshoting){
|
|
if(!this.screenshoting){
|
|
//Potree.settings.pointNoLimit = false
|
|
//Potree.settings.pointNoLimit = false
|
|
Potree.settings.pointDensity = 'high'
|
|
Potree.settings.pointDensity = 'high'
|
|
|
|
+ console.log('恢复pointDensity')
|
|
|
|
+ if(viewer.scene.pointclouds[0].material.oldSize_ ){
|
|
|
|
+ viewer.scene.pointclouds[0].material.size = viewer.scene.pointclouds[0].material.oldSize_
|
|
|
|
+ viewer.scene.pointclouds[0].material.oldSize_ = null
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- },100) //延迟:避免连续多次截图时释放点云
|
|
|
|
|
|
+ },500) //延迟:避免连续多次截图时释放点云
|
|
this.screenshoting = false
|
|
this.screenshoting = false
|
|
|
|
|
|
|
|
+ console.log('screenshot done: '+sid)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ {//恢复:
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
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))
|
|
@@ -3417,28 +3424,76 @@ export class Viewer extends ViewerBase{
|
|
|
|
|
|
|
|
|
|
//Potree.settings.pointNoLimit = true //使点云加载不受 pointBudget限制, 但缓存还是会有一个最大限制
|
|
//Potree.settings.pointNoLimit = true //使点云加载不受 pointBudget限制, 但缓存还是会有一个最大限制
|
|
- Potree.settings.pointDensity = 'screenshot'
|
|
|
|
|
|
+ Potree.settings.pointDensity = 'screenshot' //提高pointBudget
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
let waitPointLoad = (done)=>{
|
|
let waitPointLoad = (done)=>{
|
|
|
|
+ let finish
|
|
|
|
+ let dealDone = ()=>{
|
|
|
|
+ viewer.removeEventListener('overPointBudget',decreaseLevel)
|
|
|
|
+ finish || done()
|
|
|
|
+ finish = true
|
|
|
|
+ }
|
|
done = done || screenshot
|
|
done = done || screenshot
|
|
- let maxTime = 5000; //注意交通一般要截图两次
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //是否是俯视或仰视的视角,这样看马路等平面的话尽量每处点云level都一致不要密度不同:
|
|
|
|
+ let floorplanView = viewer.mainViewport.camera.type == 'OrthographicCamera'
|
|
|
|
+ if(!floorplanView){
|
|
|
|
+ let pano = this.images360.findNearestPano()
|
|
|
|
+ let dis = pano.position.distanceTo(this.mainViewport.camera.position)
|
|
|
|
+ if(dis > 3) floorplanView = true; //离远一点的平视希望也是全部加载好。勉强只能这么写
|
|
|
|
+ console.log('floorplanView',floorplanView)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let maxTime = floorplanView ? 10000 : 2000; //注意交通一般要截图两次,先截带测量线的
|
|
setTimeout(()=>{
|
|
setTimeout(()=>{
|
|
- if(Potree.pointsLoading){//如果还在加载
|
|
|
|
- let finish
|
|
|
|
-
|
|
|
|
- viewer.addEventListener('pointsLoaded',()=>{ //点云加载完时(不一定准确)
|
|
|
|
- finish || done()
|
|
|
|
- finish = true
|
|
|
|
|
|
+ if(Potree.pointsLoading && Potree.settings.displayMode == 'showPointCloud'){//如果还在加载
|
|
|
|
+ viewer.addEventListener('pointsLoaded',()=>{ //点云加载完时(不一定准确)
|
|
|
|
+ if(!finish)console.log('加载完毕', ' numVisiblePoints', Potree.numVisiblePoints)
|
|
|
|
+ dealDone()
|
|
},{once:true})
|
|
},{once:true})
|
|
-
|
|
|
|
- setTimeout(()=>{//超时不候
|
|
|
|
- finish || done()
|
|
|
|
- finish = true
|
|
|
|
|
|
+ let lastNumVisiblePoints
|
|
|
|
+ if(floorplanView){ //perspective的不需要,远处加载不完也没大碍
|
|
|
|
+ setTimeout(()=>{//超时不候
|
|
|
|
+ if(!finish /* && Potree.numVisiblePoints > Potree.pointBudget * 0.7 */){
|
|
|
|
+ console.log('加载时间达最长限制的40%,降level, numVisiblePoints', Potree.numVisiblePoints)
|
|
|
|
+ lastNumVisiblePoints = Potree.numVisiblePoints
|
|
|
|
+ decreaseLevel() //加载时间过长
|
|
|
|
+ }
|
|
|
|
+ },maxTime*0.4)
|
|
|
|
+ setTimeout(()=>{// 第一次降有可能没效果,因为大部分level不是最高的
|
|
|
|
+ if(!finish && (Potree.numVisiblePoints - lastNumVisiblePoints) > -10000 ){ //没怎么降
|
|
|
|
+ console.log('加载时间达最长限制的50%,降level, numVisiblePoints', Potree.numVisiblePoints)
|
|
|
|
+ decreaseLevel() //加载时间过长
|
|
|
|
+ }
|
|
|
|
+ },maxTime*0.5)
|
|
|
|
+ }
|
|
|
|
+ setTimeout(()=>{//超时不候
|
|
|
|
+ if(!finish)console.log('超时, numVisiblePoints', Potree.numVisiblePoints)
|
|
|
|
+ dealDone()
|
|
},maxTime)
|
|
},maxTime)
|
|
}else{
|
|
}else{
|
|
- done()
|
|
|
|
|
|
+ dealDone()
|
|
}
|
|
}
|
|
},200)//先加载一段时间
|
|
},200)//先加载一段时间
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ let decreaseLevel = ()=>{ //降点云level
|
|
|
|
+ let levels = viewer.scene.pointclouds[0].visibleNodes.map(e=>e.getLevel())
|
|
|
|
+ //console.log(levels)
|
|
|
|
+ let actMaxLevel = Math.max.apply(null, levels) //实际加载到的最高的node level
|
|
|
|
+ console.log('decreaseLevel, 新maxLevel', actMaxLevel - 1, '原maxlevel', viewer.scene.pointclouds[0].maxLevel, 'numVisiblePoints', Potree.numVisiblePoints)
|
|
|
|
+ viewer.scene.pointclouds[0].maxLevel = actMaxLevel - 1
|
|
|
|
+ viewer.scene.pointclouds[0].material.oldSize_ = viewer.scene.pointclouds[0].material.size
|
|
|
|
+ viewer.scene.pointclouds[0].material.size *= 1.5
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ viewer.addEventListener('overPointBudget',decreaseLevel ) //因超出budget而无法加载的话
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|