Commit Graph

31 Commits

Author SHA1 Message Date
John Beard 401eba4e91 Pcbnew: handle circles in polygon booleans 2025-07-13 04:48:52 +08:00
John Beard f36af7e08a Pcbnew: polygon boolean ops: clear arcs first to avoid assert 2025-07-12 00:24:05 +08:00
John Beard 563bb7a538 Pcbnew: polygon boolean subtraction - allow holes
The problem was using outlines, not the UnitSet function.

Fixes: https://gitlab.com/kicad/code/kicad/-/issues/19348
2025-07-12 00:24:05 +08:00
jean-pierre charras 06346f5ab5 Pcbnew, shape modification on polygonal shapes: clear arcs if any in polys.
Arcs cannot be handled by polygon boolean transforms, and must be cleared

Fixes https://gitlab.com/kicad/code/kicad/-/issues/21134
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21277
2025-07-09 17:30:56 +02:00
Jeff Young 194437b0f6 Enforce values required by implementation (KICAD-R9A). 2025-06-30 23:22:58 -06:00
Jeff Young fd67108c8b Use title case for menu items. 2025-06-28 19:41:58 -06:00
Seth Hillbrand 53a6deb080 Properly use optional
By dereferencing first, we force a get() on the optional and try to pass
that to a routine that takes an optional parameter.  Just passing the
optional reference protects against accessing an invalid

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20934

(cherry picked from commit 6c09957799)
2025-05-16 08:54:20 -07:00
Jeff Young 6757ba8165 Use consistent terminology and types. 2025-05-12 20:28:47 +01:00
Jeff Young e48a2b5ee4 Don't report non-meeting line-pairs.
We're called on each line pair, so a rect would otherwise
always report to failures for the two pairs of opposite
sides.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20326
2025-03-13 16:32:25 +00:00
Jeff Young 3f15b0d75b ADDED: hatched fills for shapes. 2025-02-24 11:08:29 +00:00
jean-pierre charras dc1ecea4bc OUTSET_ROUTINE::ProcessItem(): handle an exception thrown for incorrect prm.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/19880
2025-02-07 19:47:48 +01:00
Seth Hillbrand 0b2d4d4879 Revise Copyright statement to align with TLF
Recommendation is to avoid using the year nomenclature as this
information is already encoded in the git repo.  Avoids needing to
repeatly update.

Also updates AUTHORS.txt from current repo with contributor names
2025-01-01 14:12:04 -08:00
Seth Hillbrand e9bc8cfe9d Give Clipper1 a Viking funeral
Clears out the last spot where we were only using Clipper1 (how'd I
miss that?) and remove all calls to the Clipper1 structures
2024-12-23 17:12:09 -08:00
JamesJCode 95bbcaffbf Fix some compiler warnings 2024-10-03 07:11:59 +01:00
Jon Evans 56e0811516 Phase 2 of padstack support
CHANGED: PCB file format now supports saving/loading complex padstacks

CHANGED: PTH pads are now rendered per copper layer in the copper color;
         the PTH pad color is no longer used.

ADDED: support for importing complex pad stacks from Altium PCBs

Enforce padstack-aware access to pad properties across KiCad

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8182
2024-10-01 19:55:03 -04:00
John Beard 5c6f334f8f POLYGON_BOOLEAN_ROUTINE: Copy filled attribute from the source 2024-09-25 22:15:45 +01:00
John Beard 79bb095a29 POLYGON_BOOLEAN_ROUTINE: init some variables
These should be inited later on, but it's clearer to
make it explicit.
2024-09-25 22:13:18 +01:00
John Beard 95beedb612 Dogbones: add slots for acute angles
It's actually not as hard as I thought, though
surely has wierd edge cases which users might need to
handle manually.
2024-09-22 13:45:19 +01:00
John Beard a6f00a395c Polygon operation: fix typo 2024-09-20 17:20:20 +01:00
John Beard 671ecdf13c Dogbone: correct small mouth warning
It has to fit the cutter diameter, not the radius!

Also you can use SHAPE_ARC as a generic arc object.
2024-09-20 10:37:29 +01:00
John Beard 8609632fc4 Polygon operations: fix merging of disjoint shapes
Don't enforce that every merge result has to be
non-disjoint. Sometimes it will merge in the end
when gaps are filled in by other shapes. Even if
not, at the end, just create a new polygon for
each disjoint polygon.
2024-09-19 23:14:42 +01:00
John Beard 8fdb6d6e88 Feature: Exact item offset tool
This is a little bit like the bounding hull tool, but the
output is "exact" and it only supports the most common
source items.

