Commit Graph

1534 Commits

Author SHA1 Message Date
Jeff Young 8268234aa1 Reverse shown-source logic so we report if it's the netclass width.
(whether or not it's *also* the previous track width).
2023-01-27 15:31:02 +00:00
Alex e3fa447f0c router: Remove extra qualification. 2023-01-27 11:56:23 +03:00
Alex 0ff6cb49d6 router: When dragging tracks, don't snap to parts of the original line.
Fixes https://gitlab.com/kicad/code/kicad/issues/10113
2023-01-27 11:06:36 +03:00
Mike Williams a76a4f9788 Router: don't unnecessarily change track widths on layer change
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/13546
2023-01-25 09:34:17 -05:00
Jeff Young 89d434255c Run clearance rules for router status bar.
Fixes https://gitlab.com/kicad/code/kicad/issues/13605
2023-01-20 14:19:58 +00:00
Tomasz Wlostowski 761e754294 router: trying to improve the 'guess posture' algorithm to work well with both fix-all and fix-last-segment on click 2023-01-12 23:37:07 +01:00
Tomasz Wlostowski 65def26b4d router: follow up ROUTER::GetUpdatedItems() API changes in the ROUTER_TOOL 2023-01-12 23:37:07 +01:00
Tomasz Wlostowski d07d6c9a30 router: fix 'Bowen knot'-looking hulls for 0-length segments 2023-01-12 23:37:07 +01:00
Tomasz Wlostowski 0595440d79 router: minor improvements in shove algorithm handling of vias 2023-01-12 23:37:07 +01:00
Tomasz Wlostowski 213d30cad6 router: workaround for assertion fail on NODE::Add(unique_ptr<LINE>) 2023-01-12 23:37:07 +01:00
Tomasz Wlostowski aa7271e55a router: expose the 'head' traces in a separate list for debug logs 2023-01-12 23:37:07 +01:00
Jon Evans c530bdb5a1 Rename GetSelectMenuText to GetItemDescription
This descriptive text is used for many more things than
just the select menu these days.
2023-01-11 22:27:44 -05:00
Alex 95f5d92fc6 Fix length overestimation when first/last line segment enters a pad.
Fixes https://gitlab.com/kicad/code/kicad/issues/13322
2022-12-30 16:27:59 +05:00
Alex 867a2e833d router: Hotglue the debug graphics back to pcbnew. 2022-12-30 14:44:48 +05:00
Jeff Young 4c63b4e061 Class name <-> file name sync. 2022-12-29 18:05:57 +00:00
Tomasz Wlostowski 7d40bbdf38 router: mark the head trace (as opposed to the 'fixed tail') with fully saturated color
Fixes https://gitlab.com/kicad/code/kicad/-/issues/11386
2022-12-29 17:54:59 +01:00
Tomasz Wlostowski dfb1068358 router: improve heuristic to avoid segment drag 'flickery snapping'
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10113
2022-12-29 17:54:31 +01:00
Jon Evans ee0a41e3bc Remove excess calls to SelectedItemsModified
We really don't want to post these events unless the *selected* items
were actually modified, since it results in a redraw of the properties
panel (which disturbs edit state and causes flicker on MSW).

Now the COMMIT system is responsible for sending this event iff the
commit touches items that are selected.

Side note: UpdateMsgPanel is useless on every app except pl_editor, so
it can probably be refactored/removed at some point.
2022-12-26 20:57:58 -05:00
Jeff Young 34e134c5e5 Don't allow clearanceEpsilon to force clearance < 0.
Also, a plated hole has the max clearance of hole_clearance and
copper_clearance.

Fixes https://gitlab.com/kicad/code/kicad/issues/13237
2022-12-24 12:56:41 +00:00
jean-pierre charras 59f0e428fa Fix a PnS router issue doesn't respect knockout texts.
Fixes #13251
https://gitlab.com/kicad/code/kicad/issues/13251
2022-12-23 18:17:44 +01:00
Alex e8f755c665 router: Match segment endpoint calculation between dragger and the tool.
Prevents always picking point A when dragging short segments.
2022-12-21 20:55:49 +03:00
jean-pierre charras 161a1e21f5 PnS router: NPTH can be on copper layers, depending of the pad size and the hole size.
Now: round NPTH with a round hole bigger than the pad are not on a copper layer.
Other pas shapes are seen on copper layers (far from ideal, but reasonable)
Fixes #13214
https://gitlab.com/kicad/code/kicad/issues/13214
2022-12-20 12:50:22 +01:00
Alex 82874daf08 router: Limit the amount of move attempts in ROUTER::Finish
Otherwise auto-finish hangs in some cases.
2022-12-07 19:24:13 +03:00
Alex 008704fc6f router: Allow highlighting both DP nets when routing. 2022-12-06 05:24:23 +03:00
Alex 90ad4dcc05 router: Various bugfixes in length tuning meandering
- When fine-tuning, keep adjust to the original baseline length
- Enforce a minimum amplitude based on settings, DP gap and track width
- Use binary search to fine-tune amplitude if the length is not trivial
- Account for inequalities in balancing
- Don't add the meander if adding it with min. amplitude will make the
  tuning worse
- Keep a distance after meandering end to prevent overlaps in DP

Fixes https://gitlab.com/kicad/code/kicad/issues/9267
Fixes https://gitlab.com/kicad/code/kicad/issues/1776
2022-12-04 16:30:00 +00:00
Alex e56064696b router: Refactor m_padToDieLength out of meander placer base. 2022-12-02 01:03:34 +03:00
Alex 1aa05c0e10 router: Fix up single meander side switching. 2022-12-01 18:39:19 +03:00
Alex 7dbdb68730 router: ADDED option to create single-sided meanders. 2022-11-30 20:39:02 +00:00
Jon Evans 7a9467b0d5 Get rid of some gcc warnings 2022-11-24 17:05:58 -05:00
Jeff Young 226529235c Mostly const safety, but also performance opt. by avoiding shared_ptr overhead. 2022-11-22 12:21:30 +00:00
Tomasz Wlostowski 24c271d508 router: GetUpdatedItems() now returns an unique_ptr to the temporary NODE so that the items it owns do not get deleted upon return from the method 2022-11-18 15:14:33 +01:00
Tomasz Wlostowski 644c76b9c6 router: follow up via force propagation interface changes in the via DRAGGER 2022-11-18 15:14:09 +01:00
Tomasz Wlostowski dcfb35f002 router: more resilient via force propagation 2022-11-18 15:14:09 +01:00
Alex 3dea146488 router: Clear rule resolver caches on routing/dragging start.
Fixes https://gitlab.com/kicad/code/kicad/issues/12907
2022-11-17 02:10:21 +05:00
Alex 3f790d9dae Revert "router: Disable writing clearance cache for items in local variables."
This reverts commit 6d71f27500.

Caused a performance drop in walkaround mode.
2022-11-17 02:10:20 +05:00
Alex 6d71f27500 router: Disable writing clearance cache for items in local variables.
Fixes https://gitlab.com/kicad/code/kicad/issues/12907
2022-11-16 21:19:56 +05:00
Tomasz Wlostowski 26a38797c7 router: log and replay the 'unfix' events too 2022-11-15 23:05:53 +01:00
Tomasz Wlostowski b507c44d74 router: fix regression in Backspace (unfix/undo last segment) caused by redesign of the line placement algo
Fixes https://gitlab.com/kicad/code/kicad/-/issues/12835
2022-11-15 23:05:53 +01:00
Jeff Young 9724f6e736 Don't allow zone filling during other editing operations.
It's a very heavy op, and is likely to violate all manner of
assumptions the other ops make.

Fixes https://gitlab.com/kicad/code/kicad/issues/12736
2022-11-14 23:39:49 +00:00
Alex 126914859a Use correct pad to die lengths in DP length tuner.
Fixes https://gitlab.com/kicad/code/kicad/issues/12859
2022-11-13 21:07:09 +00:00
Alex 348c3d4216 Fix an incorrect calculation in length tuning tools.
MEANDER_PLACER_BASE::lineLength wasn't calculating the length correctly
when starting and ending pads were on different layers.

Naturally, now jointA corresponds to the start of the path, jointB to the end.

Fixes https://gitlab.com/kicad/code/kicad/issues/12881
2022-11-12 13:11:27 +00:00
Jeff Young 63f937db85 Don't use drag origin for real drag events.
Fixes https://gitlab.com/kicad/code/kicad/issues/12763
2022-11-09 13:09:31 +00:00
Jeff Young a03799c61e Don't mark collisions on dragged items, only things they collide with.
Fixes https://gitlab.com/kicad/code/kicad/issues/8965
2022-11-05 21:54:33 +00:00
Tomasz Wlostowski a0105efc0c router: major rewrite of shove/walkaround single line placement. An attempt to fix most router blockages/non-45 stray segments and simplar stuff. Also adds a ton of debug geometry cruft.
fixes: 12258
fixes: 12067
fixes: 10807
fixes: 10632
2022-10-31 11:38:31 +01:00
Tomasz Wlostowski 70bca1b2d5 router: allow caller to override the 'safety' length limit in WALKAROUND 2022-10-31 11:17:32 +01:00
Tomasz Wlostowski 363d606503 router: improved heuristics in via force propagation algorithm 2022-10-31 11:17:32 +01:00
Tomasz Wlostowski 1ddabd4eaf router: some extra debug geometry dumps in SHOVE 2022-10-31 11:17:32 +01:00
Tomasz Wlostowski 165b5257e8 router: temporaily disable upper corner count limit constraint in the OPTIMIZER which prevents almost any optimization of shoved lines 2022-10-31 11:17:32 +01:00
Tomasz Wlostowski e80bdf934a router: add via force propagation iteration limit as a user-controllable parameter in ROUTING_SETTINGS 2022-10-31 11:17:32 +01:00
Tomasz Wlostowski 247922ca2d router: LINE::SetShape() should update the attached via position with the last point of the new line shape 2022-10-31 11:17:32 +01:00
Tomasz Wlostowski 3e67b42efd router: fix another corner case in LINE::Walkaround 2022-10-31 11:17:31 +01:00
Tomasz Wlostowski 65507e7186 router: extend dump format to support automatic regressions tests of interactive routing scenarios 2022-10-31 11:17:31 +01:00
Jeff Young 01b4c20c94 Router only owns message panel when routing.
Also fixes a pair of copy/paste error not caught earlier.

Fixes https://gitlab.com/kicad/code/kicad/issues/12780
2022-10-28 22:51:43 +01:00
Jeff Young c026c3af7b Fix typo.
Fixes https://gitlab.com/kicad/code/kicad/issues/12753
2022-10-25 18:28:31 +01:00
Jeff Young 5fe5534822 Clean up layer handling and normalize to remove magic numbers.
Fixes https://gitlab.com/kicad/code/kicad/issues/12747
2022-10-25 12:31:47 +01:00
Jeff Young 2dec37f806 We must check clearance on all layers of multi-layer items.
(One layer may have a custom rule.)

Fixes https://gitlab.com/kicad/code/kicad/issues/12733
2022-10-24 00:14:12 +01:00
Jeff Young d16b23d16e Name shortening and line-break reduction. 2022-10-21 18:41:39 +01:00
Jeff Young 6fd195c389 Use comma to separate diff pair nets/netclassse rather than /.
("/" is problematic because it's more likely to appear in netnames.)

Fixes https://gitlab.com/kicad/code/kicad/issues/12592
2022-10-21 00:05:11 +01:00
Jeff Young e3842514e7 Move courtyard collision setting to preferences.
Also cleans up PCBNew/FPEditor edit options panel to be more in sync
with each other.
2022-10-19 11:33:11 +01:00
Jeff Young 413fd82813 Re-entrancy guard for router tool.
Fixes https://gitlab.com/kicad/code/kicad/issues/12604
2022-10-17 13:21:07 +01:00
Jeff Young 3e53426b6c Use same ratsnest colours in the router as the rest of KiCad. 2022-10-16 22:21:14 +01:00
Jeff Young 6357c83a8c Debug code to try and catch Undo/SyncWorld mismatch.
Fixes https://gitlab.com/kicad/code/kicad/issues/12640
2022-10-14 13:25:25 +01:00
Jeff Young 07d9671126 Repair unbalanced UndoRedoBlock call. 2022-10-14 11:44:04 +01:00
Jeff Young b01bf081d8 Cleanup. 2022-10-14 11:12:25 +01:00
Jeff Young de5980b92e Share more of the courtyard collision highlighting code. 2022-10-14 10:42:07 +01:00
Jeff Young 11dc5424cb Pull interactive courtyard checker out of move tool to share with router.
Fixes https://gitlab.com/kicad/code/kicad/issues/12594
2022-10-14 00:48:37 +01:00
Jeff Young 3090363cd5 Copy via flags down to the level the router consumes.
Fixes https://gitlab.com/kicad/code/kicad/issues/12591
2022-10-13 17:41:42 +01:00
Jeff Young 08260661b8 Force flashing when generating SOLIDs.
We only have a single SOLID per pad, so the solid's shape must always
be the flashed shape and then we can do layer-specific flashing tests
internally.

Fixes https://gitlab.com/kicad/code/kicad/issues/12458
2022-10-13 13:05:51 +01:00
Jeff Young b2f05c758b We don't always have a line when dragging.
Fixes https://gitlab.com/kicad/code/kicad/issues/12612
2022-10-10 11:44:17 +01:00
Jeff Young ea6fb84351 Formatting. 2022-10-10 11:44:17 +01:00
Jeff Young d6f1d5da76 Start-routing list needs to be a white list, not a black list.
We check the collisions later in the same routine, which is where all
the black-listed objects come in.

Fixes https://gitlab.com/kicad/code/kicad/issues/12595
2022-10-07 18:18:02 +01:00
Jeff Young bc58480e24 Missed some other uses of m_startItem in previous commit.
Fixes https://gitlab.com/kicad/code/kicad/issues/12592
2022-10-07 14:01:46 +01:00
Jeff Young cbb997a3b5 Use GetCurrentNets(), not m_startItem for message panel updates.
Fixes https://gitlab.com/kicad/code/kicad/issues/12592
2022-10-07 10:34:11 +01:00
Jeff Young 40ad5b6de3 Broaden reset-sizes-after-layer-switch algorithm.
Fixes https://gitlab.com/kicad/code/kicad/issues/12576
2022-10-06 15:50:22 +01:00
Jeff Young d8a3ba7917 Update router sizes when switching layers.
We may have layer-specific rules involved.  Note that at some point
we also need to do something similar on every "fix route" step to
handle area-specific rules.

Fixes https://gitlab.com/kicad/code/kicad/issues/12576
2022-10-05 16:45:42 +01:00
Seth Hillbrand b4f3390626 Drill size is absolute
Use hole plating size for visibility only, not zone filling, routing or
DRC
2022-10-04 09:52:40 -07:00
Jeff Young 7be05e9eb1 Make sure we have nets before grabbing the first.
Fixes https://gitlab.com/kicad/code/kicad/issues/12554
2022-10-01 13:50:26 +01:00
Mike Williams ba6afafc86 Router Tool: get rid of getNearestRatnestAnchor
Unused now that the PNS Router handles the actions that needed it.
2022-09-28 13:29:52 +00:00
Mike Williams 6252840abd PNS/Router Tool: Refactor Continue From End 2022-09-28 13:29:52 +00:00
Mike Williams 1be0deb58f PNS/Router Tool: Refactor Finish Route 2022-09-28 13:29:52 +00:00
Mike Williams b1f2273bc6 PNS: Add CurrentStart() to placers. 2022-09-28 13:29:52 +00:00
Ian McInerney 1683e552f7 Add/fix some variable initializations 2022-09-25 00:48:38 +01:00
Ian McInerney fdb97a46c1 Don't copy items in for loops when not needed 2022-09-24 03:46:06 +01:00
Jeff Young 64a6fc0fd4 Push UNITS_PROVIDER down into a low-level mixin.
This allows us to also construct cheap UNIT_PROVIDERs for specific
tasks when necessary.
2022-09-19 17:10:59 +01:00
Mike Williams 9304607624 TOOL_EVENT: make command string non-optional
We're getting segfaults in places where this isn't checked. Also, add
some asserts so we can catch bad tool push/pop.

Removes all uses of GetCommandStr() and makes it private.
2022-09-19 10:23:09 -04:00
Jeff Young 45d6b4a9fc Readability improvements. 2022-09-19 11:18:20 +01:00
Mark Roszko b00178adb3 Nuke base_units from orbit 2022-09-16 04:38:10 +00:00
Mike Williams 1a023f5dd0 PCB Editor: (Auto)Route Selected (From Other End)
3x Selection-Based Routing Tools. Takes a selection of routable objects
and routes them one at a time individually, with an attempted finish, or
from the other end, depending on the action given.
2022-09-13 15:06:36 +00:00
Mike Williams dc20e24c4a Route Other End: Perform Steps in one Undo Commit 2022-09-13 15:06:36 +00:00
Mike Williams 82f8cd72a3 PNS Router IFACE: Add board commit mode control 2022-09-13 15:06:36 +00:00
Alex cc4e34ef49 Don't sync the world twice in inline router tools.
Activate() already clears and syncs the world via PNS::TOOL_BASE::Reset,
so there's no need to sync in InlineDrag and InlineBreakTrack.
2022-09-10 20:49:30 +00:00
Mike Williams fa3e9efdce PCB Router: return to original active layer after routing
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/12313
2022-09-06 10:51:46 -04:00
Mike Williams 68f71e4a62 PCB Router: Pressing V again can untoggle Via
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/12315
2022-09-06 10:51:46 -04:00
Jeff Young 7c83c78afe Allow free pad usage in router.
Fixes https://gitlab.com/kicad/code/kicad/issues/11730
2022-09-06 13:59:52 +01:00
Jeff Young 156755e9db Allow processing of non-handled events in length tuner tool.
Fixes https://gitlab.com/kicad/code/kicad/issues/11425
2022-09-05 10:57:07 +01:00
Jeff Young 895a8a8dbc Work around focus issues for status popups.
Autoscroll wasn't working on Mac because the status popup's panel
has the focus.  This *may* also fix a problem on MSW of the auto-scroll
not being cancel-able.

Fixes https://gitlab.com/kicad/code/kicad/issues/11425
2022-09-04 21:08:01 +01:00
Jeff Young 9405817a4d Improve contrast of status popup text on Mac.
Also works around an issue where GetBackgroundColor() returns black
(with a 40% alpha) on Mac.
2022-09-04 21:08:01 +01:00
Jeff Young c30a557810 ADDED netclass assignment from PCB canvas.
Fixes https://gitlab.com/kicad/code/kicad/issues/5975
2022-09-03 19:29:59 +01:00
Roberto Fernandez Bautista c15a13963b Fix Build error: AddLine doesn't exist anymore 2022-09-02 11:17:28 +02:00
Roberto Fernandez Bautista 22f96bfd11 Re-route m_last_head after routing fails
This should ensure the shove state gets reverted

Fixes https://gitlab.com/kicad/code/kicad/-/issues/9023
2022-09-02 09:41:15 +02:00
Seth Hillbrand b736460e71 Move optional access from value() to *operator
`value()` throws.  Where we check for existence, we don't need to use
the throwing version and should just use the unprotected variant
2022-08-30 13:59:39 -07:00
Seth Hillbrand 91fbb5c957 Don't prevent immediate actions while router active
Immediate actions that can take place are useful.  We should only be
preventing immediate actions while actively routing or dragging

Fixes https://gitlab.com/kicad/code/kicad/issues/12311
2022-08-30 10:31:29 -07:00
Stefan Hamminga 2ff6a6aee1 Implement and enable option to not shove vias during push & shove routing 2022-08-29 17:32:39 +00:00
Jeff Young 7baa56528a Make sure via-gap-same-as-trace-gap gets turned off for board settings.
Fixes https://gitlab.com/kicad/code/kicad/issues/12236
2022-08-26 13:22:57 +01:00
Seth Hillbrand f1261e71d4 Replace boost::optional with std::optional 2022-08-25 15:50:47 -07:00
Jeff Young aa2ad3b44c Move KICAD_T[] to std::initializer_list<KICAD_T>. 2022-08-20 10:28:11 +01:00
Jeff Young 46df421064 ADDED defined pad groups for net-tie footprints
Each pad group is allowed to short nets with other pads in its group.

Legacy footprints with the "net tie" keyword hack will get a single
group auto-created with all the footprint's pads in it.

DRC and the router now allow a track to collide with copper graphic items
while entering a net-tie pad as long as the closest point in the collision
is within the pad.

DRC (and the footprint checker) now check for copper items in the
footprint shorting pads which are not in the same pad group.

Fixes https://gitlab.com/kicad/code/kicad/issues/2265
2022-08-19 18:54:20 +01:00
Mike Williams f06e28b7a7 PCB: Finish Route, Route From End
Adds restart routing from other ratsnest' end and automatically finish
routing.

Fixes: https://gitlab.com/kicad/code/kicad/-/issues/5051
2022-08-17 03:15:46 +00:00
Jeff Young a9536b5de9 CHANGED netclass assignments now done via canvas or via patterns. 2022-08-14 22:56:29 +01:00
Seth Hillbrand 1ce8fc1614 Ensure arcs are handled in topology
Use the connection-independent `Anchor()` function to get connection
points for either arcs or segments in topology.  This allows the
ratsnest to be correctly drawn between nets with arcs

Fixes https://gitlab.com/kicad/code/kicad/issues/12205
2022-08-12 20:07:28 -07:00
Jeff Young 96f01d33c8 Performance improvements.
1) Move a bunch of std::map's to std::unordered_map to get constant-time
look-ups
2) Lengthen progress-reporting intervals to spend more time doing work
and less time talking about it
3) Reverse order of SHAPE_LINE_CHAINs in thermal intersection checks to
make (much) better use of bbox caches
4) Don't re-generate bboxes we already have
5) Fix some autos that weren't by reference (and were therefore copying
large datasets)
6) Rename delta progressDelta so it's easier to search for in future
7) Get rid of a few more autos (because I don't like them)
8) Pass large items to lambdas by reference

