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