# Quintenzirkel/2

Zur Navigation springen Zur Suche springen
```#(define (st-rot stencil myangle)
;; just for shortening the code
(ly:stencil-rotate stencil myangle 0 0))

#(define (x-width mystencil)
(let* ((x-ext (ly:stencil-extent mystencil X)))
(- (cdr x-ext) (car x-ext))))

#(define (y-width mystencil)
(let* ((y-ext (ly:stencil-extent mystencil Y)))
(- (cdr y-ext) (car y-ext))))

#(define (bogen winkel)
(* ( / winkel 180) PI))

#(define (kreis-punkt radius winkel)
;; this function returns the coordinates of a point on a circumference
;; as pair depending on radius and angle
;; like a clock: start at midnight ;-)
;; winkel = angle (in degrees)
;; '(x . y)
(let* ((wiboma (bogen winkel)) ;; calculate angle as radian measure
(x-sin (sin wiboma))
(y-cos (cos wiboma))
(x-cor (* x-sin radius))
(y-cor (* y-cos radius)))
(cons x-cor y-cor)))

#(define (mittel-punkt stencil)
;; returns the coordinates of the middle of the stencil als pair
;; '( x-middle . y-middle)
(let*
((x-li (car (ly:stencil-extent stencil X)))
(x-re (cdr (ly:stencil-extent stencil X)))
(y-li (car (ly:stencil-extent stencil Y)))
(y-re (cdr (ly:stencil-extent stencil Y))))
(cons (/ (+ x-li x-re) 2) (/ (+ y-li y-re) 2))))

#(define (move-to-circle radius winkel stencil)
;; move a stencil to the edge of a cirle
;; depending on radius and angle
;; the arithmetic middle of the stenil coordinates is the reference point
;; which is moved with its `mittel-punkt' to `kreis-punkt'
(let* ((mittel (mittel-punkt stencil))
(mittel-x (car mittel))
(mittel-y (cdr mittel))
(kreis (kreis-punkt radius winkel))
(kreis-x (car kreis))
(kreis-y (cdr kreis)))
(ly:stencil-translate stencil
(cons
(- kreis-x mittel-x)
(- kreis-y mittel-y)))))

#(define-markup-command (move-markup layout props mymark radius winkel)
(markup? number? number?)
(move-to-circle radius winkel (interpret-markup layout props mymark)))

#(define (move-to-circle-x radius winkel stencil delta)
;; move stencil down (at six)
;; winkel=0:  left aligned
;; winkel<>0: right aligned
;; just for Fis/Ges Dur needed
;; two scales at six
(let* ((mittel (mittel-punkt stencil))
(mittel-x (car mittel))
(mittel-y (cdr mittel))
(kreis (kreis-punkt radius winkel))
(kreis-x (car kreis))
(kreis-y (cdr kreis)))
(if (= winkel 0)
(ly:stencil-translate stencil
(cons
(+ (* -2 mittel-x) delta)
(ly:stencil-translate stencil
(cons
delta

#(define-markup-command (move-markup-x layout props mymark radius winkel delta)
(markup? number? number? number?)
(move-to-circle-x radius winkel (interpret-markup layout props mymark) delta))

#(define-markup-command (move-and-scale layout props mymark faktor x-offset)
(markup? number? number?)
(ly:stencil-translate
(ly:stencil-scale
(interpret-markup layout props mymark)
faktor faktor)
(cons x-offset 0))
)

#(define QC-radius 30) %% inner radius of the cirle
#(define Abstand 1.45)  %% try what looks best
#(define ticker-len 1.07)