This introduces a new util function in geometry_utils which snaps a vector
to axes or 45 degree lines. This can be used whenever you want to
snap a vector to these angles, but still want it to stay on a grid.
This snapping is used for the dimension tool and the ruler tool.
This is substantially simpler for two-point tools that the method
used by the line tool, which uses DIRECTION_45.
Fixes: lp:1780826
https://bugs.launchpad.net/kicad/+bug/1780826
Also includes a bunch of changes to simplifiy the terminology
and unify the copper, non-copper and keepout versions.
Also removes some legacy features:
Removes contol for fill method. If the fill method is currently
segments the dialog will ask if you want to convert to polygons
on OK.
Removes control of boundary resolution. We've done this with trig
since 5.0.
(cherry picked from commit 487aaeb)
... and GetMsgPanelInfo.
Step 4 in the g_UserUnit eradication effort.
Also removes a couple of conversion routines that were close
enough to extinction.
(cherry picked from commit c75da51)
This not only reduces the number of different mechanisms, but
will also reduce (yet again) the number of Clarify Selection
pop-ups (because the CLIENT_SELECTION_FILTER runs before the
pop-up, while SanitizePads ran after it).
Fixes: lp:1710451
* https://bugs.launchpad.net/kicad/+bug/1710451
(cherry picked from commit e50a993)
The general idea is to support user-units inheritance. The
UNIT_BINDER allows wrapped controls to inherit units from their
parent dialog, while KEYWAY_HOLDER and DIALOG_SHIM allow child
KEYWAY_HOLDERs or DIALOG_SHIMs to inherit units from their
parent.
The GetUserUnits() method signature has to move to KEYWAY_HOLDER
rather than KEYWAY_PLAYER (where it makes more sense) as it’s the
only common ancestor of KEYWAY_PLAYER and DIALOG_SHIM.
As long as we'll be using the UNIT_BINDER more widely, it also
makes sense to move evaluation and validation into it.
This commit also provides eeschema’s DIALOG_LABEL_EDITOR and
pcbnew’s DIALOG_TRACK_VIA_PROPERTIES and DIALOG_SET_GRID as
models of how to use the new user-units inheritance, eval, and
validation.
Fixes: lp:593795
* https://bugs.launchpad.net/kicad/+bug/593795
(cherry picked from commit c8bc53e)
The old item pointers (which aren't safe to keep around) were
removed in favour of opaque references (void*) which are then
compared against existing items when needed.
Also improves brightening by brightening the whole footprint
(ie: its pads, drawings, reference and value) rather than just
its target cross.
(cherry picked from commit 30e90b0)
The local ratsnest needs to be able to hide as well as show visibility.
Clicking a module will toggle the visibility while clicking off all
modules clears the local ratsnest display.
Fixes: lp:1531332
* https://bugs.launchpad.net/kicad/+bug/1531332
The assert in the title line verifies that an item does not belong to
any DLIST when it is being added to one. Items in clipboard are already
owned by DLISTs, therefore they need to be removed from the original
DLISTs before being added to new ones.
Commit 72b49acc changed behavior of MODULE::ViewBBox(),
which now includes text fields area. This caused problems
with selecting footprints with relatively large text fields.
This patch fixes this problem by using MODULE::GetBoundingBox instead.
Fixes: lp:1776942
* https://bugs.launchpad.net/kicad/+bug/1776942
There's no risk in measuring an empty footprint but there's no benefit
either. This matches the measure tool to the other, deactivated
footprint tools.
- fixed via bounding box calculation in TRACK::GetBoundingBox()
- moved clearance to TRACK::ViewBBox()
- modified the Selection Tool to use EDA_ITEM::GetBoundingBox() rather
than VIEW_ITEM::ViewBBox() to determine selection
Fixes: lp:1776314
* https://bugs.launchpad.net/kicad/+bug/1776314
New items just being placed on the board are still temporary. Although
we can modify their orientations/positions, we can't stage these changes
for undo/redo without corrupting the undo stack.
Fixes: lp:1776312
* https://bugs.launchpad.net/kicad/+bug/1776312
Previously, the "Select Connection" sub-items were greyed out when the
selection contained both tracks and vias. This meant that you couldn't
access "Select Copper Connection" when the selection contained both
tracks and vias (though the keyboard shortcuts did work).
Change to use SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks
) to allow any combination of track elements to be selected.
Fixes: lp:1772249
* https://bugs.launchpad.net/kicad/+bug/1772249
A perfect solution would create holes in the coverage map
for the zone edges and handles, but that's a lot more
work.
Fixes: lp:1773204
* https://bugs.launchpad.net/kicad/+bug/1773204
The SELECTION is a std::set. Numerical dereference of item n is O(n) as
the iterator is not random access. Therefore, a for loop using
numerical dereference is O(n!) and quickly slows.
We avoid this by storing items to remove separately while iterating and
then removing the items after we complete.
Fixes: lp:1692081
* https://bugs.launchpad.net/kicad/+bug/1692081
If you select a track with many segments (e.g. a length-tuned track) and
then select all connected items again ('U' -> 'U'), we would iterate
over all items in the selection and mark connections for each of the n
segments n separate times.
We avoid this by using the marked flag to show when the segment has
already been visited by the routine. This means that if the segment has
been checked for connections because it was connected to the previous
item, it won't be checked for connections again. However, a selection
that interleaves items from multiple connection segments will still
(potentially) be multiply checked as the BUSY flag is cleared each time
there is one not-BUSY track in the selection.
Circles are defined by center and a point on their edge. This requires
the user to do extra math to figure out the size of the circle. The
patch allows the user to edit and draw circles using radial coordinates.
This allows the user to selectively disable the snap-to behavior when
placing stand-alone vias. Full solution will require an update to the
segment distance calculation that takes into account the rounded line
caps.
Fixes: lp:1769523
* https://bugs.launchpad.net/kicad/+bug/1769523
Also fixes a bug where a FOOTPRINT_EDIT_FRAME was being passed
in to a PCB_EDIT_FRAME.
Also tidies up Modedit settings handling for settings which can't
be edited in Modedit's preferences dialog. They're now copied
from Pcbnew.
Fixes: lp:1768477
* https://bugs.launchpad.net/kicad/+bug/1768477
Duplicate already works, so there's little reason to disallow
using the zone dialog to do it.
The legacy canvas can't be fixed because we'll immediately
union the two zones, resulting in a no-op.
Fixes: lp:1464677
* https://bugs.launchpad.net/kicad/+bug/1464677
This really needs to get put into the VIEW_CONTROLS for all the
tools, but that's probably a bit too risky for 5.0 at this
point.
Fixes: lp:1766547
* https://bugs.launchpad.net/kicad/+bug/1766547
If the initial pad was a custom pad converted in a usual pad + graphic items by the command:
"Explode Pad to Graphic Shapes"
the "old" primitives were not cleaned, and the new created pad contained these old primitives, regardless the new selected shapes.
(Usual case when a user want to edit a custom shape)
When multiple cut commands were issued, the cut command handler would
restart multiple times and keep running until the handler that was
invoked first finishes. As all handlers kept a selection copy, they
would try to save the deleted items to the clipboard resulting in a
crash.
Fixes: lp:1761221
* https://bugs.launchpad.net/kicad/+bug/1761221
Previous implementation refilled zones every time they have been
unselected. This patch adds a flag that tracks whether the
zone has been actually modified, so it will be refilled only when
necessary.
Fixes: lp:1760903
* https://bugs.launchpad.net/kicad/+bug/1760903
- vias were always left selected, include vias in tracks filter - as in legacy
- make text filtering work
- cleanup drawings filtering code
- hide checkbox "Include items on invisible layers" because it does not work in GAL
CTRL+{X,C,V} used to be handled both by the legacy hotkey system that
generated ID_EDIT_{CUT,COPY,PASTE} wxCommandEvent, and the Tool Framework
hotkey system.
Fixes: lp:1749549
* https://bugs.launchpad.net/kicad/+bug/1749549