소스 검색

fix skyline: fix crash when GraphicalUnknownExpression involved (#768)

sschmid 5 년 전
부모
커밋
5b3887b1ec
2개의 변경된 파일16개의 추가작업 그리고 1개의 파일을 삭제
  1. 14 0
      src/MusicalScore/Graphical/VexFlow/AlignmentManager.ts
  2. 2 1
      src/MusicalScore/Graphical/VexFlow/VexFlowMusicSheetCalculator.ts

+ 14 - 0
src/MusicalScore/Graphical/VexFlow/AlignmentManager.ts

@@ -23,6 +23,20 @@ export class AlignmentManager {
             const currentExpression: AbstractGraphicalExpression = this.parentStaffline.AbstractExpressions[aeIdx];
             const nextExpression: AbstractGraphicalExpression = this.parentStaffline.AbstractExpressions[aeIdx + 1];
 
+            if (currentExpression?.SourceExpression === undefined ||
+                nextExpression?.SourceExpression === undefined) {
+                continue;
+                // TODO: this doesn't work yet for GraphicalUnknownExpression, because it doesn't have an AbstractExpression,
+                //   so it doesn't have a .Placement.
+                //   this lead to if (currentExpression.Placement...) crashing.
+
+                // same result:
+                // if (currentExpression instanceof GraphicalUnknownExpression ||
+                //     nextExpression instanceof GraphicalUnknownExpression) {
+                //         continue;
+                // }
+            }
+
             // TODO this shifts dynamics in An die Ferne Geliebte, showing that there's something wrong with the RelativePositions etc with wedges
             // if (currentExpression instanceof GraphicalContinuousDynamicExpression) {
             //     currentExpression.calcPsi();

+ 2 - 1
src/MusicalScore/Graphical/VexFlow/VexFlowMusicSheetCalculator.ts

@@ -47,7 +47,8 @@ import { VexFlowContinuousDynamicExpression } from "./VexFlowContinuousDynamicEx
 import { InstantaneousTempoExpression } from "../../VoiceData/Expressions";
 import { AlignRestOption } from "../../../OpenSheetMusicDisplay";
 import { VexFlowStaffLine } from "./VexFlowStaffLine";
-import { EngravingRules } from "..";
+import { EngravingRules } from "../EngravingRules";
+import { AlignmentManager } from "./AlignmentManager";
 import { VexflowStafflineNoteCalculator } from "./VexflowStafflineNoteCalculator";
 
 export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {