Sfoglia il codice sorgente

708模型库巷道选中位置移动

tangjunhao 2 mesi fa
parent
commit
d82b0b3ce9

+ 68 - 7
src/control/vtkModel.js

@@ -55,6 +55,8 @@ export class VtkModel {
      * 选择管道 
      */
     this.isSelectPipe = false;
+
+    this.isSelectSensor = false;
     //管道节点选择对象
     this.selectObj = null;
     //X,Y
@@ -360,19 +362,24 @@ addSensor(pid,site){
     actor.setScale(0.1,0.1,0.1);//放大
       // 旋转actor
     // actor.rotateY(90);// 绕y轴旋转
-    this.cgqActors.push(actor);
+    //  存储传感器信息(结构化存储)
+    const sensor = {
+      id: pid,
+      actor: actor,      // VTK Actor对象
+   };
+    this.cgqActors.push(sensor);
 }
 showSensor(){
-  this.cgqActors.forEach((actor)=>{
-    this.renderer.addActor(actor);
+  this.cgqActors.forEach(( sensor ) => {
+    this.renderer.addActor(sensor.actor);
   });
   console.log('看看谁先执行')
   this.renderWindow.render();
 }
 
 removeSensor(){
-  this.cgqActors.forEach((actor)=>{
-    this.renderer.removeActor(actor);
+  this.cgqActors.forEach((sensor) => {
+    this.renderer.removeActor(sensor.actor);
   });
   this.renderWindow.render();
 }
@@ -468,12 +475,13 @@ removejc(){
   addpipsite(pid,site){
     console.log(1111)
     let pipe =this.pipeByPid(pid);
+    console.log("管道数据",pipe)
     if(this.actorpipsites.length==0){
       const  actorpipsite= vtkActor.newInstance();
       //管道位置数据
       const sphereSource = vtkSphereSource.newInstance({
         center: [0, 0, 0],
-        radius: 4.0,
+        radius: 6.0,
       });
       const pipsiteMapper = vtkMapper.newInstance();
       pipsiteMapper.setInputConnection(sphereSource.getOutputPort());
@@ -484,7 +492,7 @@ removejc(){
     const actorpipsite =this.actorpipsites[0];  
     let point1 = this.pointByPipeNodeId(pipe.snId);
     let point2 = this.pointByPipeNodeId(pipe.enId);
-    let py = site/(1-site);
+    let py = site/(1.01-site);
     let pipsite_point=[
       (point1[0]+py*point2[0])/(1+py),
       (point1[1]+py*point2[1])/(1+py),
@@ -961,6 +969,9 @@ safetypathremove(){
     this.pipeActors.forEach((pipeActor) => {
       this.renderer.removeActor(pipeActor.actor);
     });
+    this.cgqActors.forEach((sensor) => {
+      this.renderer.removeActor(sensor.actor);
+    });
   }
   wayClearShow(){
     this.wayActors.forEach((wayAcotor) => {
@@ -986,6 +997,11 @@ safetypathremove(){
         this.renderer.addActor(pipeActor.actor);
       });
     }
+    if(this.isSelectSensor) {
+      this.cgqActors.forEach((sensor) => {
+        this.renderer.addActor(sensor.actor);
+      });
+    }
     // this.addjc(495530.903,5403828.821,432.40);
     // this.addpname(495530.903,5403829.821,432.40);
     // this.addSoure(495530.903,5403829.821,432.40);
@@ -999,6 +1015,7 @@ safetypathremove(){
   selectNodes() {
     this.isSelectNode = true;
     this.isSelectPipe = false;
+    this.isSelectSensor = false;
     this.modelShow();
     document.addEventListener("mousemove", throttleMouseHandler);
     this.renderWindow.render();
@@ -1006,6 +1023,15 @@ safetypathremove(){
   selectPipes() {
     this.isSelectNode = false;
     this.isSelectPipe = true;
+    this.isSelectSensor = false;
+     document.addEventListener("mousemove", throttleMouseHandler);
+    this.modelShow();
+    this.renderWindow.render();
+  }
+  selectSensors() {
+    this.isSelectNode = false;
+    this.isSelectPipe = false;
+    this.isSelectSensor = true;
      document.addEventListener("mousemove", throttleMouseHandler);
     this.modelShow();
     this.renderWindow.render();
@@ -1013,6 +1039,7 @@ safetypathremove(){
   selectNoting() {
     this.isSelectNode = false;
     this.isSelectPipe = false;
+    this.isSelectSensor = false;
     this.modelShow();
     this.renderWindow.render();
   }
@@ -1054,6 +1081,7 @@ safetypathremove(){
     this.renderer.removeActor(this.scalarBarActor);
     this.isSelectNode = false;
     this.isSelectPipe = false;
+    this.isSelectSensor = false;
     this.wayClearShow();
     this.modelClearShow();
     this.isJg = true; //显示结果
@@ -1065,6 +1093,7 @@ safetypathremove(){
     this.renderer.addActor(this.scalarBarActor);
     this.isSelectNode = false;
     this.isSelectPipe = false;
+    this.isSelectSensor = false;
     this.renderer.removeActor(this.gjActor);
     this.renderer.removeActor(this.gjscalarBarActor)
     this.wayClearShow();
@@ -1132,6 +1161,38 @@ safetypathremove(){
       });
     }
   // }
+
+  // 选中指定传感器
+  selectBySensorId(sid) {
+    console.log("selectBySensorId", sid);
+
+    // 1. 清除上一次选中的 Actor(如果有)
+    console.log("Last actor before remove:", this.lastActor);
+    if (this.lastActor != null) {
+      console.log("Removing actor:", this.lastActor);
+      this.renderer.removeActor(this.lastActor);
+    }
+
+    // 2. 遍历传感器数组,查找匹配的传感器
+    
+    this.cgqActors.forEach(sensor => {
+      if (sid === sensor.id) { 
+        // 3. 设置选中颜色
+        sensor.actor.getProperty().setColor(REA);
+        console.log("找到了")
+        // 4. 记录当前选中的 Actor 和传感器对象
+        this.lastActor = sensor.actor;
+        this.selectObj = { id: sid, type: "sensor" }; // 存储选中对象信息
+        
+        // 5. 重新添加 Actor 并渲染
+        this.renderer.addActor(this.lastActor);
+        this.renderWindow.render();
+        return; // 找到后退出循环
+      }
+    });
+  }
+
+
 }
 function createRGBStringFromRGBValues(rgb) {
   if (rgb.length !== 3) {

+ 30 - 4
src/view/components/MenuCheck.vue

@@ -81,7 +81,10 @@
             </div>
         </el-dialog>
         <!-- 添加 -->
-        <el-dialog v-model="sdialog.dianadddialog" draggable :modal="false" modal-class="summary-dlg" align-center  :append-to-body="true" width="500px"  class="dialog_class bgcolor tianjia">
+        <el-dialog v-model="sdialog.dianadddialog" draggable :modal="false" 
+        modal-class="summary-dlg" align-center  :append-to-body="true"
+        @close="clearvtk" 
+        width="500px"  class="dialog_class bgcolor tianjia">
           <template #header="{titleId, titleClass }">
           <div class="my-header ">
               <el-image :src="icon" fit="contain" ></el-image>
@@ -112,16 +115,17 @@
           </div>
           <div class="input">
           <el-form-item label="相对位置" :label-width="formLabelWidth5">
-              <el-input-number v-model="source.site" :min="0" :max="10" 
+              <el-input-number v-model="source.site" :min="0" :max="1" 
               :precision="2" :step="0.1"
               controls-position="right"
               class="w-50 m-2"
               placeholder="相对位置"
+              @change="inputnumberChange"
               />
           </el-form-item>
           </div>
           <div class="dialog-footer footer_div l_btn">
-              <div class="footerbtn flex1"><div class="borderimg"><el-button @click="sdialog.dianadddialog=false">取消</el-button></div></div>
+              <div class="footerbtn flex1"><div class="borderimg"><el-button @click="clearvtk();sdialog.dianadddialog=false">取消</el-button></div></div>
               <div class="footerbtn flex1"><div class="borderimg"><el-button  @click="addEditaip(); ">
           确定
               </el-button></div></div>
@@ -216,6 +220,7 @@ import { message } from '@/utils/message';
 import zhCn from 'element-plus/es/locale/lang/zh-cn'
 import icon from "@/assets/img/icon.png";
 import { timestampToTime } from '@/js/lindex.js'
+import { vtkmodel } from "@/control/vtkModel.js";
 let sendialogVisible = ref(false);
 let currentrow=ref(true);
 let addVisible = ref(false);
@@ -389,6 +394,7 @@ const addEditaip=()=>{
       
             tableData.value = res.rows;
             getsensor();
+            clearvtk();
         })
         .catch((err) => {
             const regex = /字段\d*/g;
@@ -470,11 +476,18 @@ const projectsSelectionSelect=(selection, row)=>{
      const  selectfun=()=>{
         source.value.selectstr='';
      currentPage4.value=1;
-     console.log()
+    //  console.log("选中项",multipleSelection.value)
        if(multipleSelection.value.length!=0){
       firepid.value=multipleSelection.value[0].id;
       source.value.selectstr=multipleSelection.value[0].name;
       console.log(multipleSelection.value[0])
+        
+      tableobj.value.pid = multipleSelection.value[0].id;
+      vtkmodel.clearJgAddMode();
+    //选中指定管道
+    vtkmodel.selectByPipeId(multipleSelection.value[0].id);
+    vtkmodel.addpipsite(multipleSelection.value[0].id, 0.0);
+
        }else{
         // selectstr.value='';
         
@@ -486,5 +499,18 @@ const projectsSelectionSelect=(selection, row)=>{
        selectfun();
      
      }
+
+     
+const inputnumberChange = (val) => {
+  console.log("tableobj.value",tableobj.value)
+  vtkmodel.addpipsite(tableobj.value.pid, val);
+}
+
+const clearvtk = () => {
+  vtkmodel.clearpipsite();
+  vtkmodel.selectNoting();
+}
+
+
 defineExpose({ sendialogVisible, });
 </script>

+ 28 - 4
src/view/components/MenuSensor.vue

@@ -63,7 +63,11 @@
         </el-collapse-item>
             </el-collapse>
         <!-- 添加 -->
-        <el-dialog v-model="addVisible" draggable :modal="false" modal-class="summary-dlg" align-center  :append-to-body="true" width="400" class="dialog_class bgcolor tianjia  foter_l tianjia">
+        <el-dialog v-model="addVisible" draggable :modal="false" 
+        modal-class="summary-dlg" align-center  :append-to-body="true"
+        @close="clearvtk" 
+        width="400" 
+        class="dialog_class bgcolor tianjia  foter_l tianjia">
 
             <template #header="{ titleId, titleClass }">
                 <div class="my-header ">
@@ -87,13 +91,13 @@
                 <div class="input">
                     <el-form-item label="相对位置" :label-width="formLabelWidth6">
                         <el-input-number v-model="senobj.site" :min="0" :max="1" :precision="2" :step="0.1"
-                            controls-position="right" class="w-50 m-2" placeholder="相对位置" />
+                            controls-position="right" class="w-50 m-2" placeholder="相对位置" @change="inputnumberChange" />
                     </el-form-item>
                 </div>
             </el-form>
             <div class="dialog-footer footer_div l_btn">
                 <div class="footerbtn flex1">
-                    <div class="borderimg"><el-button @click="addVisible = false">取消</el-button></div>
+                    <div class="borderimg"><el-button @click="clearvtk();addVisible = false">取消</el-button></div>
                 </div>
                 <div class="footerbtn flex1">
                     <div class="borderimg"><el-button @click="addEied(); ">
@@ -183,7 +187,9 @@ const handleDelete = (val) => {
     tableobj.value = val;
     currentrow.value=true;
     console.log(val);
-   // console.log(tableobj.value)
+
+    vtkmodel.clearJgAddMode();
+    vtkmodel.selectBySensorId(val.pid)
 }
 // 删除
 const shanchu = () => {
@@ -291,6 +297,7 @@ const addEied = () => {
             // tableData.value = res.rows;
             addVisible.value = false;
             getsensor();
+            clearvtk();
         })
         .catch((err) => {
             const regex = /字段\d*/g;
@@ -329,7 +336,24 @@ const pipelineapi = (row) => {
     senobj.value.pid = row.id;
     source.value.selectstr = row.name;
     tableobj.value.pid = row.id;
+    // console.log('Selected pipeline:', row);
+    vtkmodel.clearJgAddMode();
+    //选中指定管道
+    vtkmodel.selectByPipeId(row.id);
+    vtkmodel.addpipsite(row.id, 0.0);
+}
+
+const inputnumberChange = (val) => {
+  console.log("tableobj.value",tableobj.value)
+  vtkmodel.addpipsite(tableobj.value.pid, val);
 }
+
+const clearvtk = () => {
+  vtkmodel.clearpipsite();
+  vtkmodel.selectNoting();
+}
+
+
 // onUnmounted(() =>{
 
 // emitter.off('changecheckbox4')

+ 15 - 2
src/view/components/Menumap.vue

@@ -72,7 +72,10 @@
        </el-collapse-item>
            </el-collapse>
        <!-- 添加 -->
-       <el-dialog v-model="addVisible" draggable :modal="false" modal-class="summary-dlg" align-center  :append-to-body="true" width="400" class="dialog_class bgcolor tianjia  foter_l tianjia">
+       <el-dialog v-model="addVisible" draggable :modal="false" 
+       modal-class="summary-dlg" align-center  :append-to-body="true"
+       @close="clearvtk" 
+       width="400" class="dialog_class bgcolor tianjia  foter_l tianjia">
 
            <template #header="{ titleId, titleClass }">
                <div class="my-header ">
@@ -97,7 +100,7 @@
            </el-form>
            <div class="dialog-footer footer_div l_btn">
                <div class="footerbtn flex1">
-                   <div class="borderimg"><el-button @click="addVisible = false">取消</el-button></div>
+                   <div class="borderimg"><el-button @click="clearvtk();addVisible = false">取消</el-button></div>
                </div>
                <div class="footerbtn flex1">
                    <div class="borderimg"><el-button @click="addEied(); ">
@@ -293,6 +296,7 @@ const addEied = () => {
            // tableData.value = res.rows;
            addVisible.value = false;
            getsensor();
+           clearvtk();
        })
        .catch((err) => {
            const regex = /字段\d*/g;
@@ -332,6 +336,15 @@ const pipelineapi = (row) => {
    senobj.value.pcode= row.code;
    source.value.selectstr = row.name;
    tableobj.value.pid = row.id;
+
+   vtkmodel.clearJgAddMode();
+   //选中指定管道
+   vtkmodel.selectByPipeId(row.id);
+}
+
+const clearvtk = () => {
+  vtkmodel.selectNoting();
 }
+
 defineExpose({ sendialogVisible, });
 </script>

+ 19 - 1
src/view/components/Menupump.vue

@@ -201,6 +201,7 @@
             :append-to-body="true"
             width="400"
             class="dialog_class bgcolor tianjia foter_l tianjia"
+            @close="clearvtk"
           >
             <template #header="{ titleId, titleClass }">
               <div class="my-header">
@@ -254,6 +255,7 @@
                     controls-position="right"
                     class="w-50 m-2"
                     placeholder="相对位置"
+                    @change="inputnumberChange"
                   />
                 </el-form-item>
               </div>
@@ -291,7 +293,7 @@
             <div class="dialog-footer footer_div l_btn">
               <div class="footerbtn flex1">
                 <div class="borderimg">
-                  <el-button @click="addVisible = false">取消</el-button>
+                  <el-button @click="clearvtk();addVisible = false">取消</el-button>
                 </div>
               </div>
               <div class="footerbtn flex1">
@@ -594,6 +596,7 @@ const addEied = () => {
       addVisible.value = false
       senobj.value = {}
       getsensor()
+      clearvtk()
     })
     .catch((err) => {
       const regex = /字段\d*/g
@@ -626,6 +629,21 @@ const pipelineapi = (row) => {
   senobj.value.pcode = row.code
   senobj.value.pname = row.name
   tableobj.value.pid = row.id
+
+  vtkmodel.clearJgAddMode();
+    //选中指定管道
+    vtkmodel.selectByPipeId(row.id);
+    vtkmodel.addpipsite(row.id, 0.0);
+}
+
+const inputnumberChange = (val) => {
+  console.log("tableobj.value",tableobj.value)
+  vtkmodel.addpipsite(tableobj.value.pid, val);
+}
+
+const clearvtk = () => {
+  vtkmodel.clearpipsite();
+  vtkmodel.selectNoting();
 }
 defineExpose({ sendialogVisible })
 </script>

+ 25 - 1
src/view/components/Menuventdoor.vue

@@ -71,6 +71,7 @@
           <el-dialog
             v-model="fmDShow"
             draggable :modal="false" modal-class="summary-dlg"
+            @close="clearvtk"
             align-center  :append-to-body="true" width="400" class="dialog_class bgcolor tianjia  foter_l tianjia"
           >
             <template #header="{ titleId, titleClass }">
@@ -127,6 +128,7 @@
                     controls-position="right"
                     class="w-50 m-2"
                     placeholder="相对位置"
+                    @change="inputnumberChange"
                   />
                 </el-form-item>
               </div>
@@ -155,7 +157,7 @@
               <div class="footerbtn flex1">
                 <div class="borderimg">
                   <el-button
-                   @click="fmDShow = false"
+                   @click="clearvtk();fmDShow = false"
                     >取消</el-button
                   >
                 </div>
@@ -264,6 +266,7 @@ const fmsave=()=>{
      fmDShow.value = false;
      fmObj.value={};
      message.success("风门"+ tishi.value + "成功");
+     clearvtk();
     })
     .catch((err) => {
       message.error(err.returnMsg)
@@ -321,12 +324,33 @@ const fireclick = () => {
   pipeline.value.searchtaggd = ""
   pipeline.value.dialogVisiblenode = true
   pipeline.value.pipelinedata("")
+
 }
+
+const tableobj = ref({});
+
 //点击确定
 const pipelineapi = (row) => {
   fmObj.value.pid = row.id
   fmObj.value.pcode = row.code
   fmObj.value.pname = row.name
+
+  tableobj.value.pid = row.id;
+  vtkmodel.clearJgAddMode();
+  //选中指定管道
+  vtkmodel.selectByPipeId(row.id);
+  vtkmodel.addpipsite(row.id, 0.0);
+}
+
+
+const inputnumberChange = (val) => {
+  console.log("tableobj.value",tableobj.value)
+  vtkmodel.addpipsite(tableobj.value.pid, val);
+}
+
+const clearvtk = () => {
+  vtkmodel.clearpipsite();
+  vtkmodel.selectNoting();
 }
 defineExpose({ sendialogVisible })
 </script>

+ 24 - 1
src/view/components/Menuventfan.vue

@@ -96,6 +96,7 @@
           <el-dialog
             v-model="femDShow"
             draggable :modal="false" modal-class="summary-dlg"
+            @close="clearvtk"
             align-center  :append-to-body="true" width="400" class="dialog_class bgcolor tianjia  foter_l tianjia"
           >
             <template #header="{ titleId, titleClass }">
@@ -152,6 +153,7 @@
                     controls-position="right"
                     class="w-50 m-2"
                     placeholder="相对位置"
+                    @change="inputnumberChange"
                   />
                 </el-form-item>
               </div>
@@ -174,7 +176,7 @@
               <div class="footerbtn flex1">
                 <div class="borderimg">
                   <el-button
-                   @click="femDShow = false"
+                   @click="clearvtk();femDShow = false"
                     >取消</el-button
                   >
                 </div>
@@ -226,6 +228,8 @@ let femObjs=ref([]);
 let femObj= ref({});
 let tishi = ref();
 
+let tableobj = ref({});
+
 const femtabxz=(val)=>{
   femObj.value = val;
   currentrow.value = true
@@ -270,6 +274,7 @@ const femsave=()=>{
      femDShow.value = false;
      femObj.value={};
      message.success("风机"+ tishi.value + "成功");
+     clearvtk();
     })
     .catch((err) => {
       message.error(err.returnMsg)
@@ -333,6 +338,24 @@ const pipelineapi = (row) => {
   femObj.value.pid = row.id
   femObj.value.pcode = row.code
   femObj.value.pname = row.name
+
+  tableobj.value.pid = row.id;
+  vtkmodel.clearJgAddMode();
+  //选中指定管道
+  vtkmodel.selectByPipeId(row.id);
+  vtkmodel.addpipsite(row.id, 0.0);
+}
+
+const inputnumberChange = (val) => {
+  console.log("tableobj.value",tableobj.value)
+  vtkmodel.addpipsite(tableobj.value.pid, val);
 }
+
+const clearvtk = () => {
+  vtkmodel.clearpipsite();
+  vtkmodel.selectNoting();
+}
+
+
 defineExpose({ sendialogVisible })
 </script>

+ 1 - 1
src/view/components/PipeIine.vue

@@ -206,7 +206,7 @@ const projectsSelectionSelect=(selection, row)=>{
        }
      }
      const  selectfun=()=>{
-      emit('pipelineapi', '');
+      // emit('pipelineapi', '');
      currentPage4.value=1;
        if(multipleSelection.value.length!=0){
       // firepid.value=multipleSelection.value[0].id;