Commit Graph

1270 Commits

Author SHA1 Message Date
Jon Evans cf53b053a1 Improve handling of dragging around locked segments
Locked segments now are not modified if they weren't the start item.
If a locked segment is the start item, it is automatically unlocked.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/9145
2021-09-21 22:38:53 -04:00
Seth Hillbrand 22a29a42cf Generalize net DP matching
The requirement of 1-2 numbers following P/N or +/- was arbitrary and
not needed.  We also add the _ to allowable suffixes to permit DP
matching of auto-renamed nets
2021-09-20 15:30:47 -07:00
Roberto Fernandez Bautista dc1fd3d9ba PNS test app: Add logging information for curved track routing 2021-09-20 20:35:24 +01:00
Jon Evans 4d478d6f17 Fix ordering of initialization in length tuner
Fixes https://gitlab.com/kicad/code/kicad/-/issues/9161
2021-09-14 07:48:02 -04:00
Jeff Young fdfecf5932 Don't push view control settings to the previous active tool.
See further comments in bug report.

Fixes https://gitlab.com/kicad/code/kicad/issues/9147
2021-09-13 13:28:05 +01:00
Seth Hillbrand 092cdc0bb5 Move 45° limit to hotkey
This assigns the "Tab" key to a general pcbnew 45° limitation.  Limit
can be enabled/disabled using context menu as well.

Removed the user preference for 45° limitation on graphic lines as that
is overlapping with the general limitation, which is not an editing
preference so much as a temporary adjustment to tool action.

Related to https://gitlab.com/kicad/code/kicad/-/issues/8490
2021-09-05 13:42:51 -07:00
Tomasz Wlostowski a03b6f6fc9 router: use tail start point when saving the FIXED_TAIL
fixes: https://gitlab.com/kicad/code/kicad/-/issues/8771
2021-08-25 00:36:34 +02:00
Roberto Fernandez Bautista 4c17b7ab46 WALKAROUND::Route Check if path is empty before stepping
singleStep expects a path with at least one point.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/9020
2021-08-24 20:17:19 +01:00
Jon Evans 09ea630d8e Don't log a potentially invalidated item
Fixes https://gitlab.com/kicad/code/kicad/-/issues/9006
2021-08-21 12:24:41 -04:00
Roberto Fernandez Bautista aa67abb681 PNS::NODE Use PointCount instead of calculating segment index manually
There is no need to manually calculate the segment index - we know
that the last point that was added is the start point of the segment.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8945
2021-08-13 19:09:33 +01:00
Roberto Fernandez Bautista 0120c5fa4b PNS Length Tuning: Recover original arc tracks after tuning 2021-08-09 21:10:33 +01:00
Jon Evans e91218b876 PNS: don't mark holes only if there's also a solid violation
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8874
2021-08-08 15:41:39 -04:00
jean-pierre charras fa82fcb809 Router tool: ensure a internal layer exists when placing a microvia.
Fix also a minor compil warning.
Fixes #8931
https://gitlab.com/kicad/code/kicad/issues/8931
2021-08-07 20:29:49 +02:00
Jeff Young c51b1dad72 Generalize infobar MESSAGE_TYPE handling and use for DRC errors.
Fixes https://gitlab.com/kicad/code/kicad/issues/8782
2021-08-01 21:51:39 +01:00
Jeff Young f221220fe2 Rename layer ids file.
It hasn't had anything to do with colors or visibility for some time
now.
2021-07-29 16:03:25 +01:00
Wayne Stambaugh 78e5e98ea0 Pass VECTOR2I objects by reference instead of on the stack. 2021-07-27 08:41:27 -04:00
Jeff Young 0fb864d596 Pull some name changes back from 7.0 to ease merging. 2021-07-21 20:58:59 +01:00
Wayne Stambaugh cf00319c85 More NULL expunging. 2021-07-20 07:27:18 -04:00
Jon Evans e61b1f03b8 PNS: Discard duplicate tracks in FixRoute
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8737
2021-07-13 21:13:40 -04:00
Seth Hillbrand ff2e470a6e Remove virtual items from clearance calculations
Extends 3ea970f8c9 to ensure that virtual items do not interfere with
DRC calculations while routing

Fixes https://gitlab.com/kicad/code/kicad/issues/8788
2021-07-13 16:10:36 -07:00
Seth Hillbrand 3ea970f8c9 Don't add virtual items to the display
By definition virtual vias should only exist in the backend, not
affecting users

