SelectionEndSymbol.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import {GraphicalObject} from "./GraphicalObject";
  2. import {MusicSystem} from "./MusicSystem";
  3. import {OutlineAndFillStyleEnum} from "./DrawingEnums";
  4. import {StaffLine} from "./StaffLine";
  5. import {PointF2D} from "../../Common/DataObjects/PointF2D";
  6. import {BoundingBox} from "./BoundingBox";
  7. import {GraphicalLine} from "./GraphicalLine";
  8. import {CollectionUtil} from "../../Util/CollectionUtil";
  9. export class SelectionEndSymbol extends GraphicalObject {
  10. constructor(system: MusicSystem, xPosition: number) {
  11. super();
  12. const xCoordinate: number = xPosition;
  13. const yCoordinate: number = system.PositionAndShape.AbsolutePosition.y;
  14. const lineThickness: number = 0.4;
  15. const height: number = CollectionUtil.last(system.StaffLines).PositionAndShape.RelativePosition.y + 4;
  16. this.verticalLine = new GraphicalLine(
  17. new PointF2D(xCoordinate, yCoordinate),
  18. new PointF2D(xCoordinate, yCoordinate + height),
  19. lineThickness,
  20. OutlineAndFillStyleEnum.SelectionSymbol
  21. );
  22. for (let idx: number = 0, len: number = system.StaffLines.length; idx < len; ++idx) {
  23. const staffLine: StaffLine = system.StaffLines[idx];
  24. const anchor: PointF2D = new PointF2D(xCoordinate, yCoordinate + staffLine.PositionAndShape.RelativePosition.y);
  25. const arrowPoints: PointF2D[] = new Array(3);
  26. anchor.y -= .2;
  27. arrowPoints[0].x = anchor.x - 3;
  28. arrowPoints[0].y = anchor.y + 1.2;
  29. arrowPoints[1].x = anchor.x - 2;
  30. arrowPoints[1].y = anchor.y + 0.4;
  31. arrowPoints[2].x = anchor.x - 2;
  32. arrowPoints[2].y = anchor.y + 2;
  33. this.arrows.push(arrowPoints);
  34. const linePoints: PointF2D[] = new Array(8);
  35. const arrowThickness: number = .8;
  36. anchor.x -= .1;
  37. anchor.y += .3;
  38. const hilfsVar: number = .2;
  39. linePoints[0].x = anchor.x - 2;
  40. linePoints[0].y = anchor.y + 1.5 - hilfsVar;
  41. linePoints[1].x = anchor.x - 1;
  42. linePoints[1].y = anchor.y + 1.5 - hilfsVar;
  43. linePoints[2].x = anchor.x - 1;
  44. linePoints[2].y = anchor.y + 2.5;
  45. linePoints[3].x = anchor.x - 2;
  46. linePoints[3].y = anchor.y + 2.5;
  47. linePoints[4].x = linePoints[0].x;
  48. linePoints[4].y = linePoints[0].y - arrowThickness;
  49. linePoints[5].x = linePoints[4].x + arrowThickness + 1;
  50. linePoints[5].y = linePoints[4].y;
  51. linePoints[6].x = linePoints[5].x;
  52. linePoints[6].y = linePoints[3].y + arrowThickness;
  53. linePoints[7].x = linePoints[3].x;
  54. linePoints[7].y = linePoints[6].y;
  55. this.arrowlines.push(linePoints);
  56. }
  57. this.boundingBox = new BoundingBox(this);
  58. this.boundingBox.AbsolutePosition = new PointF2D(xCoordinate, yCoordinate);
  59. this.boundingBox.BorderLeft = -lineThickness;
  60. this.boundingBox.BorderRight = 4;
  61. this.boundingBox.BorderBottom = height;
  62. }
  63. public verticalLine: GraphicalLine;
  64. public arrows: PointF2D[][];
  65. public arrowlines: PointF2D[][];
  66. }