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.

Thanks, kind regards,
sb


On Fri, 27 May 2022 at 17:09, Jean Abou Samra <j...@abou-samra.fr> wrote:

> Le 27/05/2022 à 11:41, Simon Bailey a écrit :
> > Hi,
> >
> > I'm in the process of typesetting some music that includes an
> > electronic component – still working out the best way to show that in
> > the score. Clusters might work, but is there any way to change the
> > fill style, so it's not solid black? maybe dotted or hashed something?
> >
> > Thanks, kind regards,
> > sb
>
>
>
> That doesn't exist by default, but you can code it. See
> the proof of concept below. Note that this requires a version
> in the 2.23 series.
>
> Best,
> Jean
>
>
>
> \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))
>            (exts (map (lambda (c)
>                         (ly:grob-extent c y-refp Y))
>                       column-list))
>            (coords (map (lambda (c)
>                           (ly:grob-relative-coordinate c x-refp X))
>                         column-list))
>            (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
>    }
> }
>
>
> \makeClusters { <c' c''>2 <d' a'> <g' f'''> <f g''> }
>
>
>
>

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

Reply via email to