Needed to find bottlenecks in fns, so break out individual sections of
the massive function for easier understanding.
buildItemSubgraphs (one section of the previous function) would build
millions of connections that were never used as stacked pins created X!
connections. Also tested using sets instead of lists and keeping unique
lists to avoid flagging but none of these were as performant as using
flags to remember which items had already been processed.
Fixes https://gitlab.com/kicad/code/kicad/issues/10974
(cherry picked from commit 17b1b68ac7)
The previous solution cleared all of the fields and force the unit setting
to unit one which would have less than desirable effects when reusing a
schematic in another project. This solution forces all of the instance
settings to the first sheet instance of the current project to prevent file
change churn when changing shared sheets in the current project.
This will not prevent shared schematic file changes when the first sheet
instance data differs between projects.
Also make sure that value field is updated from name changes when the
symbol is a power symbol (even if it's from the schematic instead of
the library).
Fixes https://gitlab.com/kicad/code/kicad/issues/11093
Double-calls are no longer needed when using settings. They can
interfere depending on how the system executes the commands.
Removing keeps the last used plugin as the default, rather than the last
selected
Fixes https://gitlab.com/kicad/code/kicad/issues/11094
(cherry picked from commit e8ef863861)
Adding a page in the ctor can generate events that change the default
page. Instead, we set the default after all pages have been added,
avoiding the reset
Fixes https://gitlab.com/kicad/code/kicad/issues/10910
(cherry picked from commit 5314ba6440)
Avoid excess writes to the project directory to dodge issues with remote
file systems not fully writing data.
wxRename works across disk boundaries (in theory) and falls back to
wxCopy/wxRemove when it fails
Fixes https://gitlab.com/kicad/code/kicad/issues/10747
MapAngles will adjust by small amounts the angles t1 and t2. This
adjustment will determine the CW/CCW drawing. Therefore, the MapAngles
needs to be called explicitly before the Normalize180() call.
Left-to-Right evaluation is not a given for MSVC
Fixes https://gitlab.com/kicad/code/kicad/issues/11050
Arcs can be altered by the process of changing from on-disk
representation to in-memory representation. Saving back to disk without
modifying the arc should not modify the calculated values.
This stores a copy of the on-disk representation that is only used to
save back to disk in the event that the arc is not modified during
editing.
Fixes https://gitlab.com/kicad/code/kicad/issues/10442
When double-clicking to open a symbol, it is no longer selected in the
tree. We need to use the `GetTargetLibId()` to pick the correct symbol
(first selected, then current) when using the duplicate command
Fixes https://gitlab.com/kicad/code/kicad/issues/11034
(cherry picked from commit 802d20c409)
Before they were 1/2 treated as flags and 1/2 treated as a mode enum.
The ERC flag relaxes constraints on data that is settable in the
schematic editor.
Fixes https://gitlab.com/kicad/code/kicad/issues/11018
It hasn't worked since we rejiggered the default grid selection mode
anyway, and for some reason it eats <esc> key events after the dialog
has been resized.
Fixes https://gitlab.com/kicad/code/kicad/issues/11015
The fix for https://gitlab.com/kicad/code/kicad/issues/10529 kicked the
subsequent IDs for unit selection off the maximum ID value for popup
menus. This increases the maximum popup number (integers are free)
(cherry picked from commit 79b6991d7b)
Removes the ability to hide symbol units in file formats. This was
mostly the case for a while but there remained corner cases where we
left a default/hidden option
Fixes https://gitlab.com/kicad/code/kicad/issues/10888
When reading sheet fields, we need to maintain a consistent order for
the mandatory fields as they are dereferenced by place. We force this
during the `SetFields()` call.
(cherry picked from commit 8385ce3021)
We need to keep the screen blank while initially loading a sheet before
the hierarchy is developed. Avoid resolving text variables during this
process
Fixes https://gitlab.com/kicad/code/kicad/issues/11000
(cherry picked from commit 63b06af6b1)
Center rotation will often misalign lines to the grid, which is bad
until fix off grid items on the schematic.
We can rotate a connection end into a new connection or to become
collinear with an existing line, so we need to check for this at the end
of rotation.
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/10565
(cherry picked from commit 7d4cb91f39)
Also makes sure the progress dialog is closed when we're done reading
symbols (it used to stay up for much of the symbol editor initialization).
Also makes sure that any cancel in the preLoad step is honoured in the
sync step. (The preload is done because it is multi-threaded and therefore
faster than the single-threaded sync.)
Also makes sure that individual threads pay attention to the cancellation,
not just the GUI thread.
Fixes https://gitlab.com/kicad/code/kicad/issues/8372
KiCad has stricter requirements for what consititutes an annotated
symbol. This checks for and corrects annotations that begin with '#',
do not begin with a non-numeric character or do not end with a number
The comment regarding bitmaps was true for one more month in 2018, but
hasn't been true for the last 3 years, and clearing the cache is a huge
performance hit.
If a wire intersects more than 2 pins from the same symbol, we don't
trim connections. If the wire intersects exactly two pins from a single
symbol, we remove the wire between the pins.
We avoided doing this before because we didn't have a good metric for
trimming vs. not. But the per-symbol calculation feels like the least
surprising option.
Fixes https://gitlab.com/kicad/code/kicad/issues/10909
Fixes https://gitlab.com/kicad/code/kicad/issues/1857
(cherry picked from commit 75a4036e45)
Apparently at some point during V5 development, symbol cache library names
were saved by replacing the LIB_ID separator character ':' with '_'. This
caused the cache look up to fail there by skipping the symbol rescue which
could result in broken schematics.
I have no idea where this happened during V5 development. The video demo
in the HEAD of the 5.1 branch shows the issue. All of the other demo cache
libraries are correct.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/10488
(cherry picked from commit c6c4f9ae4b)
Selecting end and midpoint will select whole line. Some changes for
orthogonal dragging made this worse than in 6.0.
Improves, but does not fully resolve:
https://gitlab.com/kicad/code/kicad/-/issues/10860
The use of XOR with integers here is needed as MSVC doesn't implement
the use of std::signbit for integers and casting up to double just to
get the signbit feels wrong
gcc doesn't need it and computes during compile regardless, but experimenting in godbolt, both clang and MSVC actually do need it or else it's partially computed at runtime
We need the item to be currently selected when repeating the last symbol
insert. This ensures we have a valid selection before starting the move
tool and possibly getting odd system behavior from mouse positions
Fixes https://gitlab.com/kicad/code/kicad/issues/10619
(cherry picked from commit 7642a9db79)
We can't stay in a sheet that is deleted by the action of undo. Checks
the current sheet and, if we are currently using it, ensures that the
following action is to leave the current sheet
Fixes https://gitlab.com/kicad/code/kicad/issues/10733
(cherry picked from commit ccf2a63f45)
ADDED: with cmake KICAD_MACOSX_APP_BUNDLE option the user can disable
the macOS app bundle creation when compiling on macOS. This permit to
use/install KiCad like any other *nix platform (/usr/bin, /usr/share,
ecc.). By default, cmake build the app bundle.
Also fixes some plot bugs with arcs.
Also moves polygonization of arcs (when required) in plotting code
from 5 degrees to calculated based on ARC_HIGH_DEF.
Fixes https://gitlab.com/kicad/code/kicad/issues/5017
Note:
- wxYield does not work here, indicating the need for locking
- wxYieldIfNeeded does not work, possibly for the same reason as wxYield
- Both Layout() and m_fieldGrid->Layout() need to be called even though
the first should call the second.
Fixes https://gitlab.com/kicad/code/kicad/issues/5690
On GTK, some configurations will trigger a column resize, which will
close the current editor. This blocks the column resize while the
editor is open, unless the resize continues, which indicates dragging of
the window edge
Fixes https://gitlab.com/kicad/code/kicad/issues/5690
When the grid editor is shown, we also want to ensure that the grid gets
resized to account for the new editor. Queuing the event will ensure
that happens after the editor is emplaced in the grid
Fixes https://gitlab.com/kicad/code/kicad/issues/5690
(cherry picked from commit fddfce4fb1)
On GTK, the full editor needs to be shown and, for some systems, the
editor will not show correctly. By yielding we should allow the time to
recalculate sizes for the editor in the grid
Fixes https://gitlab.com/kicad/code/kicad/issues/5690
(cherry picked from commit 871556ebda)
Our undo/redo list is tied to the screen that gets cleared when we
reload the file after renaming. We need to clear the Undo list at this
point to prevent possible crashes when moving too far back in the stack
Fixes https://gitlab.com/kicad/code/kicad/issues/10504
(cherry picked from commit 323a069738)
Eeschema/libedit support open, filled polylines. When printing, this
should be drawn as a fill, followed by the polyline to avoid assumptions
about closed polygons in the graphic code
Fixes https://gitlab.com/kicad/code/kicad/issues/10537
(cherry picked from commit 615eda816e)
Especially using a translated name breaks kicad config and files because
in non English languages both translated and not translated names were used in code.
Rather than skipping our endEdit() call in libedit, we need to
parameterize whether we want the shape open/closed. Closed will remove
the last segment if it lands on the first point. We don't want that
but we do want to remove the last point if it duplicates the second to
last (in the case of double-clicking)
Fixes https://gitlab.com/kicad/code/kicad/issues/10334
(cherry picked from commit 55020c2b89)
SHAPE_LINE_CHAIN will, by default, remove duplicate points when
appending. We don't want to do this when constructing our polygons in
symbol editor, so we need to explicitly call the routine without
deduplication
Fixes https://gitlab.com/kicad/code/kicad/issues/10289
(cherry picked from commit 62f8603353)
When leaving the main point editor loop, we need to ensure that the edit
point is cleared as well. This is usually cleared by a ClearEvent call
but in case this is missed, we need to ensure that other tools are not
caught out
Fixes https://gitlab.com/kicad/code/kicad/issues/10288
(cherry picked from commit 9a2332dfcf)
Undo/Redo can change the symbol referenced by the symbol drawing tool.
This updates the current symbol before important steps to keep the
system synced
Fixes https://gitlab.com/kicad/code/kicad/issues/10125
(cherry picked from commit b8a7a66a0a)
Exporting the Bill of Materials uses the netlist exporter. Both of
these routines were stripping the extension, leading to projects like
"test.project.kicad_pro" having the project name stripped. We separate
the BOM netlist export from generic plugin netlist export to allow the
correct behavior when exporting netlists and generating BOMs
Fixes https://gitlab.com/kicad/code/kicad/issues/10270
(cherry picked from commit bef762e652)
The main fix is for errors in SCH_TEXT and derived:
qa test expects 4 rotations is an identity transform:
This is false if the item has autoplaced fields.
The fix clears autoplaced flags.
We were only checking for the selection of a single line that gets
merged. This prevents the merged line from being highlighted but not
selected after merging
Fixes https://gitlab.com/kicad/code/kicad/issues/10202
(cherry picked from commit addc5574b4)