|
|
@@ -19,14 +19,31 @@ const ModelTypes = {
|
|
|
}
|
|
|
|
|
|
let satellite = true
|
|
|
-let defaultMapProps = [{url: `//wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=${satellite?6:7}&x={x}&y={y}&z={z}&layer=6&token=YOUR_API_KEY`, //style=6是卫星,7是标准
|
|
|
+/* let defaultMapProps = [{url: `//wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=${satellite?6:7}&x={x}&y={y}&z={z}&layer=6&token=YOUR_API_KEY`, //style=6是卫星,7是标准
|
|
|
maximumLevel: satellite?18:19,
|
|
|
name:'高德baseLayer'
|
|
|
},{
|
|
|
url: `//wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}&layer=6&token=YOUR_API_KEY`, //style=6是卫星,7是标准
|
|
|
maximumLevel: 18,
|
|
|
name:'高德textLayer'
|
|
|
-}]
|
|
|
+}] */
|
|
|
+
|
|
|
+let defaultMapProps = satellite ? [
|
|
|
+{url: `//wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=6&x={x}&y={y}&z={z}&layer=6&token=YOUR_API_KEY`, //style=6是卫星,7是标准
|
|
|
+ maximumLevel: 18 ,
|
|
|
+ name:'高德baseLayer'
|
|
|
+},{
|
|
|
+ url: `//wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}&layer=6&token=YOUR_API_KEY`, //style=6是卫星,7是标准
|
|
|
+ maximumLevel: 18,
|
|
|
+ name:'高德textLayer'
|
|
|
+}] : [
|
|
|
+ {url: `//wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}&layer=6&token=YOUR_API_KEY`, //style=6是卫星,7是标准
|
|
|
+ maximumLevel: 19 ,
|
|
|
+ name:'高德baseLayer'
|
|
|
+ },
|
|
|
+]
|
|
|
+
|
|
|
+
|
|
|
let cesAspect , cesImageryProvider, mapProps = defaultMapProps
|
|
|
|
|
|
|
|
|
@@ -147,9 +164,12 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
window.cesErrorCallback = ()=>{
|
|
|
//sdk.setBackdrop('none')
|
|
|
}
|
|
|
- Potree.settings.queryCloudLonLatUrl = Potree.settings.urls.prefix+"/laser/4dage/{sceneCode}/getDataSetAndControlPoint"
|
|
|
-
|
|
|
- let { THREE } = Potree.mergeEditStart(dom, mapDom)
|
|
|
+
|
|
|
+ let { THREE } = Potree.mergeEditStart(dom, mapDom, {
|
|
|
+ queryCloudLonLatUrl: Potree.settings.urls.prefix+"/laser/4dage/{sceneCode}/getDataSetAndControlPoint"
|
|
|
+ })
|
|
|
+ //Potree.settings.queryCloudLonLatUrl = Potree.settings.urls.prefix+"/laser/4dage/{sceneCode}/getDataSetAndControlPoint"
|
|
|
+ //let { THREE } = Potree.mergeEditStart(dom, mapDom)
|
|
|
let {MergeEditor, AnimationEditor} = viewer.modules
|
|
|
|
|
|
|
|
|
@@ -278,7 +298,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
viewer.removeEventListener('camera_changed', camera_changed)
|
|
|
}
|
|
|
}
|
|
|
- let requestInPano = false
|
|
|
+ let requestPanoModel = false
|
|
|
//-------------------------------------
|
|
|
/* viewer.inputHandler.addEventListener('keydown', (e)=>{
|
|
|
if(e.event.key == "e" ){
|
|
|
@@ -509,7 +529,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
|
|
|
|
|
|
|
|
|
- let sdk = {
|
|
|
+ let sdk = Potree.sdk = {
|
|
|
sceneBus, mapBus,
|
|
|
|
|
|
|
|
|
@@ -707,8 +727,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
}else{
|
|
|
console.warn('没有找到漫游点',o)
|
|
|
}
|
|
|
- }/* else if(requestInPano){
|
|
|
- requestInPano.result_.flyOutPano()
|
|
|
+ }/* else if(requestPanoModel){
|
|
|
+ requestPanoModel.result_.flyOutPano()
|
|
|
} */else{
|
|
|
Potree.settings.displayMode = 'showPointCloud'
|
|
|
|
|
|
@@ -765,6 +785,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
|
|
|
},
|
|
|
comeToByLatLng(lonlat){//飞到指定经纬度
|
|
|
+ requestPanoModel?.result_?.flyOutPano()
|
|
|
let pos = viewer.transform.lonlatToLocal.forward(lonlat)
|
|
|
let location = viewer.mainViewport.view.position.clone().setX(pos[0]).setY(pos[1])
|
|
|
viewer.scene.view.setView({position:location, duration:500});
|
|
|
@@ -963,6 +984,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
props.scale && (props.scale /= 100)
|
|
|
|
|
|
|
|
|
+ if(props.raw.type == 7){//新加
|
|
|
+ props.fromType = (props.type == 'osgb' || props.type == 'b3dm') ? 4 : 0
|
|
|
+ }
|
|
|
|
|
|
let getBaseRotation = () => {
|
|
|
if(ModelTypes[props.fromType]?.rot90 && props.type != 'obj'){
|
|
|
@@ -1019,8 +1043,6 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
let done = (model_) => {
|
|
|
model = model_
|
|
|
model.result_ = result
|
|
|
@@ -1032,66 +1054,68 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
}
|
|
|
model.showInPano = /* !model.is4dkkModel// */props.raw.showInPano //现在不用这个,所有模型都可见,非is4dkkModel的还显示原本的贴图
|
|
|
props.opacity < 100 && result.changeOpacity(props.opacity)
|
|
|
+
|
|
|
+ spliceFromArr(model, props, true)
|
|
|
+
|
|
|
|
|
|
- model.addEventListener('changeSelect', (e) => {
|
|
|
-
|
|
|
+ MergeEditor.modelAdded(model)
|
|
|
+ load4dkkMedias(model)
|
|
|
+
|
|
|
+ if (props.mode == 'single') {//模型查看页
|
|
|
+ MergeEditor.noNeedSelection = true
|
|
|
+ setTimeout(() => {
|
|
|
+ MergeEditor.focusOn([model], 1000, true, true)
|
|
|
+ }, 1)
|
|
|
+ }
|
|
|
+ if(ModelTypes[props.fromType].panos4dkk){
|
|
|
+ Potree.load4dkkPanos(props.raw.num, model, getBaseRotation(), () => {
|
|
|
+ bus.emit('loadDone',model)
|
|
|
+ }, props.fromType == 0 ? '2k' : '4k' ) //看看场景是2k
|
|
|
+ } else {
|
|
|
+ bus.emit('loadDone',model)
|
|
|
+ }
|
|
|
+
|
|
|
+ model.finalLoaded = true
|
|
|
+ console.log('loadDone', model.name )
|
|
|
+
|
|
|
+ model.addEventListener('changeSelect', (e) => {
|
|
|
bus.emit('changeSelect', !!e.selected)
|
|
|
+ MergeEditor.transformControls.visible && e.selected && MergeEditor.transformControls.attach(model, e.clickPos) //: MergeEditor.transformControls.detach()
|
|
|
})
|
|
|
+
|
|
|
let lastState = {}
|
|
|
- model.addEventListener('transformChanged', (e) => {
|
|
|
+ let emitTran = (e)=>{
|
|
|
let msg = {byControl:!!e.byControl} //byControl代表是手动用控制轴修改 动画文件要改帧
|
|
|
if (!lastState.position || !model.position.equals(lastState.position)) {
|
|
|
lastState.position = msg.position = model.position.clone()
|
|
|
- //console.log('change pos', model.name, model.position.toArray())
|
|
|
+ //console.log('change pos', model.name, model.position.toArray())
|
|
|
}
|
|
|
if (!lastState.rotation || !model.rotation.equals(lastState.rotation)) {
|
|
|
lastState.rotation = model.rotation.clone()
|
|
|
- msg.rotation = model.rotation.toObject()
|
|
|
+ msg.rotation = model.rotation.toObject()
|
|
|
if(model.atPath && e.byControl){
|
|
|
msg.quaAtPath = AnimationEditor.getModelQuaAtPath(model)
|
|
|
msg.quaAtPath && (msg.quaAtPath = msg.quaAtPath.toObject())
|
|
|
}
|
|
|
}
|
|
|
if (lastState.scale == void 0 || model.scale.x * 100 != lastState.scale) {
|
|
|
- lastState.scale = msg.scale = model.scale.x * 100
|
|
|
+ lastState.scale = msg.scale = model.scale.x * 100
|
|
|
}
|
|
|
|
|
|
- msg = Potree.Common.CloneObject(msg)
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ msg = Potree.Common.CloneObject(msg)
|
|
|
//console.log(model.name, msg)
|
|
|
bus.emit('transformChanged', msg)
|
|
|
- })
|
|
|
- spliceFromArr(model, props, true)
|
|
|
-
|
|
|
- model.addEventListener('changeSelect', (e) => {
|
|
|
- MergeEditor.transformControls.visible && e.selected && MergeEditor.transformControls.attach(model, e.clickPos) //: MergeEditor.transformControls.detach()
|
|
|
- })
|
|
|
-
|
|
|
- MergeEditor.modelAdded(model)
|
|
|
-
|
|
|
- load4dkkMedias(model)
|
|
|
-
|
|
|
- if (props.mode == 'single') {//模型查看页
|
|
|
- MergeEditor.noNeedSelection = true
|
|
|
- setTimeout(() => {
|
|
|
- MergeEditor.focusOn([model], 1000, true, true)
|
|
|
- }, 1)
|
|
|
- }
|
|
|
- if(ModelTypes[props.fromType].panos4dkk){
|
|
|
- Potree.load4dkkPanos(props.raw.num, model, getBaseRotation(), () => {
|
|
|
- bus.emit('loadDone',model)
|
|
|
- }, props.fromType == 0 ? '2k' : '4k' ) //看看场景是2k
|
|
|
- } else {
|
|
|
- bus.emit('loadDone',model)
|
|
|
}
|
|
|
+ model.addEventListener('transformChanged', (e) => {
|
|
|
+ emitTran(e)
|
|
|
+ })
|
|
|
+ setTimeout(()=>{
|
|
|
+ emitTran({byControl:true}) //保存初始
|
|
|
+ },1) //刚loadDone还没开始监听所以延时
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- //console.log('loadDone' )
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
let progressFun = (progress) => {
|
|
|
bus.emit('loadProgress', progress)
|
|
|
}
|
|
|
@@ -1129,7 +1153,7 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
return model?.panos?.length > 0
|
|
|
},
|
|
|
flyInPano(pano, {dontFly, quaternion, duration}={}) {// 飞入全景图
|
|
|
- requestInPano = model
|
|
|
+ requestPanoModel = model
|
|
|
pano = pano || viewer.images360.findNearestPano(null, model.panos)
|
|
|
if (pano) {
|
|
|
dontFly || viewer.images360.flyToPano({ pano, canCancelLast: true, quaternion, duration})
|
|
|
@@ -1139,10 +1163,10 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
}
|
|
|
},
|
|
|
flyOutPano() {// 飞出全景图(就是切换到正常融合视角)
|
|
|
- requestInPano = false
|
|
|
+ requestPanoModel = false
|
|
|
Potree.settings.displayMode = 'showPointCloud'
|
|
|
/* setTimeout(() => {//在下一帧再变,因为3dtiles需要更新一下才会显示tiles
|
|
|
- if (!requestInPano) {
|
|
|
+ if (!requestPanoModel) {
|
|
|
Potree.settings.displayMode = 'showPointCloud'
|
|
|
Potree.Utils.updateVisible(MergeEditor.boxHelper, 'showPanos', true)
|
|
|
}
|
|
|
@@ -1167,6 +1191,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
model.position.z += model.boundSize.z / 2
|
|
|
model.dispatchEvent({type:"position_changed", byControl:true}) //compute bound and emit
|
|
|
MergeEditor.history.afterChange(model)
|
|
|
+ viewer.dispatchEvent('content_changed')
|
|
|
+ model.visiChangeCallback && model.visiChangeCallback(true) //3dtiles再更新下可见性
|
|
|
},
|
|
|
|
|
|
putInFrontOfCam(){//首次加载放在面前,高度和相机一致。(但不保证会不会被遮挡)
|
|
|
@@ -2498,16 +2524,9 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
let pPos = new THREE.Vector3(0, 0, 0).applyMatrix4(camera.matrixWorld);
|
|
|
|
|
|
let orientation
|
|
|
- let toCes = (pos) => {
|
|
|
- let xy = [pos.x, pos.y];
|
|
|
- let height = pos.z;
|
|
|
- let deg = viewer.transform.lonlatToLocal.inverse(xy) // toMap.forward(xy);
|
|
|
- let cPos = Cesium.Cartesian3.fromDegrees(...deg, height);
|
|
|
- //console.log('toCes',cPos,height) //数字过大如e35会崩溃
|
|
|
- return cPos;
|
|
|
- };
|
|
|
+
|
|
|
|
|
|
- let cPos = toCes(pPos);
|
|
|
+ let cPos = Potree.math.toCes(pPos);
|
|
|
|
|
|
|
|
|
|
|
|
@@ -2542,8 +2561,8 @@ export const enter = ({ dom, mapDom, isLocal, lonlat, scenes, laserRoot, laserOS
|
|
|
let pUp = new THREE.Vector3(0, 600, 0).applyMatrix4(camera.matrixWorld);
|
|
|
let pTarget = viewer.scene.view.getPivot();
|
|
|
|
|
|
- let cUpTarget = toCes(pUp);
|
|
|
- let cTarget = toCes(pTarget);
|
|
|
+ let cUpTarget = Potree.math.toCes(pUp);
|
|
|
+ let cTarget = Potree.math.toCes(pTarget);
|
|
|
|
|
|
let cDir = Cesium.Cartesian3.subtract(cTarget, cPos, new Cesium.Cartesian3());
|
|
|
let cUp = Cesium.Cartesian3.subtract(cUpTarget, cPos, new Cesium.Cartesian3());
|
|
|
@@ -2668,6 +2687,7 @@ function load4dkkMedias(model){//加载四维看看的一些媒体物品
|
|
|
|
|
|
if(!prop.url.substr(0,5).includes('http')) prop.url = location.origin + prop.url
|
|
|
|
|
|
+ prop.id = prop.sid //新加
|
|
|
//Potree.settings.urls.getPrefix(8,model)
|
|
|
//isNew:true, //是否新创建而非加载
|
|
|
Potree.addModel(prop,(overlay)=>{
|