lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bug in Lookup::bezier_sandwich


From: James
Subject: Re: Bug in Lookup::bezier_sandwich
Date: Mon, 01 Sep 2014 09:16:35 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.0

On 31/08/14 08:22, Mike Solomon wrote:
> On Aug 31, 2014, at 1:42 AM, Jürgen Reuter <address@hidden> wrote:
> 
>> Mike,
>>  
>> appearently, the following patch works fine for my purposes (i.e. for flexa 
>> / porrectus shapes):
>>  
>> diff --git a/lily/lookup.cc b/lily/lookup.cc
>> index 344d42c..306d04e 100644
>> --- a/lily/lookup.cc
>> +++ b/lily/lookup.cc
>> @@ -466,6 +466,9 @@ Lookup::bezier_sandwich (Bezier top_curve, Bezier 
>> bottom_curve, Real thickness)
>>                               scm_from_double 
>> (top_curve.control_[2][Y_AXIS]),
>>                               scm_from_double 
>> (top_curve.control_[3][X_AXIS]),
>>                               scm_from_double 
>> (top_curve.control_[3][Y_AXIS]),
>> +                             ly_symbol2scm ("lineto"),
>> +                             scm_from_double 
>> (bottom_curve.control_[3][X_AXIS]),
>> +                             scm_from_double 
>> (bottom_curve.control_[3][Y_AXIS]),
>>                               ly_symbol2scm ("curveto"),
>>                               scm_from_double 
>> (bottom_curve.control_[2][X_AXIS]),
>>                               scm_from_double 
>> (bottom_curve.control_[2][Y_AXIS]),
>>  
>> Could you eventually verify that this patch is also fine for the slur code 
>> (afaics your commit aimed at the slur code)?  That would be great!
>>  
>> Thanks,
>> Jürgen
>>  
>>  
>> On Sat, Aug 30, 2014 at 6:24 PM, address@hidden <address@hidden> wrote:
>>
>>
>> Sent from my iPhone
>>
>>> On 30 août 2014, at 18:54, "Jürgen Reuter" <address@hidden> wrote:
>>>
>>>   Hi all,
>>>   there is a bug in Lookup::bezier_sandwich that severely affects ancient
>>>   notation.  This method was originally added to lookup.cc for
>>>   flexa/porrectus support.
>>>
>>>   In version 2.14, the bezier_sandwich curve still looks correctly, see
>>>   here:
>>>   http://lilypond.org/doc/v2.14/Documentation/a9/lily-551aed0c.png
>>>   or (with more context) here:
>>>   http://lilypond.org/doc/v2.14/Documentation/notation/ancient-notation
>>>
>>>   In version 2.15 and later, the bezier_sandwich curve has zero height at
>>>   its right end, which is bad; see here:
>>>   http://lilypond.org/doc/v2.15/Documentation/bf/lily-ac979051.png
>>>   or (with more context) here:
>>>   http://lilypond.org/doc/v2.15/Documentation/notation/ancient-notation
>>>
>>>   I tried to track down the problem and found the following suspicious
>>>   commit:
>>>
>>>   commit 35725a573e47be7c02c51964641ea534fb88be6b
>>>   Author: Mike Solomon <address@hidden>
>>>   Date:   Mon Feb 6 15:03:20 2012 +0100
>>>       Gets rid of bezier-sandwich stencil
>>>   diff --git a/lily/lookup.cc b/lily/lookup.cc
>>>   index 3f393e0..7b63b83 100644
>>>   --- a/lily/lookup.cc
>>>   +++ b/lily/lookup.cc
>>>   @@ -449,22 +449,32 @@ Lookup::slur (Bezier curve, Real curvethick, Real
>>>   linethick,
>>>    Stencil
>>>    Lookup::bezier_sandwich (Bezier top_curve, Bezier bottom_curve, Real
>>>   thickness)
>>>    {
>>>   -  /*
>>>   -    Need the weird order b.o. the way PS want its arguments
>>>   -  */
>>>   -  SCM list = SCM_EOL;
>>>   -  list = scm_cons (ly_offset2scm (bottom_curve.control_[3]), list);
>>>   -  list = scm_cons (ly_offset2scm (bottom_curve.control_[0]), list);
>>>   -  list = scm_cons (ly_offset2scm (bottom_curve.control_[1]), list);
>>>   -  list = scm_cons (ly_offset2scm (bottom_curve.control_[2]), list);
>>>   -  list = scm_cons (ly_offset2scm (top_curve.control_[0]), list);
>>>   -  list = scm_cons (ly_offset2scm (top_curve.control_[3]), list);
>>>   -  list = scm_cons (ly_offset2scm (top_curve.control_[2]), list);
>>>   -  list = scm_cons (ly_offset2scm (top_curve.control_[1]), list);
>>>   -
>>>   -  SCM horizontal_bend = scm_list_n (ly_symbol2scm ("bezier-sandwich"),
>>>   -                                    ly_quote_scm (list),
>>>   +  SCM commands  = scm_list_n (ly_symbol2scm ("moveto"),
>>>   +                              scm_from_double
>>>   (top_curve.control_[0][X_AXIS]),
>>>   +                              scm_from_double
>>>   (top_curve.control_[0][Y_AXIS]),
>>>   +                              ly_symbol2scm ("curveto"),
>>>   +                              scm_from_double
>>>   (top_curve.control_[1][X_AXIS]),
>>>   +                              scm_from_double
>>>   (top_curve.control_[1][Y_AXIS]),
>>>   +                              scm_from_double
>>>   (top_curve.control_[2][X_AXIS]),
>>>   +                              scm_from_double
>>>   (top_curve.control_[2][Y_AXIS]),
>>>   +                              scm_from_double
>>>   (top_curve.control_[3][X_AXIS]),
>>>   +                              scm_from_double
>>>   (top_curve.control_[3][Y_AXIS]),
>>>   +                              ly_symbol2scm ("curveto"),
>>>   +                              scm_from_double
>>>   (bottom_curve.control_[2][X_AXIS]),
>>>   +                              scm_from_double
>>>   (bottom_curve.control_[2][Y_AXIS]),
>>>   +                              scm_from_double
>>>   (bottom_curve.control_[1][X_AXIS]),
>>>   +                              scm_from_double
>>>   (bottom_curve.control_[1][Y_AXIS]),
>>>   +                              scm_from_double
>>>   (bottom_curve.control_[0][X_AXIS]),
>>>   +                              scm_from_double
>>>   (bottom_curve.control_[0][Y_AXIS]),
>>>   +                              ly_symbol2scm ("closepath"),
>>>   +                              SCM_UNDEFINED);
>>>   +
>>>   +  SCM horizontal_bend = scm_list_n (ly_symbol2scm ("path"),
>>>   scm_from_double (thickness),
>>>   +                                    ly_quote_scm (commands),
>>>   +                                    ly_quote_scm (ly_symbol2scm
>>>   ("round")),
>>>   +                                    ly_quote_scm (ly_symbol2scm
>>>   ("round")),
>>>   +                                    SCM_BOOL_T, SCM_UNDEFINED);
>>>
>>>      Interval x_extent = top_curve.extent (X_AXIS);
>>>
>>>   I do not fully understand the rationale / implications of this change,
>>>   so I do really know what to do here without affecting other places in
>>>   the code.  By the way, ancient notation does not make use of the
>>>   "thickness" argument; probably it has been introduced for some other
>>>   use elsewhere.
>>>
>>>   Could someone of the active developers look into this?  That would be
>>>   great!
>>>
>>>   Thanks a lot,
>>>   Juergen
>>> _______________________________________________
>>> lilypond-devel mailing list
>>> address@hidden
>>> https://lists.gnu.org/mailman/listinfo/lilypond-devel
>>
>> I can have a look at it this week - thanks for pointing it out!
>>
>> ~Mike
>>  
> 
> 
> Good catch - I hadn’t realized/seen that the sandwiches were used in cases 
> where they’re open on either end.
> I’ll test later today and I’ll let you know!
> 
> Cheers,
> MS

I'm guessing we at least need a tracker for this?

James




reply via email to

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