Fixes https://gitlab.com/kicad/code/kicad/issues/8788
2021-07-13 15:52:41 -07:00
luz paz 0446d35f0d Fix source comment/doc typos (follow-up)
Found via `codespell -q 3 -S *.po,./thirdparty -L aactual,acount,aline,alocation,alog,anormal,anumber,aother,apoints,aparent,aray,dout,einstance,modul,ot,overide,serie,te,,tesselate,tesselator,tht`
2021-07-13 10:48:17 +00:00
Jeff Young 2bd735b631 A little more safety in setting the router idle mode.
Fixes https://gitlab.com/kicad/code/kicad/issues/8765
2021-07-09 10:26:12 +01:00
Jon Evans 00f1b609c4 PNS: Don't run fanout cleanup when manually forced
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8724
2021-07-08 19:56:42 -04:00
Wayne Stambaugh 65c7958293 Coverity issue fixes.
Issues #331869, #331875, #332203, #332159, #332171, #332180, and #332648.
2021-07-08 08:33:08 -04:00
Jon Evans edc2be9018 Update width status when user choice changes
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8265
2021-07-07 21:26:21 -04:00
Roberto Fernandez Bautista 4207165c26 Fix PNS deleting too many segments
Don't exit the loop pre-emptively. Need to update lastLink.
2021-07-07 19:54:19 +01:00
Roberto Fernandez Bautista cda26bd57b SHAPE_LINE_CHAIN::NextShape instead of explicitly calculating indices
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8738
2021-07-07 19:46:47 +01:00
Roberto Fernandez Bautista 81fa40d659 Code style: Fix missing space 2021-07-05 20:39:42 +01:00
Roberto Fernandez Bautista 04ff8cde5e Drag & Fillet Tracks: Ignore mouse up / click events until move / drag
Ensures that any click/mouse up events generated after clicking "OK"
in the "Override locks" dialog are ignored.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8123
2021-07-05 20:29:25 +01:00
Jon Evans e0146f73b9 PNS: Pick up complete lines between pads when dragging components
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7614
2021-07-03 20:00:54 -04:00
Jon Evans 91ea4a0569 PNS: Pick up segments directly between pads when dragging components
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7601
2021-07-03 19:50:04 -04:00
Roberto Fernandez Bautista 3f73d8c2b5 SHAPE_LINE_CHAIN::Area() should always be positive
The algorithm relied on the assumption that the points were
ordered anti-clockwise. When ordered in a clockwise fashion, the
result was correct but negative.

Refer to https://www.mathopenref.com/coordpolygonarea2.html
for more information.
2021-07-03 19:37:50 +00:00
Roberto Fernandez Bautista c3051ba48a Refactor SHAPE_LINE_CHAIN to allow two shapes per point
m_shapes now has two possible indices. The first one is populated if
the point is associated with an arc and the second index is populated
if the point is shared between two arcs.
2021-07-03 19:37:50 +00:00
Jon Evans 252bf76452 Fix off-by-one in AssembleTuningPath 2021-07-03 14:37:52 -04:00
Jon Evans 3c59e452d6 PNS: Set tuned path correctly in skew tuner
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8708
2021-07-03 14:06:30 -04:00
Jon Evans 277bf2b719 Add feedback showing current router state to the message panel
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8265
2021-07-03 13:21:51 -04:00
Jeff Young 400f4ae506 Code cleanup. 2021-07-02 15:54:26 +01:00
Jeff Young 780a8a5154 Fix another place disallowing internal microvias.
Fixes https://gitlab.com/kicad/code/kicad/issues/8716
2021-07-02 15:54:26 +01:00
jean-pierre charras 740b028180 pns_line_placer: do not constraint the 45deg of current segment in free angle mode.
Fixes #8691
https://gitlab.com/kicad/code/kicad/issues/8691
2021-07-01 16:38:31 +02:00
Roberto Fernandez Bautista 04b71f5167 Meander minimum spacing can be equal to track width + minimum clearance
2x track width was too constraining in some scenarios

