Hello All,

In trying to find a solution to this little problem (that ramp Clusters
sometimes don't behave as I expect) I downloaded the source, complied it,
and started looking around to see if I could find some answers.

I found that the function brew_cluster_piece( )  in cluster.cc calls
round_filled_polygon in line 107. Specifically
107 out.add_stencil (Lookup::round_filled_polygon (points, blotdiameter));

The definition of round_filled_polygon opens with a detailed LIMITATIONS
comment section, which clearly warn about the limitations of the function
and its problems in certain cases:

/*
 * Create Stencil that represents a filled polygon with round edges.
 *
 * LIMITATIONS:
 *
 * (a) Only outer (convex) edges are rounded.
 *
 * (b) This algorithm works as expected only for polygons whose edges
 * do not intersect.  For example, the polygon ((0, 0), (q, 0), (0,
 * q), (q, q)) has an intersection at point (q/2, q/2) and therefore
 * will give a strange result.  Even non-adjacent edges that just
 * touch each other will in general not work as expected for non-null
 * blotdiameter.
 *
 * (c) Given a polygon ((x0, y0), (x1, y1), ... , (x (n-1), y (n-1))),
 * if there is a natural number k such that blotdiameter is greater
 * than the maximum of { | (x (k mod n), y (k mod n)) - (x ((k+1) mod n),
 * y ((k+1) mod n)) |, | (x (k mod n), y (k mod n)) - (x ((k+2) mod n),
 * y ((k+2) mod n)) |, | (x ((k+1) mod n), y ((k+1) mod n)) - (x ((k+2)
 * mod n), y ((k+2) mod n)) | }, then the outline of the rounded
 * polygon will exceed the outline of the core polygon.  In other
 * words: Do not draw rounded polygons that have a leg smaller or
 * thinner than blotdiameter (or set blotdiameter to a sufficiently
 * small value -- maybe even 0.0)!
 *
 * NOTE: Limitations (b) and (c) arise from the fact that round edges
 * are made by moulding sharp edges to round ones rather than adding
 * to a core filled polygon.  For details of these two different
 * approaches, see the thread upon the ledger lines patch that started
 * on March 25, 2002 on the devel mailing list.  The below version of
 * round_filled_polygon () sticks to the moulding model, which the
 * majority of the list participants finally voted for.  This,
 * however, results in the above limitations and a much increased
 * complexity of the algorithm, since it has to compute a shrinked
 * polygon -- which is not trivial define precisely and unambigously.
 * With the other approach, one simply could move a circle of size
 * blotdiameter along all edges of the polygon (which is what the
 * postscript routine in the backend effectively does, but on the
 * shrinked polygon). --jr
 */

So, as suggested, I set the blotdiameter  to 0.0 in the call to
round_filled_polygon in cluster.cc, line 107. I recompiled, tested, and that
fixed the output!
See attached png.

So my question is now, is it possible to make the blotdiameter a settable
Context property, just like padding or X-offset are? Or does anyone have a
better idea of how to be able to control this via Lilypond proper?

Many thanks,

Victor

PS. my appologies for calling this a bug in the original post. Yes, I've
learned my lesson.


On Sun, Jun 29, 2008 at 4:35 PM, V!ctor Adán <[EMAIL PROTECTED]> wrote:

> Hello Lilyponders,
>
> I'm using ramp-style Cluster spanners and I'm getting unexpected output.
> When more than two identical chords follow each other, the upper boundary
> of the cluster collapses down one space and then goes back up.
> In the example below (its corresponding image is attached), I have a
> sequence of 5 different chords, each repeated 4 times. Notice how the
> Cluster collapses in the two middle chords of each set. This is not what one
> would expect since all 4 chords are identical.
> Notice also how the collapsing of the cluster's vertical span does not
> happen when we use stairs-styled clusters.
> So, is this a bug? I'd really like this not to happen...
>
> Thoughts, suggestions?
>
> Many thanks,
>
> Victor
>
> %%%%% START %%%%%
> \version "2.11.45"
> mycluster = \makeClusters{
>    <g' g'>4 <g' g'> <g' g'> <g' g'>
>    <f' a'> <f' a'> <f' a'> <f' a'>
>    <e' b'> <e' b'> <e' b'> <e' b'>
>    <d' c''> <d' c''> <d' c''> <d' c''>
>    <c' d''> <c' d''> <c' d''> }
> {
>       \override ClusterSpanner #'style = #'ramp
>       \mycluster
>       r4
>       \override ClusterSpanner #'style = #'leftsided-stairs
>       \mycluster
> }
>
> %%%%% END %%%%%
>
>

<<attachment: cluster_problem_fix.png>>

_______________________________________________
lilypond-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to