Browse Source

修改业务空间创建问题

haojianlong 4 năm trước cách đây
mục cha
commit
f4dd8fc506
1 tập tin đã thay đổi với 244 bổ sung231 xóa
  1. 244 231
      src/components/business_space/newGraphy/graphy.vue

+ 244 - 231
src/components/business_space/newGraphy/graphy.vue

@@ -184,6 +184,7 @@ export default {
       OtherValue: '',
       showOtherFlag: false, //是否显示其他分区类型添加
       buildFloorName: "", //建筑楼层名称
+      spaceHeight: 0,
     }
   },
   computed: {
@@ -447,6 +448,9 @@ export default {
 
       } else {
         if (item instanceof SpaceItem && item.selectable) {
+          if (this.spaceHeight == 0) {
+            this.spaceHeight = item.data.Height > 1000 ? item.data.Height / 1000 : item.data.Height
+          }
           if (this.type == 2) {
             this.scene.clearZoneSelection();
           }
@@ -541,7 +545,7 @@ export default {
             Outline: [t.Outline],
             BuildingId: this.buildFloor[0],
             FloorId: this.buildFloor[1],
-            Height: t.Height || 0
+            Height: this.spaceHeight
           }
         } else {
           return undefined
@@ -591,62 +595,64 @@ 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] = spaces[key].map(t => {
-          let temp = t.map(item => {
-            return {
-              X: 1 * item.x.toFixed(2),
-              Y: -item.y.toFixed(2),
-              Z: 0
-            }
+      try {
+        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] = spaces[key].map(t => {
+            let temp = t.map(item => {
+              return {
+                X: 1 * item.x.toFixed(2),
+                Y: -item.y.toFixed(2),
+                Z: 0
+              }
+            })
+            return temp;
           })
-          return temp;
+          let newarr = this.makeMaxAreaFirst(spaces[key])
+          zoneObj.Outline.push(newarr);
+          let curISP = this.sourceIdToISP[key];
+          if (curISP) {
+            curISP && IspaceIdList.push(curISP.RoomID);
+            zoneObj.Height = this.spaceHeight;
+          }
+        }
+      } catch (err) {
+        console.log(err)
+        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 = this.spaceHeight;
+          }
         })
-        let newarr = this.makeMaxAreaFirst(spaces[key])
-        zoneObj.Outline.push(newarr);
-        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;
+        // 如果有划分,求交集
+        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]);
+          })
         }
       }
-      // 数据计算导致浏览器奔溃,临时注释(测试计算未崩溃改好)
-      // 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;
@@ -661,65 +667,64 @@ export default {
       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] = spaces[key].map(t => {
-          let temp = t.map(item => {
-            return {
-              X: 1 * item.x.toFixed(2),
-              Y: -item.y.toFixed(2),
-              Z: 0
-            }
+      try {
+        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] = spaces[key].map(t => {
+            let temp = t.map(item => {
+              return {
+                X: 1 * item.x.toFixed(2),
+                Y: -item.y.toFixed(2),
+                Z: 0
+              }
+            })
+            return temp;
           })
-          return temp;
+          let newarr = this.makeMaxAreaFirst(spaces[key])
+          zoneObj.Outline.push(newarr);
+          let curISP = this.sourceIdToISP[key];
+          if (curISP) {
+            curISP && IspaceIdList.push(curISP.RoomID);
+            zoneObj.Height = this.spaceHeight;
+          }
+        }
+      } catch (err) {
+        console.log(err);
+        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) {
+            curISP && IspaceIdList.push(curISP.RoomID);
+            zoneObj.Height = this.spaceHeight;
+          }
         })
-        let newarr = this.makeMaxAreaFirst(spaces[key])
-        zoneObj.Outline.push(newarr);
-        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;
+        // 如果有划分,求交集
+        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]);
+          })
         }
       }
-
-      // 改回之前逻辑
-      // 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];
-      //   if (curISP) {
-      //     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;
       }
@@ -788,9 +793,11 @@ export default {
         if (this.BIMIDToSID[t.data.SourceId]) {
           IspaceIdList.push(this.BIMIDToSID[t.data.SourceId]);
         }
-        if (t.Height && (zoneObj.Height == 0 || t.Height < zoneObj.Height)) {
-          zoneObj.Height = t.Height > 100 ? (t.Height / 1000).toFixed(2) : t.Height;
-        }
+
+        // if (t.Height && (zoneObj.Height == 0 || t.Height < zoneObj.Height)) {
+        //   zoneObj.Height = t.Height > 100 ? (t.Height / 1000).toFixed(2) : t.Height;
+        zoneObj.Height = this.spaceHeight
+        // }
       })
       // 类空间
       selectLikeSpace.map(t => {
@@ -832,133 +839,135 @@ export default {
     groupCreateZone() {
       let arr = this.scene.getSelectedSpaces();
       let createSpaces = [], spaces = {};
-      if (this.scene.cutItem || this.scene.sceneMark) {
+      try {
+        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] = spaces[key].map(t => {
+            let temp = t.map(item => {
+              return {
+                X: 1 * item.x.toFixed(2),
+                Y: -item.y.toFixed(2),
+                Z: 0
+              }
+            })
+            return temp;
+          })
+          let newarr = this.makeMaxAreaFirst(spaces[key])
+          zoneObj.Outline.push(newarr);
+          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]);
+              }
+            }
+          }
+          area = (area / 1000000).toFixed(2);
+          if (area < (this.areaValue / 100)) {
+            continue
+          }
+          //生成空间对象
+          let curISP = this.sourceIdToISP[key];
+          if (curISP) {
+            zoneObj.Height = this.spaceHeight;
+            // 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);
+        }
+      } catch (err) {
+        console.log(err)
+        let createSpaces = [];
         // 如果有划分,求交集
-        // 格式为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] = spaces[key].map(t => {
-          let temp = t.map(item => {
+        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 {
-              X: 1 * item.x.toFixed(2),
-              Y: -item.y.toFixed(2),
-              Z: 0
+              IspaceId: this.BIMIDToSID[t.data.SourceId],
+              RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
+              Outline: line,
+              BuildingId: this.buildFloor[0],
+              FloorId: this.buildFloor[1],
+              Height: this.spaceHeight
             }
-          })
-          return temp;
-        })
-        let newarr = this.makeMaxAreaFirst(spaces[key])
-        zoneObj.Outline.push(newarr);
-        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]);
+          }).filter(item => item)
+        } else {
+          createSpaces = arr.map(t => {
+            let line = t.data.OutLine;
+            if (!line || !line.length) {
+              return undefined
             } else {
-              area -= this.getarea(line[i][j]);
+              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;
+              }
             }
-          }
-        }
-        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;
+            return {
+              IspaceId: this.BIMIDToSID[t.data.SourceId],
+              RoomLocalName: this.BIMIDToSIName[t.data.SourceId],
+              Outline: [line],
+              BuildingId: this.buildFloor[0],
+              FloorId: this.buildFloor[1],
+              Height: this.spaceHeight
+            }
+          }).filter(item => item);
         }
-        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)
@@ -1201,6 +1210,10 @@ export default {
     },
     // 数组为顺时针or逆时针 顺时针非负 逆时针为 负
     clockDir(pointList) {
+      let l = pointList.length - 1
+      if (pointList[0].x == pointList[l].x && pointList[0].y == pointList[l].y) {
+        pointList.splice(l, 1);
+      }
       if (pointList.length < 3) {
         return 0;
       }