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: Jean Abou Samra
Subject: Re: programming error for thickness/control-points of Slur
Date: Fri, 27 May 2022 12:05:21 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1



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




reply via email to

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