Kaynağa Gözat

更新框选操作状态,可框选业务空间;添加方法获取选中的业务空间;发布新版本2.0.420

haojianlong 5 yıl önce
ebeveyn
işleme
f746218b0d
4 değiştirilmiş dosya ile 83 ekleme ve 27 silme
  1. 8 8
      package-lock.json
  2. 3 3
      package.json
  3. 70 14
      src/DivideFloorScene.ts
  4. 2 2
      src/items/ZoneItem.ts

+ 8 - 8
package-lock.json

@@ -1,6 +1,6 @@
 {
     "name": "@saga-web/cad-engine",
-    "version": "2.0.411",
+    "version": "2.0.416",
     "lockfileVersion": 1,
     "requires": true,
     "dependencies": {
@@ -30,19 +30,19 @@
             "integrity": "sha512-V5Xgh02IFmRgM0/7Hkm34RFS/VHepK7786LefuJLyuRh0B48DNJSPrkBAgad5Rl5VM76c8hSQikiS/fyuy7nDQ=="
         },
         "@saga-web/draw": {
-            "version": "2.1.58",
-            "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/@saga-web/draw/-/draw-2.1.58.tgz",
-            "integrity": "sha512-IZpzwRHOO7U48PLexAHLXM8VOTWYxPVIylZ6pFWrKR0U183MXoCmEabS2bX8ivYUULendwBZKTTzfy3TU79IQg==",
+            "version": "2.1.61",
+            "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/@saga-web/draw/-/draw-2.1.61.tgz",
+            "integrity": "sha512-xjAtaQEBrjSwNKMT3gFY7kgZLvQfyMYyMaNKlXPdkPdC63+7X+wDIp1oTRKgTqHCiCp3u6Jx0KBFVzGZShAyDw==",
             "requires": {
                 "@saga-web/base": "^2.1.9"
             }
         },
         "@saga-web/graphy": {
-            "version": "2.1.31",
-            "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/@saga-web/graphy/-/graphy-2.1.31.tgz",
-            "integrity": "sha512-7D3zKV7FUqCfnZsb+S8TCUSsJT6VQvnJxEkKalH76SHObBXei+hISwrB0CI03W5ZCrasmD+2jp324eYM9SHuGw==",
+            "version": "2.1.34",
+            "resolved": "http://dev.dp.sagacloud.cn:8082/repository/npm-saga/@saga-web/graphy/-/graphy-2.1.34.tgz",
+            "integrity": "sha512-X4azMAFxHH02tNUX8JeCtvs6bQlyZRwrgXC5o1TAf1+ffN9BCE9cDQQhw+lrPqdmIBcJmRjE6sfZMUnEtT3MXw==",
             "requires": {
-                "@saga-web/draw": "^2.1.58"
+                "@saga-web/draw": "^2.1.61"
             }
         },
         "@types/eslint-visitor-keys": {

+ 3 - 3
package.json

@@ -1,6 +1,6 @@
 {
     "name": "@saga-web/cad-engine",
-    "version": "2.0.412",
+    "version": "2.0.420",
     "description": "上格云 CAD图形引擎。",
     "main": "lib/index.js",
     "types": "lib/index.d.js",
@@ -32,8 +32,8 @@
     },
     "dependencies": {
         "@saga-web/base": "2.1.9",
-        "@saga-web/draw": "2.1.58",
-        "@saga-web/graphy": "2.1.31",
+        "@saga-web/draw": "2.1.61",
+        "@saga-web/graphy": "2.1.34",
         "axios": "^0.18.0",
         "pako": "^1.0.10",
         "poly-decomp": "^0.3.0",

+ 70 - 14
src/DivideFloorScene.ts

@@ -34,6 +34,7 @@ import { intersect } from "polybooljs";
 import { ShadeItem } from "./items/ShadeItem";
 import { Point } from "./types/Point";
 import { LikeSpaceItem } from "./items/LikeSpaceItem";
+import { SpaceItem } from "./items/SpaceItem";
 
 /**
  * 划分业务空间
@@ -97,12 +98,12 @@ export class DivideFloorScene extends FloorScene {
 
     /** 矩形选择区域  */
     rectSelectItem: RectSelectItem | null = null;
-    /** 是否开启用户选择    */
-    _isRectSelection: boolean = false;
-    get isRectSelection(): boolean {
+    /** 是否开启用户选择-0:关闭,1:选择空间,2:选择业务空间   */
+    _isRectSelection: number = 0;
+    get isRectSelection(): number {
         return this._isRectSelection;
     } // Get isRectSelection
-    set isRectSelection(v: boolean) {
+    set isRectSelection(v: number) {
         this._isRectSelection = v;
     } // Set isRectSelection
 
@@ -287,7 +288,7 @@ export class DivideFloorScene extends FloorScene {
                 }
             } else if (this.isRectSelection) {
                 if (this.rectSelectItem) {
-                    this.isRectSelection = false;
+                    this.isRectSelection = 0;
                     this.removeItem(this.rectSelectItem);
                     this.rectSelectItem = null;
                 } else {
@@ -313,8 +314,13 @@ export class DivideFloorScene extends FloorScene {
      */
     onMouseUp(event: SMouseEvent): boolean {
         if (this.rectSelectItem) {
-            this.isRectSelection = false;
-            this.groupSelectSpace();
+            let type = this.isRectSelection;
+            this.isRectSelection = 0;
+            if (type == 1) {
+                this.groupSelectSpace();
+            } else if (type == 2) {
+                this.groupSelectZone();
+            }
             this.removeItem(this.rectSelectItem);
             this.rectSelectItem = null;
         }
@@ -429,6 +435,19 @@ export class DivideFloorScene extends FloorScene {
     } // Function removeAllZone()
 
     /**
+     * 获取选中的业务空间
+     */
+    getSelectedZone(): ZoneItem[] {
+        let arr: ZoneItem[] = [];
+        this.zoneList.map(t => {
+            if (t.selected) {
+                arr.push(t);
+            }
+        });
+        return arr;
+    } // Function getSelectedZone()
+
+    /**
      *  吸附空间
      *
      *  @param  event   鼠标事件对象
@@ -765,7 +784,7 @@ export class DivideFloorScene extends FloorScene {
      * 框选区域,选中与之相交的空间
      *
      */
-    groupSelectSpace(): void {
+    private groupSelectSpace(): void {
         if (this.rectSelectItem) {
             let item = this.rectSelectItem;
             let poly2 = {
@@ -845,15 +864,19 @@ export class DivideFloorScene extends FloorScene {
                     poly1.regions = t.pointArr.map(item => {
                         return SMathUtil.transferToArray(item);
                     });
-                    console.log(poly1);
                     let intersectObj = intersect(poly1, poly2);
                     if (intersectObj.regions.length) {
-                        let arr: SPoint[][] = [];
-                        intersectObj.regions.map((it: number[][]) => {
-                            arr.push(SMathUtil.transferToSPoint(it));
-                        });
+                        let outlineList = SMathUtil.getIntersectInArray(
+                            intersectObj.regions
+                        );
                         // @ts-ignore
-                        Obj[key] = arr;
+                        Obj[key] = outlineList.map(t => {
+                            let arr = [t.Outer];
+                            t.Inner.map(inner => {
+                                arr.push(inner);
+                            });
+                            return arr;
+                        });
                     } else {
                         // @ts-ignore
                         Obj[key] = [];
@@ -863,4 +886,37 @@ export class DivideFloorScene extends FloorScene {
         }
         return Obj;
     } // Function getIntersectInSpace()
+
+    /** 框选区域,选中与之相交的业务空间    */
+    private groupSelectZone(): void {
+        if (this.rectSelectItem) {
+            let item = this.rectSelectItem;
+            let poly2 = {
+                regions: [
+                    [
+                        [item.startPoint.x, item.startPoint.y],
+                        [item.startPoint.x, item.endPoint.y],
+                        [item.endPoint.x, item.endPoint.y],
+                        [item.endPoint.x, item.startPoint.y]
+                    ]
+                ],
+                inverted: false
+            };
+            this.zoneList.map(t => {
+                let poly1 = {
+                    regions: [],
+                    inverted: false
+                };
+                for (let i = 0; i < t.pointArr.length; i++) {
+                    // @ts-ignore
+                    poly1.regions = t.pointArr[i].map(item => {
+                        return SMathUtil.transferToArray(item);
+                    });
+                    let intersectObj = intersect(poly1, poly2);
+                    t.selected = intersectObj.regions.length ? true : false;
+                    break;
+                }
+            });
+        }
+    } // Function groupSelectZone()
 } // Class DivideFloorScene

+ 2 - 2
src/items/ZoneItem.ts

@@ -41,7 +41,7 @@ export class ZoneItem extends SGraphyItem {
     /** 空间所有数据  */
     data: Zone;
     /** 空间轮廓线坐标list  */
-    private readonly pointArr: SPoint[][][] = [];
+    readonly pointArr: SPoint[][][] = [];
     /** X坐标最小值  */
     private minX = 0;
     /** X坐标最大值  */
@@ -193,7 +193,7 @@ export class ZoneItem extends SGraphyItem {
             } else if (this.highLightFlag) {
                 painter.brush.color = new SColor(this.data.Color);
             } else {
-                painter.brush.color = new SColor(`${this.data.Color}80`);
+                painter.brush.color = new SColor(`${this.data.Color}33`);
             }
         }
         painter.pen.lineWidth = 200;