Thanks David -- This is great, I can almost start with the score now.

I was (am still a bit) unclear about how the grob gets passed to the callback 
function.

interesting that the grob is still available within the callback without 
passing it -- I had thought that the stencil assignment was passing the grob to 
the callback function with the first argument.  But now if I understand 
correctly, I think the stencil callback function is called within the grob 
parent, and automatically has access to the grob?

Rama



On Mar 10, 2013, at 8:50 PM, David Nalesnik wrote:

> Hi Rama,
> 
> On Sun, Mar 10, 2013 at 8:33 PM, Rama Gottfried <[email protected]> 
> wrote:
> Hi guys,
> 
> I'm making progress, but now am stuck and wondering if you have any advice or 
> see anything I'm doing wrong here (code below).
> 
> What I would like to be able to do is specify the handle coordinates for the 
> curve for each glissando.
> The problem I'm having is that it seems that all glissandos are using the 
> last value for the arc.
> 
> To try to fix the problem I added a call within the stencil callback function 
> to get the current value of arc, but this isn't working.
> 
> Any ideas?
> 
> The problem here is the use of a top-level variable for the handle 
> coordinates.  You could fix this by adding an argument to your stencil 
> function.  I just took a quick look, but I think this will get you on the 
> right track:
> 
> \version "2.17.13"
> 
> glissWidth = #0.2 %<< global variable for glissando width
> 
> #(define (path-gliss handle)
>   (lambda (grob)
>     (if (ly:stencil? (ly:line-spanner::print grob))
>       (let* ((stencil (ly:line-spanner::print grob))
>              (X-ext (ly:stencil-extent stencil X))
>              (Y-ext (ly:stencil-extent stencil Y))
>              (width (interval-length X-ext))
>              (height (interval-length Y-ext))
>              (lefty (cdr (assoc 'Y (ly:grob-property grob 'left-bound-info))))
>              (righty (cdr (assoc 'Y (ly:grob-property grob 
> 'right-bound-info))))
>              (deltay (- righty lefty))
>              (dir (if (> deltay 0) 1 -1)))
> 
>          (ly:stencil-translate
>            (grob-interpret-markup grob
>              (markup
>                    ;(#: tiny (format "~a" (ly:grob-properties grob)))
>                            ;(format "~a" (cdr (assoc 'Y (ly:grob-property 
> grob 'left-bound-info))))
>                            ;(#: tiny (format "~a" handle))
>                (#:path glissWidth
>                  (list (list 'moveto 0 0)
>                        (list 'curveto 0 0 (first handle) (second handle) 
> width (* height dir))))))
>            (if (> dir 0)
>                   (cons (interval-start X-ext) (+ (interval-start Y-ext) 0.1))
>                   (cons (interval-start X-ext) (+ (interval-start Y-ext) 
> height)))))
>         #f)))
> 
> 
> #(define (add-gliss m)
>    (case (ly:music-property m 'name)
>      ((NoteEvent) (set! (ly:music-property m 'articulations)
>                       (append (ly:music-property m 'articulations)
>                          (list (make-music (quote GlissandoEvent)))))
>                    m)
>      (else #f)))
> 
> addGliss = #(define-music-function (parser location music)
>                  (ly:music?)
>            (map-some-music add-gliss music))
> 
> \new Staff \with {
>         \remove "Time_signature_engraver"
>         \remove "Clef_engraver"
>         \omit Staff.BarLine
>          \override SpacingSpanner
>                 #'base-shortest-duration = #(ly:make-moment 1 32)
> 
>         \override StaffSymbol #'line-count = #1
>         \override Stem #'direction = #UP
>         \override NoteHead #'transparent = ##t
>         \override NoteHead #'no-ledgers = ##t
>         \override NoteHead #'stem-attachment = #'(0 . 0)
>         \override Glissando #'bound-details = #'((right (attach-dir . 0) 
> (end-on-accidental . #f) (padding . 0.)) (left (attach-dir . 0) (padding . 
> 0.)))
> }
> \relative b' {
>         \addGliss {
>                 \once \override Glissando #'stencil = #(path-gliss '(2 4))
>                 c8
>                 \once \override Glissando #'stencil = #(path-gliss '(3 -4))
>                 d
>                \once \override Glissando #'stencil = #(path-gliss '(2 4))
>                 a
>                 b }
>                 f
>          \addGliss{
>                 d'16
>                 a
>                 c2 }
>                 b32
> }
> 
> 
> HTH,
> David

_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to