|
@@ -71,15 +71,14 @@ export class DivideFloorScene extends FloorScene {
|
|
|
|
|
|
/** 高亮item */
|
|
/** 高亮item */
|
|
hightLight: HighlightItem = new HighlightItem(null, new SPoint(), 0);
|
|
hightLight: HighlightItem = new HighlightItem(null, new SPoint(), 0);
|
|
- /** 吸附距离 */
|
|
|
|
- private _absorbLen: number = 1;
|
|
|
|
- get absorbLen(): number {
|
|
|
|
- return this._absorbLen;
|
|
|
|
- } // Get absorbLen
|
|
|
|
- set absorbLen(v: number) {
|
|
|
|
- this._absorbLen = v;
|
|
|
|
- } // Set absorbLen
|
|
|
|
-
|
|
|
|
|
|
+ /** 是否开启吸附 */
|
|
|
|
+ private _isAbsorbing: boolean = false;
|
|
|
|
+ get isAbsorbing(): boolean {
|
|
|
|
+ return this._isAbsorbing;
|
|
|
|
+ } // Get isAbsorbing
|
|
|
|
+ set isAbsorbing(v: boolean) {
|
|
|
|
+ this._isAbsorbing = v;
|
|
|
|
+ } // Set isAbsorbing
|
|
/**
|
|
/**
|
|
* 构造函数
|
|
* 构造函数
|
|
*
|
|
*
|
|
@@ -124,6 +123,11 @@ export class DivideFloorScene extends FloorScene {
|
|
*/
|
|
*/
|
|
onMouseDown(event: SMouseEvent): boolean {
|
|
onMouseDown(event: SMouseEvent): boolean {
|
|
if (this.isMarking && event.buttons == 1) {
|
|
if (this.isMarking && event.buttons == 1) {
|
|
|
|
+ // 判断是否开启吸附,并且有吸附的点
|
|
|
|
+ if (this.isAbsorbing && this.hightLight.visible) {
|
|
|
|
+ event.x = this.hightLight.point.x;
|
|
|
|
+ event.y = this.hightLight.point.y;
|
|
|
|
+ }
|
|
if (this.sceneMark) {
|
|
if (this.sceneMark) {
|
|
this.sceneMark.onMouseDown(event);
|
|
this.sceneMark.onMouseDown(event);
|
|
} else {
|
|
} else {
|
|
@@ -244,8 +248,11 @@ export class DivideFloorScene extends FloorScene {
|
|
* @param 鼠标事件对象
|
|
* @param 鼠标事件对象
|
|
*/
|
|
*/
|
|
onMouseMove(event: SMouseEvent): boolean {
|
|
onMouseMove(event: SMouseEvent): boolean {
|
|
|
|
+ super.onMouseMove(event);
|
|
this.hightLight.visible = false;
|
|
this.hightLight.visible = false;
|
|
- this.absorbSpace(event);
|
|
|
|
|
|
+ if (this.isAbsorbing) {
|
|
|
|
+ this.absorbSpace(event);
|
|
|
|
+ }
|
|
return false;
|
|
return false;
|
|
} // Function onMouseMove
|
|
} // Function onMouseMove
|
|
|
|
|
|
@@ -255,15 +262,20 @@ export class DivideFloorScene extends FloorScene {
|
|
* @param 鼠标事件对象
|
|
* @param 鼠标事件对象
|
|
*/
|
|
*/
|
|
absorbSpace(event: SMouseEvent): void {
|
|
absorbSpace(event: SMouseEvent): void {
|
|
- let P = this.absorbPoint(event);
|
|
|
|
|
|
+ let absorbLen = 1000;
|
|
|
|
+ if (this.view) {
|
|
|
|
+ absorbLen = 10 / this.view.scale;
|
|
|
|
+ }
|
|
|
|
+ let P = this.absorbPoint(event, absorbLen);
|
|
if (P.Point) {
|
|
if (P.Point) {
|
|
this.hightLight.distance = P.MinDis;
|
|
this.hightLight.distance = P.MinDis;
|
|
this.hightLight.point = new SPoint(P.Point.X, -P.Point.Y);
|
|
this.hightLight.point = new SPoint(P.Point.X, -P.Point.Y);
|
|
this.hightLight.visible = true;
|
|
this.hightLight.visible = true;
|
|
} else {
|
|
} else {
|
|
- let L = this.absorbLine(event);
|
|
|
|
- if (L.Line) {
|
|
|
|
|
|
+ let L = this.absorbLine(event, absorbLen);
|
|
|
|
+ if (L.Line && L.Point) {
|
|
this.hightLight.distance = L.MinDis;
|
|
this.hightLight.distance = L.MinDis;
|
|
|
|
+ this.hightLight.point = L.Point;
|
|
this.hightLight.line = L.Line;
|
|
this.hightLight.line = L.Line;
|
|
this.hightLight.visible = true;
|
|
this.hightLight.visible = true;
|
|
}
|
|
}
|
|
@@ -299,9 +311,10 @@ export class DivideFloorScene extends FloorScene {
|
|
* 吸附点
|
|
* 吸附点
|
|
*
|
|
*
|
|
* @param 鼠标事件对象
|
|
* @param 鼠标事件对象
|
|
|
|
+ * @param 吸附距离
|
|
* @return 吸附的点
|
|
* @return 吸附的点
|
|
*/
|
|
*/
|
|
- absorbPoint(event: SMouseEvent): MinDis {
|
|
|
|
|
|
+ absorbPoint(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 => {
|
|
@@ -321,7 +334,7 @@ export class DivideFloorScene extends FloorScene {
|
|
);
|
|
);
|
|
if (
|
|
if (
|
|
minDis &&
|
|
minDis &&
|
|
- minDis.MinDis < 2500 &&
|
|
|
|
|
|
+ minDis.MinDis < absorbLen &&
|
|
minDis.MinDis < minPointDis
|
|
minDis.MinDis < minPointDis
|
|
) {
|
|
) {
|
|
minPointDis = minDis.MinDis;
|
|
minPointDis = minDis.MinDis;
|
|
@@ -338,12 +351,13 @@ export class DivideFloorScene extends FloorScene {
|
|
} // Function absorbPoint
|
|
} // Function absorbPoint
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 吸附点
|
|
|
|
|
|
+ * 吸附线
|
|
*
|
|
*
|
|
* @param 鼠标事件对象
|
|
* @param 鼠标事件对象
|
|
|
|
+ * @param 吸附距离
|
|
* @return 吸附的线
|
|
* @return 吸附的线
|
|
*/
|
|
*/
|
|
- absorbLine(event: SMouseEvent): PointToLine {
|
|
|
|
|
|
+ absorbLine(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.map(space => {
|
|
@@ -363,7 +377,7 @@ export class DivideFloorScene extends FloorScene {
|
|
);
|
|
);
|
|
if (
|
|
if (
|
|
minDisLine &&
|
|
minDisLine &&
|
|
- minDisLine.MinDis < 2500 &&
|
|
|
|
|
|
+ minDisLine.MinDis < absorbLen &&
|
|
minDisLine.MinDis < minPointDis
|
|
minDisLine.MinDis < minPointDis
|
|
) {
|
|
) {
|
|
minPointDis = minDisLine.MinDis;
|
|
minPointDis = minDisLine.MinDis;
|