lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Scheme: get current beam-thickness


From: Aaron Hill
Subject: Re: Scheme: get current beam-thickness
Date: Sat, 25 Jan 2020 11:30:52 -0800
User-agent: Roundcube Webmail/1.3.8

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]