EagleView.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { SGraphView } from "@persagy-web/graph";
  2. import { SMouseButton, SMouseEvent } from "@persagy-web/base/";
  3. import { SPoint, SColor, SPainter, SRect } from "@persagy-web/draw/lib";
  4. export class EagleView extends SGraphView {
  5. // 记录左键按下位置
  6. private _leftKeyPos: SPoint = new SPoint();
  7. // 可视区域即 大图中展示的区域 在 标准视图中的位置及大小
  8. // 可视区域宽度
  9. _rectW: number = 200;
  10. get rectW(): number {
  11. return this._rectW;
  12. }
  13. set rectW(v: number) {
  14. this._rectW = v;
  15. this.update()
  16. }
  17. // 可视区域高度
  18. _rectH: number = 100;
  19. get rectH(): number {
  20. return this._rectH;
  21. }
  22. set rectH(v: number) {
  23. this._rectH = v;
  24. this.update()
  25. }
  26. // 可视区域中心点
  27. rectC: SPoint = new SPoint(100, 100);
  28. // 可视区域描述的矩形
  29. rect: SRect = new SRect();
  30. // 鼠标按下的点是否在区域内
  31. inRect: boolean = false;
  32. /**
  33. * 鼠标按下事件
  34. *
  35. * @param event 事件参数
  36. */
  37. protected onMouseDown(event: MouseEvent): void {
  38. let se = new SMouseEvent(event);
  39. // 判断是否在可视区域内
  40. if (this.rect.contains(event.offsetX, event.offsetY)) {
  41. this.inRect = true;
  42. }
  43. // 设置可视区域中心点
  44. this.rectC.x = event.offsetX;
  45. this.rectC.y = event.offsetY;
  46. this.update();
  47. // 按下鼠标左键
  48. if (se.buttons & SMouseButton.LeftButton) {
  49. this._leftKeyPos.x = se.x;
  50. this._leftKeyPos.y = se.y;
  51. }
  52. // 将事件对象中的坐标转为场景坐标,并抛出事件
  53. // @ts-ignore
  54. const ev = this.toSceneMotionEvent(event);
  55. this.$emit('viewMouseMove', ev);
  56. }
  57. /**
  58. * 鼠标移动事件
  59. *
  60. * @param event 事件参数
  61. */
  62. protected onMouseMove(event: MouseEvent): void {
  63. // 按下的点如果在可视区域内,则执行移动可视区域方法
  64. if (this.inRect) {
  65. this.rectC.x = event.offsetX;
  66. this.rectC.y = event.offsetY;
  67. // @ts-ignore
  68. const ev = this.toSceneMotionEvent(event);
  69. this.$emit('viewMouseMove', ev);
  70. this.update();
  71. }
  72. }
  73. /**
  74. * 鼠标抬起事件
  75. *
  76. * @param event 事件参数
  77. */
  78. protected onMouseUp(event: MouseEvent): void {
  79. // 按键抬起时 初始化值
  80. this.inRect = false;
  81. }
  82. /**
  83. * 绘制前景
  84. *
  85. * @param painter 绘制对象
  86. */
  87. protected drawForeground(painter: SPainter): void {
  88. // 设置画笔,画刷样式
  89. painter.pen.color = new SColor('#efb42f');
  90. painter.pen.lineWidth = 2;
  91. painter.brush.color = new SColor('#efb42f38');
  92. // 绘制可视区域
  93. this.rect = new SRect(this.rectC.x - this.rectW / 2, this.rectC.y - this.rectH / 2, this.rectW, this.rectH);
  94. painter.drawRect(this.rect);
  95. }
  96. }