lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Oval stencil and oval markup suggestions


From: Pierre Perol-Schneider
Subject: Re: Oval stencil and oval markup suggestions
Date: Fri, 5 Apr 2019 08:55:16 +0200

Hi Harm,
Not getting a perfect circle is no issue. What I found not neet is that:

\markup {
  \combine
  \stencil #(make-oval-stencil 3 2 .13 #f)
  \stencil #(make-oval-stencil 2 3 .13 #f)
}

have no axis of symmetry.
Cheers,
Pierre


Le jeu. 4 avr. 2019 à 22:03, Thomas Morley <address@hidden> a
écrit :

> Am Do., 4. Apr. 2019 um 17:34 Uhr schrieb Pierre Perol-Schneider
> <address@hidden>:
> >
> > Hi Dev Team,
> > Here's some thougts:
> >
> > %%%%%%
> > \version "2.19.83"
> >
> > %% The oval stencil commands uses beziers curves that cause some side
> > effects:
> > \markuplist {
> >   \line\vcenter {
> >     "Circle, radius = 2 : "
> >     \stencil #(make-circle-stencil 2 .13 #f)
> >   }
> >   \line\vcenter {
> >     "Oval, x-radius = y-radius = 2 : "
> >     \stencil #(make-oval-stencil 2 2 .13 #f)
> >   }
> >   \line\vcenter {
> >     "Oval extents, x-radius = y-radius = 2 : "
> >     \box\stencil #(make-oval-stencil 2 2 .13 #f)
> >   }
> > }
> >
> > %% Here's a suggestion with a corrected y-radius in order to reach a
> quasi
> > circle:
> [...]
>
> Hi Pierre,
>
> current `make-oval-stencil´, used via `oval-stencil´ in the
> `oval´-markup-command uses beziers, yes.
> Though, you will never get a perfect circle using beziers. I don't
> understand why you see this as an issue.
> Maybe the naming x-radius/y-radius is misleading, because x-radius
> mirrors the final x-extent, but y-radius the y-extent of the
> control-points, not of the final oval.
> Ofcourse this has impact an the final dimensions, which you
> demonstrated by applying \box.
> If we think this is a problem I'd rather suggest to do:
>
> #(define-public (make-oval-stencil-harm x-radius y-radius thickness fill)
>   "Make an oval from two Bezier curves, of address@hidden @var{x-radius},
> address@hidden @code{y-radius}, and thickness @var{thickness} with fill
> defined by @code{fill}."
>   (let*
>       ((x-out-radius (+ x-radius (/ thickness 2.0)))
>        (y-out-radius (+ y-radius (/ thickness 2.0)))
>        (x-max x-radius)
>        (x-min (- x-radius))
>        (y-max y-radius)
>        (y-min (- y-radius))
>        (commands `(,(list 'moveto x-max 0)
>                    ,(list 'curveto x-max y-max x-min y-max x-min 0)
>                    ,(list 'curveto x-min y-min x-max y-min x-max 0)
>                    ,(list 'closepath)))
>        (command-list (fold-right append '() commands)))
>     ;(ly:make-stencil
>     ; `(path ,thickness `(,@',command-list) 'round 'round ,fill)
>     ; (cons (- x-out-radius) x-out-radius)
>     ; (cons (- y-out-radius) y-out-radius))
>     (make-path-stencil
>       command-list
>       thickness 1 1 fill)))
>
> Cheers,
>   Harm
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]