On 2020-01-25 10:39 am, David Stephen Grant wrote:
I'm trying to create a custom flag stencil, and would like to get the
current _beam_ thickness. As a first step, in the following example I
would
expect 0.5, then 1, to be printed to the console. Is there a way of
doing
this?
With a little bit of encouragement, yes:
%%%%
\version "2.19.83"
BeamThicknessToFlag_engraver = #(lambda (...)
`((acknowledgers
(flag-interface . ,(lambda (engraver grob source-engraver)
(ly:grob-set-property! grob 'beam-thickness
(ly:assoc-get 'beam-thickness
(ly:context-grob-definition
(ly:translator-context engraver)
'Beam))))))))
customFlag = #(lambda (grob)
(let ((bt (ly:grob-property grob 'beam-thickness)))
(grob-interpret-markup grob #{ \markup #(number->string bt) #})))
\new Voice
\with { \consists \BeamThicknessToFlag_engraver }
{
\override Flag.stencil = \customFlag
c'8 r8
\override Beam.beam-thickness = #0.5
c'8 r8
\override Beam.beam-thickness = #1.0
c'8 r8
\revert Beam.beam-thickness
c'8 r8
}
%%%%
I am unaware of any simpler approach, as it is my understanding that
grobs do not persist the entire context within which they were created.
Mind you, I would love to be shown that I am incorrect.
-- Aaron Hill