Refactors `SHAPE_POLY_SET::fractureSingle()` to be more efficient, while
not changing the actual algorithm:
* increase cache locality by using contiguous arrays instead of what was
effectively a linked list
* reduce latency and jitter by replacing per-edge allocator calls with
ahead-of-time std::vector reserves
* increase cache efficiency by making the vertex struct smaller
* replace O(n^2) leftmost edge search with O(n log n) std::sort
* sort the polygons instead of the edges
* cut iteration count in half in the remaining O(polygons * edges) part
Also fixes some bugs with property exposure that (along with
other things) allowed you to put table cells on a different
layer than their parent table.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/17438
Pcbnew can hang for a long time when undoing operations involving
large numbers of board items. This provides an interim workaround
(and replicated the behaviour of the search panel) by only
computing track statistics updates incrementally if the inspector
is displayed.
Partially fixes https://gitlab.com/kicad/code/kicad/-/issues/17561
(if net inspector is not shown)
This behavior is generally undesirable and was only needed
because of past limitations. Now we only split a track
when the user places a via directly on top of it.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/16456
The behavior of the measure tool is influenced by the
horizontal/vertical/45-degree mode, but the context menu of the measure
tool lacks an option to toggle this mode. In contrast, the drawing
tools are also affected by this mode, and their context menu has the
item to toggle this mode.
We can't assume that the ignored connection exists when trying to set
the junction size. We use int_max for the default instead of 0 so that
later, we don't try to create a minor track with 0 width in loadNets()
Fixes https://gitlab.com/kicad/code/kicad/-/issues/17523
- Includes GTK crash fix from a5ef4f1b
- Additionally removes an unneccesary re-sort when rebuilding columns
- Correctly saves column state when using pcbnew standalone
The minor triangles cost the same amount of compute time as larger ones
but do not have a material effect on the zone display. This skips these
minor triangles when earcutting
Logging is useful when we find an area that cannot be triangulated.
This will be used to generated test cases.
Skipping minor untesselated areas means that the polygon will still be
considered fully tesselated (and not sent back again and again) even if
the tesselation misses an area less than the configured limit.
Currently, this is 31^2nm.