|
@@ -30,7 +30,9 @@ import { MinDis } from "./types/MinDis";
|
|
import { PointToLine } from "./types/PointToLine";
|
|
import { PointToLine } from "./types/PointToLine";
|
|
import { RectSelectItem } from "./items/RectSelectItem";
|
|
import { RectSelectItem } from "./items/RectSelectItem";
|
|
// @ts-ignore
|
|
// @ts-ignore
|
|
-import { intersect, difference } from "polybooljs";
|
|
|
|
|
|
+import { combine, difference, intersect } from "polybooljs";
|
|
|
|
+// @ts-ignore
|
|
|
|
+import { polygon, segments, selectUnion } 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";
|
|
@@ -77,13 +79,15 @@ export class DivideFloorScene extends FloorScene {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
this._isZoneSelectable = v;
|
|
this._isZoneSelectable = v;
|
|
- this.zoneList.map((t: ZoneItem) => {
|
|
|
|
- t.selectable = this._isZoneSelectable;
|
|
|
|
- if (!t.selectable) {
|
|
|
|
- t.selected = false;
|
|
|
|
|
|
+ this.zoneList.map(
|
|
|
|
+ (t: ZoneItem): ZoneItem => {
|
|
|
|
+ t.selectable = this._isZoneSelectable;
|
|
|
|
+ if (!t.selectable) {
|
|
|
|
+ t.selected = false;
|
|
|
|
+ }
|
|
|
|
+ return t;
|
|
}
|
|
}
|
|
- return t;
|
|
|
|
- });
|
|
|
|
|
|
+ );
|
|
} // Set isZoneSelectable
|
|
} // Set isZoneSelectable
|
|
|
|
|
|
/** 是否开启吸附 */
|
|
/** 是否开启吸附 */
|
|
@@ -122,10 +126,12 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
addSceneMark(data: SPoint[]): void {
|
|
addSceneMark(data: SPoint[]): void {
|
|
if (data.length) {
|
|
if (data.length) {
|
|
- let outline = data.map(t => {
|
|
|
|
- t.y = -t.y;
|
|
|
|
- return t;
|
|
|
|
- });
|
|
|
|
|
|
+ let outline = data.map(
|
|
|
|
+ (t: SPoint): SPoint => {
|
|
|
|
+ t.y = -t.y;
|
|
|
|
+ return t;
|
|
|
|
+ }
|
|
|
|
+ );
|
|
let sceneMark = new SceneMarkItem(null, outline);
|
|
let sceneMark = new SceneMarkItem(null, outline);
|
|
this.addItem(sceneMark);
|
|
this.addItem(sceneMark);
|
|
this.sceneMark = sceneMark;
|
|
this.sceneMark = sceneMark;
|
|
@@ -165,7 +171,7 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
addAllShade(data: SPoint[][]): void {
|
|
addAllShade(data: SPoint[][]): void {
|
|
if (data.length) {
|
|
if (data.length) {
|
|
- data.map(t => {
|
|
|
|
|
|
+ data.forEach((t): void => {
|
|
this.addShade(t);
|
|
this.addShade(t);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -177,10 +183,12 @@ export class DivideFloorScene extends FloorScene {
|
|
* @param data 遮罩数据
|
|
* @param data 遮罩数据
|
|
*/
|
|
*/
|
|
addShade(data: SPoint[]): void {
|
|
addShade(data: SPoint[]): void {
|
|
- let outLine = data.map(t => {
|
|
|
|
- t.y = -t.y;
|
|
|
|
- return t;
|
|
|
|
- });
|
|
|
|
|
|
+ let outLine = data.map(
|
|
|
|
+ (t: SPoint): SPoint => {
|
|
|
|
+ t.y = -t.y;
|
|
|
|
+ return t;
|
|
|
|
+ }
|
|
|
|
+ );
|
|
let item = new ShadeItem(null, outLine);
|
|
let item = new ShadeItem(null, outLine);
|
|
this.shadeList.push(item);
|
|
this.shadeList.push(item);
|
|
this.addItem(item);
|
|
this.addItem(item);
|
|
@@ -193,7 +201,7 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
addAllLikeSpace(data: Point[][][]): void {
|
|
addAllLikeSpace(data: Point[][][]): void {
|
|
if (data.length) {
|
|
if (data.length) {
|
|
- data.map(t => {
|
|
|
|
|
|
+ data.forEach((t): void => {
|
|
this.addLikeSpace(t);
|
|
this.addLikeSpace(t);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -218,7 +226,7 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
clearLikeSpaces(): void {
|
|
clearLikeSpaces(): void {
|
|
if (this.likeSpaceList.length) {
|
|
if (this.likeSpaceList.length) {
|
|
- this.likeSpaceList.map(t => {
|
|
|
|
|
|
+ this.likeSpaceList.forEach((t): void => {
|
|
this.removeItem(t);
|
|
this.removeItem(t);
|
|
});
|
|
});
|
|
this.likeSpaceList = [];
|
|
this.likeSpaceList = [];
|
|
@@ -230,7 +238,7 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
getSelectedLikeSpace(): LikeSpaceItem[] {
|
|
getSelectedLikeSpace(): LikeSpaceItem[] {
|
|
let arr: LikeSpaceItem[] = [];
|
|
let arr: LikeSpaceItem[] = [];
|
|
- this.likeSpaceList.map(t => {
|
|
|
|
|
|
+ this.likeSpaceList.forEach((t): void => {
|
|
if (t.selected) {
|
|
if (t.selected) {
|
|
arr.push(t);
|
|
arr.push(t);
|
|
}
|
|
}
|
|
@@ -367,11 +375,11 @@ export class DivideFloorScene extends FloorScene {
|
|
* @param _this 接收者
|
|
* @param _this 接收者
|
|
* @param fn 处理函数
|
|
* @param fn 处理函数
|
|
*/
|
|
*/
|
|
- click(_this: any, fn: Function): void {
|
|
|
|
- this.spaceList.map(t => {
|
|
|
|
|
|
+ click(_this: FloorScene, fn: Function): void {
|
|
|
|
+ this.spaceList.forEach((t): void => {
|
|
t.connect("click", _this, fn);
|
|
t.connect("click", _this, fn);
|
|
});
|
|
});
|
|
- this.zoneList.map(t => {
|
|
|
|
|
|
+ this.zoneList.forEach((t): void => {
|
|
t.connect("click", _this, fn);
|
|
t.connect("click", _this, fn);
|
|
});
|
|
});
|
|
} // Function click()
|
|
} // Function click()
|
|
@@ -382,7 +390,7 @@ export class DivideFloorScene extends FloorScene {
|
|
* @param zone 业务空间list
|
|
* @param zone 业务空间list
|
|
*/
|
|
*/
|
|
addZoneList(zone: Zone[]): void {
|
|
addZoneList(zone: Zone[]): void {
|
|
- zone.map(t => {
|
|
|
|
|
|
+ zone.forEach((t): void => {
|
|
this.addZone(t);
|
|
this.addZone(t);
|
|
});
|
|
});
|
|
} // Function addZoneList()
|
|
} // Function addZoneList()
|
|
@@ -400,25 +408,16 @@ export class DivideFloorScene extends FloorScene {
|
|
} // Function addZone()
|
|
} // Function addZone()
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 清空选中的空间
|
|
|
|
- *
|
|
|
|
- */
|
|
|
|
- clearSpaceSelection(): void {
|
|
|
|
- this.spaceList.map(t => {
|
|
|
|
- t.selected = false;
|
|
|
|
- return t;
|
|
|
|
- });
|
|
|
|
- } // Function clearSpaceSelection()
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
* 清空选中的业务空间
|
|
* 清空选中的业务空间
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
clearZoneSelection(): void {
|
|
clearZoneSelection(): void {
|
|
- this.zoneList.map(t => {
|
|
|
|
- t.selected = false;
|
|
|
|
- return t;
|
|
|
|
- });
|
|
|
|
|
|
+ this.zoneList.map(
|
|
|
|
+ (t): ZoneItem => {
|
|
|
|
+ t.selected = false;
|
|
|
|
+ return t;
|
|
|
|
+ }
|
|
|
|
+ );
|
|
} // Function clearZoneSelection()
|
|
} // Function clearZoneSelection()
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -426,7 +425,7 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
removeAllZone(): void {
|
|
removeAllZone(): void {
|
|
if (this.zoneList.length) {
|
|
if (this.zoneList.length) {
|
|
- this.zoneList.map(t => {
|
|
|
|
|
|
+ this.zoneList.forEach((t): void => {
|
|
this.removeItem(t);
|
|
this.removeItem(t);
|
|
});
|
|
});
|
|
this.zoneList = [];
|
|
this.zoneList = [];
|
|
@@ -438,7 +437,7 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
getSelectedZone(): ZoneItem[] {
|
|
getSelectedZone(): ZoneItem[] {
|
|
let arr: ZoneItem[] = [];
|
|
let arr: ZoneItem[] = [];
|
|
- this.zoneList.map(t => {
|
|
|
|
|
|
+ this.zoneList.forEach((t): void => {
|
|
if (t.selected) {
|
|
if (t.selected) {
|
|
arr.push(t);
|
|
arr.push(t);
|
|
}
|
|
}
|
|
@@ -511,7 +510,7 @@ export class DivideFloorScene extends FloorScene {
|
|
absorbSpacePoint(event: SMouseEvent, absorbLen: number): MinDis {
|
|
absorbSpacePoint(event: SMouseEvent, absorbLen: number): MinDis {
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let Point;
|
|
let Point;
|
|
- this.spaceList.map(space => {
|
|
|
|
|
|
+ this.spaceList.map((space): void => {
|
|
if (
|
|
if (
|
|
DivideFloorScene.isPointInAbsorbArea(
|
|
DivideFloorScene.isPointInAbsorbArea(
|
|
new SPoint(event.x, event.y),
|
|
new SPoint(event.x, event.y),
|
|
@@ -521,7 +520,7 @@ export class DivideFloorScene extends FloorScene {
|
|
space.maxY
|
|
space.maxY
|
|
)
|
|
)
|
|
) {
|
|
) {
|
|
- space.data.OutLine.map(item => {
|
|
|
|
|
|
+ space.data.OutLine.forEach((item): void => {
|
|
let minDis = SMathUtil.getMinDisPoint(
|
|
let minDis = SMathUtil.getMinDisPoint(
|
|
new SPoint(event.x, event.y),
|
|
new SPoint(event.x, event.y),
|
|
item
|
|
item
|
|
@@ -537,11 +536,10 @@ export class DivideFloorScene extends FloorScene {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- let minPoint = {
|
|
|
|
|
|
+ return {
|
|
MinDis: minPointDis,
|
|
MinDis: minPointDis,
|
|
Point: Point
|
|
Point: Point
|
|
};
|
|
};
|
|
- return minPoint;
|
|
|
|
} // Function absorbSpacePoint()
|
|
} // Function absorbSpacePoint()
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -554,7 +552,7 @@ export class DivideFloorScene extends FloorScene {
|
|
absorbSpaceLine(event: SMouseEvent, absorbLen: number): PointToLine {
|
|
absorbSpaceLine(event: SMouseEvent, absorbLen: number): PointToLine {
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let Point, Line;
|
|
let Point, Line;
|
|
- this.spaceList.map(space => {
|
|
|
|
|
|
+ this.spaceList.forEach((space): void => {
|
|
if (
|
|
if (
|
|
DivideFloorScene.isPointInAbsorbArea(
|
|
DivideFloorScene.isPointInAbsorbArea(
|
|
new SPoint(event.x, event.y),
|
|
new SPoint(event.x, event.y),
|
|
@@ -564,7 +562,7 @@ export class DivideFloorScene extends FloorScene {
|
|
space.maxY
|
|
space.maxY
|
|
)
|
|
)
|
|
) {
|
|
) {
|
|
- space.data.OutLine.map(item => {
|
|
|
|
|
|
+ space.data.OutLine.forEach((item): void => {
|
|
let minDisLine = SMathUtil.getMinDisLine(
|
|
let minDisLine = SMathUtil.getMinDisLine(
|
|
new SPoint(event.x, event.y),
|
|
new SPoint(event.x, event.y),
|
|
item
|
|
item
|
|
@@ -581,12 +579,11 @@ export class DivideFloorScene extends FloorScene {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- let minPointLine = {
|
|
|
|
|
|
+ return {
|
|
MinDis: minPointDis,
|
|
MinDis: minPointDis,
|
|
Point: Point,
|
|
Point: Point,
|
|
Line: Line
|
|
Line: Line
|
|
};
|
|
};
|
|
- return minPointLine;
|
|
|
|
} // Function absorbSpaceLine()
|
|
} // Function absorbSpaceLine()
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -629,10 +626,12 @@ export class DivideFloorScene extends FloorScene {
|
|
absorbShadePoint(event: SMouseEvent, absorbLen: number): MinDis {
|
|
absorbShadePoint(event: SMouseEvent, absorbLen: number): MinDis {
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let Point;
|
|
let Point;
|
|
- this.shadeList.map(shade => {
|
|
|
|
- let PointArr = shade.outLine.map(item => {
|
|
|
|
- return { X: item.x, Y: -item.y, Z: 0 };
|
|
|
|
- });
|
|
|
|
|
|
+ this.shadeList.forEach((shade): void => {
|
|
|
|
+ let PointArr = shade.outLine.map(
|
|
|
|
+ (item): Point => {
|
|
|
|
+ return { X: item.x, Y: -item.y, Z: 0 };
|
|
|
|
+ }
|
|
|
|
+ );
|
|
let minDis = SMathUtil.getMinDisPoint(
|
|
let minDis = SMathUtil.getMinDisPoint(
|
|
new SPoint(event.x, event.y),
|
|
new SPoint(event.x, event.y),
|
|
PointArr
|
|
PointArr
|
|
@@ -646,11 +645,10 @@ export class DivideFloorScene extends FloorScene {
|
|
Point = minDis.Point;
|
|
Point = minDis.Point;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- let minPoint = {
|
|
|
|
|
|
+ return {
|
|
MinDis: minPointDis,
|
|
MinDis: minPointDis,
|
|
Point: Point
|
|
Point: Point
|
|
};
|
|
};
|
|
- return minPoint;
|
|
|
|
} // Function absorbSpacePoint()
|
|
} // Function absorbSpacePoint()
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -663,10 +661,12 @@ export class DivideFloorScene extends FloorScene {
|
|
absorbShadeLine(event: SMouseEvent, absorbLen: number): PointToLine {
|
|
absorbShadeLine(event: SMouseEvent, absorbLen: number): PointToLine {
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let minPointDis = Number.MAX_SAFE_INTEGER;
|
|
let Point, Line;
|
|
let Point, Line;
|
|
- this.shadeList.map(shade => {
|
|
|
|
- let PointArr = shade.outLine.map(item => {
|
|
|
|
- return { X: item.x, Y: -item.y, Z: 0 };
|
|
|
|
- });
|
|
|
|
|
|
+ this.shadeList.map((shade): void => {
|
|
|
|
+ let PointArr = shade.outLine.map(
|
|
|
|
+ (item): Point => {
|
|
|
|
+ return { X: item.x, Y: -item.y, Z: 0 };
|
|
|
|
+ }
|
|
|
|
+ );
|
|
let minDisLine = SMathUtil.getMinDisLine(
|
|
let minDisLine = SMathUtil.getMinDisLine(
|
|
new SPoint(event.x, event.y),
|
|
new SPoint(event.x, event.y),
|
|
PointArr
|
|
PointArr
|
|
@@ -681,12 +681,11 @@ export class DivideFloorScene extends FloorScene {
|
|
Line = minDisLine.Line;
|
|
Line = minDisLine.Line;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- let minPointLine = {
|
|
|
|
|
|
+ return {
|
|
MinDis: minPointDis,
|
|
MinDis: minPointDis,
|
|
Point: Point,
|
|
Point: Point,
|
|
Line: Line
|
|
Line: Line
|
|
};
|
|
};
|
|
- return minPointLine;
|
|
|
|
} // Function absorbSpaceLine()
|
|
} // Function absorbSpaceLine()
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -711,20 +710,19 @@ export class DivideFloorScene extends FloorScene {
|
|
);
|
|
);
|
|
}
|
|
}
|
|
if (poly2.regions.length) {
|
|
if (poly2.regions.length) {
|
|
- this.spaceList.map(t => {
|
|
|
|
|
|
+ this.spaceList.forEach((t): void => {
|
|
if (t.selected) {
|
|
if (t.selected) {
|
|
let poly1 = {
|
|
let poly1 = {
|
|
regions: [],
|
|
regions: [],
|
|
inverted: false
|
|
inverted: false
|
|
};
|
|
};
|
|
// @ts-ignore
|
|
// @ts-ignore
|
|
- poly1.regions = t.pointArr.map(item => {
|
|
|
|
|
|
+ poly1.regions = t.pointArr.map((item): number[][] => {
|
|
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) {
|
|
- intersectObj.regions.map((t: number[][]) => {
|
|
|
|
|
|
+ intersectObj.regions.map((t: number[][]): void => {
|
|
arr.push(SMathUtil.transferToSPoint(t));
|
|
arr.push(SMathUtil.transferToSPoint(t));
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -766,7 +764,6 @@ export class DivideFloorScene extends FloorScene {
|
|
poly1.regions = t.pointArr.map((item): number[][] => {
|
|
poly1.regions = t.pointArr.map((item): number[][] => {
|
|
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) {
|
|
intersectObj.regions.map((t: number[][]): void => {
|
|
intersectObj.regions.map((t: number[][]): void => {
|
|
@@ -803,11 +800,11 @@ export class DivideFloorScene extends FloorScene {
|
|
inverted: false
|
|
inverted: false
|
|
};
|
|
};
|
|
// @ts-ignore
|
|
// @ts-ignore
|
|
- poly1.regions = t.pointArr.map(item => {
|
|
|
|
|
|
+ poly1.regions = t.pointArr.map((item): number[][] => {
|
|
return SMathUtil.transferToArray(item);
|
|
return SMathUtil.transferToArray(item);
|
|
});
|
|
});
|
|
let intersectObj = intersect(poly1, poly2);
|
|
let intersectObj = intersect(poly1, poly2);
|
|
- t.selected = intersectObj.regions.length ? true : false;
|
|
|
|
|
|
+ t.selected = !!intersectObj.regions.length;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
} // Function groupSelectSpace()
|
|
} // Function groupSelectSpace()
|
|
@@ -860,7 +857,7 @@ export class DivideFloorScene extends FloorScene {
|
|
inverted: false
|
|
inverted: false
|
|
};
|
|
};
|
|
// @ts-ignore
|
|
// @ts-ignore
|
|
- poly1.regions = t.pointArr.map(item => {
|
|
|
|
|
|
+ poly1.regions = t.pointArr.map((item): number[][] => {
|
|
return SMathUtil.transferToArray(item);
|
|
return SMathUtil.transferToArray(item);
|
|
});
|
|
});
|
|
let intersectObj = intersect(poly1, poly2);
|
|
let intersectObj = intersect(poly1, poly2);
|
|
@@ -871,7 +868,7 @@ export class DivideFloorScene extends FloorScene {
|
|
// @ts-ignore
|
|
// @ts-ignore
|
|
Obj[key] = outlineList.map(t => {
|
|
Obj[key] = outlineList.map(t => {
|
|
let arr = [t.Outer];
|
|
let arr = [t.Outer];
|
|
- t.Inner.map(inner => {
|
|
|
|
|
|
+ t.Inner.forEach((inner): void => {
|
|
arr.push(inner);
|
|
arr.push(inner);
|
|
});
|
|
});
|
|
return arr;
|
|
return arr;
|
|
@@ -922,41 +919,117 @@ export class DivideFloorScene extends FloorScene {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 选中的空间与所有业务空间的差集
|
|
* 选中的空间与所有业务空间的差集
|
|
|
|
+ *
|
|
|
|
+ * @param flag 是否进行下一步交集预算,返回数据格式不同
|
|
*/
|
|
*/
|
|
- getZoneDifference(): SPoint[][] {
|
|
|
|
- let arr: SPoint[][] = [];
|
|
|
|
- if (this.zoneList.length) {
|
|
|
|
- const poly1: Poly = {
|
|
|
|
- regions: [],
|
|
|
|
- inverted: false
|
|
|
|
- };
|
|
|
|
- this.zoneList.forEach((t): void => {
|
|
|
|
- t.pointArr.forEach((item): void => {
|
|
|
|
- item.forEach((po): void => {
|
|
|
|
- let point = SMathUtil.transferToArray(po);
|
|
|
|
- poly1.regions.push(point);
|
|
|
|
- });
|
|
|
|
|
|
+ getZoneDifference(flag: boolean = false) {
|
|
|
|
+ const obj = {};
|
|
|
|
+ let poly1: Poly = {
|
|
|
|
+ regions: [],
|
|
|
|
+ inverted: false
|
|
|
|
+ };
|
|
|
|
+ const poly2: Poly = {
|
|
|
|
+ regions: [],
|
|
|
|
+ inverted: false
|
|
|
|
+ };
|
|
|
|
+ let list: Poly[] = [];
|
|
|
|
+ this.zoneList.forEach((t): void => {
|
|
|
|
+ let rect1 = t.boundingRect();
|
|
|
|
+ t.pointArr.forEach((item): void => {
|
|
|
|
+ let polygons: Poly = {
|
|
|
|
+ regions: [],
|
|
|
|
+ inverted: false
|
|
|
|
+ };
|
|
|
|
+ item.forEach((po): void => {
|
|
|
|
+ let point = SMathUtil.transferToArray(po);
|
|
|
|
+ polygons.regions.push(point);
|
|
});
|
|
});
|
|
- });
|
|
|
|
- const poly2: Poly = {
|
|
|
|
- regions: [],
|
|
|
|
- inverted: false
|
|
|
|
- };
|
|
|
|
- this.spaceList.forEach((t): void => {
|
|
|
|
- if (t.selected) {
|
|
|
|
- poly2.regions = t.pointArr.map((item): number[][] => {
|
|
|
|
- return SMathUtil.transferToArray(item);
|
|
|
|
- });
|
|
|
|
- const diffObj: Poly = difference(poly2, poly1);
|
|
|
|
- if (diffObj.regions.length) {
|
|
|
|
- diffObj.regions.forEach((t: number[][]): void => {
|
|
|
|
- arr.push(SMathUtil.transferToSPoint(t));
|
|
|
|
- });
|
|
|
|
|
|
+ this.spaceList.forEach((space): void => {
|
|
|
|
+ if (space.selected) {
|
|
|
|
+ let rect2 = space.boundingRect();
|
|
|
|
+ if (SMathUtil.rectIntersection(rect1, rect2)) {
|
|
|
|
+ list.push(polygons);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- console.log(arr);
|
|
|
|
- }
|
|
|
|
|
|
+ });
|
|
});
|
|
});
|
|
|
|
+ });
|
|
|
|
+ if (list.length) {
|
|
|
|
+ let seg1 = segments(list[0]);
|
|
|
|
+ for (let i = 1; i < list.length; i++) {
|
|
|
|
+ let seg2 = segments(list[i]);
|
|
|
|
+ let comb = combine(seg1, seg2);
|
|
|
|
+ seg1 = selectUnion(comb);
|
|
|
|
+ }
|
|
|
|
+ poly1 = polygon(seg1);
|
|
}
|
|
}
|
|
- return arr;
|
|
|
|
|
|
+ console.log(poly1);
|
|
|
|
+ this.spaceList.forEach((t): void => {
|
|
|
|
+ if (t.selected) {
|
|
|
|
+ let key: string = t.data.SourceId;
|
|
|
|
+ poly2.regions = t.pointArr.map((item): number[][] => {
|
|
|
|
+ return SMathUtil.transferToArray(item);
|
|
|
|
+ });
|
|
|
|
+ const diffObj: Poly = difference(poly2, poly1);
|
|
|
|
+ if (diffObj.regions.length) {
|
|
|
|
+ if (flag) {
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ obj[key] = diffObj;
|
|
|
|
+ } else {
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ obj[key] = diffObj.regions.map(
|
|
|
|
+ (po: number[][]): SPoint[] => {
|
|
|
|
+ return SMathUtil.transferToSPoint(po);
|
|
|
|
+ }
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ obj[key] = flag ? { regions: [], inverted: false } : [];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return obj;
|
|
} // getZoneIntersect()
|
|
} // getZoneIntersect()
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取传入的区域与划分的区域
|
|
|
|
+ *
|
|
|
|
+ * @param poly 多边形or多边形集合,由空间sourceId对应
|
|
|
|
+ * */
|
|
|
|
+ getPloyIntersect(poly: { ([propName]: string): Poly } | Poly) {
|
|
|
|
+ const poly1: Poly = {
|
|
|
|
+ regions: [],
|
|
|
|
+ inverted: false
|
|
|
|
+ };
|
|
|
|
+ if (this.cutItem) {
|
|
|
|
+ poly1.regions.push(SMathUtil.transferToArray(this.cutItem.outLine));
|
|
|
|
+ } else if (this.sceneMark) {
|
|
|
|
+ poly1.regions.push(
|
|
|
|
+ SMathUtil.transferToArray(this.sceneMark.outLine)
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ if (poly.regions) {
|
|
|
|
+ return polygon(segments(intersect(poly, poly1)));
|
|
|
|
+ } else {
|
|
|
|
+ const obj = {};
|
|
|
|
+ for (let key in poly) {
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ obj[key] = [];
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ if (poly[key].regions && poly[key].regions.length) {
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ let interObj: Poly = intersect(poly[key], poly1);
|
|
|
|
+ interObj = polygon(segments(interObj));
|
|
|
|
+ interObj.regions.forEach((t): void => {
|
|
|
|
+ let outline = SMathUtil.transferToSPoint(t);
|
|
|
|
+ // @ts-ignore
|
|
|
|
+ obj[key].push(outline);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return obj;
|
|
|
|
+ }
|
|
|
|
+ } // Function getPloyIntersect()
|
|
} // Class DivideFloorScene
|
|
} // Class DivideFloorScene
|