On Sun, Apr 23, 2017 at 6:15 PM, Thomas Morley <thomasmorle...@gmail.com> wrote: > 2017-04-23 12:34 GMT+02:00 Andrew Bernard <andrew.bern...@gmail.com>: > >> Next thing to do is to achieve the half dashed/half solid appearance - or >> can this be done already, in the same way that slurs can? > > How about:
This is great! > > #(define (solid-dashed-print-proc grob startx starty endx endy) > (let* ((dash-def (ly:grob-property grob 'dash-definition)) > (thick > (* (layout-line-thickness grob) > (ly:grob-property grob 'thickness 0.1)))) > (if (null? dash-def) > (ly:line-interface::line grob startx starty endx endy) > (apply ly:stencil-add empty-stencil Why not reduce instead of apply? Tiny point, but then you won't have the extra empty stencil in the stencil expression. > (map > (lambda (dash-def-elt) > (let* ((start-x > (+ startx (* (- endx startx) (first dash-def-elt)))) > (start-y > (+ starty (* (- endy starty) (first dash-def-elt)))) > (end-x > (+ startx (* (- endx startx) (second dash-def-elt)))) > (end-y > (+ starty (* (- endy starty) (second dash-def-elt))))) > (ly:stencil-translate > (ly:make-stencil > (list 'dashed-line > ;; thickness > thick > ;; on > (third dash-def-elt) > ;; off > (- 1 (fourth dash-def-elt)) ;; calculation correct? > ;; x-dest > (- end-x start-x) > ;; y-dest > (- end-y start-y) > ;; phase > 0) > ;; x-ext > (cons start-x (- end-x start-x)) > ;; y-ext > (ordered-cons 0 (- end-y start-y))) > (cons start-x start-y)))) > dash-def))))) > > #(define ((open-hairpin open-gap close-gap) grob) > (let* ((stencil (ly:hairpin::print grob)) > (thick (layout-line-thickness grob)) > (dir (ly:grob-property grob 'grow-direction)) > (X-ext (ly:stencil-extent stencil X)) > (Y-ext (ly:stencil-extent stencil Y)) > (width (- (interval-length X-ext) thick)) > (height (- (interval-length Y-ext) thick)) > (scaled-height (* height (max open-gap close-gap))) > (scaled-gap (* height (min open-gap close-gap))) > (upper-stil-part > (solid-dashed-print-proc > grob > 0 > (/ (if (= dir -1) scaled-height scaled-gap) 2) > width > (/ (if (= dir -1) scaled-gap scaled-height) 2)))) > (ly:stencil-translate > (ly:stencil-add > upper-stil-part > (ly:stencil-scale upper-stil-part 1 -1)) > (cons (interval-start X-ext) (interval-start Y-ext))))) > > { > c'1\> c'1 c'1\! > \once \override Hairpin.dash-definition = > #'((0 0.3 0 0.4) > (0.3 0.7 1 1) > (0.7 1.0 0.4 0.75)) > %% order of arguments for 'open-hairpin' doesn't matter! > \override Hairpin.stencil = #(open-hairpin 0.2 1.0) > c'1\fff\> c'1 c'2 c'2\pppp\! > \once \override Hairpin.dash-definition = > #'((0 0.3 0 0.4) > (0.3 0.45 1 1) > (0.7 1.0 0.4 0.3)) > \once \override Hairpin.thickness = 2 > c'1\< c'1 c'1\! > \revert Hairpin.dash-definition > \override Hairpin.style = #'dashed-line > \once \override Hairpin.stencil = #(open-hairpin 1.0 0.5) > c'1\> c'1 c'1\! > \override Hairpin.dash-fraction = 0.3 > \override Hairpin.dash-period = 1.5 > \once \override Hairpin.stencil = #(open-hairpin 0.5 0.0) > c'1-\tweak thickness 3 \> c'1 c'1\! > } > > HTH, > Harm _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user