Thomas Morley <thomasmorle...@gmail.com> writes: > Am Sa., 25. Jan. 2020 um 20:31 Uhr schrieb Aaron Hill > <lilyp...@hillvisions.com>: >> >> 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 >> } >> %%%% > > Hi Aaron, > > I stand corrected, it is possible. > Alas, going for a custom-engraver feels overdone, if not really > needed. Thus I asked about the final goal. > > Even at the risk being regarded as a nitpicker and also being aware we > have similar codings (wrt to juggling grob-properties) in our docs, > the code will return several programming errors if compiled with > -dcheck-internal-types.
I have some incomplete work in branches that would significantly speed up property accesses but would not support undeclared properties. Not that we have a good interface for adding them yet... > To cure, one could add: > #(ly:add-interface > 'flag-interface > "A flag" > '(beam-thickness)) -- David Kastrup