Also better wording "Min Spacing" to indicate to the user that
the actual spacing could be larger if there are any constraints.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8172
2021-06-29 19:30:01 +01:00
Roberto Fernandez Bautista e402563087 Don't recalculate meander spacing. Use constrained value instead.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/1776
2021-06-29 19:30:01 +01:00
Jeff Young c159500101 Remove nags and make Sel Layer and add via commands uniform.
Fixes https://gitlab.com/kicad/code/kicad/issues/8686
2021-06-28 19:17:01 +01:00
Jeff Young 0dfb5fcaf9 Error message cleanup.
wxString::Format is redundant in a wxLogXXX call.
Error messages should generally be translatable.
Error messages should use generally consistent sentence forms.
2021-06-26 22:53:24 +01:00
Jon Evans a7eb611744 Fix leftover vias in shove mode
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8597
2021-06-23 22:13:35 -04:00
Jeff Young c6606a0582 Hook up delete to undo last segment when routing.
Fixes https://gitlab.com/kicad/code/kicad/issues/8362
2021-06-19 11:37:20 +01:00
Jeff Young 096e342386 Prefix TRACK, ARC and VIA. 2021-06-11 22:07:02 +01:00
luz paz f968fc8719 Fix source comment / documentation typos 2021-06-09 19:32:58 +00:00
Marek Roszko d946d6e68f Cleanup some pgm_base.h includes 2021-06-08 21:56:00 -04:00
Marek Roszko 6e01ce84b9 Break out eda_item_flags.h, fix the typedef to std::uint32_t, fix some signed vars 2021-06-08 19:12:30 -04:00
Jon Evans 75ce97e260 Fix the last cause of duplicate segments when completing a route
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6863
2021-06-07 20:34:09 -04:00
Seth Hillbrand d4edc70f65 Remove magic numbers where possible
Constant scales will be pre-calculated during compilation, so we can
leave the actual formula in place without penalty
2021-06-07 13:56:31 -07:00
Jon Evans 49c5130123 PNS: Implement final cleanup pass for redundant colinear segs
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6863
2021-06-06 21:52:35 -04:00
Jon Evans 3c6b98a0d5 PNS: preserve auto-detected track width when changing via sizes
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8046
2021-06-06 20:18:09 -04:00
Jon Evans 99710aba48 PNS: use slightly less greedy algo to reset the mouse trail 2021-06-06 19:47:52 -04:00
Jon Evans 6cb8154ec0 PNS: Remove code that broke width changes during placement
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8334
2021-06-06 19:21:52 -04:00
Jon Evans 6789dac20b PNS: Keep most recent good placement around for a rainy day
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8562
2021-06-06 18:56:33 -04:00
Jon Evans c9bc45f7ed PNS: Limit the maximum walkaround distance factor
The constant chosen is somewhat arbitrary and may need
further tuning or a more complex algorithm, but in general
this will prevent churning when solutions can't be found or
a solution can be found but it is unrealistic (going around
the entire board)

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8558
2021-06-06 16:03:03 -04:00
Jon Evans d32b9c1c25 Use debug group for line placer debug 2021-06-06 15:44:53 -04:00
Jon Evans f5185f6927 Revert part of the anti-churn change, it causes bad side-effects
Further performance tuning could be useful but the part that
remains helps the most when hugging in large designs
2021-06-06 15:44:53 -04:00
Marek Roszko 8377ebb0e1 Fix msvc warnings 2021-06-06 15:30:31 -04:00
Marek Roszko 10e60acf34 Clean up including of board_design_settings.h 2021-06-06 15:03:42 -04:00
Jon Evans 5349f47f95 PNS: Prevent walkaround churn in unsolvable situations
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8558
2021-06-06 14:57:52 -04:00
Jon Evans 3475d0cebd PNS: Grab start item based on clearance if no direct hits found
Fixes annoying "routing start point violates DRC" messages when
entering the router from the hotkey and not directly over a track.
2021-06-06 14:57:52 -04:00
Jon Evans 17da050e69 Improve walkaround results when last point is inside the hull
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8563
2021-06-06 12:55:32 -04:00
Jon Evans be61bf29dd Use more accurate hull shapes for round solids
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8561
2021-06-06 09:53:51 -04:00
Marek Roszko b610b905fc Cleanup track.h includes 2021-06-06 09:06:55 -04:00
Jon Evans 3b7480c1c1 PNS: Invalidate start/end items after finishing a route
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8555
2021-06-06 08:52:39 -04:00
Tomasz Wlostowski ab04e24f9a router: rhMarkObstacles should return a correct error status
Long story short: a few days ago I fixed error handling in routeStep(), so it actually started to recognize the wrong error status returned
by rhMarkObstacles() and think that the trace is always incorrect.

