Hi, I'm attempting to create a s-curve stencil for TextSpanner. While so far all works as wished and it is possibel to use \shape, \vshape doesn't print the control-points.
What am I missing? Code below. Thanks to Jean how fixed make-path-stencil! Thanks, Harm \version "2.23.11" #(define (make-s-curve-stencil line-thickness thickness control-points) (let* ((start-pt (car control-points)) (end-pt (last control-points)) (lngth (- (car end-pt) (car start-pt))) (second-cp (second control-points)) (third-cp (third control-points)) (second-delta (* (- (car second-cp) (car start-pt)) (/ thickness (/ lngth 2)))) (second-out (cons (car second-cp) (+ (cdr second-cp) second-delta))) (second-in (cons (car second-cp) (- (cdr second-cp) second-delta))) (third-delta (* (- (car end-pt) (car third-cp)) (/ thickness (/ lngth 2)))) (third-out (cons (car third-cp) (+ (cdr third-cp) third-delta))) (third-in (cons (car third-cp) (- (cdr third-cp) third-delta))) (coord-list (list start-pt second-out third-out end-pt third-in second-in))) ((@@ (lily) make-bezier-sandwich-stencil) coord-list line-thickness))) #(define horizontal-spanner-cps (lambda (grob) (let* ((left-info (ly:grob-property grob 'left-bound-info)) (right-info (ly:grob-property grob 'right-bound-info)) (left-x (assoc-get 'X left-info)) (right-x (assoc-get 'X right-info)) (lngth (- right-x left-x)) (height 2) (cp-2 (cons (* lngth 0.25) height)) (cp-3 (cons (* lngth 0.75) (- height)))) (list '(0 . 0) cp-2 cp-3 (cons (- right-x left-x) 0))))) #(define text-spanner::s-curve-stencil (lambda (grob) (let* ((layout (ly:grob-layout grob)) (line-thick (ly:output-def-lookup layout 'line-thickness)) (thickness (ly:grob-property grob 'thickness 1.2)) (thick (* line-thick thickness))) ; (box-stencil (make-s-curve-stencil line-thick thick (ly:grob-property grob 'control-points)) ; 0 0) ))) { \override TextSpanner.control-points = #horizontal-spanner-cps \override TextSpanner.show-control-points = ##t \override TextSpanner.stencil = #text-spanner::s-curve-stencil \vshape #'((0 . 0)(0 . 10)(0 . -10)(0 . 0)) TextSpanner b1\startTextSpan b\stopTextSpan }