123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import { SGraphView } from "@persagy-web/graph";
- import { SMouseButton, SMouseEvent } from "@persagy-web/base/";
- import { SPoint, SColor, SPainter, SRect } from "@persagy-web/draw/lib";
- export class EagleView extends SGraphView {
- // 记录左键按下位置
- private _leftKeyPos: SPoint = new SPoint();
- // 可视区域即 大图中展示的区域 在 标准视图中的位置及大小
- // 可视区域宽度
- _rectW: number = 200;
- get rectW(): number {
- return this._rectW;
- }
- set rectW(v: number) {
- this._rectW = v;
- this.update()
- }
- // 可视区域高度
- _rectH: number = 100;
- get rectH(): number {
- return this._rectH;
- }
- set rectH(v: number) {
- this._rectH = v;
- this.update()
- }
- // 可视区域中心点
- rectC: SPoint = new SPoint(100, 100);
- // 可视区域描述的矩形
- rect: SRect = new SRect();
- // 鼠标按下的点是否在区域内
- inRect: boolean = false;
- /**
- * 鼠标按下事件
- *
- * @param event 事件参数
- */
- protected onMouseDown(event: MouseEvent): void {
- let se = new SMouseEvent(event);
- // 判断是否在可视区域内
- if (this.rect.contains(event.offsetX, event.offsetY)) {
- this.inRect = true;
- }
- // 设置可视区域中心点
- this.rectC.x = event.offsetX;
- this.rectC.y = event.offsetY;
- this.update();
- // 按下鼠标左键
- if (se.buttons & SMouseButton.LeftButton) {
- this._leftKeyPos.x = se.x;
- this._leftKeyPos.y = se.y;
- }
- // 将事件对象中的坐标转为场景坐标,并抛出事件
- // @ts-ignore
- const ev = this.toSceneMotionEvent(event);
- this.$emit('viewMouseMove', ev);
- }
- /**
- * 鼠标移动事件
- *
- * @param event 事件参数
- */
- protected onMouseMove(event: MouseEvent): void {
- // 按下的点如果在可视区域内,则执行移动可视区域方法
- if (this.inRect) {
- this.rectC.x = event.offsetX;
- this.rectC.y = event.offsetY;
- // @ts-ignore
- const ev = this.toSceneMotionEvent(event);
- this.$emit('viewMouseMove', ev);
- this.update();
- }
- }
- /**
- * 鼠标抬起事件
- *
- * @param event 事件参数
- */
- protected onMouseUp(event: MouseEvent): void {
- // 按键抬起时 初始化值
- this.inRect = false;
- }
- /**
- * 绘制前景
- *
- * @param painter 绘制对象
- */
- protected drawForeground(painter: SPainter): void {
- // 设置画笔,画刷样式
- painter.pen.color = new SColor('#efb42f');
- painter.pen.lineWidth = 2;
- painter.brush.color = new SColor('#efb42f38');
- // 绘制可视区域
- this.rect = new SRect(this.rectC.x - this.rectW / 2, this.rectC.y - this.rectH / 2, this.rectW, this.rectH);
- painter.drawRect(this.rect);
- }
- }
|