Hi Jean,

sweet, that does the trick perfectly! Thanks for your help.

Kind regards,
sb

On Fri, 27 May 2022 at 20:31, Jean Abou Samra <[email protected]> wrote:

> Le 27/05/2022 à 20:57, Simon Bailey a écrit :
> > Jean,
> >
> > That's absolutely amazing, thanks so much!
> >
> > However, unlike the "regular" clusters, it doesn't extend to the
> > barlines, leaving some empty holes. See attached screenshots. (I'm
> > running 2.23.9 on Windows).
> >
> > I can provide a MWE of my score if you'd like.
>
>
>
> Aye. I was lazy and thought you wouldn't need that :-)
>
> Next try:
>
>
> \version "2.23.9"
>
> #(use-modules (ice-9 match))
>
> #(define (cluster::dashed-fill grob)
>     (let* ((columns (ly:grob-object grob 'columns))
>            (column-list (ly:grob-array->list columns))
>            (x-refp (ly:grob-common-refpoint-of-array grob columns X))
>            (y-refp (ly:grob-common-refpoint-of-array grob columns Y))
>            (my-exts (map (lambda (c)
>                           (ly:grob-extent c y-refp Y))
>                         column-list))
>            (my-coords (map (lambda (c)
>                             (ly:grob-relative-coordinate c x-refp X))
>                           column-list))
>            (after-me (find-tail (lambda (s)
>                                   (eq? s grob))
>                                 (ly:spanner-broken-into
> (ly:grob-original grob))))
>            (neighbor (and after-me
>                           (pair? (cdr after-me))
>                           (cadr after-me)))
>            (exts (if neighbor
>                      (append my-exts
>                              (let* ((neighbor-cols (ly:grob-object
> neighbor 'columns))
>                                     (first-neighbor-col (car
> (ly:grob-array->list neighbor-cols)))
>                                     (neighbor-refp
> (ly:grob-common-refpoint-of-array neighbor neighbor-cols Y)))
>                                (list (ly:grob-extent first-neighbor-col
> neighbor-refp Y))))
>                      my-exts))
>            (coords (if neighbor
>                        (append my-coords
>                                (let ((bound (ly:spanner-bound grob RIGHT)))
>                                  (list (ly:grob-relative-coordinate
> bound x-refp X))))
>                        my-coords))
>            (details (ly:grob-property grob 'details))
>            (increment (assq-ref details 'increment))
>            (contour-thickness (assq-ref details 'contour-thickness))
>            (polygon-points-1 (map cons coords (map car exts)))
>            (polygon-points-2 (map cons coords (map cdr exts)))
>            (polygon-stencil
>             (ly:round-polygon (append-reverse polygon-points-1
> polygon-points-2)
>                               contour-thickness
>                               1
>                               #f)))
>       (let loop ((exts exts)
>                  (coords coords)
>                  (current (car coords))
>                  (stil empty-stencil))
>         (if (null? (cdr coords))
>             (ly:stencil-translate
>              (ly:stencil-add stil polygon-stencil)
>              (cons (- (ly:grob-relative-coordinate grob x-refp X))
>                    (- (ly:grob-relative-coordinate grob y-refp Y))))
>             (let* ((t (/ (- current (car coords))
>                          (- (cadr coords)
>                             (car coords))))
>                    (1-t (- 1 t))
>                    (ext1 (car exts))
>                    (ext2 (cadr exts))
>                    (lo (+ (* 1-t (car ext1))
>                           (* t (car ext2))))
>                    (hi (+ (* 1-t (cdr ext1))
>                           (* t (cdr ext2))))
>                    (part (ly:line-interface::line grob current lo
> current hi))
>                    (new-stil (ly:stencil-add stil part))
>                    (next (+ current increment))
>                    (stay (<= next (cadr coords))))
>               (loop (if stay exts (cdr exts))
>                     (if stay coords (cdr coords))
>                     next
>                     new-stil))))))
>
> \layout {
>    \context {
>      \Voice
>      \override ClusterSpanner.stencil = #cluster::dashed-fill
>      \override ClusterSpanner.style = #'dashed-line
>      \override ClusterSpanner.thickness = 1.5
>      \override ClusterSpanner.dash-period = 0.6
>      \override ClusterSpanner.details.increment = 0.45
>      \override ClusterSpanner.details.contour-thickness = 0.2
>    }
> }
>
> %%%
>
> \paper {
>    ragged-right = ##t
> }
>
> \makeClusters {
>    <c' c''>2 <d' a'> <g' f'''> <f g''>
>    <c' c''>2 <d' a'> \break <g' f'''> <f g''>
> }
>
>
>
> Best,
> Jean
>
>

-- 
Do not meddle in the affairs of trombonists, for they are subtle and quick
to anger.

Reply via email to