[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
Re: programming error for thickness/control-points of Slur, Thomas Morley, 2022/05/27