From f03ea598d39abceac4eeb5f3a10b1fe7dd706b2c Mon Sep 17 00:00:00 2001 From: jihongshun <1151753686@qq.com> Date: 星期五, 25 七月 2025 16:48:31 +0800 Subject: [PATCH] 光轴 --- src/views/system/device/components/deviceDialog.vue | 127 ++++++++++++++++++++++++++++++------------ 1 files changed, 90 insertions(+), 37 deletions(-) diff --git a/src/views/system/device/components/deviceDialog.vue b/src/views/system/device/components/deviceDialog.vue index cbc2b09..659407b 100644 --- a/src/views/system/device/components/deviceDialog.vue +++ b/src/views/system/device/components/deviceDialog.vue @@ -4,28 +4,25 @@ <Modal :title="form.id ? '淇敼璁惧' : '娣诲姞璁惧'" v-model="open"> <template slot="form"> <el-form ref="form" :model="form" :rules="rules" label-width="auto"> - <el-form-item label="璁惧鍚嶇О" prop="name"> - <el-input v-model="form.name1" placeholder="璇疯緭鍏ヨ澶囧悕绉�" /> + <el-form-item label="璁惧鍚嶇О" prop="deviceName"> + <el-input v-model="form.deviceName" placeholder="璇疯緭鍏ヨ澶囧悕绉�" /> </el-form-item> - <el-form-item label="鎵�灞炵嚎璺�" prop="beloneRoad"> - <el-input v-model="form.name2" placeholder="璇疯緭鍏ユ墍灞炵嚎璺�" /> + <el-form-item label="鎵�灞炵嚎璺�" prop="belongingRoute"> + <el-input v-model="form.belongingRoute" placeholder="璇疯緭鍏ユ墍灞炵嚎璺�" /> </el-form-item> - <el-form-item label="閫夋嫨妯″瀷" prop="wellType"> - <el-select v-model="form.wellType" placeholder="閫夋嫨妯″瀷"> - <el-option v-for="key in modelListData" :key="key.id" :label="key.modelType" + <el-form-item label="閫夋嫨妯″瀷" prop="modelId"> + <el-select v-model="form.modelId" placeholder="閫夋嫨妯″瀷" @change="change"> + <el-option v-for="key in modelListData" :key="key.id" :label="key.modelName" :value="key.id"></el-option> </el-select> </el-form-item> - <el-form-item label="鏈濆悜" prop="direction"> - <el-input v-model="form.direction" placeholder="璇疯緭鍏ユ湞鍚�" style="width:90%;"/> + <el-form-item label="鏈濆悜" prop="face"> + <el-input v-model="form.face" placeholder="璇疯緭鍏ユ湞鍚�" style="width:90%;"/> <i class="el-icon-map-location" @click="gettiles3dCam" title="棰勮"></i> </el-form-item> - <!-- <el-form-item label="妯″瀷绫诲瀷" prop="wellType"> - <el-select v-model="form.wellType" placeholder="妯″瀷绫诲瀷"> - <el-option v-for="key in model_type" :key="key.value" :label="key.label" - :value="key.value"></el-option> - </el-select> - </el-form-item> --> + <el-form-item label="娴锋嫈楂樺害" prop="altitude"> + <el-input v-model="form.altitude" placeholder="璇疯緭鍏ユ捣鎷旈珮搴�" /> + </el-form-item> </el-form> </template> <template slot="cesium"> @@ -64,16 +61,14 @@ form: {}, // 琛ㄥ崟鏍¢獙 rules: { - name: [ - { required: true, message: '璇疯緭鍏ュ鍚嶇О', trigger: 'blur' } + deviceName: [ + { required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' } ], - deptId: [ - { required: true, message: '褰掑睘閮ㄩ棬' } // trigger鐩戝惉涓嶅埌 浣跨敤@input鍗曠嫭鏍¢獙vue-treeSelect琛ㄥ崟椤� - ] }, // 閮ㄩ棬鏁版嵁 deptOptions: null, - modelListData:[] + modelListData:[], + modelUrl:null } }, methods: { @@ -82,16 +77,49 @@ this.resetForm("form"); if (ids) { + this.getModel() // 缂栬緫 this.$api.detail('/tower/device', ids).then(res => { + console.log(res) this.form = res.data this.open = true this.$nextTick(() => { + console.log(this.form) this.$refs.cesiumMapSelctPoint.showPickPoint({ longitude: +this.form.longitude, latitude: +this.form.latitude, - altitude: +this.form.altitude, + deviceHeight: +this.form.deviceHeight, }) + console.log(this.modelListData) + let url = this.modelListData.filter(item=>item.id == this.form.modelId)[0].modelRoute + console.log(url) + this.modelUrl = url + const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.deviceHeight); + console.log(position) + // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 + let model = viewer.entities.getById("MyModel"); + const heading = Cesium.Math.toRadians(this.form.face); // 鏈濅笢鍗楁柟鍚� + const pitch = 0; + const roll = 0; + const orientation = Cesium.Transforms.headingPitchRollQuaternion( + position, + new Cesium.HeadingPitchRoll(heading, pitch, roll) + ); + if(!model) { + // 鍔犺浇 glTF 妯″瀷 + const entity = viewer.entities.add({ + id: "MyModel", + name: "MyModel", + position: position, + orientation: orientation, + model: { + uri:this.modelUrl, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� + }, + }); + viewer.flyTo(entity) + }else { + model.orientation = orientation + } }) }) } else { @@ -103,23 +131,29 @@ } }, handleSelectAddress(data) { + console.log(data) this.$set(this.form, 'longitude', data.longitude) this.$set(this.form, 'latitude', data.latitude) - this.$set(this.form, 'altitude', data.altitude) + this.$set(this.form, 'deviceHeight', data.altitude) this.$refs.form.validateField('longitude') this.$refs.form.validateField('latitude') - this.$refs.form.validateField('altitude') + this.$refs.form.validateField('deviceHeight') }, submitForm() { this.$refs["form"].validate(valid => { console.log(this.form) - // if (valid) { - // this.$api.save('work/tower/', 'id', Object.assign({}, this.form)).then(res => { - // this.form = {} - // this.$emit('on-submit') - // this.open = false - // }) - // } + this.form.longitude = Number(this.form.longitude) + this.form.latitude = Number(this.form.latitude) + this.form.deviceHeight = Number(this.form.deviceHeight) + this.form.face = Number(this.form.face) + this.form.altitude = Number(this.form.altitude) || 0 + if (valid) { + this.$api.save('tower/device/', 'id', Object.assign({}, this.form)).then(res => { + this.form = {} + this.$emit('on-submit') + this.open = false + }) + } }); }, cancel() { @@ -136,14 +170,36 @@ this.modelListData = res.rows || [] }) }, + change(id){ + console.log(id) + let url = this.modelListData.filter(item=>item.id == id)[0].modelRoute + console.log(url) + this.modelUrl = url + }, gettiles3dCam(){ console.log(this.form) + if(!this.form.face) { + return this.$message.error('璇疯緭鍏ユ湞鍚�') + } + if (!this.form.longitude) { + this.$message.error("璇疯緭鍏ョ粡搴�"); + return; + } + if (!this.form.latitude) { + this.$message.error("璇疯緭鍏ョ含搴�"); + return; + } + if (!this.form.deviceHeight) { + this.$message.error("璇疯緭鍏ラ珮搴�"); + return; + } //鍔ㄦ�佺粡绾害鏈濆悜 鍔犺浇妯″瀷浣嶇疆棰勮 - const position = Cesium.Cartesian3.fromDegrees(0, 0, 0); + // const position = Cesium.Cartesian3.fromDegrees(0, 0, 0); + const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.deviceHeight); // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級 // const heading = Cesium.Math.toRadians(135); // 鏈濅笢鍗楁柟鍚� let model = viewer.entities.getById("MyModel"); - const heading = Cesium.Math.toRadians(this.form.direction); // 鏈濅笢鍗楁柟鍚� + const heading = Cesium.Math.toRadians(this.form.face); // 鏈濅笢鍗楁柟鍚� const pitch = 0; const roll = 0; const orientation = Cesium.Transforms.headingPitchRollQuaternion( @@ -158,16 +214,13 @@ position: position, orientation: orientation, model: { - uri: "/Model/tower.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� - scale: 1000, + uri: this.modelUrl, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰� }, }); viewer.flyTo(entity) }else { model.orientation = orientation } - - } }, mounted() { -- Gitblit v1.9.3