|
@@ -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)
|
|
|
}
|
|
|
},
|