← Back to team overview

kicad-developers team mailing list archive

Re: PCBNew: Segments/polygons not rendered correctly (from Bug 1806411])

 

Am 2018-12-18 07:15, schrieb jp charras:
Le 17/12/2018 à 22:26, Seth Hillbrand a écrit :
Hi JP-
Am 2018-12-17 08:47, schrieb jp charras:
Note the incorrect rendering happens only when footprints are flipped.

Thank you for the samples.  I had coded the tesselation assuming the
copper layers, which always have the polygon in CW order for the outline and CCW for the holes.  But flipped footprints put the line chain in the
reverse order, so they render incorrectly.

I've added some checks for the winding order to the code and re-enabled
the polygon caching.  Let me know if you see any issues.

Thanks Seth.

Could you have a look into my commit 388397f97.
I want to be sure I did not break your code.

I modified Gerbview to use your tesselation.
During my tests, I found a crash with degenerated polygons (having less
than 3 corners).

Hi JP-

That should not cause any issues. But I think it is degenerate with the test immediately following:
if( !firstVertex || firstVertex->prev == firstVertex->next )

I've adjusted the CacheTriangulation() routine to correctly handle the case when tessellation fails. Specifically, it will set m_triangulationValid=false if any of the polygons fail triangulation. This should work because DrawPolygon() falls back to the built-in OpenGL triangulation if the triangulation is not cached. The exception is in the 3dviewer, which does not draw polygons. For this reason, we still attempt the remaining triangulation even after we set the failure flag.

Let me know if you see any issues.

Best-
Seth


Follow ups

References