Hi guys,

I'm trying to place control curves between notehead locations -- it seems like 
I'm getting close, but now I'm stuck.
I was able to find some code that I could adjust to my needs for the most part, 
but I'm not able to move beyond straight lines so far.

I have a couple questions about the syntax for creating new stencils:
Here is the code that I have which works now - but is just straight lines.

%-------------------
\version "2.17.13"

#(define (path-gliss 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))
            (len (interval-length Y-ext)))
        
       (ly:stencil-translate 
         (grob-interpret-markup grob
           (markup
             (#:path 0.2
               (list (list 'moveto 0 0)
                     (list 'lineto 3 -2)
                     (list 'lineto width len)))))
         (cons (interval-start X-ext) (interval-start Y-ext))))
    #f))            


\relative c' {
        \override Stem #'direction = #DOWN
        \override NoteHead #'transparent = ##t
        \override NoteHead #'no-ledgers = ##t
        \override NoteHead #'stem-attachment = #'(0 . -0.25)
        \override Glissando #'bound-details = #'((right (0 . 0) 
(end-on-accidental . #f) (padding . 0.)) (left (0 . 0) (padding . 0.)))

        \override Glissando #'stencil = #path-gliss

         c2\glissando e f\glissando g'

}
%----------------

When I try to replace the lineto, with curveto, I get an error message.  Should 
curveto work here?  For instance:

           (markup
             (#:path 0.2
               (list (list 'moveto 0 0)
                     (list 'curveto 0 0 0 0 0 0 width len))))
gives the error:
/Applications/LilyPond.app/Contents/Resources/share/lilypond/current/scm/stencil.scm:386:16:
 While evaluating arguments to line-min-max in expression (apply line-min-max 
x):
/Applications/LilyPond.app/Contents/Resources/share/lilypond/current/scm/stencil.scm:386:16:
 Wrong number of arguments to #<procedure line-min-max (x1 y1 x2 y2)>

Also, in general I'm a little unclear about how stencils are created -- I 
understand that the path-gliss function above is returning a new stencil which 
is referred to in the lilypond #'stencil = #path-gliss, however I'm not clear 
on which part of the function is creating the stencil (or is this a glyph?).  
Does the grob-interpret-markup function return a stencil by itself?

If I remove the ly:stencil-translate, or replace it with make-stencil, or 
ly:stencil-expr, I am able to compile with no errors, but no line is engraved.

So far I haven't been able to find much documentation about this -- please let 
me know if you know what's going on!

thanks,
Rama


_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to