Fixes https://gitlab.com/kicad/code/kicad/issues/12130
2022-08-03 11:59:42 +01:00
Seth Hillbrand 76b9e25143 Cleanup unused code 2022-08-02 08:33:59 -07:00
Seth Hillbrand e0b3f6c258 PNS: Handle via-in-pad distances when tuning
Tuning with a via in pad, the via isn't a part of the full line.  But we
still need to account for the line length distance of the
starting/ending vias.  To do this, we simply measure the height from
the ending track to the ending pad and starting track to starting pad

(cherry picked from commit 82e8e38054)
2022-08-01 20:25:17 -07:00
Seth Hillbrand 17fdb7c6a8 Prevent drag index from exceeding full line count
Simplification removes segments, so we might lose our valid index.
Ideally, we would simplify during the assembly or pass the input index
to the simplify routine to maintain the proper value.

Fixes https://gitlab.com/kicad/code/kicad/issues/12137

(cherry picked from commit 6c617d84ca)
2022-08-01 08:58:28 -07:00
Jeff Young f41af10007 Clean up hole shapes for safety (smart pointer) and consistency. 2022-07-22 23:06:07 +01:00
Seth Hillbrand 16e3d40552 ADDED: Display calculated clearance in status bar
In addition to showing resolved clearance, we also show the calculated
clearance in the same method as is used for DRC.  This will allow users
to better examine their system while working.

