From: Jan Nieuwenhuizen Date: Mon, 20 Dec 2004 21:01:48 +0000 (+0000) Subject: (beam): Use polygon. X-Git-Tag: release/2.5.14~373 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=4ebb61bb6f16135ecbe329c5acb2f88969981a91;p=lilypond.git (beam): Use polygon. --- diff --git a/ChangeLog b/ChangeLog index 2681a2a912..94bc01e9ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2004-12-20 Jan Nieuwenhuizen + * scm/output-svg.scm (beam): Use polygon. + * scm/lily-library.scm: Bugfix. * Documentation/user/invoking.itely (Invoking lilypond): Bugfix. diff --git a/scm/output-svg.scm b/scm/output-svg.scm index 96dbfd1aa2..0a97774c20 100644 --- a/scm/output-svg.scm +++ b/scm/output-svg.scm @@ -1,13 +1,12 @@ ;;;; output-svg.scm -- implement Scheme output routines for SVG1 ;;;; ;;;; source file of the GNU LilyPond music typesetter -;;;; +;;;; ;;;; (c) 2002--2004 Jan Nieuwenhuizen ;;;; http://www.w3.org/TR/SVG11 ;;;; TODO: -;;;; * check: blot+scaling ;;;; * inkscape page/pageSet support ;;;; * inkscape SVG-font support ;;;; - use fontconfig/fc-cache for now, see output-gnome.scm @@ -42,7 +41,7 @@ (display (string-append "undefined: " (symbol->string keyword) "\n")) "")))))) - + ;; Helper functions (define-public (attributes attributes-alist) (apply string-append @@ -92,10 +91,10 @@ (define (integer->entity integer) (format #f "&#x~x;" integer)) - + (define (char->entity char) (integer->entity (char->integer char))) - + (define (string->entities string) (apply string-append (map (lambda (x) (char->entity x)) (string->list string)))) @@ -141,10 +140,10 @@ (ly:all-stencil-expressions) (ly:all-output-backend-commands))) -(define (beam width slope thick blot-diameter) +(define (rect-beam width slope thick blot-diameter) (let* ((x width) (y (* slope width)) - (z (sqrt (+ (sqr x) (sqr y))))) + (z (/ y x))) (entity 'rect "" ;; The stroke will stick out. To use stroke, ;; the stroke-width must be subtracted from all other dimensions. @@ -156,15 +155,54 @@ `(x . 0) `(y . ,(- (/ thick 2))) - `(width . ,(+ width (* slope blot-diameter))) - `(height . ,thick) + `(width . ,width) + `(height . ,(+ thick (* (abs z) (/ thick 2)))) `(rx . ,(/ blot-diameter 2)) `(transform . ,(string-append - (format #f "matrix (~f, ~f, 0, 1, 0, 0)" - (/ x z) (* -1 (/ y z))) + (format #f "matrix (1, ~f, 0, 1, 0, 0)" (- z)) (format #f " scale (~f, ~f)" output-scale output-scale)))))) +(define (beam width slope thick blot-diameter) + (let* ((b blot-diameter) + (t (- thick b)) + (w (- width b)) + (h (* w slope))) + (entity 'polygon "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(stroke-width . ,blot-diameter) + '(stroke . "black") + '(fill . "black") + `(points . ,(string-join + (map offset->point + (list (cons (/ b 2) (/ t 2)) + (cons (+ w (/ b 2)) (+ h (/ t 2))) + (cons (+ w (/ b 2)) (+ h (- (/ t 2)))) + (cons (/ b 2) (- (/ t 2))))))) + `(transform + . ,(format #f "scale (~f, -~f)" output-scale output-scale))))) + +(define (path-beam width slope thick blot-diameter) + (let* ((b blot-diameter) + (t (- thick b)) + (w (- width b)) + (h (* w slope))) + (entity 'path "" + '(stroke-linejoin . "round") + '(stroke-linecap . "round") + `(stroke-width . ,blot-diameter) + '(stroke . "black") + '(fill . "black") + `(d . ,(format #f "M ~S,~S l ~S,~S l ~S,~S l ~S,~S l ~S,~S" + (/ b 2) (/ t 2) + w (- h) + 0 (- t) + (- w) h + 0 t)) + `(transform + . ,(format #f "scale (~f, ~f)" output-scale output-scale))))) + (define (bezier-sandwich lst thick) (let* ((first (list-tail lst 4)) (first-c0 (car (list-tail first 3))) @@ -227,7 +265,7 @@ (- (* output-scale y)))))) (define (polygon coords blot-diameter) - (entity 'polygon "" + (entity 'polygon "" '(stroke-linejoin . "round") '(stroke-linecap . "round") `(stroke-width . ,blot-diameter) @@ -250,10 +288,11 @@ `(x . ,(- breapth)) `(y . ,(- height)) + ;;`(y . ,(* 4 (- height))) `(width . ,(+ breapth width)) `(height . ,(+ depth height)) + ;;`(height . ,(* 4 (+ depth height))) `(ry . ,(/ blot-diameter 2)) - ;;`(transform . ,(scale)))) `(transform . ,(format #f "scale (~f, ~f)" output-scale output-scale))))