See the exchange below between myself and David. Hoping for an elegant
solution to this problem.

---------- Forwarded message ----------
From: David Nalesnik <david.nales...@gmail.com>
Date: Thu, Oct 16, 2014 at 11:18 AM
Subject: Re: shapeTieColumn
To: Neil Thornock <neilthorn...@gmail.com>


Hi Neil,

On Thu, Oct 16, 2014 at 11:05 AM, Neil Thornock <neilthorn...@gmail.com>
wrote:

> Hi David,
> Not sure this is worth an email to the Lily list...
>
> I'm using your shapeTieColumn function. After a line break, the function
> works only if it is not the top staff of a system. So this breaks:
>
> { s1 \break <c' d' e'>8.~ \shapeTieColumn #'((()) (()) (((0 . -4) (0 .
> 1)     (0 . 0) (0 . 0))) (()) (())) <c' d' e'> }
>
> Any ideas?
>
> I've been poking around with this, and I really have no idea.  It _should_
work.

I added two print lines to the function to check if the offsets are
happening.  They are. Run the following on your snippet:
%%%%%%%% function for offsetting control-points of a TieColumn
%%%%%%%%%%%%%%%%%
shapeTieColumn =
#(define-music-function (parser location all-offsets) (list?)
   #{
     \once \override TieColumn #'after-line-breaking =
     #(lambda (grob)
        (let ((ties (ly:grob-array->list (ly:grob-object grob 'ties))))
;(display ties) (newline)

          (for-each
           (lambda (tie offsets-for-broken-pair)
             (let* ((orig (ly:grob-original tie))
                    (siblings (ly:spanner-broken-into orig)))

               (format #t "before: ~a~%" (ly:grob-property orig
'control-points))

               (for-each
                (lambda (piece offsets-for-piece)
                  (if (pair? offsets-for-piece)


                      (set! (ly:grob-property piece 'control-points)
                            (map
                             (lambda (x y) (coord-translate x y))
                             (ly:tie::calc-control-points piece)
                             offsets-for-piece))))
                (if (null? siblings)
                    (list orig)
                    siblings)
                offsets-for-broken-pair)

               (format #t "after: ~a~%" (ly:grob-property orig
'control-points))

               ))

           ties all-offsets)))
   #})

%%%%%%%%%%%%%

The problem also happens when the \break isn't manual.  Try:

{
  \repeat unfold 8 { R1 }
  <c' d' e'>8.~
  \shapeTieColumn #'( (()) (()) ( ((0 . 4) (0 . 1)  (0 . 0) (0 . 0))))
  <c' d' e'> r8 r2 \repeat unfold 8 { R1 }
}
%%%%%%%%%%%%%%%%

My only guess is that the tweaking is happening at the wrong time--too
late? Even though 'control-points is showing a change, the item has already
been finished?

Honestly, I'm at a loss here.  You might want to forward this to the lists
to see if someone else has an idea.

Best,
David
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to