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