SystemLine.ts 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {GraphicalMeasure} from "./GraphicalMeasure";
  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: GraphicalMeasure, bottomMeasure: GraphicalMeasure = 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: GraphicalMeasure;
  26. public bottomMeasure: GraphicalMeasure;
  27. /**
  28. * Return the width of the SystemLinesContainer for the given SystemLineType.
  29. * @param rules
  30. * @param systemLineType
  31. * @returns {number}
  32. */
  33. public static getObjectWidthForLineType(rules: EngravingRules, systemLineType: SystemLinesEnum): number {
  34. switch (systemLineType) {
  35. case SystemLinesEnum.SingleThin:
  36. return rules.SystemThinLineWidth;
  37. case SystemLinesEnum.DoubleThin:
  38. return rules.SystemThinLineWidth * 2 + rules.DistanceBetweenVerticalSystemLines;
  39. case SystemLinesEnum.ThinBold:
  40. return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines;
  41. case SystemLinesEnum.BoldThinDots:
  42. return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines + rules.SystemDotWidth +
  43. rules.DistanceBetweenDotAndLine;
  44. case SystemLinesEnum.DotsThinBold:
  45. return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines + rules.SystemDotWidth +
  46. rules.DistanceBetweenDotAndLine;
  47. case SystemLinesEnum.DotsBoldBoldDots:
  48. return 2 * rules.SystemBoldLineWidth + 2 * rules.SystemDotWidth + 2 * rules.DistanceBetweenDotAndLine +
  49. rules.DistanceBetweenVerticalSystemLines;
  50. default:
  51. return 0;
  52. }
  53. }
  54. }