Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scoring up implementation as functor #3800

Draft
wants to merge 96 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 60 commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
c98e2ed
Add header and source for scoringup functor and call them in doc
martha-thomae Aug 14, 2024
0464368
Test ScoringUpDoc with debug messages
martha-thomae Aug 16, 2024
d409a55
Add again the private variables for mensur
martha-thomae Aug 16, 2024
f141c9a
Test adding durquality values
martha-thomae Aug 16, 2024
2114a56
Get a vector of data_DURATION objects for a layer
martha-thomae Aug 21, 2024
97cf79d
Change to a method
martha-thomae Aug 27, 2024
7a0a61a
Clean extra lines of code
martha-thomae Aug 27, 2024
0ab0bfb
Move variable and method declaration to cpp
martha-thomae Aug 27, 2024
db58bff
Divide dursInVoiceSameMensur into subsequences
martha-thomae Aug 27, 2024
f49a9d1
Obtain xml:ids for notes and rests
martha-thomae Aug 27, 2024
ff44446
Use vectors of pairs of ids and durs
martha-thomae Aug 27, 2024
ed144a9
Correct subsequences to start and end with 'long notes'
martha-thomae Aug 27, 2024
6d7e57a
Pass seq and subse to overloaded function to determine the durquality.
martha-thomae Aug 27, 2024
8053f40
Add methods for imperfection and alteration
martha-thomae Aug 30, 2024
8892095
Add all the principles of imperfection and alteration (including thei…
martha-thomae Aug 30, 2024
c4c39ed
Start sketch of imperfection and alteration functions
martha-thomae Aug 30, 2024
75c6bb7
Add comment: missing 'rest at' conditions to forbid imperfection/alte…
martha-thomae Aug 30, 2024
b5fcc9d
Comment lines out for the program to keep working
martha-thomae Aug 30, 2024
2d2b3fa
Try to solve the issue of getting the notes/rests by ID to set the du…
martha-thomae Aug 30, 2024
593ae25
Add changes for alteration
martha-thomae Aug 30, 2024
758fa11
Trying to fix the pointers to the notes
martha-thomae Aug 31, 2024
6621587
Use maps of ids to notes/rests and fix pointer issue
martha-thomae Aug 31, 2024
64e1cfe
Add imperfection a.p.a. code
martha-thomae Sep 2, 2024
d0e1c7e
Add 'rest' condition that forbids alteration
martha-thomae Sep 2, 2024
ad2868a
Add 'short note value' condition to forbid alteration
martha-thomae Sep 2, 2024
9138d98
Finish documentating flags that forbid alteration
martha-thomae Sep 2, 2024
eab73c0
Remove comment
martha-thomae Sep 2, 2024
c789e82
Remove unnecessary comments and debug statements
martha-thomae Sep 2, 2024
7a49570
Change implementation to use references to elements
martha-thomae Sep 2, 2024
87c1aa0
Refine documentation and note values for the principles of imp and alt
martha-thomae Sep 2, 2024
bc34284
Refine comments and conditions for the principles of imp. and alt.
martha-thomae Sep 2, 2024
34d660f
get default values from mensuration
martha-thomae Sep 2, 2024
b84d383
Fix: only consider middle notes of the sequence
martha-thomae Sep 2, 2024
6fd9316
Save mensuration values
martha-thomae Sep 2, 2024
249c0d5
Add the exception case for sum = 3
martha-thomae Sep 3, 2024
035746e
Add 'dot of perfection' condition within the evaluation of imperfecti…
martha-thomae Sep 3, 2024
6182cc6
Remove the dotOfPerf flag
martha-thomae Sep 3, 2024
734a5f5
Add 'form=div' for dot of perfection
martha-thomae Sep 3, 2024
d950a87
Change formatting according to coding guidelines
martha-thomae Sep 6, 2024
94db5ea
Adjust to coding guidelines, move methods and attributes to header file
martha-thomae Sep 6, 2024
d9f4574
Add comments for meethods
martha-thomae Sep 6, 2024
e03bf0d
Comment code to try to get mensuration values from staffDef
martha-thomae Sep 6, 2024
fbc48bc
Add support for the voice starting in a small note value
martha-thomae Sep 6, 2024
f0c29ff
Add another exception for imp.app
martha-thomae Sep 6, 2024
30544fc
Add support for dots of augmentation
martha-thomae Sep 7, 2024
26d218f
Add the correct quality to the dotted notes
martha-thomae Sep 7, 2024
32e0c16
Exchange conditions to check for dots first
martha-thomae Sep 9, 2024
bf54e3f
Add progress towardsimplementation of dots of division
martha-thomae Sep 9, 2024
c5e3887
Store the array of dots positions in middleSeq
martha-thomae Sep 9, 2024
3cce967
Merge branch 'rism-digital:develop' into scoringup_branch
martha-thomae Sep 20, 2024
40a1ac1
Merge branch 'rism-digital:develop' into scoringup_branch
martha-thomae Sep 25, 2024
fccc32f
Reformat
martha-thomae Sep 25, 2024
6f91e0f
Reformat
martha-thomae Sep 25, 2024
9c053d8
Merge branch 'rism-digital:develop' into scoringup_branch
martha-thomae Oct 2, 2024
722c233
Add blank lines in header file
martha-thomae Oct 2, 2024
bb92458
Add typedef for ArrayOfElementDurPairs
martha-thomae Oct 2, 2024
22e491d
Remove initialization
martha-thomae Oct 2, 2024
6834c9a
Change vectors to be read-only parameters in functions
martha-thomae Oct 2, 2024
ff5dbd6
Add 'm_' to all member variables
martha-thomae Oct 2, 2024
3a74f03
Separate functionalities for modifications
martha-thomae Oct 3, 2024
422a372
Rename variables
martha-thomae Oct 12, 2024
596f8f1
Fix pair parameter in GetNumberValue to avoid copying the sequence an…
martha-thomae Oct 12, 2024
d90b059
Reformat code
martha-thomae Oct 12, 2024
8abab6e
Regroup code into smaller functions and deal with dots of perf
martha-thomae Oct 12, 2024
6f7ce99
Rearraging code into smaller functions
martha-thomae Oct 12, 2024
d8f6917
Reformat
martha-thomae Oct 12, 2024
7616ee1
Minor changes
martha-thomae Oct 12, 2024
0d15646
Fix support for dot of division (when only on dot in sequence)
martha-thomae Oct 12, 2024
c78c42f
Add 'form = div'
martha-thomae Oct 13, 2024
0246a33
Reformat
martha-thomae Oct 13, 2024
126ee36
Move the dot of division evaluation into a function
martha-thomae Oct 13, 2024
41319ca
Add case numberOfDots > 1
martha-thomae Oct 13, 2024
2bb11a3
Merge branch 'rism-digital:develop' into scoringup_branch
martha-thomae Oct 14, 2024
09d8f02
Merge branch 'rism-digital:develop' into scoringup_branch
martha-thomae Oct 16, 2024
e3d9e0c
Update ImplementsEndInterface
martha-thomae Oct 17, 2024
be9553c
Make variables private
martha-thomae Oct 17, 2024
4f3a424
Reformatting
martha-thomae Oct 17, 2024
47314b5
Change to use int members
martha-thomae Oct 17, 2024
585804a
Add 'this->' for method calls
martha-thomae Oct 17, 2024
c19e554
Add a bit of documentation and reorder functions
martha-thomae Oct 19, 2024
ecdc262
Fix typo
martha-thomae Oct 19, 2024
b8a08bc
Add support for perfect and imperfect mensur in GetValueInUnit
martha-thomae Oct 19, 2024
380c405
Add support to subdivide the sequences by different bounding units (s…
martha-thomae Oct 19, 2024
afac0a8
Reformat
martha-thomae Oct 19, 2024
803c9fb
Call SubdivideIntoBoundedSequences for all four note levels depending…
martha-thomae Oct 19, 2024
4f91a6a
Add support for getting the BoundedNotes for different perfect mensur…
martha-thomae Oct 19, 2024
3837c00
Add new method to avoid repetition
martha-thomae Oct 19, 2024
ebbdcf9
Clean the method and avoid repetition
martha-thomae Oct 19, 2024
ce06d28
Add boundUnit to modification-related functions and fix GetValueInUni…
martha-thomae Oct 19, 2024
506f949
Separate calculating the value of perfect notes from encoding their q…
martha-thomae Oct 20, 2024
7cf2803
Reformatting
martha-thomae Oct 20, 2024
70b75de
Fix alteration case for multiple perfect mensurations when there is a…
martha-thomae Oct 20, 2024
4c99873
Merge pull request #1 from martha-thomae/upperMensLevels
martha-thomae Oct 20, 2024
55fc195
Merge branch 'rism-digital:develop' into scoringup_branch
martha-thomae Oct 20, 2024
d845675
Merge branch 'rism-digital:develop' into scoringup_branch
martha-thomae Oct 22, 2024
1da089f
Add private variable initialization in the constructor
martha-thomae Oct 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Verovio.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1060,6 +1060,11 @@
8F7DD0551EAF3682001B072A /* fb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F7DD0531EAF3682001B072A /* fb.cpp */; };
8F7DD0561EAF3682001B072A /* fb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F7DD0531EAF3682001B072A /* fb.cpp */; };
8F7DD0571EAF3682001B072A /* fb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F7DD0531EAF3682001B072A /* fb.cpp */; };
B464F48F2C6D664300A778D2 /* scoringupfunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B464F48E2C6D664300A778D2 /* scoringupfunctor.cpp */; };
B464F4902C6D664300A778D2 /* scoringupfunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B464F48E2C6D664300A778D2 /* scoringupfunctor.cpp */; };
B464F4912C6D664300A778D2 /* scoringupfunctor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B464F48E2C6D664300A778D2 /* scoringupfunctor.cpp */; };
B464F4932C6D665300A778D2 /* scoringupfunctor.h in Headers */ = {isa = PBXBuildFile; fileRef = B464F4922C6D665300A778D2 /* scoringupfunctor.h */; };
B464F4942C6D665300A778D2 /* scoringupfunctor.h in Headers */ = {isa = PBXBuildFile; fileRef = B464F4922C6D665300A778D2 /* scoringupfunctor.h */; };
BB4C4A5A22A9318B001F6AF0 /* humlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40CA06581E351161009CFDD7 /* humlib.cpp */; };
BB4C4A5B22A9318E001F6AF0 /* humlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 40CA064C1E351125009CFDD7 /* humlib.h */; settings = {ATTRIBUTES = (Public, ); }; };
BB4C4A8822A93225001F6AF0 /* c_wrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DD11DC22240E78B00A405D8 /* c_wrapper.cpp */; };
Expand Down Expand Up @@ -2206,6 +2211,8 @@
8F59293218854BF800FE51AD /* vrv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vrv.h; path = include/vrv/vrv.h; sourceTree = "<group>"; };
8F59293318854BF800FE51AD /* vrvdef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vrvdef.h; path = include/vrv/vrvdef.h; sourceTree = "<group>"; };
8F7DD0531EAF3682001B072A /* fb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fb.cpp; path = src/fb.cpp; sourceTree = "<group>"; };
B464F48E2C6D664300A778D2 /* scoringupfunctor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scoringupfunctor.cpp; path = src/scoringupfunctor.cpp; sourceTree = "<group>"; };
B464F4922C6D665300A778D2 /* scoringupfunctor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = scoringupfunctor.h; path = include/vrv/scoringupfunctor.h; sourceTree = "<group>"; };
BB4C4A5222A930A3001F6AF0 /* VerovioFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VerovioFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BB4C4A5522A930A3001F6AF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = bindings/iOS/Info.plist; sourceTree = SOURCE_ROOT; };
BB4C4BCA22A941F9001F6AF0 /* data */ = {isa = PBXFileReference; lastKnownFileType = folder; path = data; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -3078,6 +3085,8 @@
E765675628BBF9CD00BC6490 /* functors */ = {
isa = PBXGroup;
children = (
B464F4922C6D665300A778D2 /* scoringupfunctor.h */,
B464F48E2C6D664300A778D2 /* scoringupfunctor.cpp */,
E786CD09298AA3BC009BAC58 /* horizontal-layout */,
E786CD0A298AA3D8009BAC58 /* vertical-layout */,
E7908EA12985829F0004C1F9 /* alignfunctor.cpp */,
Expand Down Expand Up @@ -3288,6 +3297,7 @@
8F59294218854BF800FE51AD /* iopae.h in Headers */,
8F59294318854BF800FE51AD /* keysig.h in Headers */,
403B0514244F3E4D00EE4F71 /* gliss.h in Headers */,
B464F4932C6D665300A778D2 /* scoringupfunctor.h in Headers */,
E741ACFF299A3D3400854426 /* calcslurdirectionfunctor.h in Headers */,
4DEF8A6221B7AACC0093A76B /* f.h in Headers */,
4DACC9DE2990F29A00B55913 /* atts_performance.h in Headers */,
Expand Down Expand Up @@ -3616,6 +3626,7 @@
BB4C4ACA22A932B6001F6AF0 /* pages.h in Headers */,
BB4C4ACC22A932B6001F6AF0 /* pb.h in Headers */,
BB4C4B1222A932C8001F6AF0 /* expansion.h in Headers */,
B464F4942C6D665300A778D2 /* scoringupfunctor.h in Headers */,
BB4C4AC822A932B6001F6AF0 /* page.h in Headers */,
4DACC9952990F29A00B55913 /* atts_neumes.h in Headers */,
4DACC9CF2990F29A00B55913 /* atts_mei.h in Headers */,
Expand Down Expand Up @@ -4246,6 +4257,7 @@
4DB3D89E1F7E7FAA00B5FC2B /* fig.cpp in Sources */,
4D1AC9772B6A9BB200434023 /* filereader.cpp in Sources */,
4D4FCD121F54570E0009C455 /* staffdef.cpp in Sources */,
B464F48F2C6D664300A778D2 /* scoringupfunctor.cpp in Sources */,
8F086EE2188539540037FD8E /* verticalaligner.cpp in Sources */,
4DEC4D9621C81E3B00D1D273 /* expan.cpp in Sources */,
4D508C3026D4E64C00020F35 /* crc.cpp in Sources */,
Expand Down Expand Up @@ -4711,6 +4723,7 @@
4D6413802035F68600BB630E /* mdiv.cpp in Sources */,
4D766F0320ACAD6E006875D8 /* neume.cpp in Sources */,
4DACC9C22990F29A00B55913 /* atts_cmn.cpp in Sources */,
B464F4902C6D664300A778D2 /* scoringupfunctor.cpp in Sources */,
4D94722120CA702C00C780C8 /* linkinginterface.cpp in Sources */,
4DACCA152990F2E600B55913 /* att.cpp in Sources */,
4DB3D8EB1F83D18000B5FC2B /* proport.cpp in Sources */,
Expand Down Expand Up @@ -5001,6 +5014,7 @@
4DACC9C32990F29A00B55913 /* atts_cmn.cpp in Sources */,
BB4C4AEB22A932BC001F6AF0 /* editorial.cpp in Sources */,
BB4C4B8F22A932DF001F6AF0 /* text.cpp in Sources */,
B464F4912C6D664300A778D2 /* scoringupfunctor.cpp in Sources */,
4DACCA162990F2E600B55913 /* att.cpp in Sources */,
BB4C4ADF22A932BC001F6AF0 /* annot.cpp in Sources */,
E79ADDCA26BD645B00527E4B /* runtimeclock.cpp in Sources */,
Expand Down
5 changes: 5 additions & 0 deletions include/vrv/doc.h
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,11 @@ class Doc : public Object {
*/
void ConvertMarkupDoc(bool permanent = true);

/**
* Calls the scoringUpFunctor and applies it.
*/
void ScoringUpDoc();

/**
* Sync the coordinate provided trought <facsimile> to m_drawingFacsX/Y.
* Call the SyncToFacsimile functor.
Expand Down
102 changes: 102 additions & 0 deletions include/vrv/scoringupfunctor.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/////////////////////////////////////////////////////////////////////////////
// Name: scoringupfunctor.h
// Author: Martha E. M. Thomae Elias
// Created: 2024
// Copyright (c) Authors and others. All rights reserved.
/////////////////////////////////////////////////////////////////////////////
///
#ifndef __VRV_SCORINGUPFUNCTOR_H__
#define __VRV_SCORINGUPFUNCTOR_H__

#include "functor.h"

namespace vrv {

//----------------------------------------------------------------------------
// ScoringUpFunctor
//----------------------------------------------------------------------------

/**
* This class...
*/
class ScoringUpFunctor : public Functor {
public:
/**
* @name Constructors, destructors
*/
///@{
ScoringUpFunctor();
virtual ~ScoringUpFunctor() = default;
///@}

/*
* Abstract base implementation
*/
bool ImplementsEndInterface() const override { return true; }
martha-thomae marked this conversation as resolved.
Show resolved Hide resolved

/*
* Methods
*/
/**
* @name: Divide the notes of a voice into sequences to be processed individualy
*/
///@{
std::vector<ArrayOfElementDurPairs> SubdivideSeq(const ArrayOfElementDurPairs &dursInVoiceSameMensur);
///@}

/**
martha-thomae marked this conversation as resolved.
Show resolved Hide resolved
* @name: Find @dur.quality of notes (perfecta / imperfecta / altera)
*/
///@{
void FindDurQuals(const std::vector<ArrayOfElementDurPairs> &listOfSequences);
void FindDurQuals(const ArrayOfElementDurPairs &sequence);
///@}

/**
* @name: Find the duration value of the note in minims
*/
///@{
double GetDurNumberValue(
std::pair<LayerElement *, data_DURATION> elementDurPair, bool followedByDot, LayerElement *nextElement);
///@}

/**
* @name Apply principles of imperfection and alteration
*/
///@{
Note *ImperfectionAPP(const ArrayOfElementDurPairs &sequence);
Note *ImperfectionAPA(const ArrayOfElementDurPairs &sequence);
Note *Alteration(const ArrayOfElementDurPairs &sequence);
bool LeavePerfect(const ArrayOfElementDurPairs &sequence);
///@}

/*
* Functor interface
*/
///@{
FunctorCode VisitLayer(Layer *layer) override;
FunctorCode VisitLayerElement(LayerElement *layerElement) override;
///@}
///

protected:
//
private:
//
public:
std::map<std::string, int> m_mensuration;
martha-thomae marked this conversation as resolved.
Show resolved Hide resolved
ArrayOfElementDurPairs m_dursInVoiceSameMensur;
std::vector<ArrayOfElementDurPairs> m_listOfSequences;

private:
// The current score time in the measure (incremented by each element)
double m_currentScoreTime;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure where you use this but you might want to change to Fraction introduced here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, I am going to use this for adding the barlines automatically. Once the implementation of the scoring up is complete and correct, I will do the automatic barring stuff.

// The current Mensur
Mensur *m_currentMensur;
// The current notation type
data_NOTATIONTYPE m_notationType;
};

} // namespace vrv

#endif /* scoringupfunctor_h */
2 changes: 2 additions & 0 deletions include/vrv/vrvdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,8 @@ typedef std::vector<std::pair<LayerElement *, LayerElement *>> MeasureTieEndpoin

typedef bool (*NotePredicate)(const Note *);

typedef std::vector<std::pair<LayerElement *, data_DURATION>> ArrayOfElementDurPairs;

/**
* Generic int map recursive structure for storing hierachy of values
* For example, we want to process all staves one by one, and within each staff
Expand Down
7 changes: 7 additions & 0 deletions src/doc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
#include "resetfunctor.h"
#include "runningelement.h"
#include "score.h"
#include "scoringupfunctor.h"
#include "setscoredeffunctor.h"
#include "slur.h"
#include "smufl.h"
Expand Down Expand Up @@ -1396,6 +1397,12 @@ void Doc::ConvertMarkupDoc(bool permanent)
}
}

void Doc::ScoringUpDoc()
{
ScoringUpFunctor scoringUp;
this->Process(scoringUp);
}

void Doc::SyncFromFacsimileDoc()
{
PrepareFacsimileFunctor prepareFacsimile(this->GetFacsimile());
Expand Down
1 change: 1 addition & 0 deletions src/iomei.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4059,6 +4059,7 @@ bool MEIInput::ReadDoc(pugi::xml_node root)
if (success) {
m_doc->ConvertToPageBasedDoc();
m_doc->ConvertMarkupDoc(!m_doc->GetOptions()->m_preserveAnalyticalMarkup.GetValue());
m_doc->ScoringUpDoc();
}

if (success && !m_hasScoreDef) {
Expand Down
2 changes: 1 addition & 1 deletion src/layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ Mensur *Layer::GetCurrentMensur()
const Mensur *Layer::GetCurrentMensur() const
{
const Staff *staff = vrv_cast<const Staff *>(this->GetFirstAncestor(STAFF));
assert(staff && staff->m_drawingStaffDef);
// assert(staff && staff->m_drawingStaffDef);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am curious about this... ;-) This is normally used in drawing code, so it is not available at the stage you are doing the scoring up. We can see if you can set the values before you call the scoring up, but how can this work when removing the assert?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't exactly remember what happened. I get this message on the console when running the program:

Assertion failed: (staff && staff->m_drawingStaffDef), function GetCurrentMensur, file layer.cpp, line 529.

The message didn't go away and allow me to run things until I commented that line out. That was a long time ago, so I was still learning a bit about what I was doing. I would appreciate some feedback if you know what is causing this issue. Thanks!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will look once I have a test file

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you! I just provided some test files below :)

return staff->m_drawingStaffDef->GetCurrentMensur();
}

Expand Down
Loading
Loading