Browse Source

修改业务空间刷新 及交集计算问题

haojianlong 5 years ago
parent
commit
b2142bd05c
2 changed files with 168 additions and 152 deletions
  1. 1 1
      package.json
  2. 167 151
      src/components/business_space/newGraphy/graphy.vue

+ 1 - 1
package.json

@@ -33,7 +33,7 @@
     "@saga-web/base": "2.1.9",
     "@saga-web/draw": "2.1.74",
     "@saga-web/graphy": "2.1.39",
-    "@saga-web/cad-engine": "2.0.532"
+    "@saga-web/cad-engine": "2.0.536"
   },
   "devDependencies": {
     "ajv": "^6.9.1",

+ 167 - 151
src/components/business_space/newGraphy/graphy.vue

@@ -566,62 +566,62 @@ export default {
     },
     // 根据图创建新的业务空间-弹窗返回确认创建
     createRoom(val) {
-      // const zoneObj = { Outline: [], Height: 0 }, IspaceIdList = [];
-      // let 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) {
-      //   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];
-      // if (curISP) {
-      //   curISP && IspaceIdList.push(curISP.RoomID);
-      //   zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
-      // }
-      // }
-      // 数据计算导致浏览器奔溃,临时注释
-      let zoneObj = { Outline: [], Height: 0 }, 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];
-        if (curISP) {
-          IspaceIdList.push(curISP.RoomID);
-          zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
-        }
-      })
-      // 如果有划分,求交集
+      const zoneObj = { Outline: [], Height: 0 }, IspaceIdList = [];
+      let spaces = {};
       if (this.scene.cutItem || this.scene.sceneMark) {
-        zoneObj.Outline = [];
-        let arr = this.scene.getIntersect();
-        arr.map(t => {
+        // 如果有划分,求交集
+        // 格式为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,
-              Y: -item.y,
+              X: 1 * item.x.toFixed(2),
+              Y: -item.y.toFixed(2),
               Z: 0
             }
           })
           zoneObj.Outline.push([temp]);
         })
+        let curISP = this.sourceIdToISP[key];
+        if (curISP) {
+          curISP && IspaceIdList.push(curISP.RoomID);
+          zoneObj.Height = zoneObj.Height == 0 ? curISP.Height : zoneObj.Height > curISP.Height ? curISP.Height : zoneObj.Height;
+        }
       }
+      // 数据计算导致浏览器奔溃,临时注释(测试计算未崩溃改好)
+      // let zoneObj = { Outline: [], Height: 0 }, 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];
+      //   if (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) {
+      //   zoneObj.Outline = [];
+      //   let arr = this.scene.getIntersect();
+      //   arr.map(t => {
+      //     let temp = t.map(item => {
+      //       return {
+      //         X: 1 * item.x,
+      //         Y: -item.y,
+      //         Z: 0
+      //       }
+      //     })
+      //     zoneObj.Outline.push([temp]);
+      //   })
+      // }
       // 至此
       if (!zoneObj.Outline.length) {
         zoneObj.Outline = null;
@@ -803,117 +803,133 @@ 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];
-      // if (curISP) {
-      //   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 = [];
-      // 如果有划分,求交集
+      let createSpaces = [], spaces = {};
       if (this.scene.cutItem || this.scene.sceneMark) {
-        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;
-          })
-        }
-        createSpaces = arr.map(t => {
-          let line = outlines[t.data.SourceId];
-          if (!line || !line.length) {
-            return undefined
-          } else {
-            let area = 0;
-            for (let i = 0; i < line.length; i++) {
-              for (let j = 0; j < line[i].length; j++) {
-                if (j == 0) {
-                  area += this.getarea(line[i][0]);
-                } else {
-                  area -= this.getarea(line[i][j]);
-                }
-              }
-            }
-            area = (area / 1000000).toFixed(2);
-            if (area < (this.areaValue / 100)) {
-              return undefined;
-            }
-          }
-          return {
-            IspaceId: this.BIMIDToSID[t.data.SourceId],
-            RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
-            Outline: line,
-            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)
+        // 如果有划分,求交集
+        // 格式为Poly(先与业务空间求差集)
+        const obj = this.scene.getZoneDifference(true);
+        // 差集与楼层平面图或用户划分区域求交集
+        spaces = this.scene.getPloyIntersect(obj)
       } else {
-        createSpaces = arr.map(t => {
-          let line = t.data.OutLine;
-          if (!line || !line.length) {
-            return undefined
-          } else {
-            let area = this.getarea(line[0]);
-            if (line.length > 1) {
-              for (let i = 1; i < line.length; i++) {
-                area -= this.getarea(line[i]);
-              }
+        // 格式为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
             }
-            area = (area / 1000000).toFixed(2);
-            if (area < (this.areaValue / 100)) {
-              return undefined;
+          })
+          zoneObj.Outline.push([temp]);
+        })
+        if (!zoneObj.Outline.length) {
+          continue
+        }
+        //计算面积
+        let area = 0, line = zoneObj.Outline;
+        for (let i = 0; i < line.length; i++) {
+          for (let j = 0; j < line[i].length; j++) {
+            if (j == 0) {
+              area += this.getarea(line[i][0]);
+            } else {
+              area -= this.getarea(line[i][j]);
             }
           }
-          return {
-            IspaceId: this.BIMIDToSID[t.data.SourceId],
-            RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
-            Outline: [line],
-            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);
+        }
+        area = (area / 1000000).toFixed(2);
+        if (area < (this.areaValue / 100)) {
+          continue
+        }
+        //生成空间对象
+        let curISP = this.sourceIdToISP[key];
+        if (curISP) {
+          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 = [];
+      // // 如果有划分,求交集
+      // if (this.scene.cutItem || this.scene.sceneMark) {
+      //   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;
+      //     })
+      //   }
+      //   createSpaces = arr.map(t => {
+      //     let line = outlines[t.data.SourceId];
+      //     if (!line || !line.length) {
+      //       return undefined
+      //     } else {
+      //       let area = 0;
+      //       for (let i = 0; i < line.length; i++) {
+      //         for (let j = 0; j < line[i].length; j++) {
+      //           if (j == 0) {
+      //             area += this.getarea(line[i][0]);
+      //           } else {
+      //             area -= this.getarea(line[i][j]);
+      //           }
+      //         }
+      //       }
+      //       area = (area / 1000000).toFixed(2);
+      //       if (area < (this.areaValue / 100)) {
+      //         return undefined;
+      //       }
+      //     }
+      //     return {
+      //       IspaceId: this.BIMIDToSID[t.data.SourceId],
+      //       RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
+      //       Outline: line,
+      //       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)
+      // } else {
+      //   createSpaces = arr.map(t => {
+      //     let line = t.data.OutLine;
+      //     if (!line || !line.length) {
+      //       return undefined
+      //     } else {
+      //       let area = this.getarea(line[0]);
+      //       if (line.length > 1) {
+      //         for (let i = 1; i < line.length; i++) {
+      //           area -= this.getarea(line[i]);
+      //         }
+      //       }
+      //       area = (area / 1000000).toFixed(2);
+      //       if (area < (this.areaValue / 100)) {
+      //         return undefined;
+      //       }
+      //     }
+      //     return {
+      //       IspaceId: this.BIMIDToSID[t.data.SourceId],
+      //       RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
+      //       Outline: [line],
+      //       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);
+      // }
       if (createSpaces.length) {
         this.canvasLoading = true;
         this.groupCreateBSP(createSpaces)