|
@@ -34,6 +34,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
let { THREE } = Potree.mergeEditStart(dom, mapDom)
|
|
|
let MergeEditor = viewer.modules.MergeEditor
|
|
|
Potree.settings.unableNavigate = false
|
|
|
+ Potree.settings.canWalkThroughModel = true
|
|
|
Potree.settings.showCesium = true
|
|
|
if (Potree.settings.showCesium) {
|
|
|
|
|
@@ -74,8 +75,19 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
//lonlat = [113.595236803415,22.3665168584444]//[113.600356,22.364093]
|
|
|
Potree.setLonlat(lonlat[0], lonlat[1])
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+ if(Potree.settings.canWalkThroughModel){
|
|
|
+ let lastPano
|
|
|
+ viewer.images360.addEventListener('flyToPano',(e)=>{//漫游到另一个模型就要选中这个模型
|
|
|
+ let model = e.toPano.pano.pointcloud
|
|
|
+ if(lastPano?.pointcloud != model && model != MergeEditor.selected){
|
|
|
+ MergeEditor.selectModel(model)
|
|
|
+ model.result_.flyInPano(e.toPano.pano, {dontFly:true}) //切换模型显示,因为flyInPano有事件怕乱所以统一用这个函数
|
|
|
+ }
|
|
|
+ lastPano = e.toPano.pano
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
viewer.addEventListener('camera_changed', e => {
|
|
|
var camera = e.viewport.camera
|
|
@@ -230,7 +242,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
window.THREE = THREE
|
|
|
//isLocal = false
|
|
|
- let autoLoads = window.autoLoads = []
|
|
|
+ let autoLoads = /* window.autoLoads = */ []
|
|
|
let readyToAddModel
|
|
|
let maxLoadingCount = /* isLocal ? 1 : */2; //正在加载模型的最大数目
|
|
|
|
|
@@ -346,6 +358,20 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
|
|
|
let sdk = {
|
|
|
sceneBus, mapBus,
|
|
|
+
|
|
|
+
|
|
|
+ canTurnToPanoMode(pos) {
|
|
|
+ pos = pos ? new THREE.Vector3().copy(pos) : viewer.images360.position
|
|
|
+
|
|
|
+ let pano = viewer.images360.findNearestPano(pos)
|
|
|
+ if (pano && pano.position.distanceTo(pos) < Potree.config.panoFieldRadius) {
|
|
|
+ return {model:pano.pointcloud.result_}
|
|
|
+ }
|
|
|
+ //poschange后会调用这个,如果返回false会变为点云模式,且不会自动变回原先的模式
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
getPositionByScreen(pos2d, hopeModelId) {//通过屏幕坐标获取真实坐标 . hopeModelId: 如果指定了模型,优先返回hopeModelId上的intersect
|
|
|
//console.log('getPositionByScreen',hopeModelId)
|
|
|
hopeModelId = null
|
|
@@ -667,6 +693,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
let model
|
|
|
let done = (model_) => {
|
|
|
model = model_
|
|
|
+ model.result_ = result
|
|
|
if (!props.isFirstLoad) {
|
|
|
model.visible = false//先不显示,防止卡顿
|
|
|
}
|
|
@@ -751,23 +778,24 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
supportPano() { //是否支持全景图
|
|
|
return model.panos && model.panos.length > 0
|
|
|
},
|
|
|
- flyInPano() {// 飞入全景图
|
|
|
+ flyInPano(pano, {dontFly}={}) {// 飞入全景图
|
|
|
requestInPano = model
|
|
|
- let pano = viewer.images360.findNearestPano(null, model.panos)
|
|
|
+ pano = pano || viewer.images360.findNearestPano(null, model.panos)
|
|
|
if (pano) {
|
|
|
viewer.removeEventListener('camera_changed', camera_changed)
|
|
|
- viewer.images360.panos.forEach(pano => {
|
|
|
+ Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
|
|
|
pano.setEnable(pano.pointcloud == model)
|
|
|
})
|
|
|
viewer.setControls(viewer.fpControls)
|
|
|
- MergeEditor.transformControls.detach(model)
|
|
|
+ //MergeEditor.transformControls.detach(model)
|
|
|
+ Potree.Utils.updateVisible(MergeEditor.transformControls, 'showPanos', false)
|
|
|
Potree.Utils.updateVisible(MergeEditor.boxHelper, 'showPanos', false)
|
|
|
|
|
|
let changeVisi = (object) => {
|
|
|
Potree.Utils.updateVisible(object, 'showPanos', object == model && Potree.settings.modelSkybox || object.showInPano)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
let eventName = Potree.settings.displayMode != 'showPanos' ? 'endChangeMode' : 'flyToPanoDone'
|
|
|
viewer.images360.addEventListener(eventName, (e) => {
|
|
|
if (Potree.settings.displayMode == 'showPanos' && requestInPano == model) {
|
|
@@ -776,10 +804,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
}
|
|
|
}, { once: true })
|
|
|
|
|
|
- viewer.images360.flyToPano({ pano, canCancelLast: true })
|
|
|
- Potree.settings.displayMode = 'showPanos'
|
|
|
-
|
|
|
-
|
|
|
+ dontFly || viewer.images360.flyToPano({ pano, canCancelLast: true })
|
|
|
+ Potree.settings.displayMode = 'showPanos'
|
|
|
+
|
|
|
|
|
|
}
|
|
|
},
|
|
@@ -791,10 +818,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes }) => {
|
|
|
Potree.Utils.updateVisible(object, 'showPanos', true)
|
|
|
}
|
|
|
viewer.objs.children.forEach(changeVisi)
|
|
|
- viewer.images360.panos.forEach(pano => {
|
|
|
+ Potree.settings.canWalkThroughModel || viewer.images360.panos.forEach(pano => {
|
|
|
pano.setEnable(true)
|
|
|
})
|
|
|
-
|
|
|
+ Potree.Utils.updateVisible(MergeEditor.transformControls, 'showPanos', true)
|
|
|
setTimeout(() => {//在下一帧再变,因为3dtiles需要更新一下才会显示tiles
|
|
|
if (!requestInPano) {
|
|
|
Potree.settings.displayMode = 'showPointCloud'
|