By 'exact', this means that rounded corners are real arc
segments rather than polygonal approximations. Obviously,
this is rather tricky in the general case, and especially
for any concave shape or anything with a bezier in it.

Envisioned main uses:

* Creating courtyard and silkscreen offsets in footprints
* Making slots around line or arcs.

The one thing that it does not currently do, but which it might
plausibly do without reimplementing Clipper is convex polygons,
which would bring trapezoidal pad outsets for free. But that
is a stretch goal, and bounding hull can be used.
2024-09-19 06:35:43 +01:00
John Beard 7fc367e688 Pcbnew: Add dogbone corner tool
This adds circular arcs in corners to allow for the router
cutter radius when routing a slot or corner that receives
a sharp corner.

Fixes: https://gitlab.com/kicad/code/kicad/-/issues/18512
2024-08-07 23:01:32 -06:00
Jeff Young 6f0a1ade01 Don't add things to the selection that aren't in the commit.
Don't process line-pairs when one has already been deleted.

Clean up created line segments when operation is cancelled.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/18122
2024-05-31 11:49:24 +01:00
Seth Hillbrand 0129191ec0 Limit where the intersection of two lines can be
This avoids generating lines where we are unable to select them because
they get too close to the border

Fixes https://gitlab.com/kicad/code/kicad/-/issues/16959
2024-03-01 15:57:24 -08:00
levanlap2502 faeec25557 Fix fillet lines, when line angle is 0 or 180
Check angle of line before creating Fillet

Fixes https://gitlab.com/kicad/code/kicad/-/issues/15966
2024-01-16 13:30:21 -08:00
John Beard 311f041421 ADDED: Polygon boolean operations in PCB editor
This allows common operations like merging a pin courtyard
into the body courtyard in the fooprint editor, taking a
"bite" out of a polygon and so on,

For now, this only supports polygons made of straight lines.

There are some wierd cases when the operations result in nothing
(e.g. wen a big polygon is substracted from a smaller one that
it contains entirely). I have tried to do something senisble in
these cases, but there may be more optimal ways to handle it.

Relates-To: https://gitlab.com/kicad/code/kicad/-/issues/13025
2023-10-01 00:10:10 +01:00
John Beard b6cd7e3b4a Make ITEM_MODIFICATION_ROUTINE status messages more general and easier to call 2023-10-01 00:10:10 +01:00
John Beard 478df24f36 Fix fillets and chamfers when the original lines become zero-length
This needs the ITEM_MODIFICATION_ROUTINE to learn to delete items.
Condense the item change handlers into a single injected object
(ITEM_MODIFICATION_ROUTINE::CHANGE_HANDLER) and provide the basic
implementation that just takes some callables.

This simplifies the construction of the routines and also would make
a CHANGE_HANDLER object possible that can be reused between different
tools.
2023-07-30 15:12:28 +01:00
John Beard 046d978ba7 ADDED: Pcbnew chamfer and extend tools
Using the new ITEM_MODIFICATION_ROUTINE system, drop in two new
tools: chamfer and line extend. These are two geometric operations
that are relatively common when editing footprints in particular.

Chamfer delegates the geometric calculations to a dedicated unit
in kimath/geometry.
2023-07-12 19:21:37 +01:00
John Beard 8e0e9ce752 Generalise fillet tool
Describe the actions of the fillet tools is a generic way, so that the
same general pattern can be used for other tools that modify shapes on
the BOARD.

Basically, an "ITEM_MODIFICATION_ROUTINE" is defined, which is
configured and called multiple times, calling back to the EDIT_TOOL when
it modifies or creates an item.

The motivation here is to make it easier to slot in new line-based
tools like chamfer, extend and so on without having to redo the
complicated item, selection and commit handling each time, and keep the
core "routines" simple and decoupled from the EDIT_TOOL's
internals.

This also resolves #15094 because the new commit handling does the right
thing when items were "conjured up" for the fillet (e.g. when a
rectangle is decomposed into lines).

Fixes: #15094
2023-07-12 19:21:26 +01:00