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.