Hi all,

here is another example document for \compoundSlur. With the
additionally implemented annotation features

  * Grid for finding values for the inflection points
  * Control points and handles for judging the angles
  * Dashed handle extensions for judging the length of the handles

These tools are shown in the first line. With them it is shockingly
simple to tweak that slur to one's liking, even without any graphical
tweaking assistance yet.

The other lines show what happens when one of the ending points is
shifted: the overall shape of the slur is more or less intact. That
means when the horizontal spacing changes (through changed content or
changed line breaks) chances are that the slur has to be adjusted only
minimally, it doesn't mess up completely. This is due to the use of
polar coordinates that have first been realized by Janek Warchoł in his
\shapeII functions but that can now be done *much* easier thanks to new
functions ly:angle, ly:length and ly:directed (thanks again for the
pointer, David).

What is left to be done is support for broken slurs and (possibly)
support for spline shapes that keep full width thorughout the inflections.

Have fun (I had)

Urs

PS: If you want to play around with it the current code is still
available on the compound-slur branch of openlilylib/snippets.

Attachment: compound-slur-weird-example.pdf
Description: Adobe PDF document

\version "2.19.48"

% This has to be available
\include "notation-snippets/shaping-bezier-curves/compound-slurs.ily"

\paper {
  indent = 0
  ragged-last = ##f
  markup-system-spacing.minimum-distance = 15
  score-markup-spacing.minimum-distance = 12
  page-count = 1
}

\header {
  title = "Compound Slurs"
  subtitle = "Using openLilyLib/snippets"
}

weird=
#(define-event-function (ann? end-x end-y)((boolean?) number? number?)
   #{
     ^\compoundSlur \with {
       annotate = #ann?
       show-grid = #ann?
     start-ratio = 0.6
       end-point = #`(,end-x . ,end-y)
       
       inflection = 
       #'((X-ratio . .25)
          (Y-offset . 8)
          )
       
       inflection =
       #'((X-ratio . .15)
          (label . "A")
          )

       inflection = 
       #'((X-ratio . .5)
          (Y-offset . 11)
          )
       
       inflection = 
       #'((X-ratio . .65)
          (Y-offset . 8)
          (angle . -30)
          (ratio-left . .6)
          (label . "B")
          )
       
       inflection = 
       #'((X-ratio . .25)
          (Y-offset . -5)
          (angle . 45)
          )
       
       
     }
   #})
   
example = 
#(define-scheme-function (ann? end-x end-y)((boolean?) number? number?)
   #{
     \score {
       \new Staff 

       \relative c''' {
         c -\weird #ann? #end-x #end-y
         b a g f e d
         c b a g f e d
         c d e f g a b
         c d e f g a b )
       }
     }
   #})

\markup \vspace #9

\markup "Default"
\example ##t 0 0

\markup \vspace #7

\markup "Raise by 5"
\example 0 5

\markup "Raise by 15 and left by 30"
\example #-30 15

\markup "Lower by 10"
\example 0 #-10
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to