Schneidy wrote > Now I understand - font size changes won’t affect this code as it is not >> drawing from the font. But I am not sure what code will scale the >> noteheads. Do I need a separate stencil for different sizes? That’s not >> so >> bad, as I only want to differentiate normal notes and grace notes. >> > > Yes, I think you'll have to scale note heads for graces' (e.g. \scale > #'(.8 > . .8) \sOne) > Does it help? > Cheers, > Pierre
For another example of how to scale such custom stencils, especially with the font size, but also to create a smaller grace note version, see: http://lsr.di.unimi.it/LSR/Item?id=623 Especially this part: scaleCustomClefStencilTwo = #(lambda (grob) (let* ((sz (ly:grob-property grob 'font-size 0.0)) (mult (magstep sz))) (set! (ly:grob-property grob 'stencil) (ly:stencil-scale customClefStencilTwo mult mult)))) This snippet shows a different way to make a path stencil with: #(ly:make-stencil `(path this is a low level way and it requires you to specify the X and Y extents of the stencil. See a higher level method here: Using make-connected-path-stencil to draw custom shapes http://lsr.di.unimi.it/LSR/Item?id=891 Which calculates the X and Y extents for you, but the path has to be connected. In 2.19 there is an improved version "make-path-stencil" where the path doesn't need to be connected. There's not a snippet for it yet because it's not in 2.18. As far as I know this method provides the most flexibility and least constraints. Here are some examples (the use of \markup here is just for convenient demonstration): %%%%%%%%%%%%%%%%% \version "2.19" { c'1^\markup \stencil #(make-path-stencil ;; path, accepts both "rmoveto" and "m", "curveto" and "C", etc. '(rmoveto -1 1 rcurveto 0 0.75 1 0.75 1 0 rcurveto 0 -0.75 -1 -0.75 -1 0 rcurveto -1 0 -1 1.5 -0.5 1.5 rmoveto 0.5 -1.5 c -1 0 -1 -1.5 -0.5 -1.5 m 1.5 1.5 c 2.5 0 2.5 4 4 4 m -4 -4 c 2.5 0 2.5 -4 4 -4) ;; line thickness 0.2 ;; x and y scaling factors 1 1 ;; filled? #f) c'1^\markup \stencil #(make-path-stencil `(rmoveto 0 0 rlineto 2 0 rlineto 0 -2 rlineto -2 0 closepath rmoveto 1.1 -1.1 rlineto 2 0 rlineto 0 -2 rlineto -2 0 closepath rmoveto 1.1 -1.1 rlineto 2 0 rlineto 0 -2 rlineto -2 0 closepath) 0.2 1 1 #f) c'1^\markup \stencil #(make-path-stencil '(moveto 6 0 curveto 0 -2 0 7 6 5 curveto 3 5 3 0 6 0) 0.2 0.5 0.5 #f) c'1^\markup \stencil #(make-path-stencil `(L 0 0 L 1 2 L 2 0 Z M 1 3 L 1 0) 0.2 1 1 #f) c'1^\markup \stencil #(make-path-stencil `(l 1 2 L 2 0 z) 0.2 1 2 #t) } %%%%%%%%%%%%%%% And then there's the \path markup command method that Pierre used. This one requires that you have access to a grob so you can do grob-interpret-markup (which is not required by the other methods). I think that covers it! -Paul -- View this message in context: http://lilypond.1069038.n5.nabble.com/Custom-noteheads-stem-alignment-tp174412p174461.html Sent from the User mailing list archive at Nabble.com. _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user