Fixes https://gitlab.com/kicad/code/kicad/issues/7934
2022-07-21 15:44:48 -07:00
Tomasz Wlostowski e558893851 router: use actual snap point position for routability checks of a segment instead of the segment endpoint(s).
Explanation:
- place a long segment A with something violating the rules close to its endpoint
- try to start routing in the 2/3 of the length of A (on the obstacle side)
- bummer - the router picks the nearest endpoint of A for the collision check (even though we don't care about this collision since we want to route far away from it)
2022-07-21 16:30:28 +02:00
Seth Hillbrand a9a5136c1c Always allow blind/buried/micro vias
Removes a nanny setting that prevented the use of
blind/buried/micro-vias without a checkbox.  If the designer does not
want microvias in their board, they simply do not place microvias.
2022-07-12 19:47:31 -07:00
Mike Williams 3d1d432c5e PCB Editor: re-add missing color to dynamic ratsnest 2022-07-12 19:36:51 -04:00
Jon Evans 664bf1382d PNS: Fix IsLineCorner logic
Handle segment width test in the case of locked segs
Fix logic failure where vias on path cause crash

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


(cherry picked from commit 2512375988)
2022-07-12 02:49:24 +00:00
Jeff Young e122dc38bd Add context menu item for clearing net highlighting.
In selection tools, drawing tools, router tool, line_wire_bus tool.

Fixes https://gitlab.com/kicad/code/kicad/issues/11920
2022-07-10 17:15:20 -06:00
Jeff Young b8479bf6f1 Handle severity ignore rules in router.
Fixes https://gitlab.com/kicad/code/kicad/issues/11609
2022-07-09 11:24:47 -06:00
Seth Hillbrand 0cb5abd7f7 Fix highlight on route again
Added a clarifying comment that will hopefully keep the required code
block in place
2022-07-08 20:14:46 -07:00
Tomasz Wlostowski 3111b7679d router: bring back the snap-to-hull behaviour in Mark Obstacles mode 2022-07-03 23:59:27 +02:00
Jeff Young f48ed79039 Rely on DRC rules when items might overlap.
Fixes https://gitlab.com/kicad/code/kicad/issues/1790
2022-06-29 13:43:44 -06:00
Jeff Young 833dc70bff Add edge-exclusions to router (for castellated pads).
Fixes https://gitlab.com/kicad/code/kicad/issues/1790
2022-06-27 15:16:37 -06:00
Tomasz Wlostowski f5fe1d5462 router: another attempt at improving 'kink' robustness of the hull generator 2022-06-09 20:51:21 +02:00
Tomasz Wlostowski 56df462474 router: fix SegmentHull() corner case when it 'chamfers' more than the clearance permits (corner case for 0-length segments, which we use
for representing holes)
2022-06-09 00:33:08 +02:00
Tomasz Wlostowski 990281a897 router: use either copper or hole clearance, whichever is larger, when checking track -> hole collisions 2022-06-09 00:31:47 +02:00
Tomasz Wlostowski 4192c0a709 router: move IsFlashedOnLayer to the IFACE_BASE class so that it can be used in the debugger tool 2022-06-09 00:30:57 +02:00
Tomasz Wlostowski bcfe12ce47 router: improvements in robustness of SegmentHull()
- ensure the 'chamfer' radius and clearance is rounded before computing the actual hull vertices
- for small, non-45 degree line segments (present in many boards), generate a slightly larger but still axis-aligned 45 degree hull instead of following exactly the segment direction
2022-06-08 14:28:31 +02:00
Tomasz Wlostowski e90ab055b9 router: remove unused LINE::Is45Degree() 2022-06-08 14:28:31 +02:00
Jon Evans 30fb298ed3 PNS: Re-enable hole clearance for non-flashed pads/vias
Fixes https://gitlab.com/kicad/code/kicad/-/issues/11098
2022-06-07 19:49:38 -04:00
Jon Evans 23596812b6 PNS: Implement HoleHull for VIA 2022-06-07 19:49:38 -04:00
jean-pierre charras 9f38fa43cd Fix some minor compil and Coverity warnings. 2022-06-05 11:44:49 +02:00
Jon Evans 3747369aaa PNS: Remove offsets from hull generation
This is likely an old workaround to numerical precision issues
in the DRC system that no longer exist.  Removing this is necessary
for "exact" hull generation to produce walkaround results that
look nice (paths falling exactly on the grid lines)

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

(cherry picked from commit 5d4e2aa595)
2022-06-04 00:04:03 -04:00
Jon Evans 9a2950cca1 PNS: Use exact hulls for walkaround path generation
When we generate hulls, by default we subtract the clearance epsilon
to prevent false collisions in the router that wouldn't be flagged
by DRC.  However, we need to use the actual hull with no epsilon
when generating hulls for pathfinding in the walkaround system.

Without this change, it is possible for the walkaround to generate
a valid-seeming path that results in a DRC violation, for example
when dragging a drag against a board edge.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/10536
Fixes https://gitlab.com/kicad/code/kicad/-/issues/11365
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10710

(cherry picked from commit 2a91ba35c1)
2022-06-04 00:04:03 -04:00
Tomasz Wlostowski c8b93c39b6 router: remove some old cruft from the WALKAROUND class 2022-06-03 23:28:41 +02:00
Tomasz Wlostowski 0bd7f603a3 router: consider mouse drag event a valid route start/end event
L-clicks during routing operation while the mouse is moving (even slightly) were ignored, which was annoying to some users (myself included). Now the router
always fixes the track upon mouse click.
2022-06-03 23:28:41 +02:00
Tomasz Wlostowski eaee610fd9 router: save project settings together with the debug log 2022-06-03 23:28:41 +02:00
Tomasz Wlostowski f73acbb206 router: derive VIA class from LINKED_ITEM interface 2022-06-03 23:28:41 +02:00
Tomasz Wlostowski cab08f859a router: cluster extraction should only consider objects that are touching (instead of checking clearance) 2022-06-03 23:28:41 +02:00
Tomasz Wlostowski 297c60923e router: return routing status from ROUTER::Move() 2022-06-03 23:28:41 +02:00
Tomasz Wlostowski 54f4f765b9 router: NODE|ITEM::QueryColliding() now can override clearance
Needed for clustering algorithm (to be committed later... ;-)
2022-06-03 23:28:41 +02:00
Tomasz Wlostowski aca9cce5d5 router: more verbose debug messages for the debugger tool 2022-06-03 23:28:41 +02:00
Tomasz Wlostowski 2a0accd184 router: shove algorithm now considers cases where a small via sits 'inside' a fanout of wide (width > via diameter) segments.
The shove algorithm can't move the loose track ends. It always needs a via. In case of wide segments stitched with
a small via, the collision search finds only colliding segments and does not consider the via. This leads to frequent shove falilures
or 'choppy' behaviour when the head line only slightly overlaps with an end of a thick trace. This patch attempts at improving this behaviour
by considering the 'tiny via in wide segment' case explicitly.
2022-06-03 23:28:41 +02:00
Tomasz Wlostowski 08647bf035 router: temporarily disable via hole clearance check in the shove algorithm.
- needs refinements and additional checks for corner cases.
- disabled also to facilitate debugging of other shove bugs
2022-06-03 23:28:40 +02:00
Tomasz Wlostowski 8cb65a8a13 router: default values for LOGGER::Log() 2022-06-03 23:28:40 +02:00
Tomasz Wlostowski 752ba2ed76 router: log via toggle events 2022-06-03 23:28:40 +02:00
Tomasz Wlostowski a4ad47cd08 router: use SHAPEs and PNS::ITEMs only in the ROUTER_PREVIEW_ITEM 2022-06-03 23:28:40 +02:00
Tomasz Wlostowski b08280d00c router: enable Hole Clearance rule only in Mark Obstacles mode
(it will be brought back to Walk/Shove modes as soon as all the underlying issues are fixed)
2022-06-03 23:28:40 +02:00
Jon Evans 40593930d0 PNS: Fix off-by-one in dragCornerInternal
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10919


(cherry picked from commit 8d8f96b094)
2022-06-01 21:13:05 +00:00
Jon Evans 6fd14ac945 [PNS] Fix invalid assumption in IsLineCorner
(cherry picked from commit a4aa447b95)
2022-05-31 20:24:54 -04:00
Jon Evans 9470bd15a1 PNS: Fix skew calculation with pad-to-die specified
Fixes https://gitlab.com/kicad/code/kicad/-/issues/11710

(cherry picked from commit 53dbd3bb02)
2022-05-31 20:24:54 -04:00
Jeff Young f2fc78f380 Don't copy modifiers to prime events.
The modifiers go with the hotkey, not with the action.

Fixes https://gitlab.com/kicad/code/kicad/issues/11618
2022-05-16 13:51:40 +01:00
Jeff Young a54bbfe12b Honour prime-event-location when starting router.
Fixes https://gitlab.com/kicad/code/kicad/issues/11239
2022-03-29 13:44:40 +01:00
Wayne Stambaugh 7b2d9dfc0c Fix some Coverity uninitialized scalar variable issues. 2022-03-24 13:17:07 -04:00
Jeff Young 4225f92573 Slight improvements to via drawing.
Fixes https://gitlab.com/kicad/code/kicad/issues/8717
2022-03-16 14:56:32 +00:00
Jeff Young ec5b7a57ec Consistency in via dimensions terminology.
Fixes https://gitlab.com/kicad/code/kicad/issues/11024
2022-03-03 22:40:18 +00:00
Tomasz Wlostowski adace996f4 qa/pns: refactored the P&S debug tool:
- factored out 'business' code from the UI code
- moved to the new DEBUG_DECORATOR interface
- UI-less log file and log player classes as a step towards P&S unit tests
2022-03-03 01:02:00 +01:00
Tomasz Wlostowski 45f7cf9571 router: rework the DEBUG_DECORATOR a bit:
- support for dumping complete PNS::ITEMs and generic SHAPEs
- support for log nesting levels
- wxT-ized strings
- more verbose output where needed
2022-03-03 01:02:00 +01:00
Seth Hillbrand 4d6c2e4868 Update end item before moving on track/via change
The move even dereferences m_enditem for logging and perhaps other
actions.  We need to ensure that the end item has not been invalidated
before taking this action

Fixes https://gitlab.com/kicad/code/kicad/issues/10732

(cherry picked from commit 901c330478)
2022-03-02 09:23:15 -08:00
Jeff Young 639fdb915a Implement real layer test for visibility. 2022-02-24 21:32:43 +00:00
Jeff Young f076d07e9e Fix asserts. 2022-02-24 18:16:45 +00:00
Jeff Young f18aae679c Use router to update message panel when routing.
Fixes https://gitlab.com/kicad/code/kicad/issues/10068
2022-02-20 16:50:30 +00:00
Jeff Young a2ca8cf413 Improve SNR. 2022-02-12 18:38:11 +00:00
Jeff Young 8dcc933fc3 Don't use bounding box cache during insideArea.
For starters we can't rely on it having been updated, but we also
cache the entire result so there's no huge cost-savings anyway.

Fixes https://gitlab.com/kicad/code/kicad/issues/10821
2022-02-12 18:38:11 +00:00
Marek Roszko 0a5ddb8d40 Add some vector reservations 2022-02-05 21:12:29 -05:00
Jeff Young b2e3f03222 More wide-string declarations. 2022-02-05 22:03:04 +00:00
Seth Hillbrand 92dc06ac9d Don't convert KIID on the fly
Converting to string on save prevent unneeded ops

(cherry picked from commit 901685f01b)
2022-02-03 10:35:31 -08:00
Seth Hillbrand 803675195d Be more diligent in preventing drag line errors
They can happen even when there are no collisions, so we need to reset
the 'ok' flag before using the line again.

Fixes https://gitlab.com/kicad/code/kicad/issues/9555

(cherry picked from commit 833ce19221)
2022-01-31 16:13:53 -08:00
Jeff Young 5739505aa3 TextBoxes for PCBNew. 2022-01-31 20:00:47 +00:00
Seth Hillbrand ad84b62b63 Prevent multiple single-point line solutions
Suggested by @rivimey, we test the case where both lines return singular
point lines and prevent them leaking into our drag solution

Fixes https://gitlab.com/kicad/code/kicad/issues/9555

(cherry picked from commit 38a4894d92)
2022-01-29 07:07:29 -08:00
Seth Hillbrand 7277fd6218 Don't allow degenerate lines in dragger
If walkaround returns an invalid line, don't consider it for a track

Fixes https://gitlab.com/kicad/code/kicad/issues/9555

(cherry picked from commit 8ae304dcca)
2022-01-28 15:19:06 -08:00
Tomasz Wlostowski 441e5fd486 router: don't reject non-45 degree lines in the LINE_PLACER 2022-01-22 00:28:11 +01:00
Tomasz Wlostowski ce28525172 router: include arc approximation tollerance in arc hull clearance calculation
fixes: https://gitlab.com/kicad/code/kicad/-/issues/10470
2022-01-22 00:28:11 +01:00
Jeff Young 14006495d5 Angle cleanup. 2022-01-20 22:35:41 +00:00
Jeff Young e61144d45a Finish with EDA_ANGLE. 2022-01-16 21:15:40 +00:00
Jeff Young e84c574830 Some more EDA_ANGLE cleanup. 2022-01-16 19:16:18 +00:00
Jeff Young 1539fa5af2 Move SHAPE_ARC to EDA_ANGLE. 2022-01-16 01:19:45 +00:00
Jeff Young 07013d00e1 More EDA_ANGLE. 2022-01-14 16:08:19 +00:00
Jeff Young abd3f5bc2b Move footprints to EDA_ANGLE. 2022-01-14 16:08:18 +00:00
Jeff Young d485eb2514 Move pads to EDA_ANGLE. 2022-01-14 16:08:18 +00:00
Jon Evans eac1936303 PNS: Do not clear layer pairs when importing new sizes
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10225

(cherry picked from commit 20bbf9b179)
2022-01-13 20:38:08 -05:00
Jon Evans 3011ae1d51 PNS: Do not allow smart pads when in 90-degree mode
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10386

(cherry picked from commit cf4d46b24d)
2022-01-13 20:38:01 -05:00
Tomasz Wlostowski 79fe0bf456 router: use VIA::PushoutForce() for via push force calculation in the shove algorithm
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/10317
2022-01-13 00:43:27 +01:00
Tomasz Wlostowski 4d0a317e3d router: fix via force propagation for vias where hole clearance > copper clearance 2022-01-13 00:42:50 +01:00
Jeff Young eb58d7e44c Text glyph caches and bug fixes.
1) Unify metrics between stroke and outline fonts
2) Unify handling of rotation and mirroring
3) Bug fixes in collision handling
4) Use of VECTOR2I (instead of VECTOR2D) for world-coordinates
5) Generate outline font overbar with rounded ends and fix rotation
bugs
6) Generate wxEVT_CHOICE events from FONT_CHOICE::SetFontSelection
7) Change text-item PNS SOLIDs to use compound shapes
2022-01-08 16:47:45 +00:00
Jeff Young 72340fcee2 Implement router and DRC collisions for outline fonts. 2022-01-08 16:47:45 +00:00
Jon Evans 60c0891c5f Exit router and invoke edit tool when attempting to drag an arc track
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10208