fixes: https://gitlab.com/kicad/code/kicad/-/issues/8557
2021-06-04 23:58:56 +02:00
Jeff Young 00791e1e37 Fix compile issues on clangd. 2021-06-03 23:41:06 +01:00
Marek Roszko 1c1ba25ffd Use char_str instead of c_str in previous commit 2021-06-03 18:13:35 -04:00
Marek Roszko daf510344f Fix build error due to pns changes 2021-06-03 18:05:48 -04:00
Tomasz Wlostowski 63fc7a1908 router: support for drag/walkaround/shove for joints between lines of different widths.
fixes: https://gitlab.com/kicad/code/kicad/-/issues/1773
2021-06-03 22:44:53 +02:00
Tomasz Wlostowski af26eab5fb router: even more debug in SHOVE 2021-06-03 22:44:53 +02:00
Tomasz Wlostowski a744857267 router: fix array out-of-bound error in HullIntersection()
fixes: https://gitlab.com/kicad/code/kicad/-/issues/8538
2021-06-03 22:44:53 +02:00
Tomasz Wlostowski 3e98c44636 router: LOGGER now stores UUIDs, not pointers to BOARD_ITEMs.
Caused occasional crashes when saving the debug event log, as some of the BOARD_ITEMS could have been deleted before SaveLog call.
2021-06-03 22:44:53 +02:00
Tomasz Wlostowski e5e588ebba router: temporarily export LINE::Walkaround() debug global variables 2021-06-03 22:44:53 +02:00
Tomasz Wlostowski 70ed5c1ae8 router: introduce concept of 'virtual' vias as a base for shoving/dragging joints of lines of different widths. 2021-06-03 22:44:53 +02:00
Ian McInerney 4f05262705 Cleanup includes in board.h and footprint.h 2021-06-03 20:19:52 +01:00
Marek Roszko 4df3cb912d Remove another leaky wx/log.h header 2021-06-03 08:11:15 -04:00
Marek Roszko cf2bb5692a Remove the wxLog calls from math/util.h for now
This was leaking windows headers and partial wx headers to 1084 compilation units......
This also means math/util.h is leaking to 1084 compilation units which seems a bit high too.
2021-06-01 18:44:22 -04:00
Jon Evans 247da631f9 Revert "Fix typo and clean up leftover tracks"
This reverts commit ed66c0f14d.

Revert "Clean up co-linear tracks after finishing routing"

This reverts commit 1a102f03c0.

More complex solution needed

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8526
2021-06-01 11:18:00 -04:00
Jon Evans 1a102f03c0 Clean up co-linear tracks after finishing routing
This involved adding some extra infrastructure to be able
to handle the case where a track that is sitting in the
router's commit waiting to be added to the board actually
needs to be deleted instead.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8419
2021-05-31 17:36:38 -04:00
Marek Roszko 382dca4e6f Fix uninitialized member warnings
Based on PVS Studio report
2021-05-30 20:01:01 -04:00
Tomasz Wlostowski 67f0bbc6d7 router: fixed crash in HullIntersection() when the path has 0 or 1 points.
fixes: 8515
2021-05-31 00:20:32 +02:00
Tomasz Wlostowski 614787caae router: clear head line geometry if current head routing failed + small improvement to follow-mouse optimization.
Also added a lot of verbosity for the pns-log-viewer tool.

Fixes: 8511
2021-05-31 00:18:42 +02:00
Tomasz Wlostowski dfd80e077c router: fix another corner case in LINE::Walkaround() (duplicated vertex triggered by feeding a closed loop as the input path)
fixes: 1775
2021-05-31 00:17:12 +02:00
Jon Evans 0da85ded2f PNS: Fix diff pair handling of microvias as start items
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8514
2021-05-30 15:51:28 -04:00
Tomasz Wlostowski fcb89b99a3 router: walkaround algo should not copy the previous via position when the current iteration via placement fails.
fixes: 7827
2021-05-30 00:35:58 +02:00
Tomasz Wlostowski af2e163890 router: annotate source locations of WALKAROUND debug items 2021-05-30 00:35:54 +02:00
Jon Evans 3eb5a484e1 PNS: Don't clip tuning paths to pads on other layers
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8504
2021-05-29 15:52:44 -04:00
Jon Evans 28f17c3ae6 PNS: Prevent wrong clearance being cached for new diff pairs
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8377
2021-05-29 13:31:17 -04:00
Jon Evans 85ca85652d Do not add debug items to view if debug flag isn't enabled
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8510
2021-05-29 12:40:24 -04:00
Jon Evans bd59da3642 PNS: Local min distance has a minimum points requirement
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8510
2021-05-29 12:40:24 -04:00
Tomasz Wlostowski ebd957b08e router: rework router's debugging infrastructure to be more compatibile with the 'qa/pns/pns-log-viewer' tool.
The log viewer tool lets you inspect all the intermediate stages of the routing algorithms. This patch:
- Adds source location tracking of the debug calls (need to use the PNS_DBG macro, sorry)
- Moves some wxLogTrace calls to DEBUG_DECORATOR::Message() so that messages can be displayed alongside the corresponding geometric shapes
2021-05-29 00:13:24 +02:00
Tomasz Wlostowski 132eb53a40 router: clean some debug clutter 2021-05-29 00:13:24 +02:00
Tomasz Wlostowski b3caa3c4d4 router: fix ordering of colliding hulls in NODE::NearestObstacle()
Replaced the generic SHAPE_LINE_CHAIN::Intersect() with PNS::HullIntersection() which correctly rejects
'non-penetrating' intersections.
2021-05-29 00:13:24 +02:00
Tomasz Wlostowski e66bbfd1ec router: improve the feel of the walkaround algorithm
Makes walkaround more 'huggy' - the trace being routed sticks to obstacles
instead of jumping around in uncontrollable way.
2021-05-29 00:13:24 +02:00
Tomasz Wlostowski 8148b5d81f router: improvements in LINE::Walkaround()
- Fix walk failure if the input path starts on the hull boundary
  (happens very often during tight walkaround)
