lilypond-user
[Top][All Lists]
Advanced

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

Re: programming error for thickness/control-points of Slur


From: Thomas Morley
Subject: Re: programming error for thickness/control-points of Slur
Date: Fri, 27 May 2022 13:24:44 +0200

Am Fr., 27. Mai 2022 um 12:05 Uhr schrieb Jean Abou Samra <jean@abou-samra.fr>:
>
>
>
> Le 27/05/2022 à 11:54, Thomas Morley a écrit :
> > Thanks Jean!
> > After further thinking and testing I'll not reset the 'control-points:
> > It would trash a user-tweak for \shape and ua ser-override for \shape
> > returns a more serious ERROR:
> >
> > #(define (variable-bow-thickness-harm min-l max-l min-t max-t)
> >    (lambda (grob)
> >        (let* ((cpt (ly:grob-property grob 'control-points))
> >               (cp0 (car cpt))
> >               (cp3 (cadddr cpt))
> >               (dx (- (car cp3) (car cp0)))
> >               (dy (- (cdr cp3) (cdr cp0)))
> >               (len (magnitude (make-rectangular dx dy)))
> >               (thickness
> >                 (cond ((< len min-l) min-t)
> >                       ((> len max-l) max-t)
> >                       (else
> >                         (+ min-t
> >                           (* (- len min-l)
> >                              (/ (- max-t min-t)
> >                                 (- max-l min-l))))))))
> >          (ly:grob-set-property! grob 'thickness thickness)
> >          ;; DELETE-ME:
> >          (ly:grob-set-property! grob 'control-points
> >            ((assoc-get 'control-points (ly:grob-basic-properties grob)) 
> > grob))
> >            )))
> >
> > {
> >    \override Slur.after-line-breaking = #(variable-bow-thickness-harm 1 2 1 
> > 33)
> >
> >    %% \shape as override errors, if overruled by the 'thickness-override
> >    \shape #'((10 . 0) (0 . 0) (0 . 0) (0 . 0) ) Slur
> >    b1( b')
> >
> >    %% \shape as tweak works, if not overruled by the 'thickness-override
> >    %b1-\shape #'((10 . 0) (0 . 0) (0 . 0) (0 . 0)) ( b')
> > }
> >
> > =>
> > ERROR: Wrong type to apply: #<unpure-pure-container #<procedure
> > 560c1a58a580 at ice-9/eval.scm:333:13 (a)> #<procedure 560c1a58a560 at
> > ice-9/eval.scm:386:13 (a . rest)> >
>
>
> \shape puts an unpure-pure container in the result of
> ly:grob-basic-properties, you can't call that as if it
> were a function. Rather:
>
>
> \version "2.23.9"
>
> #(define (variable-bow-thickness-harm min-l max-l min-t max-t)
>    (lambda (grob)
>      (let* ((cpt-computer
>              (ly:grob-property-data grob 'control-points))
>             (cpt (ly:grob-property grob 'control-points))
>             (cp0 (car cpt))
>             (cp3 (cadddr cpt))
>             (dx (- (car cp3) (car cp0)))
>             (dy (- (cdr cp3) (cdr cp0)))
>             (len (magnitude (make-rectangular dx dy)))
>             (thickness
>               (cond ((< len min-l) min-t)
>                     ((> len max-l) max-t)
>                     (else
>                       (+ min-t
>                         (* (- len min-l)
>                            (/ (- max-t min-t)
>                               (- max-l min-l))))))))
>        (ly:grob-set-property! grob 'thickness thickness)
>        (ly:grob-set-property! grob 'control-points (ly:unpure-call
> cpt-computer grob)))))
>
> {
>    \override Slur.after-line-breaking = #(variable-bow-thickness-harm 1
> 2 1 33)
>
>    b1( b')
>
>    \shape #'((10 . 0) (0 . 0) (0 . 0) (0 . 0) ) Slur
>    b1( b')
>
>    b1-\shape #'((10 . 0) (0 . 0) (0 . 0) (0 . 0)) ( b')
> }
>
>
> Best,
> Jean
>

Works nicely.

Again, thanks a lot,
  Harm



reply via email to

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