(cherry picked from commit 45182febaf)
2022-01-02 16:10:50 -05:00
Marek Roszko c4c56de708 Neurotically update position wxPoint usages 2022-01-01 11:55:51 -05:00
Ian McInerney f744ddd11d Fix copy-paste error in PNS mouse trail tracer
And also fix indentation of control flow.
2021-12-31 00:04:11 +00:00
Ian McInerney 0e9cfd0af2 Add missing initialization values to variables
Flagged by Coverity.
2021-12-30 23:42:06 +00:00
Jeff Young 5e4a704155 Remove some more duplicated preferences.
Fixes https://gitlab.com/kicad/code/kicad/issues/10112
2021-12-26 13:37:28 +00:00
Jeff Young 2538ad16aa Handle router collisions with filled shapes. 2021-12-24 21:10:28 +00:00
Jeff Young ed79f6e511 Clean up some TODOs. 2021-12-24 21:10:28 +00:00
Jeff Young 9ee28ea8f5 Flatten out some more preferences. 2021-12-24 15:43:20 +00:00
Tomasz Wlostowski 57af990066 router: fix layer switch issue when starting a track on via without fixed segments
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/9915
2021-12-16 00:55:17 +01:00
Mike Williams 956ac871c3 PCB Editor: changes to track width overrides starting track width
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/8797
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/8797
2021-12-15 23:32:48 +00:00
Tomasz Wlostowski 97c2627de6 router: added missing case items (fixes regression in component dragging)
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/10010
2021-12-15 23:18:55 +01:00