Re: Adding polygons
[email protected] Wed, 30 May 2018 13:05:54 -0400
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
Hi, We implemented a similar approach earlier using clip areas - the resulting image did not look too great. Following your suggestion and drawing the outlines, then filling works much better. It's a bit counter-intuitive, as we do need to double the line width and slightly reduce the object size. But it works, so all good! Cheers! On 5/30/18 1:30 AM, Uli Schlachter wrote: > Hi, > > On 29.05.2018 03:53, [email protected] wrote: >> I've encountered what seems like a simple use case, that for some reason I am unable to solve within my knowledge of Cairo. >> >> I am trying to "add" (in polygon terms) two shapes. Each shape is drawn using a thick outline and a fill color. What should be drawn is a polygon that is a sum of both provided polygons. >> In the attached sample the shapes are - a rectangle, and a pointed arrow with origin at rectangle center. > So you do want to "actually draw the path", but only its outline? > >> The sample is created using external polygon clipper. That's an acceptable solution for a simpler shape, but for shapes that include arcs, for example, external clipper is not very helpful >> Is there a way to achieve the same effect using only Cairo functionality? > How about first stroking the two paths (which means that also internal > lines are drawn) and then filling them, overwriting the internal lines? > > Without alpha and the OVER operator, the default would "just work". > > With alpha you can use a group to do this: > > cairo_push_group(cr); > > cairo_rectangle(cr, whatever); > do_the_arrow(cr); > > cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); > cairo_stroke_preserve(cr); > cairo_fill(cr); > > cairo_pop_group_to_source(cr); > > cairo_set_operator(cr, CAIRO_OPERATOR_OVER); > cairo_paint(); > > (Note that this effectively halves the line width, because the inner > part of the line is overwritten by the latter fill). > > Does this do what you want? > > Cheers, > Uli -- cairo mailing list [email protected] https://lists.cairographics.org/mailman/listinfo/cairo