浏览代码

feat(Options): add option to draw measure numbers only at the start of a system (line)

mpat #59
sschmid 4 年之前
父节点
当前提交
ca9b88ee7d

+ 8 - 0
src/MusicalScore/Graphical/EngravingRules.ts

@@ -228,6 +228,7 @@ export class EngravingRules {
     private renderPartAbbreviations: boolean;
     private renderFingerings: boolean;
     private renderMeasureNumbers: boolean;
+    private renderMeasureNumbersOnlyAtSystemStart: boolean;
     private renderLyrics: boolean;
     private renderMultipleRestMeasures: boolean;
     private renderTimeSignatures: boolean;
@@ -488,6 +489,7 @@ export class EngravingRules {
         this.renderPartAbbreviations = true;
         this.renderFingerings = true;
         this.renderMeasureNumbers = true;
+        this.renderMeasureNumbersOnlyAtSystemStart = false;
         this.renderLyrics = true;
         this.renderMultipleRestMeasures = true;
         this.renderTimeSignatures = true;
@@ -1708,6 +1710,12 @@ export class EngravingRules {
     public set RenderMeasureNumbers(value: boolean) {
         this.renderMeasureNumbers = value;
     }
+    public get RenderMeasureNumbersOnlyAtSystemStart(): boolean {
+        return this.renderMeasureNumbersOnlyAtSystemStart;
+    }
+    public set RenderMeasureNumbersOnlyAtSystemStart(value: boolean) {
+        this.renderMeasureNumbersOnlyAtSystemStart = value;
+    }
     public get RenderLyrics(): boolean {
         return this.renderLyrics;
     }

+ 5 - 1
src/MusicalScore/Graphical/MusicSheetCalculator.ts

@@ -345,7 +345,11 @@ export abstract class MusicSheetCalculator {
         const staffLine: StaffLine = musicSystem.StaffLines[0];
         let previousLabelMeasureNumber: number = staffLine.Measures[0].MeasureNumber;
         let labelOffsetX: number = 0;
-        for (const measure of staffLine.Measures) {
+        for (let i: number = 0; i < staffLine.Measures.length; i++) {
+            if (this.rules.RenderMeasureNumbersOnlyAtSystemStart && i > 0) {
+                return; // no more measures number labels need to be rendered for this system, so we can just return instead of continue.
+            }
+            const measure: GraphicalMeasure = staffLine.Measures[i];
             if (measure.MeasureNumber === 0 || measure.MeasureNumber === 1) {
                 previousLabelMeasureNumber = measure.MeasureNumber;
                 // for the first measure, this label still needs to be created. Afterwards, this variable will hold the previous label's measure number.

+ 2 - 0
src/OpenSheetMusicDisplay/OSMDOptions.ts

@@ -86,6 +86,8 @@ export interface IOSMDOptions {
      * See the [measureNumberInterval] option, default is 2.
      */
     drawMeasureNumbers?: boolean;
+    /** Whether to only draw measure numbers at the start of a system ("new line"), instead of every [measureNumberInterval] measures. Default false. */
+    drawMeasureNumbersOnlyAtSystemStart?: boolean;
     /** Whether to draw time signatures (e.g. 4/4). Default true. */
     drawTimeSignatures?: boolean;
     /** The interval of measure numbers to draw, i.e. it draws the measure number above the beginning label every x measures. Default 2. */

+ 3 - 0
src/OpenSheetMusicDisplay/OpenSheetMusicDisplay.ts

@@ -431,6 +431,9 @@ export class OpenSheetMusicDisplay {
         if (options.drawMeasureNumbers !== undefined) {
             this.rules.RenderMeasureNumbers = options.drawMeasureNumbers;
         }
+        if (options.drawMeasureNumbersOnlyAtSystemStart) {
+            this.rules.RenderMeasureNumbersOnlyAtSystemStart = options.drawMeasureNumbersOnlyAtSystemStart;
+        }
         if (options.drawLyrics !== undefined) {
             this.rules.RenderLyrics = options.drawLyrics;
         }