123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- /*
- * ********************************************************************************************************************
- *
- * :*$@@%$*: ;: ;; ;;
- * :@@%! :!@@%: %! ;%%@@%$ =@@@@@@@%; @%@@@%%%%@@@@@
- * :@%; :$= %%$$$%$$ ;$$ ;$@= !@$
- * =@! %! @ $=;% !@@@%: !$$$$$$$$$$$$$$=
- * =@* %! @ $= % %@= =%@! %=
- * *$%%! @@= ;=$%%%$*: %! @ $= % =%%%%%%@$ *%: =%
- * %@@!: !@@@%=$@@@@%! :*@@$: %! @ $= % $* ;@ @* :%*
- * ;@@! ;!!!;: ;@%: =======@%========* @ $$ % $%*****$@ :@$=*********=@$
- * $@* ;@@@%=!: *@*
- * =@$ ;;;!=%@@@@=! =@!
- * %@$: =@%: :*@@@* %@= Copyright (c) 2016-2019. 北京上格云技术有限公司
- * ;%@@$=$@@%* *@@@$=%@@%;
- * ::;:: ::;:: All rights reserved.
- *
- * ********************************************************************************************************************
- */
- import { ZoneScene } from "./ZoneScene";
- import { RelationItem } from "./items/RelationItem";
- import { SMouseEvent } from "@saga-web/base/lib";
- import { SLine, SPoint } from "@saga-web/draw/lib";
- import { SMathUtil } from "./utils/SMathUtil";
- import { ZoneItem } from "./index";
- import { RelationPoint } from "./types/RelationPoint";
- /**
- * 空间关系图
- *
- * @author 郝建龙
- */
- export class RelationScene extends ZoneScene {
- /** 关系点位list */
- relationList: RelationItem[] = [];
- /** 创建关系点位标识 */
- private _createRelateFlag: boolean = false;
- /** 当前删除的item */
- private curRemoveItem: RelationItem | null = null;
- get createRelateFlag(): boolean {
- return this._createRelateFlag;
- } // Get createRelateFlag
- set createRelateFlag(value: boolean) {
- this._createRelateFlag = value;
- } // Set createRelateFlag
- /** 是否开启吸附 */
- private _isAbsorbing: boolean = false;
- get isAbsorbing(): boolean {
- return this._isAbsorbing;
- } // Get isAbsorbing
- set isAbsorbing(v: boolean) {
- this._isAbsorbing = v;
- } // Set isAbsorbing
- private _removeRelationFlag: boolean = false;
- get removeRelationFlag(): boolean {
- return this._removeRelationFlag;
- } // Get removeRelationFlag
- set removeRelationFlag(value: boolean) {
- this._removeRelationFlag = value;
- } // Set removeRelationFlag
- /** 当前关系item */
- curRelate: RelationItem | null = null;
- /** 当前业务空间 */
- curZone: ZoneItem | null = null;
- /**
- * 鼠标按下事件
- *
- * @param event 保存事件参数
- * @return boolean
- */
- onMouseDown(event: SMouseEvent): boolean {
- if (this.createRelateFlag && event.buttons == 1) {
- let zone = this.isInZone(event.x, event.y);
- if (!zone) {
- return false;
- }
- if (this.isAbsorbing) {
- event = this.absordPoint(event);
- }
- if (this.curRelate) {
- // @ts-ignore
- this.curRelate.endZone = zone.data.RoomID;
- this.curRelate.onMouseDown(event);
- } else {
- let p = new SPoint(event.x, event.y);
- let rela = new RelationItem(null, p);
- // @ts-ignore
- rela.startZone = zone.data.RoomID;
- this.relationList.push(rela);
- this.curRelate = rela;
- this.addItem(rela);
- }
- } else if (this.removeRelationFlag && event.buttons == 1) {
- this.removeSingleRelation(event);
- } else {
- super.onMouseDown(event);
- }
- return false;
- } // Function onMouseDown()
- /**
- * 鼠标抬起事件
- *
- * @param event 保存事件参数
- * @return boolean
- */
- onMouseUp(event: SMouseEvent): boolean {
- super.onMouseUp(event);
- return false;
- } // Function onMouseUp()
- /**
- * 鼠标移动事件
- *
- * @param event 鼠标事件对象
- */
- onMouseMove(event: SMouseEvent): boolean {
- if (this.isAbsorbing) {
- event = this.absordPoint(event);
- }
- if (this.curRelate) {
- this.curRelate.onMouseMove(event);
- return false;
- } else {
- super.onMouseMove(event);
- }
- return false;
- } // Function onMouseMove()
- /** */
- isInZone(x: number, y: number): ZoneItem | boolean {
- for (let i = 0; i < this.zoneList.length; i++) {
- if (this.zoneList[i].contains(x, y)) {
- return this.zoneList[i];
- }
- }
- return false;
- }
- /***
- * 注册鼠标点击事件
- *
- * @param _this 接收者
- * @param fn 处理函数
- */
- click(_this: RelationScene, fn: Function): void {
- this.zoneList.forEach((t): void => {
- t.connect("click", _this, fn);
- });
- } // Function click()
- /** 吸附 */
- absordPoint(event: SMouseEvent): SMouseEvent {
- let len = 20;
- if (this.view) {
- len = 20 / this.view.scale;
- }
- for (let i = 0; i < this.relationList.length; i++) {
- for (let j = 0; j < this.relationList[i].outLine.length; j++) {
- let p1 = this.relationList[i].outLine[j];
- let minDis = SMathUtil.pointDistance(
- event.x,
- event.y,
- p1.x,
- p1.y
- );
- if (minDis < len) {
- len = minDis;
- event.x = p1.x;
- event.y = p1.y;
- return event;
- }
- }
- }
- return event;
- } // Function absordPoint()
- /** 删除关系 */
- removeSingleRelation(event: SMouseEvent) {
- let len = 20;
- if (this.view) {
- len = 20 / this.view.scale;
- }
- let point = new SPoint(event.x, event.y);
- this.curRemoveItem = null;
- for (let i = 0; i < this.relationList.length; i++) {
- let curItem = this.relationList[i];
- let dis = SMathUtil.pointToLine(
- point,
- new SLine(curItem.startPoint, curItem.lastPoint)
- );
- if (dis.MinDis < len) {
- this.curRemoveItem = curItem;
- this.removeItem(curItem);
- this.relationList.splice(i, 1);
- break;
- }
- }
- console.log(this.curRemoveItem);
- } // Function reRelationItem()
- /** 清除所有关系点位 */
- removeAllRelation() {
- this.relationList.forEach((t: RelationItem): void => {
- this.removeItem(t);
- });
- this.relationList = [];
- } // Function removeAllRelation()
- /** 添加所有关系点位 */
- addAllRelaPoint(relations: RelationPoint[]) {
- relations.forEach((t: RelationPoint): void => {
- this.addRelaPoint(t);
- });
- } // Function addAllRelaPoint()
- /** 添加关系点位*/
- addRelaPoint(r: RelationPoint) {
- let item = new RelationItem(null, r);
- this.relationList.push(item);
- this.addItem(item);
- }
- } // Class RelationScene
|