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
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.