This is a follow-up to my recent post about SysStaff:distanceUp/Down().
The relevant parts of that email thread are all below.
I am now doing the following to get each staff's height (I was already
collecting the visibleStaves vector, now I'm using it to solve this
requirement too):
/EXISTING //CODE TO COLLECT VISIBLE STAVES/
QVector<int> visibleStaves;
visibleStaves.resize(score->nstaves());
int nVisible = 0;
for (int i = 0; i < score->nstaves(); i++)
visibleStaves[i] = score->staff(i)->invisible() ? -1 : nVisible++;
/NEW //CODE TO GET STAFF TOP AND HEIGHT/
const System* s = page->systems().value(0);
const qreal top = s->staff(idxStaff)->y();
const int idxVisible = (*pVisibleStaves)[idxStaff];
qreal bot = -1;
if (idxVisible < nVisible - 1) {
for (int i = idxStaff + 1; i < pVisibleStaves->size(); i++) {
if ((*pVisibleStaves)[i] > 0) {
bot = s->staff(i)->y();
break;
}
}
}
if (bot < 0)
bot = page->height() - page->bm();
height = bot - top; It's SVG and the y-axis values increment
top-to-bottom. The new code is inside a separate sub-routine, outside
the scope of the visibleStaves declaration, so it has a pointer to
visibleStaves.
It seems to be working well so far, though it's more complex than I
would like. And using page->height() as the bottom of the last visible
staff is not a real solution, it's simply something that poses no issues
with for my specific SVG scores that use this code. Otherwise,
determining the bottom-most visible staff's height does not seem
straightforward. It would be nice to have a truly general-purpose
solution to the question: *What is the full height of the bottom-most
visible staff on a page?
*
Is there a straightforward way in the current master to answer that?
--
Sideways
On 4/22/2016 3:07 AM, Werner Schweer wrote:
_distanceUp and _distanceDown are gone and will not
come back. The staff distance is now calculated in
System->layout2()
and the system distance in Score->collectPage()
which calls layoutPage().
The distance between systems can be determined by
looking at system->pos().y().
SysStaff->_distanceUp/Down was used to collect
information from layouting elements like fret
symbols etc. which might increase
the staff distance. This is replaced by a more
generic algorithm which uses the Shape of staves to
determine the minimum distance without
any collision.
Am 21.04.2016 um 20:43 schrieb Sideways Skullfinger:
I submitted this question to the list 5 days ago,
and there has been no response, so I wanted to try
again. Is there a replacement for
SysStaff::distanceUp() and distanceDown() in the
latest master code?
Thanks,
Sideways
On 4/16/2016 12:29 PM, Sideways Skullfinger wrote:
2.0.3 source code here:
https://github.com/musescore/MuseScore/blob/2.0.3/libmscore/system.h#L48
The 2.0.3 class SysStaff looks like this:
class SysStaff {
QRectF _bbox; ///< Bbox of StaffLines.
qreal _yOff; ///< offset of top staff line
within bbox
qreal _distanceUp; ///< distance to previous staff
qreal _distanceDown; ///< distance to next staff
bool _show; ///< derived from Staff or false
if empty
...
The current master has removed these variables
and commented-out lines where the public
properties for these variables are called,
sometimes with a "TODO" in the comment.
I use SysStaff::distanceDown() and
SysStaff::distanceUp() in my code, and now I have
no substitute for it. What is the plan here? How
should I be determining the distance between staves?
I posted this same thing on the musescore forums
here: https://musescore.org/en/node/106501
Thanks,
Sideways
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Mscore-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mscore-developer