- Input line can have a loop at the end now. Such condition happens when the routing
  destination point lies inside the hull of a colliding primitive.
2021-05-29 00:13:24 +02:00
Tomasz Wlostowski d2ec3fc4ed router: P&S-specific hull/line interection function that correctly rejects segments/vertices that only touch the hull polygons without penetrating them 2021-05-29 00:13:24 +02:00
Tomasz Wlostowski 8c4361bbc6 router: adapt to new SHAPE_LINE_CHAIN::INTERSECTIONS structure 2021-05-29 00:13:24 +02:00
Jeff Young 5c9a73aa5e Correct position for grid even when we're not snapping to a point.
Fixes https://gitlab.com/kicad/code/kicad/issues/8125
2021-05-25 21:57:19 +01:00
Jeff Young 4c69a74505 Force layers visible when routing on them.
Fixes https://gitlab.com/kicad/code/kicad/issues/8432
2021-05-16 11:18:31 +01:00
david-beinder 75f49ba1b6 Add length tuner settings to toolbar context menu 2021-05-12 02:34:52 +00:00
Jon Evans bc6b9b527a Allow stackup height to be excluded from length calculations
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8384
2021-05-10 22:11:58 -04:00
Jeff Young 7356f9568d Move grid disable modifier from ALT to CTRL.
Also had to move the H/V/45 disable modifier from CTRL to SHIFT.

