Hallo,
mein Scheme rostet mit erstaunlicher Schnelligkeit immer wieder ein ;)
Ich möchte ein kammartiges Gebilde zeichnen, wobei die Höhe und Breite der Kämme variable sein soll. \scale hat den Nachteil, dass die Striche in x- und y-Richtung unterschiedlich dick werden, sonst hätte ich mir die Funktion sparen können.
Der folgende Code funktioniert, es geht doch sicherlich viel einfacher, aber wie?
#(define-markup-command (kamm layout props hoch hor)(number? number?)
(let ((hor2 (* hor 2))
(hor3 (* hor 3)))
(interpret-markup
layout
props
#{
\markup
\path #0.25 #`((moveto 0 0)
(lineto 0 ,hoch)
(lineto ,hor ,hoch)
(lineto ,hor 0)
(moveto ,hor ,hoch)
(lineto ,hor2 ,hoch)
(lineto ,hor2 0)
(moveto ,hor2 ,hoch)
(lineto ,hor3 ,hoch)
(lineto ,hor3 0))
#})))
\markup \kamm #10 #4
Hallo Manuela,
schau mal ob folgendes Deinen Wünschen nahe kommt. Zahlreiche Kommentare ;)
#(define-markup-command (kamm layout props height width)(number? number?)
#:properties ((thickness 0.25)
(amount 4) ;; wieviele Zacken sollen es werden
)
"HEIGHT ist die senkrechte Höhe des Kamms. WIDTH ist die horizontale Breite des
gesamten Kamms.
Die Anzahl der Zacken kann mit einem override für AMOUNT eingestellt werden.
Anmerkung: AMOUNT könnte natürlich auch statt eines properties als ein drittes
Argument des markup-commands programmiert werden. Umgekehrt kann man auch
überlegen HEIGHT und/oder WIDTH zu properties zu machen, kommt auf die konkrete
Anwendung an ..."
(let* (;; Abstand zwischen den Zacken
(single-width (/ width amount))
;; Der erste senkrecht Strich-stencil
(one (make-line-stencil thickness 0 0 0 height))
;; Erstelle eine Liste weiterer Zacken-stencils der Form: Ꞁ
(other
(map
(lambda (i)
(ly:stencil-translate
(make-connected-path-stencil
`((0 0) (,single-width 0) (,single-width ,(- height)))
thickness 1 1 #f #f)
(cons (* i single-width) height)))
(iota (1- amount)))))
;; Füge die stencils zusammen:
(apply ly:stencil-add one other)))
\markup
\column {
\kamm #5 #4
\kamm #2 #4
\kamm #2 #8
\override #'(thickness . 0.1) \kamm #2 #8
\override #'(amount . 20) \override #'(thickness . 0.1) \kamm #2 #8
}
HTH,
Harm
Danke Harm, so ist es viel eleganter.