Maybe the below message will get through later, but maybe it's blocked
because of the attachement size, so I resend it with the attachments
uploaded to

https://cloud.ursliska.de/index.php/s/km6cHCuuMF7AcWt and
https://cloud.ursliska.de/index.php/s/6R90WOE3JPOGNKL

(these may not be permanent!)

Best
Urs


Am 21.09.2016 um 18:01 schrieb Urs Liska:
>
> Hey all,
>
> I wouldn't claim production readiness yet, but I've gone a long way
> with multi-segmented slurs :-)
>
> As you can see from the attached PDF files (if they don't block the
> message from being delivered ...) we can now print slurs with an
> arbitrary number of connected segments! The slur in the first system
> is along the lines of the orginal print, and I've added a "fancy"
> example with the red slur in the lower system.
>
> Of course it's somewhat tedious to finetune these slurs, but I found
> it's surprisingly convenient to do, and with little surprises. The
> critical point is that the segments are completely independent -with
> the exeption of the forced equal angle at the inflection points. So
> what one basically does is add one inflection point after another, and
> one can independently tweak the slur to the left of each inflection
> point, without serious side-effects.
>
> I've completely disposed of any "offset" specification except for the
> positioning of the two ends. For all the control point editing you
> will give it an angle (which is relative to the baseline of the
> segment) and a ratio (in relation to the length of that baseline).
> This gives very predictable results and makes tweaking as easy as one
> can expect with such complex notation. Of course this even more begs
> for a graphical tweaking interface ... But of course this function is
> substantially more reliable than anything you can do with other tools.
>
> I don't copy the whole code into the email anymore, the sources are
> now at
> https://github.com/openlilylib/snippets/tree/compound-slur/notation-snippets/shaping-bezier-curves,
> in the files compound-slurs.ily and common-math-and-stencils.ily. I'll
> go through another round of tidying up, but I'm happy about any
> suggestions to improve the code.
>
> To give an idea about the interface, this is the definition of the
> (first few inflections of the) upper Sorabij slur:
>
> ^\compoundSlur \with {
>   annotate = ##t
> %  show-original-slur = ##t
>
>   start-point = #'(0 . 3)
>   start-angle = 65
>   start-ratio = 0.6
>   end-point = #'(2.5 . 4)
>   end-angle = -70
>
>   inflection =
>   #'((point . (.215 . 1.55))
>      (angle . -55)
>      (ratio-left . 0.4)
>      (ratio-right . 0.22))
>
>   inflection =
>   #'((point . (.26 . -0.2))
>      (angle . 60)
>      (ratio-left . .45)
>      (ratio-right . .4))
>
>   inflection =
>   #'((point . (.49 . 0.35))
>      (angle . 33)
>      (ratio-left . .45)
>      (ratio-right . .15))
>
> % ...
> }
>
> So you give a few general properties for the start and end points and
> then each inflection as an individual unit. The "point" is the ratio
> between the end points of the slur. Angle is given relative to the
> *left* base-line (and the spline to the right will exactly mirror that
> value). ratio-left and ratio-right specify the length of the two
> handles around the inflection point.
>
> I think it's already pretty clean with regard to type checking and
> falling back to defaults for missing or wrong-type properties (while
> issuing a warning).
>
> If you want to try it out you will have to have scholarLY installed
> separately, in the version from https://github.com/oll-core/scholarly.
> But it may be worth the effort, as it also demonstrates one of the
> GSoC news: triggering footnotes from annotations.
>
> So far I have the impression it works very well, with some minor and
> not-so-minor glitches.
>
> The minor one is that I'd like to specify the starting point relative
> to the note head instead of to LilyPond's default decision. I think
> whenever such compound slurs are necessary LilyPond's default slur
> will be completely irrelevant to us, and we can instead specify the
> end points explicitly anyway. \shapeII already has this as an option,
> so I'll look for that.
>
> One larger thing is that I don't support broken slurs yet (and I won't
> go after that right now - hopefully someone else chimes in now).
>
> The other thing I came across is the specification of the inflection
> *point*. Basically the idea of specifying independent X and Y ratios
> between the slur's endpoints seems practical, as it is pretty
> predictable. But I realized that this only works well when the
> endpoints are sufficiently different on the Y-scale. If the slur is
> horizontal then *any* inflection will necessarily be on that same
> horizontal line! So I need a suggestion what could be a suitable,
> predictable *and* un-limited approach to specifying this.
>
> Another minor wish I would like to implement is printing an optional
> grid which will ease finding the right inflection points, and maybe a
> raster along the handles (going beyond their current length. This
> would make it much easier to find the right values for these.
>
> Have fun
>
> Urs
>
> Am 20.09.2016 um 13:53 schrieb Trevor Daniels:
>> Impressive work, Urs!  Kudos!
>>  
>> Trevor
>>  
>>
>>     ----- Original Message -----
>>     *From:* Urs Liska <mailto:u...@openlilylib.org>
>>     *To:* lilypond-user@gnu.org <mailto:lilypond-user@gnu.org>
>>     *Sent:* Monday, September 19, 2016 11:40 PM
>>     *Subject:* Re: What to do wanting a 4th order Bézier?
>>
>>
>>
>>     Am 19.09.2016 um 22:49 schrieb Urs Liska:
>>>     Am 19.09.2016 um 20:50 schrieb David Kastrup:
>>>>     Urs Liska <u...@openlilylib.org> writes:
>>>>
>>>>     [...]
>>>>
>>>>     You are working with slopes here.  Don't.  They don't support vertical
>>>>     lines.
>>>>
>>>     Yes, that's what I realized ...
>>>
>>>>     Please take a look at the recently added functions
>>>>
>>>>        ly:length ly:angle ly:directed
>>>>
>>>>     They will usually make it easy to do the operations you want.  In
>>>>     particular ly:directed can also use a vector as a direction without 
>>>> ever
>>>>     calculating its angle.
>>>     Thanks! From looking at the docs it seems they'll do exactly what I want
>>>     (and had partially implemented in Scheme). Can't wait to return to my
>>>     LilyPond computer :-)
>>>
>>
>>     I think I now have it in a state where we can work from. The
>>     angle of the inflection is now given as an angle relative to the
>>     line connecting the end points of the whole slur. While an angle
>>     relative to the horizontal line would be somewhat more
>>     straightforward I think this approach is more robust against
>>     changes (for example when the slur is cross-staff and the
>>     staff-staff distance changes).
>>
>>     TODO:
>>
>>       * support more than two segments
>>         (shouldn't be *that* difficult, just tedious and slightly
>>         complex)
>>       * support broken slurs
>>         (each sibling should be togglable between multi-segment or
>>         not, and it should be \shape-able)
>>       * support Slur, PhrasingSlur and Tie (like \shape)
>>       * specify shapes as polar coordinates (or all options that
>>         \shapeII has)
>>
>>     The code is now at
>>     
>> https://github.com/openlilylib/snippets/tree/compound-slur/notation-snippets/shaping-bezier-curves
>>
>>     Best
>>     Urs
>>
>>     ------------------------------------------------------------------------
>>     _______________________________________________
>>     lilypond-user mailing list
>>     lilypond-user@gnu.org
>>     https://lists.gnu.org/mailman/listinfo/lilypond-user
>>
>

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

Reply via email to