Ver Fonte

feat(options): offer options to disable measure numbers, set their interval

Simon Schmid há 5 anos atrás
pai
commit
0d5af7a816

+ 3 - 0
demo/index.js

@@ -236,6 +236,9 @@ import { OpenSheetMusicDisplay } from '../src/OpenSheetMusicDisplay/OpenSheetMus
             setWantedStemDirectionByXml: true, // try false, which was previously the default behavior
             // drawUpToMeasureNumber: 3, // draws only up to measure 3, meaning it draws measure 1 to 3 of the piece.
 
+            //drawMeasureNumbers: false, // disable drawing measure numbers
+            //measureNumberInterval: 4, // draw measure numbers only every 4 bars (and at the beginning of a new system)
+
             // coloring options
             coloringEnabled: true,
             // defaultColorNotehead: "#CC0055", // try setting a default color. default is black (undefined)

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

@@ -201,6 +201,7 @@ export class EngravingRules {
     private renderPartNames: boolean;
     private renderPartAbbreviations: boolean;
     private renderFingerings: boolean;
+    private renderMeasureNumbers: boolean;
     private dynamicExpressionMaxDistance: number;
     private dynamicExpressionSpacer: number;
     /** Position of fingering label in relation to corresponding note (left, right supported, above, below experimental) */
@@ -419,6 +420,7 @@ export class EngravingRules {
         this.renderPartNames = true;
         this.renderPartAbbreviations = true;
         this.renderFingerings = true;
+        this.renderMeasureNumbers = true;
         this.fingeringPosition = PlacementEnum.Left; // easier to get bounding box, and safer for vertical layout
         this.fingeringInsideStafflines = false;
 
@@ -1470,6 +1472,12 @@ export class EngravingRules {
     public set RenderFingerings(value: boolean) {
         this.renderFingerings = value;
     }
+    public get RenderMeasureNumbers(): boolean {
+        return this.renderMeasureNumbers;
+    }
+    public set RenderMeasureNumbers(value: boolean) {
+        this.renderMeasureNumbers = value;
+    }
     public get FingeringPosition(): PlacementEnum {
         return this.fingeringPosition;
     }

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

@@ -736,12 +736,15 @@ export abstract class MusicSheetCalculator {
         this.calculateSkyBottomLines();
         // calculate TupletsNumbers
         this.calculateTupletNumbers();
+
         // calculate MeasureNumbers
-        for (let idx: number = 0, len: number = this.graphicalMusicSheet.MusicPages.length; idx < len; ++idx) {
-            const graphicalMusicPage: GraphicalMusicPage = this.graphicalMusicSheet.MusicPages[idx];
-            for (let idx2: number = 0, len2: number = graphicalMusicPage.MusicSystems.length; idx2 < len2; ++idx2) {
-                const musicSystem: MusicSystem = graphicalMusicPage.MusicSystems[idx2];
-                this.calculateMeasureNumberPlacement(musicSystem);
+        if (EngravingRules.Rules.RenderMeasureNumbers) {
+            for (let idx: number = 0, len: number = this.graphicalMusicSheet.MusicPages.length; idx < len; ++idx) {
+                const graphicalMusicPage: GraphicalMusicPage = this.graphicalMusicSheet.MusicPages[idx];
+                for (let idx2: number = 0, len2: number = graphicalMusicPage.MusicSystems.length; idx2 < len2; ++idx2) {
+                    const musicSystem: MusicSystem = graphicalMusicPage.MusicSystems[idx2];
+                    this.calculateMeasureNumberPlacement(musicSystem);
+                }
             }
         }
         // calculate Slurs

+ 7 - 0
src/OpenSheetMusicDisplay/OSMDOptions.ts

@@ -60,6 +60,11 @@ export interface IOSMDOptions {
     drawPartAbbreviations?: boolean;
     /** Whether to draw fingerings (only left to the note for now). Default true (unless solo part). */
     drawFingerings?: boolean;
+    /** Whether to draw measure numbers (labels) (default true).
+     * Draws a measure number label at first measure, system start measure, and every [measureNumberInterval] measures.
+     * See the [measureNumberInterval] option, default is 2.
+     */
+    drawMeasureNumbers?: boolean;
     /** Where to draw fingerings (left, right, above, below, auto).
      * Default left. Auto, above, below experimental (potential collisions because bounding box not correct)
      */
@@ -70,6 +75,8 @@ export interface IOSMDOptions {
     drawUpToMeasureNumber?: number;
     /** Only draw measure n to m, where n is the number you specify. */
     drawFromMeasureNumber?: number;
+    /** The interval of measure numbers to draw, i.e. it draws the measure number above the beginning label every x measures. Default 2. */
+    measureNumberInterval?: number;
     /** Whether to set the wanted stem direction by xml (default) or automatically. */
     setWantedStemDirectionByXml?: boolean;
     /** Whether tuplets are labeled with ratio (e.g. 5:2 instead of 5 for quintuplets). Default false. */

+ 6 - 0
src/OpenSheetMusicDisplay/OpenSheetMusicDisplay.ts

@@ -294,6 +294,12 @@ export class OpenSheetMusicDisplay {
         if (options.drawFingerings === false) {
             EngravingRules.Rules.RenderFingerings = false;
         }
+        if (options.drawMeasureNumbers !== undefined) {
+            EngravingRules.Rules.RenderMeasureNumbers = options.drawMeasureNumbers;
+        }
+        if (options.measureNumberInterval !== undefined) {
+            EngravingRules.Rules.MeasureNumberLabelOffset = options.measureNumberInterval;
+        }
         if (options.fingeringPosition !== undefined) {
             EngravingRules.Rules.FingeringPosition = AbstractExpression.PlacementEnumFromString(options.fingeringPosition);
         }