飞行漫游

This commit is contained in:
2025-09-16 10:26:47 +08:00
parent b7a8707450
commit ccf274c0a9
3 changed files with 261 additions and 140 deletions

View File

@ -33,11 +33,18 @@
<span class="fankuai"></span>
{{ t('auths.authType') }}
</div>
<div v-if="authInfo.status != null" class="auth_info_text" style="font-size: 16px">
<div
v-if="authInfo.status != null"
class="auth_info_text"
style="font-size: 16px"
:style="{ color: authInfo.status ? 'rgba(27, 248, 195, 1)' : 'rgba(255, 161, 69, 1)' }"
>
{{ authInfo.status ? t('auths.authTempExpire') : t('auths.authexpire') }}
</div>
<!-- <div v-else class="auth_info_text">{{ authInfo.message || '无' }}</div> -->
<div v-else class="auth_info_text" style="font-size: 16px">{{ t('auths.noAuthexpire') }}</div>
<div v-else class="auth_info_text" style="font-size: 16px; color: rgba(241, 108, 85, 1)">
{{ t('auths.noAuthexpire') }}
</div>
</div>
<uploadFiles accept=".lic" :maxSize="1"></uploadFiles>
</div>

View File

@ -420,124 +420,124 @@ const methodMap = {
},
//模型压平
pressModel() {
// if (window.checkAuthIsValid) {
let selectedNode = window.treeObj.getSelectedNodes()[0]
if (selectedNode) {
let isTileset = ['bim', 'tileset'].includes(selectedNode.sourceType)
if (!isTileset) {
console.log('aaaaaa')
if (window.checkAuthIsValid) {
let selectedNode = window.treeObj.getSelectedNodes()[0]
if (selectedNode) {
let isTileset = ['bim', 'tileset'].includes(selectedNode.sourceType)
if (!isTileset) {
console.log('aaaaaa')
ElMessage({
message: '请在图层指挥舱选中对应模型进行操作',
type: 'warning'
})
return
}
// let source_id = this.$md5(new Date().getTime() + '压平面')
let draw = new YJ.Draw.DrawPolygon(window.earth)
draw.start((err, params) => {
if (params.length > 2) {
if (err) throw err
let alt = params[0].alt
params.forEach((item) => {
if (item.alt < alt) alt = item.alt
})
//获取节点树对象
let entity = window.earth.entityMap.get(selectedNode.id).entity
let flat = new YJ.Analysis.Flat(window.earth, entity, {
positions: params
})
let detailOption = {
// modleId: selectedNode.id,
modelId: selectedNode.id,
positions: params,
height: flat.height
}
let id = new YJ.Tools().randomString()
let paramsData: any = {
params: detailOption,
id,
sourceName: '压平面',
sourceType: 'pressModel',
// parentId:
// selectedNode.sourceType == 'directory' ? selectedNode.id : selectedNode.parentId
parentId: selectedNode.id
}
TreeApi.addOtherSource(paramsData)
paramsData.isShow = true
paramsData.params = JSON.stringify(paramsData.params)
;(window as any).pressModelMap.set(id + '_' + selectedNode.id, paramsData)
;(window as any).pressModelEntities.set(id, flat)
cusAddNodes(window.treeObj, paramsData.parentId, [paramsData])
// //鼠标右键点击事件
flat.onRightClick = () => {}
// _entityMap.set(node.source_id, flat)
} else {
// this.$message.warning('至少三个点')
}
})
} else {
console.log('bbbbb')
ElMessage({
message: '请在图层指挥舱选中对应模型进行操作',
type: 'warning'
})
}
} else {
ElMessage({
message: '您没有该功能的权限',
type: 'warning'
})
}
},
//地形开挖
terrainDig() {
if (window.checkAuthIsValid) {
// new YJ.Analysis.TerrainExcavation(window.Earth1);
eventBus.emit('terrainExcavationDialog')
} else {
ElMessage({
message: '您没有该功能的权限',
type: 'warning'
})
}
},
//剖切
tilesetClipping() {
if (window.checkAuthIsValid) {
let selectedNode = window.treeObj.getSelectedNodes()
if (selectedNode.length < 1) {
ElMessage({
message: '请在图层指挥舱选中对应模型进行操作',
type: 'warning'
})
return
}
// let source_id = this.$md5(new Date().getTime() + '压平面')
if (!(selectedNode[0].sourceType === 'tileset' || selectedNode[0].sourceType === 'bim')) {
ElMessage({
message: '选中的节点不能进行剖切',
type: 'warning'
})
return
}
let tileset = window.earth.entityMap.get(selectedNode[0].id)
let draw = new YJ.Draw.DrawPolygon(window.earth)
draw.start((err, params) => {
if (params.length > 2) {
if (err) throw err
let alt = params[0].alt
params.forEach((item) => {
if (item.alt < alt) alt = item.alt
})
//获取节点树对象
let entity = window.earth.entityMap.get(selectedNode.id).entity
let flat = new YJ.Analysis.Flat(window.earth, entity, {
positions: params
})
let detailOption = {
// modleId: selectedNode.id,
modelId: selectedNode.id,
positions: params,
height: flat.height
}
let id = new YJ.Tools().randomString()
let paramsData: any = {
params: detailOption,
id,
sourceName: '压平面',
sourceType: 'pressModel',
// parentId:
// selectedNode.sourceType == 'directory' ? selectedNode.id : selectedNode.parentId
parentId: selectedNode.id
}
TreeApi.addOtherSource(paramsData)
paramsData.isShow = true
paramsData.params = JSON.stringify(paramsData.params)
;(window as any).pressModelMap.set(id + '_' + selectedNode.id, paramsData)
;(window as any).pressModelEntities.set(id, flat)
cusAddNodes(window.treeObj, paramsData.parentId, [paramsData])
// //鼠标右键点击事件
flat.onRightClick = () => {}
// _entityMap.set(node.source_id, flat)
} else {
// this.$message.warning('至少三个点')
}
draw.start((err, pos) => {
let section = new YJ.Analysis.Section(window.earth, tileset.entity, {
positions: pos
})
// _entityMap.set(selectedNode.source_id + 'pouqie', section)
})
} else {
console.log('bbbbb')
ElMessage({
message: '请在图层指挥舱选中对应模型进行操作',
message: '您没有该功能的权限',
type: 'warning'
})
}
// } else {
// this.$message({
// message: '您没有该功能的权限',
// type: 'warning'
// })
// }
},
//地形开挖
terrainDig() {
// if (window.checkAuthIsValid) {
// new YJ.Analysis.TerrainExcavation(window.Earth1);
eventBus.emit('terrainExcavationDialog')
// } else {
// this.$message({
// message: '您没有该功能的权限',
// type: 'warning'
// })
// }
},
//剖切
tilesetClipping() {
// if (window.checkAuthIsValid) {
let selectedNode = window.treeObj.getSelectedNodes()
if (selectedNode.length < 1) {
ElMessage({
message: '请在图层指挥舱选中对应模型进行操作',
type: 'warning'
})
return
}
if (!(selectedNode[0].sourceType === 'tileset' || selectedNode[0].sourceType === 'bim')) {
ElMessage({
message: '选中的节点不能进行剖切',
type: 'warning'
})
return
}
let tileset = window.earth.entityMap.get(selectedNode[0].id)
let draw = new YJ.Draw.DrawPolygon(window.earth)
draw.start((err, pos) => {
let section = new YJ.Analysis.Section(window.earth, tileset.entity, {
positions: pos
})
// _entityMap.set(selectedNode.source_id + 'pouqie', section)
})
// } else {
// this.$message({
// message: '您没有该功能的权限',
// type: 'warning'
// })
// }
},
//删除剖切
clearTilesetClipping() {
@ -555,26 +555,25 @@ const methodMap = {
gdbImport() {},
//圆形统计
circleStatistics() {
// if (window.checkAuthIsValid) {
eventBus.emit('goodsSearchCircleDialog')
// } else {
// this.$message({
// message: '您没有该功能的权限',
// type: 'warning'
// })
// }
if (window.checkAuthIsValid) {
eventBus.emit('goodsSearchCircleDialog')
} else {
ElMessage({
message: '您没有该功能的权限',
type: 'warning'
})
}
},
//多边形统计
polygonStatistics() {
// if (window.checkAuthIsValid) {
eventBus.emit('goodsSearchPolgonDialog')
// } else {
// this.$message({
// message: "您没有该功能的权限",
// type: "warning",
// });
// }
if (window.checkAuthIsValid) {
eventBus.emit('goodsSearchPolgonDialog')
} else {
ElMessage({
message: '您没有该功能的权限',
type: 'warning'
})
}
}
}

View File

@ -3,6 +3,7 @@
ref="baseDialog"
class="fly-roam"
title="飞行漫游"
width="382px"
left="180px"
top="100px"
:closeCallback="closeCallBack"
@ -11,15 +12,29 @@
<span class="custom-divider"></span>
<div class="div-item">
<div class="row">
<div class="col">
<div class="col" style="flex: 0 0 205px">
<span class="label">名称</span>
<input class="input" type="text" name="name" />
</div>
<div class="col"></div>
<div class="col">
<input
type="checkbox"
name="repeat"
style="
width: 16px;
line-height: 15px;
height: 15px;
cursor: pointer;
width: auto;
margin-right: 5px;
"
/>
<span class="label">循环播放</span>
</div>
</div>
</div>
<span class="custom-divider"></span>
<div class="div-item">
<!-- <div class="div-item">
<div class="row">
<div class="col">
<input
@ -67,28 +82,63 @@
</div>
</div>
</div>
<span class="custom-divider"></span>
<span class="custom-divider"></span> -->
<div class="div-item">
<div class="row">
<div class="col">
<!-- <div class="col">
<button class="add-point">
<svg class="icon-add"><use xlink:href="#yj-icon-add"></use></svg>增加视点
</button>
</div>
<div class="col">
</div> -->
<!-- <div class="col">
<button class="modify-point">
<svg class="icon-edit"><use xlink:href="#yj-icon-edit"></use></svg>调整视点
</button>
</div>
</div> -->
<div class="col">
<button class="afreshPlay">
<svg class="icon-play"><use xlink:href="#yj-icon-play"></use></svg>播放
<svg class="icon-play"><use xlink:href="#yj-icon-play"></use></svg>全局播放
</button>
<button class="cease" style="margin-left: 10px">
<svg-icon name="stop" :size="12" color="rgba(255, 255, 255, 1)"></svg-icon>结束播放
</button>
</div>
<div class="col">
<!-- <div class="col">
<button class="cease">
<svg class="icon-pause"><use xlink:href="#yj-icon-pause"></use></svg>结束
<svg class="icon-pause"><use xlink:href="#yj-icon-pause"></use></svg>结束播放
</button>
</div> -->
</div>
<div class="row">
<div class="col" style="flex: 0 0 200px">
<input
type="checkbox"
name="isTotalTime"
style="
width: 16px;
line-height: 15px;
height: 15px;
cursor: pointer;
width: auto;
margin-right: 5px;
"
/>
<span class="label">设置总时长</span>
<div class="input-number input-number-unit-3">
<input
class="input total-time"
type="number"
title=""
min="0"
max="999999.99"
step="0.01"
name="totalTime"
value="0"
/>
<span class="unit" style="top: 6px">s</span>
<span class="arrow"></span>
</div>
<!-- <button style="margin-left: 10px" @click="apply">应用</button> -->
</div>
</div>
<div class="table">
@ -110,8 +160,13 @@
<span class="custom-divider"></span>
</template>
<template #footer>
<button @click="draw">确定</button>
<button @click="close">关闭</button>
<div style="position: absolute; left: 24px; display: flex">
<button class="add-point">
<svg class="icon-add"><use xlink:href="#yj-icon-add"></use></svg>增加视点
</button>
</div>
<button class="saveRoam" @click="draw">保存</button>
<button @click="close">取消</button>
</template>
</Dialog>
</template>
@ -120,6 +175,12 @@
import { ref, reactive } from 'vue'
import { inject } from 'vue'
import Dialog from '@/components/dialog/baseDialog.vue'
import { app } from 'electron'
import { TreeApi } from '@/api/tree'
import { useTreeNode } from '../tree/hooks/treeNode'
import { ElMessage } from 'element-plus'
const { cusAddNodes } = useTreeNode()
const baseDialog: any = ref(null)
const eventBus: any = inject('bus')
@ -130,9 +191,44 @@ eventBus.on('flyRoamDialog', () => {
show.value = true
baseDialog.value?.open()
setTimeout(() => {
flyRoam = YJ.Global.FlyRoam.open(window.earth, { repeat: Infinity })
flyRoam = YJ.Global.FlyRoam.open(window.earth, { repeat: Infinity }, {}, draw)
}, 100)
})
const draw = (data) => {
if (data.points.length != 0) {
let selectedNodes = window.treeObj.getSelectedNodes()
let node = selectedNodes && selectedNodes[selectedNodes.length - 1]
let parentId
if (node) {
if (node.sourceType === 'directory') {
parentId = node.id
} else {
parentId = node.parentId
}
}
let id = new YJ.Tools().randomString()
let paramsData: any = {
params: data,
id,
sourceName: '漫游路径',
sourceType: 'roam',
parentId: parentId
}
TreeApi.addOtherSource(paramsData)
paramsData.isShow = true
paramsData.params = JSON.stringify(paramsData.params)
cusAddNodes(window.treeObj, paramsData.parentId, [paramsData])
baseDialog.value?.close()
} else {
ElMessage({
message: '请添加数据',
type: 'warning'
})
}
console.log(data)
}
const clangeViewPointHeight = () => {}
const viewPointHeightInput = () => {
@ -147,11 +243,30 @@ const closeCallBack = (e) => {
YJ.Global.FlyRoam.cease(window.earth)
YJ.Global.FlyRoam.close()
}
const draw = (e) => {}
const apply = (e) => {
YJ.Global.FlyRoam.apply()
}
const close = (e) => {
show.value = false
baseDialog.value?.close()
}
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.afreshPlay {
background:
linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
linear-gradient(180deg, rgba(27, 248, 195, 0.2) 0%, rgba(27, 248, 195, 0) 100%) !important;
border: 1px solid rgba(27, 248, 195, 1) !important;
}
.cease {
background:
linear-gradient(180deg, rgba(241, 108, 85, 0.2) 0%, rgba(241, 108, 85, 0) 100%),
rgba(0, 0, 0, 0.5) !important;
border: 1px solid rgba(241, 108, 85, 1) !important;
}
::v-deep .content input.YJ-custom-checkbox[type='checkbox'] {
border: 1px solid rgba(var(--color-sdk-base-rgb), 1) !important;
background-color: rgba(0, 0, 0, 0.5) !important;
}
</style>