Browse Source

业务空间 框选批量 从未关联中选择改为之前逻辑

haojianlong 5 years ago
parent
commit
b661328b18
1 changed files with 114 additions and 46 deletions
  1. 114 46
      src/components/business_space/newGraphy/graphy.vue

+ 114 - 46
src/components/business_space/newGraphy/graphy.vue

@@ -541,33 +541,61 @@ export default {
     },
     // 根据图从未关联平面图的业务空间中选择--按钮返回关联信号
     createFromUnrelated(zoneObj) {
+      // zoneObj.Outline = [];
+      // zoneObj.Height = 0;
+      // let spaces = {}, IspaceIdList = [];
+      // if (this.scene.cutItem || this.scene.sceneMark) {
+      //   // 如果有划分,求交集
+      //   // 格式为Poly(先与业务空间求差集)
+      //   const obj = this.scene.getZoneDifference(true);
+      //   // 差集与楼层平面图或用户划分区域求交集
+      //   spaces = this.scene.getPloyIntersect(obj)
+      // } else {
+      //   // 格式为SPoint[]
+      //   spaces = this.scene.getZoneDifference();
+      // }
+      // for (let key in spaces) {
+      //   spaces[key].map(t => {
+      //     let temp = t.map(item => {
+      //       return {
+      //         X: 1 * item.x.toFixed(2),
+      //         Y: -item.y.toFixed(2),
+      //         Z: 0
+      //       }
+      //     })
+      //     zoneObj.Outline.push([temp]);
+      //   })
+      //   let curISP = this.sourceIdToISP[key];
+      //   curISP && IspaceIdList.push(curISP.RoomID);
+      //   zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
+      // }
+
+      // 改回之前逻辑
       zoneObj.Outline = [];
       zoneObj.Height = 0;
       let spaces = {}, IspaceIdList = [];
+      let selectSpaces = this.scene.getSelectedSpaces();
+      selectSpaces.map(t => {
+        zoneObj.Outline.push(t.data.OutLine);
+        let key = t.data.SourceId;
+        let curISP = this.sourceIdToISP[key];
+        curISP && IspaceIdList.push(curISP.RoomID);
+        zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
+      })
+      // 如果有划分,求交集
       if (this.scene.cutItem || this.scene.sceneMark) {
-        // 如果有划分,求交集
-        // 格式为Poly(先与业务空间求差集)
-        const obj = this.scene.getZoneDifference(true);
-        // 差集与楼层平面图或用户划分区域求交集
-        spaces = this.scene.getPloyIntersect(obj)
-      } else {
-        // 格式为SPoint[]
-        spaces = this.scene.getZoneDifference();
-      }
-      for (let key in spaces) {
-        spaces[key].map(t => {
+        zoneObj.Outline = [];
+        let arr = this.scene.getIntersect();
+        arr.map(t => {
           let temp = t.map(item => {
             return {
-              X: 1 * item.x.toFixed(2),
-              Y: -item.y.toFixed(2),
+              X: 1 * item.x,
+              Y: -item.y,
               Z: 0
             }
           })
           zoneObj.Outline.push([temp]);
         })
-        let curISP = this.sourceIdToISP[key];
-        curISP && IspaceIdList.push(curISP.RoomID);
-        zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
       }
       if (!zoneObj.Outline.length) {
         zoneObj.Outline = null;
@@ -656,40 +684,80 @@ export default {
     },
     // 根据图批量创建所选业务空间
     groupCreateZone() {
+      // let arr = this.scene.getSelectedSpaces();
+      // let createSpaces = [], spaces = {};
+      // if (this.scene.cutItem || this.scene.sceneMark) {
+      //   // 如果有划分,求交集
+      //   // 格式为Poly(先与业务空间求差集)
+      //   const obj = this.scene.getZoneDifference(true);
+      //   // 差集与楼层平面图或用户划分区域求交集
+      //   spaces = this.scene.getPloyIntersect(obj)
+      // } else {
+      //   // 格式为SPoint[]
+      //   spaces = this.scene.getZoneDifference();
+      // }
+      // for (let key in spaces) {
+      //   let zoneObj = { Outline: [], Height: 0 }
+      //   spaces[key].map(t => {
+      //     let temp = t.map(item => {
+      //       return {
+      //         X: 1 * item.x.toFixed(2),
+      //         Y: -item.y.toFixed(2),
+      //         Z: 0
+      //       }
+      //     })
+      //     zoneObj.Outline.push([temp]);
+      //   })
+      //   if (!zoneObj.Outline.length) {
+      //     continue
+      //   }
+      //   let curISP = this.sourceIdToISP[key];
+      //   zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
+      //   zoneObj.IspaceId = curISP.RoomID;
+      //   zoneObj.RoomLocalName = curISP.RoomLocalName;
+      //   zoneObj.BuildingId = this.buildFloor[0];
+      //   zoneObj.FloorId = this.buildFloor[1];
+      //   createSpaces.push(zoneObj);
+      // }
+      
+      // 改回之前逻辑
       let arr = this.scene.getSelectedSpaces();
-      let createSpaces = [], spaces = {};
+      let createSpaces = [];
+      // 如果有划分,求交集
       if (this.scene.cutItem || this.scene.sceneMark) {
-        // 如果有划分,求交集
-        // 格式为Poly(先与业务空间求差集)
-        const obj = this.scene.getZoneDifference(true);
-        // 差集与楼层平面图或用户划分区域求交集
-        spaces = this.scene.getPloyIntersect(obj)
-      } else {
-        // 格式为SPoint[]
-        spaces = this.scene.getZoneDifference();
-      }
-      for (let key in spaces) {
-        let zoneObj = { Outline: [], Height: 0 }
-        spaces[key].map(t => {
-          let temp = t.map(item => {
-            return {
-              X: 1 * item.x.toFixed(2),
-              Y: -item.y.toFixed(2),
-              Z: 0
-            }
+        let outlines = this.scene.getIntersectInSpace();
+        for (let k in outlines) {
+          outlines[k] = outlines[k].map(t => {
+            t = t.map(item => {
+              item = item.map(j => {
+                return { X: j.x, Y: -j.y, Z: 0 }
+              })
+              return item
+            })
+            return t;
           })
-          zoneObj.Outline.push([temp]);
-        })
-        if (!zoneObj.Outline.length) {
-          continue
         }
-        let curISP = this.sourceIdToISP[key];
-        zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
-        zoneObj.IspaceId = curISP.RoomID;
-        zoneObj.RoomLocalName = curISP.RoomLocalName;
-        zoneObj.BuildingId = this.buildFloor[0];
-        zoneObj.FloorId = this.buildFloor[1];
-        createSpaces.push(zoneObj);
+        createSpaces = arr.map(t => {
+          return {
+            IspaceId: this.BIMIDToSID[t.data.SourceId],
+            RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
+            Outline: outlines[t.data.SourceId],
+            BuildingId: this.buildFloor[0],
+            FloorId: this.buildFloor[1],
+            Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
+          }
+        }).filter(item => item.Outline && item.Outline.length)
+      } else {
+        createSpaces = arr.map(t => {
+          return {
+            IspaceId: this.BIMIDToSID[t.data.SourceId],
+            RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
+            Outline: [t.data.OutLine],
+            BuildingId: this.buildFloor[0],
+            FloorId: this.buildFloor[1],
+            Height: t.data.Height > 100 ? (t.data.Height / 1000).toFixed(2) : t.data.Height || 0
+          }
+        })
       }
       if (createSpaces.length) {
         this.canvasLoading = true;