X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fbeam.scm;h=d20458eb5364b5b6bd1b5a82268490b2e764ab37;hb=82fe2552ab4b520ffcf8b769a669dcd5f919e9b0;hp=efcc28835eafde51a5fd3543f14590bc9e55e91b;hpb=764c49729f95f421d9d6cc8eee5386706039a2c7;p=lilypond.git diff --git a/scm/beam.scm b/scm/beam.scm index efcc28835e..d20458eb53 100644 --- a/scm/beam.scm +++ b/scm/beam.scm @@ -3,116 +3,59 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; (c) 2000--2001 Jan Nieuwenhuizen +;;;; (c) 2000--2004 Jan Nieuwenhuizen ;;;; -(define (default-beam-space-function multiplicity) - (if (<= multiplicity 3) 0.816 0.844) - ) - ;; ;; width in staff space. ;; -(define (default-beam-flag-width-function type) +(define (beam-flag-width-function type) (cond ((eq? type 1) 1.98) ((eq? type 1) 1.65) ;; FIXME: check what this should be and why - (else 1.32) - )) - - -;; This is a mess : global namespace pollution. We should wait -;; till guile has proper toplevel environment support. - - -;; Beams should be prevented to conflict with the stafflines, -;; especially at small slopes -;; ---------------------------------------------------------- -;; ######## -;; ######## -;; ######## -;; --------------########------------------------------------ -;; ######## -;; -;; hang straddle sit inter hang - -;; inter seems to be a modern quirk, we don't use that - -;; two popular veritcal beam quantings -;; see params.ly: #'beam-vertical-quants - - -(define (default-beam-pos-quants beam multiplicity dy staff-line) - (let* ((beam-straddle 0) - (thick (ly-get-grob-property beam 'thickness)) - (beam-sit (/ (- thick staff-line) 2)) - (beam-hang (- 1 (/ (- thick staff-line) 2))) - (quants (list beam-hang)) - ) - - (if (or (<= multiplicity 1) (>= (abs dy) (/ staff-line 2))) - (set! quants (cons beam-sit quants))) - (if (or (<= multiplicity 2) (>= (abs dy) (/ staff-line 2))) - (set! quants (cons beam-straddle quants))) - ;; period: 1 (staff-space) - (append quants (list (+ 1 (car quants)))))) - -(define (beam-traditional-pos-quants beam multiplicity dy staff-line) - (let* ((beam-straddle 0) - (thick (ly-get-grob-property beam 'thickness)) - (beam-sit (/ (- thick staff-line) 2)) - (beam-hang (- 1 (/ (- thick staff-line) 2))) - (quants '()) - ) - (if (>= dy (/ staff-line -2)) - (set! quants (cons beam-hang quants))) - (if (and (<= multiplicity 1) (<= dy (/ staff-line 2))) - (set! quants (cons beam-sit quants))) - (if (or (<= multiplicity 2) (>= (abs dy) (/ staff-line 2))) - (set! quants (cons beam-straddle quants))) - ;; period: 1 (staff-space) - (append quants (list (+ 1 (car quants)))))) - + (else 1.32))) ;; There are several ways to calculate the direction of a beam ;; ;; * majority: number count of up or down notes ;; * mean : mean centre distance of all notes ;; * median : mean centre distance weighted per note +;; +;; [Ross] states that the majority of the notes dictates the +;; direction (and not the mean of "center distance") +;; +;; But is that because it really looks better, or because he wants +;; to provide some real simple hands-on rules? +;; +;; We have our doubts, so we simply provide all sensible alternatives. + + +;; +; +; DOCME: what goes into this func, what comes out. (define (dir-compare up down) (sign (- up down))) ;; arguments are in the form (up . down) -(define (beam-dir-majority count total) +(define-public (beam-dir-majority count total) (dir-compare (car count) (cdr count))) -(beam-dir-majority '(0 . 0) '(0 . 0)) +(define-public (beam-dir-majority-median count total) + "First try majority. If that doesn't work, try median." + (let ((maj (dir-compare (car count) (cdr count)))) + (if (not (= maj 0)) + maj + (beam-dir-median count total)) + )) + -(define (beam-dir-mean count total) +(define-public (beam-dir-mean count total) (dir-compare (car total) (cdr total))) -(define (beam-dir-median count total) +(define-public (beam-dir-median count total) (if (and (> (car count) 0) (> (cdr count) 0)) (dir-compare (/ (car total) (car count)) (/ (cdr total) (cdr count))) (dir-compare (car count) (cdr count)))) - - -;; [Ross] states that the majority of the notes dictates the -;; direction (and not the mean of "center distance") -;; -;; But is that because it really looks better, or because he wants -;; to provide some real simple hands-on rules? -;; -;; We have our doubts, so we simply provide all sensible alternatives. - -;; array index multiplicity, last if index>size -;; beamed stems - - -;; TODO -;; - take #forced stems into account (now done in C++)? -;; - take staff-position of chord or beam into account -