When clearing the pcb in footprint editor, we need to transfer the
netclass settings to ensure we have the correct defaults for the new
footprint.
Fixes: lp:1751583
* https://bugs.launchpad.net/kicad/+bug/1751583
There are three related changes here to harden our handling of threads
in the footprint async loader.
1) Footprint async loader explicitly aborts any remaining loader threads
on exit.
2) We protect the thread join by a mutex
3) We do not pause during no-wait routines
Pads count all pads/pins on the board including unconnected and NPTH.
Nodes count only the pads that can connect to a net and are therefore
routable. These were being calculated as the same number (displayed in
the info bar at the bottom of the screen)
Connectivity searches were slow for large, complex boards. This was
partly due to the need to search all lists for possible connections
between anchors.
We remove this requirement by creating an RTree based on items' bounding
boxes similar to the PNS router. Then we get both the colliding items
and search forward/backward to see if there are connections between the
anchors and the other item.
Because we use RTree, we no longer need the maintenance overhead of multiple
item lists and an anchor list in the connectivity class.
Fixes: lp:1701791
* https://bugs.launchpad.net/kicad/+bug/1701791
Fixes: lp:1769408
* https://bugs.launchpad.net/kicad/+bug/1769408
Fixes: lp:1761989
* https://bugs.launchpad.net/kicad/+bug/1761989
It was broken by commit c78171d01f.
During creation, the Drc must only display a error message, and do not create markers.
Markers are created only during a full board DRC test.
commit c78171d01f replaced this behavior by a incorrect one (create markers and do not show error messages)
The progress reporter should not be cleared in the footprint
implementation to prevent dereferencing a NULL.
When cancelling the load, we should only allow setting of cancellation
to true to prevent a condition where the progress reporter resets
the cancellation.
Fixes: lp:1774777
* https://bugs.launchpad.net/kicad/+bug/1774777
Also lock the DeleteAll call with mutext to protect threaded access.
The OpenGL contexts are removed when OPENGL_GAL class is destroyed.
Explicitly deleting all contexts prior to destroying the OPENGL_GAL
class causes an assert when the destructor tries to lock its context
prior to cleaning up OpenGL memory. In most cases, an unhandled assert
in a destructor-called function will simply exit the destructor.
Python thread cleanup will also attempt to close the context. This can
cause a race condition with multiple threads accessing/deleting the
canvas.
Fixes: lp:1774096
* https://bugs.launchpad.net/kicad/+bug/1774096
Colors are assigned to virtual layers while the ToLayer_ID returns a
physical layer enum. The GetLayerColor/SetLayerColor take LAYER_NUM
(int) values that can be larger than the physical layer count.
We were trying to handle aOnlyOneFile at two different levels
which was preventing the Silk layer from going through the
right routine (and preventing board outlines from getting
drawn if selected).
We were also overwriting the references color local variable
before using it, meaning the reference was always rendered in
the value's color.
Fixes: lp:1774171
* https://bugs.launchpad.net/kicad/+bug/1774171
Previously, the dialog was created only once, with the current board setup and the current units selection.
Therefore, after changes in board or units, the dialog was really broken.
Now, the dialog is recreated when the plot command is run.
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
As of v5 footprint library reorganization (one repo per library concept
is replaced with a common repo for all libraries), the Footprint Library
Wizard may handle only the old libraries. It has been replaced with
a file browser to select only local files.
Fixes: lp:1772209
* https://bugs.launchpad.net/kicad/+bug/1772209
When starting async processes, we need to have a way to stop the process
before releasing memory. Descoping FOOTPRINT_ASYNC_LOADER while the
threads were still running could cause crashes depending on the memory
structure. To avoid this we define clear procedures for exiting a
running async processes and call these when exiting.
Fixes: lp:1772909
* https://bugs.launchpad.net/kicad/+bug/1772909
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.
On large boards with high pad-count modules, searching each pad for hits
becomes expensive. We eliminate many of the pad searches by first
checking the module's bounding box before iterating over pads to look
for hits.
It can be useful to have similar class messages grouped together so that
error messages in a larger report don't get lost among the
warning/info/action messages.
This patch allows sorting of messages for dialogs that benefit from
organization. Default behavior of reporter messages remains
unchanged by this patch.
Fixes: lp:1772090
* https://bugs.launchpad.net/kicad/+bug/1772090
Freerouting-specialized menus are removed as FreeRouting is not
maintained or packaged for most OSes. Users can still import/export
SPECCTRA files in KiCad allowing them to interface with a custom
FreeRouting installation.
The graphical editor window for pcbnew and modedit have slight
differences, so different classes. But they should appear the same to
the user. This merges the differences into a dialog that looks the same
to the user.
Fixes: lp:1772389
* https://bugs.launchpad.net/kicad/+bug/1772389
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.
1) hide the status popup when the dialog is brought up
2) forward events from the popup to the canvas so hotkeys work
3) make sure diff pair radius is always 100%
4) fix greyed-out Miter style label
5) make L a hotkey so it works before you start dragging
Fixes: lp:1545856
* https://bugs.launchpad.net/kicad/+bug/1545856
We only need to iterate over the anchors when there are items that are
marked invalid. We check once in the item list and only if there are
invalid items to remove do we trim the anchor lists.
However, the connected items might still need to be trimmed, so we leave
this final step outside of the conditional.
This is a speed commit for large boards. Tracks and pads cannot connect
to elements that are not on the same layer. Rather than checking for
this at the last step, this commit splits the anchor vectors by layer,
limiting the initial search space.
Previously, binary search was hand-coded. This moves the search to a
std::algorithm variant. Also searches bbox by limits rather than
directly iterating.
Unifies the different sections of hotkeys so that we are not storing two
[eeschema] or [pcbnew] sections in two different files.
Previous hotkey definitions are loaded at start if they exist but are
overwritten by the new format, if it exists. Changes to hotkeys save
only in the combined format.
Hotkey editor for each application only shows the hotkeys relevant to
that application.
Fixes: lp:1741757
* https://bugs.launchpad.net/kicad/+bug/1741757
Fixes: lp:1668799
* https://bugs.launchpad.net/kicad/+bug/1668799
Select net has two columns, so we should limit the column width to the
size of the grid. The size should adjust with the window, so we take
the size of the first column as fixed and assign the rest of the grid
width to the second column.
It looks like D_GLIBCXX_ASSERTIONS=ON activated on some Linux versions creates too zealous tests at run time.
This patch just calculate the same pointer value using a slightly different formula.
Fix also a hard-to-understand comment
Fixes: lp:1770414
https://bugs.launchpad.net/kicad/+bug/1770414
m_Zone is a fully deprecated list of SEG_ZONE items (similar to TRACK), used to fill copper zones in *very old* boards.
it is even unlikely there are still boards that use them.
So it should be removed one day.
* Refresh the view only when changes are made in the caller frame.
* Allows recreate a new instances when try to open the 3D view from a frame taht is not the initial caller
* Remove duplicate code in kicad frames.
Add padding to standard dialog button sizer. On windows, the buttons are
slammed against the bottom of the dialog with no border which looks awful.
Fix alignment and padding in grid sizers.
Add padding to standard dialog button sizer. On windows, the buttons are
slammed against the bottom of the dialog with no border which looks awful.
Replace degree symbol with the word degrees. On windows, this does not
translate to the degree symbol.
While "fixes" isn't quite the right word, we do want this commit
associated with the following bug, and "fixes" is the easiest
way to do that:
Fixes: lp:1712579
* https://bugs.launchpad.net/kicad/+bug/1712579
Previously, dragging changes were applied only if the last cursor move
finished with a successful drag operation. It made items squeezing
difficult, as it required accurate cursor movement to apply the changes.
When counting items, many cases exist where we want to count all items
without checking flags. This short-circuits the loop to provide the
immediate count.
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
When saving a library, check and report on libraries that do not exist
as well as those that exist but are read-only.
Fixes: lp:1769190
* https://bugs.launchpad.net/kicad/+bug/1769190
Changes SHAPE_CONVEX to SHAPE_SIMPLE to better reflect the limitations.
Changes SHAPE_LINE_CHAIN::PointInside calculation to allow points
strictly inside a line chain
Fixes: lp:1768862
* https://bugs.launchpad.net/kicad/+bug/1768862
Usually pads do not overlap. However custom pads are represented as
their convex hull, so they may enclose other pads. This change allows the
router to select the closest pad to the cursor position.
The roundrect_rratio token was missing a leading space which made the
file formatting different from all other formatting when using rounded
rectangle pads.
Fixes lp:1768355
https://bugs.launchpad.net/kicad/+bug/1768355
This is particularly important when bulk adding (by director, etc.)
as otherwise the user might end up having to click OK to many
many error dialogs.
Fixes: lp:1764057
* https://bugs.launchpad.net/kicad/+bug/1764057
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
This partially reverts 36d36de and 3bac100, moving the legacy footprint
lock/unlock code from the autorouter (which remains disabled) to
pcb_edit_frame.
Old code failed to set the wxEventType during acceptance, and
failed to set the default button during initialization.
Fixes: lp:1768253
* https://bugs.launchpad.net/kicad/+bug/1768253
When reading netlist or updating board from schematic, if the
changes leave a zone with a net with no pads then change the
zone's net to the new net of one of it's connections.
Also improves update-board-from-schematic's dry run reporting
to include zone nets and single-pad nets.
Fixes: lp:1609401
* https://bugs.launchpad.net/kicad/+bug/1609401
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
Corrects an error in polyline estimation
Syncs graphics to world PNS by whole layer set rather than
individual layer at a time.
Prevents reloading of full pns TOOL_BASE during reset of tools unless
the tool is being activated.
Fixes: lp:1766626
* https://bugs.launchpad.net/kicad/+bug/1766626
For some obscure (for me) reason, the path separators in bundlepath are seen as escape seq, and the path can be incorrectly handled
(when \n or \r are found in this string).
it happens only for this path, not for other paths in LoadPlugins.
For bundlepath parameter, unix separator is now used.
Fixes: lp:1766879
https://bugs.launchpad.net/kicad/+bug/1766879
it was due to a incorrect behavior of TRACK::GetBestInsertPoint( BOARD* aPcb )
Also: update comment for this method.
Fixes: lp:1767061
https://bugs.launchpad.net/kicad/+bug/1767061
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
Previous algorithm used a static variable which it decremented
for each new unconnected track, but this resulted in the router
marking earlier fixed segments as collisions (because they
would get set to netcode = 0 when "fixed").
Fixes: lp:1762043
* https://bugs.launchpad.net/kicad/+bug/1762043
This had been removed along with autorouter but its functionality is
still desired. If/when the autorouter is resurrected, these IDs will
need to be deconflicted.
Fixes: lp:1766550
* https://bugs.launchpad.net/kicad/+bug/1766550
Corrected polygon export missing vertex.
Set pads to export on copper layer when not masked, keeping visual
output similar to physical.
Fixes: lp:1766634
* https://bugs.launchpad.net/kicad/+bug/1766634
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)