[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Accessing a grob from within a music function
From: |
David Nalesnik |
Subject: |
Re: Accessing a grob from within a music function |
Date: |
Thu, 16 Mar 2017 08:40:48 -0500 |
Hi Urs,
On Thu, Mar 16, 2017 at 8:23 AM, Urs Liska <address@hidden> wrote:
> Hi,
>
> I'm trying to write a function to push a note column like this:
>
> pushLeftBroken =
> #(define-music-function ()()
> #{
> \once \override NoteColumn.X-offset = 3
> #})
>
> But I need to make that "3" depend on some characteristics of the actual
> note column. Basically I need the width of the note column, including
> attached accidentals.
>
> I know how to get to the accidental(s) within a note column, but if I'm
> not mistaken there's no actual grob inside that.
>
> Probably music-function isn't the right approach?
>
> What I need is a way to say something like
>
> \once \override NoteColumn.X-offset = #(+ 3
> extent-of-all-accidentals-in-the-note-column)
>
In the majority of cases you can follow a trail of pointers. From the
NoteColumn, you can get noteheads or AccidentalPlacement, from
noteheads you can get to accidentals.
\version "2.19.56"
{
\override NoteColumn.X-offset =
#(lambda (nc)
(let ((notes (ly:grob-array->list (ly:grob-object nc 'note-heads))))
(pretty-print (grob::all-objects nc))
(pretty-print (grob::all-objects (car notes)))))
<cis'' dis'' fis'' gis''>1
}
I presume that travelling up the chain of parentage -- to a
PaperColumn -- would get you more grobs ('elements object property).
-David
Re: Accessing a grob from within a music function, Thomas Morley, 2017/03/16