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''> }