Fixes https://gitlab.com/kicad/code/kicad/issues/8124
2021-05-09 20:17:40 +01:00
Jon Evans 1a45d9474b Don't show commands that cancel routing when routing is in progress
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8363
2021-05-08 14:55:02 -04:00
Marek Roszko 03cf2b517f Enum class PAD_ATTR_T
Renamed such that python stays the same
2021-05-01 10:51:54 -04:00
Marek Roszko e20562b09b Some cleanup 2021-05-01 10:37:20 -04:00
Marek Roszko 21fde9b629 enum class PCB_SHAPE_TYPE_T 2021-04-30 22:36:12 -04:00
Tomasz Wlostowski a433451bd8 router: 'root line' tracking in the SHOVE algorithm. See comments for detailed explanation. 2021-04-27 14:13:16 +02:00
Tomasz Wlostowski 3a8744d054 router: introduce concept of a root lines in the OPTIMIZER.
By 'root lines' we mean the oldest traceable ancestor of each track moved by the router
(i.e. after shoving for a while, the root of each shoved line is it's latest non-shoved version).

With this we can teach the OPTIMIZER more tricks, such as the LIMIT_CORNER_COUNT constraint. It ensures
the results of the optimization will not be less cornery than the original line, reducing the feeling
of the optimizer being too intrusive.
2021-04-27 14:13:16 +02:00
Tomasz Wlostowski 76f8861e6e router: revert Seth's arc adjustment in StartDragging().
Fixes picking the last segment instead of the last vertex to drag (when one is requested).
I didn't notice any behaviour change of the dragger wrs to arcs.
2021-04-27 14:13:16 +02:00
jean-pierre charras e27733587d Fix 2 minor Coverity warnings. 2021-04-23 19:57:36 +02:00
Jonathan Haas 075bd788eb Remove unused OBSTACLE_VISITOR::m_extraClearance 2021-04-23 01:53:09 +00:00
Ian McInerney ecd9bf696e Be consistent about using nullptr instead of 0
0 can be too easily overloaded into an int, so ensure we use nullptr
when we mean pointers.
2021-04-22 22:20:34 +01:00
Jon Evans cf47d665ea PNS: Dragged line needs to retain width
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8246
2021-04-22 09:04:41 -04:00
Jon Evans 9b1890606d PNS: Do not allow resolved optimal values to go below board minimums 2021-04-21 22:43:26 -04:00
Jon Evans cbd7d698a9 Fix diff pair error message suffix suggestions
We accept diff pairs that end in N/P, no underscore required
2021-04-20 21:08:34 -04:00
Jon Evans 2535daf661 PNS: Account for via stack height in diff pair length tuner
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8256
2021-04-20 19:31:10 -04:00
Jon Evans dd828bd964 PNS: Bring back original Highlight Collisions behavior
From discussion with Tom, Jeff, and Wayne, it appears as though
we all agreed that Highlight Collisions should behave like it
did in 5.1, which is to say, always just highlight collisions,
never prevent them.  The Allow DRC Violations checkbox just
controls whether or not you can fix/commit the head line if it
has violations; you are not prevented from moving the head
line to violating positions in any case.

Right now, there does not seem to be much demand for a separate
"Stop at First Obstacle" mode since Walkaround basically does that
but better, but we agreed that if there is demand for it in the
future, it should be implemented as a new router mode rather than
a behavior of Highlight Collisions mode controlled by the Allow
DRC Violations checkbox.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/7828
2021-04-18 21:01:07 -04:00
Tomasz Wlostowski 4538d78828 router: fix via shoving regression. 2021-04-19 00:43:30 +02:00
Tomasz Wlostowski 57de83897a router: VIA SetDrill() and SetPosition() must update the hole shape too. 2021-04-19 00:43:15 +02:00
Jon Evans ec6995697d PNS: even more free performance
If this doesn't work, we have bigger problems
2021-04-18 09:50:06 -04:00
Jon Evans 6425ad4118 PNS: Fix propagateDpHeadForces obstacle calculation
Using a synthetic via here doesn't quite let us use VIA::PushoutForce
because it will use the wrong clearance, and also doesn't quite have
the logic we want.  I am not familiar enough with PushoutForce to know
if its logic is a bug in other cases, so instead I just brought in the
parts of its algorithm that are needed here.

Additionally, we prevent pushing more than once from a given obstacle,
which causes walkaround to be more successful when routing diff pairs
against a large collider such as a keepout area.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8232
2021-04-17 22:37:30 -04:00
Jon Evans 5974446523 PNS: Let's make the r-tree work for us
I'm not sure where the magic number of "4x worst" came from, but it's
been around forever.  This is extremely inefficient as it negates much
of the power of r-tree filtering in dense designs.  If we really trusted
it, we could set this just to worstClearance.  Keeping it above the worst
clearance by a little bit seems to provide enough of a speed improvement
to resolve the test cases I have, so I'll go with that for now.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/7777
2021-04-17 21:37:11 -04:00
Jon Evans 1d7e5a0443 Fix merge error that prevented a previous change from working 2021-04-14 23:30:16 -04:00
Jon Evans 268d570941 PNS: keep last valid diff pair trace as current state
This allows fixing/committing what is on screen even if the current
cursor position doesn't have a valid solution (the old behavior
would result in the current trace disappearing)
2021-04-14 23:21:10 -04:00
Jon Evans c829dba88e PNS: Reduce minimum distance to start turn in diff pair placer
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8193
2021-04-14 23:21:10 -04:00
Jon Evans cac4d70154 PNS: Respect fix-all in diff pair placer 2021-04-14 23:21:10 -04:00
Jon Evans 296a9df530 PNS: Pick up diff pair starting width from continuation track 2021-04-12 23:10:15 -04:00
Jon Evans 1d9ca181a2 PNS: Use existing seg direction if both DP segs are parallel 2021-04-12 22:34:13 -04:00
Jon Evans 311cde0984 Safety check suggested by Coverity 2021-04-12 20:42:50 -04:00
Jon Evans 2aa5e568e8 Refactoring 2021-04-12 20:40:05 -04:00
Jon Evans 73fb85a352 PNS: Calculate diff pair primitive orientation using anchors only
The previous method fails if the primitive is an expanding or
contracting pair (diagonals going inward or outward) resulting in
incorrect orientation, which then leads to incorrect candidate
gateways being generated and no solution found.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8185
2021-04-12 20:34:44 -04:00
Jon Evans 715c61ac9f PNS: Fix yet more arc edge cases
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8150
2021-04-12 19:59:55 -04:00
Jon Evans 49a91414d7 PNS: Apply co-linear seg merging to drag operations 2021-04-11 22:32:11 -04:00
Jon Evans 1c431d9929 PNS: Fix some off-by-one errors with arc dragging 2021-04-11 22:12:53 -04:00
Jon Evans a26fc6d65d PNS: Fix several issues with arc dragging
Do not merge vertices that belong to different arcs
Fix start segment identification after arcs
Fix free-angle drag after arc

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8173
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8150
2021-04-11 17:56:40 -04:00
Jon Evans 7ba110bd77 PNS: Fix dragging of segments with arcs in line 2021-04-11 10:18:57 -04:00
Thomas Pointhuber a30894e5a1 Allow SHAPE_LINE_CHAIN and SHAPE_ARC to be mirrored using a SEG 2021-04-11 13:27:25 +00:00
Thomas Pointhuber fe8fbf1d5d Use arcs instead of line approximation for Miter shape
TODO:

* The resulting line chain is broken with the arcs, and
this appears to be some subsequent issue I was not able to pin down.
* The requirement of a correction factor is not clear to me
2021-04-11 13:27:25 +00:00
Jon Evans 5c448057c8 PNS: Prevent state flicker when starting drag 2021-04-10 16:31:39 -04:00
Jon Evans 7784d7cb12 PNS: Fix visible area restriction
VIEW::GetBoundary() returns the entire view area, not the visible area.
Surprisingly, we had no API for this, so I added one.

