SystemLine.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import {StaffMeasure} from "./StaffMeasure";
  2. import {StaffLine} from "./StaffLine";
  3. import {MusicSystem} from "./MusicSystem";
  4. import {SystemLinePosition} from "./SystemLinePosition";
  5. import {SystemLinesEnum} from "./SystemLinesEnum";
  6. import {BoundingBox} from "./BoundingBox";
  7. import {GraphicalObject} from "./GraphicalObject";
  8. import {EngravingRules} from "./EngravingRules";
  9. export class SystemLine extends GraphicalObject {
  10. constructor(lineType: SystemLinesEnum, linePosition: SystemLinePosition, musicSystem: MusicSystem,
  11. topMeasure: StaffMeasure, bottomMeasure: StaffMeasure = undefined) {
  12. super();
  13. this.lineType = lineType;
  14. this.linePosition = linePosition;
  15. this.parentMusicSystem = musicSystem;
  16. this.topMeasure = topMeasure;
  17. this.bottomMeasure = bottomMeasure;
  18. this.parentTopStaffLine = topMeasure.ParentStaffLine;
  19. this.boundingBox = new BoundingBox(this, musicSystem.PositionAndShape);
  20. }
  21. public lineType: SystemLinesEnum;
  22. public linePosition: SystemLinePosition;
  23. public parentMusicSystem: MusicSystem;
  24. public parentTopStaffLine: StaffLine;
  25. public topMeasure: StaffMeasure;
  26. public bottomMeasure: StaffMeasure;
  27. public static getObjectWidthForLineType(rules: EngravingRules, systemLineType: SystemLinesEnum): number {
  28. switch (systemLineType) {
  29. case SystemLinesEnum.SingleThin:
  30. return rules.SystemThinLineWidth;
  31. case SystemLinesEnum.DoubleThin:
  32. return rules.SystemThinLineWidth * 2 + rules.DistanceBetweenVerticalSystemLines;
  33. case SystemLinesEnum.ThinBold:
  34. return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines;
  35. case SystemLinesEnum.BoldThinDots:
  36. return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines + rules.SystemDotWidth +
  37. rules.DistanceBetweenDotAndLine;
  38. case SystemLinesEnum.DotsThinBold:
  39. return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines + rules.SystemDotWidth +
  40. rules.DistanceBetweenDotAndLine;
  41. case SystemLinesEnum.DotsBoldBoldDots:
  42. return 2 * rules.SystemBoldLineWidth + 2 * rules.SystemDotWidth + 2 * rules.DistanceBetweenDotAndLine +
  43. rules.DistanceBetweenVerticalSystemLines;
  44. default:
  45. return 0;
  46. }
  47. }
  48. }