While not technically allowed, overlapping polygons can be drawn in
pcbnew. Gerber polygons are strictly simple, however, so we need to
fracture prior to exporting to avoid invalid gerbers.
Rather than depend on proper unlocking for each exit, we move the
connectivity lock mutex into an RAII-type configuration that
automatically unlocks on exit.
Layer bit sets get chosen for the layer name, starting with the copper
layers and then the technicals. Additionally, multi-layer pads are
appended with an indicator that additional layer bits are set.
Fixes: lp:
* https://bugs.launchpad.net/kicad/+bug/
When importing footprints, some are generated with non-standard (e.g.
"mod") extensions. As a last option, we allow the * wildcard to select
these files for import.
Use TesselatePolygon() to draw polygons in Gerbview instead of GLU tesselation, much slower.
Add helper methods in GAL to know if the current GAL engine is Cairo, OpenGL or something else,
useful to optimize drawing code.
This fixes the handling of align/distribute tool when called on locked
items. Locked items cannot be moved but they may be used for the target
of an align/distribute operation.
Fixes: lp:1808238
* https://bugs.launchpad.net/kicad/+bug/1808238
Instead of a nag screen for locked items, we allow first the unlocked
items to be deleted and then, with a repeated request, the locked items.
This adds a popup cursor window informing the user of the option for
repeating the delete
Fixes: lp:1806507
* https://bugs.launchpad.net/kicad/+bug/1806507
Previous version had minimum width to account for it being difficult to
click on small lines. This should not be used for filled polygons
Fixes: lp:1808141
* https://bugs.launchpad.net/kicad/+bug/1808141
Simply calling it Alternative Delete was hiding its behavior. This gives
a descriptive tooltip and command name allowing users to more easily
find the equivalent to the "Ripup" command
This updates some of the footprint wizard values to use the default KLC
values for silkscreen, fab, courtyard and text.
Also updates the default QFN settings to create a valid footprint
Make sure the view is rebuilt before selecting the new footprints
so that they're shown only in the selection overlay.
Don't start the drag until the dialog is closed so we don't have
a bunch of extraneous mouse warping.
Fixes: lp:1775265
* https://bugs.launchpad.net/kicad/+bug/1775265
This allows people to continue to use the edge-width as a proxy
for board edge clearance until we implement board edge clearance
as a real feature.
Fixes: lp:1797787
* https://bugs.launchpad.net/kicad/+bug/1797787
Graphic lines and polygons are drawn to fit specific areas for which it
is helpful to have the endpoint controlled by the cursor even when
constraining the angle.
Fixes: lp:1805502
* https://bugs.launchpad.net/kicad/+bug/1805502
IsPolygonFilled() replaces the hard coded comparisob with Edge_Cut in code.
For now the polygon is not filled only on Edge_Cut layer.
But in the future, it could be an option for other layers.
Commit 1858b7dca corrected the handling of polygons on the edge cut
layer for board items. This adjusts for the possibility of polygons
in modules on the edge cut layer by applying the module offset/rotation
to the polygon elements.
Like circles, polygons are self-closed elements that define an outline.
This allows them to be used as such for board outlines and cutouts.
Fixes: lp:1795563
* https://bugs.launchpad.net/kicad/+bug/1795563
This allows too turn it on for work without an additional patch.
Also fix a bug in the disable code - when the SVG is enabled,
allow to select SVG files.
When loading the load using the UI, netclasses and net info are
synchronized to the board object after parsing the file. This needs to
happen automatically when loading the board via the Python interface as
well.
Fixes: lp:1806506
* https://bugs.launchpad.net/kicad/+bug/1806506
In DRAWSEGMENT polygonal shape: the commit tried to use triangulation (CacheTriangulation) to draw the shape (similar to zones).
It was much faster than using GLU tesselator (one order of magnitude).
Unfortunately, CacheTriangulation() works only with simple polygons, not with any polygon.
And simplifying a polygon with a lot of vertexes is very time consuming.
So using CacheTriangulation() is now removed and GLU tesselator is used as previously.
Fixes: lp:1806411
https://bugs.launchpad.net/kicad/+bug/1806411
SVG import need some refinements to be efficient, so it is disable for v 5.x.
Will be re-enabled later.
Enabling SVG import is *only* for developers, not for users.
* Do not compile dxf old files.
* import gfx, gal mode: make absolute placement working.
* Import gfx in legacy canvas: use it and make interactive placement working
* Take imported line width in account. Ensure DXF line thickness is OK.
* handling empty files in legacy mode.
This adds a check for contiguous board outlines to the DRC. It also
uses the calculated outline to ensure that traces are not crossing the
outlines.
Fixes: lp:1648055
* https://bugs.launchpad.net/kicad/+bug/1648055
Rather than duplicating the connectivity calculations in determining
whether a track is dangling, we utilize the current database to find the
number of connected items for an anchor item when feasible.
Multiple anchors such as tracks still need additional logic.
Fixes: lp:1805479
* https://bugs.launchpad.net/kicad/+bug/1805479
The client filter might add items in the case where locked pads are
filtered. We need to handle this case when requesting selection by
adding new items to the m_selection
Fixes: lp:1802686
* https://bugs.launchpad.net/kicad/+bug/1802686
When changing the track width, we need to allow that the track's route
will change based on DRC, so force a move without changing position.
Fixes: lp:1785057
* https://bugs.launchpad.net/kicad/+bug/1785057
When we draw a path, we usually want to close the path when clicking on
the end of another line. This uses grid helper to ensure this
progression happens as expected.
When updating the status of the ratsnest, we mark its target layer as
dirty to ensure the revised data are used to draw/clear the ratsnest
Fixes: lp:1800301
* https://bugs.launchpad.net/kicad/+bug/1800301
(cherry picked from commit 50eedcf0b3)
JP notes that there is an issue with comma-based decimal locales and the
SaveSelection that is addressed by having a LOCALE_IO call in a limited
block.
This changed the copy timing of the clipboard and the interaction with
KDE Klipper again. To address this, we isolate the clipboard open call
to the end of the routine and force a round-trip of the clipboard data
before exiting.
Klipper seems to poll at odd times. When we copy to wxTheClipboard
in one locale and Klipper extracts data in a different locale, it throws
an XError. We don't need the extra LOCALE_IO calls as Format() uses its
own LOCALE_IO setting.
Fixes: lp:1800648
* https://bugs.launchpad.net/kicad/+bug/1800648
The ratsnest layer needs to be always enabled in GAL rather than taken
from the board settings. This also adds a finalize handler to the
picker tool that allows a picker-caller to perform a specific action
when the picker tool exits. In this case, we use it to clear the local
ratsnest selections back to the default.
Fixes: lp:1800301
* https://bugs.launchpad.net/kicad/+bug/1800301
(cherry picked from commit c0d9b9ab81)
When the local ratsnest tool is used, it should toggle the state based
on the global ratsnest visibility. After changing state, the layer
cache is marked as well.
Possibly related to lp:1800301
(cherry picked from commit 22fbf30f22)
This parameter defines the working area (full page) size.
The fix is not perfect, because it does not take in account the page size.
However it is similar to the "old" initialization, before Eeschema GAL.
In Eeschema, a reasonable boundary size is used.
Distinguish between the snap-from and snap-to items. Previously, we
used the SELECTED or DRAGGED flags but the flagging arcitecture was
inherently fragile. This specifies items directly that should not be
used as snap targets.
Fixes: lp:1802795
* https://bugs.launchpad.net/kicad/+bug/1802795
Filtering based on selection ignores the use case where we are measuring
to a selected item. This utilizes the dragged flag to prevent snapping
based on the current state of the item drag.
Fixes: lp:1801089
* https://bugs.launchpad.net/kicad/+bug/1801089
When snapping, we should allow any point identified as a snappable
point. The additional consideration for corners might be used for
alignment in the future.
Fixes: lp:1802741
* https://bugs.launchpad.net/kicad/+bug/1802741
Factor out save current canvas view to image file code from symbol editor
code so it can be used anywhere.
Add ability to save to any image format supported by wxBitmapType. See
https://docs.wxwidgets.org/3.0/gdicmn_8h.html#a90a1eb6d85b5044a99b706fd979f27f5.
Currently only PNG output is implemented.
Please note that there is a minor bug that appears to be due to the
scroll bars which causes unfilled areas on the right and bottom edges
of the image. This always existed in the save symbol editor view
image but it was not as noticeable because by default the background
color is white. It is very noticeable in the footprint editor with
a black background.
The usual smattering of coding policy and comment fixes.
Fixes lp:1802127
https://bugs.launchpad.net/kicad/+bug/1802127
If checkboxes don't have individual IDs FormBuilder won't assign
them and the event table ends up connecting each checkbox to all
of the checkbox handlers in the dialog.
Fixes: lp:1801746
* https://bugs.launchpad.net/kicad/+bug/1801746
Importing Eagle files allowed for invalid zone values for clearance and
minimum width that triggered asserts in the 3d-viewer.
Fixes: lp:1801188
* https://bugs.launchpad.net/kicad/+bug/1801188
Fedora packaging errors with ambiguous python shebang since current
rawhide (30).
So we should remove it as the footprint wizards are not to be executed
standalone.
Variable netBuffer contains all NET_INFO items, whereas max_netcode
value is determined only basing on pad nets. After a netlist update
there still might be a NETINFO_ITEM that is not assigned to any pad and
has a net code higher than calculated max_netcode. Such situation
results in a out-of-bounds access in sortNetsByNodes().
Separate out zone edges (which are quite specific, and should
win over most other things) from zone fills (which are pretty
generic and should only be considered when there's nothing else).
Also excludes zone fills when the zones aren't being shown as
filled.
Display GALs had an incorrect world unit value set. Now the world unit
value says how many internal units are in an inch, in accord with the comments
in the GAL header. Bitmap drawing code relied on the information about DPI,
so scaling worked differently for display and print GALs.
It is possible for an async thread to simply be deferred if not
specifically set to async. In which case, until the return value is
requested, the loop may simply wait.
By decoupling from std::thread, we can avoid the wait/sleep cycle in
checking the std::atomic completion variable. The std::future variables
are immediately returning without the additional atomic check cycle.
This minimizes the thread usage, particularly during online actions such
as moving items and routing.
UpdateRatsnest: Minimized the number of atomics by utilizing future
promise. Avoided updating node-less nets. Node-less nets are common in
the dynamic ratsnest because the net vector is created from the board
nets by value but only populated with a subset. So the dynamic ratsnest
calculation always saw every net as dirty and spun up extra threads.
searchConnections: ParallelThreadCount is no longer lower bounded.
Small item counts are handled inline rather than with a separate thread.
When processing the selection filter, items were deselected before being
reselected after passing through the filter. This adjusts the logic to
only deselect those items that are filtered out.
Some windows machines seem prone to sleeping for excessive times. When
called in the main thread, this may prevent the system from responding
to Windows 'Are you alive?' calls.
TF.FileFunction,Copper,L1,Top,Signal is now TF.FileFunction,Copper,L1,Top
This param is not useful, and probably never correctly set by users, because is is not used by Pcbnew.
(It is used only for dsn export)
The implementation relied on the fact that PyString_AsString is returning NULL
for invalid inputs (and causing an error condition), which is then fixed by the
call to FROM_UTF8. Now, we will simply return an empty string if Py_None is
returned by a python fuction, which resemebles the old behaviour of those methods
Rather than forcing each thread to iterate over the full nets list to
find the dirty items, we collect the dirty items first before asking the
threads to address them. This prevents thread spinning. We also
amortize the cost of calculating on an 8-net per thread basis rather
than 2.
Locks protect the std::set in each item. Devolving the mutex to the
CN_ITEM allows multiple threads to make simultaneous connections to
different items where they do not conflict.
The connectivity files were unwieldy. This separates them logically
into data, algo and items where the items classes are those that hold,
surprise, surprise, the items, lists and clusters.
Refactor the polygon event loop into its parent function to allow access
to the params structure. Active layer now updates the drawing layer for
add/cutout zones.
Fixes: lp:1797483
* https://bugs.launchpad.net/kicad/+bug/1797483
Dynamic casts should only be used when we explicitly check for the
resulting pointer to be NULL. Where we know the class is castable we
can use static_cast, save on overhead and ensure our resulting pointer
is non-null.
When using the board edit, align tool automatically moved footprints
instead of pads but distribute tool did not. This standardizes the
behavior.
Fixes: lp:1796997
* https://bugs.launchpad.net/kicad/+bug/1796997
The evaluation of count_if resulted in a 0 or 1, leading to segment zone
fills always running on single processor and the progress bar showing
incorrect status. Likely infrequently hit as only affected segment
fills.
Block rotate and mirror now work like they do in Pcbnew (that is
they're treated as part of the block move/duplicate/whatever
rather than finishing it).
Fixes: lp:1780794
* https://bugs.launchpad.net/kicad/+bug/1780794
If the user is carefully selecting the zone edge, we do not filter the
zone preemptively from our disambiguation list in the same manner as we
do for selecting on zone copper.
Fixes: lp:1796719
* https://bugs.launchpad.net/kicad/+bug/1796719
The board design settings file keeps our default values for various
thicknesses. We use this to replace a number of magic numbers with the
defined value to help self-document the code.
The check against S_POLYGON was always false because we set the default
type to S_SEGMENT. This unifies the magic numbers to the board design
settings file
Disabling the grid should leave the snapping in place. But our disabler
returned the current point as closest, effectively always ensuring the
cursor position was the closest snap. This only uses grid when
requested.
This is temporary until we figure out a way to do multiple constraint
handling in GRID_HELPER or the EC_* class. This will work as long as
the EC constraint helper places the endpoint on either the primary or
aux grid.
Fixes: lp:1796540
* https://bugs.launchpad.net/kicad/+bug/1796540
We no longer require this as we calculate the number of segments based
on the maximum deviation rather than fixed numbers.
Fixes: lp:1780518
* https://bugs.launchpad.net/kicad/+bug/1780518
Get the board settings when changing the drawing layer. These include
default line thickness that should be updated.
Fixes: lp:1796489
* https://bugs.launchpad.net/kicad/+bug/1796489
When drawing the crosshair should track the element while the mouse
provides the position to calculate the next snap.
Fixes: lp:1796524
* https://bugs.launchpad.net/kicad/+bug/1796524
The dimension tool is used to measure physical dimensions on the board
therefore it should be able to snap to any other object, not just those
on its own layer set as is the case for other items.
This also deals with a corner snap case for constraints by first
snapping, then constraining, then aligning to grid. This ensures OoO
for alignment from least to most constraining.
When considering potential targets for snap points, we need to exclude
the currently selected item as this will mean that we always snap to
ourselves when editing an existing item.
Fixes: lp:1796507
* https://bugs.launchpad.net/kicad/+bug/1796507
When drawing segments, the segment will be NULL'd after committing, at
which point we lost our snap layer. Choosing snap layers from the
current drawing layer is a more robust method.
Fixes: lp:1796467
* https://bugs.launchpad.net/kicad/+bug/1796467
Deselection by clicking on a zone makes working with plane zones easier
by allowing the selected item to de-selected by clicking on a zone.
Once the selection is cleared, the zone may be re-selected as normal.
Clicking on non-zone items while a separate item is selected will still
select the new non-zone item without requiring a second click.
Updating connectivity should not need to iterate over the full item list
in each thread. Instead, we collect the dirty items first and then
iterate only over the dirty list.
Our connectivity data threads the ratsnest update based on the number of
nets that have changed. If we are only changing one net (the case when
routing) then making a full thread to update the net is pointless
because we wait for the thread to finish before continuing. This spins
that off to an inline lambda for single updates while still making
threads for multiple ratsnest changes.
This shows the snap indicator even when the item we are snapping to
occurs on a grid point, giving the user an indication that the point is
correctly connected.
Many items require precise, non-grid movement. Adding the ability to
flag a non-grid option will permit this behavior.
This is a required precursor commit to fixing lp:1738818 and lp:1771683
The computeAnchors function is used to find best drag locations for
items being moved. All movable PCB items should be handled.
Fixes: lp:1794304
* https://bugs.launchpad.net/kicad/+bug/1794304
When requesting to move a footprint based on the pad, the pad layers
should determine the snapping. This extracts layers from the selected
pad before allowing the filtering for locked pads
Fixes: lp:1787627
* https://bugs.launchpad.net/kicad/+bug/1787627
Since we are handling snapping in the grid helper, we don't need to
enable it in the cursor position return. This allows the grid helper to
use the frame position while optionally snapping to segments.
Put the cursor and pan control TOOL_ACTIONs in ACTION,
and refer to them in that way.
The handlers are currently identical in Pcbnew and Cvpcb,
and Gerbview (and all canvases) can benefit from them as well
if they are in libcommon. Also saves duplicated code.
Fixes: lp:1795855
* https://bugs.launchpad.net/kicad/+bug/1795855
This ensures that when starting to draw a zone or graphic element, the
preview is drawn in the same color/on the same layer as the element that
will be created. Previously, beginning a graphic polygon while a copper
layer was active would result in the preview being drawn in the color of
the active copper layer.
Adds Cut/Copy/Paste and Revert for footprints; introduces a new
shared Revert Changes? dialog; hooks up Add Library for footprints,
standardizes the Save As terminology.
Polygon corners were enabled in the footprint editor but the logic
didn't extend to the board editor. This revises the logic to look for
DRAWSEGMENTs and only reference the PCB_MODULE_EDGE_T where needed to
create a new segment in the footprint.
Fixes: lp:1782966
* https://bugs.launchpad.net/kicad/+bug/1782966
Allows selection of polygons and zones by their visible area. Will only
select polygons/filled areas when they are unobstructed by other
elements in the footprint/pcb. Also adds a "skip heuristics" modifier
key for clicking (ALT) that allows the full disambiguation list to be
displayed without removing less-likely elements. This dovetails the
zone/polygon selection as it allows selecting even when areas a fully
overlapped.
Fixes: lp:1753153
* https://bugs.launchpad.net/kicad/+bug/1753153
This fixes the CmpNoCase() == 0 bug on one side, and the
footprint == null bug on the other side; both of which were
previously fixed on only one side.
Fixes: lp:1795561
* https://bugs.launchpad.net/kicad/+bug/1795561
We want to keep at most 1 thread per 2 connectivity updates but we need
to force that floor to be at least 1 for when there is only 1
connectivity update.
Fixes: lp:1795245
* https://bugs.launchpad.net/kicad/+bug/1795245
SEGZONEs are no longer created by pcbnew but may exist in older boards.
This allows deleting the old fills in a manner similar to the deletion
in Legacy canvas.
Fixes: lp:1794571
* https://bugs.launchpad.net/kicad/+bug/1794571
SEGZONE types were confusingly named PCB_ZONE_T. Zones in pcbnew are
now _only_ PCB_ZONE_AREA_T, so we name segzone types PCB_SEGZONE_T to be
clear.
This also removes processing of the SEGZONEs from connectivity
calculations.
m_dragstatus is set to true when a valid route is created given the
user's constraints. We need to check this before committing the route
to the board.
Fixes: lp:1794810
* https://bugs.launchpad.net/kicad/+bug/1794810
Unselecting performs two functions: unselecting and unhighlighting.
Some items may be deselected but still live in the temporary highlighted
layer (e.g. selecting a footprint and exchanging it). Since there is no
harm in unselecting an unselected item, we can allow it to proceed
without the check.
Deselecting each individually had the side-effect of possibly re-drawing
the view in between actions, leading to visible artifacts in the router
(where invisible items are set visible before committing a change)
Nets dialog (Inspect->List Nets) contains list control
that has very small width for first and last columns.
Changed algorithm for calculating optimal values for
column width.
We only need to test zone connections once, so we skip the double-check
from the nested loop unless we are only checking a single zone. Then
the second loop needs to iterate over the full list of zones.
Commit efdbc91e42 broken the primary
alignment mechanism for maintaining the current point as an auxilliary
grid reference. This reverts that commit and fixes both the initial
issue and the associated bug by applying the primary constraint after
the secondary. In this way, we consider the secondary constraint as an
additive rather than alternative constraint.
Fixes: lp:1793888
* https://bugs.launchpad.net/kicad/+bug/1793888
Change "OK" to "Export" so user is not surprised by the fact that the
dialog does not close after the step file is created..
Fixes lp:1784260
https://bugs.launchpad.net/kicad/+bug/1784260
It can be used instead of the slot (G85) command to create oval holes.
Do not yet activate it.
Oval holes frequently create issues with board houses.
Using a more usual routing (G01) command could solve some issues.
When editing the pcb, Ctrl-Click will highlight a net. This allows
de-highlight with the ESC/cancel action from the selection tool. Inside
the highlight tool, ESC reverts to the selection tool while keeping the
net highlighted.
Fixes: lp:1793842
* https://bugs.launchpad.net/kicad/+bug/1793842
Clang++ seems to be in left-field here as it processes a stringstream
1.0X1.0 >> double as a hexadecimal floating point ('X' character) and
throws an error rather than converting 1.0 and stopping when it reaches
a non-numeric character. This causes errors when exporting step on Mac,
which uses clang++ by default.
Adding spaces to the string is more explicit and doesn't break gcc. It
will be sufficient until we get rid of kicad2step as an external
utility.
Fixes: lp:1778564
* https://bugs.launchpad.net/kicad/+bug/1778564
(cherry picked from commit e7a9643b37)
The lock file code would reset the lock file every other time the same
board file was opened in Pcbnew in the stand alone mode. This created
the perfect toggle switch causing the board to be reloaded every other
time the same board was selected.
Please note that wxSingleInstanceChecker is broken on Linux and most
likely MacOS as well due to a bug in wxWidgets. On these platforms,
the already opened file is reopened rather than displaying a warning
that the file is already opened.
Fixes lp:1777599
https://bugs.launchpad.net/kicad/+bug/1777599
This is a boyscouting commit to standardize the threading of zone fills.
We do not need to join threads after their completion, instead we simply
allow them to clean up their memory without blocking the user. This
also sets the maximum number of threads that may be created to the
number of zones being filled. More than this will only leave un-used
threads being created and immediately killed.
We also include the connectivity search as a phase in the fill progress
reporter. This was the case before but did not utilize the correct
maxsize, leading to stalled progress bar.
This commit finishes the removal of OpenMP from the KiCad codebase.
Removed in this commit are the OpenMP calls in 3d-viewer and
qa/polygon_triangulation as well as all references in CMakeLists.txt
std::thread is used instead for multithreaded computation
OpenMP is not available for macos, so moving to a std::threads
implementation brings platforms into shared code.
This also reduces the OpenMP overhead when computing connectivity and
ratsnests.
Fixes: lp:1780130
* https://bugs.launchpad.net/kicad/+bug/1780130
The CMake scripts calculate the install path for python scripts by
distutils.sysconfig.get_python_lib(
plat_specific=0,
standard_lib=0,
prefix=''
)
which generates a string in line with
lib/python2.7/site-packages
This string ends up in the CMake variable PYTHON_DEST and is used by the
install step as destination directory for pcbnew.py.
There has been a hard-coded assumption on the content of that string in
PcbNew which is not compatible with FreeBSD 11.1.
This commit eliminates the hard-coded assumption in PcbNew and reuses
the install path as known by CMake.
Fixes: lp:1777921
* https://bugs.launchpad.net/kicad/+bug/1777921
(cherry picked from commit dd3c24faf8)
Repeating find with the same search string would result in a not found
error for absolute search strings. Don't clear the found item if the
search string did not change from the previous search..
Fix another minor bug where the do not warp mouse pointer option was
always checked when the find dialog was called from one of the gal
canvases.
Fixes lp:1793300
https://bugs.launchpad.net/kicad/+bug/1793300
We like to allow items that are marked SELECTED to remain so during
editing but this does not indicate that there are multiple edits queued,
so do not prevent pushing this into the undo queue.
When designing pads, it can be helpful to not only see the resulting
rounded rectangle radius from a given percentage but also to set it,
constraining the related percentage. This adjusts the dialog to allow
editing the rounded rectangle corner radius. It does not change the
file format as the resulting ratio is saved. Further updates of the pad
size or ratio will modify the radius.
Fixes: lp:1668020
* https://bugs.launchpad.net/kicad/+bug/1668020
Zones can be explicitly merged even if they do not have the same
parameters. Automatic merging should only occur when all of the zone
parameters are exactly identical to allow for area-specific zone
parameters.
( cherry-picked from 3d0915a33 )
Fixes: lp:1695761
* https://bugs.launchpad.net/kicad/+bug/1695761
Keepout zones can have different layer sets and different restrictions
that should not be combined unless they are identical.
( cherry-picked from a67bfa620 )
Fixes: lp:1789062
* https://bugs.launchpad.net/kicad/+bug/1789062
We had been deselecting items after calling edits to be safe in case the
item was deleted/exchanged by the edit. The item pointer itself remains
valid even when deleting as it is assigned to the undo stack. But it
should not remain visible or selected on the schematic if it is removed.
This tests for removed items by checking whether it (in the case of
first-level BOARD_ITEMS) or its parent (in the case of footprint item
components) remain in the view list after editing. If they are still in
the view list, then we re-select them.
( cherry-picked from 2c6d0ffe2 )
Fixes: lp:1765774
* https://bugs.launchpad.net/kicad/+bug/1765774
Fixes: lp:1775946
* https://bugs.launchpad.net/kicad/+bug/1775946
Snapping while dragging depends on the current net being assigned during
dragging. This initializes the placer to hold the current net while
performing inline dragging. The placer is reset along with the dragger
in StopRouting(). This fixes the difference in snap between drag and
create new route.
( cherry-picked from 219695953 )
Allow corner adding to polygons in both module editor and board editor.
The board editor was already allowed but only through special types.
The module editor is now sychronized to the same process and both
recognize standard context menus
Fixes: lp:1782966
* https://bugs.launchpad.net/kicad/+bug/1782966
( cherry-picked from 06ac172c2 )
When constraining moves, the cursor snaps to grid but does not
represent the position of the final edited point. The point is rotated
to the nearest snap angle, while the vector length remains unchanged
resulting in a line longer than intended and off-grid.
This adds a grid-snap after the constraint is applied.
Fixes: lp:1792655
* https://bugs.launchpad.net/kicad/+bug/1792655
( cherry-picked from e7c51a6a6 )
Triangulation of zones can be time consuming for large boards. This
adds a std::thread implementation of parallel zone loading to speed this
process on multi-core machines.
Add Display Settings to Footprint Browser.
Make each of them OpenGL on OSX and Cairo on other platforms.
Allow auto-zoom to be turned off and save last zoom setting.
Make ordering of tools in htoolbar consistent.
Standardize grid and zoom drop-downs.
Fixes: lp:1791667
* https://bugs.launchpad.net/kicad/+bug/1791667
Unplated holes in Ealge can either be free floating or part of a larger
footprint. We handle both in the same packageHole routine by either
offsetting the hole in a centered footprint or offsetting the footprint
in a centered hole.
Fixes: lp:1791287
* https://bugs.launchpad.net/kicad/+bug/1791287
Invalid graphical items that cannot be created in pcbnew may still be
created by external tools. This synchronizes the pcbnew view display
with the gerber output and 3d viewer line widths for these types of
lines. Only filled polygons are permitted 0-width lines.
Fixes: lp:1790534
* https://bugs.launchpad.net/kicad/+bug/1790534
Normally working at a zoom level when a footprint is not fully displayed
indicates that the user modifies other components. Selection Tool used
to discard footprints that had area larger than the viewport area, but
it may make sense to select them if there are no other candidates.
Fixes: lp:1789578
* https://bugs.launchpad.net/kicad/+bug/1789578
This allows full copper connections even when THT changes a trace layer.
It avoides selecting the actual pad to prevent actions on the copper
connections from affecting the footprints as well.
Fixes: lp:1789807
* https://bugs.launchpad.net/kicad/+bug/1789807
Items removed from the connectivity list will not have valid parents, so
we cannot update the BBox, thus we will only use the cached value.
Fixes: lp:1785605
* https://bugs.launchpad.net/kicad/+bug/1785605
Text can be included in the same selection group as the parent module.
Thus if we clear the selection marker on a module's child elements we
also need to remove the element from the selection group.
Fixes: lp:1789418
* https://bugs.launchpad.net/kicad/+bug/1789418
Using Title + Message wasn't working for all the dialogs which
did substitutions in the message (which was a lot of them).
Fixes: lp:1789348
* https://bugs.launchpad.net/kicad/+bug/1789348
The values in choice are 0.0 90.0 not compatible with floating point notation (0,0 90,0)
and always detected as bad values (unless you have loaded a up to date dictionary, which is not necessary the case)
good values are in any case 0 90 180 and -90
Missing types were handled by the superclass (in the case of zones)
PCB_CONNECTED_ITEM, which incorrectly returned "true" when testing lines
against zones.
Fixes: lp:1789195
* https://bugs.launchpad.net/kicad/+bug/1789195
Before closing the window in the footprint editor, we clear the existing
pcb, undo/redo stack and associated memory to prevent callbacks
double-freeing on destruction.
Fixes: lp:1784504
* https://bugs.launchpad.net/kicad/+bug/1784504
The default board soldermask clearance should not be used in the
footprint viewer. Setting the board's solder mask margin to 0 will
leave the footprint displayed with only the soldermask defined by
the pads or the footprint.
Thanks to Fabian Inostroza for pointing out the missing line.
Fixes: lp:1779979
* https://bugs.launchpad.net/kicad/+bug/1779979
Also fixes a bug where nets wouldn't get changed because the
pads weren't changed and so the pad nets would propagate and
wipe out the changed nets on the tracks.
Also includes warning dialogs that pad nets will be changed if the
track nets are.
Fixes: lp:1779854
* https://bugs.launchpad.net/kicad/+bug/1779854
Previous tooltips were outdated. Current action is to center with
single-click, hightlight with right-click and close window with
double-click.
Fixes: lp:1788635
* https://bugs.launchpad.net/kicad/+bug/1788635
Use standard Magnetize() to handle grid and magnetic pads.
Use the standard menu from PCB_TOOL. Delegating the menu to
the SELECTION_TOOL just caused grief.
Also brings clients (such as Position Relative To) into line,
and implements better Cancel behaviour.
Also improves visibility of modal status messages:
- moves Select Anchor message from status bar to popup
- moves Select Reference message from dialog to popup
Fixes: lp:1786727
* https://bugs.launchpad.net/kicad/+bug/1786727
New algorithm more targetted and just clears the items. This
also obviates the need for the aQuietMode flags.
Only fixes one part of the bug, but the "fixes" line is the
easiest way to get a link in the bug to the commit.
Fixes: lp:1786727
* https://bugs.launchpad.net/kicad/+bug/1786727
Shorten and improve informational content of messages, errors and
warnings.
Remove redundant info messages when they shadow an action, warning
or error message.
Improve title of "Update Footprints" to make it clear that it's
recreating footprints which have different assignments rather than
updating footprints from the library.
Don't perform the dryRun twice.
Don't use the old netlist method of loading footprints. We get
better error reporting if we do it ourselves.
Be more careful checking the last pad when checking for single-pad
nets. If the last pad has no net then pad != previouspad at the
end of the loop.
Fixes: lp:1787255
* https://bugs.launchpad.net/kicad/+bug/1787255
Also updates the file menu IDs so that we can actually handle
more than 9 items in the file history.
Also adds configurable file history length to the other gerber
files (zip, drill and job).
Fixes: lp:1745729
* https://bugs.launchpad.net/kicad/+bug/1745729
Eagle files that are edited may be missing required data. While we do
not need to handle these files, we do need to prevent segfaults in KiCad
when reading them.
Primary change is to replace most control/window borders with
AUI pane borders. We implement our own AUI border drawing
routine which avoids the ugly one-pixel white frames around
dark canvasses.
Also increases the signal-to-noise ratio of all the pane
creation code in the various frames.
This makes zoom automatique work much better in the footprint
editor, and should improve other things which probably assumed
the bounding box included everything (such as refresh code).
Callers which still want just the module outline should call
GetFootprintRect() instead of GetBoundingBox().
Some other tools (in this case the POINT_EDITOR) aren't good
citizens and activate themselves when receiving selection
changes.
Fixes: lp:1785781
* https://bugs.launchpad.net/kicad/+bug/1785781
Adds a hotkey to the TOOL_ACTION, and also checks for
action validity prior to running the actions (previously
implicitly gated by the enablement of the menu item).
Spooling up a full PLAYER in the background takes too long.
This also fixes bugs around how the tables are saved, although
that was just missing code rather than anything architectural.
Fixes: lp:1785436
* https://bugs.launchpad.net/kicad/+bug/1785436
Be more intelligent about sorting lib tree items. (Footprint
entries, for instance, come out of an already-sorted list.)
Don't recreate menus twice when laoding Footprint Editor.
More pervasive use of WX_FILENAME to avoid expensive calls to
wxFileName::SplitPath() and string concatenation.
For POSIX kernels do all the work on the file-system side so we
don't have to keep converting back and forth between encodings.
Cache the footprint info on disk (in the project).
Move timestamp-generation (and checking) to the filesystem so the
above will be bullet-proof.
Rewrite some wxWidgets classes for performance (see common.h).
Drop all uses of wxRAISED_BORDER and wxSUNKEN_BORDER from dialogs and
panels used in main frame windows.
Drop use of wxSP_3DSASH options on all wxSplitterWindow definitions.
Minor dialog alignment and spacing fixes.
This also fixes a bunch of bugs where an error during save would
still close the window (rather than cancelling the close action).
Fixes: lp:1785034
* https://bugs.launchpad.net/kicad/+bug/1785034
Also fixes some interactivity issues in the microwave tools around
single-click tools that have initial properties dialogs. Those
need to act kind of like a hybrid between single-click and two-click
tools.
Fixes: lp:1751381
* https://bugs.launchpad.net/kicad/+bug/1751381
When changing elements in the module editor, each element shares the
same parent. Undo commits store a copy of the parent as it existed
before the change. For footprints with many elements, this creates
large, slow undo commits as a copy of the full footprint is stored for
each element being edited.
This keeps a single copy of the footprint in the undo stack per edit.
Fixes: lp:1780526
* https://bugs.launchpad.net/kicad/+bug/1780526
This prevents non-copper layers from being included in the connectivity
search. It also limits the layer search in the connectivity RTree to
just the copper layer range.
There's no point in having both Save Symbol and Save Library when
only one can be selected at a time.
Also cleans up a bunch of extraneous icons, and fixes a few
copy/paste errors in menus and toolbars.
This removes the existing constructors so that all parsing must
be explicit and callers are made aware that they need to think
about illegal characters, malformed ids, etc.
Fixes: lp:1783474
* https://bugs.launchpad.net/kicad/+bug/1783474
* A few typos like stray new lines
* Per cent -> percent
* Consistent use of full stops
* Consistent use of commas after "If 0"
Fixes: lp:1783446
https://bugs.launchpad.net/kicad/+bug/1783446
Also brings horizontal toolbar in line with Pcbnew and Eeschema.
And updates the EDA_LIST_DIALOG to current practices.
This finishes the removal of the active library concept from the
Symbol Editor (started with the new component tree in 5.0).
Fixes: lp:1740717
* https://bugs.launchpad.net/kicad/+bug/1740717
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
Well, almost anyway. We can't use a pad attribute for them as
that would change the file format. So they're currently
defined as a CONN pad with no copper layers.
However, when figuring out of existing pads should be *treated*
as aperture pads, we just check for no copper layers.
Fixes: lp:1781760
* https://bugs.launchpad.net/kicad/+bug/1781760