Also, changed the dragger behavior to toggle between optimizing just the
modified area and optimizing the visible area, i.e. we will now never
optimize off-screen portions of the dragged track.
2021-04-10 16:13:08 -04:00
Jon Evans 94afdcb92a PNS: Allow control of area-restricted drag optimization
CHANGED: The interactive router settings now include a switch to
         enable or disable optimization of the entire dragged track,
         which is now disabled by default.  When enabled, the router
         will reroute the entire track (from the dragged segment to
         the closest pad/via in each direction) to be more optimal.
         When disabled, only the area around the dragged segment
         will be modified.

CHANGED: The "optimizer effort" slider is removed from the interactive
         router settings dialog, as this setting did not have any
         meaningful impact in most cases and was a source of confusion.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/5918
2021-04-10 15:17:39 -04:00
Jeff Young dc0cf3b802 Clean up a confusing API.
AllowDRCViolations is kept in any mode as a *setting*, but only
controls router behaviour when the mode is mark obstacles.

Fixes https://gitlab.com/kicad/code/kicad/issues/7795
2021-04-10 11:08:02 +01:00
Jon Evans d878cbddbc PNS: a few forgotten cleanup items 2021-04-07 23:34:45 -04:00
Jon Evans c9040a5c53 PNS: fix some weirdness identified by PVS 2021-04-07 23:16:56 -04:00
Jon Evans d4957b112e PNS: Keep last valid drag solution in the node
Fixes https://gitlab.com/kicad/code/kicad/-/issues/5450
2021-04-07 21:59:23 -04:00
Jon Evans 26835f582c Some situations require more than one dummy
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7820
2021-04-07 21:30:18 -04:00
Jon Evans 9432484394 PNS: Find origin segment correctly when arcs are present
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8139
2021-04-07 20:28:30 -04:00
Jon Evans 9f957d3e08 Fix crash when attempting to tune discontinuous lines
Also correctly find the tuning path through arcs

https://gitlab.com/kicad/code/kicad/-/issues/8131
2021-04-06 09:07:11 -04:00
david-beinder b2f788adc1 PNS: Fix UseConnectedTrackWidth when starting from ARCs 2021-04-06 01:27:13 +00:00
Jon Evans e46c9d35ac Add undo/redo handling to length tuner event loop
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8129
2021-04-05 19:58:14 -04:00
Jon Evans 24cd174a23 Don't dereference a possibly-invalid optional 2021-04-05 19:34:57 -04:00
Jon Evans a6c3d74a73 Pass active layer to StartRouting in length tuner
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7857
2021-04-04 21:51:54 -04:00
Jon Evans a24bc34b66 Better colors for length tuning popup in dark mode 2021-04-04 20:33:59 -04:00
Jon Evans c7ecb51f77 Update PNS length tuning algorithm to match the new BOARD algorithm
Now tracks inside pads are optimized to give a more accurate length.
Also, the start/end of the assembled line is used to identify the right
pad joints for pad-to-die length calculation.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/4204
Fixes https://gitlab.com/kicad/code/kicad/-/issues/1765
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6877
2021-04-04 20:27:22 -04:00
Jon Evans cdfb014ab6 CHANGED: Account for via height in track length calculations 2021-04-04 13:59:18 -04:00
Jon Evans 6b24abac8f PNS: Don't snap to end items if snapping is disabled by modifier key
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8033
2021-04-04 10:22:23 -04:00
Jon Evans a8896ebd73 Don't show leading ratline for unconnected net
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8040
2021-04-02 20:29:25 -04:00
Jeff Young f88d39b4f0 Fix state issue in router's switch layer handling.
Fixes https://gitlab.com/kicad/code/kicad/issues/7590
2021-04-01 18:10:04 +01:00
Jeff Young 8cb6f15687 Warn when diff pair router can't start due to too-small-gap.
Fixes https://gitlab.com/kicad/code/kicad/issues/7795
2021-03-30 19:49:23 +01:00
Jon Evans 78a60e9dfb PNS: Put polygon error outside pad shapes
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7672
2021-03-29 19:49:59 -04:00
Jon Evans 6cbc3fb97d Fix a minor inconsistency between router and DRC
Also make sure collision highlighting runs at the starting
location of a drag.

See: https://gitlab.com/kicad/code/kicad/-/issues/7672
2021-03-29 19:41:17 -04:00
Jon Evans 8be9832153 PNS: Don't highlight Net 0 (the unconnected net)
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8040
2021-03-29 17:45:07 -04:00
Jon Evans 132ec37b56 Handle arc in buildHullForPrimitiveShape
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8008
2021-03-25 21:25:30 -04:00
Jeff Young 8be213e36f Trim includes (and use consistent terminology in error messages). 2021-03-21 20:15:47 +00:00
Jon Evans 5e0b65c3a8 Change wording of corner rounding action
Fixes https://gitlab.com/kicad/code/kicad/-/issues/4505
2021-03-21 15:55:56 -04:00
Jeff Young cad1cb0262 Improve naming. 2021-03-16 12:07:06 +00:00
Jon Evans 18037e2f65 Rework bitmap system to load from archived PNGs
Bitmaps are now identified by an enum class instead of by pointers.
Bitmap loading and caching is now handled by a class in common, and
we no longer compile most bitmaps into the binary, so there is no
longer a bitmaps static library.

Instead, bitmaps are archived to a .tar.gz file which is installed
in ${KICAD_DATA}/resources/images.tar.gz

The source PNGs are checked in to Git as the original CPP files were,
so that people can build without the required dependencies to convert
SVGs to PNGs.

Initial support is also added for dark theme icons, although this
is not yet exposed in the GUI.

Stubs are present for multi-resolution image resources, but this is
not fully-baked yet and could use some refinement.
2021-03-11 08:37:35 -05:00
Jon Evans 720147d272 Remove transitive inclusion of bitmaps.h 2021-03-07 16:08:57 -05:00
david-beinder df99ee39d9 PNS: new through vias should span all copper layers
Fixes https://gitlab.com/kicad/code/kicad/issues/7576
2021-03-07 17:58:43 +00:00
Wayne Stambaugh 79a9d69ff5 Coverity fixes for issues 314755, 316287, 324536, 324539, and 324539. 2021-03-02 08:10:37 -05:00
Jeff Young d06e8ef01c Honour pre-defined-size selections for diff pairs.
Fixes https://gitlab.com/kicad/code/kicad/issues/7759
2021-03-02 12:12:05 +00:00
Jon Evans d269778cd4 PNS: disable smart pads in walkaround if posture is forced
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7710
2021-02-27 13:48:01 -05:00
Jeff Young b36e1c741d Fix insidious bug which resets layer of SOLID when marking collision.
It's supposed to be setting the layer of the collsion display object,
not the host object, but there's a typo.

Fixes https://gitlab.com/kicad/code/kicad/issues/7712
2021-02-25 23:39:48 +00:00
Jeff Young 75032f3acd Use the more-constrained layer when running rules.
Fixes https://gitlab.com/kicad/code/kicad/issues/7639
2021-02-25 22:58:07 +00:00
Tomasz Wlostowski 87ea540953 Fix whitespace errors 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski c79610e132 router: post-rebase fixes 2021-02-25 17:18:23 +01:00
Marek Roszko 6948cdd8ef router: Fix return type within pointInside2 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 9bdfc13155 router: improve locality of post-shove optimization
Fixes: #4359
2021-02-25 17:18:23 +01:00
Tomasz Wlostowski e1d4bb777c router: use new LINE::Walkaround in the walkaround algo 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 045d02f818 router: add strict/loose area restriction constraint. WIP 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 24574aa2f5 router: first insert intersections, then build graph in Walkaround() 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 61e75a838b router: replace large stack variables with std::array 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 028f209126 router: more robust LINE::Walkaround() implementation 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski e9c55cd0e3 router: if the drag anchor is not reachable by the mouse, use the closest point on dragged trace for optimizer restriction
Fixes: #4056
2021-02-25 17:18:23 +01:00
Tomasz Wlostowski a141ed3444 router: feed view size change events to the router engine 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 12dfb541fc router: expose current view area to the router algorithms so that the optimizer could know not to mess with traces/vias not currently visible to the user (wip) 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 2831c7d24c router: fix compile error in DRAGGER 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski b67e5768a6 router: feature to save debug event log & board dump for easier recreation of router bugs and misbehaviours 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski ebdc68ac1d router: correctly handle line width in PREVIEW_ITEMs 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 34c037684b router: partially migrate SHOVE algorithm to use new DEBUG_DECORATOR 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 0e6cf3f56e router: fix board edge clearance queries
Fixes: #7254
2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 4574f52eac router: DRAGGER::CurrentNode() should always return non-null value 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski e221b11e3b GRID_HELPER: fixed arithmetic issue in segment snap distance check disguised as 'excessive optimization' by the dragger in the router 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski 325300bd76 router: don't use compound pad shapes if pad contains a single primitive shape 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski a4bd2ad8c6 router: drag in walkaround mode now works 2021-02-25 17:18:23 +01:00
Tomasz Wlostowski f84836f51e router: factor out POSTURE_SOLVER to more generic MOUSE_TRAIL_TRACER class 2021-02-25 17:18:23 +01:00