Compare commits

..

3046 Commits

Author SHA1 Message Date
Wayne Stambaugh 9c9252e8a3 Tag release version 5.1.2. 2019-04-22 17:14:54 -04:00
John Beard 3a744ad72f Use old-style boost includes
The Boost::boost style library dependencies don't work
on some CMake versions (couldn't find library -lBoost::boost)

Use ${Boost_INCLUDE_DIRS} in the target_include_dirs() instead.

Cherry-picked (with changes) from: 1a9aa2e92d
2019-04-22 01:10:50 +01:00
jean-pierre charras 554e2a4bce qfn_wizard.py fixes. 2019-04-21 14:08:01 +02:00
Jeff Young 6e8979d8d8 Add try/catch block around writing a new library.
Fixes: lp:1825203
* https://bugs.launchpad.net/kicad/+bug/1825203

(cherry picked from commit 2bcf38d2b6)
2019-04-18 22:02:24 +01:00
jean-pierre charras 583d416640 DIALOG_CONFIGURE_PATHS: do not allow users to define the env var KIPRJMOD It always defines the project path, and should never be defined by users.
Fixes: lp:1824912
https://bugs.launchpad.net/kicad/+bug/1824912
2019-04-17 14:55:14 +02:00
jean-pierre charras 03b50b4f85 BOARD_NETLIST_UPDATER: fix 2 serious issues in dry run (memory leak and incorrect single pad nets deletion) Single pad nets deletion in dry run was incorrect when a new footprint was added, because in dry run it is not actually added, and the single pad nets deletion does not see these new pads, and can (incorrectly) delete some nets. 2019-04-17 14:55:13 +02:00
John Beard 440e135e3a QA: Remove expected failure from fixed tests
Commit 55fcbddde8 fixed a couple of
failures in the SHAPE_POLY_SET tests, so these no longer
need the expected failure markers.

(cherry picked from commit 371149756d)
2019-04-17 11:48:11 +01:00
John Beard ab39f06003 SHAPE_ARC: fix polyline conversion when radius=0
Prevent a divide-by-zero bug in SHAPE_ARC::ConvertToPolyline.

When the radius is zero, just use the initial angle (it makes
no different anyway, the result is the centre point, which is
the start point.

(cherry picked from commit e312e2b286)
2019-04-17 11:29:28 +01:00
John Beard 98f78f534c QA: Test arc to polylines - this has a bug
Add unit test of SHAPE_ARC::ConvertToPolyline.

This function has a bug when the arc is of zero radius. This
test shows the bug, but does not fix it yet.

(cherry picked from commit ce84c19a38)
2019-04-17 11:29:28 +01:00
Jon Evans d18b12c1a3 Hide simulator settings tabs that aren't implemented yet
Calling Hide() is apparently not enough in Windows

(cherry picked from commit 895d4c9e1a)
2019-04-15 23:21:31 -04:00
Simon Richter 6a7b1aa39a List Boost as a dependency for kicad2step
This is not technically correct (the Boost dependency is introduced through
libcommon), but less invasive as it doesn't pull in libcommon on the linker
command line.
2019-04-15 23:43:42 +01:00
Seth Hillbrand c4be74a9d0 eeschema: Prevent invalid '0' element in components
In the component, an m_unit/m_convert element is 1-indexed as opposed to
the library where they are 0-indexed.  The 0-index in the library is
reserved for those elements that are shared across all conversion/unit
whereas it is invalid for the component.

Fixes: lp:1824764
* https://bugs.launchpad.net/kicad/+bug/1824764
2019-04-15 12:32:29 -07:00
John Beard 9092048dbc Kicad2Step: handle quoted layers
More recent Kicad_pcb files have quoted layer names (i.e.
strings, not symbols). The importer in K2S doesn't handle that,
so it chokes on elements like (layer "Edge.Cuts").

Fixes: lp:1824750
* https://bugs.launchpad.net/kicad/+bug/1824750

(cherry picked from commit c135158364)
2019-04-15 15:01:57 +01:00
Wayne Stambaugh bb419f1201 Begin version 5.1.2 development. 2019-04-14 15:36:47 -04:00
Wayne Stambaugh d505fd2b60 Tag release version 5.1.1. 2019-04-14 15:32:40 -04:00
Jon Evans a771e0eccb Set new module parent early enough to allow pad clearance to be shown
Fixes: lp:1824587
* https://bugs.launchpad.net/kicad/+bug/1824587
2019-04-14 14:26:15 -04:00
Jon Evans 593a5181d7 Fix rotation of global and hierarchical labels
Fixes: lp:1824432
* https://bugs.launchpad.net/kicad/+bug/1824432
2019-04-13 17:02:33 -04:00
Jon Evans c29274e760 Fix ngspice nested DC sweep command
Fixes: lp:1824336
* https://bugs.launchpad.net/kicad/+bug/1824336
2019-04-13 16:38:31 -04:00
Jon Evans 216573bf48 Fix ngspice netlisting when net names contain '/'
Fixes: lp:1821502
* https://bugs.launchpad.net/kicad/+bug/1821502
2019-04-13 15:35:00 -04:00
Jon Evans 1c235a5c89 Properly initialize sheets when loading them from ERC dialog
When displaying a sheet from this path, it's possible the sheet will
not have been initialized yet.  Call DisplayCurrentSheet() to make sure
it is initialized, and then call RedrawScreen to update the zoom level.

Fixes: lp:1824362
* https://bugs.launchpad.net/kicad/+bug/1824362
2019-04-13 12:25:06 -04:00
Jon Evans f90049dd9e Veto mouse warping from DRC dialog
Fixes: lp:1824630
* https://bugs.launchpad.net/kicad/+bug/1824630

(cherry picked from commit dec5d80180)
2019-04-13 11:30:21 -04:00
Jeff Young 90787e84bf Allow dialogs to veto mouse-warping when called from context menu.
Fixes: lp:1745731
* https://bugs.launchpad.net/kicad/+bug/1745731

(cherry picked from commit adf3637476)
2019-04-13 11:30:09 -04:00
John Beard c36c80a077 Fix GAL option spin button layout
These need to not be wxEXPAND and to be vertically centred
to match the adjacent text controls.

Fixes: lp:1804461
* https://bugs.launchpad.net/kicad/+bug/1804461

(cherry picked from commit 203019d959)
2019-04-12 23:36:56 +01:00
Jon Evans 227333239f Improve selection behavior of DRC markers in DRC dialog list 2019-04-12 12:58:47 -04:00
John Beard 2d43fcf9ee GAL opts: move config reading into GAL_DISPLAY_OPTIONS
Move repeated GAL config reading routines into GAL_DISPLAY_OPTIONS.
THe app-level config is in here already, do the same for the
common config.

This means that the configs are loaded consistently, which fixes
the symbol-chooser preview window, which previously didn't use the
same config routine as other GAL canvases.

Future work could move these functions to free functions that
act on the public interface of GAL_DISPLAY_OPTIONS to avoid
GAL_DISPLAY_OPTIONS having to know about wxConfig and wxWindow.

Fixes: lp:1824524
* https://bugs.launchpad.net/kicad/+bug/1824524

(cherry picked from commit ab2281d26f)
2019-04-12 16:48:50 +01:00
Jeff Young 3edad56e6b Refocus control after doing our little raise/raise dance.
Fixes: lp:1821451
* https://bugs.launchpad.net/kicad/+bug/1821451

(cherry picked from commit 4020b5689b)
2019-04-12 00:30:50 +01:00
John Beard 4e2d900775 Pcbnew: FOOTPRINT_PREVIEW_PANEL passes reference to local
Previously, the GAL_DISPLAY_OPTIONS object in FOOTPRINT_PREVIEW_PANEL::New
was passed by reference in the ctor, down to EDA_DRAW_PANEL_GAL, which stored
it as a reference. The object in New() then goes out of scope, so the
referencing panel outlives the options.

Fix this by making a copy in a std::unique_ptr of the options, and giving
ownership to the panel.

There is another issue here: when the Pcbnew options are copies, the
OBSERVABLE subscriber list is copied too. This means if the panel called
NotifyChanged() on the options, Pcbnew would get updates, even though a copy
of the options changed. However, the panel doesn't change the options or
notify, so it's OK for now.

(cherry picked from commit 17e88d0944)
2019-04-11 17:14:07 +01:00
Jeff Young 4dae82054e Increase GervView layers to 51.
This also makes its use of LSET consistent with PCBNew.

Fixes: lp:1809019
* https://bugs.launchpad.net/kicad/+bug/1809019

(cherry picked from commit b7c12b238f)
2019-04-10 21:23:29 +01:00
Jeff Young cb5948d3a5 When checking for duplicate aliases look in the dialog not the symbol.
Fixes: lp:1821543
* https://bugs.launchpad.net/kicad/+bug/1821543

(cherry picked from commit e90452d0e2)
2019-04-10 21:23:14 +01:00
jean-pierre charras 9fc7281fab Zone filler: fix missing calculation of filled polygons when fill mode is ZFM::SEGMENTS 2019-04-10 18:13:15 +02:00
Seth Hillbrand bb779b237a 3d-viewer: Refresh raytracing on rotate
(cherry picked from commit 89d2e67e45)
2019-04-09 15:18:48 -07:00
Seth Hillbrand 1294b4fec8 3d-viewer: Force canvas refresh before screenshot
In some linux configurations, the canvas refresh must be posted before
being handled.  Simply requesting the refresh can queue the event,
preventing an up to date GL canvas from being saved.

Fixes: lp:1819536
* https://bugs.launchpad.net/kicad/+bug/1819536

(cherry picked from commit 707e7b4b65)
2019-04-09 14:47:54 -07:00
Seth Hillbrand 0b754562f6 pcbnew: Handle missing footprint wizards
When we do not have any footprint wizards to display, we cannot select
the grid rows.

Fixes: lp:1823608
* https://bugs.launchpad.net/kicad/+bug/1823608

(cherry picked from commit 7cf394e34f)
2019-04-09 12:07:08 -07:00
Jeff Young 15cb032ab7 Readjust Edit Symbol Properties when symbol references changes.
The new reference may contain different numbers of units and/or
different deMorgan conversion settings.

Fixes: lp:1822316
* https://bugs.launchpad.net/kicad/+bug/1822316
2019-04-09 17:02:29 +01:00
jean-pierre charras c85d2fd3bf Pcbnew: fix a serious issue in ZONE_FILLER. 2019-04-09 16:34:38 +02:00
Wayne Stambaugh bc821ff47d Eeschema: fix schematic text object plotting issue.
Save and restore text thickness in SCH_TEXT::Plot() function to prevent
the plotting default thickness value from stepping on the original text
thickness and causing all of the text objects to magically change to bold.

Fixes lp:1823165

https://bugs.launchpad.net/kicad/+bug/1823165
(cherry picked from commit 3d33cba574)
2019-04-09 10:18:08 -04:00
Jeff Young 42d9f42807 Allow no-connects to be dragged.
Fixes: lp:1821342
* https://bugs.launchpad.net/kicad/+bug/1821342

(cherry picked from commit c78c3c8198)
2019-04-09 11:20:03 +01:00
Jeff Young 7ceff4cf5d Trim zone fills to board outline.
Fixes: lp:1820306
* https://bugs.launchpad.net/kicad/+bug/1820306

(cherry picked from commit 52e3a1d7c4)
2019-04-09 11:20:03 +01:00
Jeff Young 4147da312b Adjust justified text for rotation.
Fixes: lp:1823090
* https://bugs.launchpad.net/kicad/+bug/1823090

(cherry picked from commit a81512ca96)
2019-04-09 00:36:17 +01:00
Jeff Young 439891c31f Adjust left- or right-justified text for mirroring.
(cherry picked from commit 97063440bb)
2019-04-09 00:36:06 +01:00
John Beard 322524101d Libeval: consistent formatting for NaN
On some platforms like MSVC, NaN prints as "-nan(ind)". This
is a bit needlessly ugly, so print "NaN" on all platforms
consistently.

This fixes a test failure on MSVC.

(cherry picked from commit dd17f24c04)
2019-04-08 16:29:24 +01:00
John Beard fd698653d9 QA: numeric evaluator: add a context to tests
This allows a failing test to report which case failed more clearly.

Add a quick helper to make an "in -> out" context string.

(cherry picked from commit 3f32dc9a64)
2019-04-08 15:58:59 +01:00
John Beard 8b503a06fa 3D viewer: update icons from common settings
Use the icon scaling logic and call a toolbar rebuild when the
common settings change (echos the handling in Pcbnew and friends).

Remove an unused function.

(cherry picked from commit 8548e69382)
2019-04-08 14:30:26 +01:00
John Beard 4a201df556 3D viewer: use hi-DPI settings for canvases
The 3D viewer also uses OpenGL, so it also needs to
adjust based on DPI scale factors.

This patch moves the 3D viewer common config code solely
within the 3D viewer, and adds handling of the DPI scale. This
also avoids duplicated logic in PCB_BASE_FRAME::CommonSettingsChanged.

For now, as EDA_3D_VIEWER is not included in the Kiway settings
dispatch, still manually invoke the settings update from
PCB_BASE_FRAME.

The PANEL_3D_PREV gets a similar function to read the config, but
it doesn't have a listener for the update, so it's set just once
at dialog init, just like the existing pan settings.

Fixes: lp:1823681
* https://bugs.launchpad.net/kicad/+bug/1823681

(cherry picked from commit 124dd5e59a)
2019-04-08 14:30:26 +01:00
Seth Hillbrand 577b9f478b pcbnew: Show clearance when editing tracks
When requested by display options, we should show the track clearance
when dragging tracks.

Fixes: lp:1818343
* https://bugs.launchpad.net/kicad/+bug/1818343

(cherry picked from commit cf63ae7ae2)
2019-04-07 21:26:06 -07:00
Seth Hillbrand f5a2eb1ab0 pcbnew: Allow click+drag of tracks
This behavior existed in 5.0.x but did not properly exit the edit tool
in 5.1.  This removes stops the edit tool when we begin dragging a track
using the interactive router.

Fixes: lp:1820312
* https://bugs.launchpad.net/kicad/+bug/1820312

(cherry picked from commit c8118e3ce4)
2019-04-07 20:59:38 -07:00
Michael Kavanagh 4379480d4b Change "Switch track width to previous" default hotkey from Ctrl+W to Shift+W
Tiny improvement in consistency.

Fixes lp:1785842
https://bugs.launchpad.net/kicad/+bug/1785842

(cherry picked from commit 27e6f5b9e8)
2019-04-07 10:52:15 -07:00
Seth Hillbrand dfa4afa826 pcbnew: Freeze the netclasses dialog on init
Prevents the size events from firing on Mac when we set up the netclass
panel

Fixes: lp:1819426
* https://bugs.launchpad.net/kicad/+bug/1819426

(cherry picked from commit a300ae105d)
2019-04-07 07:08:35 -07:00
Wayne Stambaugh a533514763 Minor symbol library rescue dialog fixes.
Adjust the sizer proportions slightly to eliminate the reported bug.
This may not be the ideal way to do this and there could be some issues
on other platforms but it does resolve the issue on gtk3.

Fixes lp:1820084

https://bugs.launchpad.net/kicad/+bug/1820084

(cherry picked from commit 615c49315f)
2019-04-06 08:19:06 -04:00
Wayne Stambaugh 952aaef52a Minor drill file dialog improvements.
(cherry picked from commit b6a0bf1142)
2019-04-05 16:49:51 -04:00
Wayne Stambaugh a54016a6f7 Minor footprint position dialog improvements.
(cherry picked from commit dfee7bddd3)
2019-04-05 16:17:00 -04:00
Michael Kavanagh 0c8a95c44b Invert maximum and minimum endpoints on color picker sliders
Put the maximum values at the "top" of the sliders.

Fixes: lp:1823196
* https://bugs.launchpad.net/kicad/+bug/1823196

(cherry picked from commit 1ccef6dc80)
2019-04-05 14:38:48 +01:00
John Beard 403633d21f Regenerate DIALOG_COLOR_PICKER_BASE wxFB files
This avoids the wxFB automatic changes hiding substantive changes
to be made in later commits.

(cherry picked from commit 0f39d4907f)
2019-04-05 14:38:48 +01:00
jean-pierre charras cc6f1d784d DIALOG_COPPER_ZONE: fix bug that prevent to convert a zone filled by segments to a zone filled by solid polygons 2019-04-05 10:21:16 +02:00
Wayne Stambaugh e07ef3be9c Minor schematic formatter fix.
Apparently at some point in KiCad's development, a '~' character was
prefixed to the symbol name to indicate that it was not visible.  The
visibility state is now saved in the name field so remove the prefix.
The parser was kept unchanged.

Fixes lp:1632048

https://bugs.launchpad.net/kicad/+bug/1632048

(cherry picked from commit ee14da3093)
2019-04-04 10:50:23 -04:00
jean-pierre charras f35f534ff4 DIALOG_PAD_PROPERTIES: Fix incorrect calculation of Round Rect Radius Ratio, when inches are selected.
Fix from master branch.
2019-04-04 15:56:06 +02:00
Jeff Young 3899ec136b Use a bigger hammer when refreshing fields in table.
Fixes: lp:1823050
* https://bugs.launchpad.net/kicad/+bug/1823050
2019-04-04 12:27:29 +01:00
Seth Hillbrand 91ee809558 pcbnew: Prevent aux axis after-image
Grid helper in the router tool is persistent, so remember to turn off
the aux axes after setting.

Fixes: lp:1822577
* https://bugs.launchpad.net/kicad/+bug/1822577

(cherry picked from commit 428e7a900b)
2019-04-03 16:27:37 -07:00
jean-pierre charras 4c94e2729f geometry/geometry_utils.cpp: Fix a minimal value (6) to calculate the segments by circle count to approximate a circle.
Use also this minimal value to calculate  the circle to poly correction factor
Also, remove a useless code.

(cherry picked from commit 0d2dd48cad)
2019-04-03 16:25:52 -07:00
Seth Hillbrand 2a5a207148 pcbnew: Update points before refresh
When removing a point from the polygon, the vertex is removed before it
is tested for validity.  If it fails validation, the edit is reverted
and the point count doesn't change, so the view update only modifies the
existing points.  But the revert may also have changed the shared
pointer to the point array, invalidating the view's copy.

Fixes: lp:1821909
* https://bugs.launchpad.net/kicad/+bug/1821909

(cherry picked from commit 940aef77af)
2019-04-03 16:13:20 -07:00
Seth Hillbrand c75bd89d63 GAL: Deal with thick circles
Both Cairo and OpenGL had issues (different, though) with circles that are
thicker in line width than they have radius.  This corrects the OpenGL
implementation (radius is calculated to the outer edge) as well as Cairo
(line width needs to be clamped to twice the radius)

Fixes: lp:1822765
* https://bugs.launchpad.net/kicad/+bug/1822765

(cherry picked from commit db0523626c)
2019-04-03 16:03:49 -07:00
Seth Hillbrand f58844bf8b pcbnew: Allow Missing legacy option
LEGACY is disabled for GTK3, so we may not find the menu item

Fixes: lp:1822877
* https://bugs.launchpad.net/kicad/+bug/1822877

(cherry picked from commit ce254d1061)
2019-04-03 16:03:21 -07:00
Wayne Stambaugh 07ac3499f3 Remove debugging code added in commit d2cb0ca7.
(cherry picked from commit 75366bce74)
2019-04-03 12:20:37 -04:00
Wayne Stambaugh 050b64b822 Pcbnew: fix DXF import line width bug.
There is a circular dependency between the GRAPHICS_IMPORTER object and
the GRAPHICS_IMPORT_PLUGIN object which makes sharing the settings in
the GRAPHICS_IMPORTER unwieldy.  This fix is a ugly hack that resolves
the issue.  The underlying issue will require some major refactoring.

Fixes lp:1821234

https://bugs.launchpad.net/kicad/+bug/1821234

(cherry picked from commit 120ab06db4)
2019-04-03 11:32:30 -04:00
Wayne Stambaugh 43aa94dcfc Pcbnew: fix import graphics dialog issues.
Improve padding, spacing and alignment of dialog layout.

Fix title capitalization.

Make file dialog wildcard string translatable.

Remove fixed initial dialog size to allow sizers to work their magic.

Replace OK button event handler with TransferDataFromWindow.

Remember last line width units between dialog instances and sessions.

Save configuration file settings in a separate group and remove GfxImport
prefix from the entry names.

Add fencing to dialog header file to prevent nested includes.

Fixes lp:1822568

https://bugs.launchpad.net/kicad/+bug/1822568

(cherry picked from commit d2cb0ca75f)
2019-04-03 11:32:09 -04:00
John Beard b2e54a432b QA: Use own unit test headers for eagle test
These include the appropriate "polyfills" for things like
Boost versions.

(cherry picked from commit 20d36c18350fcccb1bee835553a68da8a0c96b0b)
2019-04-02 23:31:33 +01:00
John Beard e766732020 QA: Eagle test: look up test data in the source tree
Also provide a utility function to get this path, and
a way to override at run time to quickly sub in alternative
data.

The test itself is still broken, as this plugin won't accept
a call to Load() without a KiWay.

(cherry picked from commit 88faac309f)
2019-04-02 19:08:26 +01:00
John Beard 3a5e01c44a QA: Enable eeschema tests
Redesignate the eagle test as eeschema tests and build
more like the other unit tests.

Enable as a test in Ctest now that the test executes without
crashing.

The loading of the file with the hardocded part is still
not enabled, as this needs more infrastructure to support it.

(cherry picked from commit 4eb30f6b85)
2019-04-02 19:08:26 +01:00
John Beard d4883da98b Eeschema: construct simulator cursors on demand
Statically constructing wxCursors as used for the probe
and tune cursors crashes the qa_eagle_plugin test
instantly.

Fix this by introducing a new class CURSOR_STORE,
which allows to abstract the platform wierdness of wxCursors
and allow the simulator to laziliy init its own cursors
at runtime.

This code isn't properly tested, as these cursors are never
actually used. However, it does allow the eeschema unit test
to run.

Fixes: lp:1781191
* https://bugs.launchpad.net/kicad/+bug/1781191

(cherry picked from commit 6f1c3f5ef8)
2019-04-02 19:08:26 +01:00
Michael Kavanagh 7cc3e9a16d Add Ctrl+, hotkey to preferences dialog
Also change interactive router settings from Ctrl+, to Ctrl+Shift+,

(cherry picked from commit b0674b8802)
2019-04-02 13:17:37 -04:00
Michael Kavanagh 9ad352d4bd Fix 'hokey' -> 'hotkey' typo
(cherry picked from commit fe6bc411dd)
2019-04-02 13:17:18 -04:00
Seth Hillbrand 031173bc47 pcbnew: Handle old stable translated layers
This inserts a translation map in the layer names so that the old stable
files with Italian/French layer names get updated to the standard
English layer names (instead of not opening).

Fixes: lp:1370575
* https://bugs.launchpad.net/kicad/+bug/1370575

(cherry picked from commit 6f4d1345f3)
2019-04-01 14:25:27 -07:00
Seth Hillbrand 658820a25e pcbnew: Ensure DRC circles have at least 4 points
This prevents invalid outline errors for small circles.

Fixes: lp:1822641
* https://bugs.launchpad.net/kicad/+bug/1822641

(cherry picked from commit 5eb2a33498)
2019-04-01 14:25:27 -07:00
Wayne Stambaugh 17fdce01a9 GerbView: remember last open gerber file dialog wildcard.
This is only for the current GerbView session.  When GerbView is closed,
the last open gerber file dialog wildcard setting is lost.

(cherry picked from commit f20a1314ff)
2019-04-01 12:47:45 -04:00
Jeff Young bc4cc00332 Update description when tree item is in editor.
Fixes: lp:1820298
* https://bugs.launchpad.net/kicad/+bug/1820298
2019-04-01 13:47:40 +01:00
Jeff Young b57e9492b1 Disable alias controls when no alias is selected.
Fixes: lp:1821698
* https://bugs.launchpad.net/kicad/+bug/1821698
2019-04-01 13:47:31 +01:00
Jeff Young 712bdc9d8d Set initial focus to track width / via size.
Fixes: lp:1822177
* https://bugs.launchpad.net/kicad/+bug/1822177
2019-04-01 13:47:22 +01:00
Jeff Young 33a7c95455 Remove angle brackets from indeterminate string.
They don't really help any, and they confuse some users into
thinking they need angle brackets around real values.

Fixes: lp:1821601
* https://bugs.launchpad.net/kicad/+bug/1821601
2019-04-01 13:47:13 +01:00
Jeff Young f054dcc77d Allow save after importing footprint.
Fixes: lp:1819777
* https://bugs.launchpad.net/kicad/+bug/1819777
2019-04-01 13:47:02 +01:00
Jeff Young 95858b77c1 Ignore BRIGHTENED state when printing.
Fixes: lp:1788480
* https://bugs.launchpad.net/kicad/+bug/1788480
2019-04-01 13:46:46 +01:00
Jeff Young 4afbce5ad6 Fixes for importing board setup properties.
Save/restore default netclass.
Read layers back in with correct syntax ('.' between keyword and layer name).
Write layers to project file.
Read/write layer enablement bits.
Don't set solder paste margin min to 0 (most of them are negative).

Fixes: lp:1811990
* https://bugs.launchpad.net/kicad/+bug/1811990
2019-04-01 13:46:33 +01:00
Wayne Stambaugh 93956002ac Tag version 5.1.0-dev. 2019-04-01 13:32:55 +01:00
Wayne Stambaugh 006dd290e9 Revert "appdata.xml: Remove additional license metadata"
This reverts commit 8a7e501fe6.
2019-03-31 14:35:26 -04:00
Michael Kavanagh fb875145aa Read Footprint Library Browser grid settings from Footprint Editor.
Implements commit 3a0dbf48c8 for Footprint Library Browser/Editor.

Fixes: lp:1822401
https://bugs.launchpad.net/kicad/+bug/1822401
(cherry picked from commit a611269975)
2019-03-31 07:07:52 -07:00
jean-pierre charras 77993ced7e Symbol editor, DIALOG_LIB_EDIT_PIN_TABLE: fix crash when trying to delete a pin when the table is empty.
Fixes: lp:1822406
https://bugs.launchpad.net/kicad/+bug/1822406
2019-03-30 09:32:32 +01:00
jean-pierre charras e1f64d6283 Kicad and Gerbview: add .nc and .xnc file ext to files seen as drill files. .nc is an other usual Excellon drill file ext, and .xnc will be soon also in use. 2019-03-30 09:32:32 +01:00
John Beard 2b60ce484e Formatting: prefer a Git config variable to env var
The keeps all the formatting config together in the Git ecosystem
and keeps the config on a per-repo basis, unless the user explicitly
sets it --global.

Keep the old env var behaviour for now for backwards compatibility.

(cherry picked from commit a7270f8c1c)
2019-03-29 15:12:36 +00:00
John Beard a21b336138 Formatting: exclude generated files from git formatting hook
Add a .gitattributes files to provide a place to store file
attributes. Add a custom attribute for files that should be under
KiCad style guidelines.

Exclude generated files from the style enforcement. So far:

* bitmap .cpp files
* wxFormBuilder base classes
* Lemon grammars

It's now trivial to add the 'generated' attribute to any such
file.

Putting this into .gitattributes also means it can be retreived
programmatically, by other scripts, git alaises or on the command
line.

Use the attributes to provide a utility script to show or apply
formatting to controlled files (plain git clang-format won't
pick up our custom git attributes). Add details for the script in
the dev docs.

Also modiify the check-format hook to follow the .gitattributes
and only apply to cached (staged for commit) changes. Then you
won't be stopped committing because of bad formatting in unstaged
changed, or uncontrolled files.

Concept and some aspects of the implementation inspired by
CMake commit d5f39a56 [1].

[1]: https://gitlab.kitware.com/cmake/cmake/commit/d5f39a56a44fe061018c6acc15e1c3aa7337ff54

tool

(cherry picked from commit a69cdf1793)
2019-03-29 15:12:36 +00:00
John Beard 0655280f2c QA: nullptr_t -> std::nullptr_t
This fixes a build failure on some systems.

(cherry picked from commit 49d75e2383)
2019-03-29 12:49:16 +00:00
John Beard 2793578dcb QA: Allow BOOST_CHECKing of nullptr_t
Before Boost 1.64, there was no test logging function
for std::nullptr_t.

Add a logging struct to Boost to deal with this, and some
macros to assist in similar cases. These macros are bit
untidy-looking, but due to GCC bug #56480, we can't use
namespace aliasing to solve this. From Boost 1.64 onwards,
these namespaces are not needed at all.

Remove some code added to work around lack of nullptr printing
in the past.

These macros, and the nullptr printer, can be removed when
the Boost min version is 1.64 or greater.

(cherry picked from commit ad76ebd82a)
2019-03-29 10:11:19 +00:00
Wayne Stambaugh f1a70662c5 Eeschema: do not merge graphical lines with different attributes.
Fixes lp:1821728

https://bugs.launchpad.net/kicad/+bug/1821728

(cherry picked from commit 2447933b54)
2019-03-28 13:47:58 -04:00
Carsten Schoenert 8a7e501fe6 appdata.xml: Remove additional license metadata
The extra field metadata is not really needed nor helpful as various
other additional licenses are used within the KiCad project.
All used licenses are documented with the file LICENSE.README within top
root folder of the source.

(cherry picked from commit e5de787f88)
2019-03-27 14:50:23 -04:00
Carsten Schoenert 86fc2dc2ba Adding license text for CC-BY-SA-4.0 for completeness
As for the other used licenses adding also the license content for the
CC-BY-SA-4.0 license.

(cherry picked from commit 54aed9b17e)
2019-03-27 14:50:05 -04:00
Carsten Schoenert 9cff42b4ed Adding license information for demo files
The demo files are covered by the CC-BY-SA-4.0 license.
Please note some discussion about this on the developers mailing list:

https://lists.launchpad.net/kicad-developers/msg39174.html
(cherry picked from commit 444050c7d5)
2019-03-27 14:49:44 -04:00
John Beard 55546126a1 Clang-format: break after templates
Enforce the following format:

template<>
void function<TYPE>()

Rather than:

template<> void function<TYPE>()

This is the more common format in KiCad (about 8:1) and agrees
with the uncrustify.cfg rules.

(cherry picked from commit 3536840f52)
2019-03-27 14:38:52 +00:00
John Beard 5a11dacd9e Pcbnew: Improve tab traversal in text properties dialog
Tab through the grid vertically, then horizontally, as the fields
are laid out with "related" fields (like the co-ords) vertically.

Also neaten headers.

Fixes: lp:1821887
* https://bugs.launchpad.net/kicad/+bug/1821887

(cherry picked from commit d6b8e9e037)
2019-03-27 14:06:16 +00:00
John Beard bb5873bf20 Pcbnew: Align right margins in text properties dialog
(cherry picked from commit b7017167f0)
2019-03-27 14:06:16 +00:00
John Beard 20eda54349 Pcbnew: update text properties dialog wxFB version
No actual changes, but this keeps the diffs clean(er).

(cherry picked from commit dd3252445d)
2019-03-27 14:06:16 +00:00
Michael Kavanagh c98461f59e Open drill file in gerbview from KiCad manager tree
Fixes lp:1819754
https://bugs.launchpad.net/kicad/+bug/1819754

(cherry picked from commit b681e4a68e)
2019-03-27 09:13:23 -04:00
jean-pierre charras b154c9a5c4 Eeschema: Force time stamp to 32 bits unsigned values, and make it
tolerant to files using 64 bits values. define timestamp_t as uint32_t.

This fix is adapted from master, commit 175a2bc0b (bug fix lp:1821476)
2019-03-27 13:17:54 +01:00
jean-pierre charras 12255e3680 Eeschema: fix incorrect handling of Escape key. Key events do not have to be skipped after they are handled. 2019-03-27 13:17:54 +01:00
John Beard 473c41ddbf Eeschema: internal tidying of field editor ApplyData
Make a few things const (specficially the reference into
m_fieldStore - we should commit to not modifying that in this
function.

Also avoid a couple of needless string copies.

Also explicitly dereference the into a (non-const) reference at the outset.
For the whole if this function, comp is the same object and may not
be null (as it is used unchecked).

(cherry picked from commit edd94ce2d6)
2019-03-27 10:29:36 +00:00
Baranovskiy Konstantin b93382831c Eeschema: place new field near parent component
For now fields created in Fields Editor are placed at
position (0, 0).
Every new field must be placed at the origin of
the parent component.

(cherry picked from commit 11f03c8551)
2019-03-27 10:29:36 +00:00
Michael Kavanagh 5ee61f5ae7 Fix mnemonic typo in pcbnew menubar
(cherry picked from commit bbcea3c98d)
2019-03-26 19:19:11 -04:00
Seth Hillbrand 082bbd49e7 sim: Prevent stepping
Introduced by 416e64a334.  The code
appears to have been stepped on purpose but this would be incorrect for
most applications.  There remains a good deal of cleanup in mathplot
available for the motivated dev.

Fixes: lp:1810311
* https://bugs.launchpad.net/kicad/+bug/1810311

(cherry picked from commit c1c4a0925d)
2019-03-26 14:59:18 -07:00
John Beard 4e2e69c9cb Fix MSYS2 build breakage
wxPlatformInfo::Get() causes a linker error on Msys2.

Fix this by making common link wx explicitly, rather
than implicity via it's dependencies, which cause
wrong-order linker command lines on windows.

(cherry picked from commit aef369f4af)
2019-03-26 10:53:31 +00:00
John Beard 6f78bb6960 Add configuration of Hi-DPI canvas scaling in OpenGL
First, add automatic detection of toolkit DPI scaling options. For now, this
is, in order,

* Check the GDK_SCALE option under GTK+ (users can set this to force the scaling)
* Check the value from WX's GetContentScalingFactor(). This will start to work
  correctly from WX 3.1 and GTK+ 3.10.

Then, add a user-settable override in the main prefs panel, next to the icon
scaling. This is independent of the icon scaling options.

DPI handling is performed in a standalone class, so they can be shared between
the prefs UI and the OpenGL backend easily. Also means Cairo could use the same
interface in future.

Also adjust the OpenGL grid drawing code to use the computed scale factor,
which avoids over-thick grids in scaled environments (the user can manually
thicken the grid if wanted).

Fixes: lp:1797308
* https://bugs.launchpad.net/kicad/+bug/1797308

Cherry-pick of: 567bdd9b9 (master)
2019-03-25 15:16:18 +00:00
jean-pierre charras a00caac789 Gerbview: fix crash when reading a .gbrjob, and when a file given by the .gbrjob is not found. A incorrect gerber image was created, creating crash on exit or when enable the layer view. 2019-03-24 17:40:16 +01:00
Brian Henning 4e8f191f43 Added an include to tell the compiler where to find wxIsdigit 2019-03-24 15:38:59 +01:00
jean-pierre charras b1c5afd72f Drc dialog: make track to copper zones test optional, because it can be really very time consuming 2019-03-24 15:38:59 +01:00
jean-pierre charras aa5a2225e7 Fix incorrect detection of filled zones changes in DRC check.
Commit 6006703798 fixed a crash but broke the filled zones changes detection.
Filled zones were always seen as not up to date due to the fact the filled areas were cleared too early.

The up to date detection is also optimized: the old filled polygons are no longer stored.
Instead of, the MD5_HASH is calculated and stored before clearing the filled polygons.
2019-03-24 15:38:59 +01:00
jean-pierre charras 4c7672b581 Cvpcb: cosmetic enhancement in toolbar: add a text. 2019-03-24 15:38:59 +01:00
Jon Evans 5f9fa05e21 Fix loading of components with convert parameter set to zero
(cherry picked from commit ab74445df4)
2019-03-23 18:58:17 -04:00
Wayne Stambaugh ee92fa51bc Symbol editor: improve tooltip in symbol properties dialog.
Make the "Define as power symbol" checkbox tooltip more descriptive so
the user has a better understanding of enabling this option.

Fixes lp:1804932

https://bugs.launchpad.net/kicad/+bug/1804932

(cherry picked from commit a7c8df5666)
2019-03-20 15:58:11 -04:00
Simon Richter 63b3960120 Update/regenerate pcb_calculator_frame_base.fbp
(cherry picked from commit 4896daaae5)
2019-03-19 15:21:38 -04:00
Simon Richter e5c76ddf3e Fix line endings in pcb_calculator_frame_base.fbp
No text changes

(cherry picked from commit e286ca170d)
2019-03-19 15:21:19 -04:00
Simon Richter 4b07979008 Add a few dielectric values
- Isola FR408
   https://www.isola-group.com/wp-content/uploads/data-sheets/fr408.pdf
 - Isola 370HR
   https://www.isola-group.com/wp-content/uploads/data-sheets/370hr.pdf
 - Rogers RO4003C
   https://www.rogerscorp.com/documents/726/acm/RO4000-Laminates---Data-sheet.pdf
 - Rogers RO4350B
   (as above)

(cherry picked from commit 432e12effd)
2019-03-19 10:38:43 -04:00
Seth Hillbrand 168fa09f5f Unify and correct Autosave functions
Autosave was not working correctly, partly due to different
implementations in eeschema and pcbnew and partly due to a mistaken
refactor at some point during v5 development.  This unifies the expected
autosave prefix to _autosave- for both pcbnew and eeschema.  It also
unifies the expected suffix for the backup files to -bak.

Fixes: lp:1820433
* https://bugs.launchpad.net/kicad/+bug/1820433

(cherry picked from commit 078320e2fb)
2019-03-18 10:27:09 -07:00
Seth Hillbrand 4facd57cb7 libedit: Don't move the field below the last item
There needs to be at least one item below the one we want to move down
in order to allow the action.

Fixes: lp:1820532
* https://bugs.launchpad.net/kicad/+bug/1820532

(cherry picked from commit 0943c176a3)
2019-03-18 10:27:09 -07:00
Wayne Stambaugh e999636048 Symbol editor: fix superfluous dialog display.
Call base object TransferDataFromWindow() to prevent Validate() from
being called twice.  Validation is handled completely under the hood
so there is no need to call Validate() directly.

Fixes lp:1820301

https://bugs.launchpad.net/kicad/+bug/1820301
2019-03-18 11:46:03 -04:00
Seth Hillbrand 5bd769ea40 Remove global library from pspice simulation 2019-03-17 20:56:24 +01:00
jean-pierre charras bd693f97a1 Print on Linux: use 600 DPI instead of the default 72 DPI (noticeable in Pcbnew) 2019-03-17 20:52:42 +01:00
jean-pierre charras af0cb68c1b Eeschema: do not draw dangling symbol (circle) for PIN_NC pin types. These pins are never connected, so a dangling symbol makes no sense.
Fix also a fex minor coding style issues.
2019-03-17 20:52:42 +01:00
jean-pierre charras 761d7fd438 Demo pic_programmer: remove unused schematic library from list. 2019-03-17 08:52:00 +01:00
jean-pierre charras c537e8a892 Eeschema: shows the opened sheet info in title bar.
Fixes: lp:1819564
https://bugs.launchpad.net/kicad/+bug/1819564
2019-03-17 08:52:00 +01:00
jean-pierre charras 702e85cd96 Pcbnew: disable commit 3692c511 on non Windows platforms A zone refill display progress bar is shown when deselecting the zone after geometry changes. However, on Linux, there are some artifact between the progress bar refresh and the board view refresh: the filled areas are incorrectly shown: the insulated islands remain displayed, although they are removed from the actual filled areas list So it is disabled until a fix is found. 2019-03-17 08:52:00 +01:00
Wayne Stambaugh c93e0b6c5e Minor board editor menu fixes.
Correct menu string capitalization.

Remove duplicate mnemonic characters.

Fixes lp:1818906

https://bugs.launchpad.net/kicad/+bug/1818906
2019-03-16 10:37:35 -04:00
Wayne Stambaugh f7b4a20066 Replace isdigit() with wxIsdigit() when testing wxString characters.
This is a continuation of commit 8a03025a.  All known instances of
using isdigit() to test a character in a wxString have been replaced
by wxIsdigit().
2019-03-15 15:54:49 -04:00
Seth Hillbrand 49ac89bfed pcbnew: Don't refresh S_CURVE in bbox()
The bounding box calculation needs to be fast and is threaded in many
places in pcbnew.  We cannot invalidate items (the function is const but
this wasn't caught at compile-time for some reason) when getting the
bbox. This shouldn't be an issue as the m_BezierPoints is rebuilt each
time the curve is updated, so rebuilding during the bbox seems extra.

Fixes: lp:1819984
* https://bugs.launchpad.net/kicad/+bug/1819984

(cherry picked from commit ec24981cc8)
2019-03-14 05:49:30 -07:00
jean-pierre charras 16e62b29f9 Zone fill: display progress bar when refilling a zone after edition.
Previously, refilling a zone after edition was made silently,
thus creating not understandable but very noticeable freeze time for complex zones.

(cherry picked from commit 3692c511d0)
2019-03-14 05:49:30 -07:00
jean-pierre charras b8180b0459 PROF_COUNTER: add a helper method.
(cherry picked from commit 3fc681c1b7)
2019-03-14 05:49:30 -07:00
Seth Hillbrand 37f250b384 pcbnew: Remove fills prior to updates
Removing existing fills will prevent re-drawing invalid polygons before
they are ready.  This seems to happen on Macs more easily due to redraw
timing.

Fixes: lp:1819553
* https://bugs.launchpad.net/kicad/+bug/1819553

(cherry picked from commit 6006703798)
2019-03-11 16:29:02 -07:00
Seth Hillbrand 5685ec525b GAL: Handle negative line widths
When displaying negative line width elements, the outline of the item
should be hidden rather than displayed.

Fixes: lp:1819247
* https://bugs.launchpad.net/kicad/+bug/1819247

(cherry picked from commit c61ec8ee3b)
2019-03-11 12:38:26 -07:00
Seth Hillbrand 5be59ea8dd eeschema: Fix plot line width for negative lines
Negative width lines are used to hide the outline of shapes in eeschema.
Plot should not show these lines.

(cherry picked from commit 94fa734c61)
2019-03-11 12:38:19 -07:00
Seth Hillbrand 5855f2d909 Ensure LIB_ALIAS elements are always drawn
We add LIB_ALIAS to the VIEW rtree when choosing a new symbol or
browsing.  The actual display element may change based on the unit or
demorgan representation but there will only ever be a single one drawn.
This will set the view bbox to maximum to ensure it is always checked
for drawing.

 Related to lp:1796960
 https://bugs.launchpad.net/kicad/+bug/1796960

(cherry picked from commit d25d62295a)
2019-03-10 20:18:12 -07:00
jean-pierre charras 5424223949 Thermal reliefs: fix a corner case that wrongly removes a stub in a thermal shape.
This was due to the stub removal tests if a stub end is outside a solid area to remove it.
There is a corner case: is the stub end is exactly on a solid area outline extra segment
created by Fracture() used in calculations.

The stub removal tests are now made before fracturing.

Fixes: lp:1819317
https://bugs.launchpad.net/kicad/+bug/1819317
(cherry picked from commit b9944e2c06)
2019-03-10 11:50:33 -07:00
Seth Hillbrand de22148b44 Move env var substitution into GetAssociatedDocument
We always want the documents to have their variables replaced when
opening the associated file.

Fixes: lp:1819309
* https://bugs.launchpad.net/kicad/+bug/1819309

(cherry picked from commit 9bfce26ce7)
2019-03-10 10:44:23 -07:00
Wayne Stambaugh 73664e610b Begin version 5.1.1 development. 2019-03-08 13:11:03 -05:00
Wayne Stambaugh 605473be1d Tag release version 5.1.0. 2019-03-08 07:31:50 -05:00
John Beard 26d04269ac Pcbnew: disable module numbering in pcbnew arrays
The module refdes always increment by one. This is problematic
for two reasons:

* It doesn't work when more than one FP is selected (say you have
  C1 and C2, you get C1, C2, C2, C3)
* It messes with simple panellisations

The 5.0.x behaviour is to not renumber in Pcbnew, so revert to
that behaviour.

Better refdes incrementation can come post 5.1, as this will need
new strings and UI.

Fixes: lp:1819106
* https://bugs.launchpad.net/kicad/+bug/1819106
2019-03-08 10:34:43 +00:00
Seth Hillbrand 6eb84e42f2 cmake: Remove invalid clang syntax
Clang compiler uses the same syntax for sending flags to the linker as
gcc.  If we use -XLinker, we can't use comma-separated options but
there appears to be no reason to anyway.  Removes extra warning quieting
that was added for compiling Boost in tree.
2019-03-07 13:59:18 -08:00
John Beard b6916c490c Pcbnew: allow tab traversal of footprint orientation text control
Disable the text update event for the orientation cutom value field before
updating it when the radio buttons are selected. This allows to use the
conventional EVT_TEXT handler, rather than KEYDOWN, which has two effects:

* Tabbing though the dialog no longer sets custom orientation
* Click-driven clipboard actions trigger the update correctly.

Introduce a helper function in validators.h to assist in updating
validated fields without triggering further events.

Fixes: lp:1819006
* https://bugs.launchpad.net/kicad/+bug/1819006
2019-03-07 20:27:04 +00:00
John Beard 4574349539 UI: Automatic wxFB changes in pcbnew edit footprint dialog
Commit automatic changes to keep diffs clean when real changes are made.
2019-03-07 20:27:04 +00:00
jean-pierre charras 5eee88b78a Pcbnew, Draw zones in GAL mode: fix missing initialization of line color.
It is noticeable only in printing mode.

Fixes: lp:1818971
https://bugs.launchpad.net/kicad/+bug/1818971
2019-03-07 21:09:03 +01:00
jean-pierre charras 26acd39129 Fix a few Coverity warnings. 2019-03-07 20:01:47 +01:00
Seth Hillbrand 523b37d9ae pcbenw: Clear contours before regenerating in DRC
When checking for closed outlines, we generate a board area using the
pcb structure.  We now also check for overlapping outlines due to
lp:1818163 However, the DRC maintained its previous outline before
generating the new one, causing an overlap error.

This regenerates the board outline from zero for each DRC run.

Fixes: lp:1819012
* https://bugs.launchpad.net/kicad/+bug/1819012
2019-03-07 09:45:54 -08:00
Seth Hillbrand 5ba2a08366 pcbnew: Set filename in Page Layout template
pcbnew refreshes the viewItem for the worksheet multiple times.  This
requires setting the filename to get parameters displayed on the
worksheet correctly.

Fixes: lp:1819000
* https://bugs.launchpad.net/kicad/+bug/1819000
2019-03-07 06:01:53 -08:00
jean-pierre charras 200ff1cda6 Pcbnew: Fix incorrect polygonal shape of thermal reliefs of rect pads.
Depending on thermal reliefs size, the polygons could be self intersecting,
and these self intersecting polygons are unexpected in zone calculations.
Other fix: the width of thermal stubs is clamped to the size of pads.
Previously, a bug in clamping calculations prevents constraining thermal stubs width.

Fixes: lp:1818752
https://bugs.launchpad.net/kicad/+bug/1818752
2019-03-07 14:31:12 +01:00
Seth Hillbrand d2d2101170 templates: Create template like normal project
When creating a new project from a template, we should follow the
same workflow as creating an empty project.  Without this, the project
requires the directory to exist and the form doesn't allow creating new
directories (in GTK3 at least).
2019-03-06 20:01:30 -08:00
Wayne Stambaugh 4612175da2 Pcbnew: better fix for dialog default button handler issues.
Use DIALOG_SHIM::SetInitialFocus() to fix default button handler issue
on all platforms.  Commit cabc33b4 only fixed the problem on windows.
2019-03-04 15:30:32 -05:00
Seth Hillbrand 3dfa57fe1d pcbnew: Clear highlight cross-probe
When highlighting a new net, clear the Eeschema highlight before
selecting items

Fixes: lp:1815147
* https://bugs.launchpad.net/kicad/+bug/1815147
2019-03-04 12:00:59 -08:00
Tomasz Włostowski 92e2aa31a9 pcbnew: router: fix non-45 degree tail merge in LINE_PLACER
Fixes: lp:1817795
* https://bugs.launchpad.net/kicad/+bug/1817795
2019-03-04 18:33:10 +01:00
Wayne Stambaugh cabc33b4cd Pcbnew: fix dialog default button handler issues.
Set the focus to some control in the copper zone, non-copper zone, and
keep out zone dialogs required for the default button action to work
properly.  This only seem to affect windows dialogs.

Fixes lp:1818397

https://bugs.launchpad.net/kicad/+bug/1818397
2019-03-04 11:34:04 -05:00
Seth Hillbrand a7f3462637 Fix compile issue on Linux 2019-03-04 06:11:44 -08:00
Jeff Young 49aa2503a0 Use recent wxWidgets headers (which are backward-compatible).
Fixes: lp:1817965
* https://bugs.launchpad.net/kicad/+bug/1817965
2019-03-04 12:26:30 +00:00
Jeff Young cedef13bb1 Enable default OK button.
Fixes: lp:1818397
* https://bugs.launchpad.net/kicad/+bug/1818397
2019-03-04 12:06:40 +00:00
Jeff Young 69f003ba4a Remove previous cell selection fixes in favour of slow-click hack.
wxWidgets has several bugs that result in cell editors being closed
right after they're opened.  There are two wxWidgets hacks to
partially address this: the SetInSetFocus() hack, and a slow-click
hack.  We used to try and work-around these bugs ourselves for
single-click access, but this changelist moves those over to
wxWidget's slow-click hack.

Fixes: lp:1817965
* https://bugs.launchpad.net/kicad/+bug/1817965
2019-03-04 11:09:33 +00:00
jean-pierre charras a128ffdea6 DIALOG_LIB_NEW_COMPONENT_BASE: fix minor issues.
Fixes: lp:1818471
https://bugs.launchpad.net/kicad/+bug/1818471
2019-03-04 08:27:00 +01:00
Seth Hillbrand 8a03025ac9 strnumpcmp: Use wxstring functions for wxstrings
Fixes: lp:1818157
* https://bugs.launchpad.net/kicad/+bug/1818157
2019-03-03 19:55:50 -08:00
Michael c3928c21eb Fix template selector notebook behaviour
Also replace "validate" button with standard refresh icon button.

Fixes: lp:1773510
https://bugs.launchpad.net/kicad/+bug/1773510
2019-03-03 19:43:41 -08:00
Michael de706635cc Add high contrast hotkey to GerbView
Also add all existing hotkeys to menubar.

Fixes: lp:1795388
https://bugs.launchpad.net/kicad/+bug/1795388
2019-03-03 19:25:53 -08:00
jean-pierre charras 643d884fde Pcbnew: fix issue in legacy canvas when dragging a footprint (connectivity not updated)
Fixes: lp:1818388
https://bugs.launchpad.net/kicad/+bug/1818388
2019-03-03 19:11:25 +01:00
Seth Hillbrand 38be0fccb7 Symlib table: Need button handler for files
The folder button handler works will for footprint libraries but we
needed a specific class for the schematic libraries as well.

Fixes: lp:1818346
* https://bugs.launchpad.net/kicad/+bug/1818346
2019-03-02 20:05:28 -08:00
Seth Hillbrand db31b7902a libedit: Resolve path substitutions
Fixes: lp:1818220
* https://bugs.launchpad.net/kicad/+bug/1818220
2019-03-02 08:00:54 -08:00
Seth Hillbrand 84a1772e66 libedit: Control resize requests
Another GTK3 dialog with excessive resize requests.  Control the number
for re-draws based on grid size.

Fixes: lp:1818325
* https://bugs.launchpad.net/kicad/+bug/1818325
2019-03-02 05:49:18 -08:00
Wayne Stambaugh 8d26b07f67 Fix potential string iterator issue.
Added checks to StrCmpNum() function in common/sting.cpp to prevent
iterating past the end of the sting.  Also removed length of string
parameter since it did not seem to be used anywhere.

Fixes lp:1818157

https://bugs.launchpad.net/kicad/+bug/1818157
2019-03-02 08:20:53 -05:00
Seth Hillbrand 16b3c80a7c qa: Add StrNumCmp test 2019-03-01 11:22:35 -08:00
Seth Hillbrand 40309a17ef pcbnew: Check exact overlapping polygons
Checks for polygon collisions in the outline when the polygon contains
two or more segments that exactly overlap.  This also places the DRC
marker at the location where the collision happens.

Fixes: lp:1818163
* https://bugs.launchpad.net/kicad/+bug/1818163

Fixes: lp:1818218
* https://bugs.launchpad.net/kicad/+bug/1818218
2019-03-01 09:38:33 -08:00
jean-pierre charras c2a7e5536e Eeschema: fix regression: set the max number of units per package to 64.
64 is the max number of units per package in 5.0.x

Fixes: lp:1818061
https://bugs.launchpad.net/kicad/+bug/1818061
2019-03-01 16:47:31 +01:00
jean-pierre charras 140abd3952 Pcbnew: fix missing vertical grid lines in flip board view
Fixes: lp:1818154
https://bugs.launchpad.net/kicad/+bug/1818154
2019-03-01 11:09:40 +01:00
Seth Hillbrand 307a7154b6 DIALOG_SHIM: Enable Cancel button when editing
The cancel action was set for the escape key when editing the fields in
a dialog.  But when the action is a button, we need to ensure that the
escape id is set to ANY for processing.

Fixes: lp:1818056
* https://bugs.launchpad.net/kicad/+bug/1818056
2019-02-28 18:52:35 -08:00
Seth Hillbrand b9097c2c1d Test for extension before adding to new project
Fixes: lp:1818136
* https://bugs.launchpad.net/kicad/+bug/1818136
2019-02-28 12:33:41 -08:00
jean-pierre charras 1ba1c6dbf3 DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS_BASE: fix minor wxWidgets alerts. 2019-02-28 18:56:48 +01:00
Frank Severinsen 71a62bb782 Change pin on grid test in symbol editor.
The pin on grid test always used a fixed grid spacing of 25 mils.  The
change uses the current grid setting for the on grid test.  Grid sizes
below 25 mils are clamped to 25 mils to prevent issues when connecting
wires to pins in the schematic editor.

Fixes lp:1817896

https://bugs.launchpad.net/kicad/+bug/1817896
2019-02-28 09:46:57 -05:00
jean-pierre charras a391e5a236 Add comments 2019-02-28 13:35:37 +01:00
Jeff Young e25970592c Tighten up spacing a bit for 1024x768 monitors.
Fixes: lp:1817974
* https://bugs.launchpad.net/kicad/+bug/1817974
2019-02-28 11:36:09 +00:00
jean-pierre charras 16cbd25ed2 DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS_BASE: fix a minor wxWidgets alert. 2019-02-28 09:14:11 +01:00
Seth Hillbrand 13249b723b Handle excessive resize requests
For unknown reasons, GTK3 may send resize events when editing grid
fields.  This can cause the grid editor to exit, losing the focus and
overwritting the characters at the next input.

We avoid this by filtering the size events when the size doesn't change.

Fixes: lp:1817810
* https://bugs.launchpad.net/kicad/+bug/1817810
2019-02-27 11:32:30 -08:00
Jeff Young 22229fbba4 Re-parent items being copied from the clipboard.
Their original parent might have been freed by now if they came
from a different symbol.

Fixes: lp:1815525
* https://bugs.launchpad.net/kicad/+bug/1815525
2019-02-27 19:09:45 +00:00
Jeff Young f494a24404 Resync lib_tree after editing aliases.
This also fixes an unrelated bug where the current part highlighting
would get lost after a rename.

Fixes: lp:1817639
* https://bugs.launchpad.net/kicad/+bug/1817639
2019-02-27 18:13:49 +00:00
Jean-Samuel Reynaud c77031842e Fix another compilation issue on PPC64 2019-02-27 11:23:23 -05:00
jean-pierre charras 2768b3ddbe Pcbnew: fix check zone fills before plotting doesn't test no net zones.
Fixes: lp:1817797
https://bugs.launchpad.net/kicad/+bug/1817797
2019-02-27 11:27:18 +01:00
jean-pierre charras 29d7c0a1ec Excellon drill file: fix a very minor issue in a comment. 2019-02-27 10:41:55 +01:00
Jeff Young 73f0b3087c Initialize grid visibility correctly when opening project files. 2019-02-26 18:24:07 +00:00
Seth Hillbrand 51fce4bad8 Force X11 on linux
Wayland is not yet compatible with wxWidgets (or rather the other way
around).  Until this happens, we must force the x11 compositor while
running.  Under wayland, this will map to the wayland-x11 compatibility
layer.

Fixes: lp:1816637
* https://bugs.launchpad.net/kicad/+bug/1816637
2019-02-26 08:51:12 -08:00
Marco Ciampa 036be7db84 Added Italian translator 2019-02-26 08:54:47 +01:00
Wayne Stambaugh 4964ec4d20 Start next 5.1 development version. 2019-02-25 17:51:31 -05:00
Wayne Stambaugh 6ec2c5ffc9 Tag 5.1.0-rc2 release. 2019-02-25 17:51:31 -05:00
Seth Hillbrand b836f3cefa Page Layout: Do not double-move frames
When block selecting and dragging in Page Layout editor, multiple items
with the same parent may be selected.  We do not want to move them twice
or the block will show with misaligned elements when placed.
2019-02-25 14:15:34 -08:00
Seth Hillbrand 81a5bd977b Force overlay when building GTK3
GTK3 does not provide the XOR method.  We need to force the overlay to
draw items in Page Layout editor when moving/dragging
2019-02-25 14:14:44 -08:00
Wayne Stambaugh 5315d1be22 Eeschema: fix an option toolbar refresh bug.
For some reason, changing languages was causing the options (left) toolbar
to get redrawn with some of the main toolbar entries.  Changing the window
size causes the toolbar to be redrawn correctly.  The normal call to
function wxWindow::Refresh() does not.

Fixes lp:1816492

https://bugs.launchpad.net/kicad/+bug/1816492
2019-02-25 13:26:14 -05:00
Seth Hillbrand 269f420f8d OpenGL: Create shaders for each GL
Fixes: lp:1817284
* https://bugs.launchpad.net/kicad/+bug/1817284
2019-02-25 09:31:42 -08:00
John Beard 787e410a55 Coverity fixes: lambda parameters by reference
For BUTTON_ROW_PANEL::BTN_DEF_LIST, the  button definition does not need to be
passed by value, by non-const reference avoids copies and this addresses the
Coverity warnings: 184130, 184134, 184140, 184167.

Also use a unique_ptr to clarify ownership sementics when handing widget
over to WX.
2019-02-25 13:37:51 +00:00
jean-pierre charras 4bf52b9266 Gerber output: add missing end of block to a structured comment in X1 format.
the comment line G04 #@! TF.CreationDate ... was missing the * (end of block) symbol.

Fixes: lp:1817547
https://bugs.launchpad.net/kicad/+bug/1817547
2019-02-25 14:16:36 +01:00
John Beard 346f813814 QA: Add WX_FILENAME split tests
Add some tests of the filename splitting of WX_FILENAME objects.

Interestingly, the result of GetFuillPath on an empty path is
likely wrong as it will imply an absolute path from /. But this is
probably not a used code path. Document the current behaviour as passing
the test.

This unit tests covers the code reported by Coverity 183884 and 183894
(improper use of negative). The find_last_of can return "npos" (-1), but
it's stored as a size_t. This is correct according the WX docs,
and the substr() method it is passed to can handle npos too.
2019-02-25 12:43:31 +00:00
jean-pierre charras 4d08906288 Pcbnew: fix 2 minor issues
* fp editor: ensure axis are drawn after switching the backend
* DIALOG_PNS_SETTINGS: ensure violate DRC option is correctly enabled/disable when opening the dialog.
2019-02-25 11:34:32 +01:00
jean-pierre charras 8ad15b1d66 Symbol editor: fix issues related to axis not shown.
In Symbol editor, axis are always shown. However after switching the backend, axis were no longer drawn.
In Cairo engine, fix a bug preventing axis to be shown.
2019-02-24 12:56:17 +01:00
Seth Hillbrand 30612ca62d grid: Set grid to use integer pixels
Each dot is an integer number of pixels wide, so supporting 0.5 width
steps no longer makes sense.  We round up the existing settings to the
nearest integer and only allow integers in the dialog.

Fixes: lp:1816748
* https://bugs.launchpad.net/kicad/+bug/1816748
2019-02-23 19:27:45 -08:00
Seth Hillbrand 1be759c5c1 pcbnew: Force rotation to grid
When setting the modification point of a group, we get the grid-snapped
coordinate

Fixes: lp:1674835
* https://bugs.launchpad.net/kicad/+bug/1674835
2019-02-23 14:48:12 -08:00
Seth Hillbrand 643d9901c7 eeschema: Refresh canvas after clearing
Forces a canvas update to change the highlighting after clearing the
selected item.

Fixes: lp:1809731
* https://bugs.launchpad.net/kicad/+bug/1809731
2019-02-23 11:07:00 -08:00
Seth Hillbrand 49d3440529 Prevent stripping preceived extensions from new proj
wxFilename automatically detects extensions based on the last "." in a
full filename.  We need to re-add the extension if it is removed.

Fixes: lp:1816862
* https://bugs.launchpad.net/kicad/+bug/1816862
2019-02-23 09:06:10 -08:00
Seth Hillbrand f002382b4a eeschema: Set modifying transparency on edits
While modifying elements in eeschema/libedit, they are overdrawn on the
rest of the schematic.  This prevents alignment with existing elements
as the underlying elements are not visible.  We set a slight
transparency on elements while being modified to allow the user to view
existing elements at the same time.

Fixes: lp:1817233
* https://bugs.launchpad.net/kicad/+bug/1817233
2019-02-23 08:19:50 -08:00
Seth Hillbrand d36fbba1f3 pcbnew: Violate DRC only enabled in Highlight mode
Violating the DRC cannot happen in shove or walk around mode as we use
the DRC to calculate these actions.  The tooltip explains this as well
but we need to explicitly disable the checkbox to prevent users from
thinking that they can complete DRC violating tracks in other modes.
2019-02-23 08:19:50 -08:00
Seth Hillbrand f47089a804 pcbnew: Enforce router settings
When the user selects "Ignore DRC" in the Highlight collisions mode,
they should be allowed to start drc violating tracks as well as end
them.
2019-02-23 08:19:50 -08:00
John Beard 82734e7116 Adjust tab ordering in some dialogs
Introduce a shortcut method to set tab ordering and use it in
the dialogs that override the tab traversal orders:

* Eeschema sheet properties
* Pcbnew Move exact
* Pcbnew Move relative

Also set some initial focus fields in the same dialogs.

Tidy a few includes.

Fixes: lp:1816009
* https://bugs.launchpad.net/kicad/+bug/1816009
2019-02-23 14:49:38 +00:00
John Beard 498a566ca3 Pcbnew: fix spacing in move exact dialog
The middle text ctrl has borders on both top and bottom, should be just
one for even spacing.
2019-02-23 14:49:38 +00:00
Seth Hillbrand cb352bb029 Set Page Layout preview scale and clear bg
The preview scale is always in mil, so leave the scale factor as implied
as 1;  Draw a white rectangle for the page layout preview background.
2019-02-23 06:22:27 -08:00
jean-pierre charras 0421335ac1 Minor fix in DIALOG_PAD_PROPERTIES: set show grid to false. 2019-02-23 12:31:00 +01:00
jean-pierre charras aca1835610 Fix minor wxWidgets alerts. 2019-02-23 09:33:59 +01:00
jean-pierre charras 7b75629a67 rename file 2019-02-23 09:18:02 +01:00
Seth Hillbrand 82cbe9c995 cairo: Don't adjust grid point size
We shouldn't adjust the pixel size of the grid based on alignment in
GAL.  This creates artifacts on the screen at different zoom levels.
The pixel width is fixed by grid size preference

Also clean a left-over debug statement

Fixes: lp:1817377
* https://bugs.launchpad.net/kicad/+bug/1817377
2019-02-22 15:31:27 -08:00
jean-pierre charras 99153950ec Pcbnew, Ruler tool: protect unit display against erroneous translation of \"
A only one char is very hard to translate outside a context, so avoid to use it.

Remove also 2 "FIX ME" lines, now useless.

Fixes: lp:1817354
https://bugs.launchpad.net/kicad/+bug/1817354
2019-02-22 20:47:55 +01:00
Seth Hillbrand c4fe6785ad gerbview: Fix arc filling
Arcs in gerbview should not be filled.

Fixes: lp:1817246
* https://bugs.launchpad.net/kicad/+bug/1817246
2019-02-21 21:26:10 -08:00
Seth Hillbrand 2305c5458e cairo: Prevent arch shaking in pcbnew
Arc pixel adjustment needs to be limited to +/-1 pixel.  But making this
adjustment to nearby points and then using the projection to correct the
center point accumulates errors that are large for angles near 0 and
near 360.  This is a compromise that aligns _most_ arcs and provides
stable generation for all angles.

Fixes: lp:1817226
* https://bugs.launchpad.net/kicad/+bug/1817226
2019-02-21 19:59:34 -08:00
Jeff Young f14cf5cbc7 More uniform handling of state saving in global edit dialogs.
Includes Edit Text and Graphics Properties and Edit Track and Via
Properties.  It's also no longer board-specific as it turns out the
board timestamp is always 0 anyway.
2019-02-21 15:11:16 -07:00
Seth Hillbrand dae7b03465 gal: re-enable arc outline mode
Fixes: lp:1816373
* https://bugs.launchpad.net/kicad/+bug/1816373
2019-02-21 10:52:54 -08:00
Seth Hillbrand 066b1782bb cairo: Fix grid display
Grid points were uneven in Cairo compared to OpenGL.  This standardizes
the functions for grid types and simplifies the code
2019-02-21 10:49:56 -08:00
John Beard 29c8f92c27 Eeschema: move EDIT_COMPONENT_IN_SCHEMATIC to own header
Move the class DIALOG_EDIT_COMPONENT_IN_SCHEMATIC to its own
header, and move the SCH_EDIT_FRAME::EditComponent out of the
dialog implementation file. Thus, users of the dialog are
coupled only by the dialog header, as usual.

Also tidy some includes and comments.
2019-02-21 10:04:29 +00:00
John Beard 75406e2742 Libedit: Fix cancel button in symbol edit dialog
In DIALOG_EDIT_COMPONENT_IN_SCHEMATIC, the Cancel button is
connected to a dedicated handler to deal with the footprint
browser widget. DIALOG_EDIT_COMPONENT_IN_LIBRARY should have
the same logic.

Fixes: lp:1816636
* https://bugs.launchpad.net/kicad/+bug/1816636
2019-02-20 23:00:22 +00:00
Jean-Samuel Reynaud 75eda69218 Fix compilation issue on PPC64 2019-02-20 09:44:03 -05:00
Seth Hillbrand 235f2c7b39 cairo: Fix dotted grid color
Fixes: lp:1816774
* https://bugs.launchpad.net/kicad/+bug/1816774
2019-02-20 06:30:19 -08:00
Seth Hillbrand 203486638b Cleanup and clarify Cairo code 2019-02-19 20:51:11 -08:00
Seth Hillbrand f40dfa2765 eeschema: Refresh canvas when the options change
Windows doesn't appear to properly re-paint after an options change.
This forces the repaint when setting options

Fixes: lp:1816506
* https://bugs.launchpad.net/kicad/+bug/1816506
2019-02-19 17:04:51 -08:00
Jeff Young e71b215963 Restore 3D canvas to full size on Retina displays. 2019-02-19 16:18:11 -07:00
Seth Hillbrand b4c0af021e eeschema: Handle Windows click ordering
Click to add/edit footprint filters under MSW requires handling the
listbox double click first before the item is handled.

Fixes: lp:1816182
* https://bugs.launchpad.net/kicad/+bug/1816182
2019-02-19 12:51:40 -08:00
jean-pierre charras 9ff0868813 pcbnew: fix incorrect sizing of net list display in DIALOG_SELECT_NET_FROM_LIST 2019-02-19 20:07:38 +01:00
Seth Hillbrand 484c1f63ba gtk3: Force GTK2-style input handling
GTK3 provides for additional input devices via xinput2.  These include
touchscreens and continuous scroll devices.  But wxWidgets does not have
specialized handlers for these events, so they double up for some
devices.  Until wxWidgets allows us to handle these events, we specify
that the input handler should be the old-style GDK_CORE.
2019-02-19 11:03:20 -08:00
Seth Hillbrand b426b9e784 pcbnew: Re-add missing user units python
When moving user user units out of the global, we missed that Python
calls were using it.  This re-adds a function to retrieve user units
allowing the python scripts to show users dialogs in their preferred
units.
2019-02-19 10:52:39 -08:00
Seth Hillbrand 69c1263c02 GTK3: Force scrollbars visible
GTK3 does a fade in/fade out routine for scrollbars by default.  This
was problematic as it caused a cascade of full-screen repaint events on
each mouse event.  Instead of disabling scrollbars (which only helped
the full canvas), we force the old scrollbar behavior is environmental
variables.

Revert "gtk3: Remove scrollbars"

This reverts commit db43bd82a7.
2019-02-19 10:52:39 -08:00
Seth Hillbrand d1c9dd67ac eeschema: Clean up last RefreshRect
Unimplemented call in GAL canvas.
2019-02-19 10:52:38 -08:00
Wayne Stambaugh de625e81cb Fix footprint editor library tree filter text control issue.
The default hot key definition for toggle high contrast mode was 'H'.
On windows, the menu accelerator handler code was grabbing the character
so it would not appear in the filter text control.  This is expected
because the windows wxWidgets code hooks this at the application level
so that once a menu accelerator key is found, all further event handling
for that key stops.  Changing the hot key definition to 'Ctrl+H' resolves
the issue.

Fixes lp:1803556

https://bugs.launchpad.net/kicad/+bug/1803556
2019-02-19 12:52:38 -05:00
Jeff Young ecd3ad9e9e Use our own version of the folder icon. 2019-02-19 10:39:42 -07:00
Tomasz Włostowski 9a8afdf6fd eeschema: SCH_PAINTER should draw LIB_BEZIERs too! 2019-02-19 10:42:23 +01:00
Seth Hillbrand ef60e523a1 libedit: Fix missing canvas selection
Analogous to fp editor, libedit needs the ability to switch between
fallback and accelerated while running.
2019-02-18 18:26:03 -08:00
Seth Hillbrand 7d1a5c425c Cairo: Treat no stroke as an even line width
Also protect against 180° angle issues in arcs
2019-02-18 18:00:38 -08:00
Seth Hillbrand 467d37e3f0 cairo: Fix pcbnew arc drawing
Chord should be positive 90° off the arc
2019-02-18 17:05:59 -08:00
Tomasz Włostowski 3b3c674c1a gal: opengl: use correct radius for graphical circles 2019-02-19 01:55:50 +01:00
Seth Hillbrand 3a0dbffa9e cairo: Minor tweak for angle transforms
Need to swap angles before transforming or we get bad comparisons when
wrapping.
2019-02-18 16:42:49 -08:00
Tomasz Włostowski 2151e195c7 gal: cairo: don't forget about the color when drawing grid points... 2019-02-19 01:24:26 +01:00
Tomasz Włostowski f66baaed8c gal: cairo: pixel-align arc endpoints, not center to avoid misalignment with adjacent line segments 2019-02-19 01:21:20 +01:00
Seth Hillbrand 4597979d18 cairo: Draw ovals with filled half-arcs
The circle at the end only ever looked right with 100% opacity.

Also fixes double-drawn arc fills in Cairo
2019-02-18 16:09:44 -08:00
Seth Hillbrand 525b9bd550 pcbnew: Correctly set the radio buttons in fpeditor
Radio buttons always have one set, so we need a single path to setting
the correct button.
2019-02-18 15:16:00 -08:00
jean-pierre charras 2dd653a327 WX_GRID: revert GetVisibleWidth() and add EnsureColLabelsVisible() to fix column label height of our wxGrid, for multiline column labels 2019-02-18 20:34:44 +01:00
jean-pierre charras 692fab2b73 WX_GRID::GetVisibleWidth(): fix column label height of our wxGrid, for multiline column labels 2019-02-18 20:02:00 +01:00
Seth Hillbrand 5af8d2d0a8 cairo: Fix rotated oval pads
Fixes: lp:1816428
* https://bugs.launchpad.net/kicad/+bug/1816428
2019-02-18 09:44:28 -08:00
John Beard 3fe8214d20 QA: Comment unused var in test_gal_pixel_alignment
p4 is not used (the code that uses it is commented out). So
also comment it out to keep the compiler quiet.
2019-02-18 17:06:48 +00:00
Jean-Samuel Reynaud 8c69c81393 Adding support for PPC32 and PPC64.
Modification proposed by Gianluca Renzi.
2019-02-18 05:35:52 -08:00
Jiaxun Yang 320f4b6cd9 Add MIPS N64 support for libcontext 2019-02-18 05:14:21 -08:00
jean-pierre charras e798cbe6c7 Fix a minor wxWidgets assert in DIALOG_SELECT_NET_FROM_LIST_BASE. 2019-02-18 11:33:53 +01:00
Tomasz Włostowski 632a619df9 gal: fixed broken lines in flipped board view (pixel alignment regression) 2019-02-18 11:27:12 +01:00
jean-pierre charras d62163cc7c Netclass panel: fix incorrect column sizes, that happens in a few languages.
The best size was calculated from a default size.
This default size (calculated by wxWidgets) was fully broken with some texts in a few languages.
So now this best size does not use this default size.

Fixes: lp:1816315
https://bugs.launchpad.net/kicad/+bug/1816315
2019-02-18 10:09:22 +01:00
Seth Hillbrand 27b4f2fbe9 pcbnew: Fix incorrect Type settings
Fixes: lp:1816259
* https://bugs.launchpad.net/kicad/+bug/1816259
2019-02-17 07:46:47 -08:00
jean-pierre charras 3b97961ccb minor fixes (Coverity warnings and compil warning) 2019-02-17 15:33:20 +01:00
Jeff Young dc5ae574e2 Restore ability to hide grid columns.
wxGrids stupidly does this by setting the width to zero, so you
have to be careful when adjusting minimum widths.
2019-02-17 14:09:35 +00:00
Jeff Young 23aa838a03 Mark block for AppendUndo when a command is executed.
This (aside from getting both parts into a single undo stack item)
will ensure that we clean up both parts on an abort.

Fixes: lp:1816284
* https://bugs.launchpad.net/kicad/+bug/1816284
2019-02-17 10:38:06 +00:00
Jeff Young 076f07c683 Be more forgiving of large fonts in grids. 2019-02-17 10:38:06 +00:00
Jeff Young d751fecd8a Tooltip and error message improvements. 2019-02-17 10:20:29 +00:00
Jeff Young f1fb61202a Spelling fixes. 2019-02-17 10:18:42 +00:00
Jeff Young f5369c9d2c Clean up some extraneous TEXT_CRTL_EVAL references.
(UnitBinder gives you evaluation for "free".)
2019-02-17 10:16:09 +00:00
Seth Hillbrand f1a60832e0 opengl: Handle stroked semi-circles
And filled but we don't use those yet.  No pixel-alignment needed for
stroked semi-circles (I think) as we set the pixel width to be 1
regardless of the zoom level.

Fixes: lp:1816263
* https://bugs.launchpad.net/kicad/+bug/1816263
2019-02-16 19:57:23 -08:00
Seth Hillbrand 9d4a19797c cairo: Don't round locations of outlines
Pixel alignment is not required for track outline mode.  It creates
differences between segment and radius calculations.

Also add specific width of the outlines
2019-02-16 17:45:05 -08:00
Seth Hillbrand c84752b9a7 commit: protect against un-copyable error
This creates early asserts for issues where we haven't fully implemented
a Clone() function for items or haven't correctly filtered them before
creating the undo/redo commit.
2019-02-16 13:28:45 -08:00
Seth Hillbrand d15876595f Fix init order to quiet warnings 2019-02-16 12:53:45 -08:00
Tomasz Włostowski 85a7ab7795 gal: minor cleanup & formatting 2019-02-16 20:25:10 +01:00
Tomasz Włostowski bbee30671a gal: pixel alignment hacks, works for Retina display too now.
gal: pixel alignment for Cairo.
gal: pixel alignment for OpenGL

Cleanup of pixel alignment patches

gal/opengl: more pixel alignment patches:
- works on Retina displays now
- pixel alignment for circles
- correct 1-pixel strokes
- fixed unfinished 1-pixel line ends

GAL: Restore antialiasing options in Cairo
GAL: Fix arc drawing

Removes DrawArcSegment, which drew arcs whose edge was optionally
stroked (a feature that we did not use).  Fixes Cairo arc drawing issue
where arcs were not visible in pcbnew.

gal: further cleanup
gal: removed unused shader parameter
2019-02-16 20:03:13 +01:00
jean-pierre charras 303b7ac7f8 Pcbnew: fix delete dangling tracks only removes the last segment of tracks.
Fixes: lp:1816234
https://bugs.launchpad.net/kicad/+bug/1816234
2019-02-16 16:05:29 +01:00
jean-pierre charras ec59361f75 Fix a few coverity errors 2019-02-16 14:09:21 +01:00
jean-pierre charras f364e81a91 Symbol editor: fix missing initialization in LIB_TREE_MODEL_ADAPTER::ColWidth().
The text size (in pixels) was never initialized (always 0) for the Column id 0.
2019-02-16 10:25:34 +01:00
Seth Hillbrand 813578eba6 Fix a few coverity errors 2019-02-15 20:15:04 -08:00
Seth Hillbrand bf814b25da eeschema: Update pin cache after conversion
Pin caches need to be updated when the unit is converted as the pin
location may have changed in conversion.

Fixes: lp:1816207
* https://bugs.launchpad.net/kicad/+bug/1816207
2019-02-15 18:30:45 -08:00
Seth Hillbrand 99be68f0f2 Remove debugging printf
The extra wx/gal debug statements are called on initialization but are
not used.  Removing the printf prevents statements outputting that may
confuse end users
2019-02-15 18:14:58 -08:00
Seth Hillbrand 6de8997624 libedit: Connect click actions to add/edit
Connects standard add/edit actions to mouse events in the footprint
filter listbox

Fixes: lp:1816182
* https://bugs.launchpad.net/kicad/+bug/1816182
2019-02-15 16:52:28 -08:00
Seth Hillbrand c37aac56e6 libedit: Set initial pin properties when editing
This allows the invisible pins to be drawn as grey

Fixes: lp:1816178
* https://bugs.launchpad.net/kicad/+bug/1816178
2019-02-15 16:00:39 -08:00
Seth Hillbrand 79f990266b drc: Allow graphical items to connect pads
This permits footprints like solder jumpers and net-ties.  (originally
from 3439551543 from Jeff Young)
2019-02-15 11:22:55 -08:00
Seth Hillbrand 409ad04ab3 libtree: Fixing indent size for MSW
The indent size was estimated by the width of characters.  But MSW
indent is substantially different from OSX and Linux.  It also cuts off
the middle characters rather than the end leading to poor display if the
width does not fit.  This uses the system setting for indent to account
for the indent spacing + 'M' to account for the arrow inset.

Fixes: lp:1815401
* https://bugs.launchpad.net/kicad/+bug/1815401
2019-02-15 10:44:08 -08:00
Seth Hillbrand 227d6e3f9b Update copyright date in About Dialog 2019-02-15 09:32:27 -08:00
Seth Hillbrand 7b60c856e9 view_rtree: Map maximum BBOX2I onto maximum rtree
When re-drawing or re-caching all items, we need to search the full
rtree, including for those items that live outside of the limits of
BBOX2I.  This forces the maximum BBOX2I to the full RTree limits
2019-02-15 09:12:51 -08:00
jean-pierre charras 24185f45f2 Symbol editor: fix bug: Italic style ignored when drawing fields.
Fixes: lp:1815997
https://bugs.launchpad.net/kicad/+bug/1815997
2019-02-15 15:56:41 +01:00
jean-pierre charras b848a424e8 minor fix 2019-02-15 15:35:31 +01:00
jean-pierre charras c8d44b86e2 Fix a compil issue with some compilers. 2019-02-15 08:47:03 +01:00
Seth Hillbrand 5e5167f198 pcbnew: Adjust footprint properties columns
Size based on text width in 3d and check for overflow before expanding
the first column.
2019-02-14 22:09:01 -08:00
Seth Hillbrand 8b46c99c60 modedit: Fix footprint properties dialog
Checks for text in the dialog before setting width.  Also prevents
resizing beyond the width of the window (in the case of large fonts)
2019-02-14 22:02:34 -08:00
Seth Hillbrand 2948f8a6bc cvpcb: Testing theory on save hotkey override
Bug #1807567 states the entering 's' in the string search textbox does
not get passed to the text box correctly when in the German language
under windows.  This likely means that the main window is firing wxSave
when it detects the 's' key.  By adjusting the id for the save and
continue action, we hope to allow the signal to pass through to the
textbox. This commit should otherwise be a NOP.

N.B. This appears to be the result of hooking wxEVT_CHAR_HOOK into
EDA_DRAW_PANEL::OnKeyEvent() (commit
53b1ec8146) that reverses the cascade of
events from bottom up rather than top down.  Fixing that is a longer
project and will likely be a side effect of switching fully to the new
tool architecture.
2019-02-14 20:50:50 -08:00
Seth Hillbrand a02f447daa pcbnew: Do not auto edit the 3d-model grid
Auto-selecting of the first grid element is performed in the footprint
editor to facility rapid editing.  Rapid editing of the 3d-model fields
is not as useful and requires multiple esc-keys to cancel.  This limits
the auto-edit to only the reference tab.

Fixes: lp:1815456
* https://bugs.launchpad.net/kicad/+bug/1815456
2019-02-14 16:29:51 -08:00
Seth Hillbrand 1f7022cb64 pcbnew: Do not source highlight from non-copper pads
Highlight connections is meant to show the copper connections on a
board.  We remove the non-copper pads from our selection when attempting
to source the net for highlighting.

Fixes: lp:1815898
* https://bugs.launchpad.net/kicad/+bug/1815898
2019-02-14 15:20:49 -08:00
Seth Hillbrand b6565079ee Updating icon build paths
Icon build scripts required relative paths. Updating to account for new
depth.
2019-02-14 14:58:04 -08:00
Seth Hillbrand ad77863668 Cleanup build script locations
Some developer scripts ended up in the demonstration scripts directory
that was bundled with builds.  This moves them to the build_tools
directory and updates the associated Documentation

Fixes: lp:1815891
* https://bugs.launchpad.net/kicad/+bug/1815891
2019-02-14 14:44:55 -08:00
Seth Hillbrand 2c61b7d7d6 pcbnew: Prevent invalid values from loading
Items that are located at the edge of or outside of integer limits will
not be shown on screen as they don't fit in the VIEW RTree.  This
prevents them from being edited and can corrupt data output.  Instead,
we place them at the largest value that is representable on the RTree
(INT_MAX/SQRT(2)).  This allows the user to correctly utilize DRC as
well as interact with and remove the offending items.

Fixes: lp:1815642
* https://bugs.launchpad.net/kicad/+bug/1815642
2019-02-14 14:28:42 -08:00
jean-pierre charras e6a200b09e Pcbnew: avoid integer overflow when displaying local coordinates.
Minor cleanup in code.
2019-02-14 10:57:22 +01:00
Seth Hillbrand 2cbbcfd3e0 Doxyfiles: Remove local debug lines 2019-02-13 17:22:07 -08:00
Seth Hillbrand a246d905fb libedit: Add appropriate view menu subitems
This synchronizes the view menu options in libedit with the options in
eeschema.

Fixes: lp:1815789
* https://bugs.launchpad.net/kicad/+bug/1815789
2019-02-13 10:27:23 -08:00
Seth Hillbrand 5c855a097b Doxygen: Update doxyfiles
Adds/updates commentary and removes empty, obsolete DTD tags
2019-02-13 10:18:07 -08:00
Thomas Pointhuber 310e3f5eb9 Add Python3 compability to scripting/build_tools/extract_docstrings.py
Fixes: lp:1815737
* https://bugs.launchpad.net/kicad/+bug/1815737
2019-02-13 09:16:43 -08:00
jean-pierre charras b6027e0815 Drill dialog: fix incorrect parent window when called from the Plot dialog.
The parent window was always the board edit frame,
but this is incorrect when this dialog is called from the Plot dialog.

Fixes: lp:1815530
https://bugs.launchpad.net/kicad/+bug/1815530
2019-02-13 11:41:52 +01:00
Seth Hillbrand a74aa3850a libtree: Update width automatically
When filtering, we update the width of the displayed column to ensure
the full text is visible to the user.  Check is rough, based on line
width (doesn't completely account for differing char widths) but is
sufficient for the approximate difference

Fixes: lp:1815401
* https://bugs.launchpad.net/kicad/+bug/1815401

Fixes: lp:1788495
* https://bugs.launchpad.net/kicad/+bug/1788495
2019-02-12 21:56:47 -08:00
Seth Hillbrand 3524bed75a libtree: Remember pane width
Stores the library pane width in settings to keep user preferences
2019-02-12 10:06:36 -08:00
Seth Hillbrand ea84020b1f eeschema: Recache bitmaps when changing
Clearing the cache removes all items from screen until the cache is
refreshed.  Instead, we wanted to re-cache the items to take into
account the bitmap changes.

Fixes: lp:1815443
* https://bugs.launchpad.net/kicad/+bug/1815443
2019-02-12 08:16:23 -08:00
jean-pierre charras 869bdc2b3c Eeschema: regression fix: re-enable hold down control+shift to disable grid snapping when moving the mouse.
Fixes: lp:1815487
https://bugs.launchpad.net/kicad/+bug/1815487
2019-02-12 13:12:06 +01:00
Jean-Samuel Reynaud 1c5cb947c1 Fix group tag for SVG plotting
This was previously "svg:g", but the SVG is declared with only
a "default" namespace, not an "svg:" namespace (looks like
xmlns:svg="http://www.w3.org/2000/svg" in the svg tag).

This means you cannot use svg: as a NS in the document. It's not
needed anywaY: the default is already correct.

Moreover, mismatching <svg:g> and </g> is always invalid.
2019-02-12 11:45:12 +00:00
Seth Hillbrand 7b3ef1b7ed colors: Add HSL conversion and tune colors
When adding colors to length tuner, we depend on the window background
color, which can be set by the user, resulting in an unreadable text.
This uses the HSL conversion to detect which shade it should use for the
coloring.

Also adds test cases for round-trip HSL and HSV conversion

Fixes: lp:1814530
* https://bugs.launchpad.net/kicad/+bug/1814530
2019-02-11 22:08:41 -08:00
Wayne Stambaugh f839278597 Fix exit dialog layout issue on windows.
Apparently FinishDialogSettings() does need to be called on windows to
get the dialog to layout properly.  Hopefully this doesn't break any of
the other platforms.
2019-02-11 15:26:03 -05:00
Seth Hillbrand c8cb9b3e1c Cleanup licensing
Add text of BOOST and ISC to source repo and clarify sources under each
in the README
2019-02-11 08:35:23 -08:00
Seth Hillbrand ac460466b6 Archive fp-lib-table and sym-lib-table from project
The local library tables should be archived with the project
2019-02-11 07:21:22 -08:00
John Beard bed0667712 Docs: Advanced config is explicity experimental
Any advanced config option is not to be considered production-ready,
so make this clear in the dev-docs.
2019-02-11 09:47:13 +00:00
Wayne Stambaugh 605d0ab3c1 Fix exit dialog issue on GTK3 builds.
The main text was cut off at the bottom.  Enabling wrapping seemed to
resolve the issue.
2019-02-10 19:07:38 -05:00
Nick Østergaard 03e787ef2d Add anchor for advanced configuration
To make it appear in the TOC on the left and be able to link to it
directly on the www.
2019-02-10 21:31:05 +00:00
Wayne Stambaugh fe5d2b8710 Pcbnew: fix footprint properties dialog 3D model visibility issue.
Update 3D model panel on initial dialog load to reflect the current
visibility state of the 3D model.

Fix a few minor footprint properties dialog spacing issues.

Fixes lp:1815184

https://bugs.launchpad.net/kicad/+bug/1815184
2019-02-10 12:00:19 -05:00
jean-pierre charras a703c53312 Fixes in dialogs: mainly better sizes for grid columns, but more other minor fixes.
Fix wxGrid column minimal widths on Windows in dialogs (just fixing the size is not enough).
WX_GRID::GetVisibleWidth(): make width bigger for labels, because they usually use a bold font.
(However, the fix is just a workaround: a better code is welcome)
2019-02-10 16:40:47 +01:00
jean-pierre charras 5e318dc08a Pcbnew, PANEL_PCBNEW_ACTION_PLUGINS: make strings translatable.
Fix also a minimal size for grid columns.
2019-02-10 11:39:07 +01:00
jean-pierre charras 8dc4077d58 Fix compatibility issues with wxWidgets 3.1.1 2019-02-10 07:59:27 +01:00
Seth Hillbrand 6a4d700dc8 eeschema: Show ERC buttons in all pages
This places the Delete markers/Run/Close buttons at the bottom of the
form rather that inside the panel.  Allows the user to access the
functions even when on a different panel.

Fixes: lp:1815102
* https://bugs.launchpad.net/kicad/+bug/1815102
2019-02-09 19:17:53 -08:00
Seth Hillbrand 191679676d eeschema: Export coupling constants to netlist
Patch suggested by Holger Vogt.  Exports text lines following the SPICE
K### <inductor1> <inductor2> format.

Fixes: lp:1815281
* https://bugs.launchpad.net/kicad/+bug/1815281
2019-02-09 18:58:33 -08:00
Seth Hillbrand 8ff764376a wx_grid: abstract visible column width
Cleanup code for checking visible extents of grid text.  Places single
routine to extract the current spacing from the grid in WX_GRID.
2019-02-09 15:31:31 -08:00
Wayne Stambaugh 0d2e39e781 Fix button padding in file/directory picker dialog. 2019-02-09 16:23:47 -05:00
jean-pierre charras 1c8077148a Pcbnew: legacy plugin: avoid crash when reading malformed files (old .brd kicad files).
Fixes: lp:1815292
https://bugs.launchpad.net/kicad/+bug/1815292
2019-02-09 18:12:42 +01:00
Seth Hillbrand 5cfa37da09 bitmap2component: Handle mask/alpha
Use alpha and mask components of bitmaps to set boundaries for the image
tracing.

Fixes: lp:1815216
* https://bugs.launchpad.net/kicad/+bug/1815216
2019-02-09 08:40:59 -08:00
jean-pierre charras c0a86d734d Pcbnew, Excellon drill file creation: for oval holes allows selection of an alternate command, when the normal command is not accepted.
Using the normal command, oval holes are "drilled" by a route command.
Some board houses do not accept this normal command.
In this case, the drill dialog allows using an other Excellon drill command (a slotted hole).
Note also some board houses do not understand this alternate command!
2019-02-09 14:56:02 +01:00
jean-pierre charras 756b20ace8 Fix column minimal sizes in panel_setup_text_and_graphics.cpp on Windows. 2019-02-09 14:47:45 +01:00
jean-pierre charras 61a95c5440 Fix compatibility with wxWidgets 3.1.1 2019-02-09 11:21:09 +01:00
Seth Hillbrand 76600e3436 pcbnew: Force grid sizing based on text extents
GTK does not handle enlarged text layouts automatically, so we need to
get the screen size before choosing the correct grid width for the
dialog

Fixes: lp:1788495
* https://bugs.launchpad.net/kicad/+bug/1788495
2019-02-08 20:03:45 -08:00
John Beard d06f0de1eb Libedit: transfer current screen settings on part load
When loading a part in libedit, also transfer certain screen
settings to the incoming SCH_SCREEN, from the current
SCH_SCREEN.

Currently, the grid settings are transferred, but this could
also do other settings if needed.

Also remove some duplicate commentary and mention why the
grid is set in a SCH_SCREEN even though the BASE_SCREEN ctor
sets the same default.

Fixes: lp:1815108
* https://bugs.launchpad.net/kicad/+bug/1815108
2019-02-08 22:56:05 +00:00
Jeff Young 076499f3ad Set modify flag for immediate block commands.
Fixes: lp:1812124
* https://bugs.launchpad.net/kicad/+bug/1812124
2019-02-08 19:15:16 +00:00
Seth Hillbrand c0008bc757 pcbnew: Change track width should allow no changes
When doing a global edit of the tracks and vias, we need to allow for
the possibility that the track size doesn't change and that this is
explicitly allowed without DRC error.
2019-02-08 10:49:00 -08:00
Seth Hillbrand e1bce7dccd pcbnew: Prevent using "edit width" in dialogs
Editing predefined tracks/nets/vias sizes makes sense in the toolbar but
not inside the submenu.
2019-02-08 09:50:20 -08:00
John Beard edc73de023 Pcbnew: ignore start values in "first available" grid numbering
The using the "first available" numbering option, force an
artifical linear numbering scheme starting at '1'.

Start the pad name provider at the 0'th pad index.

Also adds a few related tests and adjusts tests affected by
this change to reflect that the offset still applies.

This can be expanded in future to be more general by skipping
pad (which would allow a custom start and numbering scheme
while still avoiding duplication), but for now,
this does what the UI says and avoids string changes in 5.1rc.

Fixes: lp:1814918
* https://bugs.launchpad.net/kicad/+bug/1814918

Fixes: lp:1814917
* https://bugs.launchpad.net/kicad/+bug/1814917
2019-02-08 12:15:02 +00:00
jean-pierre charras 95af750fc9 Very minor fix in dialog_exit_base. 2019-02-08 08:16:10 +01:00
Seth Hillbrand 5da4e18664 bitmaps: Handle mask colors
Some transparent bitmaps use masking colors to show the binary
opaque/transparent.

Fixes: lp:1814893
* https://bugs.launchpad.net/kicad/+bug/1814893
2019-02-07 21:27:43 -08:00
Wayne Stambaugh 7789ec4bf1 Eeschema: fix highlight hierarchical pin name in properties dialog.
Fixes lp:1785840

https://bugs.launchpad.net/kicad/+bug/1785840
2019-02-07 13:03:38 -05:00
Seth Hillbrand 591e4137d7 pcbnew: Exit Yes/No with escape key
Fixes: lp:1814957
* https://bugs.launchpad.net/kicad/+bug/1814957
2019-02-07 08:42:26 -08:00
Wayne Stambaugh 6bb8fde48a Eeschema: fix broken modified flag handling. 2019-02-06 13:20:34 -05:00
jean-pierre charras 507229809c Fix a compil issue in test_lib_table.cpp, with some boost versions. 2019-02-06 09:18:57 +01:00
Wayne Stambaugh 8bc870c753 Start next 5.1 tag. 2019-02-05 18:46:24 -05:00
Wayne Stambaugh 2d1b1d6b05 Tag 5.1.0-rc1 release. 2019-02-05 18:13:56 -05:00
Wayne Stambaugh 44cb979e91 Decouple SCH_EDIT_FRAME from symbol rescue and remap dialogs.
Do not keep pointer to SCH_EDIT_FRAME in the rescuer object to prevent
it from creating dialogs with itself as the parent when call from the
rescue dialog which is itself a grandchild of the frame window.
2019-02-05 12:43:46 -05:00
John Beard 0c6ec7dbb3 LIB_TABLE_BASE: Const and unsigned fixes
* Make LIB_TABLE_BASE::GetCount() return unsigned. This is more
  consistent with the behaviour of STL containers (especially the
  boost::ptr_vector this is really accessing). Sadly
  wxGridTableBase() forces an int, so a cast is still required
  at the WX interface.
* Make LIB_TABLE_BASE::At() return a reference. First, this is more
  consistent with normal STL indexing operator[]'s, and secondly, it
  allows an idiomatic const index method (so you can access const
  LIB_TABLE_ROWs from a const LIB_TABLE_BASE).

The motivation is to allow use of this class and LIB_TABLE_ROW
in a test program, where the LIB_TABLE_BASE is const.
2019-02-05 08:49:52 -08:00
John Beard 84d79ec10d QA: LIB_TABLE tests
Some basic tests on LIB_TABLE and LIB_TABLE_ROW that demonstrate
the behaviour of fallbacks and various access methods.

Also add a few LIB_TABLE_BASE comments and changed some NULLs to
nullptr.
2019-02-04 19:44:54 -08:00
John Beard e6a6266f3d Build: libpolygon provides its own includes
Libpolygon can provide its own includes via target_include_dirs PUBLIC.
This means any linking targets do not need to specifiy them manually.

As common requires polygon, the polygon dep is also now no longer
required downstream of libcommon, as it's transisitvely implied
by libcommon's target_link_libraries.

This resolves a circular dependency previously detected and also
simplifies CMakeLists.
2019-02-04 19:29:31 -08:00
John Beard bb2ae8e13b Bitmaps: move bitmap defs to bitmaps library
The bitmap definitions (BITMAP_DEF and so on) do not
have any dependencies on other libs, including WX. This
means the bitmaps library can be isolated from the other
dependencies.

Common now depends on bitmaps, and libraries that depend
on common can pick it up from the common target_link_libraries,
as it is PUBLIC. This means a lot of targets no longer
need manual bitmap linkage.

This avoids a circular dependency that was previously reported
by static analysis.

Avoiding pulling in WX and other headers into the include
tree of each bitmap .cpp is a huge speed up (around 10x) in
compilation, and the generated static library is also 10x
smaller (20MB vs 200MB)

Add common as a link library to pnsrouter,connectivity.
THese library do still use common code (including bitmaps,
via base_screen.h) and this allows them to pick up the libcommon
includes correctly.
2019-02-04 19:29:31 -08:00
jean-pierre charras 73a0cbff62 pcbnew, export to STEP: fix error in command line tolerance option (--min-distance="0.0100 mm") is some countries
In countries using a comma as floating point separator, the --min-distance="0.0100 mm" was passed as --min-distance="0,0100 mm"
This is incorrect and broke the command line.

Fixes: lp:1814559
https://bugs.launchpad.net/kicad/+bug/1814559
2019-02-04 18:05:49 +01:00
Seth Hillbrand 4a641ec5ea 3d-viewer: Center the about window
Fixes: lp:1814412
* https://bugs.launchpad.net/kicad/+bug/1814412
2019-02-04 07:18:52 +01:00
Seth Hillbrand d7272b7f5e eagle: Handle DRC rule-based pad shapes
Circles and Squares are handled correctly.  Octagons are converted to
circles.  Pad 1 is identified by the "1" string in the Eagle name.

Fixes: lp:1784126
* https://bugs.launchpad.net/kicad/+bug/1784126
2019-02-04 07:06:49 +01:00
Seth Hillbrand 1d09f84303 router: Take track width in dp from dp
Fixes and issue where forces were calculated using the current track
width even in differential placer mode where the tracks are specified by
the differential pair width.

Fixes: lp:1814480
* https://bugs.launchpad.net/kicad/+bug/1814480
2019-02-04 03:48:08 +01:00
Jeff Young 8ca76177c0 Prevent hiding of reference column.
Using the quantity column for the collapse/expand controls feels too odd
when you expand and everything under the parent is a '1'.

Fixes: lp:1780847
* https://bugs.launchpad.net/kicad/+bug/1780847
2019-02-03 23:38:02 +00:00
jean-pierre charras 5edf3503ca Symbol Editor: Switching from a multi unit symbol to a single unit symbol do not reset the unit selection.
Thus creating issue if the unit selection is not the first unit.

Fixes: lp:1814441
https://bugs.launchpad.net/kicad/+bug/1814441
2019-02-03 15:29:41 +01:00
Tomasz Włostowski 5d712716e6 router: don't create incorrect non-45 degree connections when routing a track that doesn't have a net assigned
Fixes: lp:1814433
* https://bugs.launchpad.net/kicad/+bug/1814433
2019-02-03 12:37:27 +01:00
Seth Hillbrand 08c944a467 cairo: Ensure Courtyard drawing order
Prevent courtyard from being raised twice

Fixes: lp:1811821
* https://bugs.launchpad.net/kicad/+bug/1811821
2019-02-03 11:27:31 +01:00
Seth Hillbrand a8e920bdef std-ize layer lists
Cleanup of list work to use std models.
2019-02-03 11:27:31 +01:00
Tomasz Włostowski 313ebb9dff router: correct walkaround corner case when both ends of the line lie on the hull edge
Fixes: lp:1810935
* https://bugs.launchpad.net/kicad/+bug/1810935
2019-02-03 11:22:18 +01:00
John Beard bb4d3faad7 QA: Add Distance, Collide, Collinear tests on SEG
SEG collisions and distances are a fundamental part of SHAPE collision testing
and are therefore critical for DRC correctness.

Also a few Collinear tests.
2019-02-03 06:57:37 +01:00
Seth Hillbrand 611c555eaf lib_tree: Ensure ON_CHAR events are passed 2019-02-03 06:01:21 +01:00
Seth Hillbrand c08736e245 Assign stack pointer to lib table
When creating new lib table rows, the pointer becomes managed by the new
table through the boost::ptr_vector.  The row is non-copyable, however,
so we lose the reference as soon as it goes out of scope. Creating a
clone provides a new pointer that is moved into the table on creation.

Fixes: lp:1792456
* https://bugs.launchpad.net/kicad/+bug/1792456
2019-02-03 05:20:50 +01:00
Seth Hillbrand b461fc44ef pcbnew: Ensure source snapping
Choosing the drag origin should not be dependent on the snap settings in
pcbnew.  Snap settings are sensible when you are designating a target
only.  Additionally, when dragging a module, we do not want the
footprint's pads to be used as targets for snapping.

Fixes: lp:1814402
* https://bugs.launchpad.net/kicad/+bug/1814402
2019-02-03 04:23:24 +01:00
Seth Hillbrand 5c3f6f2abf eeschema: Fix grid assignment error
Assignment of columns was offset based on the quantity column.  This
cleans the implementation as well as setting the correct width

Fixes: lp:1814380
* https://bugs.launchpad.net/kicad/+bug/1814380
2019-02-02 18:42:51 +01:00
jean-pierre charras 098d9bf056 3D viewer: Fix: board outlines ignored in 3D for triangular board shapes
Fix also a few minor coding style issues.

Fixes: lp:1814324
https://bugs.launchpad.net/kicad/+bug/1814324
2019-02-02 17:59:53 +01:00
Seth Hillbrand c0cd4c03fb pcbnew: Handle cancel action in fp load
When the user cancels the footprint load, we should assume they are
canceling the placement of a new footprint.  This also adds sanity check
when populating the list

Fixes: lp:1814181
* https://bugs.launchpad.net/kicad/+bug/1814181
2019-02-01 15:48:36 +01:00
jean-pierre charras 3ad5fd056e Pcbnew, Update PCB from schematic: Fix the reference point of the new footprints to place, when moving the cursor.
It was a regression from 5.02 version.
The block of new footprints to place has now its reference point (the point that is on the graphic cursor) fixed.
This is the first footprint loaded from the list.
2019-02-01 11:43:16 +01:00
jean-pierre charras 4543bde56b Minor enhancements in 3D viewer hotkey code 2019-01-31 21:03:38 +01:00
Jeff Young b6a06aa129 Improve default canvas handling.
Fixes: lp:1813973
* https://bugs.launchpad.net/kicad/+bug/1813973
2019-01-31 19:43:31 +00:00
Jeff Young a375edf9ac Perform cancel action by hand.
Fixes: lp:1814138
* https://bugs.launchpad.net/kicad/+bug/1814138
2019-01-31 19:07:07 +00:00
John Beard 55b5c7189a Exit dialog: use Layout on the whole window
Prevents mislaignment in footpritn editor on close with unsaved
changes.

Fixes: lp:1813961
* https://bugs.launchpad.net/kicad/+bug/1813961
2019-01-31 08:22:59 +01:00
Tomasz Włostowski 47e28cb5be eeschema: don't clear freshly selected block in HandleBlockEnd() at the first mouse event
Fixes: lp:1813971
* https://bugs.launchpad.net/kicad/+bug/1813971
2019-01-31 02:49:58 +01:00
Jeff Young ba7b970817 Add pre-select architecture to grid helper icon-text-buttons.
Fixes: lp:1813973
* https://bugs.launchpad.net/kicad/+bug/1813973
2019-01-31 01:09:03 +00:00
Seth Hillbrand 88d9f946a2 eeschema: Don't break Eagle junctions on import
Eagle can label nets independently of the connection point position.  In
an "interestingly" designed circuit, this can lead to a junction of a
pin, wire endpoint and unrelated wire.  While this is bad practice,
KiCad shouldn't force an incorrect net connection during the import.  In
this case, we skip the addition of junctions to ensure that we don't
create a schematic error.

Fixes: lp:1788019
* https://bugs.launchpad.net/kicad/+bug/1788019
2019-01-30 17:02:24 -08:00
Seth Hillbrand b14bc1bead svg: Use grouping
Uses existing grouping in SVG output.  Sets schematic components as a
grouped element in SVG as well as pcbnew elements per layer.

Fixes: lp:1011754
* https://bugs.launchpad.net/kicad/+bug/1011754
2019-01-30 16:58:33 -08:00
Seth Hillbrand 37741048ce plot: Correct a couple SVG output errors
Plotting to closed lines for polygons in SVG.  Also correct the filled
polygon line width for non-copper zones.

Fixes: lp:1813964
* https://bugs.launchpad.net/kicad/+bug/1813964
2019-01-30 15:41:36 -08:00
John Beard 0415c89c5b Fix broken GetReferencePrefix function
This function was incorrectly processing refdeses like "U1000".

Change the algorithm to a simpler STL-compatible one and
update the tests.

Fixes: lp:1813669
* https://bugs.launchpad.net/kicad/+bug/1813669
2019-01-30 15:41:36 -08:00
John Beard 88f9f6f072 Break out ref-des-centric functions to own header
This breaks the following functions out to a general-purposed refdes utils
header:

* MODULE::GetReferencePrefix()
* kicad_string.h RefDesStringCompare()

This acheives:

* Slimming of MODULE interface
* Placement of refdes code in common rather than pcbnew
** Testing of this code in qa_common
* Tighter and smaller includes for code that only needed refdes functions

Note: there are failing tests commited (as expected failures). These
are the cause of lp:1813669 and will be fixed as a follow-up commit.
2019-01-30 15:41:36 -08:00
John Beard dc20521cb9 Break out getTrailingInt from MODULE
This is not logic specific to MODULE. Breaking it out to
kicad_string.h acheives:

* Slimming of the MODULE interface
* Enables reuse of the function
* Enables testing of the function

Also add a test under qa_common for this function.
2019-01-30 15:41:36 -08:00
John Beard f85f10930a Break widget save/restore out to reusable class
The CONFIG_SAVE_RESTORE_WINDOW class does not need to be tied
to the array dialog, put it in common/widgets.

Also do a refactor and tidy-up of the the class, use a union for (slightly)
better type-safety and syntax (a variant would be better but that's C++17).

Also enable integral field save/restore from text boxes.
2019-01-30 15:41:35 -08:00
John Beard 24ac9b7055 Pcbnew: array: repair dialog value init
Fully initialise the CREATE_ARRAY_DIALOG_ENTRIES object,
and use these values for the dialog on first open. Currently,
the initial values aren't all initialised, and none are used, as the
valid flag is not set. This means there are poor defaults in some
fields.

Also more declarations and defintions of CREATE_ARRAY_DIALOG_ENTRIES
to the .cpp, as these do not need to be exposed in the header,
even privately.
2019-01-30 15:41:35 -08:00
John Beard 6558bd9381 Pcbnew: Also transform and number the original item
The original item is part of the array, so give it a number
and put it in the right place (all current array tools have
a null transform for the first item, but it's not part of the
contract. For example, a circular array with an angle offset
might want to move the first point).
2019-01-30 15:41:35 -08:00
John Beard ffaf99a600 Pcbnew: Enable some numbering options in pcbnew
The numbering axis priority (h then v or v then h), and alternate
reversing are not actually numbering parameters, they are part of
the geometry of the array (the items are physically in different
orders).

So enable these options, even when numbering is disabled.

Also fix broken logic about when numbering scheme is enabled
(it still applies even if the numbering offset is fixed.)
2019-01-30 15:41:35 -08:00
John Beard 453a91f661 Pcbnew: arrays skip existing names
The current module cannot be queried for existing pads as we
add them (because we never commit, until we finish the whole array).

Instead, pre-gather the names and check as we add, skipping any existing
names.

Note: this will not prevent arrays becoming "mis-ordered", but there
is not a lot we can do to prevent all possible errors.

Fixes: 1808706
* https://bugs.launchpad.net/kicad/+bug/1808706

The same principle could be used to skip existing ref-des'es on PCBs.
2019-01-30 15:41:35 -08:00
John Beard 5504981d00 Separate ARRAY_OPTIONS to own class in common
The geometry and numbering logic is separate to the dialog, and
can be separated for clearer logic and better testability.

Moreover, refactor it to avoid any dependency on pcbnew
classes, so it can be move to common for potential re-use in
eeschema and friends in future.

Also convert all wxPoint logic in these classes to VECTOR2I and
fix some function visibilities.

Add some unit tests of the ARRAY_OPTIONS geometry and numbering.
2019-01-30 15:41:35 -08:00
Jeff Young f425f49c19 Fetch active sym before launching browser so we can start with it.
Fixes: lp:1813882
* https://bugs.launchpad.net/kicad/+bug/1813882
2019-01-30 21:50:35 +00:00
Jeff Young ca0164aa07 Unify library browser terminology.
Fixes: lp:1813882
* https://bugs.launchpad.net/kicad/+bug/1813882
2019-01-30 19:52:15 +00:00
Jeff Young 626dc7d9cf Load currently selected alias when browsing.
Fixes: lp:1813882
* https://bugs.launchpad.net/kicad/+bug/1813882
2019-01-30 19:43:52 +00:00
Jeff Young 2dea3a49c8 Fix compile error in std::pow useage. 2019-01-30 16:38:34 +00:00
Jeff Young 19c9ae7ecb Use updated value when checking for empty.
Fixes: lp:1813640
* https://bugs.launchpad.net/kicad/+bug/1813640
2019-01-30 16:29:21 +00:00
Jeff Young b3319d29c1 Init footprint chooser with current footprint.
Fixes: lp:1813882
* https://bugs.launchpad.net/kicad/+bug/1813882
2019-01-30 15:45:29 +00:00
John Beard 6880687f00 Geom: interate ClipperLib::Path by reference
ClipperLib::Path is std::vector<IntPoint>. Iterating this with
"for( auto point : path)" could result in 'n' IntPoint copy-constructions.
It does seem GCC 8, at least, manages to optimise these constructions
out.

Replace with the "standard" for( const auto& point : path) idiom.
2019-01-30 11:55:11 +01:00
John Beard 9a41fd060b QA: Account for eeschema tests unit rounding 2019-01-30 11:55:11 +01:00
John Beard 8e75f6029c QA: Mark failing SHAPE_POLY_SET tests as expected failures
This allows the tests to remain sensitive to other errors.

When SHAPE_POLY_SET is fixed, these expected failures should be
removed.
2019-01-30 11:55:10 +01:00
Seth Hillbrand 872f0eb44c eeschema: Set grid editor to use qty as the drop-down
Symbol fields uses a custom expander control.  This should be tied to a
column that cannot be hidden in order to ensure the ability to view sub
elements remains intact, like the standard control.

Fixes: lp:1780847
* https://bugs.launchpad.net/kicad/+bug/1780847
2019-01-29 17:10:58 -08:00
Seth Hillbrand f1fed08fa7 pcbnew: Finalize previous snapping preferences
Snap/Grid modifier follow preferences from 05483a06c6.  Brings Shift/Alt
modifiers into alignment with drawing tools.  Shift modifier still
conflicts when choosing end item with the complete track click-modifier.
This will be addressed in v6 with a larger preference setting.
2019-01-29 17:10:58 -08:00
Tomasz Włostowski 7d544d1ffe geometry: rewrite SHAPE_LINE_CHAIN::PointInside() to use fixed point arithmetic and support non-convex outlines. Fixes both P&S misbehaviours and zone filling/QA issues 2019-01-30 01:08:57 +01:00
John Beard 33bc74a4a2 QA: Tidy qa_utils headers
Move into own include directory for clarity. Also allows qa_utils
to use its own private headers in qa/qa_utils without exposing them
through the target_include_directories directive.
2019-01-29 18:16:00 -05:00
John Beard 47ec2fd5ba QA: Add some tests on SHAPE_POLY_SET::Distance
These tests pick up the bug fixed in: 90178eb681
(as it is already fixed there is no failure).
2019-01-29 18:12:06 -05:00
John Beard 016a544606 Eeschema: fix grammar for text for ERCE_PIN_NOT_DRIVEN
Reported by Kevin Cozens on the mailing list.
2019-01-29 18:09:11 -05:00
John Beard 55fcbddde8 QA: Fix faulty test of SHAPE_POLY_SET Collision
This test assumed points on a edge are counted as colliding.
This is not true: points on an edge are NOT counted at inside
the poly_set.

THe test does still consider points on a *hole* edge as collisions.
The API to SHAPE_POLY_SET is unclear on if this is correct.
2019-01-29 18:06:16 -05:00
Seth Hillbrand 93ecd44f5a Revert "geometry: revert SHAPE_LINE_CHAIN::PointInside/PointOnEdge() optimizations so that it's consistent with other collision checking methods (i.e. SEG::Distance() )"
This reverts commit 4a0fba309a.
2019-01-29 13:36:17 -08:00
Seth Hillbrand 05483a06c6 pcbnew: Re-attach snap options
Snapping to item options were partially disconnected when unifying
framework.  This re-attaches the options and adds the additional option
for graphical items.

Fixes: lp:1801377
* https://bugs.launchpad.net/kicad/+bug/1801377
2019-01-29 13:36:17 -08:00
Seth Hillbrand 914596fcbb pcbnew: Allow STEP export tolerancing
kicad2step has a tolerance level that sets whether two points are at the
same location or not.  This allows KiCad to access these levels to some
degree, permitting a looser interpretation of a closed board outline.
2019-01-29 13:05:23 -08:00
John Beard 9bd7ea815c QA: Centralise BOARD reading functions in pcbnew_utils
Several pcbnew_tools utilities read a file from the command line.
Instead of replicating this code, centralise the code in
qa_pcbnew_utils, which allows simpler reuse.

THe utilities are:

* polygon_triangulation
* polygon_generator
* drc_tool

pcb_parser keeps its own function, as that is the focus of the tool,
and its likely to have its own instrumention.

This also adds the ability to read from stdin for the above tools,
which means fuzz testers could theoretically work with them, and it
also can make life easier if you can pipe a board to the executable
directly.
2019-01-29 08:16:02 -05:00
John Beard adddc41bc5 QA: Reinstate polygon_triangulation utility
This utility has been disabled since the eeschema GAL merge. It
can be reinstated as part of the qa_pcbnew_tools framework.
2019-01-29 08:15:51 -05:00
John Beard 11745f8f44 QA: Move contents qa_shape_poly_set_refactor to qa_common
The "refactor" element of qa_shape_poly_set_refactor has been
previously removed, so these tests are now just regular tests on
libcommon classes. These can therefore be moved to qa_common
and the qa_shape_poly_set_refactor unit test suit can finally be
totally removed.
2019-01-29 08:15:44 -05:00
John Beard e4b4230bcf QA: Put UTILITY_PROGRAM in KI_TEST
Also expand some documentation of some other KI_TEST functions.
2019-01-29 08:15:37 -05:00
John Beard b94cf9d564 Docs: Describe QA util programs in the testing docs 2019-01-29 08:15:30 -05:00
jean-pierre charras a4d4d9a241 Fix not working sdip_wizard.py 2019-01-29 08:42:28 +01:00
Seth Hillbrand b71c2e5edf Ensure we have a destination for config template
In the event that we do not have a project configuration file, the
default template will be used.  But it needs a destination filename for
copy_pro_file_template().

Fixes: lp:1745022
* https://bugs.launchpad.net/kicad/+bug/1745022
2019-01-28 17:16:53 -08:00
Seth Hillbrand cf6ba6ad94 pcbnew: Get correct end when dragging
The selection for interactive drag uses cursor position  off grid to
choose the element for dragging.  We pass the same value into the start
dragging routine to choose the correct end of the element.

Fixes: lp:1813665
* https://bugs.launchpad.net/kicad/+bug/1813665
2019-01-28 15:16:07 -08:00
Jeff Young 577bb73320 Revert 7d06651a10. 2019-01-28 20:10:13 +00:00
Seth Hillbrand 9d99fd188f Revert "Change top selection drop-down to combobox"
This reverts commit 7d06651a10.
2019-01-28 10:15:32 -08:00
Seth Hillbrand 9742062712 Revert "Fix missing Choice->Combobox change"
This reverts commit 0fa374cce5.
2019-01-28 10:15:25 -08:00
Seth Hillbrand 4901481e12 eeschema: Rotate bus wire entry components
These components were rotatable as a block but not individually.

Fixes: lp:1809448
* https://bugs.launchpad.net/kicad/+bug/1809448
2019-01-28 09:55:56 -08:00
Seth Hillbrand e2b3a1118d Eeschema: Filled labels
Fill label bg for clearer schematic view
2019-01-28 08:58:10 -08:00
Tomasz Włostowski 6afb082a08 eeschema: fix disappearing graphics when block move is aborted after rotation/flipping
Fixes: lp:1809444
* https://bugs.launchpad.net/kicad/+bug/1809444
2019-01-28 14:46:21 +01:00
Tomasz Włostowski ef2af9145e eeschema: implement left click emulation with Enter/Return key in library editor
Fixes: lp:1788075
* https://bugs.launchpad.net/kicad/+bug/1788075
2019-01-28 14:17:59 +01:00
Tomasz Włostowski 4a0fba309a geometry: revert SHAPE_LINE_CHAIN::PointInside/PointOnEdge() optimizations so that it's consistent with other collision checking methods (i.e. SEG::Distance() )
Fixes: lp:1810935
* https://bugs.launchpad.net/kicad/+bug/1810935
2019-01-28 13:24:41 +01:00
Tomasz Włostowski fd0381ea09 router: fix dragging when dragged segment has adjacent segment(s) at 180 degree angle
Fixes: lp:1812535
* https://bugs.launchpad.net/kicad/+bug/1812535
2019-01-28 10:31:50 +01:00
jean-pierre charras e850a482d1 Gerber output: fix a potential minor issue in a G04 line comment.
In gbr files only ASCII7 chars are allowed.
However, in a comment line a UTF8 string is used. It should not create issues, but it is incorrect.
2019-01-27 10:14:16 +01:00
Wayne Stambaugh a55d9819bc Do not use project path when searching for default library tables.
When no default library tables are found, set the default wxFilePickerCtrl
to the users configuration path instead of the current project path to
prevent any project library tables from being used as the default.

Fixes lp:1809769

https://bugs.launchpad.net/kicad/+bug/1809769
2019-01-26 16:19:02 -05:00
Seth Hillbrand 594d5c3e34 pcbnew: overwrite hotkeys cleanly
If user hotkeys do not map all available actions, we still want the most
recent change to be the primary value.  This can happen if the defaults
load a set of hotkeys that are not completely overwritten by the updated
hotkey preferences file.  We assume that the most recent hotkey is what
the user want to map.

Fixes: lp:1778408
* https://bugs.launchpad.net/kicad/+bug/1778408
2019-01-26 12:19:35 -08:00
Thomas Pointhuber 4fc692f04b fix handling of filled circle and default layer width 2019-01-26 07:42:35 -08:00
jean-pierre charras 90178eb681 Optimize DRC calculation for copper texts. fix also a bug in SHAPE_POLY_SET::Distance( const SEG& aSegment, int aSegmentWidth ).
This bug calculate incorrectly the distance between aSegment and the SHAPE_POLY_SET for the first segment of the SHAPE_POLY_SET.
2019-01-26 13:01:48 +01:00
jean-pierre charras b8cfabd22e Fix some issues in I10n strings
Fix typo and missing I10n identifier for 2 strings
2019-01-26 09:25:12 +01:00
Seth Hillbrand 8d777dd5c3 eeschema: Take stroke thickness into account
Spacing text for plotters uses the thickness of text for two separate
classes.  This sets the thickness in the EDA_TEXT class as well to allow
the multiple line positions to be correctly set

Fixes: lp:1799605
* https://bugs.launchpad.net/kicad/+bug/1799605
2019-01-25 14:22:19 -08:00
Seth Hillbrand b63cdcf225 Type cleanup 2019-01-25 13:03:36 -08:00
jean-pierre charras 4cd41e3941 Eeschema: avoid using a incorrect background color the first time a SCH_DRAW_PANEL is displayed
When starting Eeschema, or a frame/dialog using a SCH_DRAW_PANEL, the bg color was initialized too late,
thus creating a flicker or an annoying draw artifact (in SYMBOL_PREVIEW_WIDGET for instance) if a Paint event
is fired before the right bg color is initialized.
Initializing the bg color earlier fix this issue.

Fixes: lp:1797203
https://bugs.launchpad.net/kicad/+bug/1797203
2019-01-25 20:32:46 +01:00
Seth Hillbrand 4fbd5e8e0f pcbnew: UTF8 strings for MSW display
Some MSW seem to have issues with the UTF-8 characters in const
wxString.  This explictly casts to wxString from UTF-8 handling the
platform differences

Fixes: lp:1813329
* https://bugs.launchpad.net/kicad/+bug/1813329
2019-01-25 10:06:26 -08:00
Seth Hillbrand 184711beb4 pcbnew: Fix via snapping to multiple tracks
Rather than selecting an arbitrary track to snap, we select the closest
track to our point, allowing the via to be placed along the full track
length.

Fixes: lp:1813324
* https://bugs.launchpad.net/kicad/+bug/1813324
2019-01-25 09:13:18 -08:00
Seth Hillbrand ff9d814fbd Fix unused vars in wxpython3 2019-01-24 21:25:39 -08:00
John Beard d39cdb5565 Pcbnew: Disallow invalid mwwave inductor lengths
Some microwave inductor lengths cause invalid outputs
for the calculations, which causes jagged outputs.

* If the request length is such that four arcs and no straight
  segments is too long
* If the length is such that an N-turn coil is too short, but
  an N+1-turn coil is too long. This can happen when the coil
  count is small.

This patch doesn't fix the underlying geometric issue here - fixing
the first requires a numerical method, and fixing the second probably
needs an iterative approach. Both of these could benefit from
a refactor.

However, this patch does prevent the tools producing invalid outputs,
which can sometimes be quite subtle mistakes if the "jags" are small.

Fixes: lp:1792119
* https://bugs.launchpad.net/kicad/+bug/1792119
2019-01-24 21:23:43 -08:00
Seth Hillbrand 8b060799eb python: Fix Phoenix app setting
Phoenix doesn't have the same initialization as wxpython3 and so the
namespace doesn't get the wxApp() initialized to the existing instance.
In python, this is worked around by starting a new wxApp.
Unfortunately, this appears to overwrite the existing global instance
variable.  The issue _appears_ to be in Phoenix but for now we work
around it by saving and resetting the instance pointer in the main app.
The downside is that Python likely won't be able to respond to events
from C++

Fixes: lp:1809913
* https://bugs.launchpad.net/kicad/+bug/1809913
2019-01-24 19:41:07 -08:00
Seth Hillbrand 3ea766154b eeschema: Allow tree expand/collapse with +/- 2019-01-24 17:24:28 -08:00
John Beard b690658972 QA: Add coroutine unit test
This adds a simple unit test to qa_common to check coroutines
produce expected events in the right order.

This is an automated analogue to the user-facing tool in
qa/common_tools.
2019-01-24 13:01:44 -05:00
John Beard 6729842441 QA: Reinstate polygon_generator as a sub-util of qa_pcbnew_tools
This program has been disabled for some time, but it's not
broken (even if the CMake was!).

Merging into the pcbnew_tools QA program reduces the CMake burden
and puts this tool in the same place as the others.
2019-01-24 13:01:44 -05:00
jean-pierre charras 70c2380fc2 Minor fixes in code: remove dead code. 2019-01-24 18:23:57 +01:00
jean-pierre charras ebdc383cc3 QA test: add missing boost library (boost system).
This missing lib created link issues on some systems.
2019-01-24 09:03:58 +01:00
John Beard b1a2c5d7c5 Zones: wxPoint/VECTOR2I warnings no longer needed
In the past, the ZONE_CONTAINER::GetPosition() member
returned a reference to a wxPoint, in accordance with the
BOARD_ITEM interface. This meant that ZONE_CONTAINER had
to reinterpret_cast a VECTOR2I (its internal position data) to wxPoint,
which was possible only due to fortunate memory layout.

This interface was changed to return wxPoints by value in
commit a4528988ca, and the normal (wxPoint) cast was used instead.

Thus, we can now also remove the dire warnings and static_asserts
used to ensure the now-unused old method was correct.
2019-01-23 10:39:03 -08:00
John Beard e8afb14046 QA: Move PCB parse util to combined tools exec
This means all the current Pcbnew utilities are all in a single
executable.

The tool is now run by:

$ qa/pcbnew_tools/qa_pcbnew_tools pcb_parser <same arguments as before>
2019-01-23 13:27:52 -05:00
John Beard d7563c55c4 QA: Pcbnew utility tools: DRC tool
Add a tool that allows a user to run DRC functions
on a given KiCad PCB file.

The first available functions are the courtyard functions.

Also move most of the utility program logic into qa_util for
better reusability.
2019-01-23 13:27:52 -05:00
John Beard 8297ab24e4 DRC: Break out courtyard overlap function
Introduce the concept of a DRC_PROVIDER which allows
to separate the various DRC functions to their own
areas. This allows, amongst other things, a slimmer core
DRC class, and allows DRC functions to be separately testable.

The courtyard DRCs (overlap, missing and malformed)
are the first victims, so instrumentation can be added to this function.

Add some unit tests on this DRC function, as well a few re-usable PCB-based
utility functions in a library (qa_pcbnew_utils) that could be shared between
unit tests and other utilities.
2019-01-23 13:27:52 -05:00
John Beard e6edc1b670 DRC: Make the marker factory a separate class
This separates the "newMarker" functions from the DRC class. These
are moved to a new class, DRC_MARKER_FACTORY, which is now responsible for
constructing suitable markers from BOARD_ITEMS.

The reasons for this are:

1) Allow DRC related functions to access theese functions without having
   to bake these functions into the main DRC class.
2) Thereby simplify the DRC class interface
3) As DRC_MARKER is now a small class with public interfaces, it's
   possible to put unit tests on these functions.

The motivation here is to allow to start to split out pieces of DRC
into separate classes.
2019-01-23 13:27:52 -05:00
Seth Hillbrand 4247e32cd6 pcbnew: Disallow new via where DRC is violated
Prior to placing the via, we check if the resulting via will pass too
close to different nets on different layers.

Fixes: lp:1718827
* https://bugs.launchpad.net/kicad/+bug/1718827
2019-01-23 10:20:59 -08:00
jean-pierre charras 86263d6bb3 Pcbnew: Do not immediately refresh the 3D view after each board edition.
Previously, when the 3D viewer is opened, each board edition creates a 3D view refresh, that usually takes a bit of time.
Now the refresh is postponed until the 3D viewer has the focus.
2019-01-23 17:47:17 +01:00
Seth Hillbrand efe880bb79 pcbnew: Fix zone cutout duplication
When creating the zone cutout, we delete the old zone and add a new one
with each cutout.  This requires resetting the source zone and clearing
our previous selection if we would like to continue using the cutout
tool on the new zone.

Fixes: lp:1812339
* https://bugs.launchpad.net/kicad/+bug/1812339
2019-01-23 06:42:07 -08:00
jean-pierre charras 56879a964b Fix cross-probing issue when a net or pin name contains a space.
Fixes: lp:1812902
https://bugs.launchpad.net/kicad/+bug/1812902
2019-01-23 11:30:10 +01:00
Seth Hillbrand 6421b15b83 pcbnew: Allow an epsilon in the inflate before join
Plotting mask layers, we expand by a minimum width before performing a
boolean add of the separate regions.  The boolean add has a separation
condition that includes equality.  Since we are looking for the
complement of the mask, we would like the equality applied to the other
side.  Removing a unit value provides the separation.

Fixes: lp:1698457
* https://bugs.launchpad.net/kicad/+bug/1698457
2019-01-22 19:54:03 -08:00
Seth Hillbrand 0c723778f0 pcbnew: Set default missing soldermask min width
When loading an existing file, a missing value in the soldermask min
width value should not be interpreted as a default value but rather as a
0 value.  This corrects an issue introduced by 4d709d2392
2019-01-22 17:01:32 -08:00
Seth Hillbrand 823dce1a50 modedit: Allow name input for new footprint library
When prompting for a new footprint library, we need to treat the input
as a file for creation rather than a directory for selection.
Otherwise, users cannot specify the name of their new footprint library
independently of the existing directory names.

Fixes: lp:1812135
* https://bugs.launchpad.net/kicad/+bug/1812135
2019-01-22 15:40:10 -08:00
jean-pierre charras b0ab53ac26 Dxf importer: fix some issues, especially the rotation angle of texts. 2019-01-22 19:59:43 +01:00
jean-pierre charras c56d6ad2dd Fix issues in DXF import and GFX import dialog
Fixes: lp:1812840
https://bugs.launchpad.net/kicad/+bug/1812840
2019-01-22 18:01:04 +01:00
jean-pierre charras d93b694327 Fix a compil warning 2019-01-22 18:01:04 +01:00
Seth Hillbrand 7551613826 pcbnew: Don't duplicate TOOL_EVENT
There is some odd interaction in the default copy constructor for
TOOL_EVENT using boost::optional under gcc.  Avoid this by explicitly
constructing the event needed for cut

Fixes: lp:1812848
* https://bugs.launchpad.net/kicad/+bug/1812848
2019-01-22 08:36:56 -08:00
John Beard bb2e402bc7 QA: Move io_benchmark into common_tools 2019-01-22 09:04:38 -05:00
John Beard 267e17d539 QA: Add a generic utility tool executable.
The intention here is to make it possible to wrap up many of the
KiCad utility tools into a single executable. This reduces link times
as well as the duplication of CMake files needed to build very
similar tools.

This particular tool should be suitable for any code in common,
code in pcbnew and other end-executables probalby will need an
analagous version linked to the relevant kiface.

The first tool is the coroutine_example.cpp test case, which
can be useful when learning, debugging or porting the coroutine
infrastructure.
2019-01-22 09:04:38 -05:00
jean-pierre charras a1d1354bcc footprint_editor_tools.cpp: Better code in Placepad. 2019-01-21 21:33:37 +01:00
jean-pierre charras 4d88cd3a0a Footprint editor: add missing local coordinate initialization in Add Pad. 2019-01-21 21:03:36 +01:00
Seth Hillbrand b9483ae66f Adding additional archive extensions
These include standard protel extensions and 3d-model extensions

Fixes: lp:1812639
* https://bugs.launchpad.net/kicad/+bug/1812639
2019-01-21 07:27:20 -08:00
Seth Hillbrand 3a1e66dba3 kicad: URI-encode zip names to handle unicode
Workaround for wx not handling unicode strings in the archive file
system handler.

Fixes: lp:1812516
* https://bugs.launchpad.net/kicad/+bug/1812516
2019-01-20 16:41:55 -08:00
Wayne Stambaugh b13efdb0f2 Initial global footprint library table fixes.
Fix bug when pcbnew is launched from a folder containing an existing
fp-lib-table file by using same method as setting the initial global
symbol library table.

Fixes lp:1810169

https://bugs.launchpad.net/kicad/+bug/1810169

Fixes lp:1738871

https://bugs.launchpad.net/kicad/+bug/1738871
2019-01-20 13:51:07 -05:00
Wayne Stambaugh 2dcba4723d Lay groundwork for loading the initial global footprint library table.
Factor out common dialog code from global symbol library table dialog for
loading initial library table.

Update global symbol library table code to user factored out common dialog
code.
2019-01-20 13:09:49 -05:00
jean-pierre charras 179dfa0dda Pcbnew fix missing initialization in PCB_PAINTER::draw( const TRACK* aTrack, int aLayer )
the stroke mode was always activated, even in fill mode. creating incorrect size shape for null length track segments.

Fixes: lp:1812532
https://bugs.launchpad.net/kicad/+bug/1812532
2019-01-20 10:12:21 +01:00
Seth Hillbrand 4443487f04 pcbnew: Check GetBoard() before using
GetBoard() may return nullptr in the case of a pad that does not belong
yet to the board.
2019-01-19 19:32:50 -08:00
Baranovskiy Konstantin 3526c9a37a Grid tricks: paste to selection.
NEW: By default a clipboard is pasted to a grid starting from the
cursor position and doesn't matter is a selection of cells present or
not. Often a grid represents the data of a few similar objects like
components, for example. Some number of cells (fields) may have the same
value for a few rows (components). In this case, when filling data we
must copy the range of identical cells from the first row of similar
components and then paste it to every row of the rest components (by
default). From now it may be done easier. We must copy the range of
identical cells from first row of similar components (here is no
changes) and then select rectangular range of cells (for multiple rows)
where must be placed copied data. After pasting copied cells will be
pasted to every selected row.
So in general, we can copy cells from one row and paste it to multiple
rows at a time.
This new feature also makes possible to copy value from one cell and to
paste it to all from the selection.
If copied range of cells is larger than the selection then only the part
of clipboard that matches the selection will be pasted.
2019-01-19 14:55:22 -05:00
Baranovskiy Konstantin 65f5bd6a01 Dialog: Esc key closes a grid editor first.
CHANGED: By default dialog closes on Esc key immediately and if dialog
has a grid control there is no way to close a cell editor with canceling
changes. New behavior is next: if dialog has a grid and the grid has an
active cell editor Esc key closes cell editor, otherwise Esc key closes
the dialog.
2019-01-19 14:55:15 -05:00
Baranovskiy Konstantin 98a911dcb4 Custom grid editors: cancel changes on escape.
If user closes grid cell editor with Escape key any changes must be
canceled.
2019-01-19 14:54:58 -05:00
Baranovskiy Konstantin 3c2bf5b3bd Grid tricks: paste without grid expanding.
CHANGED: On pasting multiple rows from a clipboard to the end of a
grid, the grid is automatically expanding (appended needed number of
rows). In general case the grid expanding on pasting is inappropriate.
Rows must be added by tools like a button or a menu command etc. In some
cases rows cannot be added at all. So we must paste only the part of
the clipboard that fits between the cursor position and the end of the
grid without a grid extending.
2019-01-19 14:54:50 -05:00
Baranovskiy Konstantin 62bf4614ad Component fields grid: copy/paste boolean values.
NEW: Add ability to copy/paste from/to cells with boolean values
(checkboxes) in grid control of component properties dialog of Eeschema.
2019-01-19 14:54:43 -05:00
Baranovskiy Konstantin 8400ee41c0 Grid tricks: cell selection fixes.
CHANGED: First click sets a cursor to the specified cell, second click
activates editor (current realization, where first click activates cell
editor, is very buggy especially with cells selection).

Set cursor on cell of reference on mouse left click in Fields editor of
Eeschema.
2019-01-19 14:54:37 -05:00
Baranovskiy Konstantin 4ea08d477d Clear comp highlighting before highlight new one.
On clicking a reference cell in the field editor of Eeschema a
corresponding component is highlighted in Eeschema. But previously
highlighted components are staying highlighted.

With current patch all highlightings are cleared before highlighting
selected component.
2019-01-19 14:54:29 -05:00
Wayne Stambaugh 75f18cfe62 3D Viewer: disable ray tracing for OpenGL less than 2.1.
Add code to parse OpenGL version string and determine if ray tracing is
supported.

Rationalize ray tracing menu and toolbar to have the same behavior so
a single command ID can be used for setting states.

Fixes lp:1797500

https://bugs.launchpad.net/kicad/+bug/1797500
2019-01-19 08:03:09 -05:00
jean-pierre charras 9cac0a38cc DIALOG_GRAPHIC_ITEM_PROPERTIES: better tooltip.
minor other code enhancement (does not create any actual change)
2019-01-19 12:35:35 +01:00
jean-pierre charras 3667b11682 fp editor: very minor fix: fix incorrect icon in toolbar 2019-01-19 07:54:02 +01:00
Seth Hillbrand 4a68ae4bae polygon: Fix missing steiner removal and fracture
When removing steiner points, there is the possibility that the test
point is also removed.  In this case, it is no longer a member of the
linked list and will break the output.

The test for re-fracturing a broken polygon can also result in multiple
polygons, rather than only 0 or 1.  Skipping the extra polygons will
result in a limited tesselation.

Fixes: lp:1812393
* https://bugs.launchpad.net/kicad/+bug/1812393
2019-01-18 09:19:39 -08:00
jean-pierre charras e2afe5e1a3 Toolbars with wxComboboxes: Fix incorrect ReCreate Toolbar methods: they recreated these wxComboboxes without deleting the previously created.
This issue created memory leak and not working wxComboboxes (for instance after modifying the language selection).
Now, these wxComboboxes are created only once, never recreated.

Also: minor cosmetic enhancement in footprint editor main toolbar
(the save footprint icon is modified if the footprint is saved to the board or to the library)
2019-01-18 17:24:40 +01:00
Seth Hillbrand 4cf4600a23 pcbnew: Discard delete action when routing
Prevent the action from being handled on the next transition.

Fixes: lp:1810611
* https://bugs.launchpad.net/kicad/+bug/1810611
2019-01-17 19:38:01 -08:00
Seth Hillbrand 5182fe15d3 Minor code formatting 2019-01-17 19:17:34 -08:00
Tomasz Włostowski 9657039af2 pcbnew: multiple fixes concerning track->pad net propagation used by Track/Via properties dialog:
- Added ignore netcode option to CONNECTIVITY_DATA::GetConnectedItems()
- PlaceModule() now ensures the module added to the board (and thus to the connectivity database) has correct bounding box necessary for R-trees to work
- Use recursive connected pad search so that the new net is propagated to all pads

Fixes: lp:1787961
* https://bugs.launchpad.net/kicad/+bug/1787961
2019-01-18 02:53:29 +01:00
Jeff Young 7bec707160 Fix 2 separate issues with saving the m_canvasType setting.
Fixes: lp:1811982
* https://bugs.launchpad.net/kicad/+bug/1811982
2019-01-17 20:34:24 +00:00
Seth Hillbrand c3a295df1a Fix segfaults from not checking index
Return value of wxArrayString.Index() always needs to be check for
existence.
2019-01-17 10:23:25 -08:00
Seth Hillbrand 8b5127d9bc modedit: Renumber pads should hold removed numbers
When renumbering pads, you can click on a pad the second time to restore
the pad to its original value.  This did not allow a user to then place
the removed number on the correct pad (assuming a mistake).  This commit
ensures that removed pad numbers are remembered and allow the user to
place in the correct pad.
2019-01-17 09:58:22 -08:00
Seth Hillbrand 6b1b4bb43a pcbnew: Add cursor help to renumber pads
Renumber pads command is abstruse so add a small popup help to guide
users when renumbering.
2019-01-17 09:58:22 -08:00
jean-pierre charras 1c4b0337c2 Footprint editor, GAL mode: add missing initialization of local coordinates when creating graphic items
Fixes: lp:1812233
https://bugs.launchpad.net/kicad/+bug/1812233
2019-01-17 17:59:00 +01:00
Seth Hillbrand e270b5d266 modedit: Mirror custom pads
Fixes mirror command to correctly handle custom pads.

Fixes: lp:1808135
* https://bugs.launchpad.net/kicad/+bug/1808135
2019-01-17 08:55:59 -08:00
jean-pierre charras 6bea0951a3 SHAPE_ARC: fix uninitialized member in a CTOR that created issues in a QA test.
Initializing all members is always good.
2019-01-17 16:35:54 +01:00
jean-pierre charras 7f6801bc27 Eeschema: block rotate and block mirror: fix missing screen refresh.
Remove also outdated comments.
2019-01-17 15:25:47 +01:00
Tomasz Włostowski 786ee0ec69 eeschema: fix assertion fail when aborting a paste block operation after the pasted block has been rotated
Fixes: lp:1812073
* https://bugs.launchpad.net/kicad/+bug/1812073
2019-01-17 00:46:59 +01:00
joel-bertrand-JKB 2d5752f51d Fix duplicate directives in Spice netlist inside .control ... .endc
Fixes: lp:1812082
https://bugs.launchpad.net/kicad/+bug/1812082
2019-01-16 19:54:03 +01:00
jean-pierre charras cdadb48d84 Fix incorrect #ifdef definition
Fixes: lp:1811906
https://bugs.launchpad.net/kicad/+bug/1811906
2019-01-16 17:39:47 +01:00
Tomasz Włostowski d50bc6a85f EDIT_TOOL: correctly handle locked items in Rotate/Flip/Mirror functions when the selection is already being dragged
Fixes: lp:1812009
* https://bugs.launchpad.net/kicad/+bug/1812009
2019-01-16 17:00:51 +01:00
Seth Hillbrand f9f87b3ff8 pcbnew: Fix missing config.h from 9458ae8221 2019-01-15 14:17:56 -08:00
Seth Hillbrand 5433423377 pcbnew: Don't update coords on add
When adding an element to a module, we don't need to update the relative
coordinates.  Doing so can cause changes when writing to file depending
on rotation and position.

Fixes: lp:1810870
* https://bugs.launchpad.net/kicad/+bug/1810870
2019-01-15 12:14:02 -08:00
Seth Hillbrand 9458ae8221 pcbnew: Prevent GITHUB plugin from being registered
If the user does not build the GITHUB plugin (deprecated), we cannot use
it in our footprint load and should remove the define to ensure
accidental use is caught at compile time.
2019-01-15 12:14:02 -08:00
Wayne Stambaugh 47492f9452 Coding policy fixes in common/common.cpp. 2019-01-15 12:23:26 -05:00
Seth Hillbrand 72c885797e Eeschema: prevent schematic images with bad scales
Prevent obvious scale issues (0.0, nan, etc) from corrupting display of
schematic images.  In these cases, we reset the scale value to 1.0 and
allow the user to input the appropriate value when editing the
schematic.

Fixes: lp:1811066
* https://bugs.launchpad.net/kicad/+bug/1811066
2019-01-15 07:42:22 -08:00
Seth Hillbrand 576261cad1 pcbnew: code style cleanup 2019-01-15 07:34:45 -08:00
Wayne Stambaugh 69d90a4e84 Do not set wxSetAssertHandler on non-debug builds.
Fixes lp:1809622

https://bugs.launchpad.net/kicad/+bug/1809622
2019-01-15 09:29:33 -05:00
jean-pierre charras e7fa02a9f0 DIALOG_BOM: fix a few issues. Mainly an annoying issue when a plugin file was not found
Previously, all the dialog setup was lost.
2019-01-14 13:14:13 +01:00
jean-pierre charras 31fa3af8d8 Fix a minor I18n issue
Fixes: lp:1811640
https://bugs.launchpad.net/kicad/+bug/1811640
2019-01-14 13:12:20 +01:00
Wayne Stambaugh 4f0749b0b4 3D viewer: fix update UI event infinite loop.
Lay groundwork to fetch OpenGL version for disabling ray tracing when the
current OpenGL version lacks proper support.
2019-01-13 14:05:21 -05:00
Seth Hillbrand a0a4e5e18d libedit: Small edit component cleanup
Initialize local variables and ensure that the SPICE edit button is not
shown in compiles that do not support it.
2019-01-12 06:58:40 -08:00
Seth Hillbrand 634d02bd04 libedit: Check proper field grid type
Fixes segfault where pointers are not zeroed

Fixes: lp:1811519
* https://bugs.launchpad.net/kicad/+bug/1811519
2019-01-12 06:51:09 -08:00
John Beard f5144eb5cf Revert "Try to fix a compil issue in qa test"
This reverts commit decc7ed888.

This compilation options (-fpermissive) is no longer needed,
as the code that caused the warnings on GCC <7 is no longer
present.

The reason this error was GCC bug #56480 [1], which disallowed
the following (valid, in C++11) syntax:

template<> struct namespace_a::namespace_b::a_struct<TYPE>
{...}

And instead insisted on:

namespace namespace_a {
namespace namespace_b {
    template<> struct a_struct<TYPE>
    {...}
}
}

[1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480
2019-01-12 07:53:56 +01:00
John Beard 97a37a74f8 QA: Use free operator<< for Boost test logging
An unhappy conjunction of GCC bug #56480 [1] and Boost having
different namespaces for the print_log_value make it quite
ugly to support this method.

For the limited purposes of the unit tests, a free function in
the unit_test_utils header (in the absence of any implementation
in the main libraries) will do, even if it is a little intrusive.

From Boost 1.64 onwards, the customisation point boost_test_print_type
is avaiable, and anyt print functions should be transitioned over to
that method when the minimum Boost version is 1.64 or higher.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480
2019-01-12 07:53:56 +01:00
Seth Hillbrand 0f1a11ef38 pcbnew: Cut only copied objects
Fixes a bug where objects where accessed after being freed by the cut

Fixes: lp:1811456
* https://bugs.launchpad.net/kicad/+bug/1811456
2019-01-11 17:27:29 -08:00
jean-pierre charras decc7ed888 Try to fix a compil issue in qa test 2019-01-11 18:13:58 +01:00
jean-pierre charras bac31d0911 Revert "qa test: fix a compil issue by modifying the way BOOST_PRINT namespace is used in geometry.h"
This reverts commit bd4222cc84.

the commit bd4222cc did not fix compil issues with some compilers
2019-01-11 16:53:16 +01:00
jean-pierre charras 644855c5ba Fix incorrect (broken) canvas type saving in config.
The config was saving a canvas type EDA_DRAW_FRAME member not always accurately initialized.
And the last canvas opened frame setup was saved, not necessary a frame having a canvas type that can be set by user.
This is a broken feature especially because the footprint viewer has a fixed canvas setting.
2019-01-11 13:19:46 +01:00
jean-pierre charras bd4222cc84 qa test: fix a compil issue by modifying the way BOOST_PRINT namespace is used in geometry.h 2019-01-11 10:58:38 +01:00
Seth Hillbrand 353bda6792 eeschema: Add directly connected items to block
Allow components to connect to both components and junctions

Fixes: lp:1798968
* https://bugs.launchpad.net/kicad/+bug/1798968
2019-01-10 17:28:29 -08:00
Seth Hillbrand 6b75f589e9 pcbnew: Do not remove islands from no-net zones
No net zones, by definition, do not connect to any other element.
Therefore, the entire net is an island and should not be removed by the
knockout section

Fixes: lp:1811239
* https://bugs.launchpad.net/kicad/+bug/1811239
2019-01-10 16:17:37 -08:00
Jeff Young 81a0ab4d7e Don't return wxID_OK from a cancel.
Also fixes the Save icon not getting enabled/disabled.

Fixes: lp:1810116
* https://bugs.launchpad.net/kicad/+bug/1810116
2019-01-10 17:41:33 +00:00
Jeff Young 15af0cc43d Don't inherit previously-selected alias properties when deleting.
Fixes: lp:1810768
* https://bugs.launchpad.net/kicad/+bug/1810768
2019-01-10 17:41:33 +00:00
jean-pierre charras ed03d3436d fix a minor wxWidgets assert. 2019-01-10 16:23:52 +01:00
John Beard d6f4f3aca0 Geom: Account for quadrant points in arc bbox calc
This means arcs that pass though quadrant points (multiple of
0, 90, 180, 270 degrees) include these points in the bbox.
2019-01-10 07:52:25 -05:00
John Beard dc71a73178 QA: Add unit test of SHAPE_ARC
Test a few "centre-point-angle" cases and add some
generic geom code for testing vectors and boxes are within
tolerance (since rounding often creeps in).

Much of the arc-checking code will be useful to other
construction methods (e.g. point-point-point).

There are expected failures for the bbox code when
the arc passes though, but does not end on, a quadrant point
(0, 90, 180, 270). This is due to a defective
implementation of SHAPE_ARC::BBox() that does not take
into account the quadrant points. This will be fixed
as a follow-up.
2019-01-10 07:52:25 -05:00
Seth Hillbrand 170ff66cbb libedit: Allow SPICE parameter editing
This fixes a regression to allow SPICE parameters to be added to the
symbol in libedit.

Fixes: lp:1793062
* https://bugs.launchpad.net/kicad/+bug/1793062
2019-01-09 21:43:23 -08:00
Seth Hillbrand da295a355f qa: Moving eeschema qa to main qa folder 2019-01-09 21:43:23 -08:00
Seth Hillbrand 6f5a7b3ab7 3d-viewer: Clear memset warnings
C++11 can clear by empty copy-constructor
2019-01-09 21:43:23 -08:00
Wayne Stambaugh 906161dcf8 Fix configuration dialog layout issues on GTK. 2019-01-09 17:35:12 -05:00
Seth Hillbrand fe30460aeb gal: Save canvas type unconditionally
The canvas type might change without the frame being notified.  If this
happens, the user is presented with repeated notifications of OpenGL
issues.  Howver, switching canvas is not an error and should be
presented to the user as an info message to clarify that the system is
still working but it has changed how it renders the screen.

Fixes: lp:1795240
* https://bugs.launchpad.net/kicad/+bug/1795240
2019-01-09 10:36:01 -08:00
Thomas Pointhuber bb7c889551 Fix check for incompatible glm version in cmake
Build fails on GCC, but not with Clang. Modify the check to only catch the
cases where GLM does not work for sure.

Reference: lp:1804030
* https://bugs.launchpad.net/kicad/+bug/1804030
2019-01-09 09:24:49 -05:00
John Beard 73fb050b6d __WXWINDOWS__ does not mean __WXMSW__
Misuse of __WXWINDOWS__ for checking the presence of Windows. The correct
macro is __WINDOWS__ or __WXMSW__ in GUI programs.

__WXWINDOWS__ is always set, on all platforms.
2019-01-09 09:15:32 -05:00
John Beard 658cc8fd96 Wildcards: unify handling of all files wildcards
Use the AddFileExtListToFilter() to also generate the
wildcard for "all files". This is because:

* Users can use AddFileExtListToFilter for the all files WC
  with the same interface as for any other extensions.
* Users do not need to worry about wxGetTranslation, as the
  _() is applied in the same way as the other *Wildcard() helpers,
  and it is a function just like the others, so it is consistent
* There is a testable interface to document the expected result.
  The test is added.
2019-01-09 08:57:42 -05:00
John Beard dd313d4d47 Wildcards: use vectors instead of varargs + tests
Varargs make it very hard to pass strings in flexibly
when they (and the number of them) are not known
at compile time.

For example, this allows up to now amalgamate the "single
ext" and "multiple ext" unit tests.
2019-01-09 08:57:35 -05:00
John Beard f86d953c80 QA: unit tests for file ext filters
This adds a unit test for the recent AddFileExtListToFilter
to demonstrate how to use it and the expected output.

The unit tests are a bit clunky, as the vararg approach cannot
work winth strings passed at runtime.
2019-01-09 08:57:29 -05:00
jean-pierre charras 1ca3b2c768 Eeschema: DIALOG_FIELDS_EDITOR_GLOBAL: fix missing clearing old highlight when highlighting a new symbol or exiting the dialog 2019-01-09 14:38:44 +01:00
Seth Hillbrand d1b53028a1 Remove errant printf() debugging statement 2019-01-08 17:21:05 -08:00
Seth Hillbrand 994be43782 ratsnest: Calculate ratsnest per pad
The local/dynamic ratsnest needs to calculate on a per-pad basis as the
module is always listed as having a visible ratsnest.  This fixes the
finalized ratsnest viewed when routing as well as the show local
ratsnest regression.

Fixes: lp:1811010
* https://bugs.launchpad.net/kicad/+bug/1811010
2019-01-08 17:19:30 -08:00
Seth Hillbrand 12e0e72107 pcbnew: Don't knock out thermals for non-conn zone
Non-connected zones are, by definition, not connected, therefore, we
should not knock out thermal reliefs under any case

Fixes: lp:1810989
* https://bugs.launchpad.net/kicad/+bug/1810989
2019-01-08 14:24:28 -08:00
Seth Hillbrand b0da1e19ee pcbnew: Don't use frame refresh to update display
Frame refresh in wxWidgets sets the focus back to indeterminate state
and prevents hotkey action until the focus is captured again.  Using
canvas update is the correct method to update the canvas display after
modifying zones/similar

Fixes: lp:1810993
* https://bugs.launchpad.net/kicad/+bug/1810993
2019-01-08 12:38:27 -08:00
Fabián Inostroza 7f6b35c6bc Don't start autopan if the cursor was warped
The application warps the cursor when initiating some actions (dragging,
selecting modules or Find and Move).  This warping should not also
trigger the autopan action.

Fixes: lp:1810787
* https://bugs.launchpad.net/kicad/+bug/1810787
2019-01-08 12:15:33 -08:00
Seth Hillbrand a8b3a3cc61 pcbnew: Allow capture of non-highlighted items
When routing in high-contrast mode, the user may wish to place items
that are primarily on a different layer while remaining in high contrast
mode.  This fixes a regression from 4.0.7

Fixes: lp:1804309
* https://bugs.launchpad.net/kicad/+bug/1804309
2019-01-08 11:38:06 -08:00
Seth Hillbrand 90ad240660 units: Move common units and add tests
Centralizing duplicate code from Eeschema and pcbnew and adding unit
tests
2019-01-08 09:29:32 -08:00
Seth Hillbrand 31ab4e6c9a eeschema: Simplify netlist dialog
The default filename textbox confusingly could not be edited and the
checkbox for "Use default filename" would also use a default location.
As the netlist export is no longer required in the workflow, we can
simplify the layout to always show the user the file save dialog
allowing them to choose the location and name of the exported netlist
file.
2019-01-08 09:26:36 -08:00
jean-pierre charras 419718b596 Remove a useless qa test.
It was added when refactoring the SHAPE_POLY_SET class, ande replace any use of CPolyLine class inside Kicad code.
the CPolyLine related code is now not used.
So this test nowadays makes no longer sense.
2019-01-07 20:24:11 +01:00
jean-pierre charras 3dd5a912b6 remove dead code. 2019-01-07 19:42:18 +01:00
John Beard 1ae6fc78a6 QA: Add pcbnew unit tests CMake subdir
Also modify the linkage of kiface objects, as this is not
supported by older CMake versions.

This was accidentally removed with the reversion of the application
of the wrong patch (8f11a2133).

QA: fix object files
2019-01-07 15:14:37 +01:00
jean-pierre charras 3f9230fa51 Eeschema: Fix incorrect behavior of cursors when moving cursors by arrow keys.
Fixes: lp:1810684
https://bugs.launchpad.net/kicad/+bug/1810684
2019-01-07 10:10:37 +01:00
John Beard 2d6f8a97b0 QA: Add some more Boost version guards
Some functions aren't defined on Boost < 1.59, which is
sadly inclusive of the Ubuntu LTSs.

Make some guards so you can still use these on the newer
Boosts with some useful fallback where possible.
2019-01-06 16:18:13 -08:00
Seth Hillbrand 8f11a2133e Revert "QA: Add a generic utility tool executable."
This reverts commit 502306314e.
2019-01-06 16:17:44 -08:00
Seth Hillbrand 0a4812be07 eagle: Set default pin type
Eagle 7.4 DTD defines pin direction as optional with a default of IO
(bidirectional).

Fixes: lp:1808585
* https://bugs.launchpad.net/kicad/+bug/1808585
2019-01-06 08:54:14 -08:00
Seth Hillbrand 1e5ba6f1b1 Replace DIM() macro
The standard DIM() macro was not typesafe as it happily deferred errors
to runtime that can be caught at compile time.  Replacing it with a
generic C++11 constexpr allows for typecasting, comparison and compile
time error checking.
2019-01-06 08:43:12 -08:00
John Beard cec97ebfa6 Remove unused VIRT_MIN/MAX from legacy_gal 2019-01-06 08:16:29 -08:00
John Beard ec91329da0 Pcbnew: Array tool should not number NPTHs
Devolve the logic as to whether a pad should be numbered or not
to a pad utility function. Add a very simplistic test for this
function (demonstrating how to test BOARD_ITEMs in general).

Fixes: lp:1804787
* https://bugs.launchpad.net/kicad/+bug/1804787
2019-01-06 07:55:49 -08:00
John Beard 81bac449d3 QA: Add unit tests on the Pcbnew library
This now allows code under /pcbnew to be tested.

A first test of the GRAPHICS_IMPORT_MGR is added.
2019-01-06 07:55:36 -08:00
John Beard 502306314e QA: Add a generic utility tool executable.
The intention here is to make it possible to wrap up many of the
KiCad utility tools into a single executable. This reduces link times
as well as the duplication of CMake files needed to build very
similar tools.

This particular tool should be suitable for any code in common,
code in pcbnew and other end-executables probalby will need an
analagous version linked to the relevant kiface.

The first tool is the coroutine_example.cpp test case, which
can be useful when learning, debugging or porting the coroutine
infrastructure.
2019-01-06 07:51:23 -08:00
jean-pierre charras 4493af9f4d Remove pcbnew/import_dxf because all the useful code was moved/merged to import_gfx 2019-01-06 11:17:39 +01:00
Seth Hillbrand 3b54a44540 wildcard strings update
Replace a few other cases where we used Windows-only or *nix specific
wildcard strings
2019-01-05 20:26:45 -08:00
Seth Hillbrand 02a1bf1de6 eeschema: Use system-dependent default wildcard
wxWidgets provides a system-dependent string for "*" or "*.*" depending
on the system.  Unfortunately, wxFormBuilder does not use this and
instead defaults to the Windows-only "*.*".  This is an ugly work
around.

Fixes: lp:1810221
* https://bugs.launchpad.net/kicad/+bug/1810221
2019-01-05 20:18:59 -08:00
Seth Hillbrand 69fc301bf3 eagle: Prevent 0-width lines in modules
It is very difficult to select 0-width lines and they aren't physical on
the board.  Items with this setting in Eagle should revert to the
default in KiCad.

Fixes: lp:1808584
* https://bugs.launchpad.net/kicad/+bug/1808584
2019-01-05 14:28:08 -08:00
John Beard 5e705347bb Libeval: Use add_custom_target so grammar.c won't be cleaned
If you use add_custom_command to generate the grammar file,
it can be removed by "make clean". This then means the user will
need to get it back from Git, or regenerate it with Lemon.

Changing to add_custom_command removes the output file
from the clean list. The incantation to rebuild the grammar
remains the same: "make libeval_grammar", and it is still not
required to have lemon installed for a normal build.

Fixes: lp:1809610
* https://bugs.launchpad.net/kicad/+bug/1809610
2019-01-05 07:44:06 -08:00
jean-pierre charras eb06ae5910 Plot filenames automatically generated: change the point ('.') find in layer names to '_'
This change was in comments, but not in code.
2019-01-05 12:44:38 +01:00
Seth Hillbrand a46f5c3af5 3d-viewer: Clamp inner radius of rings
Thick segments can cause radius to be set negative.  Effective radius of
these segments should be 0.

Fixes: lp:1803797
* https://bugs.launchpad.net/kicad/+bug/1803797
2019-01-04 16:49:21 -08:00
Seth Hillbrand 30521f0c57 gal: Fix zoom extents for large screens
When at small zoom levels, the integer bbox can overflow, preventing
redraw.  We fix this by redrawing the full tree when this happens

Fixes: lp:1733067
* https://bugs.launchpad.net/kicad/+bug/1733067
2019-01-04 16:00:31 -08:00
Seth Hillbrand 3a3bbbb545 GAL: Add transparency for bitmaps and Cairo draw
Bitmaps loaded via wx can contain alpha channels.  We utilize underlying
routines to correctly map the alpha.  This also standardizes the Cairo
alpha calls to ensure correct display in Fallback for partially
transparent highlights

    Fixes: lp:1809845
    * https://bugs.launchpad.net/kicad/+bug/1809845
2019-01-04 13:40:19 -08:00
Seth Hillbrand e8333633fe GAL: Add antialiasing options to Cairo
Cairo supports antialiasing when rendering but can be slow when set to
sub-pixel mode.  This bumps the minimum version of Cairo to 1.12
(available in 14.04 LTS as well as mingw) to support three antialias
settings (fast, good, best) that offer speed/appearance tradeoffs.

This can provide a higher-quality eeschema render as it works on a
per-element basis as opposed to the OpenGL per-screen antialias.
2019-01-04 13:39:56 -08:00
John Beard b743c39ed8 On start without config, start pcbnew in Cairo GAL
Currently, GAL is initialised to NONE (i.e. off). This causes
issues when Legacy canvas is broken (i.e. GTK3).

This changes the default to GAL Cairo, both in PCB_EDIT_FRAME
init, and in the config load.

Now, when the user starts with no config, they are prompted for
a choice: OpenGL or Cairo, and one of them will be set up, with
Cairo as fall back.

Users on platforms that still support legacy can go to it as normal
from the menu, but it will not be the default in any circumstance.

Fixes: lp:1809997
* https://bugs.launchpad.net/kicad/+bug/1809997
2019-01-04 15:22:34 -05:00
Seth Hillbrand 0fa374cce5 Fix missing Choice->Combobox change
Strangely this did not affect gcc and only showed an issue on Mac +
clang.
2019-01-04 10:25:52 -08:00
jean-pierre charras 56e0031e03 Fix incorrect onScroll handler on GAL mode.
If a Scroll event is skipped, a default handler is fired by wxWidgets.
This default default handler fires 3 wxEVT_SCROLLWIN_LINEUP or wxEVT_SCROLLWIN_LINEDOWN events.

This is not wanted now in eeschema (and pcbnew) because they add extra (unwanted) scrolling.

Fixes: lp:1810403
https://bugs.launchpad.net/kicad/+bug/1810403
2019-01-04 13:10:34 +01:00
jean-pierre charras db7dba96ad Fix a few Coverity warnings.
Mainly not initialized members, and replace not tested dynamic_cast by static_cast.
2019-01-04 09:49:21 +01:00
Seth Hillbrand 25f8b1ce72 pcbnew: Update multiple zone segments
Where we can get away with lower segment counts (localizing an anchor),
we keep the low-def 16 segment count.  Intermediate values and values
that are visible to the user are set to high definition.  Most are
simply hints to the inflation correction but where they show, the user
show see smooth lines.
2019-01-03 17:34:59 -08:00
Seth Hillbrand c92424898c pcbnew: Replace magic number segment counts
Where we set 32 segments per circle, the magic number is replaced by the
same value as the common define ARC_APPROX_SEGMENTS_COUNT_HIGH_DEF
2019-01-03 17:21:10 -08:00
Seth Hillbrand 847f6ab4b3 Spelling fix HIGHT->HIGH 2019-01-03 17:10:27 -08:00
Seth Hillbrand 064303e238 pcbnew: Move zone-knockout to default high def
Most rounding operations have been shifted to an absolute error
calculation and the ability to adjust zone segment counts has been
removed in 5.1.  The remaining elements that use fixed segment counts
are either 18 (DRC) or 32 (plotting).  This aligns the punchout segment
count with the higher (32) definition value
2019-01-03 17:09:56 -08:00
Seth Hillbrand 7d06651a10 Change top selection drop-down to combobox
wxChoice centers the selection on GTK.  So when switching from a
mid-list item to an item at the top, the list is always cut off for
choice lists located on the top toolbar.  Using a combobox provides a
drop-down that allows easier access to all elements in the box.

Fixes: lp:1808569
* https://bugs.launchpad.net/kicad/+bug/1808569
2019-01-03 14:48:28 -08:00
Seth Hillbrand 8de12094d8 Fix compile error for missing dtor in overload 2019-01-02 20:21:33 -08:00
Seth Hillbrand 9f8f938660 view: Initialize keyboard local var 2019-01-02 19:45:09 -08:00
Seth Hillbrand 37967eb685 eeschema: init pin table local var
Explicitly set modified to false when instantiating
2019-01-02 19:41:18 -08:00
Seth Hillbrand efbc50b7b8 prevent NULL dereference in dialog_text_properties 2019-01-02 19:40:29 -08:00
Seth Hillbrand 6662891f34 string update: Help->List hotkeys
The hotkey name "Help (this window)" does not describe what the hotkey
and associated action does.  It displays the current hotkey list, so the
action name should reflect that behavior
2019-01-02 15:44:13 -08:00
Seth Hillbrand b39061855e pcbnew: Translate scripting test window 2019-01-02 14:49:55 -08:00
Seth Hillbrand aeedb3543b pcbnew: Update strings
Moving pcbnew error strings that may be seen by the user to translated
strings.  Strings that denote unexpected cases are moved to debug logs
as they are essentially asserts that should never be shown.  The
exceptions are the messages shown when files are loaded.  All unknown
items should show an error here.
2019-01-02 14:43:55 -08:00
Seth Hillbrand 5c055f3f80 pcbnew: minor text fix 2019-01-02 12:28:09 -08:00
Seth Hillbrand daee58a0ab pcbnew: Do not show dynamic ratsnest after most mods
Marking the selection modified should not show the local ratsnest unless
we are currently dragging

Fixes: lp:1809921
* https://bugs.launchpad.net/kicad/+bug/1809921
2019-01-02 12:27:48 -08:00
Seth Hillbrand 583e0173b9 pcbnew: Fix ratsnest display
Checks for ratsnest enabled prior to calculating and displaying the
local/dynamic ratsnest.  Calls the ratsnest clear from selection clear

Notably, it appears that the tool actions do not chain transitions for
the same event.  So only a single action (first specified) will be
executed when an event fires unless the actions are executed by separate
tools.

Fixes: lp:1809752
* https://bugs.launchpad.net/kicad/+bug/1809752
2019-01-02 11:56:23 -08:00
John Beard 2f5dd6a43a Docs: Fix doxygen links
Doxygen is now at: http://www.doxygen.nl

Reported by: Brian Piccioni.
2019-01-02 09:53:29 -05:00
jean-pierre charras 4b7ef22ec4 Fix wildcard list when built on GTK 2019-01-01 17:04:40 +01:00
jean-pierre charras 14ede151cc Add a helper function FileExtListToFilter() to build the wildcard filter used in File Dialog.
It avoid including these extensions in a translatable string, thus avoid breaking filter
if the translation is incorrect (It happens sometimes).
See wildcards_and_files_ext.cpp for use.
2019-01-01 15:38:57 +01:00
Jeff Young dffa399eab Set mirrored when creating footprint texts on back layer. 2018-12-31 21:50:09 +00:00
Jeff Young 061d993448 Warn the user when global track/via edits fail. 2018-12-31 21:50:09 +00:00
jean-pierre charras 1b7ebc7a4e Footprint editor: fix a bug that prevent from saving a library under a new name. 2018-12-31 18:20:58 +01:00
jean-pierre charras 6040eee710 fix a minor issue in Eeschema when left clicking on a highlighted symbol. 2018-12-31 14:44:59 +01:00
jean-pierre charras 7ad21fefe5 Cross probing: Trying to fix a crash, certainly due to a call to clear the HIGHLIGHTED flag of a structure that is not a EDA_ITEM.
Minor enhancement: use a specific message in cross probing to clear the HIGHLIGHTED flag.
2018-12-31 13:54:26 +01:00
jean-pierre charras 26a337db18 Opengl engine: temporary disable bitmaps cache, because it creates serious issues in cross-probing in hierarchies.
If a page layout contains bitmaps and is used in all sheets of a hierarchy, and in the board editor,
the cross-probing from pcbnew to eeschema invalidate textures associated to these shared bitmaps,
when switching active sheets.
Usually a crash happens after switching or when closing editors.

As a workaround, I disabled bitmaps (therefore associated textures) cache.
Not optimal, but at least it avoid crashes.
2018-12-30 20:30:43 +01:00
Maciej Suminski ad07b4a251 Added an explanation for using wxFileConfig in GetNewConfig() 2018-12-29 19:22:07 +01:00
John Beard e919ded35f Use wxFileConfig, not wxConfig
The wrong class is called for the ctor of the wxConfigBase - this should
be a wxFileConfig, just like the bare new used to be.

Fixes: lp:1810002
* https://bugs.launchpad.net/kicad/+bug/1810002
2018-12-29 08:16:40 -05:00
jean-pierre charras fb35a7c8b4 Eeschema highlight symbols (cross probing) fix a few issues.
Fix highlight not cleared by Pcbnew.
Fix highlight not cleared by Cvpcb (missing code).
Add comments. Remove a few now useless printf used for debug
When clicking on a empty area, clear any highligthed symbols

Fixes: lp:1809977
https://bugs.launchpad.net/kicad/+bug/1809977
2018-12-29 12:48:24 +01:00
Jeff Young ad0d9f8df0 Save user-defined nicknames.
While name and path fields would make more sense, this commit
encodes the nickname as an "opts" field so that older versions will
still read the preferences file.
2018-12-28 20:34:06 +00:00
John Beard e856a7a09c Disable legacy canvas on GTK3
This make the use of legacy canvas on GTK3 a default-off
advanced config. Legacy is substantially broken on GTK3
and is of basically no use at all to general users on this
platform.

If the program starts with legacy canvas in the config,
it is forced into a GAL mode, as otherwise it could happen
that the user is stuck and unable to get into pcbnew to change
the setting.

Fixes: lp:1803156
* https://bugs.launchpad.net/kicad/+bug/1803156
2018-12-28 11:36:09 -05:00
John Beard 892f7cf8ff Make SVG import an advanced config, not a compile option.
This demos the advanced config and allows no-recompile switching
of the SVG importer. It also allows the import manager to be
tested more completely.
2018-12-28 11:36:09 -05:00
John Beard a33a8292a4 Run-time config for advanced options
This can be used for "advanced" options which are for developers
to use for feature-flags and other configuration. Run time config
has some advantages over preprocessor defines:

* Can be changed without recompilation
   * Sensitive to XDG_CONFIG_DIR, so flipping configs is easy
* Better compiler coverage (less conditionally compiled code means
  less chance to break a different configuration). Also better
  analysis coverage.
* Type safe config params
* Centralised documentation: it's in doxygen, in one place

No advanced config should be required by a general users. If a general
user does use one of these configs, it's probably because:

* There is a bug and one of these configs is a workaround
* A config in here is generally useful and should be moved into the
  relevant application config and given UI.

For now, the config is read-only, and is read from the
"kicad_advanced" config file in the normal config dir.
2018-12-28 11:36:08 -05:00
jean-pierre charras 9f21d32563 Fix a compatibility issue with wxWidgets 3.1.2 (MSW specific) 2018-12-28 15:30:22 +01:00
jean-pierre charras 8cc3912b6c Zoom context menu: minor enhancement (gal mode). 2018-12-28 14:08:01 +01:00
Jeff Young 72a1052bb9 Make sure parents get redrawn to refresh module text items.
Fixes: lp:1809912
* https://bugs.launchpad.net/kicad/+bug/1809912
2018-12-27 18:42:04 +00:00
Jeff Young 4d9b4428fa It's never a good idea to dereference a freed pointer.
Fixes: lp:1809897
* https://bugs.launchpad.net/kicad/+bug/1809897
2018-12-27 13:33:19 +00:00
Maciej Suminski bce4a45ab4 Fixed a crash when trying to highlight a not existing component 2018-12-27 13:45:41 +01:00
Jeff Young f6e6ac3162 Don't issue errors for externally-defined env variables.
Fixes: lp:1809300
* https://bugs.launchpad.net/kicad/+bug/1809300
2018-12-26 21:36:04 +00:00
Tomasz Włostowski a3d8ab911f router: improved snap-to-clearance zone algorithm in highlight collisions mode 2018-12-25 02:29:23 +01:00
Tomasz Włostowski c777eac000 eeschema: improved highlighting of PCB->SCH cross-probed components/labels/pins
Fixes: lp:1796990
* https://bugs.launchpad.net/kicad/+bug/1796990
2018-12-24 15:35:25 +01:00
Tomasz Włostowski 5b4e6b21f2 SELECTION_AREA: ensure single-pixel-wide selection rectangle border
Fixes: lp:1801558
* https://bugs.launchpad.net/kicad/+bug/1801558
2018-12-24 15:35:25 +01:00
Tomasz Włostowski 3adb8d56c5 OPENGL_GAL: no need to draw line caps when drawing a polyline, the shader takes care of them already 2018-12-24 15:35:25 +01:00
Tomasz Włostowski 029fdaccc0 gal: re-enable scrolbar arrow buttons
Fixes: lp:1690780
* https://bugs.launchpad.net/kicad/+bug/1690780
2018-12-24 15:35:25 +01:00
Jeff Young 0c0dda54bf Close any active editor before rebuilding netclass lists.
Fixes: lp:1809555
* https://bugs.launchpad.net/kicad/+bug/1809555
2018-12-24 01:55:02 +00:00
Tomasz Włostowski bebbe6ed22 pcbnew: disable autopanning when cursor entered auto-pan margin following a keyboard cursor move command
Fixes: lp:1803523
* https://bugs.launchpad.net/kicad/+bug/1803523
2018-12-23 18:58:12 +01:00
Jeff Young 10887868dc More changes to clean up redraw after an undo.
Fixes: lp:1803038
* https://bugs.launchpad.net/kicad/+bug/1803038
2018-12-22 22:13:23 +00:00
jean-pierre charras dde933ba08 When printing, pads are not always printed (especially on tech layers)
A printing mode is added, to force ViewGetLOD() to return 0 in printing mode (pads are always drawn)

Fixes: lp:1809528
https://bugs.launchpad.net/kicad/+bug/1809528
2018-12-22 13:44:49 +01:00
Jeff Young 4c184f07a6 Clean up undo when cancelling block operation.
Fixes: lp:1809444
* https://bugs.launchpad.net/kicad/+bug/1809444
2018-12-21 22:45:57 +00:00
Jeff Young 51e6f56300 Clean up view when aborting move item.
Fixes: lp:1809444
* https://bugs.launchpad.net/kicad/+bug/1809444
2018-12-21 20:32:10 +00:00
Jeff Young 6eca924365 Clear hidden flags on undo.
Fixes: lp:1803038
* https://bugs.launchpad.net/kicad/+bug/1803038
2018-12-21 16:39:10 +00:00
jean-pierre charras 9dedbc74a3 Gerbview exporter: fix a wxASSERT. 2018-12-21 13:48:00 +01:00
jean-pierre charras 5f3cbff977 Pcbnew, DIALOG_SET_GRID_BASE: A few cosmetic enhancements and fix a wxWidgets minor alert 2018-12-21 10:15:15 +01:00
Seth Hillbrand ec93fb3171 pcbnew: Fracture polygons before plotting
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.
2018-12-20 17:07:47 -08:00
jean-pierre charras 1d230bbee9 very minor fixes to help I18n translations (remove trailing spaces) 2018-12-20 20:19:45 +01:00
Seth Hillbrand db43ed72fe swig: clear up some warnings 2018-12-20 11:04:55 -08:00
Seth Hillbrand 55f2a79957 pcbnew: locking connectivity using RAII
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.
2018-12-20 11:04:08 -08:00
Maciej Suminski 24f9bfa13b Fixed memory leaks
This is commit a9efbf47 with a fix for SWIG to deal with unique_ptr.
2018-12-20 10:05:58 +01:00
jean-pierre charras 22d8ddb207 Pcbnew, legacy canvas, context menu for zones: better name for move and delete corner commands. 2018-12-20 08:47:45 +01:00
Seth Hillbrand 135ff314ca pcbnew: Correct layer naming
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/
2018-12-19 20:58:36 -08:00
Seth Hillbrand 8f7c073514 pcbnew: Check for valid pointer before deref
In legacy toolkit, we do not keep the corner pointers, so dereferencing
causes crashes.

Fixes: lp:1808852
* https://bugs.launchpad.net/kicad/+bug/1808852

(cherry picked from commit 4aeef1e09e)
2018-12-19 16:54:34 -08:00
jean-pierre charras 83d851956c classes MARKER rework: remove duplicate code. Better HitTest code (HitTest takes in account the actual shape) 2018-12-19 19:53:27 +01:00
jean-pierre charras 15843ae01a class MARKER rework: fix a few minor issues, remove duplicate code and add comments. 2018-12-19 15:13:31 +01:00
Seth Hillbrand 64f1fb9e79 tesselation: Re-check polygon count after fracturing
The fracture() call may result in zero polygons remaining, which will
cause failure in our tesselation routine, so we need to check whether
this is a valid POLYGON before re-tesselating.
2018-12-18 13:49:13 -08:00
Seth Hillbrand e5f5443762 modedit: Allow wildcard footprint import
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.
2018-12-18 11:45:39 -08:00
Seth Hillbrand 214d8d3703 kicad2step: Handle quoted layers
Quoted layers are parsed by kicad2step as strings but were only
expecting symbols.  This threw an error when exporting.
2018-12-18 10:17:22 -08:00
Seth Hillbrand 2498da2745 Tesselation: Only set valid when successful
Tesselation can fail for a number of reasons.  When this happens, we set
the triangulationValid flag to false to prevent using the broken
triangulation.  This will fall back to the slow OpenGL triangulation
when DrawPolygon is called.
2018-12-18 09:16:16 -08:00
jean-pierre charras 388397f97d Protect TesselatePolygon() against degenerated polygons (less than 3 corners) to avoid crashes.
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.
2018-12-18 12:49:14 +01:00
Seth Hillbrand 7f5503a783 tesselation: Fix winding order bug
Typo created a couple issues with calculating winding order.
2018-12-17 17:13:13 -08:00
Seth Hillbrand 657bf2b53e tesselation: In case of failure, re-fracture
Simplification with clipper can produce a polygon with holes.  We need
to re-call simplify followed by fracture to ensure valid triangulation
2018-12-17 17:02:32 -08:00
Seth Hillbrand e49242bc54 tesselation: Check winding order
Although copper layers are always tesselated CCW, polygons in footprints
will be CW if flipped to the back layer, resulting in a bad render.
2018-12-17 12:45:28 -08:00
Seth Hillbrand 98d6d68e2d tesselate: Check for non-polygons
Elements with only 0, 1 or 2 vertices cannot form valid polygons, so do
not attempt to tesselate them.
2018-12-17 11:45:30 -08:00
Wayne Stambaugh fc69e6532c Unify "Read netlist" and "Load netlist" UI strings. 2018-12-17 10:18:44 -05:00
Jeff Young 95dcc30ffb Load footprint browser with last-selected footprint. 2018-12-16 21:59:42 +00:00
jean-pierre charras 638b4384ec eeschema: fix issue: Moving a hierarchical pin slightly move also other hierarchical pins
Fixes: lp:1808687
https://bugs.launchpad.net/kicad/+bug/1808687
2018-12-16 15:31:31 +01:00
jean-pierre charras 6a0319f6b7 autoplacer: minor fixes. 2018-12-16 10:43:47 +01:00
Jeff Young 2e907bfaa3 Don't throw DRC errors for hidden copper text.
Fixes: lp:1808651
* https://bugs.launchpad.net/kicad/+bug/1808651
2018-12-15 22:30:11 +00:00
Jeff Young f69ea8b4a2 Don't cut invisible module text out of zones.
Fixes: lp:1808651
* https://bugs.launchpad.net/kicad/+bug/1808651
2018-12-15 20:15:19 +00:00
Frank Severinsen e2ed0e6557 Move sheet pins in front of sheetedge & move them in by ½ line width 2018-12-15 20:15:19 +00:00
Jeff Young c437ca1640 Fix some formatting issues. 2018-12-15 20:15:19 +00:00
jean-pierre charras ed28b7e29b Autorouter rework: remove outdated or dead code, add comments and display the footprints as soon as a footprint is placed 2018-12-15 17:50:42 +01:00
Seth Hillbrand 968ea983aa GLM: Check for incompatible glm version in cmake
GLM version 0.9.9.3 has a C++11 error that causes issues for KiCad.
Earlier version function as expected.  Since GLM is header-only, forcing
the version during compilation is sufficient to ensure that the
executable functions correctly.

Fixes: lp:1804030
* https://bugs.launchpad.net/kicad/+bug/1804030
2018-12-14 16:29:18 -08:00
Seth Hillbrand 7e9fee285f pcbnew: Align/Distribute handle locking
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
2018-12-14 16:04:07 -08:00
Seth Hillbrand 0a26388901 pcbnew: Break track in edit mode
Enables the ability to break a track into two segments when operating in
the edit mode rather than in router.

Fixes: lp:1779788
* https://bugs.launchpad.net/kicad/+bug/1779788
2018-12-14 09:59:25 -08:00
jean-pierre charras f452eafcd6 Eeschema: Be sure the screen is refreshed when changing the zoom level.
Fixes: lp:1802302
https://bugs.launchpad.net/kicad/+bug/1802302
2018-12-14 12:51:30 +01:00
Seth Hillbrand 3e640030f3 Remove inadvertent committed fp-info-cache
Add fp-info-cache to gitignores as well.
2018-12-13 14:55:30 -08:00
Seth Hillbrand 77163e27f0 suppress boost optional compiler warning 2018-12-13 12:43:29 -08:00
Seth Hillbrand 1c99784e92 pcbnew: Locked deletion prompting
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
2018-12-13 12:32:58 -08:00
Seth Hillbrand 9ef3997e1e status_popup: Allow VECTOR2I input
Convenience overload for VECTOR2I input to the popup placement.

Also adjust the default foreground color to use system coloring
2018-12-13 12:32:58 -08:00
jean-pierre charras 5f4530493a Make DRC markers always selectable.
Fixes: lp:1808181
https://bugs.launchpad.net/kicad/+bug/1808181
2018-12-13 09:06:38 +01:00
Seth Hillbrand 5c5979dfc6 pcbnew: Fix polygon hittest
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
2018-12-12 17:23:40 -08:00
Seth Hillbrand 4ff9d2f5e4 pcbnew: Update Alt Delete Name/hint
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
2018-12-12 17:23:27 -08:00
jean-pierre charras aefb1f62e7 fix bug created by my commit 04aeec12 2018-12-12 21:34:27 +01:00
jean-pierre charras 04aeec1223 Remove useless includes 2018-12-12 15:28:59 +01:00
Seth Hillbrand b4910658b5 Footprint wiz: Fix FPC courtyard 2018-12-11 13:11:56 -08:00
Seth Hillbrand 48aad33314 Activate the footprint wizard correctly
Starting the footprint wizard should cause the actual wizard to activate
2018-12-11 13:11:56 -08:00
Seth Hillbrand 4b3bfb0115 footprint wiz: Update default values
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
2018-12-11 13:11:56 -08:00
Stefan Brüns 9490fd9d30 Use absolute path CMAKE_INSTALL_FULL_LIBDIR for 3d viewer PLUGINDIR
Currently, the plugindir in the plugin manager is constructed as
{CMAKE_INSTALL_PREFIX}/bin/../{CMAKE_INSTALL_LIBDIR}/kicad/..., while
CMakes install uses {CMAKE_INSTALL_LIBDIR}/kicad/...

In case CMAKE_INSTALL_LIBDIR is a relative path "install" prefixes it
with CMAKE_INSTALL_PREFIX and both paths happen to match, otherwise
the constructed path ends up as e.g. "/usr/bin/../usr/lib/kicad/...".

For these cases where an absolute path is wanted CMake provides the
CMAKE_INSTALL_FULL_<dir> variants which works the same as
CMAKE_INSTALL_<dir> when used as DIRECTORY for install.
2018-12-11 14:28:01 -05:00
Seth Hillbrand e307d9318b Revert "Fixed memory leaks"
This reverts commit a9efbf4716.

The commit broke compiles with scripting
2018-12-11 10:12:44 -08:00
Jeff Young 2c53ab3d8c Fix debug assert. 2018-12-11 17:56:41 +00:00
Maciej Suminski 63d4afb3ee Support autopanning in GALified eeschema
Fixes: lp:1807234
* https://bugs.launchpad.net/kicad/+bug/1807234
2018-12-11 17:49:34 +01:00
Maciej Suminski a9efbf4716 Fixed memory leaks 2018-12-11 16:21:43 +01:00
Maciej Suminski 7e1498a46f Set the screen pointer to null before deleting the associated items
VIEW needs to be cleared before deleting the stored items. Otherwise it
may dereference stale pointers leading to a crash.
2018-12-11 16:21:43 +01:00
jean-pierre charras 372a09f299 Eagle(.lbr) footprints not listed in Library Browser
Fixes: lp:1807629
https://bugs.launchpad.net/kicad/+bug/1807629
2018-12-11 16:06:11 +01:00
jean-pierre charras 253b14b871 VIEW_OVERLAY: add missing code and missing poly graphic overloaded primitives.
Some graphic primitives were already in VIEW_OVERLAY, without code.
A few graphic overloaded primitives (Polygon and Polyline) where missing.
2018-12-11 11:42:39 +01:00
jean-pierre charras 85775d522c Fix incorrect include paths
Especially, pcbnew/import_dxf is no longer in use.
2018-12-11 11:32:58 +01:00
Seth Hillbrand 0769b0409f 3d-viewer: Remove threading on middle layer
The middle layer of the 3d contours does not need threading as it does
not have substantial calculations.  It also contains has a few
wx*Asserts that may not be called from other than the main thread.
Rather than remove useful error checking, we remove excess threading.

Fixes: lp:1802940
* https://bugs.launchpad.net/kicad/+bug/1802940
2018-12-10 19:51:32 -08:00
Seth Hillbrand 830dced83f Fix minor issue in docs
Source is distributed in xz format, so the older gzip instruction did
not work.
2018-12-10 12:04:41 -08:00
Jeff Young f0c0f04348 Fix ReadNetList and UpdatePCB issues with new footprints.
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
2018-12-10 19:48:58 +00:00
Seth Hillbrand d3a67e255d pcbnew: Polygon tool on EdgeCuts adds polylines
Edge cuts are more easily edited when they are polylines not polygons
and this keeps the files backwards compatible with v5.0.x.
2018-12-10 06:10:57 -08:00
Jeff Young 40dac0ecbb Default sizes for edit frames in case prefs get deleted.
Fixes: lp:1807676
* https://bugs.launchpad.net/kicad/+bug/1807676
2018-12-10 12:23:16 +00:00
jean-pierre charras 4013f6424d Pcbnew, autoplacer: display more activity during footprint placement 2018-12-10 10:33:56 +01:00
Jeff Young 7d6081d329 Use default grid if none is found in preferences.
Fixes: lp:1807541
* https://bugs.launchpad.net/kicad/+bug/1807541
2018-12-09 23:12:26 +00:00
jean-pierre charras e50d9df76a Eeschema: fix incorrect parsing of line color (r v b values).
Only the R and V were read, the parsing was stopping before reading the B value.
2018-12-09 17:59:24 +01:00
Seth Hillbrand 7ed1968f60 pcbnew: Remove corners from graphical polygons
Cherry-picked item from 5.0 allowed this action for modedit but missed
pcbnew.  This allows the same action in pcbnew as well.
2018-12-09 08:14:45 -08:00
Seth Hillbrand 47fe01f793 3d-viewer: Remove duplicate call
Simplify is called by GetBoardPolygonOutlines(), it does not need to be
called a second time.
2018-12-09 07:52:58 -08:00
Seth Hillbrand dfe4b3412a pcbnew: Fix bug in adding new zone/poly
The next point wasn't updated unless the line was in 45-degree mode.

Fixes: lp:1807591
* https://bugs.launchpad.net/kicad/+bug/1807591
2018-12-09 07:28:41 -08:00
jean-pierre charras f6aed7c99a Gerber plotter: rename UseX2Attributes() to UseX2format, and fix incorrect/outdated comments. 2018-12-09 10:23:07 +01:00
jean-pierre charras a18c7496bb Ensure compatibility with "old" pythons scripts after renaming SetUseGerberAttributes() to SetUseGerberX2format() 2018-12-09 08:38:23 +01:00
jean-pierre charras 7f20c55ed6 Pcbnew, Plot dialog, Gerber format: Enable or disable adding net metadata both in X1 and X2 format. Previously, this option was existing only in X2 format. Should be existing in both formats.
A bit of cleaning code related to this option.
2018-12-09 08:38:23 +01:00
Jeff Young dd9a001077 Turn off bugfix for lp:1797787 for 5.1.
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
2018-12-08 17:09:41 +00:00
Seth Hillbrand fd537c8230 eeschema: Do not clear highlights with NULL screen
When closing a project, the screen is released, so we need to avoid
cross-probe calls dereferencing the screen pointer.

Fixes: lp:1807501
* https://bugs.launchpad.net/kicad/+bug/1807501
2018-12-08 07:54:31 -08:00
Seth Hillbrand 4fc81bb923 pcbnew: Graphic lines snap as single segments
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
2018-12-08 07:26:58 -08:00
Wayne Stambaugh c7998cfc23 3D Viewer: fix screenshot file extension bug with GTK+
Append the appropriate file extension to the file name if the file name
does not have a file extension.  This is a know issue with the GTK+ file
dialog.

Make the last 3D viewer screenshot last file used code more coherent.

Add the 3D viewer main frame trace string to the trace environment
variables doxygen group.

Doxygen comment and other minor code cleaning.

Fixes lp:1804980

https://bugs.launchpad.net/bugs/1804980
2018-12-08 08:20:32 -05:00
jean-pierre charras a40cff18d3 PANEL_EESCHEMA_SETTINGS_BASE: very minor cosmetic enhancement. 2018-12-07 11:30:52 +01:00
jean-pierre charras d546fce7c4 Gerbview: drill file dialog selector: add .nc and .xnc to drill file extension list.
Therefore file extension list is ".drl .nc .xnc" for NC (Excellon) drill files.
2018-12-07 11:25:30 +01:00
jean-pierre charras f1c1c5db3f Fix a minor compil warning 2018-12-07 11:22:03 +01:00
jean-pierre charras 5b3202d8f3 dxf and svg import: accept unicode filenames
Fixes: lp:1805613
https://bugs.launchpad.net/kicad/+bug/1805613
2018-12-07 10:07:43 +01:00
Maciej Suminski 766156ed87 Fix for dark mode on macOS Mojave
Thanks to Scott Rapson and Justace Clutter for the solution.

Fixes: lp:1797989
* https://bugs.launchpad.net/kicad/+bug/1797989
2018-12-07 09:03:56 +01:00
Jeff Young 78daaa8825 Allow cancel, delete or rescue when opening pcbs with undefined layers.
Fixes: lp:1796596
* https://bugs.launchpad.net/kicad/+bug/1796596
2018-12-07 00:26:10 +00:00
Jeff Young 3a0dbf48c8 Read Symbol Browser grid settings from Symbol Editor. 2018-12-07 00:26:10 +00:00
Seth Hillbrand db43bd82a7 gtk3: Remove scrollbars
Under GTK3, the scrollbars fade in and out, causing a cascade of
re-paint events.  These cause KiCad to be unresponsive while the repaint
events occur.  By default this is 1s fade in 1s fade out but can be
configured by the user/wm.

Area mapping the repaint events to just scrollbar areas will be a good
solution but until/unless that happens the scrollbars in GTK3 are
problematic.
2018-12-06 13:46:52 -08:00
John Beard 4475c2008c Zooming: handle smaller, faster, events on GTK+3
On GTK+3, the zoom events are smaller and faster, so
the trigger the zoom acceleration.

A simple fix is to use the non-accelerated Mac-style
zooming and an appropriate constant. This can be tweaked
further as needed.

Fixes: lp:1786515
* https://bugs.launchpad.net/kicad/+bug/1786515
2018-12-06 13:46:52 -08:00
Seth Hillbrand 1f62a2d784 gtk3: prevent double scroll events
GTK3 smooth scrolling is enabled by wxWidgets but not to the exclusion
of normal scroll up/down events.  wxWidgets maps these both to the same
scroll handler and will fire them both if they are not handled before
being queued.  Testing timestamps allows us to mark and ignore the
dupes.

This is set to GTK3 only for now as it isn't listed as a problem for
other platforms.  But it shouldn't cause issues if it is enabled
elsewhere in the future.
2018-12-06 13:46:52 -08:00
Seth Hillbrand ed506dd05e eeschema: Prevent excess link updates
Refreshing the symbols for each paint is excessive to catch the change
from library loads.  Instead we catch them on the KIWAY MAIL update
2018-12-06 13:46:52 -08:00
Wayne Stambaugh b8de4e73bf Eeschema: fix schematic symbol parsing bug.
Schematic symbol library link names are unquoted strings that can
contain non-ascii characters which breaks the parser.  Converting
the line to uft-8 before breaking the string into tokens resolves
the issue.
2018-12-06 12:44:13 -05:00
Wayne Stambaugh 742961119d Eeschema: fix library symbol pin definition parsing bug.
Pin names are unquoted strings that can contain non-ascii characters
which breaks the parser.  Converting the line to uft-8 before breaking
the string into tokens resolves the issue.
2018-12-06 11:47:20 -05:00
D4p0up e94752a6cf Added help string to select buttons.
Also moved highlight text string to help_common_strings.h

Fixes: lp:1497737
* https://bugs.launchpad.net/kicad/+bug/1497737
2018-12-05 20:13:03 -08:00
Seth Hillbrand 3d98c82217 pcbnew: Disable capture cursor in measure tool
When starting the measure tool, the cursor should not be captured until
we begin the measurement.

Fixes: lp:1806486
* https://bugs.launchpad.net/kicad/+bug/1806486
2018-12-05 19:59:01 -08:00
Seth Hillbrand f9dfbe6f4d Code formatting 2018-12-05 19:39:05 -08:00
Wayne Stambaugh 07ebc4df14 Fix schematic append clear annotation bug.
Clear the annotation of only the appended schematic and any sheets in it's
hierarchy.  Do not clear the annotation of the symbols in the target sheet.

Fixes lp:1805695

https://bugs.launchpad.net/kicad/+bug/1805695
2018-12-05 17:12:11 -05:00
Wayne Stambaugh a61a51f26e Eeschema: fix UTF8 character handling bug in legacy parser.
Iterating over unquoted strings as ASCII8 fails when ' ' character is
not the LSB of a UTF8 string with wide characters.  Change parsing method
for unquoted strings to convert the entire line as UTF8 and then use
wxStringTokenizer to break the line into tokens at the ' ' characters.

Fixes lp:1806206

https://bugs.launchpad.net/kicad/+bug/1806206
2018-12-05 13:54:51 -05:00
Jeff Young 6a7ee5b107 Add locale handling for orientation combobox.
Fixes: lp:1806851
* https://bugs.launchpad.net/kicad/+bug/1806851
2018-12-05 18:08:50 +00:00
Seth Hillbrand 0614f59973 pcbnew: Add edge polygons to pns keepout
Fixes: lp:1806846
* https://bugs.launchpad.net/kicad/+bug/1806846
2018-12-05 08:58:55 -08:00
Seth Hillbrand 02039be2d9 Modify transform shape to use filled/unfilled poly 2018-12-05 08:44:49 -08:00
jean-pierre charras 5c54b9c46f Fix a compil issue due to a mistake in commit b8309e2 2018-12-05 10:14:46 +01:00
jean-pierre charras 754837f947 Pcbnew: DRAWSEGMENT polygonal shape: fix drawings in Legacy mode. Add IsPolygonFilled() to know if the polygon is filled or not.
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.
2018-12-05 09:57:59 +01:00
Seth Hillbrand b8309e2a70 pcbnew: Edgecuts polygons only hit edges
Only allow hittest for edgecuts polygons on their edges as we do not
display the fill for this layer.

Fixes: lp:1806782
* https://bugs.launchpad.net/kicad/+bug/1806782
2018-12-04 17:19:40 -08:00
Jeff Young 4f5771f79f Don't nag user about changes they made in a text editor.
Fixes: lp:1806748
* https://bugs.launchpad.net/kicad/+bug/1806748
2018-12-04 23:32:55 +00:00
Jeff Young da40def69d Standardize on "local coordinates" terminology. 2018-12-04 23:32:55 +00:00
Seth Hillbrand 2e0887d49f pcbnew: correctly display edgecut polygons in modules
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.
2018-12-04 15:08:04 -08:00
Seth Hillbrand 1858b7dca7 pcbnew: Allow closed polygons as board edges
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
2018-12-04 12:32:47 -08:00
jean-pierre charras 58036382c1 eeschema: Fix slow redraw on net highlighting (by redrawing only modified items)
Fixes: lp:1806197
https://bugs.launchpad.net/kicad/+bug/1806197
2018-12-04 20:55:59 +01:00
jean-pierre charras 4f4f03a98a Try to fix compil issue on OSX (commit 8757fcf6 breaks the import gfx dialog) 2018-12-04 20:03:23 +01:00
jean-pierre charras 3623980611 DXF importer: fix incorrect line thickness of imported texts. 2018-12-04 20:01:47 +01:00
John Beard bb18c9201b Make SVG import a CMake option (experimental)
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.
2018-12-04 18:53:28 +01:00
Seth Hillbrand 8757fcf676 Add array hint to wxArrayString contructors
This may be required for some compilers to prevent premature casting to
a single element.
2018-12-04 09:47:43 -08:00
jean-pierre charras 2ec957a226 polygon_triangulation.h: fix a missing call to updateList() in TesselatePolygon. 2018-12-04 15:47:54 +01:00
Maciej Suminski 6a233a1367 Updated a link to the stable source code tarball in the documentation 2018-12-04 15:32:03 +01:00
Maciej Suminski ca5751fc46 Symbol Editor: update the view after relocating the anchor 2018-12-04 09:42:26 +01:00
Maciej Suminski ecff2ed384 SVG import dialog: make placement options mutually exclusive 2018-12-04 08:39:58 +01:00
Seth Hillbrand 2a574c4f65 pcbnew: Synchonize net info when loading via python
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
2018-12-03 17:05:18 -08:00
jean-pierre charras af65c48979 Pcbnew: Partial revert of commit 0bceb69fe9
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
2018-12-03 20:12:57 +01:00
jean-pierre charras 2cb4187f52 Gerbview: small fix to speed up switching to opengl canvas.
* workaround to speed up switching canvas from legacy or Cairo to opengl (this is a workaround, not a fix)
2018-12-03 18:31:36 +01:00
Nabeel Ahmad 7975e05446 Documentation: UI policy update about dialogs
Updated out-of-date information about the use of wxFormBuilder.
2018-12-03 12:22:14 -05:00
Seth Hillbrand 2a865ef4b6 pcbnew: Remember highlighted net while routing
If the user has specifically requested a net to be highlighted before
routing, we keep the net highlighted after the route is completed.
2018-12-03 08:42:45 -08:00
John Beard 4363cc0bec Docs: add docset generation target
This is a CMake (non-ALL) target that will build a Zeal-compatible
docset from a version of the doxygen HTML.

To do this, doxytag2zeal is used.
2018-12-03 10:14:15 -05:00
jean-pierre charras a762c4d86e Import GFX: temporary disable SVG import until V6.0.
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.
2018-12-03 15:31:40 +01:00
jean-pierre charras fb5b5ff7c3 nanosvg: Update nanosvg. Move the code to compile from nanosvg.h to nanosvg.cpp
Uncrustify this code.
2018-12-03 15:25:46 +01:00
jean-pierre charras cc0aa8b928 Gfx import: fix many issues, and add many enhancements.
* 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.
2018-12-03 15:25:44 +01:00
jean-pierre charras 430c61822d Import svg import code from experimental trunk: convert dxf importer 2018-12-03 13:42:23 +01:00
jean-pierre charras 74a9d5401a Import svg import code from experimental trunk: start point 2018-12-03 13:42:22 +01:00
John Beard 157519d722 Libeval: leading + is a sign, not an operator
Due to (presumably) a different lemon version,
there are some formatting changes in the grammar,
and some manual debug left in has been removed.
2018-12-03 08:39:30 +01:00
John Beard f30f5b3249 Build: Add a CMake target libeval lemon grammar
The libeval grammar can now be rebuilt with "make libeval_grammar".
This is only possible when lemon is installed.

Also a couple of modifications to the lemon grammar to
account for external changes since the grammer was last generated.

Also move the grammar defines into grammar.h - this is how
Lemon produces them, and by manually copying into the target .cpp,
it make automated regeneration impossible.
2018-12-03 08:39:27 +01:00
John Beard 49c723fc83 QA: Add numeric evaluator tests
Remove obsolete and unbuildable common/libeval/main.cpp
test program.
2018-12-03 08:39:21 +01:00
jean-pierre charras 0bceb69fe9 Pcbnew: DRAWSEGMENT polygonal shape: use triangulation (CacheTriangulation) to draw the shape (similar to zones).
On opengl, creating triangles by CacheTriangulation instead of GLU tesselator is much faster (one order of magnitude)
2018-12-02 18:05:25 +01:00
Seth Hillbrand 26765161c1 drc: Add board outline and edge crossing
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
2018-12-02 07:54:52 -08:00
jean-pierre charras 5eb5b5ce58 DIALOG_TEXT_PROPERTIES: hide visibility option, because this option exists only for footprint texts, and do nothing for other texts.
Texts on board (not on footprints) cannot be invisible, at least in 5.0 and previous versions.
2018-12-02 10:30:48 +01:00
jean-pierre charras d607c4853d fix a minor compil warning. 2018-12-01 20:07:59 +01:00
jean-pierre charras ecfe564f4d Gerber viewer: Ensure arc interpolation is used only after a arc command.
Remove also non existing G command codes.
2018-12-01 18:52:27 +01:00
jean-pierre charras 79e784455c Gerber plotter: remove a G01 useless command, and ensure this command exists in plot polygon. 2018-12-01 18:52:27 +01:00
Jeff Young 45ee95f5e2 Apply CharHook uniformly as other platforms appear to have issues.
Fixes: lp:1806124
* https://bugs.launchpad.net/kicad/+bug/1806124
2018-12-01 11:57:16 +00:00
Jeff Young 61b749f0b2 Update dangling ends when resizing sheet.
Fixes: lp:1805127
* https://bugs.launchpad.net/kicad/+bug/1805127
2018-11-30 21:34:18 +00:00
Jeff Young ff6a3482ec Remove on-kill-focus-validation.
Fixes: lp:1805361
* https://bugs.launchpad.net/kicad/+bug/1805361
2018-11-29 19:00:21 +00:00
Maciej Suminski 6d8ca311f8 Fix a crash after clicking 'delete' button with empty Template Field Names grid 2018-11-29 14:09:07 +01:00
Wayne Stambaugh 59b0f553e0 Code cleaning. 2018-11-28 09:58:41 -05:00
Adam Wolf 3392162d49 Fixup documentation for macOS Python script plugins. Fixes #1789960. 2018-11-28 09:40:22 -05:00
Jeff Young 8ca0fe6722 When copying modified footprint make sure we get the latest.
Fixes: lp:1805413
* https://bugs.launchpad.net/kicad/+bug/1805413
2018-11-27 19:20:36 +00:00
Seth Hillbrand 7b2f245283 pcbnew: Tracks cleanup use connectivity database
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
2018-11-27 11:17:59 -08:00
Jeff Young 72f17ad7f0 Attempt to fix MSW Cancel-still-validates bug.
Fixes: lp:1805361
* https://bugs.launchpad.net/kicad/+bug/1805361
2018-11-27 17:09:09 +00:00
jean-pierre charras 8cf9ab5a4c Fix a wxwidgets alert. 2018-11-27 16:45:46 +01:00
Jeff Young 9b7d6a27de Don't show dangling symbols at ends of wires with no-connect flags.
Fixes: lp:1805255
* https://bugs.launchpad.net/kicad/+bug/1805255
2018-11-27 14:44:13 +00:00
John Beard 369d172460 Document tracemask strings and add note in testing.md
Also make the examples in the testing.md docs self-consistent.
2018-11-27 08:33:10 -05:00
Jeff Young db07b43674 Fix copy/paste errors with wrong icons.
Fixes: lp:1805123
* https://bugs.launchpad.net/kicad/+bug/1805123
2018-11-26 23:57:08 +00:00
John Beard 1eb0f70de5 Zoom: Use std::chrono for the timestamping
The reduces a little bit of WX dependency, and makes
the timing code a bit more type-safe.

Also adds a more testable interface for the accelerated
zoom controller.
2018-11-26 14:40:23 -05:00
John Beard d5248cced2 QA: Initialise WX for the libcommon tests
If this is not done, things like logging and trace don't work,
as they need WX to be set up first.
2018-11-26 14:40:16 -05:00
John Beard 5a0318968f Break zoom control into a self-contained controller
This is done to avoid a big chunk of conditionally-compiled code
in the middle of the event function.

Also separates the zoom logic from the WX_VIEW_CONTROLS object
and isolates it in a separate class behind a clearer interface.

Add some simple tests for sane steps on GTK+3-sized scroll
steps.
2018-11-26 14:40:09 -05:00
jean-pierre charras 90139d540c 3D viewer: Fix hanging when a board is displayed in non realistic mode and the body is not shown. 2018-11-26 15:58:54 +01:00
jean-pierre charras a3b82d770e dialog_3D_view_option_base.cpp: fix a minor wxWidgets alert. 2018-11-26 14:49:06 +01:00
jean-pierre charras 3e2f8bcb1d Gerbview: fix broken behavior of "Reload file" tool.
Previous code was unable to reload drill files: they were reloaded as gerber files.
2018-11-26 12:49:13 +01:00
jean-pierre charras 542c57ff27 Gerbview, Excellon (NC) drill files reader: routing mode: better handling of malformed files.
Routing mode starts by M15 (or G01, G02, G03) and ends by M16 or M17.
Accept now a end routing if a G00 (start move) G05 (switch to drill mode) or M30 (end of file) is encountered.
2018-11-26 10:55:36 +01:00
Maciej Suminski 4d73cfb8a1 PNS: validate SHAPE_LINE_CHAIN before accessing its segments 2018-11-26 00:01:02 +01:00
Seth Hillbrand 4a0467bbd0 Selection: allow optional locked item edit
When looping main, we should not exclude locked items without prompting
the user first.

Fixes: lp:1804979
* https://bugs.launchpad.net/kicad/+bug/1804979
2018-11-25 11:54:29 -08:00
Seth Hillbrand 2cfcb2b9fb SELECTION: Allow RequestSelection() to add items
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
2018-11-25 08:33:49 -08:00
Jeff Young 6bf0e17036 Fix typo which was keeping rename from working.
(Renaming the dialog window instead of the libentry doesn't really
do the trick.)
2018-11-25 01:51:45 +00:00
Jeff Young d2756bedf1 Keep state except when the filter changed.
(Used to be "except when filtering".)

Fixes: lp:1804293
* https://bugs.launchpad.net/kicad/+bug/1804293
2018-11-25 01:51:45 +00:00
Seth Hillbrand ff668968f3 pcbnew: Changing the track width while routing
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
2018-11-24 11:52:26 -08:00
jean-pierre charras 558c38b5c5 Very minor enhancement in plot dialog.
Inside the layers listbox, the context menu can select all fabrication layers.
The courtyard layers (only used for DRC) are now not selected.
2018-11-24 17:48:05 +01:00
Jeff Young c0d713b2d2 Implement OSX-specific method for opening project directory.
Sadly, the wxWidgets one doesn't work.

Fixes: lp:1804937
* https://bugs.launchpad.net/kicad/+bug/1804937
2018-11-24 16:19:38 +00:00
Jeff Young 05d9f49d25 Init icon scale when reading it from PCB prefs.
Fixes: lp:1804926
* https://bugs.launchpad.net/kicad/+bug/1804926
2018-11-24 16:19:38 +00:00
Seth Hillbrand 908c2a37e5 GRID_HELPER: Finish drawing closed path
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.
2018-11-24 08:00:11 -08:00
Jeff Young 239482ec98 Add tooltips to Symbol Properties dialogs.
Fixes: lp:1804931
* https://bugs.launchpad.net/kicad/+bug/1804931
2018-11-24 15:06:21 +00:00
Jeff Young 2e1920abad Add tooltips to library manager dialogs.
Fixes: lp:1804930
* https://bugs.launchpad.net/kicad/+bug/1804930
2018-11-24 15:06:21 +00:00
Jeff Young b2db49f4ac Add browse buttons to Library Manager dialogs.
Fixes: lp:1804924
* https://bugs.launchpad.net/kicad/+bug/1804924
2018-11-24 15:06:21 +00:00
jean-pierre charras 0e705cd338 Fix a minor issue in Legacy mode: DCodes were displayed regardless the visibility of the layers. 2018-11-24 10:14:33 +01:00
jean-pierre charras 0b890b4d1d Drill files generation: add 3 structured comments in NC (Excellon) drill files and remove duplicate code. 2018-11-24 08:51:58 +01:00
Seth Hillbrand 106eaaade6 HTML_REPORT: RPT_ALL as sum of individual options
This syncs the "All" checkbox with the state of the report options such
that selecting "All" automatically selects the other boxes and
deselecting a box results in the "All" box also being unselected.  This
allows a single click filtering of report messages.

Fixes: lp:1796992
* https://bugs.launchpad.net/kicad/+bug/1796992
2018-11-23 20:31:27 -08:00
Seth Hillbrand 327942affb GAL: Fallback to CAIRO on OpenGL error
When the error switching to OpenGL is triggered by the requested switch,
we want to fallback to the cairo GAL renderer instead of the
GAL_TYPE_NONE, which defaults to legacy.

Fixes: lp:1799017
* https://bugs.launchpad.net/kicad/+bug/1799017
2018-11-23 19:52:07 -08:00
Jeff Young 647fa6547d Update grid drop-down when changing user grid. 2018-11-23 23:33:02 +00:00
Jeff Young f05b756ccf Fix copy/paste typo. 2018-11-23 19:46:41 +00:00
Seth Hillbrand 9955d0beb2 MSW Ratsnest: Force marking ratsnest dirty
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)
2018-11-23 11:45:29 -08:00
Maciej Suminski 056114a15d Fix an outburst of error messages in UNIT_BINDER
Fixes: lp:1804834
* https://bugs.launchpad.net/kicad/+bug/1804834
2018-11-23 16:00:24 +01:00
jean-pierre charras 149c4b55a6 DIALOG_TRACK_VIA_PROPERTIES_BASE: fix a minor wxWidgets alert. 2018-11-23 15:46:54 +01:00
jean-pierre charras db7deff21b DIALOG_SPICE_MODEL_BASE: fix minor wxWidgets alerts. 2018-11-23 10:21:57 +01:00
jean-pierre charras 37f062d325 Make Ctrl+'A' to Ctrl+'Z' working again (Issue specific to Windows and Linux)
Fixes: lp:1804326
https://bugs.launchpad.net/kicad/+bug/1804326
2018-11-23 09:04:21 +01:00
Jeff Young ed6c68a1e3 Clean up handling of component fields.
In particular the datasheet field and how its handled with aliases,
but also cleaning up duplicated functionality around aliases and
libids.
2018-11-22 21:31:45 +00:00
Seth Hillbrand 36a69a7d5d clipboard: re-add limited LOCALE_IO to SaveSelection
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.
2018-11-22 08:17:09 -08:00
jean-pierre charras d03e82602e PANEL_COMMON_SETTINGS: minor fixes, mainly cosmetic. 2018-11-22 17:11:49 +01:00
Jeff Young 82f657ed03 Replace some accidentally deleted code.
Fixes: lp:1804526
* https://bugs.launchpad.net/kicad/+bug/1804526
2018-11-22 01:10:18 +00:00
Seth Hillbrand 964d6ebc06 pcbnew: Set clipboard locale to avoid Klipper crash
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
2018-11-21 12:01:21 -08:00
nats 6e77176d76 Adding fillet option for the QFN Wizard
Fixes lp:1775961

https://bugs.launchpad.net/kicad/+bug/1775961
2018-11-21 15:00:39 -05:00
Jeff Young 023a445e9f Make sure original part record always has the write library nickname.
Fixes: lp:1804293
* https://bugs.launchpad.net/kicad/+bug/1804293
2018-11-21 19:51:04 +00:00
Jeff Young f934ce653f A bit of safety to prevent dereferencing NULL. 2018-11-21 19:51:04 +00:00
Jeff Young 5a74b55074 Reset delayedFocusPage even if it's already the right page.
Fixes: lp:1804315
* https://bugs.launchpad.net/kicad/+bug/1804315
2018-11-21 19:51:04 +00:00
Seth Hillbrand ad9916a93d ratsnest: Fix state issue switching in local tool
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)
2018-11-20 20:49:18 -08:00
Jeff Young ae6989f3a1 Don't trim entire wires.
Fixes: lp:1804297
* https://bugs.launchpad.net/kicad/+bug/1804297
2018-11-20 21:44:35 +00:00
Jeff Young ed27027ab1 Escape/unescape footprint descriptions and keywords when writing/reading cache file.
Fixes: lp:1803989
* https://bugs.launchpad.net/kicad/+bug/1803989
2018-11-20 21:44:04 +00:00
Jeff Young d6ac303a8c Don't dereference NULL when checking current part. 2018-11-20 20:21:29 +00:00
Jeff Young a958b23a11 Remove assert which fires incorrectly when emptying screen. 2018-11-20 20:21:29 +00:00
Jeff Young 9145d6a0a3 Put library name in confirmation dialog when reverting library. 2018-11-20 20:21:29 +00:00
Maciej Suminski 630baa3724 Code formatting 2018-11-20 17:54:10 +01:00
Maciej Suminski d405be95b8 Fix a symbol editor crash when clicking without any symbol loaded 2018-11-20 17:52:58 +01:00
jean-pierre charras ab3ff61faa Eeschema: adjust the working/drawing area size on the page size.
This makes using Scrollbars more easy to use, especially for "small" page sizes like A or B.
Note also the working/drawing area size is bigger than the page size (3 times)
2018-11-20 15:11:22 +01:00
jean-pierre charras 73b52f2e23 Gerbview: fix incorrect initialization of WorldUnitLength.
Fix incorrect min zoom level to show D Code texts.
2018-11-20 10:27:59 +01:00
Jeff Young c016861962 Run some sanity checks on fp-info-cache files.
Fixes: lp:1803989
* https://bugs.launchpad.net/kicad/+bug/1803989
2018-11-19 21:06:25 +00:00
Jeff Young 984d3f04ab Update dangling ends after importing schematic content.
Fixes: lp:1803996
* https://bugs.launchpad.net/kicad/+bug/1803996
2018-11-19 20:47:31 +00:00
Jeff Young 18dc618a13 Set color before drawing dangling symbols.
Fixes: lp:1804003
* https://bugs.launchpad.net/kicad/+bug/1804003
2018-11-19 20:29:48 +00:00
Jeff Young e715835c29 Copy dangling flag when cloning.
Fixes: lp:1804005
* https://bugs.launchpad.net/kicad/+bug/1804005
2018-11-19 19:07:40 +00:00
jean-pierre charras 8522baf4a7 bom_plugins.cpp: fix incorrect command line for python scripts on Windows.
* On Windows, a python command line must be python <script_path>/script.py
and not python <script_path>\script.py
* Fix also a incorrect warning message when a script is not found.
2018-11-19 17:50:38 +01:00
Jeff Young 5bb5aea936 Don't leave a selection with a deleted item in it.
Fixes: lp:1803730
* https://bugs.launchpad.net/kicad/+bug/1803730
2018-11-19 16:03:30 +00:00
Jeff Young f71998b34e Remove repetitive calls to other cancel operations. 2018-11-19 16:03:30 +00:00
Jeff Young 5b9458f4c2 Don't delegate context menu to Selection Tool.
Our superclass can handle it more correctly (including the Cancel
item at the top).
2018-11-19 16:03:30 +00:00
Jeff Young bd85421daa Don't map low-order keyCodes unless they really are Ctrl-Letter codes.
Fixes: lp:1803730
* https://bugs.launchpad.net/kicad/+bug/1803730
2018-11-19 16:03:30 +00:00
Maciej Suminski 2ee2d9014a Populate BOM plugins list if the list is empty
Fixes: lp:1464893
* https://bugs.launchpad.net/kicad/+bug/1464893
2018-11-19 16:17:53 +01:00
Maciej Suminski 15772e4b0b BOM plugins refactor
Extended BOM_PLUGIN to a class and moved the plugin construction related code there.
2018-11-19 15:59:08 +01:00
jean-pierre charras 240051fb26 Worksheet display in GAL mode: fix missing filename and (in Eeschema) sheet full name. 2018-11-19 10:21:28 +01:00
Seth Hillbrand eb689a5221 Ratsnest: Improve show heuristics
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)
2018-11-18 20:03:46 -08:00
jean-pierre charras c539d6e0be fix incorrect initialization of VIEW::m_boundary.
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.
2018-11-18 20:04:17 +01:00
jean-pierre charras 65a967dca1 Fix minor I10n issues. 2018-11-18 14:40:36 +01:00
jean-pierre charras 2fdf13ab79 Fix minor compil warnings. 2018-11-18 10:12:34 +01:00
jean-pierre charras 0ef7aeb274 Fix incorrect behavior when collection footprint items in collectors.cpp.
It was a bug in commit 208622699.

Fixes: lp:1803803
https://bugs.launchpad.net/kicad/+bug/1803803
2018-11-18 10:08:12 +01:00
Jeff Young 208622699f Scale zone hit area by zoom.
Fixes: lp:1803362
* https://bugs.launchpad.net/kicad/+bug/1803362
2018-11-17 00:35:07 +00:00
Jeff Young 0de9cb345c Add shortcuts to setting dialogs for track widths, via sizes and grid sizes.
Fixes: lp:1803671
* https://bugs.launchpad.net/kicad/+bug/1803671
2018-11-17 00:35:06 +00:00
Jeff Young 3c6adbdf03 Indent layer properties for better comprehension. 2018-11-17 00:35:06 +00:00
jean-pierre charras f90ca7408d Legacy canvas: fix missing code to draw block outline.
Due to recent changes in legacy canvas code, when starting a block command,
the block outline was not drawn in pcbnew and pl_editor during block definition.

Fixes: lp:1803668
https://bugs.launchpad.net/kicad/+bug/1803668
2018-11-16 21:03:04 +01:00
Seth Hillbrand 940353afde GRID_HELPER: Keep edited items out of snap
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
2018-11-16 10:05:31 -08:00
jean-pierre charras b35b1bb644 Fix a few minor I18n issues.
Especially remove trailing and leading spaces in sentences, always annoying in translations, and never useful in sources.
2018-11-16 18:12:01 +01:00
Maciej Suminski e3bcd31bff Added a dialog to confirm discarding unsaved changes in Pin Table dialog. 2018-11-16 16:10:53 +01:00
Maciej Suminski de1a8abd3e Fix a crash after accepting changes from Pin Table dialog
Pin Table dialog replaces LIB_ITEMs, while one of them may still
be pointed to as the current library item. Certain wxUpdateUIEvent
will try to dereference the pointer, leading to a crash.
2018-11-16 14:13:28 +01:00
Jeff Young 4050991d28 Move ERC marker focusing to GAL architecture.
Fixes: lp:1802537
* https://bugs.launchpad.net/kicad/+bug/1802537
2018-11-16 10:38:44 +00:00
Maciej Suminski 228ea64016 Fix printout page orientation on GTK3
Fixes: lp:1803540
* https://bugs.launchpad.net/kicad/+bug/1803540
2018-11-16 09:52:40 +01:00
jean-pierre charras 8c8ccf83e6 Fix a few I18n minor issues. 2018-11-16 09:43:40 +01:00
jean-pierre charras acf696ca2d Eeschema, worksheet view: fix missing initialisation of sheet count and sheet number
Fixes: lp:1803637
https://bugs.launchpad.net/kicad/+bug/1803637
2018-11-16 09:36:10 +01:00
jean-pierre charras ffe4b745dd Opengl gal: Fix bug: segments with 0 length are not drawn. However the are equivalent to circles.
Using 0 length segments happen with oval pads having the same X and Y size, and in some other cases.

Fixes: lp:1801923
https://bugs.launchpad.net/kicad/+bug/1801923
2018-11-15 13:10:42 +01:00
jean-pierre charras 1f3d5cee0e Fix a few minor I18n issues. 2018-11-15 09:34:29 +01:00
Jeff Young bcc8c64256 Consider edge cuts items to have zero width when filling zones.
Fixes: lp:1797787
* https://bugs.launchpad.net/kicad/+bug/1797787
2018-11-14 23:45:32 +00:00
Jeff Young d65bb73d4e Finish up remaining block operation inconsistencies.
In particular, don't move block back to start when duplicating,
and don't move crosshair back to start when doing a cut, copy, or
paste.

Also fixes undo for libEdit block duplicate.

Fixes: lp:1740138
* https://bugs.launchpad.net/kicad/+bug/1740138
2018-11-14 23:45:32 +00:00
Mario Luzeiro 350a6052c0 Fixes 3D Viewer: Raytracing line artifact, lp:1680530 2018-11-14 09:46:03 -05:00
Jeff Young 02a559678a Improve terminology of track selection commands.
There was confusion that "copper" and "net" meant zones, and there
was confusion about what "trivial" meant.

Fixes: lp:1772251
* https://bugs.launchpad.net/kicad/+bug/1772251
2018-11-13 21:29:35 +00:00
Jeff Young ac2e400598 Re-instate schematic-scope to dangling ends.
Fixes: lp:1803117
* https://bugs.launchpad.net/kicad/+bug/1803117
2018-11-13 21:03:18 +00:00
Jeff Young a60066115b Move no-connect symbols closer to the front for rendering.
Fixes: lp:1803124
* https://bugs.launchpad.net/kicad/+bug/1803124
2018-11-13 21:03:18 +00:00
John Beard e52688586a Don't use memset to initialise aggregate of floats.
In C3D_RENDER_OGL_LEGACY::setupMaterial(), the struct
m_materials (which is made up of floats and glm::vec3f's)
is initialised with a memset to 0. This is unsafe, as
floating point value representations in C++ are implementation-
defined (so 0 in memory is not 0-valued for sure).

Use empty-brace aggregate-initialisation, which does the right thing.
2018-11-13 13:37:59 -05:00
John Beard c5a2ea1dd8 .gitignore: demo fp-info-cache files
As cache files, these are not required to be checked-in
and generate more noise on file changes.
2018-11-13 17:23:40 +00:00
Jeff Young 8725511c3c OSX fix to bring launched apps to the front.
Fixes: lp:1154859
* https://bugs.launchpad.net/kicad/+bug/1154859
2018-11-13 17:13:03 +00:00
Maciej Suminski 361b768aaf Fix frozen cursor on interactive DXF placement 2018-11-13 14:58:54 +01:00
Maciej Suminski 298a033b9d Fixed a crash on moving down the last field in the Symbol Properties dialog 2018-11-13 14:14:08 +01:00
Maciej Suminski 44424dcbb3 Fixed a crash in Symbol Properties dialog
Fixes: lp:1802641
* https://bugs.launchpad.net/kicad/+bug/1802641
2018-11-13 14:02:16 +01:00
jean-pierre charras 436f80a0bb eeschema/dialogs/dialog_lib_edit_pin_base.cpp: fix a minor wxWidgets alert 2018-11-13 13:03:38 +01:00
Maciej Suminski 3fd2968318 Explained AF_ACTIVATE flag in the documentation 2018-11-13 09:36:26 +01:00
Jeff Young 86273e86b9 Added user and grid origins to Position Relative dialog.
Also fixed a refresh bug when doing Position Relative.

Fixes: lp:1792699
* https://bugs.launchpad.net/kicad/+bug/1792699
2018-11-12 23:09:45 +00:00
Jeff Young 4a9d538608 Fix typo when warping cursor (coords are world-coords).
Fixes: lp:1802811
* https://bugs.launchpad.net/kicad/+bug/1802811
2018-11-12 22:09:31 +00:00
Jeff Young 6d76097291 When running selectable() recursively, we're really only checking visibility.
Fixes: lp:1802949
* https://bugs.launchpad.net/kicad/+bug/1802949
2018-11-12 21:59:43 +00:00
jean-pierre charras 0a71212929 Fix a few minor issues in SYMBOL_PREVIEW_WIDGET.
Fixes: lp:1802808
https://bugs.launchpad.net/kicad/+bug/1802808
2018-11-12 20:40:41 +01:00
Jeff Young fdff010199 Fix copy/paste errors in delayedFocusRow stuff.
Fixes: lp:1802907
* https://bugs.launchpad.net/kicad/+bug/1802907
2018-11-12 17:08:45 +00:00
Seth Hillbrand c15c64e991 GRID_HELPER: Don't snap to sub elements being moved
Fixes: lp:1802795
* https://bugs.launchpad.net/kicad/+bug/1802795
2018-11-12 06:53:33 -08:00
Jeff Young 62e2fe8bbd Recurse for more detailed selectability tests.
Fixes: lp:1801709
* https://bugs.launchpad.net/kicad/+bug/1801709
2018-11-11 20:26:19 +00:00
Jeff Young befc504734 Warp cursor back to creation point after new-text dailog.
Also fixes same issue for new zones.

Fixes: lp:1802532
* https://bugs.launchpad.net/kicad/+bug/1802532
2018-11-11 20:26:19 +00:00
Jeff Young 6789103961 Save internal values rather than textbox content.
Fixes: lp:1802442
* https://bugs.launchpad.net/kicad/+bug/1802442
2018-11-11 20:26:19 +00:00
Jeff Young 295013e4a9 Clarify fp reference filter and add fp id filter.
Fixes: lp:
* https://bugs.launchpad.net/kicad/+bug/
2018-11-11 20:26:19 +00:00
Seth Hillbrand c24f70ba1e GRID_HELPER: Filter targets based on dragging
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
2018-11-11 11:30:36 -08:00
Seth Hillbrand cf20b39ddc GRID HELPER: Consider all snappable items
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
2018-11-11 11:30:36 -08:00
jean-pierre charras fcafe5362f NC drill (Excellon) exporter: remove useless M71 / M72 lines.
They are probably incorrect in V2 format, and the format is already specified.
2018-11-11 19:57:16 +01:00
jean-pierre charras 0d3637c2ee Fix a few minor I18n issues.
Avoid translation of debug messages.
2018-11-11 10:46:26 +01:00
jean-pierre charras 7783290161 Add a tooltip 2018-11-11 08:29:13 +01:00
jean-pierre charras f7cf40f2f4 Fix a few Coverity warnings.
Sometimes a dynamic_cast was used without testing the returned value.
Some are replaced by static_cast, when the dynamic_cast was useless.
2018-11-11 08:28:58 +01:00
jean-pierre charras acfa13c038 Fix typo 2018-11-09 15:46:09 +01:00
Seth Hillbrand 70e660dfe8 GRID_HELPER: Update target geometry when moving
Setting a previously visible item visible is a nop.  If the target was
visible, make sure to update the geometry

Fixes: lp:1802405
* https://bugs.launchpad.net/kicad/+bug/1802405
2018-11-09 06:12:31 -08:00
Wayne Stambaugh f1f4473d8b Footprint editor: add save view to PNG file.
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
2018-11-09 08:32:36 -05:00
Jeff Young 6860320b1b Init LibEdit with unit & conversion when opening from schematic. 2018-11-08 21:27:15 +00:00
Jeff Young 3de04e184b Convert pasted objects to current unit and DeMorgan variant.
Fixes: lp:1797183
* https://bugs.launchpad.net/kicad/+bug/1797183
2018-11-08 21:27:15 +00:00
Jeff Young 5c726744b6 Move Zone Properties dialog to Connect() strategy.
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
2018-11-08 21:27:15 +00:00
John Beard 4c355c32d3 Fix rounding in COLOR4D::ToColour
Due to the implicit floor of the cast from double to unsigned char,
there was a small rounding error in COLOUR4D's WX conversion function.

This fixes the failing tests.

Also make the cast to unsigned char explicit.
2018-11-08 14:40:42 -05:00
John Beard ee819216e2 QA: Make a separate unit test utils library, COLOR4D tests
This includes:

* Linkage against the Boost unit test libs
* Configuration of the Boost libs
* A place for common generics "extras" for unit test harnesses
  including
    * A simple way to allow "expected-failure" tests (without
      breaking Boost < 1.58, e.g. Ubuntu LTS)
    * Moving some simple numeric predicates from the geom tests
      to the utils library.

Expand unit test docs to describe the expected failures macro.

Add a few COLOR4D tests, including one with expected failures due
to a pre-existing bug. This will be fixed in a follow-up commit.
2018-11-08 14:40:42 -05:00
jean-pierre charras 0980f7232c Gerbview: minor fixes. 2018-11-08 16:49:50 +01:00
John Beard 5660ad86ea QA: Add TITLE_BLOCK tests
Add some unit tests on TITLE_BLOCK

This commit also requires some mocks so the libcommon stuff
can work:

* Needs a Kiface() function to be linkable
* Needs some stuff from common to be build specially
* Needs to define itself as one of the unit-having programs
  to appease the units defines.
2018-11-08 08:28:20 -05:00
John Beard 075f428aca Include directories are implied by legacy_gal linkage
This avoids having to manually specify include/legacy_gal
in and legacy GAL targets, and harominizes with legacy_wx.

This also means .cpp files in common/legacy_gal do not
need to specify the legacy_gal subdirectory, so they
will continue to work as needed when legacy_wx is removed.
2018-11-08 07:52:36 -05:00
Maciej Suminski 02f81d7419 Handle 'show page limits' in eeschema 2018-11-08 09:57:16 +01:00
Seth Hillbrand 4b931aeb57 pcbnew: Force cursor position when snapping
This places the crosshairs (confusingly named here) at the snap
position, either one of the snap points or the grid, depending on the
status of the hotkeys SHIFT/ALT.

Fixes: lp:1801373
* https://bugs.launchpad.net/kicad/+bug/1801373

Fixes: lp:1801369
* https://bugs.launchpad.net/kicad/+bug/1801369
2018-11-07 14:36:46 -08:00
Seth Hillbrand f2ccad39b6 pcbnew: Fix grid snapping for picker
Fixes: lp:1801373
* https://bugs.launchpad.net/kicad/+bug/1801373
2018-11-07 09:03:26 -08:00
Jeff Young cbd13c7127 Show dangling pins when moving items; don't when dragging.
Fixes: lp:1801962
* https://bugs.launchpad.net/kicad/+bug/1801962

Fixes: lp:1801959
* https://bugs.launchpad.net/kicad/+bug/1801959
2018-11-07 14:24:16 +00:00
Jeff Young 5c26b1dabd Don't use C-style cast when we don't actually know what it is. 2018-11-07 14:24:16 +00:00
Jeff Young 3439551543 Implement a work-around for net-ties.
Fixes: lp:1799318
* https://bugs.launchpad.net/kicad/+bug/1799318
2018-11-07 14:24:16 +00:00
Maciej Suminski 3e8b3e535a Added a comment for close event handlers in DIALOG_PRINT_GENERIC 2018-11-07 09:31:40 +01:00
qu1ck e789542ba4 Fix warning in dialog_print_generic.cpp 2018-11-07 09:26:47 +01:00
Seth Hillbrand 1f25fcd3d6 pcbnew: Shift zone filler to std::async 2018-11-06 09:28:12 -08:00
Seth Hillbrand a24bd9baa1 pcbnew: Adjust default update rate to 100ms
10ms was too fast to update the progress reporter and actually slowed
the process down for many machines.
2018-11-06 09:28:12 -08:00
jean-pierre charras 7c77b92cd8 remove fully outdated (and now incorrect) scripts. 2018-11-06 18:16:59 +01:00
jean-pierre charras 95bc4f74c5 Windows compil option: always define UNICODE and_UNICODE needed by Kicad that uses unicode. 2018-11-06 18:15:52 +01:00
Maciej Suminski d6bc402f14 Fix instantly disappearing pop-up menu in eeschema
Fixes: lp:1798453
* https://bugs.launchpad.net/kicad/+bug/1798453
2018-11-06 17:21:13 +01:00
Maciej Suminski 8091573bf7 Fix disappearing schematic components
SCH_COMPONENTs should be added to VIEW only when symbol links are
resolved. Otherwise a dummy component bounding box will be used when
inserting a component to VIEW R-tree.

Fixes: lp:1801800
* https://bugs.launchpad.net/kicad/+bug/1801800
2018-11-06 11:25:47 +01:00
jean-pierre charras 238abad004 Gerber job file: fix incorrect GUID.
Fixes: lp:1801696
https://bugs.launchpad.net/kicad/+bug/1801696
2018-11-06 08:16:07 +01:00
John Beard bec2920f12 QA: qa_utils has to be static
If qa_utils is not explicitly declared with STATIC, the build
fails in environments where the BUILD_SHARED_LIBS CMake option is
present and set to "ON". An example of this is Fedora COPR.
2018-11-05 14:27:17 -05:00
Maciej Suminski 4ad37bc9ea Limit 'items on disabled layers' DRC check to copper layers
Fixes: lp:1788248
* https://bugs.launchpad.net/kicad/+bug/1788248
2018-11-05 14:00:49 +01:00
Maciej Suminski 293bc52299 Fix off-grid block paste
Fixes: lp:1801625
* https://bugs.launchpad.net/kicad/+bug/1801625
2018-11-05 11:59:38 +01:00
jean-pierre charras 830c5e7db7 3D viewer: ensure 0 sized circles (that crash the viewer) are skipped. 2018-11-05 08:30:54 +01:00
Jeff Young 6e9475694c Fix bug with zone selection when zones are shown filled. 2018-11-04 19:17:53 +00:00
Jeff Young fec8ab372e Don't set the viewport when switching screens.
That's the job of ZoomAutomatique().

Fixes: lp:1799436
* https://bugs.launchpad.net/kicad/+bug/1799436
2018-11-04 19:17:53 +00:00
Seth Hillbrand df562b7ec0 pcbnew: Prevent degenerate values in Eagle import
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
2018-11-04 11:01:08 -08:00
jean-pierre charras 93d3e4ccf8 dialog_footprint_wizard_list_base.cpp: fix a minor wxWidgets alert. 2018-11-04 15:50:29 +01:00
Jeff Young 589e1f6a96 MSW and GTK need a separate dialog for opening/saving directories.
Fixes: lp:1801528
* https://bugs.launchpad.net/kicad/+bug/1801528
2018-11-04 12:35:01 +00:00
Jeff Young 68b07d1aff Add show/hide search tree to modedit, and fix it in libedit.
Fixes: lp:1801531
* https://bugs.launchpad.net/kicad/+bug/1801531
2018-11-04 12:35:01 +00:00
Jeff Young 6e810a00e4 Warp mouse from context menu before dragging.
Fixes: lp:1798815
* https://bugs.launchpad.net/kicad/+bug/1798815
2018-11-04 12:35:01 +00:00
Jeff Young 3bfd32cdc5 Inherit grid settings from PCBNew.
Fixes: lp:1801428
* https://bugs.launchpad.net/kicad/+bug/1801428
2018-11-04 12:35:01 +00:00
Nick Østergaard 8c1ebc4314 Remove shebang from footprint wizard plugin
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.
2018-11-04 08:43:20 +01:00
Maciej Suminski 75896d767a Fix a crash in BOARD::SortedNetnamesList()
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().
2018-11-03 18:17:48 +01:00
jean-pierre charras 15fa8f8a22 Minor fixes. 2018-11-03 14:30:34 +01:00
Jeff Young 569d4a0f64 More selection logic improvements.
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.
2018-11-02 23:52:00 +00:00
Maciej Suminski dfccd8c5e4 Added level-of-details threshold for via net name layer 2018-11-03 00:48:03 +01:00
Maciej Suminski 8d73cfef2a Adjusted level-of-detail thresholds for BOARD_ITEMs visibility
Fixes: lp:1801056
* https://bugs.launchpad.net/kicad/+bug/1801056
2018-11-03 00:34:27 +01:00
Jeff Young 69952a7b9f Improve updating of symbol and footprint trees.
In particular, update highlighting when changing footprints.
2018-11-02 19:55:30 +00:00
Jeff Young d7ff3f8af5 Allow text on margin layer. 2018-11-02 19:55:30 +00:00
jean-pierre charras be0935b339 Eeschema: Update zoom/scale limits, due to recent change in GAL.
Fixes: lp:1797995
https://bugs.launchpad.net/kicad/+bug/1797995
2018-11-02 14:36:12 +01:00
jean-pierre charras 54fe060b5a add tool to open system file browser to main toolbar 2018-11-02 13:51:13 +01:00
jean-pierre charras d3dc56a42f pl_editor: cosmetic enhancements 2018-11-02 13:47:48 +01:00
jean-pierre charras d465af65a7 LIB_FIELD: fix incorrect text thickness for small sized texts.
Also remove duplicate code.
2018-11-02 11:36:07 +01:00
Maciej Suminski b7b9cccffc Moved wxPython/Phoenix detection to a separate CMake module 2018-11-02 11:28:30 +01:00
Maciej Suminski 23e574fbcd Remove a redundant semicolon in Python path configuration command 2018-11-02 10:40:05 +01:00
Maciej Suminski 1c19a50f31 Add license header to Findngspice.cmake 2018-11-02 09:42:08 +01:00
Maciej Suminski 179c46ce49 Handle another type of wxPython/Phoenix version string
Fixes: lp:1801109
* https://bugs.launchpad.net/kicad/+bug/1801109
2018-11-02 09:42:08 +01:00
jean-pierre charras 5e44686711 Eeschema, symbol editor: re-enable PNG export and fix a minor issue in SVG export (was in B&W mode instead of color).
Add a comment in plotter.h to avoid other errors when selecting plotting mode B&W or color

Fixes: lp:1801058
https://bugs.launchpad.net/kicad/+bug/1801058
2018-11-02 09:24:55 +01:00
jean-pierre charras a55950bd68 DIALOG_COLOR_PICKER_BASE: fix a minor wxWidgets alert. 2018-11-01 16:51:14 +01:00
Seth Hillbrand 672e98bd89 Phoenix: Fix wxwidget version
Phoenix reports version 4.x but wxWidgets do not follow this version.
Phoenix also does not have or require the wxPython.h file.

Fixes: lp:1801109
* https://bugs.launchpad.net/kicad/+bug/1801109
2018-11-01 08:49:51 -07:00
jean-pierre charras ad99983672 Windows build: link gdiplus library on all Windows targets, not only mingw. 2018-11-01 16:03:21 +01:00
jean-pierre charras 601e0a31b5 Open project folder in host OS: refinements.
Remove 2 png files that should not be is trunk.
2018-11-01 15:11:29 +01:00
Ashutosh Gangwar efe6b04ca2 kicad: Open project folder in host OS
NEW: Adds support to browse project directory in default file manager in the host OS
CHANGED: Main frame's Browse menu now contains third option to Browse Project Files

Fixes: lp:1584977
https://bugs.launchpad.net/kicad/+bug/1584977
2018-11-01 09:11:42 +01:00
jean-pierre charras 8be3471ba2 Windows specific: define GDI_PLUS_LIBRARIES even if USE_WX_GRAPHICS_CONTEXT is not used.
Because the cairo printing system uses gdiplus library, GDI_PLUS_LIBRARIES must be always defined
2018-11-01 08:38:23 +01:00
John Beard bf42247971 Eeschema: fix potential crash when closing Kicad app.
The crash happens when a wxPaint event is fired after deleting the schematic frame.
It happened only on one Linux install.

Fixes: lp:1800874
* https://bugs.launchpad.net/kicad/+bug/1800874
2018-11-01 08:27:19 +01:00
Maciej Suminski 08814b0512 Small layout adjustments in DIALOG_PRINT_GENERIC 2018-10-31 19:17:30 +01:00
Maciej Suminski ca1687d7ce Fixed disabling the block title for footprint editor printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski afda69c9cc Removed default line width setting from the printing dialog 2018-10-31 19:17:30 +01:00
Maciej Suminski 38f94483f4 Warn the user about wxWidgets/Python toolkit mismatch instead of overriding the setting 2018-10-31 19:17:30 +01:00
Maciej Suminski 948f28ebcc Enforce the same toolkit version for wxWidgets and wxPython libraries
Fixes: lp:1747677
* https://bugs.launchpad.net/kicad/+bug/1747677

Fixes: lp:1783634
* https://bugs.launchpad.net/kicad/+bug/1783634
2018-10-31 19:17:30 +01:00
Maciej Suminski cbf7d708b2 pcbnew: Draw title block normally even when the view is flipped 2018-10-31 19:17:30 +01:00
Maciej Suminski 6602e17edc Add copyright header to sch_view.h 2018-10-31 19:17:30 +01:00
Maciej Suminski a18be5d37c Adjust GAL world unit for eeschema 2018-10-31 19:17:30 +01:00
Maciej Suminski 64da77538f Fix bitmap scale in printouts
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.
2018-10-31 19:17:30 +01:00
Maciej Suminski 7ab8171422 Disabled translucency in printouts as it is not supported by cairo 2018-10-31 19:17:30 +01:00
Maciej Suminski 262a105416 Disable zone outlines and hatched lines rendering in printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski 42c5fc0ef8 Link GDI+ library when building libgal 2018-10-31 19:17:30 +01:00
Maciej Suminski 3d15092643 Fixed loading layer visibility setting for printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski 90b6156448 Store line width setting for printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski b727b310b4 Fix 'fit to page' for print outs 2018-10-31 19:17:30 +01:00
Maciej Suminski d3ea63e133 Removed a redundant parameter from BOARD_PRINTOUT constructor 2018-10-31 19:17:30 +01:00
Maciej Suminski ff0909c90c Fully initialize PCB_RENDER_SETTINGS::m_sketchMode 2018-10-31 19:17:30 +01:00
Maciej Suminski dea778842b Grand printing dialogs refactor
Patch introduces a generic printing settings window that is customized by pcbnew and gerbview.
2018-10-31 19:17:30 +01:00
Maciej Suminski e81c3a59a2 Refactored and unified board editor and footprint editor print dialogs 2018-10-31 19:17:30 +01:00
Maciej Suminski 562b8d7948 Printing code clean-up 2018-10-31 19:17:30 +01:00
Maciej Suminski 92c5cb288e Fixed scale in Gerbview printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski 8cb464b725 Handle drill mark options in pcbnew printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski 3e5ee254cf Fix for 'fit to page' scaled printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski 698a380827 Clear selection before printing
Selected objects are hidden in VIEW, that makes them disappear from
printouts.
2018-10-31 19:17:30 +01:00
Maciej Suminski 347e21daaa Handle printout settings: line width, color/mono, mirror 2018-10-31 19:17:30 +01:00
Maciej Suminski 47d0eaa2c6 GAL: changed line width setting to float type 2018-10-31 19:17:30 +01:00
Maciej Suminski 59f77e68c9 Removed unused pcbnew printing code 2018-10-31 19:17:30 +01:00
Maciej Suminski 1cce194c8a Handle layer settings in printouts 2018-10-31 19:17:30 +01:00
Maciej Suminski 5b94f20e6f Adapted printout controllers to the new printing routines 2018-10-31 19:17:30 +01:00
Maciej Suminski 6c689305a6 Decouple GAL printing interface and its Cairo-based implementation 2018-10-31 19:17:30 +01:00
Maciej Suminski e36f6b476d Changed the CAIRO_GAL class hierarchy
There is a dedicated class for display (CAIRO_GAL) and another one
for printing. The common part has been moved to CAIRO_GAL_BASE.
2018-10-31 19:17:30 +01:00
Maciej Suminski 5a64343fb4 CAIRO_PRINT_CTX class
CAIRO_PRINT_CTX provides a Cairo context created from wxPrintDC.
It allows one to prepare printouts using the Cairo library and
let wxWidgets handle the rest.
2018-10-31 19:17:29 +01:00
Maciej Suminski f948e46330 VIEW: changed wxASSERTs to wxCHECKs 2018-10-31 19:17:29 +01:00
Maciej Suminski 17205b4599 Added VIEW::DataReference() for sharing data with another VIEW instance 2018-10-31 19:17:29 +01:00
Maciej Suminski 1411e1f73a GAL: added methods to modify rotation in the transformation matrix 2018-10-31 19:17:29 +01:00
John Beard b88121e377 Add an in-memory STREAM_LINE_READER benchmark
This adds an io-benchmark case of the STRING_LINE_READER
class, which reads a file into a std::string, *then*
reads it line by line.

As expected, due to it all being in memory, this is very fast.

Also fixes an issue in io_benchmark where the input file
must be in the current dir.
2018-10-31 12:22:47 -04:00
John Beard a1fad9d3fe Eeschema: allow dragging of text
Text doesn't have "special" handling of dragging, like connected items (it's
basically just a move).  However, allowing "drag" to work on text makes
handling text consistent when dragging other items.
2018-10-31 16:19:03 +00:00
jean-pierre charras 7985234556 Eeschema: Fix a subtle bug in SYMBOL_PREVIEW_WIDGET.
The dialog was using a LIB_ALIAS from library cache to show the symbol to the canvas without making a local copy.
Unfortunately, the library viewer is doing the same thing.

Now the GAL is used in Eeschema, a link to the VIEW used by the GAL canvas is stored in this class.
When The selector symbol dialog is used to choose a symbol to display in the Library viewer,
a race condition between the Library viewer GAL canvas and the dtor dialog that destroyed this link in the same instancied class.

Now, the SYMBOL_PREVIEW_WIDGET used in the dialog works on a local copy of the symbol to display.
2018-10-31 15:52:35 +01:00
Jeff Young c4cd81a906 Remove side-effect of LIB_FIELD::SetText().
Fixes: lp:1800545
* https://bugs.launchpad.net/kicad/+bug/1800545
2018-10-31 12:57:23 +00:00
Jeff Young 6888268f74 Timestamps are long rather than int.
Fixes: lp:1800796
* https://bugs.launchpad.net/kicad/+bug/1800796
2018-10-31 10:19:59 +00:00
Wayne Stambaugh 9519de8ab2 Check for wxPython.h when wxPython scripting is enabled.
Fixes lp:1785663

https://bugs.launchpad.net/kicad/+bug/1785663
2018-10-31 10:15:32 +01:00
Jeff Young de971df4c6 Don't put up error dialogs after a Cancel of a dialog.
Fixes: lp:1800711
* https://bugs.launchpad.net/kicad/+bug/1800711
2018-10-30 23:13:32 +00:00
Jeff Young f660ec7cf8 Eval when needed, but only replace text when killing focus.
Fixes: lp:1800718
* https://bugs.launchpad.net/kicad/+bug/1800718

Fixes: lp:1800476
* https://bugs.launchpad.net/kicad/+bug/1800476
2018-10-30 22:58:22 +00:00
jean-pierre charras 7b10490256 Library viewer: fix broken behavior of unit selector (could be Windows specific).
Remove a useless message in debug mode about LIB_ALIAS bounding box.
2018-10-30 17:51:12 +01:00
jean-pierre charras 49c94fb928 Eeschema, library viewer: fix a Kicad assert. 2018-10-30 15:58:08 +01:00
Jeff Young 4742c52250 Highlight symbol fields when selected. 2018-10-30 13:09:20 +00:00
Jeff Young 74118a2e9d Don't display all the footprint info when an edge is selected.
Fixes: lp:1800556
* https://bugs.launchpad.net/kicad/+bug/1800556
2018-10-30 11:33:49 +00:00
Jeff Young 364be90dc5 Fix translation issues with copy/paste block.
Also fix issues with paste not working at all from the context
menu in LibEdit.

Fixes: lp:1800513
* https://bugs.launchpad.net/kicad/+bug/1800513
2018-10-30 11:33:49 +00:00
Jeff Young 4030eec939 Implement proper dangling end handling for block moves.
(Most of this is actually fixing the IsDanglingStateChanged() to
correctly indicate that it *updates* the dangling state, not just
tests it.)
2018-10-30 11:33:49 +00:00
Maciej Suminski b445b0fab2 Link eeschema with ngspice DLL
Adds a link-time dependency for libngspice, so that other tools may
detect ngspice as a KiCad dependency.

The library is still loaded with dlopen() as it gives a way to reload it
in case of problems. The DLL name is recognized during CMake
configuration and used to load the library at runtime.
2018-10-30 08:32:38 +01:00
John Beard c6a971d971 Dev docs: Add TOC to testing markdown 2018-10-29 14:12:55 -04:00
John Beard e601b42207 Docs: printing and trace
Add a quick outline of some of the ways you can dump debug during
debugging. Also include a list of known trace mask strings.
2018-10-29 14:12:55 -04:00
jean-pierre charras 654dbbb44b Gerber UUID parameter calculation: refinements and more comments 2018-10-29 18:56:26 +01:00
jean-pierre charras c05ca469ae Pcbnew, DIALOG_PLOT_BASE: Fix a minor wxWidgets alert. 2018-10-29 17:34:14 +01:00
jean-pierre charras 03f3ff79a5 Pcbnew, Gerber output: fix incorrect UUID format in %TF.ProjectId attribute.
Fixes: lp:1800459
https://bugs.launchpad.net/kicad/+bug/1800459
2018-10-29 17:34:14 +01:00
John Beard 409e884ce6 Add git format commit hook
This adds a pre-commit hook to warn of any style errors.

Also adds a 'hook-chain' script to simplify future hooks.

Add dev-doc note about how to use the formatter.
2018-10-29 10:47:51 -04:00
jean-pierre charras eabae68ab8 PANEL_SETUP_LAYERS_BASE: cosmetic enhancements. 2018-10-29 15:21:03 +01:00
Jeff Young 4fc1f4db3e LIB_ITEMs won't have parent in LibEdit. 2018-10-28 17:45:11 +00:00
Jeff Young a8c7bb0c92 Move library text items to LAYER_DEVICE. Only sch text items belong on LAYER_NOTES.
Fixes: lp:1800350
* https://bugs.launchpad.net/kicad/+bug/1800350
2018-10-28 17:45:11 +00:00
Jeff Young a96ebe8fac Sort reference by their numeric content.
Fixes: lp:1464805
* https://bugs.launchpad.net/kicad/+bug/1464805
2018-10-28 17:45:11 +00:00
jean-pierre charras c49917c5a8 Dialog edit component in lib: Fix a few minor wxWidgets alerts. 2018-10-28 18:42:16 +01:00
jean-pierre charras 4b44cbe695 Kicad, Windows specific: disable a overzealous wxWidgets assert when reading a file.
When reading (and writing) a file, we must switch the current locale to "C" for LC_NUMERIC.
Unfortunately, on Windows, a wxWidgets assert was shown when reading some items (bitmaps images).
This wxWidgets assert (related to decimal separator) is overzealous and is now hidden only when reading/writing files.
2018-10-27 19:59:18 +02:00
jean-pierre charras 3dddca767e fix a minor wxWidgets alert. 2018-10-27 13:40:52 +02:00
Stefan Brüns d1db2c7621 Use fixed version for libngspice.so.0
CanonicalizeName only adds the lib prefix and .so suffix, so loading
libngspice.so fails until the development package is installed.
MAC/Windows code paths lookup soversion 0 of ngspice as well, as this
is the only compatible version.
2018-10-27 10:20:09 +02:00
Seth Hillbrand ed1c8eee9e async: Ensure threads are started async
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.
2018-10-26 22:30:06 -07:00
Seth Hillbrand 59fb6d8851 Threading: Moving connectivity search to std::async
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.
2018-10-26 18:00:43 -07:00
Jeff Young 4f11dc54fa Draw selected child items in brightened colors.
Fixes: lp:1800114
* https://bugs.launchpad.net/kicad/+bug/1800114
2018-10-26 23:02:05 +01:00
Jeff Young 16925cc74e Implement RAII locking for GAL updating.
Fixes a crash when typing fast in the place footprint filter box.

Also adds a bunch more checking to GAL locking, including making
sure the same person unlocks as locked, and preventing piece-meal
calls (the RAII objects must be used).
2018-10-26 23:02:05 +01:00
Jeff Young c4ff17d3ec Don't go to '-' numbering till the range reaches 3. 2018-10-26 23:02:05 +01:00
jean-pierre charras d953724365 Eeschema: fix bug: append schematic does not update canvas
Fixes: lp:1800144
https://bugs.launchpad.net/kicad/+bug/1800144
2018-10-26 16:42:14 +02:00
jean-pierre charras b075e76ede Eeschema: fix a draw issue when aborting a move symbol field or a sheet pin.
The initial drawings were not updated, making the moved item invisible on screen.

Fixes: lp:1800142
https://bugs.launchpad.net/kicad/+bug/1800142
2018-10-26 15:27:20 +02:00
Thomas Pointhuber 0e0b4d52a2 Add initial support for Phoenix (new wxPython binding)
Based on the work of @mmccoo:
https://kicad.mmccoo.com/2017/11/23/learnings-from-moving-kicad-to-wxpython-4-0/
and this additional patchset to remove wxpy_api.h dependency:
http://mmccoo.com/random/0001-Remove-dependence-on-pywx_api.h.patch

Please note CreatePythonShellWindow changed quite a lot. Throughful testing
should be made for the old as well as new wxPython version on all platforms
2018-10-26 13:21:11 +02:00
jean-pierre charras 633bc7f2d5 Pcbnew, DIALOG_TEXT_PROPERTIES_BASE: fix many minor wxASSERTs 2018-10-26 13:09:05 +02:00
Seth Hillbrand a3bbd32953 Fix minor compile warnings 2018-10-25 17:14:04 -07:00
Seth Hillbrand 2d8f1df293 Threading: Minimize thread usage
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.
2018-10-25 14:19:43 -07:00
jean-pierre charras 256f1a26e6 Fix a compil issue with gcc 4.8.4 compiler
On Ubuntu 14.04 the compiler does not like using const iterators instead of iterators.
2018-10-25 20:24:33 +02:00
jean-pierre charras 09831075a5 Update demo "video" to use V5 libraries 2018-10-25 17:14:47 +02:00
Wayne Stambaugh ce34a713b4 Eeschema, make BOM tool add file dialog remember last used path.
Fixes lp:1797679

https://bugs.launchpad.net/kicad/+bug/1797679
2018-10-25 10:33:19 -04:00
jean-pierre charras 3bf1dd7671 Eeschema, Hierarchical sheet: fix missing pen width call in draw function.
The hierarchical sheet was drawn (outline and texts) with a line thickness
that in fact the line thickness of the previously drawn item.
2018-10-25 15:12:34 +02:00
Seth Hillbrand 90233e5ec6 SELECTION: Prevent double select/deselect.
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.
2018-10-24 17:17:45 -07:00
Seth Hillbrand 1dd22f5035 SELECTION: Utilize sorted deque
Many operations on the selection involved getting an item by index or
dereference.  The std::set needed to iterate from the beginning of the
set to find the item in its red-black tree.  Using a deque that we keep
sorted, we get index access in O(1) and item search in O(lg N).
2018-10-24 16:32:34 -07:00
Jeff Young 1baa904034 Dangling symbol fixes.
No dangling symbol for text items with a NO-CONNECT.
DanglingStateChanged doesn't work with dangling flag aggregators
(which return true if any child is dangling).
Then again, we don't actually use any of the aggregators anyway
so I removed them.

Fixes: lp:1799589
* https://bugs.launchpad.net/kicad/+bug/1799589
2018-10-24 23:51:18 +01:00
Jeff Young 1f1bdc87bd Update GAL with wire dimensions before changing them. 2018-10-24 23:18:53 +01:00
Jeff Young 66a0f60b4c Refresh preview items when Rotate or Mirror during move.
It's not enough to just refresh the canvas because the items are
hidden on the main canvas and copies are placed into the preview
group.
2018-10-24 22:00:50 +01:00
Jeff Young 9624ef4f2e Don't blindly overwrite footprints when doing a Save As. 2018-10-24 22:00:50 +01:00
Jeff Young 244497f514 A board FP is no longer a board FP after a Save As. 2018-10-24 22:00:50 +01:00
Jeff Young 4524dce9bb Tie up some loose ends from JP's SHEET_PIN fixes.
Fixes: lp:1799606
* https://bugs.launchpad.net/kicad/+bug/1799606
2018-10-24 22:00:50 +01:00
Seth Hillbrand a0e4e23c14 Ratsnest: Keep connectivity data local
The dynamic ratsnest did not need to have a smart pointer to the
temporary connectivity data.
2018-10-24 13:43:09 -07:00
Wayne Stambaugh b9a9fe6c9e Eeschema, remove option to import schematic that has not been remapped.
When importing an existing schematic into a sheet that was no remapped
to use the symbol library table, the user was given the option to ignore
the warning and proceed with the import.  This would end up with all of
the imported symbol links being broke.  In hindsight, this was a bad
idea so now the user cannot import schematics that have been remapped.

Fixes lp:1791280

https://bugs.launchpad.net/kicad/+bug/1791280
2018-10-24 15:38:02 -04:00
Seth Hillbrand ec38a5cd10 Threading: Replacing sleep with yield for active wait
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.
2018-10-24 10:37:25 -07:00
Wayne Stambaugh 4db550353e Update appdata license fields to reflect the latest license changes. 2018-10-24 11:04:15 -04:00
jean-pierre charras dc21a60531 Fix incorrect management of SCH_SHEET_PIN items when adding or removing them.
Especially new SCH_SHEET_PIN items were added twice, thus creating crashes.

Fixes: lp:1799606
https://bugs.launchpad.net/kicad/+bug/1799606
2018-10-24 16:19:28 +02:00
Jeff Young 7d02c11880 Handle don't-always-display-cursor setting correctly.
Fixes: lp:1798448
* https://bugs.launchpad.net/kicad/+bug/1798448
2018-10-24 13:36:48 +01:00
Jeff Young c694c2e534 No more legacy graphics for eeschema. 2018-10-24 13:36:48 +01:00
Seth Hillbrand 2a5163b74c qa: Correct input string casting 2018-10-23 15:35:33 -07:00
Seth Hillbrand 40c70dd008 Prevent excess precision errors on 32-bit builds
The compile flag -ffloat-store requires floating point values to be
stored in memory rather than in registers to prevent errors when two
numbers are compared that were stored in different locations.
2018-10-23 15:27:58 -07:00
Jeff Young 4061f1cce3 Fix build issue on OSX. 2018-10-23 22:40:39 +01:00
Jeff Young 96e65c7f23 Hide existing object when displaying moving preview.
Fixes: lp:1799478
* https://bugs.launchpad.net/kicad/+bug/1799478
2018-10-23 20:54:42 +01:00
Jeff Young 0c06bdb1e0 Make sure aliases get their refs and values drawn correctly.
Fixes: lp:1799460
* https://bugs.launchpad.net/kicad/+bug/1799460
2018-10-23 20:54:42 +01:00
Jeff Young a96dbde738 Allow net-ties within footprints.
Fixes: lp:1799318
* https://bugs.launchpad.net/kicad/+bug/1799318
2018-10-23 20:54:42 +01:00
Jeff Young adfe2fc267 Make sure user isn't surprised by Match All setting.
If they selected the dialog with a footprint selected, they're
probably not expecting Match All.
2018-10-23 20:54:42 +01:00
Jeff Young 9f350820ad Add field umbilical lines to GAL renderer. 2018-10-23 20:54:42 +01:00
Jeff Young 1606329855 AdvanceDepth() strategy has been replaced with layer depths.
This is just a little bit of clean-up after-the-fact.
2018-10-23 20:54:42 +01:00
jean-pierre charras ce496ff993 libedit: refresh display after deleting graphic item. 2018-10-23 15:11:32 +02:00
Wayne Stambaugh e43e3a93c0 Revert "cmake: avoid declaring a redundant concurrent _pcbnew.so target"
This reverts commit 2e047b45b4.
2018-10-22 19:12:17 -04:00
Wayne Stambaugh c99874ca2f Revert "cmake: rearranged code in the KICAD_SCRIPTING_MODULES section in order to clarify the intent"
This reverts commit 71f17a698b.
2018-10-22 19:11:11 -04:00
Roman Beranek 71f17a698b cmake: rearranged code in the KICAD_SCRIPTING_MODULES section in order to clarify the intent 2018-10-22 13:59:08 -04:00
Roman Beranek 2e047b45b4 cmake: avoid declaring a redundant concurrent _pcbnew.so target
The "renamed _pcbnew.kiface" target should only be declared for MINGW
because for Linux it would have been already declared at line 802.
2018-10-22 13:59:08 -04:00
Michael Kavanagh 3248c270ee Update Eeschema BOM dialog html help text
Now links to relevant section in stable eeschema docs.

Fixes: lp:1798248
https://bugs.launchpad.net/kicad/+bug/1798248
2018-10-22 13:19:15 -04:00
John Beard acd103631b QA: PCB file input parse test program (fuzzable)
This adds a test program which can be used to test the
parsing of a given KiCad PCB file. This interface is
useful for both manual or automated debugging of given
files, as well as providing an interface suitable for
fuzz-testing tools.

Also adds to the testing docs to detail how fuzzing can
be used.

Also moves some useful re-usable code from io-benchmark
to a new library qa_utils, which can contain code that
isn't need in the actual KiCad libs.
2018-10-22 12:32:24 -04:00
Wayne Stambaugh 2a170c9847 Update license to AGPL due to TTL license.
The decision to include the TTL library make KiCad a derivative work
under the terms of the AGPL version 3 or later license.

Add both the GPL3 and AGPL3 license text files and add a readme file
about the KiCad licensing.  Contributing to KiCad still falls under
the GPL3+ license.

Fixes lp:1797095

https://bugs.launchpad.net/kicad/+bug/1797095
2018-10-22 12:28:48 -04:00
Maciej Suminski f1b2855e80 Fix ENV_VAR_NAME_VALIDATOR typing characters backwards
Fixes: lp:1798869
* https://bugs.launchpad.net/kicad/+bug/1798869
2018-10-22 15:07:44 +02:00
jean-pierre charras 7bba7a884a Libedit: refresh display after creating/moving a graphic item 2018-10-22 13:41:38 +02:00
Seth Hillbrand 44d416cafc Move cursor in increments off grid
When the cursor starts off grid, we avoid snapping to the nearest grid
point to prevent movement in an unintended direction.
2018-10-21 14:28:33 -07:00
Seth Hillbrand 3cc87b4597 PNS: Ensure we don't miss items
Higher candidate levels could override better matches if the layers did
not overlap.
2018-10-21 14:28:33 -07:00
jean-pierre charras f183b4f526 GAL, Opengl: Draw Arc: fix draw layer depth (previously, set to 0.0, which is not always the case) 2018-10-21 19:53:36 +02:00
jean-pierre charras 0f247264f8 Pcbnew: DRC ignores first net of list of nets to test.
Fixes: lp:1798985
https://bugs.launchpad.net/kicad/+bug/1798985
2018-10-21 17:01:58 +02:00
Jeff Young f17c18bcce Remove AdvanceDepth() hacks in favour of proper layers.
Also removes the bounding-box cache since the last big merge
should have sorted out the Update(GEOMETRY) calls.

Fixes: lp:1797271
* https://bugs.launchpad.net/kicad/+bug/1797271

Fixes: lp:1797268
* https://bugs.launchpad.net/kicad/+bug/1797268

Fixes: lp:1797075
* https://bugs.launchpad.net/kicad/+bug/1797075
2018-10-21 15:55:56 +01:00
jean-pierre charras 8ecdf58bad Eeschema, load a new bitmap image from file: fix crash when aborting.
Remove duplicate code in edit_bitmap.cpp.
2018-10-21 10:59:06 +02:00
jean-pierre charras dafeb96765 Page layout bitmap size wrong in modern/GAL canvases.
The image scale set by pl_editor was not taken in account when drawing the page layout.

Fixes: lp:1798685
https://bugs.launchpad.net/kicad/+bug/1798685
2018-10-20 18:24:22 +02:00
jean-pierre charras 7be215249d OPENGL_GAL: avoid crash when esotheric unicode chars are used in netnames/pad names in Debug mode.
It happens when the char is not found in the font used to display netnames/pad names.
When happens, a wxASSERT is raised.
Unfortunately it can crash the application if it is during a paint event or some critical time.
2018-10-20 18:08:36 +02:00
jean-pierre charras 576a0af293 Eeschema: make draw functions working with "old" libraries using a useless large negative line width (like -1000 or -2000 mils).
They are now clamped to -1.

This is only a workaround to avoid ugly artifacts
2018-10-20 13:08:33 +02:00
jean-pierre charras 1116acd74b Libedit: Fix broken handling of "common to all bodu style" property of lib draw items.
Fix a minor wxWidgets assert.
2018-10-20 12:38:36 +02:00
Simon Richter abe1ffabda Replace WIN32 preprocessor symbol by the official symbol _WIN32, used almost everywhere 2018-10-20 09:22:24 +02:00
Wayne Stambaugh 8a251163dc Revert "Turn off compiler extensions"
The compiler option caused build failures on msys2.

This reverts commit 2c22bb1a60.
2018-10-19 18:19:45 -04:00
Simon Richter cc0489f6b5 Disallow variable length arrays
This is a gcc/clang extension, not standard C++
2018-10-19 10:25:32 -07:00
Simon Richter 2c22bb1a60 Turn off compiler extensions
We want to be somewhat standards compliant if we can.
2018-10-19 10:25:05 -07:00
Maciej Suminski 9757107b61 Spice netlist exporter: handle multiline directives
Fixes: lp:1797937
* https://bugs.launchpad.net/kicad/+bug/1797937
2018-10-19 17:33:01 +02:00
jean-pierre charras 8f9b0f0235 Eeschema, spice netlist exporter: fix an issue that converted spice string commands to lowercase.
Therefore, it can breaks some commands, especially filenames.

Partial fix of bug 1797937.
2018-10-19 16:18:30 +02:00
jean-pierre charras 064b8a8d60 Gerber file generation: remove a optional info in .FileFunction: the layer type.
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)
2018-10-19 15:48:18 +02:00
jean-pierre charras 10aa8b5f18 Page Layout Editor: fix a few GUI issues.
- When loading a file from history the users was always asked to discard changes.
- Bitmap items: the PPI setting was not displayed.
- Text items: the PPI setting was displayed.
- Poly items: the Rotation option was not displayed.
2018-10-19 12:03:03 +02:00
Thomas Pointhuber e39eeb2f92 Remove debug printf and fix indentation inside of block 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 95e55eb17a Fix coding style issue (space after if) 2018-10-19 09:59:06 +02:00
Thomas Pointhuber e09785db1d Introduce PyStringToWx helper to remove code duplication 2018-10-19 09:59:06 +02:00
Thomas Pointhuber ce471ec898 Fix braces 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 6ac444f587 Fix style issue 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 9eff4e999f Quick fix to avoid nameclash with local qrcode python package 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 8bf1954625 NoneType was incorrectly passed to PyString_AsString
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
2018-10-19 09:59:06 +02:00
Thomas Pointhuber 4a2a76af37 Improve CMake Python code
* We have code with u'' which means minimum version is 3.3
* Python 3.8 is already in development, be a bit more future proof
2018-10-19 09:59:06 +02:00
Thomas Pointhuber a27e547290 Fix uss39_barcode.py to work with Python3 as well 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 86ecb9fe30 Fix cmake script for PythonLibs 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 0812f71bd3 Fix builtins import in Python3 2018-10-19 09:59:06 +02:00
Thomas Pointhuber f316b98f45 Fix conversation of Python 3 str -> wxString
Conversation of a NoneType for example failed before
2018-10-19 09:59:06 +02:00
Thomas Pointhuber 22e5e52598 Fix warning: 'HAVE_CLOCK_GETTIME' macro redefined 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 7365cb8e52 Get Exception handling working with Python 3
The old way to get the full stacktrace was incorrect, and does not work
with Python 3:
https://stackoverflow.com/questions/3702675/how-to-print-the-full-traceback-without-halting-the-program#comment84297600_33723119
2018-10-19 09:59:06 +02:00
Thomas Pointhuber 88d04f3bcb Get Action Plugins working with Python 3, fix some unicode string errors 2018-10-19 09:59:06 +02:00
Thomas Pointhuber 8805706ccb Fix incompatibilites between Python 2 and Python 3 2018-10-19 09:59:05 +02:00
Thomas Pointhuber 7548a3b1bf Add KICAD_SCRIPTING_PYTHON3 flag to about dialog and doc 2018-10-19 09:59:05 +02:00
Thomas Pointhuber e9da6811a6 Fix initialisation of the pcbnew python module 2018-10-19 09:59:05 +02:00
Thomas Pointhuber 1a11480bfd Add cmake flag to switch to python3 build 2018-10-19 09:59:05 +02:00
Thomas Pointhuber e729454409 Add missing python 3 versions to FindPythonLibs.cmake 2018-10-19 09:59:05 +02:00
Thomas Pointhuber 284904b72c Rewrite C extensions to also support Python 3 2018-10-19 09:59:05 +02:00
Thomas Pointhuber de7b362695 Rewrite some code to work on Python 2.7 and 3+ 2018-10-19 09:59:03 +02:00
Seth Hillbrand e1f30a3b38 pcbnew: Fix single-net connectivity
Ensure that changes affecting fewer than 4 nets still get updates in the
ratsnest.
2018-10-18 17:11:58 -07:00
Seth Hillbrand ea1bc4300d QA: Add unicode to test_utf8.cpp
Previous test strings did not utilize extended table unicode, so some
cases slipped through testing.  When initializing wxString, we need to
be careful to specify that we are initializing from a UTF-8 string
otherwise the system will utilize a locale-specific initialization.
2018-10-18 11:36:49 -07:00
Seth Hillbrand 6d8a759c75 UTF8: Fix MSVC builds
MSVC does not support variable length arrays.  Substitute a std::vector
instead.
2018-10-18 11:35:45 -07:00
Jeff Young a5c892d9cd Update line width each time a new object is drawn.
Fixes: lp:1797481
* https://bugs.launchpad.net/kicad/+bug/1797481
2018-10-18 15:25:56 +01:00
Jeff Young c06e533689 Add hack to Resolve all symbols when painting.
Seems rather expensive, but this is what the Legacy canvas did.
In fairness, it does check the last-mod-date of the libraries
and skips it if they haven't changed.

Fixes: lp:1798446
* https://bugs.launchpad.net/kicad/+bug/1798446
2018-10-18 14:14:54 +01:00
Tomasz Włostowski bdc64ff0b3 router: DP_GATEWAYS::FilterByOrientation() should have exactly opposite filtering condition!
Fixes: lp:1797914
* https://bugs.launchpad.net/kicad/+bug/1797914
2018-10-18 14:29:19 +02:00
Jeff Young baa4019448 Draw pin previews with the correct schematic background color.
Fixes: lp:1798447
* https://bugs.launchpad.net/kicad/+bug/1798447
2018-10-18 13:27:41 +01:00
Jeff Young c052b7f8ef Fix segfault when deleting sheet pins. 2018-10-18 13:27:41 +01:00
Tomasz Włostowski eea949ce0a router: don't cross DP lines when length tuning, fix swap pair polarity bug
Fixes: lp:1798500
* https://bugs.launchpad.net/kicad/+bug/1798500

Fixes: lp:1798221
* https://bugs.launchpad.net/kicad/+bug/1798221
2018-10-18 13:48:43 +02:00
Jeff Young ff992f4a64 Keep track of which nets are currently in use.
Fixes: lp:1798006
* https://bugs.launchpad.net/kicad/+bug/1798006
2018-10-18 12:14:23 +01:00
Jeff Young 8a54b1b3b7 Add view refresh calls for edit operations.
Note that the bug referenced in the "fixes" section is only one
of many addressed by this commit.

Fixes: lp:1798449
* https://bugs.launchpad.net/kicad/+bug/1798449
2018-10-18 12:12:48 +01:00
Seth Hillbrand 38c5b025c8 Ratsnest: iterate only over dirty nets
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.
2018-10-17 17:07:29 -07:00
Tomasz Włostowski 12567c7500 eeschema-gal: don't warp cursor back to mouse when using hotkey to emulate a mouse click
Fixes: lp:1797273
* https://bugs.launchpad.net/kicad/+bug/1797273
2018-10-17 23:25:36 +02:00
Seth Hillbrand 441cac9f1b UTF8: Correct MSW issue with previous commit
Linux does not handle the resize command with wide-character extended
table UTF-8.  The solution did not work for W7-32bit.  This is a
compromise, attempting first the preferred, previous solution and
falling back to the secondary solution.

(cherry picked from commit 6106210c87)
2018-10-17 12:40:28 -07:00
Wayne Stambaugh 29092c3b3d Fix broken log trace name in previous commit. 2018-10-17 15:34:46 -04:00
Wayne Stambaugh f584b30c73 Replace log debugging output with tracing.
Replace all instances of wxLogDebug with wxLogTrace in the common and
kicad folders to prevent unwanted debugging output.

Add new trace flags for locale and screen object tracing.

The usual smattering of code policy fixes.
2018-10-17 15:03:33 -04:00
Jeff Young c22a247dbc Fix undo issue primarily with libedit.
Fixes: lp:1797900
* https://bugs.launchpad.net/kicad/+bug/1797900
2018-10-17 13:10:36 +01:00
Jeff Young 254e9f4a7e Implement HardRedraw for eeschema and libedit. 2018-10-17 12:14:09 +01:00
Jeff Young e9a80a5d7f Some minor dialog layout fixups. 2018-10-17 11:23:02 +01:00
Jeff Young 924c0fa9ed Fetch symbol chooser grid settings from the right place. 2018-10-17 11:14:01 +01:00
jean-pierre charras 9795a3572d dialog_pns_length_tuning_settings: fix incorrect dialog size.
This was due to the fact sizers recalculate the sizes before initialization of a bitmap.
2018-10-17 11:48:15 +02:00
Jeff Young c19984e4de Performance optimization for Symbol Fields Editor. 2018-10-17 02:04:44 +01:00
Seth Hillbrand 594c1bded1 UTF8: Utilize the safe conversion from wchar
Invalid wchar characters would throw an exception.  We need a defined
output from the += operator, even for unknown character.

Fixes: lp:1798144
* https://bugs.launchpad.net/kicad/+bug/1798144

(cherry picked from commit b37bc69476)
2018-10-16 16:37:48 -07:00
Jeff Young 08e1379671 Add new sheet pins to view. 2018-10-16 22:54:12 +01:00
Jeff Young 6e3f226e45 Update texts with %V and %R when values or references is chosen.
(This in addition to updating them when other fields is chosen.)
2018-10-16 17:46:01 +01:00
Jeff Young 51deb9d562 Fix issue with updating Footprint graphic items.
dyn_cast doesn't handle inheritance.
2018-10-16 17:07:59 +01:00
Jeff Young 84c14c2971 Fix updating of the schematic symbols after a library save. 2018-10-16 17:07:59 +01:00
Jeff Young 1114b5cfa9 Refresh item when its dangling state changes.
Fixes: lp:1797996
* https://bugs.launchpad.net/kicad/+bug/1797996
2018-10-16 17:07:59 +01:00
Jeff Young ecd893c4b1 Refresh screen after filling zones.
Previous code didn't refresh until you moved the mouse.
2018-10-16 17:07:59 +01:00
jean-pierre charras 61f2dd21b1 Eeschema gal: fix some redraw issues for bitmap images and worksheet.
After edition, the worksheet was not updated on screen.
Bitmap images were not shown in opengl mode due to the fact all gal layers were cached.
2018-10-16 14:20:09 +02:00
jean-pierre charras 7c960aa5fe Eeschema: better limit for zoom out level
Fixes: lp:1797995
https://bugs.launchpad.net/kicad/+bug/1797995
2018-10-16 09:25:00 +02:00
Jeff Young d62145fba9 Fix compile error when not on OSX. 2018-10-15 20:54:29 +01:00
jean-pierre charras aabff98fb6 Try to fix the Jenkins link error 2018-10-15 21:43:50 +02:00
Jeff Young 59b7762981 Back out workaround f1e2f142a6.
A proper fix is in bf164f7c4b.
2018-10-15 20:33:43 +01:00
Jeff Young 5fe523f534 Place object borders in front of background fills.
This is required when rendering from the cache as the hardware
doesn't necessarily draw in the same order.
2018-10-15 19:59:47 +01:00
Jeff Young 3dcd52021a Simplify exchange footprints dialog and support wildcards. 2018-10-15 19:59:47 +01:00
Jeff Young 0585382986 Allow editing of library footprint from board reference. 2018-10-15 19:59:47 +01:00
jean-pierre charras 906c08afc6 Cross probing: ensure highlighted net in Eeschema is shown when cross probed from Pcbnew. 2018-10-15 20:16:48 +02:00
jean-pierre charras 9c398dbf90 Pcbnew, CMakeLists.txt: remove duplicate lines.
For some reason, a few files were included 3 times in the same dependency. One time is enough.
2018-10-15 20:14:27 +02:00
Seth Hillbrand bf164f7c4b GAL: Lock context when triggering resize
This action adjusts the compositor, so it must have exclusive access to
the context.
2018-10-15 09:55:53 -07:00
Seth Hillbrand a7672716f8 Revert "pcbnew: Fix memory leak in Eagle importer"
This reverts commit 45d438cd13.
2018-10-15 08:26:04 -07:00
Tomasz Włostowski d66e0d4f7a eeschema-gal: implemented EnableDepthTest() in GAL, fixed drawing order in eeschema 2018-10-15 00:09:59 +02:00
jean-pierre charras 0777d11188 Eeschema Better fix for highlight visibility issue for cached items due to last change in code in opengl 2018-10-14 14:59:40 +02:00
jean-pierre charras 9a62f508a4 Revert "Eeschema Fix highlight visibility issue for cached items due to last change in code"
This reverts commit b389236a72, not working in opengl.
2018-10-14 14:57:45 +02:00
jean-pierre charras b389236a72 Eeschema Fix highlight visibility issue for cached items due to last change in code 2018-10-14 12:47:06 +02:00
jean-pierre charras fff739631c EEschema: fix wrong pin rendering for pin style PINSHAPE_OUTPUT_LOW
Fixes: lp:1797750
https://bugs.launchpad.net/kicad/+bug/1797750
2018-10-14 12:36:02 +02:00
Jeff Young 0bd0558833 Auto-select reference numbers in PcbNew like we do in Eeschema. 2018-10-14 00:06:41 +01:00
Jeff Young 275d5e336f Fix issue with component children disappearing when canvas origin not in view. 2018-10-13 20:54:50 +01:00
Jeff Young f1e2f142a6 Work-around for preference crash with multiple GAL docs open. 2018-10-13 19:41:45 +01:00
Jeff Young 29e0e6921b Turn on OpenGL caching. Time to smoke out the bugs. 2018-10-13 15:53:54 +01:00
Jeff Young 3158273c1a Revert window-locking change which didn't fix preferences crash. 2018-10-13 15:53:54 +01:00
jean-pierre charras 650478f757 Eeschema, highlight connection: show selected junctions and labels in highlight color
Previously, only wires were shown in highlight color.
2018-10-13 16:12:36 +02:00
Jeff Young 6a5744adb1 Show compile errors and go back to GLSL V120. 2018-10-13 12:39:53 +01:00
jean-pierre charras 9df7626e31 Fix issue: Symbol library editor: Moving pins jumps to origin
Also: remove outdated lines in code.

Fixes: lp:1797266
https://bugs.launchpad.net/kicad/+bug/1797266
2018-10-13 12:09:49 +02:00
jean-pierre charras 1bce69b9f0 Fix a minor compil warning. 2018-10-13 08:24:31 +02:00
jean-pierre charras 7df4ddc74d Use our DIALOG_COLOR_PICKER in 3D viewer to set a color.
the wxWidgets color picker is not the best for the 3D viewer that does not use transparency color.
2018-10-13 08:23:14 +02:00
Seth Hillbrand aa622994e1 eeschema: Ensure is_moved flag is set when moving
Prior to placing, cleaning routines need to know which schematic items
are being moved to avoid cleaning them relative to themselves.  The
IS_MOVED flag communicates this and is cleared by ClearDrawingState()

Fixes: lp:1797576
* https://bugs.launchpad.net/kicad/+bug/1797576
2018-10-12 17:08:10 -07:00
Seth Hillbrand 4a730e6c54 pcbnew: refactor connectivity locking
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.
2018-10-12 17:07:31 -07:00
Seth Hillbrand 59adb109a6 Organizing connectivity
Moved large routines out of headers in into cpp.  Moved trivial routines
into headers.
2018-10-12 16:31:09 -07:00
Seth Hillbrand cfaf7c1f23 pcbnew: re-organizing connectivity
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.
2018-10-12 16:31:09 -07:00
Seth Hillbrand 4460313104 pcbnew: Separating connectivity to subdir 2018-10-12 16:31:09 -07:00
Seth Hillbrand 9e4cad666e pcbnew: Code Cleanup removing unused fns
IsDirty() is generic, so we keep the clearer m_items.isDirty() sub
function and clear out old defs.
2018-10-12 16:31:09 -07:00
Seth Hillbrand cc776f71a9 pcbnew: Code cleanup
Moving functions to std:: algorithms where feasible to reduce the code
burden.
2018-10-12 16:31:09 -07:00
Jeff Young 6c34fdefd7 Better exception handling and context locking for GAL.
This prevents deadlocks when exceptions are thrown and the context
ends up not getting unlocked.

It also removes an earlier hack to try and minimize this which
didn't work anyway.
2018-10-12 23:44:49 +01:00
Tomasz Włostowski a676034e36 OPENGL_GAL::DrawGrid(): flush drawing buffer after drawing small crosses grid so that it's correctly composited
Fixes: lp:1797642
* https://bugs.launchpad.net/kicad/+bug/1797642
2018-10-12 23:52:35 +02:00
Tomasz Włostowski 22300e4f02 Null pointer check in FOOTPRINT_LIST::GetInstance() 2018-10-12 23:51:31 +02:00
Tomasz Włostowski e988cd9c25 Fixed crash in footprint chooser in eeschema triggering in standalone/no-pcbnew mode
Fixes: lp:1797644
* https://bugs.launchpad.net/kicad/+bug/1797644
2018-10-12 23:43:08 +02:00
Tomasz Włostowski 30f0e93dbb Synchronize the GAL view after invoking 'autoplace fields' tool
Fixes: lp:1797268
* https://bugs.launchpad.net/kicad/+bug/1797268
2018-10-12 23:27:39 +02:00
Tomasz Włostowski 7f132ca261 EDA_DRAW_FRAME: avoid cursor flickering in GAL when changing cursor size
Fixes: lp:1797437
2018-10-12 23:20:28 +02:00
Tomasz Włostowski 711b278248 gal/opengl: handle single-pixel line width clamping in hardware (new shader). Correct grid rendering in GAL for pixel-sized lines 2018-10-12 19:13:54 +02:00
John Beard b64c6dbf35 Use wxCHECKs to protect non-position TOOL_EVENTS
Getting the position of a non-position TOOL_EVENT will
now result in a wxCHECK, and a null-position (0,0) will
be returned. The new interface HasPosition() can be used
to determine if a call to a position function is safe to
make from the caller.

Fixes the underlying danger behind lp:1796045, which has
already been neutralised by a4966adb6, which avoids calling
the Position() functions when the TOOL_EVENT is not known
to be a position.

Fixes: lp:1796045
* https://bugs.launchpad.net/kicad/+bug/1796045
2018-10-12 09:08:07 -07:00
jean-pierre charras dbc9130da9 Fix: 3D footprint preview does not zoom using mouse wheel (Windows specific)
This was due to clicking on the preview canvas does dot give the focus to the canvas on Windows.
Now the focus is set when clicking on this canvas.

Fixes: lp:1794090
https://bugs.launchpad.net/kicad/+bug/1794090
2018-10-12 13:41:44 +02:00
Seth Hillbrand 915d2ed374 pcbnew: Zone tool follows active layer
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
2018-10-11 21:16:05 -07:00
Seth Hillbrand 92758ea4ef eeschema: Fix minor compile warning 2018-10-11 15:31:10 -07:00
Seth Hillbrand 4f672f0d39 Fixing a number of dynamic_casts
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.
2018-10-11 15:24:12 -07:00
Seth Hillbrand ddea4e11d1 3d-viewer: Fix intersection bug
Bounding box check always returned false, leading to incorrect BBox
checks when one bbox is interior to the other
2018-10-11 14:47:06 -07:00
Seth Hillbrand dff92f915c eeschema: Formatting grid table
Missing breaks could cause grid table to return odd text for bad values.
With the breaks, odd values are flagged for fixing
2018-10-11 14:45:23 -07:00
Seth Hillbrand d03b08a03f gerbview: Prevent NULL dereference
There was a possible NULL dereference when executing tool_up even
though we should never hit it, we protect against bad files.

Also converts a couple untranslated error strings.
2018-10-11 14:23:07 -07:00
Seth Hillbrand a16e21665a view_layers: Initialize variables
Fixes a couple spots where uninitialized variables cause unknown results.
2018-10-11 14:08:35 -07:00
Seth Hillbrand bfa7f16b44 Wrap printfs in DBG defines
This places the remaining printf statements behind DBG() macros to
suppress their output on release builds.  We should remove these prior
to 5.1
2018-10-11 13:32:20 -07:00
Jeff Young a69635f539 Adjustment to net selector list sizing for GTK.
Thanks to John Beard.
2018-10-11 18:53:00 +01:00
Jeff Young 9f7bc6a9f9 A bit of a hack to keep OpenGL from puking. 2018-10-11 18:53:00 +01:00
Jeff Young 732e0b0bf8 Remove extra rebuild of toolbar.
It's called from CommmonSettingsChanged() anyway.
2018-10-11 18:53:00 +01:00
Jeff Young d9bf1550e4 Improve slightly confusing error message. 2018-10-11 18:53:00 +01:00
jean-pierre charras 4904ece0b5 eeschema gal: keep grid visibility setting when switching between back-ends 2018-10-11 18:45:18 +02:00
Seth Hillbrand 4d8534a7a6 libedit: Prevent segfault when deleting part
emptyScreen() sets the current part to NULL.  This gracefully handles
the case by allowing a cleared screen when no part is currently
selected.
2018-10-11 09:22:54 -07:00
jean-pierre charras 5c8c1cdb8f Eeschema doesn't show highlight net until a screen redraw is made.
Fixes: lp:1796989
https://bugs.launchpad.net/kicad/+bug/1796989
2018-10-11 14:19:29 +02:00
Jeff Young 94cc1efbcc Clear filter when poping up net selector.
Even when useful it's unexpected, and GTK has issues with focus
and selection inside the control, making it hard to clear.
2018-10-11 11:58:39 +01:00
Jeff Young ff85798918 Increase list-item padding for GTK net selector. 2018-10-11 11:58:39 +01:00
jean-pierre charras bea75753dd Eeschema fix: highlight component from pcbnew doesn't switch sheets
Fixes: lp:1797249
https://bugs.launchpad.net/kicad/+bug/1797249
2018-10-11 11:28:07 +02:00
jean-pierre charras 0dfd0c5f52 Minot cosmetic enhancement 2018-10-11 11:26:59 +02:00
Ronnie Gaensli ab1f016132 Fix assert freeze of eeschema when ToHSV, h is Nan
Fixes: lp:1797006
* https://bugs.launchpad.net/kicad/+bug/1797006
2018-10-10 21:22:26 +02:00
Jeff Young a0b8755f47 Filter <space> out of net filter box. 2018-10-10 19:49:06 +01:00
Jeff Young 01843290fc Exclude space from net filter. 2018-10-10 19:49:06 +01:00
Jeff Young 609d497870 Remember settings in Global Track & Via Properties dialog. 2018-10-10 19:49:06 +01:00
Tomasz Włostowski 0090bea24e eeschema-gal: cache & update bboxes of EDA_ITEMS on each redraw 2018-10-10 17:27:21 +02:00
Tomasz Włostowski 576b918351 BOX2: added compare operators 2018-10-10 17:26:32 +02:00
jean-pierre charras 9b027628ef Symbol editor: Fix usability issues of mirror and rotation commands
Fix also mirrorX and mirrorY command to have the same behavior as the schematic editor

Fixes: lp:1797090
https://bugs.launchpad.net/kicad/+bug/1797090
2018-10-10 16:42:58 +02:00
Jeff Young 06dccf715d Code cleanup. 2018-10-10 14:28:03 +01:00
Jeff Young 14721829d7 Hook up keyboard events to parent combobox of net selector. 2018-10-10 14:02:25 +01:00
Jeff Young a02e83ebdb Remove deleted footprints from selection.
Fixes: lp:1797001
* https://bugs.launchpad.net/kicad/+bug/1797001
2018-10-10 10:59:50 +01:00
Jeff Young ab67d2f81a Another go at fixing units changes for rulers.
The previous fix only worked for hot-key changes.  This should
include using the toolbar, menu, etc.
2018-10-10 10:59:50 +01:00
Jeff Young e79e2f0175 Remove properties flag from via placer so single-click mode works.
Fixes: lp:1796769
* https://bugs.launchpad.net/kicad/+bug/1796769
2018-10-10 10:59:50 +01:00
Seth Hillbrand abdb91203f pcbnew: Position relative using pad
Positioning a pad relative to an item in the board edit should move the
footprint not the pad.

Fixes: lp:1796995
* https://bugs.launchpad.net/kicad/+bug/1796995
2018-10-09 22:05:41 -07:00
Seth Hillbrand 9a86b26b82 pcbnew: Distribute footprints not pads
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
2018-10-09 22:01:23 -07:00
Seth Hillbrand 13997f0050 Revert "pcbnew: Adding copy constructors to PNS items"
This reverts commit 41e4bc4d9f.

This commit requires additional testing before recommitting as it causes
issues with FindJoint().
2018-10-09 14:50:20 -07:00
Jeff Young 779ef044b7 Fix wxGrid column dragging bugs.
Close an open editor when dragging (as wxWidgets won't move it).

Make sure native column headers aren't in use where we need dragging:
their interaction with wxWidgets' dragging is buggy.

Fixes: lp:1796398
* https://bugs.launchpad.net/kicad/+bug/1796398

Fixes: lp:1796396
* https://bugs.launchpad.net/kicad/+bug/1796396
2018-10-09 21:33:43 +01:00
Jeff Young 5f0ffe8490 Copy isDangling flag when changing label type.
Fixes: lp:1796775
* https://bugs.launchpad.net/kicad/+bug/1796775
2018-10-09 21:33:43 +01:00
Jeff Young c5499a6b19 Use ChangeValue() so design rules popup doesn't get cleared.
Fixes: lp:1796780
* https://bugs.launchpad.net/kicad/+bug/1796780
2018-10-09 21:33:43 +01:00
Seth Hillbrand 808a7d9483 pcbnew: Fix crash when GAL fallback fails in some cases 2018-10-09 09:05:14 -07:00
jean-pierre charras 37c2743fec Fix a minor compil warning. 2018-10-09 17:03:43 +02:00
Jeff Young 55c1ca1191 Handle pin sorting properly for values.
The pin number sorter doesn't handle units at all, and seems to
stumble on negative numbers.

Fixes: lp:1796869
* https://bugs.launchpad.net/kicad/+bug/1796869
2018-10-09 14:56:29 +01:00
Jeff Young bc69330fe0 Make sure filter text goes at the end.
Some platforms select-all on focus, meaning each character would
replace the pre-existing string.
2018-10-09 14:56:29 +01:00
Seth Hillbrand 246f49b8cb pcbnew: Fix Footprint selection to only footprint area
Fixes: lp:1796866
* https://bugs.launchpad.net/kicad/+bug/1796866
2018-10-09 05:53:31 -07:00
Seth Hillbrand 4e06494105 pcbnew: Fix minor bug in tracks cleaner
Allow rebuild of track connection info when modified is true.
2018-10-09 05:43:26 -07:00
Seth Hillbrand 1a6f039bb5 pcbnew: Fix minor miscalculation in dp length
The commonParallellProjection had an odd ordering of parameters that was
not followed by callers.  This corrects the ordering to standard for
each.
2018-10-09 05:37:48 -07:00
Seth Hillbrand 81483a9670 ARC_ASSIST: Fix return type in bool check
The return for special angle check is boolean.
2018-10-09 05:37:48 -07:00
Seth Hillbrand 41e4bc4d9f pcbnew: Adding copy constructors to PNS items
Adding safe copy constructors to PNS items including assignment check
and copy operations
2018-10-09 05:37:48 -07:00
Seth Hillbrand e1fe3c7ed4 GRID_HELPER: Remove double-check condition
We only need to check nearest once.
2018-10-09 05:37:48 -07:00
Seth Hillbrand 8189fbe85c pcbnew: Fix issue suppressing Creation Date
Typo in file could lead to creation date being suppressed if timezone
could not be determined.

Also fixed a few wide chars in comments
2018-10-09 05:37:48 -07:00
Seth Hillbrand 10d348999e pcbnew: Fix minor counting issue
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.
2018-10-09 05:37:48 -07:00
Seth Hillbrand 03813b3751 3d: Fix double-clear in oce loadmodel 2018-10-09 05:37:48 -07:00
Maciej Suminski cbf74d6939 Fix off-grid block paste
Center point of a block may not always be located on a grid point,
therefore it needs to be rounded to the grid size to prevent off grid
component placement.
2018-10-09 11:08:56 +01:00
Jeff Young 6e2b7521d0 Coding style and lint fixes. 2018-10-09 11:08:56 +01:00
Jeff Young 06e63c3073 Add control over worksheet colour in eeschema. 2018-10-09 11:08:56 +01:00
Jeff Young 637029c292 Remove polygon fix as it causes more issues than it solves. 2018-10-09 11:08:56 +01:00
Jeff Young 5a910e9ee3 Make sure filled polygons are closed when rendering. 2018-10-09 11:08:56 +01:00
John Beard c75d4b9ba1 Fix -Wreorder warning in common view-overlay.cpp
Simple fix - m_radius comes after m_{start,end}Angle in the class member list.
2018-10-09 11:08:56 +01:00
John Beard 4a65df8281 Add default case in edit_label.cpp (-Wswitch)
This should never ben hit as it's defended against above,
but lack of a default causes lots of -Wswitch warnings, so
add an assert and a return.
2018-10-09 11:08:56 +01:00
Jeff Young 9dfcc839a4 Fix color issues with cursor and sheet pins. 2018-10-09 11:08:56 +01:00
jean-pierre charras 4a92a5e628 Fix a Eeschema crash when using a SYMBOL_PREVIEW_WIDGET. Fix also a few draw artifacts. 2018-10-09 11:08:56 +01:00
jean-pierre charras a6d014d959 Fix some artifacts when drawing items, both on Cairo and Opengl.
Fix also incorrect selection of De Morgan style selection in SYMBOL_PREVIEW_WIDGET.
2018-10-09 11:08:56 +01:00
Jeff Young 2d5baac77d Fix up zoom and pan issues entering/leaving sheets. 2018-10-09 11:08:56 +01:00
Jeff Young 929786ce50 Fixes to grid color and some more CLangTidy fixes. 2018-10-09 11:08:56 +01:00
Jeff Young 0af31e1bf0 Fix CLangTidy warnings and improve SNR. 2018-10-09 11:08:56 +01:00
jean-pierre charras 0058ef5825 Eeschema: fix a crash at startup in OpenGL engine, when Eeschema is started from Kicad.
Can be platform dependent. The crash was due to a wxPaintEvent fired before the GAL engine is fully initialized.
2018-10-09 11:08:56 +01:00
jean-pierre charras b42f94e27b Eeschema, Cairo backend: fix a minor but annoying render issue. 2018-10-09 11:08:56 +01:00
jean-pierre charras 88cdce8d62 Make SYMBOL_PREVIEW_WIDGET working, and using the canvas type of the caller. Fix an issue with F3 zoom key in libedit. 2018-10-09 11:08:56 +01:00
Jeff Young 6f89b41f18 Cleanup. 2018-10-09 11:08:56 +01:00
Jeff Young 3b59c6cf0a Don't add item to view twice. 2018-10-09 11:08:56 +01:00
jean-pierre charras 33386ec980 Fix zoom issues in Eeschema (F1 to F4 and popup zoom commands) Fix also not saving the Gal Canvas type on eeschema exit. 2018-10-09 11:08:56 +01:00
jean-pierre charras f283667fb0 add option to switch between opengl and cairo in eeschema (step 1) 2018-10-09 11:08:56 +01:00
Jeff Young 42ee4f79e4 Fix assert in Graphic Item Properties.
Fixes: lp:1792201
* https://bugs.launchpad.net/kicad/+bug/1792201
2018-10-09 11:08:56 +01:00
Jeff Young 46426f1196 Fix segfault when routing.
Fixes: lp:1792037
* https://bugs.launchpad.net/kicad/+bug/1792037
2018-10-09 11:08:56 +01:00
jean-pierre charras 58916a200e Eeschema: Fix a crash at start in Debug mode 2018-10-09 11:08:56 +01:00
Jeff Young f9faa6ea16 Reduce "Clarify Selection" menus. 2018-10-09 11:08:56 +01:00
Jeff Young 97c83766db Refresh issues around sheet pins. 2018-10-09 11:08:56 +01:00
Jeff Young 96724af2c4 Ensure junctions and no-connects are visible even on fat wires.
Also adds a preference for junction size.

Fixes: lp:1545422
* https://bugs.launchpad.net/kicad/+bug/1545422
2018-10-09 11:08:56 +01:00
Jeff Young ca3751fbbb Add GAL refresh for some more commands and remove unused DC params. 2018-10-09 11:08:56 +01:00
Jeff Young 8e09aa554a Improve dangling pin drawing logic. 2018-10-09 11:08:56 +01:00
Jeff Young 268565ee41 Refresh component when children change. 2018-10-09 11:08:56 +01:00
Jeff Young 37cfa3fed9 Cleanup unused and redundant stuff. 2018-10-09 11:08:56 +01:00
Jeff Young e2ea9b772a Fix offset issue when moving text. 2018-10-09 11:08:56 +01:00
Jeff Young d9d2822fe0 Fix cross-probing. 2018-10-09 11:08:56 +01:00
Jeff Young 9f9251c11d Minor code cleanup. 2018-10-09 11:08:56 +01:00
Jeff Young 2b6e3de90e Get rid of asserts when adding line segments. 2018-10-09 11:08:56 +01:00
jean-pierre charras 1a0f3b79cc Fix SCH_BITMAP handling in gal. 2018-10-09 11:08:56 +01:00
jean-pierre charras e55763947e Set the reight grid visibility at start. Display axis in libedit and viewlib. 2018-10-09 11:08:56 +01:00
Jeff Young 98296334fd Hook up panning options to GAL canvas. 2018-10-09 11:08:56 +01:00
Jeff Young 5b602d02ab Set block start position when grabbing single items. 2018-10-09 11:08:56 +01:00
Jeff Young 6f0c6f946c Fixup some more cursor issues. 2018-10-09 11:08:56 +01:00
Jeff Young b09a4b341c Update moved items so they get reinserted into the RTree. 2018-10-09 11:08:56 +01:00
Jeff Young fee52e127f Add line style drawing. 2018-10-09 11:08:56 +01:00
Jeff Young 808beed191 Warp pointer after context-menu duplicate. 2018-10-09 11:08:56 +01:00
Jeff Young 1e3a5c1b21 Fixup of last commit. 2018-10-09 11:08:55 +01:00
Jeff Young 0063f2c12d Stroke rectangles after filling so fill doesn't cover 1/2 of stroke. 2018-10-09 11:08:55 +01:00
Jeff Young 48688b5074 Hook up "always show cursor" preference. 2018-10-09 11:08:55 +01:00
jean-pierre charras f1346030d7 sch_painter.cpp: fix a few incorrect color selections Fix also dangling symbol thickness of bus entries 2018-10-09 11:08:55 +01:00
Jeff Young 4fe58922aa Draw lines in wire, bus, or graphic color. 2018-10-09 11:08:55 +01:00
Jeff Young fa0124bee7 Enforce a minimum line thickness for labels. 2018-10-09 11:08:55 +01:00
Jeff Young 4161bb6756 Overhaul block logic to support rotate/mirror on the fly.
The old code delayed duplicating till the end which means the
rotate/mirror would affect the original, and then be duplicated
leaving the original incorrectly rotated/mirrored.
2018-10-09 11:08:55 +01:00
jean-pierre charras 906c52deff minor compil warnings and drawings fix 2018-10-09 11:08:55 +01:00
Jeff Young 3c82ad3220 Finish up the block rotate/mirror fixes.
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
2018-10-09 11:08:55 +01:00
Jeff Young 924e56e076 WIP for block rotate and mirror.
Block rotate now doesn't drop the block, but it does introduce one
extra undo step per rotate.

Fixes: lp:1780794
* https://bugs.launchpad.net/kicad/+bug/1780794
2018-10-09 11:08:55 +01:00
Jeff Young 7216eda202 Fix bugs in block operations.
1) when duplicating don’t keep original hidden until end of drag
2) reset selectionArea when showing it so it doesn’t flash in its previous location
3) center a pasted block on the cursor
4) don’t draw the source selectionArea when pasting a block
5) implement selection-style highlighting for contents of blocks
6) add pasted items to view so they don’t disappear when the block is placed

Fixes: lp:1747197
* https://bugs.launchpad.net/kicad/+bug/1747197
2018-10-09 11:08:55 +01:00
Jeff Young 27df8937b8 Apply a bit of transparency for body backgrounds while dragging. 2018-10-09 11:08:55 +01:00
Jeff Young 7d5e4de815 Implement MoveCursorToCrossHair. 2018-10-09 11:08:55 +01:00
Jeff Young cb8e6c0df5 Handle GAL view refresh for breaking wires. 2018-10-09 11:08:55 +01:00
Jeff Young 38f38b16c0 Fix dissappearance of moved items. 2018-10-09 11:08:55 +01:00
Jeff Young 5fd20ee786 Implementation of ERC markers. 2018-10-09 11:08:55 +01:00
Jeff Young 47189034aa Grid settings for LibEdit. 2018-10-09 11:08:55 +01:00
Jeff Young e45e3b3640 Fix bug with Preferences turning hidden items to black. 2018-10-09 11:08:55 +01:00
Jeff Young bbe1d996fd Fix initialization order issue when switching symbols in LibEdit. 2018-10-09 11:08:55 +01:00
Jeff Young 269e8159d4 Grid settings for LibEdit. 2018-10-09 11:08:55 +01:00
Jeff Young 9e9db3afe5 Start an empty document with a reasonable grid size. 2018-10-09 11:08:55 +01:00
Jeff Young 58100b62e6 Legacy colors are not stored under a "4D" name. 2018-10-09 11:08:55 +01:00
Jeff Young d7178c7833 Implement GAL refresh for a bunch of operations. 2018-10-09 11:08:55 +01:00
Jeff Young afeebc8944 Grid settings for Eeschema GAL.
Split antialiasing options out from display options.  Move
antialiasing to common.  Duplicate the rest of display options
for Eeschema.

Implement OnSelectGrid and hookup GAL canvas refresh to
SetPresetGrid.

Add Grid Settings... to View menu and move Show Grid from
preferences to View Menu to match Pcbnew.
2018-10-09 11:08:55 +01:00
Jeff Young 8390b7a7ac Don't paint GAL canvas when it isn't shown.
Fixes: lp:1790502
* https://bugs.launchpad.net/kicad/+bug/1790502
2018-10-09 11:08:55 +01:00
Jeff Young c5330ac0bf Implement zoom for GAL canvas. 2018-10-09 11:08:55 +01:00
Jeff Young a67d8c60df Fix text size measurement.
5.0 doesn't set the GAL's line width.  It gets away with this since
it's using the same GAL to measure as to set up the drawing, so
the width happens to be set correctly for other reasons.  5.1 uses
a separate GAL and so isn't so lucky.
2018-10-09 11:08:55 +01:00
Jeff Young b002b96db6 Fix a crash when aborting a block command. 2018-10-09 11:08:55 +01:00
Jeff Young 1c52824913 Rewrite unit/convert handling so it also works for LibEdit. 2018-10-09 11:08:55 +01:00
Jeff Young e9c974fcdc Fix issues with orientation and justification.
Support all symbol orientations. (Yes, SCH_COMPONENT said only the
first 8 were used, but it lied.)

Fix cases where SetTextAttributes() was overwriting previously-
set justifications.

Correct rotation of vertical text.

Fix issue where bold global label would affect thickness of next
label's outline.
2018-10-09 11:08:55 +01:00
Jeff Young c3479154ca Fix draw order issues in eeschema and libedit.
Eeschema (where only the parent component is in the view) uses
draw order.

LibEdit (where the individual items are in the view) uses the
viewPriority setting.
2018-10-09 11:08:55 +01:00
Jeff Young 917943f8f8 Uniform handling of hidden objects. 2018-10-09 11:08:55 +01:00
Jeff Young 17ce36d4b7 Add dangling end support for lables and lines. 2018-10-09 11:08:55 +01:00
Jeff Young 6eafb9a2fd Convert Rescue Symbols dialog previews to GAL. 2018-10-09 11:08:55 +01:00
Jeff Young 893f7641ce Handle hidden and dangling pins. 2018-10-09 11:08:55 +01:00
Jeff Young 8a017d99d2 Fix pin drawing offsets and implement electrical type drawing. 2018-10-09 11:08:55 +01:00
Jeff Young 515135579b UseGalCanvas() no longer means ToolManager() exists. 2018-10-09 11:08:55 +01:00
Jeff Young 538a5d49ee Fix up GAL version of Symbol Viewer.
Also includes some preliminary work for supporting hidden pins,
pin electrical names, and other preferences.
2018-10-09 11:08:55 +01:00
Jeff Young da4fb4ae3a Move galDisplayOptions access from pcbnew to common. 2018-10-09 11:08:55 +01:00
Jeff Young a03dc577f8 Add support for units. 2018-10-09 11:08:55 +01:00
Jeff Young 7cbfa08ddd Move symbol chooser dialog preview to GAL. 2018-10-09 11:08:55 +01:00
Jeff Young 8e915ae8d8 Add support for LIB_ALIAS objects. 2018-10-09 11:08:55 +01:00
Jeff Young 8b4f01b6b7 Add common property initialisation to sch_draw_panel. 2018-10-09 11:08:55 +01:00
Tomasz Wlostowski a3563851b2 eeschema-gal: started work on library viewer canvas 2018-10-09 11:08:55 +01:00
Tomasz Wlostowski 48d36f854e eeschema-gal: fix cursor shape switching 2018-10-09 11:08:55 +01:00
Tomasz Wlostowski ccb594f599 eeschema-gal: support for global labels and bitmaps 2018-10-09 11:08:55 +01:00
Tomasz Wlostowski d9f0dc63a5 eeschema-gal: temporarily disable scrollbar code (causes crashes after Jeff's changes) 2018-10-09 11:08:55 +01:00
Tomasz Wlostowski b604f007d7 eeschema-gal: don't use kiROUND in the geometry library as it brings in a s*****load of wx dependencies due to #include <base_units.h> 2018-10-09 11:08:55 +01:00
Tomasz Wlostowski d8b9899516 eeschema-gal: configurable worksheet & grid colors 2018-10-09 11:08:55 +01:00
Tomasz Wlostowski 5f7c923b8b eeschema-gal: post-rebase fixes 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski e439b17fa1 eeschema-gal: make sure all other Kicad apps compile after eeschema gal hacks 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 90c7c60471 eeschema-gal: initial GALified version. Lots of stuff still to do! 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 14fed877c8 eeschema-gal: factor out libedit controller code into separate directory 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski c024fce625 eeschema-gal: moved libedit to a separate directory 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 2cbd08d4c0 eeschema-gal: make some functions virtual 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 7bccd26078 eeschema-gal: removed unused headers 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 9ab79daf74 SELECTION_AREA: use abstract render settings object 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski ef1f01a8bd VIEW: use BOX2D for view boundary 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 26177efba0 VIEW_GROUP: correctly calculate group extents 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 838458bc3a eeschema-gal: Base refactoring before GALification of the eeschema legacy canvas.
Note: it's only the renderer that is changed from wxDC to GAL. Tools stay the same, consider this a temporary hack.

This commit splits the EDA_DRAW_FRAME, EDA_DRAW_PANEL and BLOCK_SELECTOR classes into two variants, each independently compiled into a static library.
- "legacy_wx" for PCBnew/Gerbview - wxDC-based legacy canvas. We have full GAL support there anyway so it makes no sense to introduce GAL rendering API to the legacy tools.
- "legacy_gal" for EEschema and the rest - GAL-based legacy canvas, using legacy tools but with a GAL renderer.
Such split ensures only a small part of the common library and eeschema is affected, without messing around with already GALified tools.

The commit also removes some header dependencies on class_drawpanel.h
2018-10-09 11:08:52 +01:00
Tomasz Wlostowski f82f310dd5 eeschema-gal: added EnableDepthTest() feature in GAL 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 7e1458a9ce eeschema-gal: implement IsBackgroundDark() 2018-10-09 11:08:52 +01:00
Tomasz Wlostowski 0d720fdeff eeschema-gal: factor out EDA_DRAW_PANEL from BITMAP_BASE, remove some unnecessary includes of class_drawpanel.h 2018-10-09 11:08:52 +01:00
jean-pierre charras 82cb61b8af dialog_page_settings: avoid useless confirmation dialog after changing the page layout file. 2018-10-09 11:29:48 +02:00
Nabeel Ahmad 664fb234ff GerbView: Add actions to reload files
NEW: Adds new items in File Menu and Toolbar to reload the Gerber files
for all layers.

Fixes: lp:1794004
* https://bugs.launchpad.net/kicad/+bug/1794004
2018-10-09 09:16:06 +02:00
Maciej Suminski d599a02a90 Fix unused variable warnings 2018-10-09 09:14:51 +02:00
jean-pierre charras 606096b548 Gerbview: fix a overzealous wxASSERT
Fixes: lp:1796744
https://bugs.launchpad.net/kicad/+bug/1796744
2018-10-09 08:39:21 +02:00
Seth Hillbrand f11cb736e5 pcbnew: Zone selection heuristic continuity for edge
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
2018-10-08 11:31:52 -07:00
Seth Hillbrand 3ee72031a4 pcbnew: Follow cursor when editing polygon
Fixes: lp:1796721
* https://bugs.launchpad.net/kicad/+bug/1796721
2018-10-08 10:32:30 -07:00
Seth Hillbrand 77eeda4191 pcbnew: fix pad distance calc in gateways
The pad distance was fixed to 0, making the gateway priority set
artificially to 1
2018-10-08 09:53:47 -07:00
Seth Hillbrand cb90e5b9e2 libedit: Fix memory leak
The copy of the original lib_part was not released when aliases could
not be located.
2018-10-08 09:51:26 -07:00
Seth Hillbrand 1828e8cb0f pcbnew: Use Default width define instead of nums
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.
2018-10-08 09:17:40 -07:00
Seth Hillbrand ecc80c00a5 pcbnew: Initialize DRAWSEGMENT to default width
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
2018-10-08 09:07:24 -07:00
Seth Hillbrand 45d438cd13 pcbnew: Fix memory leak in Eagle importer
unqiue_ptr release creates a memory leak unless the returned pointer is
freed.
2018-10-08 08:47:58 -07:00
Seth Hillbrand d2906f7975 eeschema: fix mistaken wire removal bug
The wire between two points should not be trimmed if it starts or ends
on one of the component's connection points.
2018-10-08 08:42:06 -07:00
Jeff Young 3024ded91e Improve robustness of numeric evaluation.
It would appear that some platforms process the KILL_FOCUS event
after running TransferDataFromWindow().  This change makes sure
that the evaluation is done no matter the order.

Fixes: lp:1793911
* https://bugs.launchpad.net/kicad/+bug/1793911
2018-10-08 12:59:40 +01:00
Jeff Young 90df7a8b22 Sort references before removing duplicates.
std::unique only works within consecutive blocks, so the list must
be sorted first.  (We need it sorted in the end anyway, so no
big deal.)
2018-10-08 00:14:07 +01:00
Jeff Young d1a679e496 Save original_text before obliterating it.
Fixes: lp:1793911
* https://bugs.launchpad.net/kicad/+bug/1793911
2018-10-07 23:37:16 +01:00
Seth Hillbrand af8715da80 pcbnew: Fix missing board settings class
Fixes: lp:1796541
* https://bugs.launchpad.net/kicad/+bug/1796541
2018-10-07 08:31:49 -07:00
Seth Hillbrand 9505df5997 GRID_HELPER: Fix ALT issue with snapping
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.
2018-10-07 08:23:45 -07:00
Seth Hillbrand ae7f04a20c pcbnew: snap after constraint and grid
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
2018-10-07 08:23:45 -07:00
jean-pierre charras de793aa43d Fix a side effect of our LOCALE_IO by using setlocale( LC_NUMERIC, "C" ) instead of setlocale( LC_ALL, "C" )
LC_NUMERIC is the right option to use in LOCALE_IO because only the floating point separator must be modified
When using LC_ALL, the Env var expansion wxGetEnv() was not working when the env var contains non ascii7 codes after a call to LOCALE_IO.
When using setlocale( LC_NUMERIC, "C" ) in LOCALE_IO, wxGetEnv() works fine.

Fixes: lp:1795990
https://bugs.launchpad.net/kicad/+bug/1795990
2018-10-07 16:26:10 +02:00
Wayne Stambaugh 34ea79eddb Fix LIB_ID illegal character tests.
The '/' and ':' are reserved and cannot be used in symbol or footprint
names.  They will cause the LIB_ID parser and formatter to fail.  While
it seems like they should be legal in symbol alias names, they will
trigger a symbol rescue the next time the schematic is loaded.

Use ID_SCH as in the Eagle schematic plugin rather than ID_ALIAS to
ensure symbol names do not need rescued the next time the schematic is
opened.

Remove ID_ALIAS since the rules for alias names are the same as the
rules for symbol names.  Otherwise, allowing '/' and ':' in alias names
will force a symbol rescue on the next schematic load.

Fixes lp:1795600

https://bugs.launchpad.net/kicad/+bug/1795600
2018-10-07 09:09:27 -04:00
Seth Hillbrand ebfa7d1f7d pcbnew: Remove maximum zone corner radius
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
2018-10-06 22:01:39 -07:00
Seth Hillbrand 1ee579c821 pcbnew: Set graphic line width based on layer
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
2018-10-06 21:42:25 -07:00
Seth Hillbrand 821b10a37e pcbnew: Drawing tool's crosshairs follow the element
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
2018-10-06 20:27:18 -07:00
Seth Hillbrand 85194989b2 pcbnew: Ensure that dimension tool snaps to anything
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.
2018-10-06 19:55:20 -07:00
Seth Hillbrand 3b27049f6e GRID_HELPER: filter selected items from snap target
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
2018-10-06 19:38:26 -07:00
Seth Hillbrand d669ae043a GRID_HELPER: Standardize grid helper logic to dim
Places dimension tool under same snapping logic as rest of draw tools

Fixes: lp:1796498
* https://bugs.launchpad.net/kicad/+bug/1796498
2018-10-06 09:53:14 -07:00
Seth Hillbrand da3afd4abd GRID_HELPER: Avoid inactive layers when snapping 2018-10-06 09:52:21 -07:00
Seth Hillbrand 776d12c529 GRID_HELPER: Measurement snapping points
Measurements should snap to the points that are used for controlling the
measurement.
2018-10-06 09:29:19 -07:00
Seth Hillbrand f2a49c6bd6 pcbnew: Get anchor from layer when drawing
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
2018-10-06 08:18:31 -07:00
John Beard 86999a2a4d Update testing documentation 2018-10-06 08:46:36 -04:00
Seth Hillbrand 8c56f5b035 pcbnew: Allow deselection when clicking on zone
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.
2018-10-05 21:20:32 -07:00
Seth Hillbrand 502383b759 pcbnew: Adjust selection behavior in highlight net
Prefer non-zones in highlight net in the same way we do for the
selection tool.  Highlight net just has separate logic and was missed
previously.
2018-10-05 21:20:26 -07:00
Seth Hillbrand ceca3e526c view: Do not include hidden items in query
When querying the view, we do not want to including items that are not
on layers that are currently visible.  This routine is currently only
used by the selection tool (pcbnew and gerbview) and the grid helper.
Both expected this logic but were indifferent to the additional items.

Fixes: lp:1796403
* https://bugs.launchpad.net/kicad/+bug/1796403
2018-10-05 16:45:38 -07:00
Seth Hillbrand 4efc8dec88 pcbnew: Skip the full itemlist search when updating
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.
2018-10-05 15:08:25 -07:00
Seth Hillbrand bc02044767 pcbnew: Avoid spinning up thread when routing
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.
2018-10-05 15:04:29 -07:00
Seth Hillbrand 2db3f859f7 GRID_HELPER: Show snap indicator when would snap
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.
2018-10-05 14:33:48 -07:00
Jeff Young 5ce14dad2a Flush out whatever the dialog-is-closing guard was for.
The guard isn't working on GTK (causing eval not to happen on
a kill focus), and I can't remember what issue I put it in to
solve.  I've done a bunch of testing and it appears that we
don't need it, although I'm sure I put it in for something....

Fixes: lp:1793911
* https://bugs.launchpad.net/kicad/+bug/1793911
2018-10-05 20:19:16 +01:00
Jeff Young 9e828e0d94 Don't default Use Netclass Values to on.
Fixes: lp:1795939
* https://bugs.launchpad.net/kicad/+bug/1795939
2018-10-05 15:11:18 +01:00
Jeff Young 9a213207fb Clearer titles for editing board footprints.
Also cleans up the naming on the symbol editor side.
2018-10-05 14:17:58 +01:00
Jeff Young 8015334683 Don't resize hidden columns.
wxGrid columns are hidden by setting their width to 0.  Resizing
them will "unhide" them.

Fixes: lp:1796150
* https://bugs.launchpad.net/kicad/+bug/1796150
2018-10-05 14:17:58 +01:00
Jeff Young 895e187ca0 Add a bit more space for those using larger fonts. 2018-10-05 14:17:58 +01:00
Seth Hillbrand ee676b74d5 pcbnew: Move measure tool to common GRID_HELPER
This removes the last of the Magnetize legacy code from GAL,
standardizing the key bindings and magnetic effects in the GAL canvas
2018-10-04 21:31:57 -07:00
Seth Hillbrand 4c6b84bfdb GRID_HELPER: enable/disable grid in editor with ALT
Apply optional grid while editing
2018-10-04 21:31:28 -07:00
Seth Hillbrand 28c19cb613 GRID_HELPER: Allow grid disable
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
2018-10-04 21:23:50 -07:00
Seth Hillbrand f56b5cf7bd GRID_HELPER: Match layer set when snapping
This allows items to snap to multi-layer target anchors such as vias and
through hole pads.
2018-10-04 21:23:49 -07:00
Seth Hillbrand f8f2af774c GRID_HELPER: Fill out remaining anchor calculations
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
2018-10-04 20:25:13 -07:00
Seth Hillbrand 853b9d06ad pcbnew: Fix snapping while moving on pads
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
2018-10-04 15:53:41 -07:00
Seth Hillbrand 1ff9931333 pcbnew: Remove legacy Magnetize() from GAL picker
Magnetic items handled by GRID_HELPER in GAL.  Also includes the
standard keyboard modifier shift to change magnetic items on/off
2018-10-04 15:48:15 -07:00
Hal Gentz 416e64a334 Spice plot widget: more accurate rendering
Patch modifies the way graphs are displayed: instead of drawing one
point for each X coordinate, there is a line segment joining min and max
values for continuous graphs and all unique points are displayed for
discrete graphs.

Fixes: lp:1674143
* https://bugs.launchpad.net/kicad/+bug/1674143
2018-10-04 22:49:41 +02:00
Maciej Suminski 70c1de3275 Spice simulator: faster graph rendering
Graph rendering takes a lot of time, especially when there is a high number
of points to be drawn. The initial implementation drew all points/lines
even if the the coordinates were duplicates, in the new version duplicated
coordinates are skipped.

Fixes: lp:1674143
* https://bugs.launchpad.net/kicad/+bug/1674143
2018-10-04 22:39:38 +02:00
jean-pierre charras d2585fda50 DIALOG_SHIM: make default style wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER. 2018-10-04 18:03:46 +02:00
Seth Hillbrand 11b45002e1 pcbnew: Code formatting 2018-10-04 08:17:48 -07:00
Seth Hillbrand a4966adb67 pcbnew: Don't call evt->pos for non-mouse events
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.
2018-10-04 07:29:41 -07:00
John Beard 3a9e7a496a Centralise some UI constants, use in hotkey lists
There are lot of places where constants are used in the KiCad UI
as "magic numbers". The most common one is "5", used in many
wxFormBuilder and manual UI constructions as the margin.

This commit provides a place for all UI to look up shared
constants and other functions, to help create a consistent UI using
functions that provide meaning and intent to these magic numbers.
2018-10-04 07:47:21 -04:00
John Beard 0be9667c96 Add read-only option for hotkey list, use for list dialog
This replaces the flat HTML list dialog with a read-only
version of the editor dialog in a pared-down dialog.

Fixes: lp:1778374
* https://bugs.launchpad.net/kicad/+bug/1778374
2018-10-04 07:47:21 -04:00
John Beard 7c2c8d307e Add tooltips to hotkey dialog buttons
THis is done in the generic widget, so other users can
benefit from it.
2018-10-04 07:47:21 -04:00
John Beard 23038b1550 Simplify hotkey editor widget
This is in preparation for making this widget optionally read-only.

Major changes:

* Construct panel in code, not with wxFormBuilder. This make's it
  easier to conditionally construct elements that won't be used
  in a read-only mode (e.g. the buttons).
* Use a generic "button row panel" widget for the buttons, as the
  sizing and layout logic is reusable in nearly all dialogs, and
  it's simplifies layout in the higher-level dialog widget. This
  widget is one example of many possible "reuable widgets".
2018-10-04 07:47:21 -04:00
John Beard 445a9fa963 Put cursor and pan control in libcommon/tool, enable in Gerbview
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
2018-10-04 11:41:06 +02:00
Seth Hillbrand 03e642a8db pcbnew: Implement consistent graphical snapping
This creates a standard snapping framework in the GRID_HELPER class that
allows snapping to items on the same layer as the object being
created/moved as well as consistent toggling of this using the Shift key
modifier.

Fixes: lp:806260
* https://bugs.launchpad.net/kicad/+bug/806260

Fixes: lp:1604616
* https://bugs.launchpad.net/kicad/+bug/1604616
2018-10-03 17:23:56 -07:00
Seth Hillbrand f714d2fa64 pcbnew: draw polygon and element previews on layer
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.
2018-10-03 17:23:56 -07:00
Jeff Young c9ca1013b2 Make ModEdit and LibEdit library tree actions more consistent.
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.
2018-10-03 22:46:41 +01:00
Jeff Young b08766a2fa Scroll Footprint Viewer to selected item when opening. 2018-10-03 22:46:41 +01:00
Seth Hillbrand 6c693f80a7 pcbnew: Fix polygon corner adding in board editor
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
2018-10-03 11:29:02 -07:00
John Beard 3da0d03c36 Centralise utilities for env variables.
This puts generic logic for KiCad environment vars in
one place.

Also updates the DIALOG_CONFIGURE_PATHS help to document
the new KICAD_USER_TEMPLATE_DIR and KICAD_TEMPLATE_DIR.
2018-10-03 11:53:10 -04:00
Seth Hillbrand 6a6d580a1c pcbnew: Improve zone/polygon selection
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
2018-10-03 06:23:35 -07:00
jean-pierre charras 2c0fe8f595 Pcbnew: minor fix: avoid flicker in Layer Manager when closing Pcbnew.
It was due to useless paint events during closing, on some platforms.
2018-10-03 09:46:17 +02:00
Seth Hillbrand 57ceec5606 pcbnew: Allow DRC violations when requested in dp 2018-10-02 14:39:53 -07:00
Jeff Young fb4ae4e218 Update FP editor title after a Save As. 2018-10-02 21:05:14 +01:00
Jeff Young 536451138d Make sure fixes to netlist stuff are done on both sides.
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
2018-10-02 18:18:37 +01:00
Jeff Young afd518d1e8 Better logic for footprint loop.
Fixes: lp:1795288
* https://bugs.launchpad.net/kicad/+bug/1795288
2018-10-01 22:05:47 +01:00
Jeff Young dfe164e0dc Only clear link when adding footprint from library, cache, etc.
Fixes: lp:1792256
* https://bugs.launchpad.net/kicad/+bug/1792256
2018-10-01 19:22:42 +01:00
jean-pierre charras db5386467b Re activate Zone Unfill All command, accidentally removed by a previous commit.
Fixes: lp:1795293
https://bugs.launchpad.net/kicad/+bug/1795293
2018-10-01 09:04:14 +02:00
Seth Hillbrand 89a3d2b451 pcbnew: Force at least one connectivity thread
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
2018-09-30 12:13:57 -07:00
Jeff Young 7bcb5fd720 Make app names and tooltips consistent.
Fixes: lp:1795236
* https://bugs.launchpad.net/kicad/+bug/1795236
2018-09-30 17:46:45 +01:00
Jeff Young f06bf81651 Don't deselected items that have been deleted.
De-referencing freed memory is never a good idea.

Fixes: lp:1795195
* https://bugs.launchpad.net/kicad/+bug/1795195
2018-09-30 15:47:18 +01:00
Seth Hillbrand ef6f7e96f3 pcbnew: Handle SEGZONE in GAL
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
2018-09-29 15:09:15 -07:00
Seth Hillbrand b3a5e08c2f pcbnew: Rename PCB_ZONE_T and remove from connectivity
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.
2018-09-29 15:09:15 -07:00
Seth Hillbrand a81e3c2b13 pcbnew: Avoid double-separators in context menu 2018-09-29 15:09:15 -07:00
Jeff Young b5fd9e830f A bit more safety around disabling the event handler. 2018-09-29 23:05:43 +01:00
Jeff Young 2eea45b50c Go back to earlier strategy for net selector popup.
This version makes use of lots of things learned going down the
other rat hole.  Avoiding the wxComboFocusHandler is key, as well
as specifying using the AltPopupWindow.

The key handler is still tricky with respect to those platforms
that use native controls, but the starting-key strategy is similar
to the one used with wxGrid text editors.
2018-09-29 22:07:31 +01:00
Jeff Young 3c2aafd7b7 Move Edit Symbol References to standard text/button control. 2018-09-29 22:07:31 +01:00
Jeff Young b49ca04355 Remove max length on layer names.
Fixes: lp:1745587
* https://bugs.launchpad.net/kicad/+bug/1745587
2018-09-29 22:07:31 +01:00
jean-pierre charras 26838c6800 Pcbnew: Crash after running external plugin
Happens only in Opengl mode.
So enforce controls in 3 group function: DrawGroup, ChangeGroupColor, ChangeGroupDepth.

Fixes: lp:1795044
https://bugs.launchpad.net/kicad/+bug/1795044
2018-09-29 12:58:47 +02:00
Jeff Young 5843b1a6a1 Possible solutions to <enter> and keyboard activation on GTK. 2018-09-29 10:28:19 +01:00
jean-pierre charras 094f340359 Eeschema: Opening "Edit Symbol Fields" dialog crashes Eeschema
Fixes: lp:1795088
https://bugs.launchpad.net/kicad/+bug/1795088
2018-09-29 10:08:29 +02:00
Jeff Young 3f6819e592 Improve visiblity of net selector popup. 2018-09-28 22:39:42 +01:00
John Beard 31c217426f Dxf: Fix leaks in DL_Dxf::test
This function is never actually used, but the resource leaks
set off static analysers.

Fixes: coverity:131460-131465
2018-09-28 14:51:28 -04:00
John Beard 96d06929ea QA: Fix ownership of new CPolyline in qa_shape_poly_set_refactor
CPolyLine::Chamfer returns a newly allocated object. The current
test of this doesn't take ownership, leading to memory leaks.

Use a std::unique_ptr to:

* Fix the leak, and
* Document the expected semantics of the interface in the test

Fixes coverity:183869
2018-09-28 14:42:55 -04:00
Jeff Young 0a43584c5c Another attempt to catch enter on GTK, and better button processing. 2018-09-28 19:36:50 +01:00
John Beard 704615721f Prevent segfault when undoing or resetting non-hotkey rows
This is caused by:

* Not checking the hotkey data is not null when performing a
  hotkey action
* Allowing hotkey actions on non-hotkey rows.

This fixes both of these, and adds an assert to warn if someone
does manage to fire a hotkey action on a non-hotkey row (but it
won't crash).

Fixes: lp:1794756
* https://bugs.launchpad.net/kicad/+bug/1794756
2018-09-28 08:28:30 -04:00
John Beard a294e8d6c4 Check for conflicts when reseting/undoing hotkey changes
It was possible to get conflicting hotkeys when undoing and resetting hotkeys
to defaults.

This uses the same logic as when setting hotkeys to avoid conflcits in these
other two cases.

Fixes: lp:1794730
* https://bugs.launchpad.net/kicad/+bug/1794730
2018-09-28 08:28:22 -04:00
John Beard 3283bd9fdc Mark modified hotkeys in the hotkey editor
THis uses a simple " *" suffix, as the wxTreeListCtrl-derivative
widget doesn't allow easy access to things like font style.
2018-09-28 08:28:16 -04:00
John Beard 9f38b70491 Add a filter box to hotkey dialog and filter using it
This uses a simple case-insensitive partial match, which is
a good start for the relatively limited number of hotkeys
generally present.
2018-09-28 08:28:04 -04:00
John Beard 4f0166e064 Add some hotkey store tests
This also adds some mocks to the libcommon test executable, which
hopefully will allow it to work with more of libcommon.
2018-09-28 08:27:57 -04:00
John Beard 1f2c8fa698 Separate storage at iteration of hotkeys from the HK list widget
This separates the "ground truth" store of hotkeys from what is shown
in the dialog. This will allow us to filter the displayed hotkeys
while keeping the same underlying data structures.

Now, the UI data items interact with an intermediate set of data, which
represents the "original" hotkey data, and the "changed" data. The
ultimate aim here is to allow UI elements to come and go, but the
hotkeys that are "in-edit" are preserved.

This also allows us to abstract some bookkeeping complexity
out of the WIDGET_HOTKEY_LIST class into a separate non-GUI
class.
2018-09-28 08:27:51 -04:00
Jeff Young 3927dc5820 More fixes for event handling in net selector. 2018-09-28 00:23:22 +01:00
Jeff Young 19b1ae35ce Don't assume GetFlags() != 0 means it's being edited.
It could just mean it's selected, highlighted or brightened.

Fixes: lp:1794624
* https://bugs.launchpad.net/kicad/+bug/1794624
2018-09-27 22:18:13 +01:00
Seth Hillbrand 317ca8e64d pcbnew: Do not allow drag to violate DRC without permission
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
2018-09-27 13:08:22 -07:00
Jeff Young 453dadbc3c Use EventFilter strategy on GTK; leave FocusLost for MSW & OSX. 2018-09-27 20:42:59 +01:00
Jeff Young 136525b870 Decrease list-item padding for GTK. 2018-09-27 18:58:32 +01:00
Jeff Young 6fdfd0932e Use newer wxWidgets calls (old ones aren't available on MSW). 2018-09-27 18:53:46 +01:00
Jeff Young fac5fcb476 Don't draw the pad preview highlighted. 2018-09-27 17:46:51 +01:00
Jeff Young 5703060d87 Turn off escaping names for now.
Fixes: lp:1794816
* https://bugs.launchpad.net/kicad/+bug/1794816
2018-09-27 17:21:49 +01:00
Jeff Young 50b96b406f More net selector fixes. 2018-09-27 16:58:12 +01:00
Jeff Young e456ecd0a1 Calculate column widths based on all data, not just shown data.
Also caps the calculated width at 1/3 of the default dialog width.

Fixes: lp:1794625
* https://bugs.launchpad.net/kicad/+bug/1794625
2018-09-27 16:57:25 +01:00
Jeff Young 3ae049c729 Address some MSW issues in net selector. 2018-09-27 14:44:42 +01:00
Jeff Young f10635e8be More work on arbitrary characters in references, etc. 2018-09-27 14:44:42 +01:00
jean-pierre charras 1685af8425 dialog_track_via_properties_base.cpp: fix a few wxWidgets alerts. 2018-09-27 13:36:50 +02:00
jean-pierre charras 4a553b6423 NET_SELECTOR fix: remove SetHint() because it does not work on Windows, that prevents filtering.
Replaced by a wxStaticText
Minor cosmetic fixes (on Windows)
2018-09-27 13:19:09 +02:00
jean-pierre charras c8a89ee25a Remove dead code. 2018-09-27 13:17:48 +02:00
Jeff Young 521183a587 Work in progress to allow arbitrary chars in references, etc. 2018-09-27 11:56:51 +01:00
Jeff Young eaf3d48260 Simplification of the net selector code to fix GTK issues. 2018-09-27 11:52:58 +01:00
Jeff Young d1e64919a7 Fix for GTK net selector popup border. 2018-09-26 22:50:27 +01:00
Jeff Young 6764cda34d Fix issues with pad locking.
Fixes: lp:1794548
* https://bugs.launchpad.net/kicad/+bug/1794548
2018-09-26 21:57:35 +01:00
Jeff Young f7ffbb17bb Another try at the net selector popup. 2018-09-26 21:57:35 +01:00
Seth Hillbrand 65678b223a pcbnew: Fixup for 491098af3
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.
2018-09-26 08:54:09 -07:00
John Beard 04a1084549 QA: Place UTF8 tests under Boost unit tests
This transfers the old #if'd-out tests in utf8.cpp into a
proper Boost unit test in /qa (run on `make test`).
2018-09-26 09:32:26 -04:00
John Beard 9c78ef5784 QA: Make a generic common test suite
* Renames /qa/common to /qa/qa_utils, as it is not to do with /common
* Renames /qa/geometry to /qa/common
* Put existing geometry tests into a subdirectory of /qa/common, to
  echo the layout of the main tree.

The intention is to provide a place to put tests of other libcommon
code in the /qa/common suite.
2018-09-26 09:32:18 -04:00
Wayne Stambaugh b487a8c70e Pcbnew: fix track and via properties dialog control alignment issues. 2018-09-26 09:15:58 -04:00
Seth Hillbrand 491098af35 pcbnew: Deselect all items in a delete commit at once
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)
2018-09-26 05:41:14 -07:00
Baranovskiy Konstantin f68581d463 Pcbnew: fix column width in Nets dialog.
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.
2018-09-26 04:26:09 -07:00
Jeff Young 86b654e493 Hook up 3D viewer to common preferences.
Also removes nanny limits on text sizes.

Fixes: lp:1794093
* https://bugs.launchpad.net/kicad/+bug/1794093

Fixes: lp:1794345
* https://bugs.launchpad.net/kicad/+bug/1794345
2018-09-25 20:47:03 +01:00
Jeff Young dfd028a66a Don't gray out non-enabled layers in layers setup panel.
Fixes: lp:1794215
* https://bugs.launchpad.net/kicad/+bug/1794215
2018-09-25 20:47:03 +01:00
Baranovskiy Konstantin 12e38bc5fa Pcbnew: make units in ViaSizeSelectBox translatable. 2018-09-25 12:27:06 -07:00
Baranovskiy Konstantin 682cb3abe1 Pcbnew: make "Swap Layers" title translatable. 2018-09-25 12:18:50 -07:00
Jeff Young 3cc6e0cf02 Fixes to NET_SELECTOR event loop for non-OSX platforms.
Don't assume events are always Pending().  Other platforms handle
idle events differently.
2018-09-25 17:56:38 +01:00
Jeff Young 37f7faf433 Move lock checks to CLIENT_SELECTION_FILTER.
Also checks render item visibility as well as layer visibility
when making selections.

Fixes: lp:1066220
* https://bugs.launchpad.net/kicad/+bug/1066220

Fixes: lp:1541756
* https://bugs.launchpad.net/kicad/+bug/1541756
2018-09-25 17:56:38 +01:00
Seth Hillbrand 686f1b878b Prevent re-testing DRC on zones
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.
2018-09-25 09:24:34 -07:00
Seth Hillbrand b1d44ed415 Revert "Don't double-check all zones."
This reverts commit b842e4556d.

When a specific zone is tested, we need to iterate over all other zones
on the board.
2018-09-25 08:48:22 -07:00
Seth Hillbrand ee465fb23c pcbnew: Fixup for edde02481 to enable aux axis
Correcting edde02481 which had side effects to
efdbc91e42 while dragging a line but not a
zone.
2018-09-24 14:29:23 -07:00
Seth Hillbrand edde02481e pcbnew: Fix alignment with off-grid drag
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
2018-09-24 14:07:30 -07:00
Wayne Stambaugh 282e37b2bf Pcbnew: change step export dialog action button text.
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
2018-09-24 14:57:02 -04:00
Seth Hillbrand 618374db88 eeschema: Re-add auto-wire removal
Somewhere during v5 rc cycle, the trimming of wires laid over simple
components was removed.  The wires were still removed as soon as the
user moved the component again.  This corrects the first behavior to
intended action for simple components.

Fixes: lp:1794019
* https://bugs.launchpad.net/kicad/+bug/1794019

(cherry picked from commit 9831a14ef3)
2018-09-24 08:31:50 -07:00
Simon Richter 1253020a8b Add missing header 2018-09-24 10:47:15 -04:00
Jeff Young c95c6c8db7 Scroll library into view after open from Kicad app.
Fixes: lp:1793621
* https://bugs.launchpad.net/kicad/+bug/1793621
2018-09-24 15:46:45 +01:00
Jeff Young 533b26e8a1 Add hotkey for viewing symbol datasheet.
Also fixes a bug when there are multiple datasheets to choose from.

Fixes: lp:1793978
* https://bugs.launchpad.net/kicad/+bug/1793978
2018-09-24 15:46:45 +01:00
Jeff Young efefbf0fa0 Fix typo for updating library trees.
Fixes: lp:1794087
* https://bugs.launchpad.net/kicad/+bug/1794087
2018-09-24 15:46:45 +01:00
Wayne Stambaugh 3c86bc951a Eeschema: fix yet another lock file issues.
Reset lock file when saving a schematic sheet to a different file name.
This prevents a file is already open error from being displayed when
opening the original file.

Fixes lp:1788507

https://bugs.launchpad.net/kicad/+bug/1788507
2018-09-24 08:59:03 -04:00
jean-pierre charras 6a02f788fd Excellon drill file exporter: minor enhancements. 2018-09-24 13:49:46 +02:00
jean-pierre charras 12ed6ab9e3 Excellon drill file exporter: activate routing mode for oval holes. 2018-09-24 13:12:48 +02:00
jean-pierre charras 2f4f623a31 Pcbnew, Excellon drill file generator: Oval holes: add a routing mode G01 command.
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.
2018-09-24 13:12:48 +02:00
jean-pierre charras 4136aca221 Gerbview: Excellon drill files reader: add a better support of routing mode.
Previously, the M and G00, G01, G02 and G03 commands were read, but nothing was actually done.
The current support is a bit rough, but it allows reading some drill files with routing commands.
2018-09-24 13:12:47 +02:00
jean-pierre charras b70d0f43b6 Fix minor compil warnings. 2018-09-24 13:12:47 +02:00
Tomasz Włostowski f16f0fc215 pcbnew: intermittent fix for crash on save after undoing board update. 2018-09-24 09:27:55 +02:00
Jeff Young f3c6e1fb62 Change Position Relative To to use anchor, not centroid.
Fixes: lp:1793984
* https://bugs.launchpad.net/kicad/+bug/1793984
2018-09-24 00:42:56 +01:00
Jeff Young 9eb574015c Fix typo in UpdateNetlist() which was making a real mess of things.
Fixes: lp:1793987
* https://bugs.launchpad.net/kicad/+bug/1793987
2018-09-23 23:51:13 +01:00
Jeff Young 4b493e45eb Don't consider non-tracks when seeing if we can do a router drag.
Fixes: lp:1793979
* https://bugs.launchpad.net/kicad/+bug/1793979
2018-09-23 23:51:13 +01:00
Jeff Young 66848b9334 Show pads when parent footprint is selected.
Fixes: lp:1670090
* https://bugs.launchpad.net/kicad/+bug/1670090
2018-09-23 23:51:13 +01:00
Seth Hillbrand 518b53f78c pcbnew: Cancel highlight with ESC
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
2018-09-23 15:09:18 -07:00
Seth Hillbrand e0316af69c pcbnew: Prevent redo while moving items
Fixes: lp:1793948
* https://bugs.launchpad.net/kicad/+bug/1793948

(cherry picked from commit c5c89fd216)
2018-09-23 06:03:41 -07:00
Seth Hillbrand ae13e441af pcbnew: Yield in GTK for redraw
GTK uses a level of cooperative multitasking when dealing with
secondary event loops.  This gives the wm enough leeway to process the
redraw before returning to the secondary loop
2018-09-22 19:38:42 -07:00
Jeff Young cbce4d7663 Work around a stupid assert in GTK wxGUIEventLoop::Dispatch() 2018-09-22 19:38:42 -07:00
Jeff Young 0309228276 Don't allow drawing to a zero-height or zero-width GAL canvas.
Fixes: lp:1793913
* https://bugs.launchpad.net/kicad/+bug/1793913
2018-09-22 22:06:40 +01:00
Maciej Suminski 85ef058458 Spice simulator: change gain units to dBV 2018-09-22 19:05:04 +02:00
Maciej Suminski e6f2c49eae Spice model editor: support for JFET models 2018-09-22 19:05:01 +02:00
Maciej Suminski f2f6dffd16 Refactored logic in Spice model editor dialog
- Removed redundant enums
- Stored Spice model description in an array
- Made code generic by using the model description array
2018-09-22 19:04:54 +02:00
Jeff Young 458af25282 Turn problematic code off for now.... 2018-09-22 17:54:59 +01:00
Jeff Young 4edf18b023 Attempt to fix Linux build issue. 2018-09-22 17:41:52 +01:00
Seth Hillbrand 525e26eb82 kicad2step: Provide floats separated
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)
2018-09-22 08:52:46 -07:00
Jeff Young dd9b0c2dc6 Select assigned footprint in right panel.
Fixes: lp:1793294
* https://bugs.launchpad.net/kicad/+bug/1793294
2018-09-22 16:23:13 +01:00
Jeff Young a1bcc4ba1e Don't start dragging until Update PCB dialog has been closed.
Fixes: lp:1793828
* https://bugs.launchpad.net/kicad/+bug/1793828
2018-09-22 16:23:13 +01:00
Jeff Young 5974899fa5 Clean up file locations and names. 2018-09-22 16:23:13 +01:00
Jeff Young 666da3849b Make esc dismiss net and layer selector popups. 2018-09-22 16:23:13 +01:00
Wayne Stambaugh e5ff4f8582 Pcbnew: fix lock file bug on windows.
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
2018-09-22 08:20:04 -04:00
Seth Hillbrand 969e85daa3 pcbnew: Standardize zone fills threading
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.
2018-09-21 12:44:20 -07:00
Seth Hillbrand f8784f30a8 Removing OpenMP
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
2018-09-21 12:44:20 -07:00
Fabio Rossi 21485e6f24 kicad_curl should be built only with BUILD_GITHUB_PLUGIN enabled 2018-09-21 12:44:20 -07:00
Jeff Young 42ab116bc2 Rewrite the NET_SELECTOR combobox in the hopes of better platform support. 2018-09-21 20:40:04 +01:00
Jeff Young 9a5334478b Careful of net[0]; it's "No Net", not a real net.
Fixes: lp:1792235
* https://bugs.launchpad.net/kicad/+bug/1792235
2018-09-21 20:40:04 +01:00
Simon Richter e985f797c3 Return reference to current object from operator= 2018-09-21 05:03:30 -07:00
jean-pierre charras 0be52a68fe Update PCB from schematic or Read netlist doesn't add new footprints when the board has no existing footprints (empty board)
Fixes: lp:1793396
https://bugs.launchpad.net/kicad/+bug/1793396
2018-09-21 10:14:10 +02:00
Seth Hillbrand 8c3a82e526 Code cleanup: Fixing assignment operators 2018-09-20 20:15:47 -07:00
Seth Hillbrand c0f067bf90 pcbnew: Remove OpenMP
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
2018-09-20 15:40:02 -07:00
Jeff Young 3e45483798 Separate edge.cuts and courtyards in ModEdit default values.
Fixes: lp:1788876
* https://bugs.launchpad.net/kicad/+bug/1788876
2018-09-20 23:30:13 +01:00
Jeff Young 04534c83e0 Allow marker selection in high-contrast mode.
Fixes: lp:1793357
* https://bugs.launchpad.net/kicad/+bug/1793357
2018-09-20 21:54:47 +01:00
Seth Hillbrand 47fac8a259 Removing some unused code 2018-09-20 12:52:53 -07:00
Martin Aberg 27d57d9191 Generate PYTHONPATH from CMake information
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)
2018-09-20 12:04:04 -07:00
Seth Hillbrand d139a49690 3d-viewer: corrected rrect zero-length radius
Previous commit mistakenly included the full clearance for the rounded
rectangle circle.  The CFILLEDCIRCLE2d takes the radius rather than the
diameter.
2018-09-20 08:52:41 -07:00
Seth Hillbrand 8efcf81cf5 3d-viewer: Approximate 0-length element is rrect
Apply same logic of using a filled circle to represent a zero-length
element as a filled circle with radius of the line.

Fixes: lp:1785823
* https://bugs.launchpad.net/kicad/+bug/1785823
2018-09-19 20:19:37 -07:00
Jeff Young 618182dcd6 Use pin number sorting algorithm in pin table.
Fixes: lp:1793180
* https://bugs.launchpad.net/kicad/+bug/1793180
2018-09-19 22:23:18 +01:00
Jeff Young 6be2733285 Fix a few more no-long-necessary non-copper layer restrictions. 2018-09-19 22:23:18 +01:00
Jeff Young 2f2cfe423e A bit of added safety regarding edit vs. display flags. 2018-09-19 22:23:18 +01:00
Wayne Stambaugh 3f7e5d2ce4 Eeschema: fix minor bug in block handler.
Under certain conditions, it was possible for the block handler to be
entered with no mouse capture callback which would raise a rather
cryptic error message to the user.  This should have always been an
assertion so users will not see this issue in release builds.

Fixes lp:1791839

https://bugs.launchpad.net/kicad/+bug/1791839
2018-09-19 15:32:51 -04:00
Wayne Stambaugh ed94f2c5e0 Pcbnew: fix minor bug in find dialog.
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
2018-09-19 12:31:17 -04:00
Maciej Suminski cd5b1c2885 set_wxMenuIcon: prevent null pointer dereference 2018-09-19 14:07:50 +02:00
Jeff Young ebb74fcc2b Honour diff-pair dimension changes while routing. 2018-09-18 20:37:00 +01:00
Jeff Young e485cee384 Honour ModEdit layer colors in browser and previews.
Fixes: lp:1793141
* https://bugs.launchpad.net/kicad/+bug/1793141
2018-09-18 19:14:35 +01:00
Jeff Young 9f068d66a8 Don't use diff-pair gap as a clearance.
Fixes: lp:1789690
* https://bugs.launchpad.net/kicad/+bug/1789690
2018-09-18 17:44:53 +01:00
Jeff Young 9c708c6177 Use DP netclass values when custom or predefined are not selected.
Fixes: lp:1780670
* https://bugs.launchpad.net/kicad/+bug/1780670
2018-09-18 17:44:53 +01:00
Seth Hillbrand 8999f4604f 3d-viewer: Require simplified polygons
3d viewer requires simplified polygons not just for triangulation but
also for its own internal routines.

Fixes: lp:1793085
* https://bugs.launchpad.net/kicad/+bug/1793085
2018-09-18 09:35:30 -07:00
Maciej Suminski 40a3b4a533 GERBVIEW_RENDER_SETTINGS: verify item type
Not all items displayed by Gerbview are GERBER_DRAW_ITEMs (e.g. WORKSHEET_VIEWITEM),
so appropriate checks have been added.
2018-09-18 15:18:55 +02:00
Seth Hillbrand adb89afe6c Allow SELECTED for single edits
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.
2018-09-18 03:52:15 -07:00
jean-pierre charras 7372acdaa5 Fix:Step export not working when special characters (non UTF7) in filename or path
Fixes: lp:1785191
https://bugs.launchpad.net/kicad/+bug/1785191
2018-09-18 10:24:23 +02:00
Seth Hillbrand 9cafe65e84 pcbnew: Allow user-setting rounded rectangle radius
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
2018-09-17 15:59:53 -07:00
Seth Hillbrand 9e33d38cd5 unit_binder: allow updates without triggers
Adds a helper function to allow unit binder calls that change a value
but shouldn't trigger wxevents
2018-09-17 15:55:22 -07:00
Seth Hillbrand 49735c219b pcbnew: Don't merge zones with different params
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
2018-09-17 12:17:22 -07:00
Seth Hillbrand 44b4f8a104 pcbnew: prevent different keepout zones from merging
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
2018-09-17 11:54:27 -07:00
Seth Hillbrand 7470d5ba98 pcbnew: retain selection between edits
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
2018-09-17 10:58:42 -07:00
Jeff Young 0b39b68d37 Generate error dialog when a symbol library can't be found.
Fixes: lp:1789047
* https://bugs.launchpad.net/kicad/+bug/1789047
2018-09-17 18:01:08 +01:00
Jeff Young 99cb1471c3 Added safety for POINT_EDITOR.
Fixes: lp:1786349
* https://bugs.launchpad.net/kicad/+bug/1786349
2018-09-17 18:01:08 +01:00
Jeff Young cd7ebaf9ee Generate duplicate footprint errors when reading netlist.
Fixes: lp:1682970
* https://bugs.launchpad.net/kicad/+bug/1682970
2018-09-17 18:01:08 +01:00
Jeff Young a53b163456 Use resize() instead of reserve()/fill() so hardeners don't choke.
Fixes: lp:1789283
* https://bugs.launchpad.net/kicad/+bug/1789283
2018-09-17 18:01:08 +01:00
Jeff Young a40ab768fc Allow deletion of non-Reference/non-Value module text items.
Fixes: lp:1781226
* https://bugs.launchpad.net/kicad/+bug/1781226
2018-09-17 18:01:08 +01:00
Wayne Stambaugh aacb3f9075 Update translators list to include simplified Chinese translator. 2018-09-17 10:12:03 -04:00
Seth Hillbrand dd228b60a7 pcbnew: Allow removing corners from graphical polygons
( cherry-picked from 22df4e301 )

Fixes: lp:1792712
* https://bugs.launchpad.net/kicad/+bug/1792712
2018-09-16 10:27:07 -07:00
jean-pierre charras d4e4359289 pcb_parser.cpp: allows 0 width line thickness for circles in custom shaped pads.
the commit 1100ccb032 broke DRAWSEGMENT filled circles (line width = 0) used only in custom pads.

Fixes: lp:1792791
https://bugs.launchpad.net/kicad/+bug/1792791
2018-09-16 15:21:18 +02:00
Seth Hillbrand 9523b26472 pcbnew: Fix dragging snap to items
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 )
2018-09-15 20:22:34 -07:00
Jeff Young 2b634004ee Track widths and via sizes are in mils.
Fixes: lp:1792748
* https://bugs.launchpad.net/kicad/+bug/1792748
2018-09-15 22:46:04 +01:00
Jeff Young e45afdb912 Revert absolute-path asserts and fix off-by-one bug.
Fixes: lp:1767582
* https://bugs.launchpad.net/kicad/+bug/1767582
2018-09-15 22:36:09 +01:00
Jeff Young ae5183f614 Add test for duplicate footprints to Update from PCB. 2018-09-15 20:06:42 +01:00
Jeff Young 02a3f83040 Implement poor-man's RTTI for use over KiWAY.
Fixes: lp:1777883
* https://bugs.launchpad.net/kicad/+bug/1777883
2018-09-15 20:06:42 +01:00
Jeff Young 872e1e6532 Remove asserts for absolute paths.
You can, for instance, specify relative paths via the command
line.

Fixes: lp:1767582
* https://bugs.launchpad.net/kicad/+bug/1767582
2018-09-15 20:06:42 +01:00
Jeff Young 3e61a32fbe Attempt to use envVars when adding new libraries.
Fixes: lp:1785441
* https://bugs.launchpad.net/kicad/+bug/1785441
2018-09-15 20:06:42 +01:00
Jeff Young 4854d92c73 Subtract out unconnected net when reporting number of nets.
Fixes: lp:1792235
* https://bugs.launchpad.net/kicad/+bug/1792235
2018-09-15 20:06:42 +01:00
Seth Hillbrand cf2980e1b2 pcbnew: Add corners in polygons
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 )
2018-09-15 10:02:58 -07:00
Seth Hillbrand efdbc91e42 pcbnew: snap final points to grid
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 )
2018-09-15 09:53:52 -07:00
jean-pierre charras b60c368b3c DXF import: fix incorrect import of arcs.
The new dxflib uses degrees, not radians for angles.

Fixes: lp:1792413
https://bugs.launchpad.net/kicad/+bug/1792413
2018-09-15 18:18:33 +02:00
Wayne Stambaugh cac7479e33 Eeschema, fix broken instances of symbols in rescue dialog.
The symbol library table rescue candidate was only using the item name
of the library ID object which was being compared to the fully formatted
library ID causing a comparison failure so no instances of any rescued
symbols was shown in the dialog.

Fixes lp:1791805

https://bugs.launchpad.net/kicad/+bug/1791805
2018-09-14 17:42:14 -04:00
Wayne Stambaugh af2dcd61bb Fix build error against head of wxWidgets master branch.
The wxTreeCtrl header file wx/treectrl.h needs to be included in
common/widgets/paged_dialog.cpp.
2018-09-14 10:49:54 -04:00
Jeff Young 243b05b2c3 Fix range-based reference formatter.
Fixes: lp:1792483
* https://bugs.launchpad.net/kicad/+bug/1792483
2018-09-14 13:05:13 +01:00
jean-pierre charras 271fb7fed4 Make the color picker dialog translatable
Fixes: lp:1792556
https://bugs.launchpad.net/kicad/+bug/1792556
2018-09-14 13:34:53 +02:00
Jeff Young e3f74646b9 Allow measure tool to survive zoom and pan.
Fixes: lp:1792232
* https://bugs.launchpad.net/kicad/+bug/1792232
2018-09-14 11:00:13 +01:00
Jeff Young a5e2ddd65a Don't save footprint when it's renamed; wait for the user to save.
Fixes: lp:1792243
* https://bugs.launchpad.net/kicad/+bug/1792243
2018-09-14 10:21:45 +01:00
Jeff Young 0f9ded9563 Space out placed footprints with some padding.
Fixes: lp:1788917
* https://bugs.launchpad.net/kicad/+bug/1788917
2018-09-14 10:21:45 +01:00
Jeff Young 4d6cd52ffc Fix some tooltips.
Fixes: lp:1792256
* https://bugs.launchpad.net/kicad/+bug/1792256
2018-09-14 10:21:45 +01:00
Jeff Young 3f23e9ac46 Don't use nullprt for a dialog's parent.
Fixes: lp:1791561
* https://bugs.launchpad.net/kicad/+bug/1791561
2018-09-14 10:21:45 +01:00
Jeff Young 3f1525f268 Bump up number of items allowed in Clarify Selection menu.
Fixes: lp:1792146
* https://bugs.launchpad.net/kicad/+bug/1792146
2018-09-14 10:21:45 +01:00
Maciej Suminski b39bde0f0c Specify string size when creating wxString from const char*
wxString constructor will determine string length using strlen() when it
is not explicitly specified, but there is no termination byte added when
reading file contents to 'buffer' variable.
2018-09-14 10:13:45 +02:00
Jeff Young e5e1a315f1 Keep name & value in sync for library items.
Also fixes library reference highlighting from board footprints.

Fixes: lp:1792243
* https://bugs.launchpad.net/kicad/+bug/1792243

Fixes: lp:1792256
* https://bugs.launchpad.net/kicad/+bug/1792256
2018-09-13 16:41:23 +01:00
Jeff Young 10a032abdb Remove limit for number of errors reported when annotating.
Fixes: lp:1785714
* https://bugs.launchpad.net/kicad/+bug/1785714
2018-09-13 16:41:23 +01:00
Jeff Young 0167ff880c Don't attempt to move bitmaps from anchor point.
It works poorly for large bitmaps, and they're unlikely to have
well-defined anchor points anyway.

Fixes: lp:1787964
* https://bugs.launchpad.net/kicad/+bug/1787964
2018-09-13 16:41:23 +01:00
jean-pierre charras ab9288235c Fix compil warning 2018-09-13 09:04:58 +02:00
jean-pierre charras df5aafc481 3D viewer: Better axis rotation when selecting "Bottom view"
It allows keeping texts on bottom side readable (rotation similar to the Flip board view in board editor)
2018-09-13 09:03:58 +02:00
Seth Hillbrand 3ebba6cbe1 pcbnew: Limit zone simplification
Commit 73c229714 was a bit of a sledgehammer for the associated problem
of degenerate points.  This commit replaces that one by only performing
additional simplification of the zone polygons on those polygons that
fail our initial triangulation attempt.
2018-09-12 15:28:13 -07:00
Seth Hillbrand a04ef37d67 pcbnew: Parallelize initial board triangulation
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.
2018-09-12 15:28:13 -07:00
Jeff Young ba8647f676 Fix compiler warning. 2018-09-12 21:39:41 +01:00
Jeff Young b43d0a0ed5 Add file missing from last commit. 2018-09-12 21:39:26 +01:00
Jeff Young cbc83c98bc Make sure Save As and Export use board footprint when selected.
Fixes: lp:1792207
* https://bugs.launchpad.net/kicad/+bug/1792207
2018-09-12 21:27:03 +01:00
Jeff Young 23726116ee Revert code that got accidentally committed.
(This didn't fix the problem anyway; I had to fix it in our OSX
wxWidgets branch.)

Fixes: lp:1792196
* https://bugs.launchpad.net/kicad/+bug/1792196
2018-09-12 19:34:55 +01:00
Seth Hillbrand c1c89d13ff 3d-viewer: Check for at least 3 segments in circle
Fixes: lp:1792173
* https://bugs.launchpad.net/kicad/+bug/1792173
2018-09-12 19:34:55 +01:00
Jeff Young a46133d64b Replace SetValue() with ChangeValue() to prevent unwanted events.
Fixes: lp:1792070
* https://bugs.launchpad.net/kicad/+bug/1792070
2018-09-12 19:34:55 +01:00
Seth Hillbrand ded64aef3d pcbnew: Control cursor capture in microwave tool
Turns off cursor capture when the microwave tool is not actively drawing
a new inductor.

Fixes: lp:1792128
* https://bugs.launchpad.net/kicad/+bug/1792128
2018-09-12 09:11:48 -07:00
Jeff Young 9b50b94069 Move OnUpdateUI event to dialog.
Fixes: lp:1792096
* https://bugs.launchpad.net/kicad/+bug/1792096
2018-09-12 14:01:36 +01:00
Jeff Young 806b1fc63d Fix bugs to enable read-only grid cells to be copied.
Fixes: lp:1791129
* https://bugs.launchpad.net/kicad/+bug/1791129
2018-09-12 14:01:36 +01:00
Jeff Young 8b064e1ee2 Use zone outline for instersection when it isn't filled.
Keepout zones, in particular, are never filled.

Fixes: lp:1791965
* https://bugs.launchpad.net/kicad/+bug/1791965
2018-09-12 14:01:35 +01:00
Jeff Young cbb3492d98 Standardize Footprint Viewer and Footprint Browser.
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
2018-09-12 14:01:35 +01:00
Maciej Suminski f5de8cd3e1 Fix a possible out-of-bounds access in WX_GRID::SetTable() 2018-09-12 10:53:16 +02:00
Maciej Suminski 2c217499b5 Eagle SCH importer: fix slash characters when fixing symbol names
Even though slash is a valid character in symbol names, it is a revision
separator, but is not the case with Eagle symbol names.

Fixes: lp:1791653
* https://bugs.launchpad.net/kicad/+bug/1791653
2018-09-12 10:13:13 +02:00
Maciej Suminski c120ae9e9d kicad2step: Implement overwrite protection, handle 'force overwrite' flag
Fixes: lp:1791826
* https://bugs.launchpad.net/kicad/+bug/1791826
2018-09-11 09:23:31 +02:00
Maciej Suminski 7037e422a8 kicad2step: Set correct file extension if no output file is specified 2018-09-11 09:22:10 +02:00
Alexey Chernov 3ad1cd8d57 Adding OpenSSL include directory explicitly
Fixes: lp:1791164
* https://bugs.launchpad.net/kicad/+bug/1791164
2018-09-10 07:14:37 -07:00
Maciej Suminski 4a57541b76 Spice netlist exporter: make directives case insensitive, extra comments 2018-09-10 10:18:22 +02:00
Joël Bertrand 36f2eb1116 Spice netlist exporter: handle .control .. .endc blocks
Spice may include a list of directives that are wrapped with
.control and .endc. Such directives do not have a dot prefix, so
they need to be handled in a special way.

Fixes: lp:1787902
* https://bugs.launchpad.net/kicad/+bug/1787902
2018-09-10 10:18:17 +02:00
Maciej Suminski 18c38bd60e Fixed a shadowed variable warning 2018-09-10 10:06:17 +02:00
Seth Hillbrand 4eece522df kicad: keep KIDIALOG boxes above other windows
Until answered, dialog boxes should remain at the front.  This flag only
works for MSW and GTK.
2018-09-08 21:24:29 -07:00
Seth Hillbrand ec33381064 pcbnew: Keep Yes/No dialogs above the windows
Modal yes/no questions should not be allowed to fall behind other
windows.  They need to be answered before the program continues and
clicking outside of the dialog should not hide dialog itself.

Fixes: lp:1790640
* https://bugs.launchpad.net/kicad/+bug/1790640
2018-09-08 21:09:57 -07:00
Seth Hillbrand 29b4ac7cb8 pcbnew: Fix Eagle import hole offset
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
2018-09-08 20:42:23 -07:00
Seth Hillbrand 21ea31af15 pcbnew: Allow selection of back pads
Pads should be selectable when the respective copper layer is enabled.

Fixes: lp:1789084
* https://bugs.launchpad.net/kicad/+bug/1789084
2018-09-08 17:25:34 -07:00
Seth Hillbrand c9fc20c54e pcbnew: Add Eagle milling layer to edge_cuts
The Eagle milling layer (46) is valid for cutouts on the board.

Fixes: lp:1791284
* https://bugs.launchpad.net/kicad/+bug/1791284
2018-09-08 17:25:24 -07:00
qu1ck c68ad411ff pcbnew: add 3d models properties to swig
Fixes: lp:1758858

https://bugs.launchpad.net/kicad/+bug/1758858
2018-09-08 10:28:55 -04:00
Seth Hillbrand 4d709d2392 pcbnew: adjust default soldermask/dam clearance
The previous clearance values were equivalent to the default copper
clearance, which could cause issues for users who didn't adjust the
values and had alignment errors at the board house.  New values default
to typical dry film minimums.

( cherry-picked from 2c5154c63 )

Fixes: lp:1786765
* https://bugs.launchpad.net/kicad/+bug/1786765
2018-09-08 06:45:09 -07:00
Seth Hillbrand d3c82b0b57 kicad2step: limit small segment add/remove
The addition of very small segments in OCE triggers sliver
removal/cleanup in the BREP generation that can get stuck in a very long
loop during STEP export of boards.  These were introduced to ensure
closure of boards with small gaps that were too big for OCE to consider
joined.

Removing the small segments allows STEP export to proceed in a
reasonable time.  This also decreases the default minimum gap size that
kicad2step uses to determine curve matching.  This prevents mis-matching
small curves

Fixes: lp:1784626
* https://bugs.launchpad.net/kicad/+bug/1784626
2018-09-06 18:44:09 -07:00
Seth Hillbrand e3924c12ee eeschema: Only allow dragging of draggable items
When expanding the drag item to allow corners, we accidentally picked up
other items in the list.  This limits the items that can be dragged to
only those that are explicitly in the draggable list.

A side effect of this commit is that when converting from move to drag
(with tab), items not in the draggable list will be left in place.

Fixes: lp:1787966
* https://bugs.launchpad.net/kicad/+bug/1787966
2018-09-06 13:44:37 -07:00
Seth Hillbrand a5dd86f411 pcbnew: Set soldermask on NPTH imported from Eagle
Fixes: lp:1773253
* https://bugs.launchpad.net/kicad/+bug/1773253
2018-09-06 09:01:23 -07:00
jean-pierre charras 80b25aa601 Fix incorrect calculations in WORKSHEET_DATAITEM::GetMarkerSizeUi()
It creates a lot of integer overflow in Pcbnew in Debug mode (Legacy mode), although it ha meaning onlt for the Page Layout Editor.
This function should be deprecated when the GAL canvas is used in Page Layout Editor.
2018-09-06 11:48:53 +02:00
Seth Hillbrand 1100ccb032 pcbnew: Set default line width for invalids
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
2018-09-05 16:32:55 -07:00
Seth Hillbrand 73c2297144 triangulation: Fracture/Simplify all polygons
Calls the simplify/fracture polygon code on any polygon prior to
tesselation.  This avoids issues with degenerate polygons where the
degenerate points are not sequential.

Fixes: lp:1790534
* https://bugs.launchpad.net/kicad/+bug/1790534
2018-09-05 15:11:13 -07:00
Damian Wrobel f85b1479aa Fix setting default cmake build type
Changes: Sets default cmake build type before
calling project(). Current version seems to follow
https://cmake.org/pipermail/cmake/2008-September/023808.html
however, it seems to miss the comment that:
"definition of CMAKE_BUILD_TYPE occurs in the PROJECT() command"
which means that setting cmake build type should happend prior
to calling PROJECT().

Fixes: lp:1785719
* https://bugs.launchpad.net/kicad/+bug/1785719
2018-09-05 08:12:03 -04:00
jean-pierre charras bfb0fac015 Minor fixes related to I18n 2018-09-05 13:59:20 +02:00
Maciej Suminski 5993b33010 Relax selection discard rules for footprints with area larger than the viewport
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
2018-09-05 11:26:02 +02:00
jean-pierre charras 99216a76d7 Fix incorrect (empty) strings marked for translation
Empty strings are illegal for I18n tools.
2018-09-04 20:22:07 +02:00
jean-pierre charras 86f5d4e665 Eeschema: fix incorrect/incomplete annotation clearing in duplicate and paste block (happens in complex hierarchy) 2018-09-04 18:46:03 +02:00
jean-pierre charras 181ce46b91 Eeschema: fix incorrect references clearing for shared sheet paths.
Previously, when creating a new instance of a sheet, the full set of references
was cleared.
Moreover, if this sheet has sub-sheets, the annotation was incorrectly handled

Now only (and all) new sheet path(s) created have a reference cleared, as expected.
(new sheet paths can be more than one, if the new instance of the sheet has sub-sheets)

Fixes: lp:1789048
https://bugs.launchpad.net/kicad/+bug/1789048
2018-09-04 12:36:38 +02:00
Maciej Suminski de65ca512f Fixed reference to PCB_EDIT_FRAME in PANEL_SETUP_LAYERS
GetParent() in PANEL_SETUP_LAYERS::TransferDataFromWindow() returns a
wxTreebook pointer, instead of expected PCB_EDIT_FRAME resulting in a
crash.
2018-09-04 12:29:36 +02:00
Franck78 009dfa411f Finish track with 'activate router hotkey'
Fixes: lp:1790552
* https://bugs.launchpad.net/kicad/+bug/1790552
2018-09-04 12:08:40 +02:00
Maciej Suminski dd3d10d9ce Removed stale files related to FreeRoute support
Fixes: lp:1787718
* https://bugs.launchpad.net/kicad/+bug/1787718
2018-09-04 11:54:42 +02:00
Thomas Pointhuber c170e8930b Fix focus bug and possible race-condition for path deletion dialog
Fixes: lp:1788873
* https://bugs.launchpad.net/kicad/+bug/1788873
2018-09-04 08:52:51 +02:00
jean-pierre charras 202b35bc90 Eeschema: Fix incorrect parsing of old schematic files (version 2) for HLabels and GLabels 2018-09-03 19:51:17 +02:00
Seth Hillbrand 1d9c9cd10d pcbnew: Select copper through THT connections
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
2018-09-03 07:44:44 -07:00
jean-pierre charras 0d09128f6c Dialog copper zones: add test for thermal spoke width > zone min thickness.
Fixes: lp:1789929
https://bugs.launchpad.net/kicad/+bug/1789929
2018-09-03 13:57:11 +02:00
jean-pierre charras 27b62c66b3 Remove an unused var. 2018-09-02 10:22:41 +02:00
Seth Hillbrand a6325aab29 Replacing Tesselation
Replaces Poly2Tri with updated code to process polygons faster and more
robustly.  Notably, we can now handle overlapping holes in the polygons,
allowing us to cache the triangulation of complex boards
2018-09-01 19:30:50 -07:00
Thomas Pointhuber 2b59c976f2 Add Insert/Delete button to Tracks and Via setup panel
GRID_TRICKS cannot handle row label events at the moment, so I disabled them.

Fixes: lp:1788877
* https://bugs.launchpad.net/kicad/+bug/1788877
2018-09-01 17:53:49 +01:00
Jeff Young 95a08d0dbc Follow file naming conventions. 2018-09-01 14:05:16 +01:00
Jeff Young 72cf340119 Validate differential pair dimensions.
Fixes: lp:1789293
* https://bugs.launchpad.net/kicad/+bug/1789293
2018-09-01 14:05:16 +01:00
Jeff Young 4174ecf4c3 Only validate via size vs drill if both are specified.
Fixes: lp:1789349
* https://bugs.launchpad.net/kicad/+bug/1789349
2018-09-01 14:05:16 +01:00
Jeff Young 270f81f03d Make fill colour terminology more consistent.
Fixes: lp:1789855
* https://bugs.launchpad.net/kicad/+bug/1789855
2018-09-01 14:05:16 +01:00
Seth Hillbrand 5cd7549e53 pcbnew: Only regenerate BBox if the item is valid
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
2018-08-31 18:46:06 -07:00
Seth Hillbrand 0109641c2f gal: correct layer ordering
Net labels need to be rendered under the selected item.

Fixes: lp:1790016
* https://bugs.launchpad.net/kicad/+bug/1790016
2018-08-30 16:55:48 -07:00
Seth Hillbrand 83e6940592 pcbnew: Correcting commit f84bd0d83 for 5.0/release
Previous commit only functioned correctly in debug mode.  Also cleanup a
left-over debug printf() and revert a changed translated string.
2018-08-30 13:27:32 -07:00
Seth Hillbrand 34b920a74f pcbnew: Fix Eagle UTF8 import error
Implicit convertion from wxString to std::string will use narrow strings
and drop UTF-8.

Fixes: lp:1789311
* https://bugs.launchpad.net/kicad/+bug/1789311
2018-08-30 13:08:21 -07:00
Seth Hillbrand d45946396c pcbnew: Fix loop condition when unhighlighting modules
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
2018-08-30 09:27:42 -07:00
jean-pierre charras 01acc0d9be Remove an unused variable that created a memory leak. 2018-08-30 10:04:04 +02:00
jean-pierre charras 23ec0cda31 Fix use of a deprecated wxGrid function. 2018-08-30 09:07:33 +02:00
Seth Hillbrand 4c862d056c Add Swedish linux program description 2018-08-29 17:24:09 -07:00
Jeff Young c90a3efea2 Change KIDIALOG hashing algorithm to __FILE__ + __LINE__.
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
2018-08-29 23:38:23 +01:00
Jeff Young 9125d7fdb6 Fix typo. 2018-08-29 22:45:45 +01:00
Jeff Young b562ecc5b5 Check for net changing before confirming.
Fixes: lp:1789348
* https://bugs.launchpad.net/kicad/+bug/1789348
2018-08-29 22:43:05 +01:00
Jeff Young a97d2f8cf3 Fix compile error on non-OSX platforms. 2018-08-29 22:32:38 +01:00
Jeff Young 658e387ad4 Slightly better swap layer column names.
Fixes: lp:1789390
* https://bugs.launchpad.net/kicad/+bug/1789390
2018-08-29 22:04:07 +01:00
Jeff Young 12213d994a Re-instate LibEdit cut/copy/paste of symbols.
Fixes: lp:1788975
* https://bugs.launchpad.net/kicad/+bug/1788975
2018-08-29 21:53:59 +01:00
Jeff Young 2e8f2d2850 Allow Export even when libId is empty.
For instance, after an import.

Fixes: lp:1785226
* https://bugs.launchpad.net/kicad/+bug/1785226
2018-08-29 20:08:01 +01:00
Jeff Young f1ef18edcb Fix assert where wxFormBuilder rows disagreed with controls. 2018-08-29 20:08:01 +01:00
Jeff Young 8fe5ff612d Print PCB objects before zones.
Fixes: lp:1785958
* https://bugs.launchpad.net/kicad/+bug/1785958
2018-08-29 20:08:01 +01:00
Jeff Young f611333ea1 Make fast grid switching hotkeys more visible.
Fixes: lp:1787066
* https://bugs.launchpad.net/kicad/+bug/1787066
2018-08-29 20:08:01 +01:00
Jeff Young f470132862 Fix fast grid switching for OSX and Footprint Editor.
Fixes: lp:1787066
* https://bugs.launchpad.net/kicad/+bug/1787066
2018-08-29 20:08:01 +01:00
Jeff Young a8bb5d7308 Improve labels.
First two radio buttons together read "Do not show On pads", which is
of course backwards for the second.
2018-08-29 20:08:01 +01:00
Jeff Young 424905fb61 Fix netclass popups in netclass membership grid. 2018-08-29 20:08:01 +01:00
Jeff Young e55547223e ModEdit Save should save back to board if that's where the FP came from.
Use Save As... if you want to put it in a library.

Fixes: lp:1788924
* https://bugs.launchpad.net/kicad/+bug/1788924
2018-08-29 20:08:01 +01:00
Jeff Young 21eea1f567 Remove HasFocus() checks (which don't work on all platforms) in favour of row highlighting which is visible without focus.
Fixes: lp:1788873
* https://bugs.launchpad.net/kicad/+bug/1788873
2018-08-29 20:08:01 +01:00
Jeff Young f9aaa01329 Don't rebuild component tree when not necessary.
Fixes: lp:1780363
* https://bugs.launchpad.net/kicad/+bug/1780363
2018-08-29 20:08:01 +01:00
Jeff Young 946f4a217d Fix grid sizing for symbol aliases. 2018-08-29 20:08:01 +01:00
Jeff Young 75a4928134 Split edge.cuts and courtyard layer defaults.
Fixes: lp:1788876
* https://bugs.launchpad.net/kicad/+bug/1788876
2018-08-29 20:08:01 +01:00
Jeff Young 895fc0b536 Add a cell editor for paths and use it in Configure Paths. 2018-08-29 20:08:01 +01:00
Jeff Young 030663d847 Tighten up the margin to the right of the layers widget.
Fixes: lp:1788462
* https://bugs.launchpad.net/kicad/+bug/1788462
2018-08-29 20:08:01 +01:00
Jeff Young e16a2ef80a Fix misleading warning regarding replacing library.
Fixes: lp:1788489
* https://bugs.launchpad.net/kicad/+bug/1788489
2018-08-29 20:08:01 +01:00
Jeff Young 00b2c21820 Missed a HIG destructive button separation. 2018-08-29 20:08:00 +01:00
Jeff Young 11f746b53e Give user opportunity to add exported library to lib table.
Fixes: lp:1788490
* https://bugs.launchpad.net/kicad/+bug/1788490
2018-08-29 19:59:02 +01:00
Jeff Young a9c8a7b69c Remove unused warp mouse parameter. 2018-08-29 19:59:02 +01:00
Jeff Young e632816562 Add Save Schematic Sheet As... to eeschema.
Fixes: lp:1748680
* https://bugs.launchpad.net/kicad/+bug/1748680
2018-08-29 19:59:02 +01:00
Jeff Young f9412f0fd4 Implement double-click for other filetypes in project tree.
Fixes: lp:1787207
* https://bugs.launchpad.net/kicad/+bug/1787207
2018-08-29 19:59:02 +01:00
Jeff Young 45bc1b1aff Add single-click editing to grid cells. (Experimental.) 2018-08-29 19:59:02 +01:00
Jeff Young b90a261d5c More safety fixes for uncommitted grid changes. 2018-08-29 19:59:01 +01:00
Seth Hillbrand 2398edda38 pcbnew: Only dp clearance matrix when routing dp
Fixes: lp:1787766
* https://bugs.launchpad.net/kicad/+bug/1787766
2018-08-29 10:26:39 -07:00
jean-pierre charras 020d837de6 Dialog pad properties: fix not working orientation choice in countries using comma as floating point separator.
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
2018-08-29 17:27:50 +02:00
Seth Hillbrand b95aa1aaf7 cvpcb: don't show board-level soldermask
Only show soldermask in cvpcb if it was defined in the footprint or pad,
not the board defaults.
2018-08-28 17:01:48 -07:00
Seth Hillbrand d0ea844557 eeschema: Close ERC before placing components
We have a dialog shim that raises the ERC dialog in front of the
schematic frame, which is useful for keeping the ERC dialog visible
during debugging.  But mouse move events do not pass through to the
schematic, resulting in a captured mouse pointer but no drawing updates.

As a work-around we close the ERC dialog while placing new components.
Previous ERC data still exist when the window is launched again.

Fixes: lp:1779851
* https://bugs.launchpad.net/kicad/+bug/1779851
2018-08-28 16:03:43 -07:00
Seth Hillbrand 5f74560a46 gerbview: Add LAYER_SELECT_OVERLAY to GAL
Ensure selected gerbview layers plotted on newly created SELECT layer
2018-08-28 15:13:54 -07:00
Seth Hillbrand dc4125206b GAL: Add a selected item layer
The selected items should be displayed above the rest of the items but
below informational overlays.

Fixes: lp:1789505
* https://bugs.launchpad.net/kicad/+bug/1789505
2018-08-28 15:00:05 -07:00
Seth Hillbrand f4eaf55497 pcbnew: keep selected zone highlighted when moding
When adding a cutout to a zone, it helps to have the zone highlighted so
that you can see when zone you are operating on.
2018-08-28 14:59:54 -07:00
Seth Hillbrand e160eb0677 pcbnew: Adding some missing TypeOf() functions
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
2018-08-28 13:19:29 -07:00
Seth Hillbrand c6d1433523 modedit: clear the pcb when closing the window
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
2018-08-28 12:36:06 -07:00
Seth Hillbrand 0ac96d177c pcbnew: set default soldermask clearance for footprint viewer
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
2018-08-28 10:04:04 -07:00
jean-pierre charras fb3859642f Pcbnew, Plot: fix incorrect plot of custom shapes, when the shape has holes (missing holes).
Fixes: lp:1789404
https://bugs.launchpad.net/kicad/+bug/1789404
2018-08-28 17:50:49 +02:00
jean-pierre charras d9d005190a Zone filler: fix a recent bug that forgot items on edge_cut when filling a copper zone.
Fixes: lp:1789067
https://bugs.launchpad.net/kicad/+bug/
2018-08-28 09:49:11 +02:00
Wayne Stambaugh 089f27f485 Remove more dialog control borders. 2018-08-27 15:11:27 -04:00
Jeff Young 56de78c130 Remove layer limitations and warnigns now that DRC handles them. 2018-08-27 18:38:56 +01:00
Jeff Young a860a8db54 Enable user layers in footprint editor.
Fixes: lp:1746279
* https://bugs.launchpad.net/kicad/+bug/1746279
2018-08-27 18:38:56 +01:00
Jeff Young c88b43e356 Don't double-report segments that are too close. 2018-08-27 18:38:56 +01:00
Jeff Young b842e4556d Don't double-check all zones.
a:b is enough; we don't have to also check b:a.
2018-08-27 18:38:56 +01:00
Jeff Young 6bb75b071a Implement DRC for PCB & module copper items in PNS router.
Fixes: lp:1788699
* https://bugs.launchpad.net/kicad/+bug/1788699
2018-08-27 18:38:56 +01:00
Jeff Young 7b4f9cef50 Implement DRC checks for copper graphic items.
Also greatly improves the location of many DRC markers.

Fixes: lp:1619133
* https://bugs.launchpad.net/kicad/+bug/1619133
2018-08-27 18:38:56 +01:00
Wayne Stambaugh 35a31a9787 Fix grid border on board setup net class panel.
Fixes lp: 1789190

https://bugs.launchpad.net/kicad/+bug/1789190
2018-08-27 12:33:50 -04:00
jean-pierre charras a330eb1575 Add Chinese traditional in language list. 2018-08-27 18:30:49 +02:00
Seth Hillbrand cc26da394a Code formatting and fix ordering warning 2018-08-27 08:38:58 -07:00
Thomas Pointhuber a2bc4260ef Modify style of the action plugin panel to follow common style
and fix of an assert:
* m_grid->DeleteRows does not like to get a numRows of zero
2018-08-27 08:26:31 -07:00
qu1ck d19b152655 Update pcbnew-plugins.md with info about icons 2018-08-27 11:08:39 -04:00
Marco Ciampa a0f7ff02ec Some basic Italian tranlation for the AppData file. 2018-08-27 11:05:28 -04:00
Oliver e95b2872f6 Add x/y dimensions to PCB ruler
- Display dx and dy in addition to euclidian distance and angle
2018-08-27 09:29:30 -04:00
jean-pierre charras 7c11d0371b Minor wording fix in a menuitem 2018-08-27 09:19:48 +02:00
Thomas Pointhuber 92cd82be03 Do not show footprint wizard menu when scripting is disabled 2018-08-27 09:19:48 +02:00
qu1ck 72f87861bb pcbnew: Add toolbar buttons for action plugins
Allows optional toolbar buttons for action plugins.
2018-08-26 19:39:27 -07:00
jean-pierre charras 90788a5a72 Kicad archive project: add missing file extensions (.kicad_mod, .gbrjob) in files to archive filter.
Fixes: lp:1789038
https://bugs.launchpad.net/kicad/+bug/1789038
2018-08-26 13:35:33 +02:00
Tomasz Wlostowski 32d262b0fe EDA_TEXT: add missing header 2018-08-24 14:42:49 +02:00
Tomasz Wlostowski 5f8eac8c6e CONNECTIVITY_DATA: fix SWIG build error 2018-08-24 14:42:49 +02:00
Tomasz Wlostowski 61fb3f6d0f pcbnew: bring back the autoplacer tool to GAL 2018-08-24 14:42:49 +02:00
Tomasz Wlostowski 2186db976b VIEW: added support for VIEW_OVERLAYS (temporary overlays for drawing debug graphics)
x
2018-08-24 14:42:49 +02:00
Tomasz Wlostowski 33946ea92f pcbnew: renaming of autorouter/autoplacer files 2018-08-24 14:42:49 +02:00
Wayne Stambaugh 825f57d912 Fix build error with Boost 1.68.
The Boost folks kindly decided to move the sha1.hpp header file location
so check the Boost version to include the proper header path.

Clean up debug trace code.
2018-08-24 08:34:45 -04:00
Jeff Young 020c7b5cb8 Fix non-OSX compile issue (includes). 2018-08-24 12:07:05 +01:00
Jeff Young d10bfb13d6 Re-enable text layers now that DRC & zone fills are fixed.
Fixes: lp:1788268
* https://bugs.launchpad.net/kicad/+bug/1788268
2018-08-24 10:56:13 +01:00
Jeff Young 0e3919e7aa Fix DRC & zone filling for copper text in footprints.
Also improves handling of copper edges in footprints and of text
and track locations in DRC markers.

Also adds DRC for tracks & zones.

Fixes: lp:1762474
* https://bugs.launchpad.net/kicad/+bug/1762474

Fixes: lp:1788268
* https://bugs.launchpad.net/kicad/+bug/1788268
2018-08-24 10:56:13 +01:00
Jeff Young 8aa0886ce7 Improve labels & layout of Track & Via Properties dialog. 2018-08-24 10:56:13 +01:00
Jeff Young ec9d38e21f Add filter to net selector widget.
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
2018-08-24 10:56:13 +01:00
Jeff Young 8957008c2a Adjust grid cols for large fonts and/or long translations.
Fixes: lp:1788495
* https://bugs.launchpad.net/kicad/+bug/1788495
2018-08-24 10:56:13 +01:00
jean-pierre charras 51a128e323 pcb_calculator: code rework: rename "tand" member to "m_tand" and m_name to m_Name 2018-08-24 10:26:05 +02:00
jean-pierre charras da0f956ca5 pcb_calculator: code rework: rename "murC" member by "m_murC" 2018-08-24 10:26:04 +02:00
jean-pierre charras 77477e4f10 pcb_calculator: code rework: rename "sigma" member by "m_sigma", and "skindepth" by "m_skindepth" 2018-08-24 10:26:04 +02:00
jean-pierre charras 884dc1c3e8 pcb_calculator: code rework: rename "f" member by "m_freq" 2018-08-24 10:26:04 +02:00
Seth Hillbrand 51473d9a30 pcbnew: Update tooltip in DRC window to reflect actions
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
2018-08-23 08:24:52 -07:00
Tomasz Wlostowski 6765ab6975 POLY_GRID_PARTITION: fixed incorrect point-in-polygon test in some corner cases
Fixes: lp:1787236
* https://bugs.launchpad.net/kicad/+bug/1787236
2018-08-23 13:38:41 +02:00
Jeff Young 4eef4be038 Make library symbol Save As do a Save Copy As.
It feels odd to have a library item moved.

Fixes: lp:1788425
* https://bugs.launchpad.net/kicad/+bug/1788425
2018-08-23 00:58:05 +01:00
Jeff Young da172a1089 Fix layout issue with too-short textctrl.
Fixes: lp:1788506
* https://bugs.launchpad.net/kicad/+bug/1788506
2018-08-23 00:58:05 +01:00
Jeff Young 30bb911154 Bring PICKER_TOOL in line with other tools.
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
2018-08-23 00:58:01 +01:00
jean-pierre charras 24149a87fa Eeschema: fix an assert ( "meOwner" failed in DeleteAll() ) when appending a sheet from an other project to the schematic.
It was only a overzealous (in this case) assert, with no issue.
The fix avoid calling DeleteAll() when there is nothing to delete.

Fixes: lp:1787810
https://bugs.launchpad.net/kicad/+bug/1787810
2018-08-22 17:14:30 +02:00
jean-pierre charras e33e8d02e9 Fix overzealous wxASSERT 2018-08-22 17:14:30 +02:00
jean-pierre charras c756fc318e Fix a few wxWidgets minor alerts in DIALOG_EDIT_COMPONENTS_LIBID_BASE. 2018-08-22 17:14:30 +02:00
Jeff Young c91e51f688 Don't inadventently clear selection reference point.
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
2018-08-22 15:11:58 +01:00
Andrew Zonenberg 60a55d75fa Split prohibited text layers for footprints and the rest of the PCB
Fixes: lp:1788268
* https://bugs.launchpad.net/kicad/+bug/1788268
2018-08-21 16:34:53 -07:00
Jeff Young d8782b7515 Improve Update PCB from Schematic.
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
2018-08-21 19:46:29 +01:00
Jeff Young bc2481a9be Don't leak file descriptors. 2018-08-21 19:44:42 +01:00
jean-pierre charras 0305d9143d key event in draw_panel.cpp: fix incorrect behavior for the escape key (the key was handled but the evnent was skipped).
This create an incorrect behavior because the event key was resend because
the primary event was seen as not handled by the drawpanel.
2018-08-21 20:05:09 +02:00
Wayne Stambaugh f52da8ed96 Pcbnew: enable scripting action menu build option by default.
Fixes lp:1783690

https://bugs.launchpad.net/kicad/+bug/1783690
2018-08-21 12:54:13 -04:00
Jeff Young dbd3900e28 Add comments and show recently used even when empty. 2018-08-21 11:20:17 +01:00
Jeff Young c851d6d64b Fix some more MSW spacing issues. 2018-08-21 10:34:41 +01:00
Jeff Young 2e5d8061aa Run CommonSettingsChanged after all panels have been committed.
Fixes: lp:1787377
* https://bugs.launchpad.net/kicad/+bug/1787377
2018-08-21 10:34:41 +01:00
Jeff Young 779398891d Follow HIG guidelines for destructive button separation. 2018-08-21 10:34:41 +01:00
Jeff Young 65f62f93ef Fix MSW spacing issues. 2018-08-21 10:34:41 +01:00
Jeff Young afacb6e7cb Improve safety around un-committed grid changes. 2018-08-21 10:34:41 +01:00
Jeff Young a6d10d6e28 Constant-size page layout object handles w/respect to zoom.
Fixes: lp:1787491
* https://bugs.launchpad.net/kicad/+bug/1787491
2018-08-21 10:34:41 +01:00
Jeff Young 86a801aabc Allow updating of file history size on the fly.
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
2018-08-21 10:34:41 +01:00
José Jorge Enríquez 8d625854b8 Allows custom number of entries in recently opened files menu.
NEW: Adds a configuration option to set number of entries in the "Open Recent" menu.

Fixes: lp:1745729
* https://bugs.launchpad.net/kicad/+bug/1745729
2018-08-21 10:34:41 +01:00
Nick Østergaard 6db71cd734 Add documentation for KICAD_USE_OCC 2018-08-20 13:26:40 -07:00
Carsten Schoenert 80a5dba868 Add German translations entries to appdata.xml
Some basic German tranlation for the AppData file.
2018-08-20 13:18:44 -07:00
Ronnie Gaensli 00d912f0b8 eeschema: fix dangling pin marker after adding NoConnect
Fixes: lp:1787858
* https://bugs.launchpad.net/kicad/+bug/1787858
2018-08-19 19:48:22 -07:00
Seth Hillbrand 5bd959d92c Eagle: Fix NULL-dereference on malformed Eagle files
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.
2018-08-19 19:48:10 -07:00
Jeff Young e47351d1a6 Highlight only leaf nodes when filtering lib tree.
Fixes: lp:1787709
* https://bugs.launchpad.net/kicad/+bug/1787709
2018-08-19 17:59:32 +01:00
Jeff Young 53cd923305 Minor fix to tooltip and comment. 2018-08-19 17:02:47 +01:00
Jeff Young bd543f12b5 Bring track design rule widths in line with via design rule sizes. 2018-08-19 16:15:14 +01:00
Jeff Young b4bb36f017 Define minHeight so 3D model grid doesn't grow to include all rows.
Fixes: lp:1787269
* https://bugs.launchpad.net/kicad/+bug/1787269
2018-08-19 16:10:41 +01:00
Jeff Young 4364384f06 Simplify list of nets dialog. 2018-08-19 16:10:41 +01:00
Jeff Young 672d5ec1aa Make orientation popups match combobox values. 2018-08-19 16:10:41 +01:00
Jeff Young c5781105ee Fix layout and grouping issues in color picker. 2018-08-19 16:10:41 +01:00
Jeff Young bbb76a0de0 Initialize filters with current values.
Fixes: lp:1787403
* https://bugs.launchpad.net/kicad/+bug/1787403
2018-08-19 16:10:41 +01:00
Jeff Young bb5e6bbd79 Include default netclass in Global Edit Track & Via Properties.
Fixes: lp:1787403
* https://bugs.launchpad.net/kicad/+bug/1787403
2018-08-19 16:10:41 +01:00
jean-pierre charras 7a10feb35d Libedit: Fix a crash when trying to revert changes in a library
(No crash when reverting changes in a part, only in a library)

Fixes: lp:1787772
https://bugs.launchpad.net/kicad/+bug/1787772
2018-08-19 10:33:05 +02:00
Ronnie Gaensli 46fddab126 pcbnew: fix pan while moving mouse after cancelling selection box
Fixes: lp:1776648
* https://bugs.launchpad.net/kicad/+bug/1776648
2018-08-17 13:39:36 +02:00
Maciej Suminski 01925fd6a7 Changed the OpenGL CMake preference to LEGACY
Certain distribution does not handle GLVND well, as the result the
accelerated canvas is not enabled. For the time being it is better to
keep using the legacy preference.

Thanks to Aurelio Lucchesi for investigating the cause.

Fixes: lp:1781581
* https://bugs.launchpad.net/kicad/+bug/1781581
2018-08-17 10:03:59 +02:00
jean-pierre charras 6fdc5972f8 Better fix for accelerator menus using "Back" (previously named "BkSp") key
Use the wxWidgets official accelerator key string for WXK_BACK (this is "Back") in menuitems instead of "BkSp"
Also when reading the hotkey config file, avoid to set a hotkey to unassigned when its name is not found in list.
The default value is used.
Unassigned hotkey use <unassigned> as key name (and 0 as key code) in file.
2018-08-16 15:56:13 +02:00
Tomasz Wlostowski aab40ee9e8 OPENGL_GAL: don't use glCopyBuffer() on faulty Intel GL drivers
Fixes: lp:1787221
* https://bugs.launchpad.net/kicad/+bug/1787221
2018-08-16 14:34:36 +02:00
John Beard a88831d7a9 Fix -Wcatch-value in kicad2step.cpp 2018-08-15 12:39:33 -04:00
jean-pierre charras 0c4828df12 footprint_wizard_frame: try to fix a crash that happens sometimes when modifying a parameter.
(not noticed on Windows, happens sometimes on Linux. so this commit is just a trial to fix the crash)
2018-08-15 15:55:32 +02:00
jean-pierre charras 8fd686e8f4 Eeschema: Fix 2 minor compil warnings. Pcbnew, very minor fix: avoid using fixed scaling factor in code. Use internal units conversion instead. 2018-08-15 13:39:25 +02:00
Jeff Young 8db361882b Fix compile error on Linux. 2018-08-14 14:57:42 +01:00
Jeff Young 122d7ed3b3 Improve document file handling.
Fixes: lp:1779512
* https://bugs.launchpad.net/kicad/+bug/1779512
2018-08-14 13:54:04 +01:00
Jeff Young 3c455949fc Revert some dialog changes that lost button sizes.
These are required on MSW.  Also back-dates the .fbp file to work
on Mac wxFormBuilder.
2018-08-14 13:54:04 +01:00
Jeff Young d72fdaed29 Rewrite Library Symbol Properties dialog.
Fix the user-model issues around aliases and alias selection.
Fold Library Symbol Fields into Library Symbol Properties.
Update to the new look.

Fixes: lp:1744773
* https://bugs.launchpad.net/kicad/+bug/1744773

Fixes: lp:1766205
* https://bugs.launchpad.net/kicad/+bug/1766205

Fixes: lp:1786339
* https://bugs.launchpad.net/kicad/+bug/1786339
2018-08-14 13:54:04 +01:00
Jeff Young 01882d3103 Add more/better error messages for file i/o problems. 2018-08-14 13:54:04 +01:00
Jeff Young 529521a7ba Increase max-units to 'ZZ' (676).
Fixes: lp:1786659
* https://bugs.launchpad.net/kicad/+bug/1786659
2018-08-14 13:54:04 +01:00
Maciej Suminski d5ee3296b2 Spice simulator: search each line of a text field for a Spice directive
Fixes: lp:1786119
* https://bugs.launchpad.net/kicad/+bug/1786119
2018-08-14 10:25:28 +02:00
Maciej Suminski f82b839d06 Spice simulator: prevent double quoting library file names
Fixes: lp:1786559
* https://bugs.launchpad.net/kicad/+bug/1786559
2018-08-14 09:46:52 +02:00
jean-pierre charras f0b8b2136a Pcbnew: Change a duplicate hot key. 2018-08-13 09:28:48 +02:00
jean-pierre charras 595666d46e Add support of GAL in FOOTPRINT_WIZARD_FRAME.
Some refinements are needed (for instance the context menu shows the filter
command if something is selected, that is useless in the footprint wizard.
2018-08-12 17:48:21 +02:00
Jeff Young 08e04acb10 Add missing include for non-OSX platforms. 2018-08-12 01:09:56 +01:00
Jeff Young 4b1a31ffad Regularize save-changes dialogs. 2018-08-12 00:02:37 +01:00
Jeff Young acec00f80a Fix bug displaying canvasses when starting in Legacy mode. 2018-08-11 23:43:19 +01:00
Jeff Young 4c08a71df5 Warn before replacing edited footprint in footprint editor.
Fixes: lp:1786570
* https://bugs.launchpad.net/kicad/+bug/1786570
2018-08-11 20:37:30 +01:00
Jeff Young d81faa72c9 Overhaul border drawing in all the Kicad frames.
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.
2018-08-11 17:25:38 +01:00
Jeff Young 68bd1abf78 Fix nullptr access on 2nd launch of eeschema. 2018-08-11 17:14:27 +01:00
Jeff Young 43e99e6df0 Inflate footprint bounding box to include texts.
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().
2018-08-11 17:14:27 +01:00
Jeff Young 38464827fc Fix some issues with zooming.
Don't process zoom both in Legacy code and Modern code; one of
them will decide the zoom has already changed and do odd things.

Make sure the view is updated after zooming, otherwise you have
to move the mouse over the canvas before seeing the new zoom.
2018-08-11 17:14:27 +01:00
Jeff Young e932eed738 Allow TemplateFieldNames to specify URL-behaviour.
Fixes: lp:1785879
* https://bugs.launchpad.net/kicad/+bug/1785879
2018-08-11 17:14:27 +01:00
jean-pierre charras d2eb9e0735 Eeschema, Dialog annotate: fix incorrect management that creates a crash when try to open it a second time.
Fixes: lp:1786618
https://bugs.launchpad.net/kicad/+bug/1786618
2018-08-11 17:19:24 +02:00
jean-pierre charras 009044bd6b FOOTPRINT_EDIT_FRAME: fix incorrect layer manager initialization depending on canvas type.
Especially, the color selector is not the same when selecting GAL or Legacy canvas.
Due to this incorrect init, the color selector type was incorrect.
2018-08-11 13:16:41 +02:00
jean-pierre charras bd46f720a1 Fix a few AUI issues. 2018-08-11 11:26:47 +02:00
jean-pierre charras 78ab5c3f07 Fix ASCII code used in accelerator menus for BkSp key (Linux only)
On Linux (GTK?) the accelerator key BkSp, when used in menus must be coded as "\t\b" and not "\tBkSp".
However, On Windows, it must be "\tBkSp".
Joys of multi-platform development.
2018-08-09 17:55:08 +02:00
jean-pierre charras 3eb3db02c3 Cvpcb, DISPLAY_FOOTPRINTS_FRAME: add measurement and zoom to selection tools. 2018-08-09 11:15:43 +02:00
jean-pierre charras 274572bf20 Rename tool_cvpcb.cpp to toolbars_cvpcb.cpp 2018-08-09 10:08:32 +02:00
jean-pierre charras 45395f9b59 Eeschema: fix a bug when reading .dcm files (the eol char was not stripped, giving broken fields values)
The parser also now skip empty lines.

This bug created unreadable saved .dcm files and .sch files after adding a new symbol.

Fixes: lp:1786141
https://bugs.launchpad.net/kicad/+bug/1786141
2018-08-09 09:09:36 +02:00
Seth Hillbrand 42c5017db7 PCBNEW: Re-add missing SWIG zone filler
Zone filler was factored out into a separate header.  To allow python
access to zone filling, we need to include the revised signatures.
2018-08-08 12:25:58 -07:00
Jeff Young f6f1c1e944 Performance optimization for MSW directory time-stamping. 2018-08-08 20:07:26 +02:00
jean-pierre charras 15e0771ea8 Add GAL support to Cvpcb display footprints frame. 2018-08-08 16:33:29 +02:00
Jeff Young 80f713f366 Revert accidental commit. 2018-08-08 12:51:31 +01:00
Jeff Young 8884298f29 Add file:// to list of things recognized as URL.
Fixes: lp:1785879
* https://bugs.launchpad.net/kicad/+bug/1785879
2018-08-08 12:51:31 +01:00
jean-pierre charras 5f31ce03f7 viewlib_frame: fix incorrect management of the unit selection combo box. 2018-08-08 11:48:29 +02:00
jean-pierre charras 21195a751d Eeschema: sch_legacy_plugin.cpp: fix incorrect parsing of pin position.
The issue is in:
wxPoint( parseInt( aReader, line, &line ), parseInt( aReader, line, &line ) )
that calls parseInt() twice, but parseInt changes parameters at each call.
(Does not return the same value at each call).
However, due to some side effect or compil optimization, the value returned is incorrect.
It can be dependent of the compiler, and optimization level.

This kind of code must be avoided.
2018-08-08 10:15:44 +02:00
Jeff Young a9fa66bb41 Don't broadcast events when running client selection filters.
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
2018-08-08 01:44:56 +01:00
Jeff Young 99ed476de1 Treat user fields starting with http:// or https:// as a URL.
Fixes: lp:1785879
* https://bugs.launchpad.net/kicad/+bug/1785879
2018-08-08 01:43:26 +01:00
Jeff Young 9b44100e04 GetFullPath() includes filename; we just want GetPath()
Fixes: lp:1785891
* https://bugs.launchpad.net/kicad/+bug/1785891
2018-08-07 22:04:09 +01:00
Jeff Young d63d0c40ef Performance optimisation for MSW direcotry timestamping. 2018-08-07 20:16:25 +01:00
Jeff Young 84504599ce Don't check for visibles in the Footprint Editor.
Everything is drawn anyway, and we crash if the viewPrivData
hasn't been allocated yet.

Fixes: lp:1785716
* https://bugs.launchpad.net/kicad/+bug/1785716
2018-08-07 18:39:20 +01:00
John Beard a1e0735853 Add hotkey (Insert) for zone create corner
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).
2018-08-07 09:19:18 -07:00
Jeff Young 7c04d8be1c Double opening speed of PCBs with ground and/or power planes.
(Or any other boards with complicated zones.)
2018-08-07 17:01:44 +01:00
Jeff Young 20bf6827e7 Minor performance enhancements to symbol loading. 2018-08-07 17:01:44 +01:00
Jeff Young bea98d8265 Reimplement close for Annotation dialog.
wxWidgets auto-dialog-handling for modeless dialogs just hides
them.

Fixes: lp:1785526
* https://bugs.launchpad.net/kicad/+bug/1785526
2018-08-07 17:01:44 +01:00
Seth Hillbrand 539ca5aa3b Adjust RTree default floating point to use double
This reverts the previous work-around 7d62f14dd for the RTree splitting
degeneracy that was placed prior to v5.  It appears not to have worked
for all systems.  In its place, we use doubles instead of floats to
calculate the bounding box when filling the RTree.  This keeps maximum
volume items from overlapping with the system boundary in test cases.
2018-08-06 16:55:00 -07:00
Jeff Young 9aa043ef48 Reinstate close/cancel handling for ERC dialog.
It needs it because it's a modeless dialog.

Fixes: lp:1785655
* https://bugs.launchpad.net/kicad/+bug/1785655
2018-08-06 21:31:53 +01:00
Jeff Young d788c9d479 Move library table dialogs from PLAYER to KIFACE interface.
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
2018-08-06 21:31:53 +01:00
John Beard 9a3cfb8570 QA: Remove obsolete fillet refactor tests
These tests are fundamentally broken as they test two fillet
implementations against each other, but the two implementations
no longer have the same interface or meaning (one has a fixed
segment count, one has a fixed error).

This also allows the tests to run on Boost <1.59, which do not
provide the !-syntax for excluding tests. Ubuntu 16 uses
Boost 1.58, so this causes build failures.

Fixes: 1785377
https://bugs.launchpad.net/kicad/+bug/1785377
2018-08-06 12:10:48 -04:00
John Beard 6165a735ae Docs: update doxygen docs logo
The logo used was subtly different to the official KiCad
logo - different font weight and corner rounds.
2018-08-06 11:06:24 -04:00
Wayne Stambaugh bbfce129bb Fix windows build error. 2018-08-06 10:26:22 -04:00
Jeff Young be1d6113d6 More performance enhancements.
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.
2018-08-06 13:49:27 +01:00
Jeff Young 9e84c3fc3b Use a white background for "No symbol selected" message. 2018-08-06 13:48:17 +01:00
Jeff Young 0fbe702043 Layout adjustments to Choose Symbol and Choose Footprint. 2018-08-06 13:48:17 +01:00
Jeff Young 08bcec9ac0 Make sure symbols have a valid lib nickname...
... even if the library pointer isn't set.

Also fixes the "every symbol as a Unit A" issue.

Fixes: lp:1785438
* https://bugs.launchpad.net/kicad/+bug/1785438
2018-08-06 13:48:17 +01:00
Jeff Young 146ab1eb32 Small performance improvement loading stroke font. 2018-08-06 13:48:17 +01:00
Jeff Young 3bf2e2f9fc Try out headers in Cvpcb.
Note: it's easy enough to back out.  If you don't like it, please
speak your mind.  I'm ambivalent about them.

Fixes: lp:1782952
* https://bugs.launchpad.net/kicad/+bug/1782952
2018-08-06 13:48:17 +01:00
Jeff Young d52429fc3c Read footprint info cache when fpinfo requested via kiway. 2018-08-06 13:48:17 +01:00
Jeff Young c1cf7c32c3 Performance enhancement: don't process envvars in configs. 2018-08-06 13:48:17 +01:00
Jeff Young 0cd75b2556 Flip show/hide of controls so they're shown when doing layout.
Fixes: lp:1785113
* https://bugs.launchpad.net/kicad/+bug/1785113
2018-08-06 13:48:17 +01:00
Jeff Young 97c4d42ebf Improve Read Netlist tooltip for footprint assignment.
Fixes: lp:1785200
* https://bugs.launchpad.net/kicad/+bug/1785200
2018-08-06 13:48:17 +01:00
Ronnie Gaensli 3ca84dca71 Cancel Add dimension leaves auto panning on
Fixes: lp:178551
* https://bugs.launchpad.net/kicad/+bug/178551
2018-08-06 11:24:23 +02:00
jean-pierre charras 7fa5456d71 Kicad: fast switch to an other project sharing the same folder.
If a .pro file is inside the current project, double clicking on this .pro file switches to this project.
(It happens when 2 projects share the same folder).
2018-08-05 09:04:39 +02:00
jean-pierre charras 8cb94f09c3 Allows bigger image size in DIALOG_IMAGE_EDITOR 2018-08-04 19:10:20 +02:00
jean-pierre charras 0902bbabc5 Allows bigger max page size (120x120") in Eeschema, Gerbview and Page Layout Editor
Due to its small internal unit, pcbnew still have a max page size of 48x48"

Fixes: lp:1785155
https://bugs.launchpad.net/kicad/+bug/1785155
2018-08-04 17:19:48 +02:00
jean-pierre charras c32fcd1403 Fix commit f3f814e622 that breaks the compilation on Windows.
Fiw also a minor compil warning
2018-08-04 17:18:15 +02:00
Jeff Young fd3e57d67f Layout adjustments and language-change-updating for modview. 2018-08-04 12:59:04 +01:00
Jeff Young fb28d45886 Silence compiler warning. 2018-08-04 11:37:18 +01:00
Jeff Young 345f57ccb8 Fix bug in optimization of wxExpandEnvVars.
Fixes: lp:1785228
* https://bugs.launchpad.net/kicad/+bug/1785228
2018-08-04 11:29:24 +01:00
Jeff Young 9aaa235b7b Use binary search on Footprint Info list.
While it only improves footprint loading on the standard library
by about 6%, it will keep larger libraries from getting catastrophic.
2018-08-04 10:29:17 +01:00
Jeff Young 33fc74a04d Performance enhancements for Footprint Editor construction. 2018-08-04 10:29:17 +01:00
Jeff Young 92b3aca0ef Fix crash when trying to view invalid footprint link.
Fixes: lp:1785218
* https://bugs.launchpad.net/kicad/+bug/1785218
2018-08-04 10:29:17 +01:00
Jeff Young 1b71c723bc Fix pad properties Y dimension enabling.
Fixes: lp:1785241
* https://bugs.launchpad.net/kicad/+bug/1785241
2018-08-04 10:29:17 +01:00
Jeff Young f3f814e622 Performance enhancements for footprint info list.
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).
2018-08-04 10:29:17 +01:00
Jeff Young 5e8e2570ba Fix thread-safety issue with some global wxStrings.
These cause intermittent crashes in footprint loading.  See
comments in code.
2018-08-04 10:29:17 +01:00
jean-pierre charras e556cb8c91 Fix a minor wxWidgets debug alert. 2018-08-03 21:28:44 +02:00
qu1ck 72fcf46430 Extend swig definitions to contain SHAPE_LINE_CHAIN and VECTOR2I 2018-08-02 17:03:11 -04:00
Wayne Stambaugh 8e7d6063fd Minor dialog and frame window improvements.
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.
2018-08-02 13:00:41 -04:00
jean-pierre charras ce3760438c Fix a few wxWidgets minor asserts. Fix also a missing bitmap button initialization.
Fixes: lp:1783703
https://bugs.launchpad.net/kicad/+bug/1783703
2018-08-02 13:22:11 +02:00
Jeff Young d8d4f75fa1 Fix button order and genralize Exit dialog so it can be shared more.
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
2018-08-02 11:01:03 +01:00
Jeff Young c655bffac1 Improve context menu consistency.
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
2018-08-02 11:01:03 +01:00
Jeff Young d6c6322f95 Leave measurement visible until another is started. 2018-08-02 11:01:03 +01:00
Seth Hillbrand 3a09358264 modedit: Store single copy of the footprint in undo
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
2018-08-01 11:06:23 -07:00
Maciej Suminski 53236a3838 Removed redundant 'v' in noise simulation command
Fixes: lp:1784282
* https://bugs.launchpad.net/kicad/+bug/1784282
2018-08-01 17:28:55 +02:00
jean-pierre charras 3d28d0274b put a demo file to the right place 2018-08-01 16:44:18 +02:00
jean-pierre charras b47ffd7054 Update python scripts examples according to recent changes in pcbnew code.
Add a new example to plot files
2018-08-01 16:32:37 +02:00
jean-pierre charras fc6547f5c0 Make gerber job file writer accessible by Python scripts 2018-08-01 16:32:37 +02:00
Jeff Young 3a39ea21a2 Library pointer can be null even when LibId is set. 2018-08-01 15:27:54 +01:00
Jeff Young 2155dd6591 Simplify ExitDialog and make platform-compliant.
Put the buttons in platform-compliant order.
Get rid of SaveMultiOptions in favour of repeated standard save
dialogs with a "Apply to all" checkbox.

Fixes: lp:1783444
* https://bugs.launchpad.net/kicad/+bug/1783444
2018-08-01 15:27:54 +01:00
Jeff Young 72338a7002 Remove more dead code. 2018-08-01 12:36:55 +01:00
Jeff Young 6dbfa793e8 Fix GTK compile errors and remove dead code.
Fixes: lp:1783993
* https://bugs.launchpad.net/kicad/+bug/1783993
2018-08-01 12:23:16 +01:00
Jeff Young 9322139baa Touch up Footprint Viewer for new Lib Tree. 2018-08-01 11:47:48 +01:00
Jeff Young 98849bde96 Generalize OSX &Cancel fix to work for other languages.
Fixes: lp:1784350
* https://bugs.launchpad.net/kicad/+bug/1784350
2018-08-01 10:56:45 +01:00
Jeff Young 4e3c84e733 Score leaf nodes in LIB_TREEs, not just symbols & footprints.
Fixes: lp:1783251
* https://bugs.launchpad.net/kicad/+bug/1783251
2018-08-01 09:35:46 +01:00
Jeff Young 9175a48c90 Enable Distribute H/V on pads.
Fixes: lp:1782988
* https://bugs.launchpad.net/kicad/+bug/1782988
2018-08-01 09:35:46 +01:00
Jeff Young 196bdc05db Delete empty fields from Symbol Fields editor.
Fixes: lp:1784718
* https://bugs.launchpad.net/kicad/+bug/1784718
2018-08-01 09:35:46 +01:00
Jeff Young f8a5e2c1c8 Performance enhancements in fp loading, string cmp, etc.
Knocks about 1/3 off the first footprint load, and more than 1/2
off subsequent loads.
2018-08-01 09:35:46 +01:00
Jeff Young 0a35c5c97e Convert Footprint Editor to component tree.
Fixes: lp:1784178
* https://bugs.launchpad.net/kicad/+bug/1784178

Fixes: lp:1780363
* https://bugs.launchpad.net/kicad/+bug/1780363
2018-08-01 09:35:46 +01:00
Jeff Young b400565880 Convert Place Footprint to component tree. 2018-08-01 09:35:45 +01:00
Jeff Young 97f7bd4cb9 Push component tree down into common.
Precondition to reusing component tree for footprints.
2018-08-01 09:35:45 +01:00
Seth Hillbrand 13b96799ea pcbnew: remove duplicate rebuild in GAL
When running GAL, the connectivity is built when the board loads, so the
extra call to rebuild connectivity is not needed.
2018-07-31 15:13:12 -07:00
Seth Hillbrand 284c39acac pcbnew: Unify connected lists between items/zones
Keep the zoneitems in the same list as the rest of the items.
2018-07-31 15:12:08 -07:00
Seth Hillbrand f87cb64d65 pcbnew: Ensure connectivity layers are respected
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.
2018-07-31 15:11:19 -07:00
Seth Hillbrand 2cf38f68fe rtree: Updating to use functional 2018-07-31 14:26:57 -07:00
Seth Hillbrand 589e5b9ad7 Remove connectivity debug statements 2018-07-31 14:26:57 -07:00
Seth Hillbrand dc1736eb87 pcbnew: Split Layers in connectivity
Splits the connectivity search RTree by layers to avoid large penalty on
zone searches.
2018-07-31 14:26:57 -07:00
Tomasz Wlostowski 099fcf1247 ZONE_CREATE_HELPER: fix zone cutout creation in zones with holes, reinit selection with the resulting zone
Fixes: lp:1784268
* https://bugs.launchpad.net/kicad/+bug/1784268
2018-07-31 22:34:56 +02:00
Mark van Doesburg 91e3d21d68 Eeschema: Copy attributes from eagle.
Eagle allows for variants of components to be listed in the schematic.
This patch copies the variant data into the imported schematic item,
prefixing the alternate variant names with "VARIANT_" and keeping the
alternate values.
2018-07-31 11:58:01 -07:00
jean-pierre charras 1dbaef303e Fix FootprintWizardBase.py according to recent changes in lib_id.h 2018-07-31 18:46:25 +02:00
Wayne Stambaugh 61b68e2476 Eeschema: fix print dialog button sizer layout issue. 2018-07-31 10:34:30 -04:00
jean-pierre charras 5a2e171f9e fix a few wxWidgets asserts. 2018-07-31 13:16:58 +02:00
John Beard c0615c5ef8 Update CA and ZH source svg filename
These were updated in 7841f8a466, but the source
files seem to have not been changed.
2018-07-30 11:40:04 -07:00
Seth Hillbrand d8abfcf827 Revert "Extend swig definitions to contain SHAPE_LINE_CHAIN and VECTOR2I"
This reverts commit be0e44e2ae.

Causes build failure with gcc 4.9.2
2018-07-30 10:19:05 -07:00
qu1ck be0e44e2ae Extend swig definitions to contain SHAPE_LINE_CHAIN and VECTOR2I 2018-07-30 08:45:26 -07:00
jean-pierre charras 619e13dc2d Fix D_PAD::BuildPadShapePolygon() incorrect calculation for custom pad shapes.
Fixes: lp:1784340
https://bugs.launchpad.net/kicad/+bug/1784340
2018-07-30 16:56:59 +02:00
jean-pierre charras 3a02e54411 Opengl fix: bitmaps having a width not multiple of 4 were incorrectly drawn.
This fix draws a "sub bitmap" having a width multiple of 4.
(The loss of 1 to 3 pixels in horizontal size should be not really noticeable)
2018-07-30 16:19:35 +02:00
jean-pierre charras 6e9990449f Gerbview: fix a minor log warning. 2018-07-30 16:19:35 +02:00
John Beard 6b039bc99e Use M_PI for Pi, not constexpr calculation
Constexpr evaluation breaks Clang compilation.

Use math.h M_PI, as elsewhere.
2018-07-30 12:08:53 +02:00
Tomasz Wlostowski 516cf47946 OPENGL_GAL: optimized JP's bitmap drawing function to use textures 2018-07-30 00:13:37 +02:00
jean-pierre charras fefc7b8172 GAL canvases: add DrawBitmap(), using a basic brute force algo for OpenGL, and a optimized code for Cairo. In this fix the brute force means draw each pixel as a rectangle. It works fine, but could be optimized. 2018-07-30 00:13:30 +02:00
jean-pierre charras e750382e75 Fix a few wxWidgets minor asserts 2018-07-29 17:27:11 +02:00
jean-pierre charras f5e23e4f1a Fix a few wxWidgets minor asserts 2018-07-29 12:54:36 +02:00
jean-pierre charras 882565f2e1 Fix a few wxWidgets minor asserts 2018-07-29 10:39:05 +02:00
jean-pierre charras 70d08a2364 Fix incorrect scaling factor to draw the page limits (GAL mode) 2018-07-28 18:36:51 +02:00
jean-pierre charras d73db8c73a Make a few strings not internationalized, because they must not be translated (html format strings) 2018-07-28 12:47:23 +02:00
jean-pierre charras 9a6fe2b8cd CMakeLists.txt: add a option (BUILD_SMALL_DEBUG_FILES, default off) to create smaller binaries in debug mode.
It forces link option -g1 instead og -g3 which allows basic debug.

This is especially useful on Mingw because binaries in debug build are very large:
_pcbnew.kiface: 1.25 Gb, small file option: 65Mb
2018-07-28 10:38:00 +02:00
jean-pierre charras 3e5cd86288 Fix a few wxWidgets minor asserts. Fix a compil warning 2018-07-28 10:31:04 +02:00
jean-pierre charras 361366bbbc wxHtmlWindow doesn't render HTML text when used only inside our .kiface dll. (Windows and Linux)
* When a wxHtmlWindow is used *only* in a dll/so module, the Html text is displayed
* as plain text.
* this patch forces wxHtmlWinParser initialization to avoid this issue
*see https://groups.google.com/forum/#!topic/wx-users/FF0zv5qGAT0

Fixes: lp:1783544
https://bugs.launchpad.net/kicad/+bug/1783544
2018-07-28 07:19:22 +02:00
jean-pierre charras 46f5d81d6e Fixes in DIALOG_IMAGE_EDITOR (minor bug fix, and code update).
Fixes: lp:1783796
https://bugs.launchpad.net/kicad/+bug/1783796
2018-07-27 16:30:13 +02:00
Jeff Young 421204ae80 Improve Reset to Defaults button lable.
Also updates action buttons to a sdbSizer so the order is correct
on OSX.

Fixes: lp:1783584
* https://bugs.launchpad.net/kicad/+bug/1783584
2018-07-27 14:58:19 +01:00
Jeff Young 3c2c5c38ad Make icon buttons slightly wider for MSW.
Fixes: lp:1783703
* https://bugs.launchpad.net/kicad/+bug/1783703
2018-07-27 14:58:19 +01:00
Jeff Young 40f5ca0bf7 Fix copy/paste error in numeric evaluator.
Fixes: lp:1783991
* https://bugs.launchpad.net/kicad/+bug/1783991
2018-07-27 14:58:19 +01:00
Jeff Young 4dfae16c1b Consolidate to single menu actions for save, revert, etc.
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.
2018-07-27 14:58:19 +01:00
Jeff Young 95d3336f63 We need the other end of the stick when not yet routing.
Fixes: lp:1781424
* https://bugs.launchpad.net/kicad/+bug/1781424
2018-07-27 14:58:19 +01:00
John Beard 265c882320 QA Geometry: New test suite for generic geometric tests
This is the first test for a generic test suite for geometric functions.

The tests run are for fillet corners of SHAPE_POLY_SETS.

Previously, SHAPE_POLY_SET::Fillet was tested against CPolyLine::Fillet
to ensure compatibility. However, thse two functions now have different
interfaces and are not directly comparable. Also, this depended on
CPolyLine::Fillet being correct, which was not tested.

Instead, test SHAPE_POLY_SET::Fillet using tests against geometric
constraints, independent of any other fillet implementation.
2018-07-27 08:57:50 -04:00
John Beard e84d1d169c QA: Rename geometry to shape_poly_set_refactor
This test is not really concerned with generic geometric code testing,
but rather the correctness of a refactoring effort.

Rename it make this clearer, and also to make way for generic geometry tests.
2018-07-27 08:57:43 -04:00
John Beard 79e4e767e9 QA: Add python test as a Ctest test rather than build target 2018-07-27 08:57:34 -04:00
John Beard 2e977ec369 Enable CTest tests and add qa_geometry as a test
This allows the use of `make test` or `ctest` to run all registered
tests.

The ChamferFillet/Fillet test is disabled for now as it fails.
2018-07-27 08:57:19 -04:00
jean-pierre charras b70dd1ecc4 Fix compil warnings 2018-07-27 11:18:24 +02:00
jean-pierre charras aa17e7919e Fix a serious issue in DIALOG_EDIT_LIBRARY_TABLES, on wxWidgets 3.1.x.
* in DIALOG_EDIT_LIBRARY_TABLES::TransferDataFromWindow(), m_contentPanel->TransferDataFromWindow
* is explicitly called to update library tables.
* Before wxWidgets 3.1.x, m_contentPanel->TransferDataFromWindow is not called by wxDialog::TransferDataFromWindow()
* and explicit call is needed.
* Since wxWidgets 3.1.x, m_contentPanel->TransferDataFromWindow is called by wxDialog::TransferDataFromWindow()
* thus creating two successive calls, not supported by m_contentPanel->TransferDataFromWindow.
* The call to wxDialog::TransferDataFromWindow() was just removed, as it is useless in this dialog
2018-07-27 09:19:20 +02:00
Maciej Suminski 944d22c08a Fix detection of wxWidgets toolkit
wxWidgets_CONFIG_OPTIONS can be utilised to explicitly select GTK2 or GTK3. It
must be evaluated when querying the toolkit to avoid a mismatch between the
version actually used and the version KiCad assumes to be used.

Reapplied the original version. The previous patch has been modified
under an invalid assumption of being incompatible with msys2.
2018-07-27 09:08:42 +02:00
Jeff Young 0cca1c6721 Remove active library concept from footprint editor.
Also bring the menu system and toolbar in line with Pcbnew,
eeschema, and the symbol library editor, which includes moving
to a standard Save As paradigm for renaming/moving items.

Fixes: lp:1748474
* https://bugs.launchpad.net/kicad/+bug/1748474

Fixes: lp:1778202
* https://bugs.launchpad.net/kicad/+bug/1778202
2018-07-26 21:34:25 +01:00
Jeff Young 18d2f95fd5 Attempt to fix reading dimension units from file.
It fails when the decimal separator is a ',', so this change
simplifies the logic to just handle '.' and ','.

Fixes: lp:1782797
* https://bugs.launchpad.net/kicad/+bug/1782797
2018-07-26 21:27:49 +01:00
Marcus A 31f77fc040 Fix detection of wxWidgets toolkit
wxWidgets_CONFIG_OPTIONS can be utilised to explicitly select GTK2 or GTK3. It
must be evaluated when querying the toolkit to avoid a mismatch between the
version actually used and the version KiCad assumes to be used.
2018-07-26 17:23:28 +02:00
Marcus A d5f81c7255 Fix some typos in CMakeLists.txt 2018-07-26 16:47:52 +02:00
Marcus A 0dcc26f866 Update description of build options
Commit 93683d0021 changed the default build
options but did not update their description.
2018-07-26 16:47:52 +02:00
Jeff Young cd3d4b106a Add event.Skip() call so someone else handles the focus.
DIALOG_EDIT_ONE_FIELD::OnSetFocusText() is only for setting the
selection correctly, not doing the actual focus.

Fixes: lp:1783615
* https://bugs.launchpad.net/kicad/+bug/1783615
2018-07-26 15:43:53 +01:00
Jeff Young cb61525394 Handle separate parsing rules for ID_SCH and ID_PCB.
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
2018-07-26 15:43:53 +01:00
John Beard 9ec6efbf13 Add icon for update PCB from Schematic
This previously used the "import board file" icon, which is a bit
confusing, as the action is not importing into a PCB.
2018-07-26 15:43:53 +01:00
Jeff Young b5634b1d08 Dialog spacing cleanup. 2018-07-26 15:43:53 +01:00
Martin Aberg f3983cc47f eeschema: fixed typo Brighened -> Brightened
This affects a color string in the eeschema config file.
2018-07-26 15:43:53 +01:00
John Beard 1e11df650c Typos and inconsistencies in FP and Pad dialogs
* 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
2018-07-26 16:40:08 +02:00
Tomasz Wlostowski 07d56a2e32 BOARD::PadDelete() should update connectivity
Fixes: lp:1783528
* https://bugs.launchpad.net/kicad/+bug/1783528
2018-07-26 16:21:02 +02:00
Maciej Suminski 630631b41b Code formatting 2018-07-26 16:04:31 +02:00
Tomasz Wlostowski a9af4d0141 ZONE_CREATE_HELPER: fixed crash when adding a cutout to a zone
Fixes: lp:1783541
* https://bugs.launchpad.net/kicad/+bug/1783541
2018-07-26 15:30:21 +02:00
Maciej Suminski bbfc1eb12c Use quoted file name when opening a PDF file
Fixes: lp:1783667
* https://bugs.launchpad.net/kicad/+bug/1783667
2018-07-26 12:05:05 +02:00
Maciej Suminski dbf4bcdbb7 Converted PNS Length Tuning dialog to use TransferData{From,To}Window()
Fixes: lp:1783694
* https://bugs.launchpad.net/kicad/+bug/1783694
2018-07-26 10:08:44 +02:00
jean-pierre charras 1e43773a95 Fix not understandable comment 2018-07-25 21:01:59 +02:00
jean-pierre charras f13a546c9b Fix a few wxWidgets asserts or alerts. 2018-07-25 20:26:55 +02:00
Jeff Young 05b2060e12 Replace missing growable-row spec.
Fixes: lp:1783545
* https://bugs.launchpad.net/kicad/+bug/1783545
2018-07-25 14:41:20 +01:00
John Beard f01cf15528 Add field properties icon: opamp + T
This was just a text icon, which was not clear about the function
of the button.
2018-07-25 14:41:20 +01:00
John Beard d0b13c90d8 New part properties icon: opamp + gear
This was just the gear, which is conflated with general preferences.
Adding the opamp makes the connection to "symbol/part" clearer.
2018-07-25 14:41:20 +01:00
Jeff Young 822ebf6955 Move symbol management to a standard Save As... model.
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
2018-07-25 14:41:20 +01:00
Jeff Young e55bb9e748 Increment references when creating an array.
While it's not always correct, not doing so is pretty much always
incorrect.

Fixes: lp:1625964
* https://bugs.launchpad.net/kicad/+bug/1625964
2018-07-25 14:41:20 +01:00
Maciej Suminski 39d8d143d6 Fixed KIDIALOG freeze
wxDialog calls Show(false) when the dialog is about to be closed, but
KIDIALOG::Show() implementation did not forward the show parameter to
wxRichMessageDialog::Show() invocation. As the parameter was not
specified, the mentioned Show() call always used 'true' as the default
parameter, preventing the dialog from being closed.

Fixes: lp:1782999
* https://bugs.launchpad.net/kicad/+bug/1782999
2018-07-25 11:50:04 +02:00
John Beard 6df2d69b6e Add global zone fill/unfill to Edit menu
This means if you don't know the hotkey, the tool action can be
reached without having to activate the zone tool.

Fixes: lp:1783250
https://bugs.launchpad.net/kicad/+bug/1783250
2018-07-25 09:04:51 +02:00
Jeff Young 994a9c5ff8 Only show all layers when the stackup changes.
Fixes: lp:1783231
* https://bugs.launchpad.net/kicad/+bug/1783231
2018-07-24 18:43:44 +01:00
Jeff Young 7fa3491616 Make it clear that we're append the content of a schematic.
Fixes: lp:1563477
* https://bugs.launchpad.net/kicad/+bug/1563477
2018-07-24 18:03:40 +01:00
Jeff Young 83a56263d0 Strip returns, tabs and linefeeds from SCH fields.
Fixes: lp:1783285
* https://bugs.launchpad.net/kicad/+bug/1783285
2018-07-24 16:41:19 +01:00
John Beard 7acc0b89f9 Pcbnew: fix 45-degree snapping of ruler and dimension tools
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
2018-07-24 15:01:02 +01:00
John Beard 9d15e58462 Pcbnew: add new icon for board setup
Previously, the generic "options" gear was used, which was
confusing.

This commit add a new icon, options_board, specifically for
board-wide options.
2018-07-24 14:58:19 +01:00
Jeff Young 2d4ba56ac0 Promote aperture pads to first-class citizens.
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
2018-07-24 14:57:45 +01:00
Jeff Young 4618c64213 Don't number aperture pads.
Fixes: lp:1781760
* https://bugs.launchpad.net/kicad/+bug/1781760
2018-07-24 10:39:30 +01:00
Jeff Young f79ca271e3 Replace missing #ifndef's.
We only process symlinks on POSIX kernels (Linux and OSX).

Fixes: lp:1548798
* https://bugs.launchpad.net/kicad/+bug/1548798
2018-07-24 09:05:39 +01:00
jean-pierre charras 1510c2c56f Fix incorrect arc calculation when building the board outline (internal holes only)
Fixes: lp:1783181
https://bugs.launchpad.net/kicad/+bug/1783181
2018-07-24 09:17:20 +02:00
Jeff Young bc47f085df Support symlinks for .pretty and .lib files.
Fixes: lp:1548798
* https://bugs.launchpad.net/kicad/+bug/1548798
2018-07-23 23:50:13 +01:00
Jeff Young 4d3aeb3339 Make sure cur_lib_table is initialized.
The panel doesn't get Show() events so do it in the constructor.
2018-07-23 23:50:13 +01:00
John Beard f0c571769c Fix -Wcatch-value in sexpr.cpp
This is fixed by catching bty const-ref, rather than by value.

Also a few trailing space deletions.
2018-07-23 14:40:16 -04:00
Adam Wolf e3cf2705de Aim macOS users at kicad-mac-builder, and make building for macOS sound less scary. 2018-07-23 13:04:34 -04:00
Wayne Stambaugh b8aec37ef1 Fix external check for KISYS3DMOD environment variable.
Fixes lp:1782708

https://bugs.launchpad.net/kicad/+bug/1782708
2018-07-23 12:47:48 -04:00
jean-pierre charras 306729f3b7 DIALOG_ANNOTATE: fix a minor cosmetic issue, and make translation of 2 texts more easy. 2018-07-23 15:48:28 +02:00
jean-pierre charras a27ba65ed2 DXF import: verify the layer used to import the DXF drawings is valid (correctly selected). 2018-07-23 13:58:13 +02:00
jean-pierre charras 82d492a840 Better wxASSERT message in OPENGL_GAL::computeBitmapTextSize, if the char is not found in font. 2018-07-23 13:58:13 +02:00
Jeff Young afd80c3cdb Fix botched attempt to have ruler adjust to unit changes.
Also fixes the context menu so there's a specific one for the
measurement tool, allowing zooming for instance without cancelling
the tool.
2018-07-23 12:37:01 +01:00
Jeff Young 16b5f40817 Remove assert and update ruler units on the fly.
Fixes: lp:1781595
* https://bugs.launchpad.net/kicad/+bug/1781595
2018-07-23 02:02:02 +01:00
Jeff Young 185b524a62 Support both add-empty and add-browse for 3D models.
Also fixes a bug where the selected row and the grid cursor get
separated after a delete.

Fixes: lp:1782747
* https://bugs.launchpad.net/kicad/+bug/1782747
2018-07-23 01:09:47 +01:00
Jeff Young 9ca9225977 Add elipsis to Page Setup button. 2018-07-22 23:39:18 +01:00
Jeff Young 56ff3b3c95 Fix CLion's placement of #includes. 2018-07-22 23:33:36 +01:00
Jeff Young 2a9856ba34 Refresh eeschema print dialog.
Use standard button layout and remove extraneous heading.
Move to TransferDataTo/FromWindow.
Close dialog after printing.

Fixes: lp:1763319
* https://bugs.launchpad.net/kicad/+bug/1763319
2018-07-22 23:29:07 +01:00
Jeff Young d804427c83 Add Open-Schematic tool to PcbNew.
Fixes: lp:1780610
* https://bugs.launchpad.net/kicad/+bug/1780610
2018-07-22 22:36:24 +01:00
Jeff Young 0c042aff7b Use mils for track widths when inches is selected. 2018-07-22 22:36:24 +01:00
jean-pierre charras db712ea643 Footprint editor: display a warning when trying to created a custom pad shape with a Bezier curve.
Currently, Bezier curve (S_CURVE shape) is not supported in a custom pad shape.
2018-07-22 18:39:48 +02:00
jean-pierre charras 4cac974420 Add Bezier curve (S_CURVE shape) support in DIALOG_GRAPHIC_ITEM_PROPERTIES.
Fix some issues related to S_CURVE shape support.
2018-07-22 18:39:48 +02:00
jean-pierre charras 3c6e8c4a40 More support of DRW_SEGMENT Bezier curve (support in 3D viewer, and PnS router). 2018-07-22 18:39:48 +02:00
jean-pierre charras e58e5966dc remove old lib_dxf 2018-07-22 18:39:47 +02:00
jean-pierre charras 7291059489 replace lib_dxf by dxflib from qcad in dxf2idf code 2018-07-22 18:39:47 +02:00
jean-pierre charras 72d1597201 DXF import: add import of DXF splines that are converted to Bezier curves.
Fix also a lot of bugs related to Bezier curves (S_CURVE shape in DRAW_SEGMENT class) in Pcbnew code.
Add missing code to handle these Bezier curves
2018-07-22 18:39:47 +02:00
jean-pierre charras 3d4e61ddb8 dxflib: Fix static analyzer warnings 2018-07-22 18:39:47 +02:00
jean-pierre charras 66f00746c9 Add dxflib dxf read/write library from qcad project and tinyspline library. tinyspline library allows dxf splines conversion to Bezier curves supported by Pcbnew 2018-07-22 18:39:46 +02:00
jean-pierre charras 5ee1caf0b9 dialog DIALOG_NONCOPPER_ZONES_PROPERTIES: resize widgets when resizing the dialog frame. 2018-07-22 18:37:28 +02:00
Maciej Suminski 45c1742a3f pcbnew: Disabled UI update for pcbnew console menu item
UI update event handler updates toolbar button state for the scripting
console, but for the associated menu item it displays an assert saying that
the menu item that cannot be checked. To avoid that, the UI update event
handler returns early if event does not come from the toolbar.
2018-07-22 16:09:46 +02:00
Jeff Young 7f64f41242 Fix layout issues in Global Label dialog.
Fixes: lp:1782904
* https://bugs.launchpad.net/kicad/+bug/1782904
2018-07-22 16:21:51 +01:00
Jeff Young 65f4743a44 Sort pads by netlist before running single-pad-net tests.
Fixes: lp:1782660
* https://bugs.launchpad.net/kicad/+bug/1782660
2018-07-22 16:21:51 +01:00
jean-pierre charras 8026d2aa41 Fix incorrect behavior of the wxChoice used in dialog zone properties.
For some reason the wxChoice did not close after a selection (at least on Windows).
Perhaps due to some window ID collision.
2018-07-22 15:47:45 +02:00
Jeff Young d32fb68fa9 Remove debugging and add grouping box for Nets & Net Filters.
Fixes: lp:1782766
* https://bugs.launchpad.net/kicad/+bug/1782766

(cherry picked from commit a75f376)
2018-07-22 11:19:21 +01:00
Jeff Young 7cce283fea Fix diff pair custom values.
Fixes: lp:1782971
* https://bugs.launchpad.net/kicad/+bug/1782971

(cherry picked from commit 53f35a3)
2018-07-22 11:19:17 +01:00
Jeff Young 7dfc4e30e4 Add some debugging statements to find out what's up with GTK. 2018-07-21 23:17:46 +01:00
Jeff Young 07a665f4fd Improve validation of symbol fields editor.
Don't beep when inserting character from focused grid cell (but
before editor is opened).

Handle reference validation separately from name validation and
separately from user field value validation.  The old way of setting
the fieldId on the validator wasn't working because the validator
gets copied.

Run validation when leaving cell.  Don't just check for empty
(particularly for fields that CAN be empty).

Fixes: lp:1782917
* https://bugs.launchpad.net/kicad/+bug/1782917

(cherry picked from commit 79e04de)
2018-07-21 21:28:13 +01:00
Jeff Young 3a9e98c8c7 Don't put artificial limit on rotation string length.
Fixes: lp:1782753
* https://bugs.launchpad.net/kicad/+bug/1782753

(cherry picked from commit 4b67fec)
2018-07-21 21:28:11 +01:00
Jeff Young b6934bf547 Remove duplicate labels from global label popup.
Fixes: lp:1782895
* https://bugs.launchpad.net/kicad/+bug/1782895
2018-07-21 14:51:35 +01:00
Jeff Young 833e0b3c0f One more attempt to get the layers list width right on GTK.
Fixes: lp:1782766
* https://bugs.launchpad.net/kicad/+bug/1782766
2018-07-21 14:44:01 +01:00
Jeff Young 86d98ee7fd Check via X and Y for indeterminate value before setting.
Fixes: lp:1782889
* https://bugs.launchpad.net/kicad/+bug/1782889
2018-07-21 14:05:03 +01:00
Jeff Young 5c646119a7 Allow user-specification of dimension units.
Also fixes a units bug when round-tripping a dimension through
the file format.

Fixes: lp:1782797
* https://bugs.launchpad.net/kicad/+bug/1782797
2018-07-21 13:50:21 +01:00
Jeff Young 06ea7cdb79 Don't sends events during initialization of UNIT_BINDER.
It can get us in all sorts of trouble.

Fixes: lp:1782855
* https://bugs.launchpad.net/kicad/+bug/1782855
2018-07-21 09:42:12 +01:00
Jeff Young 6d2dfbb5c3 Add Select Footprint and Show Datasheet to Symbol Fields Editor.
Fixes: lp:1782848
* https://bugs.launchpad.net/kicad/+bug/1782848
2018-07-20 23:27:50 +01:00
Jeff Young 2c833f2c91 Fix layout issues in Copper Zones dialog.
(The list width issue probably also affects other zone dialogs.)

Fixes: lp:1782766
* https://bugs.launchpad.net/kicad/+bug/1782766
2018-07-20 22:21:51 +01:00
Jeff Young ea3ef1eb87 Don't lose model filepath when writing spin boxes back.
Also renames a bunch of stuff to be clearer.

Fixes: lp:1782753
* https://bugs.launchpad.net/kicad/+bug/1782753
2018-07-20 21:59:12 +01:00
Jeff Young 87f72c3d97 Initialize layer comboboxes before trying to set them.
Fixes: lp:1782794
* https://bugs.launchpad.net/kicad/+bug/1782794
2018-07-20 20:29:15 +01:00
Jeff Young 0beaed0439 Use cross-platform header file. 2018-07-20 20:02:45 +01:00
Jeff Young c1df78d531 Finish project frame library table editing.
Fixes: lp:1782761
* https://bugs.launchpad.net/kicad/+bug/1782761
2018-07-20 18:48:06 +01:00
Jeff Young bd90341e91 Add Footprint & Datasheet buttons to Edit Symbol dialog. 2018-07-20 18:48:06 +01:00
Maciej Suminski fecadeca23 Initialize variables in DIALOG_TEXT_PROPERTIES
Fixes: lp:1782547
* https://bugs.launchpad.net/kicad/+bug/1782547
2018-07-20 10:33:44 +02:00
Jeff Young da35b16392 Allow dialogs to have no parent.
Fixes: lp:1782661
* https://bugs.launchpad.net/kicad/+bug/1782661
2018-07-20 00:07:07 +01:00
Jeff Young 3c1dc9e5c6 Must also set local coords when moving footprint texts.
Fixes: lp:1782542
* https://bugs.launchpad.net/kicad/+bug/1782542
2018-07-19 23:26:24 +01:00
Baranovskiy Konstantin c08ef3e8f9 Fix untranslatable label.
Column label "Qty" of the symbol fields editor is translatable now.

(cherry picked from commit e7b9b0e)
2018-07-19 23:09:41 +01:00
Jeff Young e02fe83a71 Some minor cleanup. 2018-07-19 21:46:41 +01:00
Jeff Young ba0c823673 Fix flicking issues on non-double-buffered platforms. 2018-07-19 21:46:41 +01:00
Jeff Young 3a67300001 Fix reference text smart selection for Windows and Linux.
Fixes: lp:1782382
* https://bugs.launchpad.net/kicad/+bug/1782382
2018-07-19 21:46:41 +01:00
Jeff Young eaf5b913b6 Add Manage Symbol and Footprint Library tables to project frame.
Fixes: lp:1780604
* https://bugs.launchpad.net/kicad/+bug/1780604
2018-07-19 21:46:41 +01:00
Jeff Young 5621f4221a A few more spacing & font-size updates for Windows. 2018-07-19 21:46:41 +01:00
Maciej Suminski 887ee46935 Fixed a crash in DIALOG_COPPER_ZONE
wxDataViewCtrl used an incorrect column type, which made wxWidgets try
to extract wxDataViewIcon from an integer variable.

Fixes: lp:1782449
* https://bugs.launchpad.net/kicad/+bug/1782449
2018-07-19 11:11:13 +02:00
Jeff Young 829ba27206 Another round of dialog spacing/font adjustments for Windows. 2018-07-18 17:59:05 +01:00
Jeff Young 93c173fcdd Add board setup and update PCB from schematic to toolbar.
Also reorders toolbar to more closely align with menus (and
eeschema).
2018-07-18 00:01:35 +01:00
Jeff Young 879ffa4d1c Adjust dialog spacing for Windows. 2018-07-17 22:18:27 +01:00
jean-pierre charras c585964da9 fix coding style issues. 2018-07-17 19:55:33 +02:00
Seth Hillbrand 840ad7f680 Add SH_ARC collisions 2018-07-17 10:08:13 -07:00
Jeff Young 65d72e1c11 Fix compile errors on non-GCC compilers.
Fixes: lp:1782148
* https://bugs.launchpad.net/kicad/+bug/1782148

(cherry picked from commit 2ada8fa)
2018-07-17 15:14:31 +01:00
Jeff Young e6b55c9ae5 New net membership controls for more efficient operation.
(cherry picked from commit f7c5a54)
2018-07-17 15:14:28 +01:00
Jeff Young 977f27f3c4 Adjust spacing on preference panels.
Giving them the correct parent changed the spacing.

(cherry picked from commit 7f602f3)

(cherry picked from commit 718db46)
2018-07-17 15:14:25 +01:00
Jeff Young abae094955 Remove unused variables.
(cherry picked from commit 4fc5281)

(cherry picked from commit b151c8d)
2018-07-17 15:14:22 +01:00
Jeff Young 909f850d16 Give panels the correct parent (the treebook, not the dialog).
(cherry picked from commit 7338533)

(cherry picked from commit 3ce75be)
2018-07-17 15:14:19 +01:00
Jeff Young e329a411bf Add grid and zone dropdowns to GerbView frame.
(cherry picked from commit be5c1e2)
2018-07-17 15:13:58 +01:00
Jeff Young 5048260749 Turn on library filter when library is selected.
It's a pretty good clue that the user wants to filter the footprints
by library (as it has no other purpose).

Fixes: lp:1780487
* https://bugs.launchpad.net/kicad/+bug/1780487

(cherry picked from commit b9a56f1)
2018-07-17 15:13:55 +01:00
Jeff Young 99db5cb543 Allow for reduced nagging with wider use of KIDIALOG.
(cherry picked from commit c2dd5df)
2018-07-17 15:13:53 +01:00
Jeff Young a52605957e Reduce verbosity in netlist updating messages.
Fixes: lp:1615755
* https://bugs.launchpad.net/kicad/+bug/1615755

(cherry picked from commit 798efbd)
2018-07-17 15:13:51 +01:00
Jeff Young 7dcc8e346f Add Edit context menu item for EEschema graphic lines.
Fixes: lp:1779554
* https://bugs.launchpad.net/kicad/+bug/1779554

(cherry picked from commit 02b29ba)
2018-07-17 15:13:49 +01:00
Jeff Young a4c5e2c82f Fix focus issues with dialog previews.
Use SetStealsFocus() to fix the Pad Properties dialog, and remove
mouse-enter-kill-focus to fix 3D preview in Footprint Properties
dialog.

Fixes: lp:1761321
* https://bugs.launchpad.net/kicad/+bug/1761321

Fixes: lp:1690766
* https://bugs.launchpad.net/kicad/+bug/1690766

(cherry picked from commit e0c1fc9)
2018-07-17 15:13:47 +01:00
Jeff Young deed1d67b3 Make SMD terminology consistent.
Fixes: lp:1656688
* https://bugs.launchpad.net/kicad/+bug/1656688

(cherry picked from commit 2946163)
2018-07-17 15:13:45 +01:00
Jeff Young a747d074c4 Add Worksheet to Render Items for GerbView.
Also added PCB Background Color.

Fixes: lp:1780362
* https://bugs.launchpad.net/kicad/+bug/1780362

(cherry picked from commit f789ef1)
2018-07-17 15:13:43 +01:00
Jeff Young 68e7a49b53 Add position to Eeschema's edit text dialogs.
Fixes: lp:1627467
* https://bugs.launchpad.net/kicad/+bug/1627467

(cherry picked from commit 07c7828)
2018-07-17 15:13:41 +01:00
Jeff Young 45e6dfc7af Simplify copy/paste of pad settings.
Fixes: lp:1743141
* https://bugs.launchpad.net/kicad/+bug/1743141

(cherry picked from commit 13ece03)
2018-07-17 15:13:39 +01:00
Jeff Young 1bca706115 Move search status messages to Find/Replace dialog.
Fixes: lp:1777699
* https://bugs.launchpad.net/kicad/+bug/1777699

(cherry picked from commit 1ae8a2b)
2018-07-17 15:13:37 +01:00
Jeff Young d016238c82 Rewrite Move And Swap Layers dialog.
Fixes: lp:1670422
* https://bugs.launchpad.net/kicad/+bug/1670422

(cherry picked from commit 356a767)
2018-07-17 15:13:35 +01:00
Jeff Young 7d71861015 If the user has a selection then show the footprint.
Don't be pedantic about it having to come from the footprint
list, the component list also has footprints assigned.

(cherry picked from commit 759fba1)
2018-07-17 15:13:32 +01:00
Jeff Young 34857d06c4 Create CvPcb's footprint viewer through Kiway().Player()
This allows it to participate in Kiway things such as updating
language or common settings.

Fixes: lp:1779558
* https://bugs.launchpad.net/kicad/+bug/1779558

(cherry picked from commit b3f8478)
2018-07-17 15:13:31 +01:00
Jeff Young df863e44e2 Wire m_showPageLimits control up to GAL canvas.
Fixes: lp:1499285
* https://bugs.launchpad.net/kicad/+bug/1499285

(cherry picked from commit 4cb7442)
2018-07-17 15:13:29 +01:00
Jeff Young 6a7e6e7735 Fix a few more missing language-change updates.
Fixes: lp:1779513
* https://bugs.launchpad.net/kicad/+bug/1779513

(cherry picked from commit 8389c5c)
2018-07-17 15:13:27 +01:00
Jeff Young fb21069c5a Refresh layer selection dialogs.
Use platform-native widgets to show selection and draw layer
colours over the PCB background colour.

(cherry picked from commit 4f95f7f)
2018-07-17 15:13:24 +01:00
Jeff Young 7c3a67191b Freshen the BOM dialog.
Layout freshened to include standard button layout.
Fall-behind Add Plugin dialog also fixed.

(cherry picked from commit 30dac89)
2018-07-17 15:13:22 +01:00
Jeff Young 420c2020fb Overhaul Symbol Library References dialog.
Fixes some layout issues and standardizes the action buttons.
Also works around a wxWidgets bug in row sizing.

(cherry picked from commit 7abc922)
2018-07-17 15:12:58 +01:00
Martin Aberg 41829162d2 eeschema: improve hierarchical sheet text placement
Take field name sizes and user preference line thickness into account
when calculating placement of the text fields of a hierarchical sheet on
the canvas.

The previous calculations contained some magic numbers which seem to
have been well suited to cases where line width is 8 and text size is
0.050. However, the text collided with the sheet outline as soon as text
size or line width was increased.

This commit has been evaluated with line widths ranging from 5 to 100
and text sizes ranging from 0.02 to 0.200. Also in combination with
characters such as qyg and ÅÄÖÜ in the file/sheet names.

(cherry picked from commit b1a60b2)
2018-07-17 15:12:55 +01:00
Martin Aberg 5b55a0d8e6 eeschema: clamp text line width on hierarchical sheets
When drawing a hierarchical sheet symbol, the text line width for
"Sheet: ..." and "File: ..." are now clamped (limited).
Clamp_Text_PenSize() is used for the calculation.

Before, without the clamping, these text widths grew with the line width
preferences option. That resulted in characters cluttering up.

(cherry picked from commit b76407e)
2018-07-17 15:12:47 +01:00
Jeff Young f72842405a Add existing label popup to properties dialog.
Fixes: lp:1639719
* https://bugs.launchpad.net/kicad/+bug/1639719

Fixes: lp:1778330
* https://bugs.launchpad.net/kicad/+bug/1778330

(cherry picked from commit 14ebff6)
2018-07-17 15:12:45 +01:00
Jeff Young da69a7cd9c Enable position-relative tool in footprint editor.
Fixes: lp:1778624
* https://bugs.launchpad.net/kicad/+bug/1778624

(cherry picked from commit 3ee9703)
2018-07-17 15:12:43 +01:00
Jeff Young 5db4a85430 Fix Update Fields to use alias values.
Fixes: lp:1778826
* https://bugs.launchpad.net/kicad/+bug/1778826

(cherry picked from commit 1de2a80)
2018-07-17 15:12:41 +01:00
Jeff Young 49ea6e1670 Fix occurrences of "edition" which should be "editing"
Fixes: lp:1778168
* https://bugs.launchpad.net/kicad/+bug/1778168

(cherry picked from commit bcb1220)
2018-07-17 15:12:39 +01:00
Jeff Young d5e88f574f Clean up units infrastructure after g_UserUnit removal.
Fixes: lp:1538239
* https://bugs.launchpad.net/kicad/+bug/1538239

(cherry picked from commit 96d7178)
2018-07-17 15:12:36 +01:00
Jeff Young aab97c8385 Consolidate design rules UI.
Implement new Board Setup paged dialog which includes:
  Layers Setup
  Design Rules
  Solder Mask & Paste
  Text & Drawings

Moves line width and text properties to a layer-class-based
system.  Renames unlocked to upright (which also reverses the
logic).

New Edit Text and Graphic Properties dialog which replaces
Edit Footprint Text and adds layer-class-based editing and the
italic, upright and visibility properties.

Adds Import Settings functionality which allows settings to
be imported from another project at page granularity.

Also UNIT_BINDERizes the dialog and adds editing of pcb text.

Fixes: lp:1731952
* https://bugs.launchpad.net/kicad/+bug/1731952

Fixes: lp:1743464
* https://bugs.launchpad.net/kicad/+bug/1743464

Fixes: lp:1664761
* https://bugs.launchpad.net/kicad/+bug/1664761

Fixes: lp:1753362
* https://bugs.launchpad.net/kicad/+bug/1753362

Fixes: lp:1545427
* https://bugs.launchpad.net/kicad/+bug/1545427

Fixes: lp:1753775
* https://bugs.launchpad.net/kicad/+bug/1753775

Fixes: lp:1777692
* https://bugs.launchpad.net/kicad/+bug/1777692

Fixes: lp:1780670
* https://bugs.launchpad.net/kicad/+bug/1780670

Fixes: lp:1519601
* https://bugs.launchpad.net/kicad/+bug/1519601

(cherry picked from commit 3944a5e)
2018-07-17 15:12:34 +01:00
Jeff Young 5f3ee1e7ce More g_UserUnit erradication.
(cherry picked from commit 3f08780)
2018-07-17 15:12:31 +01:00
Jeff Young 0358aee89e UNIT_BINDERize print and plot dialogs.
Fixes: lp:1778560
* https://bugs.launchpad.net/kicad/+bug/1778560

Fixes: lp:1392991
* https://bugs.launchpad.net/kicad/+bug/1392991

Fixes: lp:1780362
* https://bugs.launchpad.net/kicad/+bug/1780362

(cherry picked from commit 9df9743)
2018-07-17 15:12:29 +01:00
Jeff Young ff34c7a948 Eradicate g_userUnit from router.
(cherry picked from commit 5e90e6b)
2018-07-17 15:12:26 +01:00
Jeff Young ae2cb331b1 Merge PCBnew text edit dialogs.
(cherry picked from commit 63b7738)
2018-07-17 15:12:24 +01:00
Jeff Young 40c1c8285d Combine PCBnew and ModEdit Graphic Item Properties dialogs.
Also UNIT_BINDERizes the result.

(cherry picked from commit edd3b25)
2018-07-17 15:12:21 +01:00
Jeff Young ef3e045a9b Eradicate g_UserUnit from ERC/DRC.
(cherry picked from commit 98b8cd4)
2018-07-17 15:12:16 +01:00
Jeff Young 2ff414adb4 Simplify Move Exactly and Postion Relative dialogs.
Also removes g_UserUnit references.

Fixes: lp:1660154
* https://bugs.launchpad.net/kicad/+bug/1660154

(cherry picked from commit 1639636)
2018-07-17 15:12:11 +01:00
Jeff Young 5ce0f8ba54 Kill off a few more g_UserUnit references.
(cherry picked from commit 452b1a7)
2018-07-17 15:12:07 +01:00
Jeff Young cae249bbb8 UNIT_BINDERize and simplify Layers Setup dialog.
The colours don't add much in the way of comprehension and they
do add visual complexity.  Same for the labels at the top of
the layers list box.

Also improved the grouping to make the presets aciton more clear.

(cherry picked from commit 1a03e13)
2018-07-17 15:12:02 +01:00
Jeff Young a7b3fac7b5 Remove colours from message text items.
Fixes: lp:1674015
* https://bugs.launchpad.net/kicad/+bug/1674015

(cherry picked from commit 125d5b7)
2018-07-17 15:11:40 +01:00
Jeff Young 3e062867de Move all the grid workarounds into our own WX_GRID class.
(cherry picked from commit 08b4463)
2018-07-17 15:11:38 +01:00
Jeff Young 68e23c9271 Clean up some ERC error messages.
Fixes: lp:1772297
* https://bugs.launchpad.net/kicad/+bug/1772297

(cherry picked from commit e98b6f6)
2018-07-17 15:11:35 +01:00
Jeff Young 92dcf43ae8 UNIT_BINDERize zone dialogs.
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)
2018-07-17 15:11:32 +01:00
Jeff Young 06bf958bf1 UNIT_BINDERize eeschema's plot and text edit dialogs.
(cherry picked from commit 298ea70)
2018-07-17 15:11:26 +01:00
Jeff Young e4d9366fe4 UNIT_BINDERize Pin Properties dialog.
(cherry picked from commit c609087)
2018-07-17 15:11:24 +01:00
Jeff Young 52271d3195 Add an Add Field button to global Field Editor.
Fixes: lp:1747602
* https://bugs.launchpad.net/kicad/+bug/1747602

(cherry picked from commit 1e5b1b0)
2018-07-17 15:11:22 +01:00
Jeff Young 2060d63e3f Add context menu for footprint viewing to CvPcb.
Fixes: lp:594102
* https://bugs.launchpad.net/kicad/+bug/594102

(cherry picked from commit 800bb8e)
2018-07-17 15:11:20 +01:00
Jeff Young 7841f8a466 Unified preferences dialog framework.
(cherry picked from commit 8ee3e77)
2018-07-17 15:11:17 +01:00
Jeff Young 2283bcda4c Add text item property options when updating footprints.
Fixes: lp:1753286
* https://bugs.launchpad.net/kicad/+bug/1753286

(cherry picked from commit b94dd87)
2018-07-17 15:11:14 +01:00
Jeff Young bbc25cd694 Add hole-to-hole clearance testing to DRC.
Also move courtyard testing flags to BoardSettings API.  Both are
still stored in the config until we decide where they go in order
to prevent prematurely disturbing the board file format.

Fixes: lp:684067
* https://bugs.launchpad.net/kicad/+bug/684067

(cherry picked from commit 5399f60)
2018-07-17 15:11:11 +01:00
Jeff Young eacaa39aa2 Remove global units usage from GetSelectionText...
... 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)
2018-07-17 15:11:09 +01:00
Jeff Young 1569842927 Pad properties usability enhancements.
Also includes conversion to UNIT_BINDER for pad properties and
pad primitives properties dialogs.

(cherry picked from commit 4a051da)
2018-07-17 15:11:06 +01:00
Jeff Young 0010ad37d1 In-place editing for footprint TEXTE_MODULEs.
Fixes: lp:1102168
* https://bugs.launchpad.net/kicad/+bug/1102168

Fixes: lp:1779913
* https://bugs.launchpad.net/kicad/+bug/1779913

(cherry picked from commit 83781ab)
2018-07-17 15:11:04 +01:00
Jeff Young 8f0aa68ab8 Fold 3D Search Paths dialog into Configure Paths.
Use in-place editing for both.

Fixes: lp:1743823
* https://bugs.launchpad.net/kicad/+bug/1743823

(cherry picked from commit 33622cd)
2018-07-17 15:11:01 +01:00
Jeff Young 124c6d9857 Add in-place editing and validation to Design Rules.
Includes UNIT_BINDER transition and some general layout cleanup.

(cherry picked from commit 282119e)
2018-07-17 15:10:55 +01:00
Jeff Young 99fb938b8f Add updating of visiblity, position, etc. to fields.
Fixes: lp:1752752
* https://bugs.launchpad.net/kicad/+bug/1752752

Fixes: lp:1643890
* https://bugs.launchpad.net/kicad/+bug/1643890

(cherry picked from commit 9f60005)
2018-07-17 15:10:50 +01:00
Jeff Young 23189f8e1b Move annotation confirmation dialogs to KIDIALOG.
(cherry picked from commit 05e04e8)
2018-07-17 15:10:45 +01:00
Jeff Young 05ef6f05d1 Move SanitizePads to CLIENT_SELECTION_FILTER architecture.
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)
2018-07-17 15:10:18 +01:00
Jeff Young 31aebe6920 UI infrastructure enhancements and bug fixes.
Work around wxWidgets failure to send first key through validator.

Unify treatment of INDETERMINATE values (such as for multiple
selections with mixed values).

(cherry picked from commit 7308729)
2018-07-17 15:10:15 +01:00
Jeff Young f7861c90ec Use more self-documenting names for conversion routines.
In particular, make sure no one thinks the low-precision ones are
OK for dialogs and/or files.

(cherry picked from commit bc1fcfa)
2018-07-17 15:10:13 +01:00
Jeff Young f5d70644f2 If you want to look at old code, use GIT.
(cherry picked from commit 42d3315)
2018-07-17 15:10:11 +01:00
Jeff Young c8b02674dc Direct editing of LIB_FIELDs and SCH_FIELDs in dialogs.
Fixes: lp:1676178
* https://bugs.launchpad.net/kicad/+bug/1676178

Fixes: lp:1749220
* https://bugs.launchpad.net/kicad/+bug/1749220

Fixes: lp:1779557
* https://bugs.launchpad.net/kicad/+bug/1779557

Fixes: lp:1425134
* https://bugs.launchpad.net/kicad/+bug/1425134

Fixes: lp:1565195
* https://bugs.launchpad.net/kicad/+bug/1565195

(cherry picked from commit b6aee79)
2018-07-17 15:10:08 +01:00
Jeff Young bcd9a7745d Make the pin table editable.
Also adds generic icon + text grid renderer and grid editor.

Fixes: lp:1521055
* https://bugs.launchpad.net/kicad/+bug/1521055

Fixes: lp:1528817
* https://bugs.launchpad.net/kicad/+bug/1528817

(cherry picked from commit 067f777)
2018-07-17 15:10:06 +01:00
Jeff Young 7be85deb32 GRID_TRICKS improvements.
Allow copy of a single cell demarcated by the grid cursor.

Paste of lib_table s-expressions should always start at 0,0.

Let caller or specialized sub-class do auto-sizing; don’t
do it from within the base GRID_TRICKS.

Don’t start GRID_TRICKS menu IDs at -1; wxWidgets doesn’t
like it when you get to 0.

Add column visibility menu.

(cherry picked from commit e5071ed)
2018-07-17 15:10:03 +01:00
Jeff Young f0f9e4a1cb Kicad-ize the numeric evaluator.
Naming conventions, code formatting, and wxStrings.

(cherry picked from commit 4a0d7a8)
2018-07-17 15:10:01 +01:00
Jeff Young 0f78f97232 Get rid of 5.0 dialog focus hacks.
It's time to fix the focus issues.  This adds a new SetInitialFocus()
routine to DIALOG_SHIM which will need to be called from a lot of
dialogs.

(cherry picked from commit 6d9647a)
2018-07-17 15:09:58 +01:00
Jeff Young a39fb03822 Remove some references to g_UserUnit
(cherry picked from commit 614d832)
2018-07-17 15:09:56 +01:00
Jeff Young 74acb76e7f Switch UNIT_BINDER and DIALOG_SHIM to local units.
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)
2018-07-17 15:09:53 +01:00
Jeff Young 4f8c546140 Implement user units uniformly in EDA_DRAW_FRAME
Step 1 of the g_UserUnit global eradication.  This commit includes
basic hookup of hotkeys, units tool-buttons and grid dialogs.

(cherry picked from commit e0500ab)
2018-07-17 15:09:51 +01:00
Jeff Young b99ea159c8 Rationalize select menu texts.
Be consistent with order, formatting, etc.
Remove debug stuff such as zone timestamp and net code.
Clean up misleading pad messages.

(cherry picked from commit 2132109)
2018-07-17 15:09:48 +01:00
Jeff Young a1ef5401f4 More platform-standard presentation of DRC dialog.
Also makes better use of space to significantly increase number
of markers shown.

Fixes: lp:1748676
* https://bugs.launchpad.net/kicad/+bug/1748676

(cherry picked from commit a1d8097)
2018-07-17 15:09:46 +01:00
Jeff Young 6ad37972c0 Don't center objects behind the DRC dialog.
(cherry picked from commit d5bb39f)
2018-07-17 15:09:43 +01:00
Jeff Young 3e190cee4b Implement selection brightening for DRC.
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)
2018-07-17 15:09:40 +01:00
Jeff Young e9d877914d Dialog consistency and beautification.
Small icons for dialog browse, refresh, and row operations.
Icons in B&W so they don't over-emphasize with respect to other
controls in the dialog.

Layout cleanup for consistency.  Removal of the blank space to
left of the fields list in the Global Fields Editor, and addition
of column-sizing-to-list-width.

More even spacing for buttons in html report panel.

Honor platform conventions for action button order and layout.

Move netlist importer to update-pcb-from-schematic algorithm
(display messages and then update instead of "dry run" checkbox)

(cherry picked from commit b21e19d)
2018-07-17 15:09:01 +01:00
jean-pierre charras c291505830 Gerbview, read Excellon files: fix a few issues.
The main issue is the fact Excellon files have no coordinate fine format definition.
Only the units are defined.
Units are floating point numbers or integer numbers.
Integer numbers can be defined as 3.3 or 2.4 numbers (mm/inches)
However some files (altium drill files for instance) use an other notation.
This fix is a workaround to accept 2.x (inch) or 3.x (mm) notations.

Fixes: lp:1754121
https://bugs.launchpad.net/kicad/+bug/1754121

Fixes: lp:1782053
https://bugs.launchpad.net/kicad/+bug/1782053
2018-07-17 14:29:28 +02:00
jean-pierre charras 2af5fb51f2 Revert "Perform coordinate format detection on Excellon drill files"
This reverts commit 3e033aee0c.
2018-07-17 14:29:27 +02:00
Maciej Suminski 8ba694e6fd eeschema: fix alias names in .dcm files
Fixes: lp:1781761
* https://bugs.launchpad.net/kicad/+bug/1781761
2018-07-17 14:27:41 +02:00
Jeff Young 01c5bdfb8f Fix bug with duplicate columns in Edit Symbol Fields. 2018-07-16 09:03:27 +01:00
Wayne Stambaugh 1a22918795 Tag version 6.0.0-rc1-dev. 2018-07-13 16:19:53 -04:00
Wayne Stambaugh 84427f463c Tag release 5.0.0. 2018-07-13 15:53:52 -04:00
Wayne Stambaugh bded0cfc19 KiCad: make initial minimum main frame width show all icons.
Fixes lp:1780300

https://bugs.launchpad.net/kicad/+bug/1780300
2018-07-13 15:53:03 -04:00
Wayne Stambaugh eaf938c7e9 Pcbnew: fix missing undo when deleting footprint text object.
Fixes lp:1781224

https://bugs.launchpad.net/kicad/+bug/1781224
2018-07-12 09:36:13 -04:00
Carsten Schoenert 3e22e5ccd3 fix misspelled 'an other' -> 'another' 2018-07-11 10:35:35 -04:00
Carsten Schoenert e81faa2d5f fix misspelled 'allow to' -> 'allow one to' 2018-07-11 10:35:14 -04:00
Carsten Schoenert 9f7109826d fix misspelled 'allows to' -> 'allows one to'
Fixup small grammar issues around used 'allows to ...' almost in
code comments.
2018-07-11 10:35:03 -04:00
Carsten Schoenert 9a13dd48af fix misspelled 'Toogle' -> 'Toggle'
A small typo fixup for misspelled word Toogle.
2018-07-11 10:34:53 -04:00
Maciej Suminski 14ce518208 Speed-up Spice model library loading
Thanks to Jeff Wheeler for determining the slow down cause.

Fixes: lp:1779566
* https://bugs.launchpad.net/kicad/+bug/1779566
2018-07-10 20:55:37 +02:00
Maciej Suminski 0013e0cad1 DRC: test for items located on disabled layers
Fixes: lp:1779281
* https://bugs.launchpad.net/kicad/+bug/1779281
2018-07-10 18:24:15 +02:00
jean-pierre charras 840a8b1d36 Eeschema, renumbering components: Fix multiparts IC supply renumber problem.
With "reset but keep order of multi-units parts" option on, these units were incorrectly grouped.

Fixes: lp:1780876
https://bugs.launchpad.net/kicad/+bug/1780876
2018-07-10 17:53:06 +02:00
Baranovskiy Konstantin 5e1605af19 Values of argc and argv transfers to python environment. 2018-07-08 08:10:44 +02:00
Seth Hillbrand 101b68b610 pcbnew: Keep dp placer on initial layer
Changing the layer after starting the differential pair placer should
not change the inital track layer.

Fixes: lp:1779800
* https://bugs.launchpad.net/kicad/+bug/1779800
2018-07-03 08:23:16 -07:00
jean-pierre charras 3df27430c7 Fix eeschema crash when updating fields from libraries, and when a symbol in schematic is not found in libs
Fixes: lp:1779722
https://bugs.launchpad.net/kicad/+bug/1779722
2018-07-02 21:02:27 +02:00
Wayne Stambaugh 520c6116f5 Version 5.0.0-rc3-dev commit. 2018-06-30 11:16:42 -04:00
Wayne Stambaugh 66a489f6b6 Version 5.0.0-rc3 commit. 2018-06-30 11:02:38 -04:00
Martin Aberg 9b1f2447b6 fp_lib_table: explicit assumption by assert
This commit makes an implicit assumption explicit by describing it with
an assert.

Fixes lp:1778426

https://bugs.launchpad.net/kicad/+bug/1778426
2018-06-29 19:36:58 -04:00
Seth Hillbrand b3db6572e8 pcbnew: diff pair filter bugfix
Added required action on the std::remove_if construct to erase elements
matching the filter
2018-06-29 13:05:44 -07:00
Seth Hillbrand 4af699e919 hotkeys: Don't import v4 hotkeys automatically
Hotkey options have shifted some options from context-specific to global
hotkeys.  This causes conflicts with old hotkey definitions.  Instead,
we keep the v5 eeschema/pcbnew hotkeys completely separate.  Users can
still import their custom hotkey files from v4.

Fixes: lp:1778408
* https://bugs.launchpad.net/kicad/+bug/1778408
2018-06-29 11:20:11 -07:00
Maciej Suminski a14b552d89 Eagle PCB import: handle DRC rules where min value > max value
Fixes: lp:1779126
* https://bugs.launchpad.net/kicad/+bug/1779126
2018-06-29 19:53:20 +02:00
Seth Hillbrand eb2857deab Removing pspice from CMakeLists.txt 2018-06-29 09:27:25 -07:00
Maciej Suminski 42d05e21a7 Updated demos
- moved pspice to simulation
- imported netlists in layout files
2018-06-29 14:04:29 +02:00
Simon Richter d3deaf5ff5 Rewrite test for valid characters in names
The ternary operator decays array arguments to pointers, so they can no
longer be assigned to array references.
2018-06-29 09:42:10 +02:00
Maciej Suminski 47c44b4d83 Unselect 'copy default sym-lib-table' when unavailable
It used to be selected as the primary choice even though the option was
disabled.
2018-06-29 09:19:41 +02:00
Maciej Suminski b43b78bdd2 pcbnew: Prevent double items recaching on start
Thanks to Seth Hillbrand for pointing out the issue.

Fixes: lp:1779002
* https://bugs.launchpad.net/kicad/+bug/1779002
2018-06-29 08:51:46 +02:00
Seth Hillbrand 33075e55a4 pcbnew: Draw the clearance outline first
In Cairo, we don't have z-ordering implemented, so we need to draw the
clearance outline first otherwise it will draw a large, grey overlay
that hides the actual track while routing.

Fixes: lp:1779228
* https://bugs.launchpad.net/kicad/+bug/1779228
2018-06-28 20:28:12 -07:00
Seth Hillbrand ce379f56af pcbnew: Remove extraneous OpenMP shared decl 2018-06-28 12:22:41 -07:00
Seth Hillbrand b0b5d91390 pcbnew: fix OpenMP synch issue
Fixes: lp:1778454
* https://bugs.launchpad.net/kicad/+bug/1778454
2018-06-28 09:28:52 -07:00
Seth Hillbrand 0748c118dd pcbnew: Synchronize zone removal
After refilling zones, we need to unconditionally remove the filled
polys from the map because their fills map have changed.  Left-over
filled polygons will not map to current polygons, creating "ghost"
islands in the connectivity.  Removing these can overflow the polygon
count.

Fixes: lp:1778454
* https://bugs.launchpad.net/kicad/+bug/1778454
2018-06-28 08:12:55 -07:00
Jeff Young 246a9286a9 Fix dialogs with wxID_CANCEL as the window ID.
Fixes: lp:1778990
* https://bugs.launchpad.net/kicad/+bug/1778990

Fixes: lp:1778991
* https://bugs.launchpad.net/kicad/+bug/1778991
2018-06-28 08:38:12 -06:00
John Beard 8181646794 Fix -Wshadow warning in sch_sheet_path.cpp
Three instances of variables named "reference" shadow a typedef
within std::vector producing:

warning: declaration of ‘reference’ shadows a previous local [-Wshadow]
 note: shadowed declaration is here
           typedef typename _Alloc_traits::reference  reference;

This patch works around by renaming "reference" to "schReference".
2018-06-28 10:04:43 -04:00
Seth Hillbrand 06ff56325c eeschema: Fix assignment from d30ac2967 2018-06-28 05:58:22 -07:00
Seth Hillbrand 76f151b4d8 Fix issue with prev d83cff63f
Corrected the new/delete idiom
2018-06-27 16:40:57 -07:00
Seth Hillbrand d83cff63f6 fix memory leak
When staging a commit for an object that has already been modified,
there is a Clone() made for the hypothetical entry.  We need to free it
if we are not storing a new entry.
2018-06-27 16:15:27 -07:00
Seth Hillbrand d30ac2967a eeschema: Rescue symbols with illegal chars
When parsing component names, we need to account for the possibility of
illegal characters (e.g. "/", ":") in the names from v4 libraries.  They
are fixed internally by the cache parser but if we don't fix them
in the rescue routine, the symbol won't match it's cache name.

This standardizes all schematic illegal character routines into LIB_ID

Fixes: lp:1774774
* https://bugs.launchpad.net/kicad/+bug/1774774
2018-06-27 14:15:30 -07:00
Wayne Stambaugh 7eea8f808d Minor Pcbnew dialog fixes.
Fix get footprint by name dialog button sizer padding.

Fix export gencad dialog file name, options, and button sizer padding.
2018-06-27 14:28:18 -04:00
Maciej Suminski 80fa480388 Disable the DRC dialog while the checks are running
Closing the DRC dialog while zones are refilled leads to a crash.
Disabling the dialog prevents the crash.
2018-06-27 19:05:06 +02:00
Maciej Suminski f10aa6c857 Use paths relative to the executable on Windows
Paths based on DEFAULT_INSTALL_PATH do not work on Windows,
as in fact there is no default install path, as in case of Unix-based
systems. In such case, the initial paths point to mingw subdirectories
that normally do not exist on user machines.

The patch changes the initial path values to make them relative to
the executable and follow the current Windows installer scheme.

Fixes: lp:1775796
* https://bugs.launchpad.net/kicad/+bug/1775796
2018-06-27 11:02:48 +02:00
Martin Aberg 9d1b5698e9 Standardize "assign footprints" terminology.
ref: 611d5a0dc4
2018-06-26 13:20:02 -06:00
Tomasz Wlostowski 01c2d93a81 pcbnew: don't rebuild dynamic ratsnest when moving items without a net (e.g. board outlines)
Fixes: lp:1778321
* https://bugs.launchpad.net/kicad/+bug/1778321
2018-06-25 16:30:16 +02:00
John Beard 847f4f50b1 Pcbnew python plugins: fix some pad arrays
Fixes some pad array init functions that were not calling the
class hierarchy's init functions correctly.
2018-06-25 09:34:32 -04:00
John Beard 930f3dd74f Documentation: add logo to Doxygen pages
This adds a small KiCad logo in the top left of the Doxygen pages.

54px used as 55px is maximum recommended height for Doxygen logos.

For the main docs and the dev docs, this is easily done in the Doxyfile,
for the Python docs, as that is run from the binary dir, the source dir
is passed as an Environment variable.
2018-06-25 08:23:17 -04:00
jean-pierre charras ef38a198d1 GerbView: incorrect handling of polygon primitive: broken parameters rotation and drill size.
Fixes: lp:1778459
https://bugs.launchpad.net/kicad/+bug/1778459
2018-06-25 11:00:53 +02:00
Andrzej Wolski 1f6f76beb9 Fix overbar drawing for non-italic text
Overbar was always indented inward, regardless if text was italic or not.
2018-06-24 12:01:10 -04:00
jean-pierre charras f785d27498 Eeschema, label editor dialog: fix a very minor cosmetic issue when resizing the dialog. 2018-06-23 17:53:29 +02:00
jean-pierre charras b8bbb15aa1 Eeschema: fix a bug in sheet properties dialog that break the annotation of the symbols inside this sheet (Windows only)
For the path separator in full filename, the sheet filename from the dialog uses the Unix notation,
and the "old" sheet filename uses the default notation (it is the actual filename).

Therefore, on Windows, after closing the dialog, the filename was always seen as modified,
and the hierarchy was incorrectly modified (annotation cleared).
2018-06-23 16:58:00 +02:00
Martin Aberg 47a4099e64 Disable logging at exit on FreeBSD.
This commit fixes a crash on KiCad exit for FreeBSD.

Usage of the wxLog functions in destructors on program generates an
infinite recursive call loop and segfault on this platform.

The workaround is inpired by:
  https://people.freebsd.org/~wpaul/kicad/kicad_instructions.txt

Fixes: lp:1778334
* https://bugs.launchpad.net/kicad/+bug/1778334
2018-06-23 15:11:32 +02:00
Maciej Suminski 73a8d2a9d5 OPENGL GAL: Fixed the iteration condition when drawing triangulated polyset
The loop used an incorrect variable size as the loop limit,
occasionally causing out of bounds accesses.

Fixes: lp:1778288
* https://bugs.launchpad.net/kicad/+bug/1778288
2018-06-23 02:05:21 +02:00
Maciej Suminski 1751e4631c Code formatting 2018-06-23 01:59:49 +02:00
Andrzej Wolski a7cd62ad12 Save through hole pads color to config file
TH Pads color is now user settable, so should be saved in config file.
2018-06-22 11:34:56 -04:00
Seth Hillbrand dd436b658a pcbnew: Thread safety for connections
Moving the mutex to the class from a local variable protects the
connectivity list against corruption from multiple threads computing the
ratsnest.
2018-06-21 09:34:56 -07:00
Seth Hillbrand e2122db587 pcbnew: Clear unused code 2018-06-21 09:20:48 -07:00
Seth Hillbrand cf04d341ec pcbnew: standardize itemlist/zonelist connectivity
The itemlist and zonelist in connectivity can both contain many items,
so both use the same OpenMP routine.  However, we can only clear the
dirty flag when we conduct a full search, including zones.  Otherwise we
missing connections to zones when propogating changed items that are
then marked as not dirty.

Fixes: lp:1777993
* https://bugs.launchpad.net/kicad/+bug/1777993
2018-06-21 09:19:26 -07:00
jean-pierre charras f634b75652 Pcbnew, plot parameters: fix an issue for the "outputdirectory" parameter.
When the outputdirectory string was similar to a number, the .kicad_pcb file was no longer loadable.

Fixes: lp:1777957
https://bugs.launchpad.net/kicad/+bug/1777957
2018-06-21 12:33:51 +02:00
Seth Hillbrand a552b4ccca box2: fix bug in SetMaximum()
When setting the maximum represented box, std::numerical_limits::min
returns the most negative number only for integers.  For floating point,
it returns the smallest positive number.  std::numerical_limits::lowest
is the same as min for integers but returns the most negative number for
floating point as well.
2018-06-20 20:21:03 -07:00
Seth Hillbrand a1ef441dd9 origin viewitem needs to account for size zoom
The origin item doesn't have a fixed size.  It is constant on the screen but
changes the effective BBox size based on the zoom level.
But we can't simply set it to the maximum size as this causes a splitting degeneracy
when compiling for Debian i386.  By modestly adjusting the bbox, we avoid the degeneracy
while keeping the origin visible at all zoom levels

Fixes: lp:1777379
* https://bugs.launchpad.net/kicad/+bug/1777379
2018-06-20 12:08:57 -07:00
Wayne Stambaugh 8394e2b71e Fix broken LIB_ID library nickname illegal character tests.
During the symbol library table implementation, the legal character
tests for the footprint library table were changed and the forward
slash '/' character became illegal.  This change broke editing some
users footprint library tables that already had '/' in library table
nicknames.  This change split the library nickname and library item
name illegal character tests.
2018-06-20 14:36:40 -04:00
Jeff Young 79e0bb08d0 Architecturally-simpler fix for grid context menu unit changes.
Fixes: lp:1777519
* https://bugs.launchpad.net/kicad/+bug/1777519
2018-06-20 16:54:24 +01:00
Wayne Stambaugh 77217b2089 Fix resizing issues of global track and via properties dialog. 2018-06-20 11:39:11 -04:00
Maciej Suminski 44337dec56 pcbnew GAL: Fix bouncing zoom on mouse wheel scroll in Windows
Handling wxEVT_SCROLLWIN_LINE{UP,DOWN} executes the scroll event handler
too many times causing zoom bounces.

Fixes: lp:1562173
* https://bugs.launchpad.net/kicad/+bug/1562173
2018-06-20 16:55:14 +02:00
Seth Hillbrand 147c1e6088 pcbnew: Allow clearing local ratsnest
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
2018-06-19 15:12:20 -07:00
Seth Hillbrand 6990824597 pcbnew: Hide routing options that are not available
Options that do not have code implementing them are now hidden from the
user so that they are not searching for ways to enable the greyed out
options.  Similarly, when selecting a routing option that disables
free-mode, we show the effect of disabling the mode in the dialog.
2018-06-19 11:11:18 -07:00
jean-pierre charras f52763f22b Legacy canvas: fix issue when zooming in/out using mousewheel: slightly shifts screen up/down.
It happens only when the 'warp and center cursor on zoom' option is disabled.

Was created after modifying the code in EDA_DRAW_FRAME::AdjustScrollBars(),
making EDA_DRAW_FRAME::RedrawScreen2() not working very well.

(partial fix of bug 1562173)
2018-06-19 19:53:00 +02:00
Tomasz Wlostowski f6f726acab router: allow placing tracks/diff pairs without continuing routing by Shift+L-Click
Fixes: lp:1777688
* https://bugs.launchpad.net/kicad/+bug/1777688
2018-06-19 19:30:03 +02:00
Seth Hillbrand 462549fc84 modedit: Add hotkey to switch arc posture
Allows switching arc clockwise/counterclockwise orientation while
drawing in module editor.

Fixes: lp:1777524
* https://bugs.launchpad.net/kicad/+bug/1777524
2018-06-19 09:42:04 -07:00
Jeff Young 3c7b91b96a Always create grid menu so units are up-to-date.
Fixes: lp:1777519
* https://bugs.launchpad.net/kicad/+bug/1777519
2018-06-19 10:52:36 +01:00
Maciej Suminski 81a5c0e3bf GAL: Show ratsnest lines when dragging
GAL is strict regarding which layers are rendered, therefore to show
ratsnest lines when an item is dragged - the ratsnest layer must be kept
enabled. Ratsnest line visibility is enabled per item and this is the
way to show/hide the lines.

Fixes: lp:1666473
* https://bugs.launchpad.net/kicad/+bug/1666473
2018-06-19 11:29:36 +02:00
Maciej Suminski a08c0ac08c kicad2step: Added minimum distance parameter 2018-06-19 10:37:07 +02:00
Maciej Suminski 7ef97e0bca kicad2step: Simplified unit conversion
Instead of using 'm_inch' flag, dimensions are converted in place.
2018-06-19 10:37:07 +02:00
Maciej Suminski 04a462e48f kicad2step: Converted #defines to constexprs 2018-06-19 10:37:07 +02:00
Maciej Suminski f0b3cf8077 STEP export: Stricter contiguity check
Stricter contiguity check points the user to gaps in the outline.

Fixes: lp:1774351
* https://bugs.launchpad.net/kicad/+bug/1774351
2018-06-19 10:36:21 +02:00
Maciej Suminski 1541cbdf04 kicad2step: Add short segments to fix outline contiguity for arcs
STEP exporter keeps outline contiguous by storing the last point
coordinates and using them as the starting point for the next segment. It
might create a problem for arcs, as one of the arc end points may become
translated (changed to the last outline point), while the remaining
points (center and the other endpoint) are kept original. For large
deltas it renders an arc invalid, as it cannot pass through a modified
endpoint anymore.

To fix this, short segments are added to link the last outline point
with an arc endpoint, but only if the distance between the two is below
a certain threshold. This way the outline is kept contiguous and the arc
end point is unmodified, warranting its correctness.

Fixes: lp:1774351
* https://bugs.launchpad.net/kicad/+bug/1774351
2018-06-19 10:29:18 +02:00
Seth Hillbrand 44c1f5785b pcbnew: Set dp clearance based on netclass
Minimum differential pair clearance should be limited to the netclass
differential pair spacing.  This also cleans up some unused code that
was left over from previous work on differential pair clearances.

Fixes: lp:1673632
* https://bugs.launchpad.net/kicad/+bug/1673632
2018-06-18 14:23:25 -07:00
Jeff Young feebb3a36c Don't double-move module text when parent is also selected.
Fixes: lp:1776871
* https://bugs.launchpad.net/kicad/+bug/1776871
2018-06-18 22:03:39 +01:00
Wayne Stambaugh 11c248a463 Fix a typo made in commit 52734058. 2018-06-18 14:57:01 -04:00
Wayne Stambaugh 52734058a7 Remove string translation wrappers used in commit 94891b75.
Translating internal file name and path strings will almost certainly
result in a bug on MacOS.
2018-06-18 12:14:48 -04:00
Maciej Suminski ba3f2b30ee kicad2step: More diagnostic messages to determine export issues 2018-06-18 17:51:22 +02:00
jean-pierre charras 03fa645743 pic_programmer demo: fix a typo in a symbol name. 2018-06-18 08:12:17 +02:00
Adam Wolf 94891b75f9 Handle STEP export properly on MacOS when launched from standalone pcbnew. 2018-06-17 13:09:33 -04:00
Andrzej Wolski a99eeb44d3 Do not allow setting zero Y size for oval holes 2018-06-17 16:30:14 +02:00
Andrzej Wolski 834d9335dd Do not plot zero width oval holes in Gerber X2 drill files
In case there are zero width oval holes on the PCB,
it is safer to not plot them at all, rather than plotting
with width arbitrarily increased to 10 mils.
This also makes Gerber outputs consistent with Excellon outputs.
2018-06-17 16:26:23 +02:00
jean-pierre charras ae02039ed4 Update pic_programmer demo 2018-06-17 09:28:36 +02:00
Seth Hillbrand 4959f91dac pcbnew: Ensure Connectivity RTree gets updated
When removing items, we perform a two-pass removal, checking first
for the cached rectangle collision.  Then, if we do not find the item
being removed, we perform a second, more expensive pass over the full
tree.  This second pass is required as we cannot be certain that an
item's bbox has not been modified between insertion and deletion.  In
which case, keeping stale pointers in the tree will lead to segfaults.

Fixes: lp:1777246
* https://bugs.launchpad.net/kicad/+bug/1777246
2018-06-16 21:45:55 -07:00
Maciej Suminski 7b7355772e Do not display Interactive Routing Settings dialog twice
The dialog was displayed due to a global TOOL_ACTION and a hotkey
assigned to a top menubar entry. Removing the hotkey from the menubar entry
is not ideal, but less irritating than a dialog showing up twice.
2018-06-15 17:32:00 +02:00
Maciej Suminski 583a9c08c0 Remove duplicated PNS TOOL_ACTIONs to display routing settings 2018-06-15 17:12:15 +02:00
Maciej Suminski 94b6f848bb pcbnew_control.cpp: change C-style asserts to wxCHECK/wxFAIL 2018-06-15 17:11:32 +02:00
Maciej Suminski eb97634bdf Enable 'Delete Item' toolbar icon in the Footprint Editor when the tool is active 2018-06-15 17:10:12 +02:00
Maciej Suminski 7d66dc0cc3 Fixed an assert on pasting items in the Footprint Library Editor
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.
2018-06-15 14:35:55 +02:00
Andrzej Wolski 316ff2898d Fix footprint selection
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
2018-06-14 19:32:09 -07:00
Wayne Stambaugh b82bf7c449 Fix minor layout issue in keepout area properties dialog. 2018-06-14 11:12:34 -04:00
Jeff Young b37969f584 Reset tools before switching footprints.
Fixes: lp:1776777
* https://bugs.launchpad.net/kicad/+bug/1776777
2018-06-14 09:55:29 +01:00
jean-pierre charras 0d4d24ed22 Update demos. 2018-06-14 09:52:23 +02:00
Seth Hillbrand 11ab8f6dc1 pcbnew: Fix a couple of duplicate hotkeys 2018-06-13 22:53:06 -07:00
Alexis Lockwood 860a95ca30 Correct my name in AUTHORS.txt and About dialog 2018-06-13 23:10:27 -06:00
Seth Hillbrand f6bd6b1360 3d: Replace glFinish with glFlush
glFinish is meant to ensure every aspect of the screen is fully-drawn
before continuing.  This causes issues with certain chipsets (Intel
4-8k)

glFlush is more of a suggestion that CPU work is complete and the GPU
should complete its work in a "timely" fashion.

We add an additional glFinish call before getting a screenshot as this
will copy the actual data from the card buffer.

Fixes: lp:1775976
* https://bugs.launchpad.net/kicad/+bug/1775976
2018-06-13 15:32:18 -07:00
Seth Hillbrand 4dd2de9057 pcbnew: Prevent mouse capture after actions
After an action is completed that required the screen to pan when the
cursor reaches the edge of the screen, we should release the cursor to
allow the user to move their mouse without panning.

Fixes: lp:1763860
* https://bugs.launchpad.net/kicad/+bug/1763860
2018-06-13 14:05:32 -07:00
John Beard 34c6393b71 Pcbnew Python docs: remove obsolete Doxygen parameters
These two parameters were unused and were producing warings:

* XML_SCHEMA
* XML_DTD
2018-06-13 11:12:24 -04:00
John Beard 41d6fc648d Pcbnew Python: use python super for inherited classes 2018-06-13 11:12:15 -04:00
John Beard 1f04b5fc7d Pcbnew Python: Add PadArray module documentation 2018-06-13 11:12:08 -04:00
John Beard 468d26d9d1 Pcbnew Python: Add plugin documentation
This adds the Python plugin helper classes to the generated
documentation.
2018-06-13 11:12:02 -04:00
John Beard 939450856a Pcbnew FP wizard: add rounded and chamfered box aids
These functions are fairly common drawing operations that otherwise
require fairly complex calculations, which would be better not to
have to repeat.
2018-06-13 11:11:55 -04:00
John Beard 5001b056ac Pcbnew FP wizard: add docstring for parameters
Adds more verbose and complete explanations of the
FootprintWizardBase and FootprintWizardDrawingAids functions.
2018-06-13 11:11:49 -04:00
John Beard 137799165d Pcbnew FP wizard: minor style fixes
This contains only a few minor style fixes according to PEP8
for FootprintWizardBase.py, and some spelling fixes
2018-06-13 11:11:42 -04:00
jean-pierre charras 9302bbce59 Pcbnew: fix a duplicate hotkey (E for edit properties) 2018-06-13 09:46:22 +02:00
jean-pierre charras 5411b951ae Minor compil warning (signed/unsigned compare) fix 2018-06-13 08:05:10 +02:00
Seth Hillbrand bc7bd107d9 Fix a number of untranslated strings. 2018-06-12 17:05:25 -07:00
Seth Hillbrand fb1aa56b77 modedit: Don't activate measure tool without a footprint
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.
2018-06-12 16:48:59 -07:00
Seth Hillbrand 04706d9d02 pcbnew: Add placement hotkeys
Assigns configurable hotkeys to the placement commands.

Fixes: lp:1712629
* https://bugs.launchpad.net/kicad/+bug/1712629

Fixes: lp:1167895
* https://bugs.launchpad.net/kicad/+bug/1167895
2018-06-12 16:08:06 -07:00
Seth Hillbrand 47106b6861 pcbnew: Adding meander hotkeys to assignment
Allows increase/decrease spacing/amplitude hotkeys to be
assigned/changed.

Fixes: lp:94fb13aec
* https://bugs.launchpad.net/kicad/+bug/94fb13aec
2018-06-12 16:08:01 -07:00
Seth Hillbrand aae30cc7c1 pcbnew: Hotkey minor fixes
- Ordering of Hotkey list by function
- Use Hotkey assignment instead of hard-coded hotkey for length tuning
- Adjust default Length Tuning settings hotkey to CTRL-L so that we
don't overlap with "Lock" (overlaps are not editable)
2018-06-12 14:22:46 -07:00
Seth Hillbrand 70506cc31d pcbnew: Standardize HK display in Routing
Routing menu should display assigned hotkeys for all items, not just
route track.
2018-06-12 14:22:32 -07:00
Seth Hillbrand e95d06e811 OCC: Fix issues for OpenCascade 7.3
OpenCascade 7.3 deprecates some TK libraries that were not required by
KiCad, therefore we should not include them in the compile.

Also correct missing compiles for STEP import/export induced by 584409b2e when using OCCT.  There is no effect on OCE to this change.
2018-06-12 10:03:13 -07:00
jean-pierre charras cee313da8c Pcbnew: legacy canvas: make trace len display working while creating the trace.
Previously, the full trace length was always displayed as 0 during track creation in the info canvas.
2018-06-12 18:21:46 +02:00
Seth Hillbrand 5de246c5be Add handlers for scrollbar events
Fixes: lp:1776120
* https://bugs.launchpad.net/kicad/+bug/1776120
2018-06-12 08:53:50 -07:00
Maciej Suminski 72b49acccf Commit supplementing 9605dd8e
Once SELECTION_TOOL has been changed to use EDA_ITEM::GetBoundingBox(),
selection area had to cover the footprint and its ref/value texts,
even hidden ones. To fix this, ref/val strings are taken into account
only in the ViewBBox().
2018-06-12 17:40:56 +02:00
jean-pierre charras e624bbae8a fix test_002_board_class.py according to changes (fixes) in bounding box track calculations 2018-06-12 17:21:03 +02:00
Wayne Stambaugh ade3c2b129 Minor Python scripting documentation fixes.
Change the Doxyfile project name from KiCAD to KiCad.  It doesn't look
very good when we don't get the project name capitalization correct.

Clean up trailing whitespace in some of the helper scripts and Doxyfile.
2018-06-12 10:24:59 -04:00
Jeff Young 660aed71b4 Make sure initially loaded footprint is rendered.
Also sets the initial footprint to the current footprint when
doing a Choose Footprint from the Eeschema Edit Property
dialog.

Fixes: lp:1776126
* https://bugs.launchpad.net/kicad/+bug/1776126
2018-06-12 13:41:53 +01:00
John Beard 16411c8c1e Fix -Wparentheses in track_cleaner.cpp
Changes "wxBusyCursor( dummy );" to just "wxBusyCursor dummy;"

Fixes warning: ../pcbnew/tracks_cleaner.cpp:155:17:
warning: unnecessary parentheses in declaration of ‘dummy’ [-Wparentheses]
     wxBusyCursor( dummy )
2018-06-12 14:23:59 +02:00
Maciej Suminski 9605dd8e1d Fix selection clearance for via and tracks
- 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
2018-06-12 10:59:30 +02:00
jean-pierre charras 5d276a43f6 PCB_EDIT_FRAME::EraseRedundantTrack() Fix incorrect detection of the new trace boundaries in a specific case.
It happens if the first segment of the new trace is inside a pad: the other segments are not found.
And the erased trace is not the right trace.

However this fix is more a workaround than a fix: currently the detection of the trace boundaries (BOARD::MarkTrace())
does not work very well for segments inside a pad.

Fixes: lp:1776121
https://bugs.launchpad.net/kicad/+bug/1776121
2018-06-12 10:05:12 +02:00
Seth Hillbrand 4186626069 Fix overzealous checking in 2798035f8
Checking for NULL fields prevents a useful dialog from being displayed
now that the exception is handled.
2018-06-11 20:49:13 -07:00
Seth Hillbrand 2798035f85 eeschema: Catch parameter errors in SPICE sim
Any errors in the dialog should be handled and, at worst, allowed to
redo.  SPICE_VALUE throws KI_PARAM_ERROR, so we catch that explicitly.

Fixes: lp:1776051
* https://bugs.launchpad.net/kicad/+bug/1776051
2018-06-11 18:02:20 -07:00
Seth Hillbrand 61c3bc4af4 pcbnew: Don't stage undo commits on new items
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
2018-06-11 16:43:30 -07:00
John Beard 896ad3774d "Select Connection" menus enablement
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
2018-06-11 10:58:26 -07:00
John Beard 0555bbc656 Pass PCB display settings to PNS router tool
This allows the tool to set display options like the clearance.

Fixes: lp:1766836
* https://bugs.launchpad.net/kicad/+bug/1766836
2018-06-11 10:48:05 -07:00
Jeff Young 8a2639325d Update footprint value when doing a Save As to library.
Fixes: lp:1570120
* https://bugs.launchpad.net/kicad/+bug/1570120
2018-06-11 14:43:32 +01:00
Jeff Young 5c65881fde Allow Global Fields Editor to Cancel with no changes. 2018-06-11 12:10:19 +01:00
Ben Gamari da61285a29 field editor: Save checkbox states
This refactors the symbol field editor's checkbox state-saving code to
deal with multiple projects with disjoint field sets more consistently.

For instance, imagine I have a two projects

 * Proj1 has fields A, B, C
 * Proj2 has fields A, B, D

Under the old scheme, when I switch from one project to the other the
state of fields C and D will be forgotten. With the new approach,
however, they are retained.

Not to mention, the implementation is considerably simpler.  Fixes
2018-06-11 12:08:59 +01:00
Jeff Young de7791cc8b Add context menu to footprint viewer for zoom & grid.
Fixes: lp:1776126
* https://bugs.launchpad.net/kicad/+bug/1776126
2018-06-11 11:37:48 +01:00
Maciej Suminski 813c1a2ba2 Dealing with inconsistent wxGLCanvas::IsDisplaySupported()
wxGLCanvas::IsDisplaySupported() handles wxGL_{MINOR,MAJOR}_VERSION
attributes only in 3.0.4. Since 3.1.0 the attributes are apparently not
supported, so instead wxGLContext::IsOK() is used (introduced in 3.1.0).

Fixes: lp:1775995
* https://bugs.launchpad.net/kicad/+bug/1775995
2018-06-11 12:26:59 +02:00
Ben Gamari 3f783d2318 field editor: Find components when reference field is clicked
This makes it significantly easier to find a particular component when
using the field editor, as I often do for part selection.

Fixes: lp:1772169
* https://bugs.launchpad.net/kicad/+bug/1772169
2018-06-11 10:27:49 +02:00
Maciej Suminski 850aac5ec5 Set OpenGL_GL_PREFERENCE for CMake 3.11+ 2018-06-11 10:27:49 +02:00
Jeff Young 9edfd25b95 Select best-matching component when filtering.
This also fixes the old bug of scrolling to the selected best
match.

Fixes: lp:1774110
* https://bugs.launchpad.net/kicad/+bug/1774110

Fixes: lp:1744703
* https://bugs.launchpad.net/kicad/+bug/1744703
2018-06-10 23:21:05 +01:00
Damien Espitallier 0e3be5776c Add library name pseudo-hash in fp_list_table GenerateTimestamp output 2018-06-09 16:18:40 +01:00
Simon Richter 8444b1b617 Add missing header 2018-06-08 17:15:17 -07:00
Jeff Young b9874da3a6 Remove background fp loading from Choose Symbol dlg.
There are a bunch of problems with event processing and closing
documents, etc., when enabled.  See the bug report for more
info.

Fixes: lp:1774777
* https://bugs.launchpad.net/kicad/+bug/1774777
2018-06-09 00:51:39 +01:00
Jeff Young 5098c5796a Prevent another case of "fall behind" dialogs. 2018-06-09 00:51:39 +01:00
Seth Hillbrand c5c52c3dfd pcbnew Check for valid nodes before drawing ratsnest
We can invalidate a node by rotating.  Make sure that our endpoints for
the ratsnest are valid before attempting to draw.

Fixes: lp:1775727
* https://bugs.launchpad.net/kicad/+bug/1775727
2018-06-08 16:34:37 -07:00
Seth Hillbrand fb9ccd855d eeschema: Check for dangling ends when switching sheets
When you search for an item that exists on a separate sheet in the
schematic, the newly loaded schematic sheet needs to have the dangling
flags set so that we don't have a mess of non-connected "o" markers.
2018-06-08 12:51:54 -07:00
Seth Hillbrand 72238e260a Fix overload compile warning 2018-06-08 11:25:27 -07:00
Seth Hillbrand 7558c71aca When clearing annotations, keep units
Clearing annotations should only clear the settings that can be set by
the matching annotate function.  Even in components where the units are
functionally the same, the unit choice should be retained as there are
often other considerations when chosing the unit.

Fixes: lp:1769457
* https://bugs.launchpad.net/kicad/+bug/1769457
2018-06-08 10:51:56 -07:00
Seth Hillbrand 68f6e3ad44 pcbnew: Differential pairs obey netclass settings
PNS routing options allow trace width to be chosen by the assigned
netclass.  This extends that to differential pair width/gap settings as
well.

Fixes: lp:1672126
* https://bugs.launchpad.net/kicad/+bug/1672126
2018-06-07 08:58:12 -07:00
jean-pierre charras 6d77e594b5 Python binding: fix pcbnew.Refresh() to make a better re-initialization.
Minor fixes in comments.

Fixes: lp:1775003
https://bugs.launchpad.net/kicad/+bug/1775003
2018-06-07 10:04:29 +02:00
Seth Hillbrand a5b92a1fe4 Constrain dimension tool while creating
The dimension tool is optionally constrained (MD_CTRL) while editing the
dimension.  This ensures same behavior for the creation step.
2018-06-06 17:04:28 -07:00
Seth Hillbrand 40d2535625 Recalculate ratsnest when moving footprint in legacy
Legacy shows the local ratsnest when moving a footprint.  Therefore we
need to recalculate it when the move ends.

Fixes: lp:1775473
* https://bugs.launchpad.net/kicad/+bug/1775473
2018-06-06 15:40:58 -07:00
Seth Hillbrand abd8927d71 Dimension Edit window passes default action
Processing enter from within the dimension editor window is only set to
the default action for top-level items.  Within the sizer, enter is
handled by the first registered button (Cancel) unless explicitly set.

Fixes: lp:1774035
* https://bugs.launchpad.net/kicad/+bug/1774035
2018-06-06 12:31:48 -07:00
Seth Hillbrand a5c213c23d Set footprint splitter window canvas to transient
The splitter window can not be the parent to any additional windows.
If it acquires a child that persists past the lifetime of the splitter
window, we get a segfault.
2018-06-06 10:03:00 -07:00
Maciej Suminski 64e98c8e54 Fixed Symbol Library editor crash on start
Added a null pointer check missing in 51c7381f

Fixes: lp:1775414
* https://bugs.launchpad.net/kicad/+bug/1775414
2018-06-06 17:01:06 +02:00
Maciej Suminski 228881f552 Eagle SCH import: validate package (footprint) names 2018-06-06 10:12:04 +02:00
Maciej Suminski 51c7381fd5 Fix Choose Symbol dialog freezes in eeschema
Scrollbars are always enabled to prevent an infinite event loop caused
by alternating CreateLayout() and OnSize event handler.
More details: http://trac.wxwidgets.org/ticket/18141

Fixes: lp:1767848
* https://bugs.launchpad.net/kicad/+bug/1767848
2018-06-06 09:11:15 +02:00
Jeff Young 9552e02727 Handle description when reading netlist. 2018-06-06 01:59:56 +01:00
Jeff Young 271826f8f3 Fix crash when deleting from library with nothing selected.
Fixes: lp:1775289
* https://bugs.launchpad.net/kicad/+bug/1775289
2018-06-06 00:01:47 +01:00
Damien Espitallier 5263558eaa Fix crash when delete button of footprint filter is clicked and no footprint is selected
Fixes: lp:1775296
* https://bugs.launchpad.net/kicad/+bug/1775296
2018-06-06 00:01:47 +01:00
Jeff Young a300006956 Fix dialog layout of Add 3D Shape.
Fixes: lp:1747652
* https://bugs.launchpad.net/kicad/+bug/1747652
2018-06-06 00:01:47 +01:00
Jeff Young e0c881b639 Output descriptions to components in generic netlist.
Also hooks up the Python netlist reader to the descriptions so
that they appear correctly in BOMs.  (The BOM generators used
to always get the root component's description rather than the
alias's description.)

Fixes: lp:1774358
* https://bugs.launchpad.net/kicad/+bug/1774358
2018-06-06 00:01:47 +01:00
Jeff Young aaf47bbe71 Replace "unsaved changes" dialog to Global Fields Editor. 2018-06-06 00:01:47 +01:00
Seth Hillbrand 7d62f14dd0 Set ViewBBox to viewitem size
Limit the bbox size of origin view item to item size.  This prevents
excessive redraw.

This also side-steps a degeneracy in the RTree calculation under certain
conditions in i386 where multiple, maximum-sized items are degenerate.

Fixes: lp:1774316
* https://bugs.launchpad.net/kicad/+bug/1774316
2018-06-05 15:35:58 -07:00
Seth Hillbrand 9e4511eb11 Update netclasses when loading footprint
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
2018-06-05 12:44:43 -07:00
jean-pierre charras 9354372a0c Fix bug: Pcbnew crash on invoking footprint browser when already open (happens only in some distros)
Fixes: lp:1775178
https://bugs.launchpad.net/kicad/+bug/1775178
2018-06-05 20:05:56 +02:00
jean-pierre charras da392728d4 spice_value.cpp: replace std::invalid_argument by KI_PARAM_ERROR (replacement forgotten in commit a288d6199)
see commit a288d6199 for the reasons of this replacement.
2018-06-05 16:07:47 +02:00
jean-pierre charras a288d6199e Add KI_PARAM_ERROR, similar to std::invalid_argument but using wxString instead of std::string to throw errors.
std::invalid_argument does not work fine with translated strings as argument for message.
(the translated message is incorrectly or not displayed if it contains non ascii8 chars, at least on Windows).
KI_PARAM_ERROR can be throw-ed with a translatable/translated string (a wxString)
2018-06-05 13:29:51 +02:00
John Beard 58814e838d Common: Fix -Wcatch-value warnings (catching exceptions by value)
This fixes some warnings on GCC 8.1:

warning: catching polymorphic type ‘class std::out_of_range’ by value [-Wcatch-value=]
         catch( std::out_of_range )
                     ^~~~~~~~~~~~

This fix is along the same lines as:

* ff1802d7a "Fix Coverity "Big parameter passed by value" warnings"
2018-06-05 11:46:17 +02:00
Seth Hillbrand f95b77b61a Fix overflow on 32-bit machine
Bitmap hash incorrectly shifted by 60 bits on 32 bit machines while only
shifting 28 bits on 64 bit machines.
2018-06-04 16:41:16 -07:00
Seth Hillbrand ee34aab07a Async hardening
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
2018-06-04 15:08:40 -07:00
Seth Hillbrand 39ac5e0af8 Pcbnew: List nets fix calculation speed
Similar to 6e5726613, we need to find net node count quickly without
iterating over all items in the board.
2018-06-04 11:08:54 -07:00
Wayne Stambaugh 7343e78347 Fix some Coverity uninitialized field warnings.
Fixes Coverity CIDs:

- 175824
- 169337
- 163191
- 175827
- 175440
- 175438
- 157136
2018-06-04 13:48:57 -04:00
Seth Hillbrand 5dbfa6a9c1 Correct node/pad count in pcbnew
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)
2018-06-04 10:26:40 -07:00
Wayne Stambaugh ff1802d7a1 Fix Coverity "Big parameter passed by value" warnings.
Fixes Coverity CIDs:

- 175846
- 175841
- 175840
- 175837
- 175836
- 175834
- 102524
2018-06-04 12:30:00 -04:00
Seth Hillbrand 63a952d239 Adjust connectivity to use RTree
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
2018-06-04 08:30:07 -07:00
Wayne Stambaugh 6f65f835f4 Fix assert in CvPcb when opening footprint equate file dialog.
Fixes lp:1774726

https://bugs.launchpad.net/kicad/+bug/1774726
2018-06-04 10:09:06 -04:00
Maciej Suminski e4a6f2e523 Switch canvas to Cairo if OpenGL is not supported on the first run 2018-06-04 12:17:58 +02:00
Maciej Suminski 6bd708621b Early check of supported OpenGL version 2018-06-04 12:17:58 +02:00
jean-pierre charras 0b8cf93888 Pcbnew, On line DRC in legacy canvas: Fix broken Drc test during track and zone creation or edition.
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)
2018-06-04 11:20:11 +02:00
Maciej Suminski 27c9c6ceed Enable the accelerated canvas on the first gerbview run if requested
Commit 8910894f applied to gerbview.
2018-06-04 10:47:44 +02:00
Maciej Suminski 8910894fab Enable the accelerated canvas on the first pcbnew run if requested
Fixes: lp:1769143
* https://bugs.launchpad.net/kicad/+bug/1769143
2018-06-04 10:41:34 +02:00
jean-pierre charras d3c41dd247 Remove dead code. 2018-06-03 19:55:03 +02:00
Seth Hillbrand 0a91f0bc9c Add 45º constraints to lines when moving with CTRL
Fixes: lp:1774750
* https://bugs.launchpad.net/kicad/+bug/1774750
2018-06-02 15:52:18 -07:00
Seth Hillbrand 975e777149 Fix threaded race condition in footprints
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
2018-06-02 15:05:36 -07:00
jean-pierre charras 6e57266136 Pcbnew: optimize BOARD::SortedNetnamesList() for a must faster calculation time.
It is mainly used in copper zones dialog editor,
and previously created a noticeable delay to show this dialog with large boards (more than 900 nets)
2018-06-02 18:14:34 +02:00
Jean-Samuel Reynaud d4393b2813 Fix incorrect Eeschema BOM plugins install path on Linux.
Fixes lp:1697041

https://bugs.launchpad.net/kicad/+bug/1697041
2018-06-01 14:09:08 -04:00
jean-pierre charras 8f984c2899 OpenGL, DrawGrid(): use grid and axis alpha color value setting, instead of the fixed 1.0
In Cairo mode, this function uses already the alpha color value setting.
Now for low alpha values (usually they are low, as said in many GAL comments),
Cairo mode and OpenGL mode should have a similar look.
2018-06-01 18:29:04 +02:00
Seth Hillbrand 3cf9009f73 Delete GL context in GL destructor not program
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
2018-06-01 09:14:36 -07:00
jean-pierre charras bfa89039c4 Gerbview, GAL mode: fix "Zoom to fit" area size calculation when nothing is loaded.
Also ensure the worksheet is displayed after clearing the gerber layers.
2018-06-01 11:39:08 +02:00
jean-pierre charras 9a228d8ec9 Gerbview: GAL mode: shows the page worksheet, similar to legacy mode. 2018-06-01 09:11:43 +02:00
jean-pierre charras fc71fc6474 Gerbview: Fit to page: use the page size when nothing is loaded.
Previously, due to a minor bug, a very small default size was used (therefore a high zoom value), that was not a good choice.
2018-05-31 11:22:33 +02:00
Maciej Suminski 7c49bcd3a6 Clear selection before deleting DRC markers
Pcbnew crashes when a selected DRC marker is deleted. This a possible
fix to lp:#1773863.
2018-05-31 09:32:43 +02:00
Maciej Suminski f51f30fb1e eeschema: Disabled an assert checking if project path is empty
Empty project path is a valid case when eeschema is executed in
standalone mode without any file loaded.

There were no observed harmful consequences of running eeschema without
the project path set, but to stay safe the project specific
sym-lib-table load code is executed only when the project path is set.
2018-05-31 09:09:01 +02:00
Maciej Suminski c5cde53dff Symbol Editor: fixed a crash when modifying a symbol
In the scenario described in the bug report, the SCH_SCREEN current item
pointer stores an address of a stale object that had been deleted when
the symbol was reloaded. To prevent the crash, the current item pointer
is reset whenever a symbol is loaded.

Fixes: lp:1774296
* https://bugs.launchpad.net/kicad/+bug/1774296
2018-05-31 09:01:59 +02:00
Seth Hillbrand 3ce8a4856a Remove ToLayer_ID calls from color checks
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.
2018-05-30 13:51:20 -07:00
Jeff Young d90d4ff682 Fix bugs in Export to SVG.
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
2018-05-30 20:49:05 +01:00
Seth Hillbrand fe1f837d0c Limit zoom out
We limit the minimum zoom to Z=0.3.  Minimum preset zoom level is 0.31,
so 0.3 is only reachable using the mouse wheel.  Smaller than 0.18, GAL
does not display properly.

Fixes: lp:1773215
* https://bugs.launchpad.net/kicad/+bug/1773215
2018-05-30 11:24:35 -07:00
Seth Hillbrand eeb273faa0 Partial revert of 3804f6 to correct assert change
ToLayerID function converts to PCB_LAYER_ID and needs to check against
that enum instead of GAL_LAYER_ID.
2018-05-30 09:17:51 -07:00
Baranovskiy Konstantin 36504b3071 SymLibEditor: synced state of search tree tool button with its panel
Button "Toggle the search tree" from left toolbar of Symbol Library
Editor does not show actual state of visibility of the search tree
panel. State of this button (checked or unchecked) changes on clicking
only. Toggling panel visibility from menu does not make effect on tool
state.

Applied changes makes tool state (checkd/unchecked) synced with panel
state (shown/hidden).
2018-05-30 16:55:55 +02:00
Jeff Young d03e92a3a2 Field Name Template (aka Default Fields) fixes.
Move from a "default" fields model to a "seed" fields model.  See
discussion on devlist:
https://lists.launchpad.net/kicad-developers/msg35823.html.
2018-05-30 09:46:52 +01:00
Maciej Suminski 8c63dac0c3 Component Chooser: do not create FP list when the FP preview is disabled 2018-05-30 09:53:58 +02:00
jean-pierre charras 52fceb3243 Eeschema: sheet filename renaming: fix a old issue that can set incorrect filenames in sheets inside a complex hierarchy.
Fixes: lp:1773500
https://bugs.launchpad.net/kicad/+bug/1773500
2018-05-29 19:57:18 +02:00
jean-pierre charras ce9cc4ea38 plot board: fix a stupid bug created by commit dfa91752 2018-05-29 19:51:50 +02:00
Maciej Suminski c5f56ef573 Eagle PCB import: made warning strings translatable 2018-05-29 15:02:26 +02:00
Maciej Suminski d2436e7478 Corrected "Add footprint library" dialog file filters
Fixes: lp:1773969
* https://bugs.launchpad.net/kicad/+bug/1773969
2018-05-29 15:02:26 +02:00
jean-pierre charras dfa9175209 Fix incorrect mask size for rectangular and trapezoid pads.
Fixes: lp:1773926
https://bugs.launchpad.net/kicad/+bug/1773926

Fixes: lp:1773961
https://bugs.launchpad.net/kicad/+bug/1773961
2018-05-29 13:45:45 +02:00
jean-pierre charras 71e64de3a4 gerber plot: fix incorrect string attribute for BGA pads on copper layer 2018-05-29 12:30:52 +02:00
Maciej Suminski 94f161b8c2 Eagle SCH import: validate imported symbol names
Fixes: lp:1753189
* https://bugs.launchpad.net/kicad/+bug/1753189
2018-05-29 09:29:22 +02:00
Maciej Suminski e789523632 Eagle SCH import: do not crash if nothing was imported 2018-05-29 09:29:21 +02:00
Jeff Young a12b9db584 Map Eagle values to fab layers.
Fixes: lp:1773256
* https://bugs.launchpad.net/kicad/+bug/1773256
2018-05-28 20:37:52 +01:00
Jeff Young f914558e7b Remove overly-strict assert.
Fixes: lp:1773807
* https://bugs.launchpad.net/kicad/+bug/1773807
2018-05-28 20:37:14 +01:00
Maciej Suminski a8db21319f Spice Simulator: set correct scale for constant plots
Fixes: lp:1772278
* https://bugs.launchpad.net/kicad/+bug/1772278
2018-05-28 16:42:15 +02:00
Marco Ciampa 2cb65f9c19 Make the Simulator error strings translatable 2018-05-28 14:51:10 +02:00
jean-pierre charras da66005254 Pcbnew, plot dialog: avoid slightly change in hpgl pen diameter (due to inch/mm conversion error) when the hpgl format is not selected 2018-05-26 17:36:07 +02:00
jean-pierre charras 7db88126c5 hpgl plot parameters: use double instead of int to store the pen diameter to avoid truncation.
This parameter, always in mm in a hpgl file, is for historical reasons stored in mils,
and using a int to store it created annoying rounding errors.
2018-05-26 09:37:42 +02:00
Seth Hillbrand da061718e5 Remove constraint on circle
Allows circle radius to snap to arbitrary points while editing

Fixes: lp:1773436
* https://bugs.launchpad.net/kicad/+bug/1773436
2018-05-25 12:30:47 -07:00
jean-pierre charras c614f73c50 HPGL plotter fix incorrect scaling factor
A 0.4% scale error in hpgl plots was previously existing since a long time.

Fixes: lp:1772828
https://bugs.launchpad.net/kicad/+bug/1772828
2018-05-25 20:50:00 +02:00
jean-pierre charras 250d958ebb Plot dialog: fix broken dialog management.
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.
2018-05-25 19:48:07 +02:00
Jeff Young cd5f727880 Fix off-by-1 errors in zoom menus & use zoom steps in GAL canvas.
Also bumps the maximums a bit (at user request).

Fixes: lp:1773215
* https://bugs.launchpad.net/kicad/+bug/1773215
2018-05-25 13:01:58 +01:00
Jeff Young b89f6d4af3 Decrease allowed coverage ration when zones are involved.
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
2018-05-25 13:01:58 +01:00
Maciej Suminski 61597db12d Make the Simulator dialog strings translatable 2018-05-25 11:24:25 +02:00
Maciej Suminski 32f599654f Fixed normalizeAbsolutePaths() condition
normalizeAbsolutePath() used an invalid condition to
verify that the tested paths are on the same volume.
2018-05-25 11:07:51 +02:00
Maciej Suminski 145835661b Replaced footprint library wizard with a common file browser
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
2018-05-25 08:51:46 +02:00
Maciej Suminski adc61024d3 DIALOG_FILE_DIR_PICKER: dialog to select both files and directories
wxWidgets offers two dialog types: wxFileDialog and wxDirDialog, one
to select files, the other to select directories, but neither of them
handles both. DIALOG_FILE_DIR_PICKER fills that gap.
2018-05-25 08:51:45 +02:00
Jeff Young 81af2db614 Even out the Gerbveiw zoom steps and increase the max.
Fixes: lp:1773215
* https://bugs.launchpad.net/kicad/+bug/1773215
2018-05-24 19:04:10 +01:00
Jeff Young cb925a6646 Output defined default fields to netlists & BOMs.
Fixes: lp:1746814
* https://bugs.launchpad.net/kicad/+bug/1746814
2018-05-24 18:24:59 +01:00
jean-pierre charras 6090f9001e netinfo.i: fix incorrect position of a declaration, that was not taken in account.
Fixes: lp:1544750
https://bugs.launchpad.net/kicad/+bug/1544750
2018-05-24 09:43:04 +02:00
Jeff Young 8f5cb32598 Don't write empty fields from Global Edit Fields dialog. 2018-05-23 21:35:23 +01:00
Seth Hillbrand cf2a07559d Safely release thread memory
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
2018-05-23 08:55:55 -07:00
Maciej Suminski 190d4d6f55 Eagle PCB import: disable copper pour for imported *Restrict layer polygons
Fixes: lp:1772245
* https://bugs.launchpad.net/kicad/+bug/1772245
2018-05-23 17:51:49 +02:00
jean-pierre charras 3893c43eb0 Fix compil issues. 2018-05-23 11:31:13 +02:00
jean-pierre charras ca548809da Fix a qa test issue related to pad hit test. 2018-05-23 09:17:35 +02:00
Seth Hillbrand 8506cdf3ae Avoid numerical dereference of selections
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
2018-05-22 16:37:45 -07:00
Seth Hillbrand 8d52dc9451 Avoid re-checking items already selected
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.
2018-05-22 16:26:52 -07:00
Seth Hillbrand b625d29151 Only search pads when the position hits module
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.
2018-05-22 15:37:24 -07:00
Seth Hillbrand 8c5037a48b Optionally sort reporter messages
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
2018-05-22 13:55:02 -07:00
Seth Hillbrand b8f960ea09 Correct message panel sizing
Message panel in update PCB needs size hints from the dialog to
correctly choose the size.
2018-05-22 13:54:48 -07:00
Jeff Young c4b447f3f9 Initialize field visibility checkboxes in Fields Editor. 2018-05-22 19:24:37 +01:00
jean-pierre charras 6f249e5eb6 Add missing icons in lock/unlock context submenu 2018-05-22 14:36:35 +02:00
Jeff Young e3c4a96f5c Default field bug fixes.
1) Commit in-progress edits before closing preferences.
2) Handle default fields in Symbol Fields Editor.
3) Save state of checkboxes in Symbol Fields Editor.
2018-05-22 12:55:39 +01:00
Seth Hillbrand 2d812c2827 Remove FreeRouting icon and menu option
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.
2018-05-21 10:44:32 -07:00
Seth Hillbrand 5d8dd38664 Standardize graphical edit window
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
2018-05-21 09:37:04 -07:00
Jeff Young 6a2dc8d4eb Roll back last 2 commits meant for the other resolver only.
Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-21 16:25:44 +01:00
Jeff Young cdde4c4b40 Fix a bug in how we check for differential pair tuning.
Fixes: lp:1545856
* https://bugs.launchpad.net/kicad/+bug/1545856
2018-05-21 13:49:40 +01:00
Jeff Young 0fd0e84162 Keep OK/Cancel buttons at bottom of Track/Via Properties.
Fixes: lp:1772260
* https://bugs.launchpad.net/kicad/+bug/1772260
2018-05-21 13:18:41 +01:00
Jeff Young 2b22cbe94d Release mouse before closing HTML_MESSAGE_BOX.
Fixes: lp:1772275
* https://bugs.launchpad.net/kicad/+bug/1772275
2018-05-21 13:18:41 +01:00
Jeff Young 10ec39a107 Move 3D file error messages to tracePathsAndFiles key.
Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-21 13:18:41 +01:00
Wayne Stambaugh c49a4398a1 Set KiCad version to 5.0.0-rc2-unknown for next development cycle. 2018-05-20 21:24:18 -04:00
Wayne Stambaugh b4f9b5359d Set KiCad version to 5.0.0-rc2. 2018-05-20 21:20:28 -04:00
Seth Hillbrand 0c2f9b1827 Keep circles controlled by radius
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.
2018-05-20 17:16:44 -07:00
Jeff Young 3a8a718e43 A pesky bug, this one is. (Said in best Yoda impression.)
There were two examples of the somewhat annoying error message.
This gets the second one.

Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-21 00:19:55 +01:00
Wayne Stambaugh 5678a166ee Fix template path bugs.
Remove KICAD_PTEMPLATE environment variable as it's purpose was not
clear and was often poorly defined as the path to the KiCad installed
templates.

Add a new KICAD_TEMPLATE_DIR environment variable which clearly should
be the path of the KiCad installed templates.  Make this environment
variable available in the user settings in case the default is wrong
which has been the case in some instances.  Use the standard search
stack to set the default system template path which has a much greater
chance of being correct.

Add a new KICAD_USER_TEMPLATE_DIR environment variable which clearly
should be the path of the user defined templates.  Users most likely
were not even aware of the old default user path unless they read the
fine manual.

Set template path search stack priority as follows:

* KICAD_USER_TEMPLATE_DIR
* KICAD_TEMPLATE_DIR
* Search stack template paths

Reverse template selection dialog and project path dialog for improved
user experience.

Fixes lp:1543443

https://bugs.launchpad.net/kicad/+bug/1543443
2018-05-20 18:56:11 -04:00
Jeff Young 8badfea17a Fix the build messages fall-behind problem...
... by getting rid of the separate window.  It makes more sense
to put the messages into the wizard anyway.

Fixes: lp:1492836
* https://bugs.launchpad.net/kicad/+bug/1492836
2018-05-20 23:48:29 +01:00
Jeff Young e27d31d51d Fix minor dialog layout issue. 2018-05-20 23:48:29 +01:00
Jeff Young c48e5b6423 Remove unhelpful warning message.
It appears far too often with the new libraries.

Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-20 23:48:29 +01:00
Jeff Young 052ca08546 Switch footprint-locked-can't-remove msg to warning.
Fixes: lp:1689898
* https://bugs.launchpad.net/kicad/+bug/1689898
2018-05-20 23:48:29 +01:00
Jeff Young 62a5ee8c21 Layout Track / Via Properties dialog.
It's sizing is dependent on the selection.

Fixes: lp:1772260
* https://bugs.launchpad.net/kicad/+bug/1772260
2018-05-20 23:48:29 +01:00
Jeff Young 63c9e11aae Bug fixes in Length Tuning UI.
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
2018-05-20 23:48:29 +01:00
Maciej Suminski 8f6ae70400 Deterministic algorithm for picking field values in multiunit components
The original algorithm picked the value from the last component having
non empty value for a given field, but the processing order was
dependent on the layout of the components in the memory. It means that
for each component, the field values could have been taken from any
unit, randomly.

The patch improves the algorithm, trying to get all values from the unit
with the lowest number and resorts to other units only when there are
field values left empty.
2018-05-19 18:43:23 +02:00
Maciej Suminski dcf60f8e6f Eagle PCB import: handle keepout zones
Fixes: lp:1755886
* https://bugs.launchpad.net/kicad/+bug/1755886
2018-05-19 18:43:04 +02:00
Jeff Young 2bd0a027a2 Improved error messages for diff-pair routing.
Fixes: lp:1542592
* https://bugs.launchpad.net/kicad/+bug/1542592
2018-05-19 01:52:22 +01:00
Seth Hillbrand 6b1df2e992 Remove extraneous PROFILE
Accidentally committed in b2d063137
2018-05-18 17:08:52 -07:00
Seth Hillbrand 0c1172b17d Garbage collection optimization
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.
2018-05-18 16:59:36 -07:00
Seth Hillbrand b2d0631370 Split anchor vectors by layer
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.
2018-05-18 16:59:36 -07:00
Seth Hillbrand 019ada0a92 Move some connectivity search to std::algs
Previously, binary search was hand-coded.  This moves the search to a
std::algorithm variant.  Also searches bbox by limits rather than
directly iterating.
2018-05-18 16:59:36 -07:00
Jeff Young 0bcfb2c7df Don't write library name to footprint files.
Fixes: lp:1772095
* https://bugs.launchpad.net/kicad/+bug/1772095
2018-05-19 00:57:15 +01:00
Jeff Young c5696738d2 Use diff-pair-via clearance when checking against vias.
Fixes: lp:1742275
* https://bugs.launchpad.net/kicad/+bug/1742275
2018-05-18 23:42:38 +01:00
Seth Hillbrand d62b4f36a6 Save hotkeys to combined app-based file
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
2018-05-18 12:57:38 -07:00
Seth Hillbrand d22fceca7c Revert hotkey save format
This reverts the hotkeys file format to a human readable and VCS
compatible listing by splitting individual hotkey assignments onto
separate lines instead of the single key. This unifies the hotkey format
between the application configuration and export Hotkey routines.

Both hotkey formats remain readable by the same routines.
2018-05-18 12:53:45 -07:00
jean-pierre charras bbc01e0c2b Add a tooltip in DIALOG_POSITION_RELATIVE. 2018-05-18 20:42:24 +02:00
Jeff Young 149f4f68c9 Leave decorations on LAYER_GP_OVERLAY.
In particular, don't reset them to 0, which happens to be F_Cu.

Fixes: lp:1658775
* https://bugs.launchpad.net/kicad/+bug/1658775
2018-05-18 18:18:40 +01:00
jean-pierre charras 45dad4ded5 DIALOG_POSITION_RELATIVE: make dialog more understandable.
Better texts, and add a helper comment.
2018-05-18 13:53:31 +02:00
Jeff Young 5010a461e1 Make polar coordinates consistent.
Use theta instead of phi (which normally describes the azimuth
angle).

Fixes: lp:1545107
* https://bugs.launchpad.net/kicad/+bug/1545107
2018-05-18 12:22:14 +01:00
jean-pierre charras 2363f36033 Fix compil issue in dialog_select_net_from_list.cpp with wxWidgets 3.1 2018-05-18 10:16:30 +02:00
jean-pierre charras ec98bbba11 Fix issue: HPGL (plot mode sketch) : polygons are not closed.
Fixes: lp:1771531
https://bugs.launchpad.net/kicad/+bug/1771531
2018-05-18 10:13:46 +02:00
jean-pierre charras 689db4f038 Pcbnew, D_PAD::buildCustomPadPolygon(): use PM_STRICTLY_SIMPLE instead of PM_FAST in polygon calculation.
It is slightly slower, but avoid any issue in polygon generation.
2018-05-18 08:38:03 +02:00
Seth Hillbrand d09445cf34 Fixing signed/unsigned warning 2018-05-17 16:47:51 -07:00
Seth Hillbrand 85921535b3 Cleaning SelectNet window display
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.
2018-05-17 16:44:30 -07:00
Jeff Young 5e30e4d475 Don't allow replace on Power Symbol value fields.
Fixes: lp:1771398
* https://bugs.launchpad.net/kicad/+bug/1771398
2018-05-18 00:43:40 +01:00
Jeff Young 8cb68a3585 Wire up return in combobox to accept dialog.
(I've fixed a few of these now.  If memory serves, it's an OSX-
specific problem.)

Fixes: lp:1771515
* https://bugs.launchpad.net/kicad/+bug/1771515
2018-05-17 23:58:49 +01:00
Jeff Young df495b1d65 Fix typo in loading of preferences Reference ID Notation menu.
Fixes: lp:1771898
* https://bugs.launchpad.net/kicad/+bug/1771898
2018-05-17 23:46:32 +01:00
jean-pierre charras 1ebee39973 Gerber X1 format: add more structured comments in file. 2018-05-17 17:32:35 +02:00
jean-pierre charras d1cab6ec62 Gerber X1 plot files: prepare adding more structured comments (aperture and object attributes)
structured comments are lines starting by "G04 #@!" and are therefore Gerber X1 comments.
But these comments contain X2 attributes.
2018-05-17 17:32:35 +02:00
Maciej Suminski dfcdfe91fa Fixed the TOOL_STATE::idle field setting condition
The tools were being set as idle, whenever an event handler execution
finished (via TOOL_MANAGER::finishTool()). Such approach does not take
into account cases when a tool is active and receives an event causing
another event handler of the same tool to run. When this happend, the
tool has been incorrectly set as idle when the second handler finished
its execution.

In a particular case, invoking the router settings dialog caused the PNS
router to be incorrectly detected as inactive in
EDIT_TOOL::invokeInlineRouter(). Due to that, ROUTER_TOOL::CanInlineDrag()
requested a selection that required disambiguation menu for items
that were modified by the router, but not yet committed. After the drag
tool had finished, the disambiguation menu was eventually shown
with items existing only in the undo buffer. Removing such item lead to
track DLIST corruption, effectively erasing all tracks.

Fixes: lp:1767826
* https://bugs.launchpad.net/kicad/+bug/1767826
2018-05-17 16:24:13 +02:00
jean-pierre charras 7c52af2d50 Gerbview: cosmetic enhancement: add icons in Clarify menu. 2018-05-17 10:24:09 +02:00
jean-pierre charras 93e75af388 Rename plot_auxiliary_data.h file to gbr_metadata.h, according to the class names defined by this file 2018-05-17 08:07:29 +02:00
jean-pierre charras 144549ebca Pcbnew, plot: Fix: masks derived from custom pad shape have incorrect margin.
Fixes: lp:1771526
https://bugs.launchpad.net/kicad/+bug/1771526
2018-05-16 18:26:43 +02:00
jean-pierre charras afc28ef5db fix a minor compil warning 2018-05-16 18:14:06 +02:00
jean-pierre charras 828faecce9 Modify the priority of OCC/OCE include paths.
This is because on my msys2/32bits the OCE config.h file replaced our kicad config.h, due to include paths priorities
2018-05-16 17:30:37 +02:00
jean-pierre charras 904eb82368 Fix a DRC crash on some installs.
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
2018-05-16 09:20:04 +02:00
Seth Hillbrand 584409b2ef Make OpenCascade more secondary
The opencascade patch intrusively checked against libraries but broke
some build scripts.  This restores the default cmake OCE behavior that was
changed by 2bab30d9a and makes the OpenCascade search truly secondary.
2018-05-15 06:40:25 -07:00
Maciej Suminski 538ab0eb3f kicad_netlist_reader.py: Handle gracefully the case when a library symbol is not available for a component 2018-05-14 17:58:24 +02:00
Maciej Suminski 161b4a56fc kicad2step: Handle escaped quotes in sexpr parser 2018-05-14 17:58:24 +02:00
jean-pierre charras 509793a5b4 Symbol editor: Inversion sign ("~") incorectly ùmanaged in graphic texts.
It was always replaced with space in a graphic text, but it should happens
only in non quoted texts
Now graphic texts containing ' ' or '~' or '"' are always quoted
(work fine with 4.0 version)

Fixes: lp:1771105
https://bugs.launchpad.net/kicad/+bug/1771105
2018-05-14 17:49:30 +02:00
Maciej Suminski 23a9fcd91d Fixed a typo in the STEP generator message 2018-05-14 10:59:48 +02:00
jean-pierre charras 86d6ed5abf Demo update to used V5 libs 2018-05-14 09:33:45 +02:00
jean-pierre charras d8687e4eaf Gerbview: minor code cleanup 2018-05-14 09:05:11 +02:00
jean-pierre charras 8da242c593 Gerbview: accept any structured comment as X2 attribute.
A structured comment is a comment line starting by "G04 #@! " and in fact containing
a X2 attribute. It is used to create Gerber files contianing X2 metadata, but compatible
with X1 file format
2018-05-14 09:05:09 +02:00
Jeff Young 1a6e8d4713 Fix typo. 2018-05-13 21:48:13 +01:00
jean-pierre charras 2832f997c5 PcbNew; fix crash on copy/paste
Due to a bug introduced by commit ba1e0efda that tried to fix an other bug.

Fixes: lp:1771003
https://bugs.launchpad.net/kicad/+bug/1771003
2018-05-13 21:50:59 +02:00
Jeff Young a9dc417319 Fix bug in pruning of selection.
Fixes: lp:1770939
* https://bugs.launchpad.net/kicad/+bug/1770939
2018-05-13 15:23:41 +01:00
Jeff Young c30dd24cc1 Fixup sorting for expanded component groups.
Also adds shorthand notation for groups with adjacent components.
2018-05-13 12:21:55 +01:00
jean-pierre charras b94e0a2031 Fix forgotten change (m_Zone to m_SegZoneDeprecated) 2018-05-13 09:19:44 +02:00
jean-pierre charras 54766bac40 fix minor compil warning (signed/unsigned compar) 2018-05-13 08:56:17 +02:00
jean-pierre charras e57cd291ff class BOARD: rename m_Zone to m_SegZoneDeprecated to avoid mistakes in code.
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.
2018-05-13 08:39:36 +02:00
Jeff Young 9311393016 Add expand/collapse to grouped rows in Fields Editor.
Fixes: lp:1767746
* https://bugs.launchpad.net/kicad/+bug/1767746
2018-05-12 23:05:04 +01:00
jean-pierre charras ba1e0efdad Pcbnew, GAL mode: Fix incorrect management of zones in append board and copy from Paste from clipboard.
Fixes: lp:1770855
https://bugs.launchpad.net/kicad/+bug/1770855
2018-05-12 20:48:50 +02:00
jean-pierre charras 9704891c8f Cvpcb, fo viewer frame: fix a bug (close frame widget not active) due to a too zealous cleanup. 2018-05-12 11:32:06 +02:00
jean-pierre charras 6e5131be5a Minor fix in fp editor and fp viewer: display the fp info instead of the useless board info.
board info makes sense only in board editor, not in fp editor and fp viewer.
2018-05-12 10:44:31 +02:00
Seth Hillbrand 2bab30d9ac Allow Kicad to use OpenCascade
Adds the option of using OpenCascade not just the community edition.

Fixes: lp:1628950
* https://bugs.launchpad.net/kicad/+bug/1628950
2018-05-11 17:04:32 -07:00
Seth Hillbrand da5f2874c5 Adding white outline to zoom icons
All-black icons disappear when using a dark menu theme.  Adding a small
white outline allows them to be visible.

Fixes: lp:1760098
* https://bugs.launchpad.net/kicad/+bug/1760098
2018-05-11 16:45:05 -07:00
Seth Hillbrand 6a726ca299 Unify polygon point checks
Mutliple checks are made for point in polygons/closed line chains.  This
unifies the checks to a single (hopefully) place for improved debugging.
2018-05-11 15:42:41 -07:00
Seth Hillbrand f2aea97807 Calculate inside polygon using points
Minor improvement in polygon calculation to use consecutive points
rather than casting to a full segment.  Avoids division except when it
will not create a denormal.
2018-05-11 15:42:41 -07:00
Seth Hillbrand d67821d771 Add a clearance check for closed shape line chains
Also improves speed of multiple point checks by first eliminating points
outside of the BBox.
2018-05-11 15:42:41 -07:00
Jeff Young 108dc20fba Keep first segment of wire attached to sheet pin horizontal.
If allowed to go vertical it's very hard to see on top of the
sheet boundary and liable to short out other pins.

Fixes: lp:1685508
* https://bugs.launchpad.net/kicad/+bug/1685508
2018-05-11 21:50:43 +01:00
Jeff Young 62d6750ced Use default for attribute "display" if not found.
Fixes: lp:1767447
* https://bugs.launchpad.net/kicad/+bug/1767447
2018-05-11 16:11:38 +01:00
Jeff Young 09622a4c9f Replace messageBox with assert for non-fatal error.
Fixes: lp:1770505
* https://bugs.launchpad.net/kicad/+bug/1770505
2018-05-11 13:02:02 +01:00
Jeff Young e91e88bfa1 Make sure read-only attr sticks when grid table rebuilt. 2018-05-11 12:33:53 +01:00
Jeff Young 6e83f99c72 Relax fully-annotated constraint for BOM editor.
Also fixes a bug where unannotated components would get references
of the form R-1 (because their reference number was -1).

Fixes: lp:1768814
* https://bugs.launchpad.net/kicad/+bug/1768814
2018-05-11 12:33:44 +01:00
Maciej Suminski f73b9a55a7 Fixed an assert in DHEAD::append()
The previous one incorrectly expected the appended items to belong to
the target list, instead of the source list.
2018-05-11 10:23:40 +02:00
jean-pierre charras 2ed24a46b2 Try to fix Jenkins build error (link error). 2018-05-10 15:14:08 +02:00
jean-pierre charras daa7abec70 Update demo to use V5 libs 2018-05-10 14:22:38 +02:00
Jeff Young dffdf04cd9 Update footprint value when it's a proxy for FPID.
Fixes: lp:1769207
* https://bugs.launchpad.net/kicad/+bug/1769207
2018-05-10 12:16:00 +01:00
Jeff Young a65088419e More forgiving keyword search.
In particular, allow comma separators in footprint filters without
making users type them in when searching.

Fixes: lp:1391533
* https://bugs.launchpad.net/kicad/+bug/1391533
2018-05-10 12:16:00 +01:00
Jeff Young 933ff189ad Remember the last directory in FPLib Wizard.
Fixes: lp:1577965
* https://bugs.launchpad.net/kicad/+bug/1577965
2018-05-10 12:16:00 +01:00
jean-pierre charras e339007d22 3D viewer: fix some issues when opened from a frame and changes are made in a other frame:
* 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.
2018-05-10 12:49:20 +02:00
Wayne Stambaugh d41e64b0ff Fix dialog grid sizer padding issue on GTK builds. 2018-05-09 17:38:06 -04:00
Wayne Stambaugh 7bd9fc9235 Fix footprint editor options dialog layout.
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.
2018-05-09 14:12:26 -04:00
Wayne Stambaugh 7b887c4844 Fix static text iss in board editor footprint properties dialog.
Replace degree symbol with the word degrees.  On windows, this does not
translate to the degree symbol.
2018-05-09 14:01:50 -04:00
Wayne Stambaugh b67bab2f98 Fix layout issues in footprint editor footprint properties dialog.
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.
2018-05-09 13:52:04 -04:00
Wayne Stambaugh 1f898b1e80 Fix control padding in choose footprint dialog. 2018-05-09 13:23:45 -04:00
Wayne Stambaugh 03b85c7544 Fix control alignment and padding in footprint properties dialog. 2018-05-09 13:11:36 -04:00
jean-pierre charras b9808da0a8 Use wxStdDialogButtonSizer in dialog.
Use .step instead of .stp as step file extension.
2018-05-09 18:14:49 +02:00
Wayne Stambaugh 787ee62db3 Fix inconsistent padding in Pcbnew plot dialog. 2018-05-09 11:33:26 -04:00
Maciej Suminski 194c57133c SCH_LEGACY_PLUGIN::loadHierarchy() uses a stack to maintain sheet paths
Path keeping stack copes well with paths pointing outside the project
directory (e.g. "../path"). The so far used wxFileName::GetDirCount() and
wxFileName::RemoveLastDir() remove too many directories, as ".." is also
counted as a directory.

Fixes: lp:1769746
* https://bugs.launchpad.net/kicad/+bug/1769746
2018-05-09 11:30:23 +02:00
jean-pierre charras 6866c0c8a5 Update demo to use V5 libs 2018-05-09 09:06:31 +02:00
Jeff Young 31b026c70f Another attempt to fix the initial button layout on GTK. 2018-05-08 20:01:29 +01:00
Jeff Young e5374981aa Improve spacing of Plot button on GTK. 2018-05-08 18:48:23 +01:00
Jeff Young 36850a539b Make layers manager terminology consistent.
Fixes: lp:1769788
* https://bugs.launchpad.net/kicad/+bug/1769788
2018-05-08 18:48:23 +01:00
Seth Hillbrand b90f70e230 Update footprint filter type-in to be implicit *
Footprint filter provides two Regex filtering options.  One for keywords
and one for footprint keywords.  The footprint keywords (contained in
the symbol files) need explicit '*' at the beginning and end of the
filters to allow matching start/end.  Type-in filters should search
implicitly matching any wildcard substring.

Fixes: lp:1769931
* https://bugs.launchpad.net/kicad/+bug/1769931
2018-05-08 10:44:14 -07:00
Jeff Young a997aad144 Fix issue on re-titling sdbSizer button on GTK.
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
2018-05-08 17:11:48 +01:00
jean-pierre charras 4cc62ce038 3D viewer: minor enhancement: display the name of the 3D shape being loaded. 2018-05-08 16:07:09 +02:00
jean-pierre charras 8a70acb821 Update demos to use V5 libraries. 2018-05-08 15:29:21 +02:00
Tomasz Włostowski dcf4d7caa7 router: allow placing via without track in shove mode
Fixes: lp:1769782
* https://bugs.launchpad.net/kicad/+bug/1769782
2018-05-08 15:18:10 +02:00
Maciej Suminski c8f4e1051b Eagle SCH import: keep multi-unit parts not interchangeable
Eagle supports more sophisticated unit swapping information,
so the safest choice is to prevent any unit manipulation.
2018-05-08 12:17:46 +02:00
Maciej Suminski 2b46bda2f2 PNS router: apply the last stable state after dragging
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.
2018-05-08 11:50:37 +02:00
Maciej Suminski 471e3de5a7 Fixed board append function, broken in 046e73ec
The previous implementation cleared all DLISTs, but has not added
everything back on append.
2018-05-08 11:21:55 +02:00
Maciej Suminski 8cb3aa79f2 pcbnew_control.cpp code formatting 2018-05-08 10:40:33 +02:00
Maciej Suminski 046e73ecac Clear the source DLIST when pasting items to a BOARD
Fixes the assert triggering when items already belonging to a list are
added to another one.
2018-05-08 10:40:33 +02:00
jean-pierre charras 44bf92ae64 Annotate schematic: fix annotation bug with multi-unit parts when these parts have a duplicate reference.
It happens only with option "Reset, but keep order of multi-unit parts, because the algo tried
to propagate the new reference to parts having the same old reference,
without testing if this old reference was duplicated.

Fixes: lp:1769250
https://bugs.launchpad.net/kicad/+bug/1769250
2018-05-08 09:46:25 +02:00
Jeff Young ad6956b05d Move zone fill check for plot to a checkbox option.
Fixes: lp:1712579
* https://bugs.launchpad.net/kicad/+bug/1712579
2018-05-08 00:22:45 +01:00
Wayne Stambaugh 5c5b74b29e Fix user configuration path bug on Linux.
Recent versions of wxWidgets wxStandardPaths::GetUserConfigDir() correctly
append ".config" on Linux build which was incorrect as the current code
already appended it to the path.  Add a check to see if ".config" is the
last path and append as required.

Check for XDG_CONFIG_HOME environment variable on all platforms not just
Linux.

Fixes lp:1769145

https://bugs.launchpad.net/kicad/+bug/1769145
2018-05-07 18:23:41 -04:00
Seth Hillbrand dbc2eea3db Optimize itemset
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.
2018-05-07 13:59:12 -07:00
Seth Hillbrand 4c7f5f2a2f Allow disabling snap-to when placing vias
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
2018-05-07 13:58:26 -07:00
Maciej Suminski ffe194567a DLIST: extra checks 2018-05-07 17:12:03 +02:00
Maciej Suminski d2d5657aff DLIST: replace wxASSERT with wxCHECK for checks that would lead to a crash
wxASSERT only shows a dialog saying that things went wrong (in debug mode),
whereas wxCHECK will also terminate the function (also in release builds).
2018-05-07 16:52:34 +02:00
Maciej Suminski ef698384a7 Eagle PCB importer: changed m_Track.Insert() to m_Track.PushBack()
The latter better reflects the intention.
2018-05-07 16:51:06 +02:00
jean-pierre charras a3770bf6e1 Gerbview: fix a crash when Gerbview starts by loading a gerber job file (run from a command line) 2018-05-07 12:47:11 +02:00
jean-pierre charras d35a6f1e6d Gerber job file, update to the latest file specification: add a change forgotten in the first commit. 2018-05-07 08:50:17 +02:00
Jeff Young 07e7340a96 Make sure doc gets refreshed when zone check results in refill. 2018-05-06 14:05:50 +01:00
jean-pierre charras db8c57dbc6 fix a minor compil warning 2018-05-06 12:49:35 +02:00
jean-pierre charras b29550de5d Gerber job file: minor update to the latest file specification. 2018-05-06 12:03:46 +02:00
jean-pierre charras 90951ac1d1 Update demo to use V5 libraries. 2018-05-06 11:53:08 +02:00
Jeff Young 5a90858a46 Convert unit indicies to reference letters for annotation messages.
Fixes: lp:1769244
* https://bugs.launchpad.net/kicad/+bug/1769244
2018-05-06 00:23:04 +01:00
Jeff Young aa7da5dfcd Treat ${...} and $(...) envvar references uniformly.
Fixes: lp:1769282
* https://bugs.launchpad.net/kicad/+bug/1769282
2018-05-05 23:40:40 +01:00
Jeff Young a31017bc9c Check zone fills before plotting.
Also adds a "Draft Plot" button for those who wish to sidestep
zone checking (which can be slow).

Fixes: lp:1712579
* https://bugs.launchpad.net/kicad/+bug/1712579
2018-05-05 23:40:40 +01:00
Thomas Pointhuber cad2d0656c Remove Items from Menubar of 3D Viewer which are available over dialog 2018-05-05 12:33:04 -04:00
Thomas Pointhuber 32af04c6a6 Adjust Menubar of 3D Viewer to common style 2018-05-05 12:28:09 -04:00
Jeff Young 1f5b575eaf Pretty-up new pad clearance UI. 2018-05-04 23:55:03 +01:00
Jeff Young c23b263e39 Fix display issues in Layers list in Keepout Zone Properties. 2018-05-04 23:55:03 +01:00
Seth Hillbrand bfe636d327 Query user to create library on save
Revising 5ca6864a4, this prompts the user to create the missing library
directory when attempting to save to a non-existent library.
2018-05-04 09:59:35 -07:00
Seth Hillbrand 5ca6864a40 Improve error message granularity
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
2018-05-04 09:12:08 -07:00
Steven A. Falco e0ca5bab11 Fix comment typo.
Comment has XDG_CONFIG_HOME, but it should be KICAD_CONFIG_HOME.
2018-05-04 08:28:48 -07:00
Seth Hillbrand 9648584827 Adjusting the breakout optimizer for custom pads
Rather than using the center of the bounding box, we keep the start
track on the custom pad's connection pad when optimizing the breakout.
2018-05-04 08:23:20 -07:00
Seth Hillbrand b2c4519c2c Setting custom pad shape to be outline for PNS
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
2018-05-04 08:23:20 -07:00
jean-pierre charras 93c7f65d96 mask clearance parameters: use clearances only for pads on copper layers, and never for pads on technical layers only. 2018-05-04 14:55:38 +02:00
Maciej Suminski 684f085ac5 Coverity fixes
CIDs:
dereference before null check:
175439 @ drc.cpp

uninitalized field:
175435 @ point_editor.cpp
174162 @ zone_filler.cpp
163188 @ footprint_info_impl.cpp

logically dead code:
155146 @ pcb_editor_control.cpp
2018-05-04 14:06:08 +02:00
Seth Hillbrand 1ac905d3ee Allow PNS to select nearest pad when two overlap
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.
2018-05-03 09:48:15 -07:00
Seth Hillbrand 296ada95a3 Remove unused private vars 2018-05-03 09:48:15 -07:00
jean-pierre charras 5b44e80355 Fix incorrect gerber job file syntax, when a board has inner layers. 2018-05-03 18:27:02 +02:00
Wayne Stambaugh 0f5eb421b3 Fix duplicate menu shortcuts in Eeschema View menu.
Both "Leave Sheet" and "Library Browser" menu entries were mapped to the
'L' key.  Mapped the "Library Browser" entry to the 'B' key.

Fix "Show hidden pins" menu entry capitalization.

Map "Show Hidden Pins" to 'P' key and "Full Window Crosshair" to 'W' key.

Fixes lp:1768671

https://bugs.launchpad.net/kicad/+bug/1768671
2018-05-03 10:49:44 -04:00
Wayne Stambaugh 7c7a6ea979 Fix board file formatting bug.
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
2018-05-03 10:21:40 -04:00
Jeff Young a2448cf4a5 Add missing settings to ModEdit's preferences.
Fixes: lp:1768477
* https://bugs.launchpad.net/kicad/+bug/1768477
2018-05-03 15:07:24 +01:00
Jeff Young d0d9bb25c0 Menu consistence (add Config Paths to LibEdit). 2018-05-03 15:07:24 +01:00
Maciej Suminski 8411ef04d0 Size fields list correctly in symbol properties editor
This patch prevents fields with long text values from unreasonable
dialog resizing. It is basically commit f4eb63f8 applied to a
corresponding field editor dialog in the Symbol Editor.
2018-05-03 12:20:40 +02:00
Maciej Suminski 70cd27314b Autocompletion for Spice model selector 2018-05-03 11:58:13 +02:00
Maciej Suminski 72a70d61d8 Fixed the default value generated for Spice_Node_Sequence field
Values generated by NETLIST_EXPORTER_PSPICE::GetSpiceFieldDefVal()
and the actual value that was stored in a netlist differed when a
component has multiple units.

Due to that, the Spice model editor dialog incorrectly recognized
"alternate node sequence" value as the default one and cleared it
when the dialog was closed.
2018-05-03 11:29:34 +02:00
Jeff Young bf135b0690 Change Libedit save icon from Save Library to Save All Libraries.
Also changes Save Library and Save Library As to work off the
visible selection if there is one.

Also implements enablement for Save All Libraries.

Fixes: lp:1764081
* https://bugs.launchpad.net/kicad/+bug/1764081
2018-05-02 23:41:00 +01:00
Tomasz Włostowski 2eddf1d8db router: prevent a very unlikely infinite loop in PNS::LINE::Walkaround() causing an OOM&segfault
Fixes: lp:1767587
* https://bugs.launchpad.net/kicad/+bug/1767587
2018-05-02 15:06:08 -07:00
Jeff Young af739f5b00 Check for duplicates when adding libraries.
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
2018-05-02 21:49:57 +01:00
Jeff Young c842ddfb97 Fix message mismatch in YesNoCancelDialog. 2018-05-02 21:49:57 +01:00
Jeff Young 106dd60e45 Only adjust LAYER_WIDGET font size if larger than indicator.
Also moves adjustment into LAYER_WIDGET so all the callers don't
have to deal with it individually.

Fixes: lp:1767965
* https://bugs.launchpad.net/kicad/+bug/1767965
2018-05-02 21:49:57 +01:00
Jeff Young 2f157f9b23 Enable magnetic pads in Modedit.
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
2018-05-02 21:49:57 +01:00
jean-pierre charras 037f7a1698 Cosmetic enhancement: Add missing icons in GAL Select submenu (context submenu). 2018-05-02 21:42:41 +02:00
Seth Hillbrand 6b973f42eb Re-enabling lock/unlock context menus in legacy
This partially reverts 36d36de and 3bac100, moving the legacy footprint
lock/unlock code from the autorouter (which remains disabled) to
pcb_edit_frame.
2018-05-02 09:06:10 -07:00
Seth Hillbrand 76d3b6f04a Adding locking to the context menu for modules
Locking submenu was activated only for tracks and via but it makes sense
(and is probably expected) when right-clicking on modules as well.
2018-05-02 08:35:53 -07:00
Maciej Suminski 73eab29802 Removed 2 unused variables from PNS::LINE::Walkaround() 2018-05-02 17:06:13 +02:00
Maciej Suminski 439cc6a967 Remove redundant window scroll event handlers in WX_VIEW_CONTROLS
The only required scroll event handler is wxEVT_SCROLLWIN_THUMBTRACK,
which is responsible for dragging the scrolling sliders. One of the
remaining ones is also called when mousewheel is scrolled (MSW only) and
due to that overrides the new view setting with view settings computed
from the sliders position.

Fixes: lp:1767604
* https://bugs.launchpad.net/kicad/+bug/1767604
2018-05-02 15:39:36 +02:00
Jeff Young 69a31242b9 Change status bar Unconnected to Unrouted.
This should help make it clear that this is not the same as the
more authoratative DRC unconnected count.
2018-05-02 10:34:33 +01:00
Seth Hillbrand 62522ee450 Prevent implicit * from wildcard match in footprint
Footprint filters need to be able to match the start and end of strings.
The standard wildcard filter implictly adds "*" to the start and end of
match strings, so we create a derived class that requires an explicit
"*" or "?" to match wildcards.

Fixes: lp:1751565
* https://bugs.launchpad.net/kicad/+bug/1751565
2018-05-01 16:49:20 -07:00
Seth Hillbrand 2836d36de8 Removing legacy autorouter menu options
The autorouter was removed in 3bac100 but a few items were left in
place but mostly unconnected to functions.

Fixes: lp:1768357
* https://bugs.launchpad.net/kicad/+bug/1768357
2018-05-01 16:36:43 -07:00
Jeff Young aec490e3ac Handle single- and double-click in Place Footprint history list.
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
2018-05-01 23:28:01 +01:00
Jeff Young 8f2fee8bb8 Fix accidental revert. 2018-05-01 21:57:00 +01:00
Jeff Young 75e91f4cfd Make sure Cvpcb doesn't use its own FP_LIB_TABLE.
It's just a vestige of when Cvpcb was a separate app.

Fixes: lp:1768251
* https://bugs.launchpad.net/kicad/+bug/1768251
2018-05-01 21:49:03 +01:00
Shivpratap Chauhan 26197c333e At very first launch, old settings/config does not exist
KiCad read incorrect value for window position and it's size at very
first launch, which results in invisble/inaccessible window on Mac OSX.
Set correct default values for these settings fixes this issue.
And fix a typo in comment.
2018-05-01 09:19:27 -04:00
Jeff Young 295941c14d Don't leave Zones with "dead" nets.
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
2018-05-01 13:54:31 +01:00
Jeff Young 6b3410974d Fix "same layers" test when duplicating zones. 2018-05-01 13:54:31 +01:00
Wayne Stambaugh 5d71153eab Fix macos build bug caused by commit 2f5fdcf3. 2018-04-30 15:47:50 -04:00
Wayne Stambaugh 6850e23fe0 Replace printf debugging output in common/project.cpp with wxLogTrace. 2018-04-30 15:18:09 -04:00
Seth Hillbrand b2b70ed7e3 Fix minor signed/unsigned comparison 2018-04-30 11:15:29 -07:00
Seth Hillbrand 12487e14ab Reduce extra loop comparison 2018-04-30 09:14:23 -07:00
Simon Richter 2f5fdcf329 Don't reference CMAKE_INSTALL_PREFIX in installation paths
This is substituted at configuration time, creating an absolute path, which
breaks overriding CMAKE_INSTALL_PREFIX at installation time, breaking the
workflow for installation using GNU stow.
2018-04-30 10:32:15 -04:00
Andrzej Wolski 5ac4dbe641 Fix window/crossed selection mode recognition in flipped view
Fixes: lp:1767233
2018-04-30 14:57:38 +02:00
jean-pierre charras 7395949ae0 LIB_ID: fix incorrect detection of illegal chars, when values are not ASCII values.
Fixes: lp:1764055
https://bugs.launchpad.net/kicad/+bug/1764055
2018-04-30 11:46:24 +02:00
jean-pierre charras b636aaddf6 Eeschema: fix incorrect UI messages in dialogs due to using UTF8 strings instead of wxStrings (unicode) to build them.
(Added a explicit to build a Unicode string in UI messages to avoid mistakes)
2018-04-30 11:46:23 +02:00
Jeff Young c8a784058e Allow duplicating a zone onto the same layer in a GAL canvas.
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
2018-04-29 20:28:45 +01:00
Jeff Young ae711d9994 Separate clearance axes when plotting pads to DXF (among other things). 2018-04-29 18:51:18 +01:00
Jeff Young 7b734551d3 Make sure pin-caches are up-to-date before testing dangling ends.
Fixes: lp:1767745
* https://bugs.launchpad.net/kicad/+bug/1767745
2018-04-29 16:55:24 +01:00
Jeff Young 21ceb786ac Clear annotations *after* rebuilding symbol links.
We need to symbol links to determine whether or not units are
locked (ie: non-interchangeable).

Fixes: lp:1767744
* https://bugs.launchpad.net/kicad/+bug/1767744
2018-04-29 15:09:28 +01:00
Jeff Young 41b92b6d0f Don't discard footprint's library ID when saving.
Fixes: lp:1767736
* https://bugs.launchpad.net/kicad/+bug/1767736
2018-04-29 09:45:05 +01:00
jean-pierre charras ccb668c105 3D viewer: fix polygon contours of pads solder paste when solder paste ratio was not null.
(the oval and round rect pads 3D contours were incorrect)

Fixes: lp:1767209
https://bugs.launchpad.net/kicad/+bug/1767209
2018-04-28 20:31:50 +02:00
Seth Hillbrand 2a87117edc Speed load/unload of complex boards
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
2018-04-28 16:11:07 +02:00
jean-pierre charras 458f9f5c97 3D viewer: fix incorrect calculation of pad shapes with clearance (i.e. pad shapes on solder paste and solder mask layers)
Fixes: lp:1767209
https://bugs.launchpad.net/kicad/+bug/1767209
2018-04-28 12:41:43 +02:00
Jeff Young 91cfecaa12 Don't allow wxDataViewCtrl updates during model update.
Also checks to make sure libraries are activated before adding
them to the component tree.

Fixes: lp:1765286
* https://bugs.launchpad.net/kicad/+bug/1765286
2018-04-28 10:45:32 +01:00
Maciej Suminski 5a051358b7 Removed an obsolete comment 2018-04-28 01:19:42 +02:00
Maciej Suminski 9960416e32 Spice simulator: plot currents in DC sweep simulation
Fixes: lp:1767457
* https://bugs.launchpad.net/kicad/+bug/1767457
2018-04-28 01:14:00 +02:00
Maciej Suminski 4d6947b56a Spice simulator: do not display V(0) in the signals list 2018-04-28 01:14:00 +02:00
Maciej Suminski 539d12b08f Spice simulator: more elegant approach to generating Spice device names
Code fixing Spice device names (prefixing reference with a character
corresponding to the assigned device model type) that was duplicated in
a few places has been moved to a function (NETLIST_EXPORTER_PSPICE::GetSpiceDevice()).
2018-04-28 01:14:00 +02:00
Maciej Suminski 095112a902 Spice simulator: add device prefix only when necessary for DC sweep (missing in bc67d1ad) 2018-04-27 23:09:58 +02:00
jean-pierre charras 502bed083d Fix a minimal size for the spice simulator frame.
For an obscure reason, the minimal frame size fixed in EDA_BASE_FRAME was not working.
2018-04-27 20:35:23 +02:00
jean-pierre charras a9dd5b5335 Sim spice fix: the frame size was not the last stored size (like for other frames) but a default fixed value.
The frame size (and its subframes) is now the last used.
2018-04-27 18:33:13 +02:00
Jeff Young cfd2f1d001 Missed some menu items in the earlier clean-up. 2018-04-27 15:26:00 +01:00
Jeff Young 942d4e7658 Check footprint history list for validity.
Fixes: lp:1767108
* https://bugs.launchpad.net/kicad/+bug/1767108
2018-04-27 15:26:00 +01:00
jean-pierre charras ccce376e33 Refinements for commit 986b904
(Add comments and a minor fix)
2018-04-27 16:01:59 +02:00
Maciej Suminski bc67d1ad8c Spice simulator: prefix reference with device type only when necesary
Fixes: lp:1767271
* https://bugs.launchpad.net/kicad/+bug/1767271

Fixes: lp:1700853
* https://bugs.launchpad.net/kicad/+bug/1700853
2018-04-27 14:18:53 +02:00
jean-pierre charras 986b90424b Fix an issue in LoadPlugins(bundlepath=None) python method (Windows specific).
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
2018-04-27 14:04:24 +02:00
Maciej Suminski 7d9dea7897 Remove an excessive assert for Cairo canvas size
It is a C-style assert causing application termination when triggered.
Certain systems display pcbnew window shrinked so much, that the canvas
size is 0x0 pixels. The only problem with that is the window needs to be
resized.

Fixes: lp:1767031
* https://bugs.launchpad.net/kicad/+bug/1767031
2018-04-27 10:06:36 +02:00
Jeff Young 5e5e80d392 Don't allow panel to overwrite values set in Spice Model editor.
Fixes: lp:1766920
* https://bugs.launchpad.net/kicad/+bug/1766920
2018-04-26 19:13:19 +01:00
Jeff Young 6ccc8577ad Hand-code calculation of field names column width.
Fixes: lp:1737361
* https://bugs.launchpad.net/kicad/+bug/1737361
2018-04-26 19:13:19 +01:00
jean-pierre charras 641c8bb548 PCBNew: Fix crash while routing in Legacy canvas
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
2018-04-26 19:42:55 +02:00
jean-pierre charras 7a923ab969 vrml export: fix line min width to 0.05mm (instead of 0.12mm) 2018-04-26 19:42:54 +02:00
Jeff Young 888c434776 Treat Mac as special case rather than GTK.
(Windows also needs the padding we use for GTK.)
2018-04-26 15:51:34 +01:00
Wayne Stambaugh a7528df198 Allow for multiple user configurations.
Use KICAD_CONFIG_HOME environment variable on all platforms so users can
maintain multiple configurations of KiCad.
2018-04-26 08:29:37 -04:00
Jeff Young dcf02f5f67 Use a single calc-column-width-impl for Fields Editor.
Also adds calculation of the initial splitter position based on
the widths of the fields in the list.

Fixes: lp:1737361
* https://bugs.launchpad.net/kicad/+bug/1737361
2018-04-26 11:10:58 +01:00
Jeff Young 5342aacf97 Implement magnetic pads & tracks for measurement tool.
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
2018-04-25 23:36:17 +01:00
Jeff Young ac778bc5b4 Only draw hidden pins if requested or in LibEdit.
Fixes: lp:1742485
* https://bugs.launchpad.net/kicad/+bug/1742485
2018-04-25 20:07:22 +01:00
Jeff Young 09a6bada03 Delegation of keyEvents from 3D toolbar to 3D canvas.
Fixes: lp:1759803
* https://bugs.launchpad.net/kicad/+bug/1759803
2018-04-25 14:19:32 +01:00
jean-pierre charras 68e69fe95d eeschema: context menu pops up on 2nd click after ESC key was pressed twice
other very minor fixes

Fixes: lp:1766830
https://bugs.launchpad.net/kicad/+bug/1766830
2018-04-25 14:28:41 +02:00
jean-pierre charras 528a67b27c Fix incorrect sizing of 2 columns in dialog, on GTK (issue perhaps depending on GTK/wxWidget version) 2018-04-25 12:07:43 +02:00
jean-pierre charras 91209e194c Remove useless tests after operator new 2018-04-25 12:07:43 +02:00
Jeff Young 7a7da560bc Keep unknown nets at 0 while routing.
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
2018-04-25 10:54:32 +01:00
Maciej Suminski 26ee673a6b Validate symbol alias names read from .dcm files
Fixes: lp:1766551
* https://bugs.launchpad.net/kicad/+bug/1766551
2018-04-25 10:15:44 +02:00
Jeff Young 4b3772cf07 Update value field when changing power symbol reference.
Fixes: lp:1765932
* https://bugs.launchpad.net/kicad/+bug/1765932
2018-04-25 00:36:08 +01:00
Jeff Young 7e29ff0bc4 Conditional compilation for global fields editor listbox. 2018-04-24 23:45:44 +01:00
Seth Hillbrand 8d017c9261 Re-enabling global spread and place
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
2018-04-24 11:44:08 -07:00
Seth Hillbrand d0ffff3b88 Prevent deletion while actively routing
Fixes: lp:1766280
* https://bugs.launchpad.net/kicad/+bug/1766280
2018-04-24 10:44:49 -07:00
Seth Hillbrand 345f7d0732 Fix VRML export bugs
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
2018-04-24 09:20:40 -07:00
jean-pierre charras bfc70c8208 Fix an issue in footprint editor, "Create Pad from Selected Shapes" command.
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)
2018-04-24 17:00:29 +02:00
jean-pierre charras 319908b7f4 fix a compil issue. 2018-04-24 15:20:35 +02:00
Maciej Suminski 143d580596 Fixed relative coordinates reset when a tool forces the cursor position
Fixes: lp:1759044
* https://bugs.launchpad.net/kicad/+bug/1759044
2018-04-24 12:56:19 +02:00
Seth Hillbrand 482fd866b3 Correct minor error in SPECTRA rounded-rect 2018-04-23 16:43:13 -07:00
Seth Hillbrand bd5eee50f4 Unify correction factor calculations 2018-04-23 16:43:13 -07:00
Seth Hillbrand dbfa9093ab Adding seg-polyset collision support 2018-04-23 16:43:13 -07:00
Seth Hillbrand b618da1fac Fixing bounding box calc for arcs 2018-04-23 16:43:13 -07:00
Seth Hillbrand 96b5dee48f Remove extra sizer label from pcb_calc attentuators 2018-04-23 16:33:53 -07:00
Seth Hillbrand 1a617dd66b Standardizing colon usage in pcb calculator 2018-04-23 16:27:43 -07:00
Seth Hillbrand e6bb917ebf Standardize colon in regulator data dialog 2018-04-23 16:03:43 -07:00
Seth Hillbrand ef1d1f80e5 Standardize colon in page layout and cleanup
Aligned text boxes and placed units beside input where applicable.
2018-04-23 16:00:19 -07:00
Seth Hillbrand 802a96299a Standardize colons in new page layout 2018-04-23 13:33:53 -07:00
Seth Hillbrand 3d76fcaa3b Standardize colons in kicad template dialog 2018-04-23 13:15:02 -07:00
Seth Hillbrand f911ef5186 Standardize print scale label for gerbview 2018-04-23 13:14:06 -07:00
Seth Hillbrand ca06e67ffc Standardize colons in gerbview display options dialog 2018-04-23 13:11:53 -07:00
Seth Hillbrand aa0d67bdde Standardize colons in gerbview print dialog 2018-04-23 13:10:53 -07:00
Seth Hillbrand f2f1ce232d Standardize colons in bitmap2component dialog 2018-04-23 13:09:22 -07:00
Seth Hillbrand 48910f3efc Standardize colons in cvpcb display options dialog 2018-04-23 13:08:21 -07:00
Seth Hillbrand 2694a76785 Standardize colons in symbol library dialog 2018-04-23 12:33:21 -07:00
Seth Hillbrand 3e652f2d40 Standardize colons and units in spice model dialog 2018-04-23 12:31:23 -07:00
Seth Hillbrand 2baca1d650 Standardize colons and units in spice sim settings dialog 2018-04-23 12:31:17 -07:00
Seth Hillbrand 445c0e66fb Align search field 2018-04-23 11:55:28 -07:00
Seth Hillbrand 722886c9c7 Standardize colons in schematic plot dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 805c38ffc5 Standardize colons in new component dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 60abff1c02 Standardize colons in library text dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 424fe8acd4 Standardize colons in libedit pin dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 2c1f14fce5 Standardize colons in draw item dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand c55cb8c557 Standardize colons in ERC dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand f451ffb877 Standardize colons in schematic editor options dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 83319f74c3 Standardize colons in line style dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 2da575d539 Standardize wording and colons in libentry fields dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 617d9288ab Standardize colons in edit label dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 32bb6064d7 Standardize colons in edit schematic component dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 07281d78ad Standardize colons in edit component dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 8c2a7138d1 Standardize colons in BOM dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 4640a656a2 Standardize colons in annotate dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 3693e3b1e0 Standardize colons in track-via properties dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand b2a9df33ea Standardize colons in set grid dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 6f6b65821a Standardize colons in select pretty lib dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 0cbc611135 Standardize colons in select net dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 938f8b1a9a Standardize colons in Print using printer dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 006bfabbdf Standardize colon and remove abbr. in Print dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 0e79538601 Standardize caps in position relative dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand e219ff0c2f Standardize colons pns settings dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 3d2e103374 Standardize colons pns length tune dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 3c00b2a2a8 Standardize colons plot dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand fbb8ccb9ad Standardize colons in pad properties dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 30d1db6b1f Standardize colons non-copper zones dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 9b9345abba Standardize colons and wording in netlist dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand d562a7b26d Standardize colons modedit_options_base 2018-04-23 11:53:18 -07:00
Seth Hillbrand b834031425 Standardize colons layers_setup_base 2018-04-23 11:53:18 -07:00
Seth Hillbrand 9956ea20e7 Standardize colons layer_selection 2018-04-23 11:53:17 -07:00
Seth Hillbrand bc7ccab642 Standardize colons global footprint edit 2018-04-23 11:53:17 -07:00
Seth Hillbrand 0ed6751ebe Standardize colons global deletion 2018-04-23 11:53:17 -07:00
Seth Hillbrand 38dae061ce Standardize colon board editor options 2018-04-23 11:53:17 -07:00
Seth Hillbrand f96328afef Standardize colon gendrill_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 0b07f2ba9e Standardize colon and file/table in footprint lib dialog 2018-04-23 11:53:17 -07:00
Seth Hillbrand 65c3046fc9 Standardize colons for edit_footprint_text_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand f977d210ad Standardize colons for edit_footprint_for_fp_editor 2018-04-23 11:53:17 -07:00
Seth Hillbrand b9adcbdbe3 Standardize colons edit_footprint 2018-04-23 11:53:17 -07:00
Seth Hillbrand 8234cf721c Standardize colon drc_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 340b9fc2a5 Standardize colon display_options_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand a73cbe221a Standardize colong dimension editor base 2018-04-23 11:53:17 -07:00
Seth Hillbrand f55ad77da6 Standardize colon design_ruls_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 202e81eaa5 Standardize colon create_array_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 34fed2075a Standardize colon copper zones base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 87f18665fc Standardize colon block_options_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand c8d1e056f3 Standardize colon SVG_print_base 2018-04-23 11:53:17 -07:00
Jeff Young aa71d41a59 Calculate column widths based on actual text & fontsize.
Fixes: lp:1737361
* https://bugs.launchpad.net/kicad/+bug/1737361
2018-04-23 18:24:10 +01:00
Maciej Suminski 50588dcd1e Fix disabled 'save library' button in the symbol editor
With uninitialized COMPONENT_TREE::m_menuActive there were cases when
application logic erroneously decided to fetch the current library name
from the right click menu selection, even though there was no menu
opened, so an empty string was returned. Empty library name is
equivalent to no library loaded, therefore the save button appeared
disabled.

Fixes: lp:1765937
* https://bugs.launchpad.net/kicad/+bug/1765937
2018-04-23 15:29:26 +02:00
jean-pierre charras 2925b93571 Gerbview: Remove dead code that handled a experimental .gbrjob file, now no longer existing. 2018-04-23 13:04:21 +02:00
Maciej Suminski cfa9916836 Prevent issuing a print command before the previous one is finished
Fixes: lp:1765965
* https://bugs.launchpad.net/kicad/+bug/1765965
2018-04-23 11:25:28 +02:00
Maciej Suminski 3cc0554e33 Code formatting 2018-04-23 11:18:51 +02:00
Wayne Stambaugh 648803dcf7 Eeschema: fix missing part in part list bug in netlist exporter.
Use LIB_ID for LIB_PART_LESS_THAN comparison.  This prevents parts with
library name clashes from being dropped from the part list.
2018-04-22 16:33:34 -04:00
Wayne Stambaugh 41c1657eb6 Eeschema: fix bug in sheet path loading logic.
When a relative sheet path was not in the project path or a subfolder
within the project path, the schematic path would be empty.  Set the
base path to the project path when the schematic path is no within
the project path hierarchy.
2018-04-22 09:47:54 -04:00
jean-pierre charras 4202bb6af6 DIALOG_EDIT_COMPONENTS_LIBID: fix the minimal size (previous code to fix this size was not working) 2018-04-21 17:53:54 +02:00
jean-pierre charras e75762b1e3 Better wording 2018-04-21 16:31:41 +02:00
Wayne Stambaugh d776eaca83 Fix button sizer padding on symbol field edit dialog. 2018-04-20 19:19:13 -04:00
Maciej Suminski a93da4aba6 Restored wxPD_APP_MODAL flag for progress dialogs
The flag is required on Linux, otherwise applications hang right after a
progress dialog disappears.
2018-04-20 22:55:39 +02:00
Jeff Young 4302394990 Consistency between dialog titles and menu items.
... and between eeschema and pcbnew.

Also moved the Symbol & Footprint library table tabs to the top
so it's more clear what "by Scope" means.

Fixes: lp:1765359
* https://bugs.launchpad.net/kicad/+bug/1765359

Fixes: lp:1765516
* https://bugs.launchpad.net/kicad/+bug/1765516
2018-04-20 15:33:46 +01:00
Wayne Stambaugh fc8b852c41 Derive 3D model selection dialog from DIALOG_SHIM. 2018-04-20 10:15:05 -04:00
Maciej Suminski 5fb7f5a615 Fixed an assert in 3D shape download wizard 2018-04-20 14:23:53 +02:00
Maciej Suminski 86906b05e0 Fix 3D shape & footprint download wizards freeze on OSX
Fixes: lp:1758095
* https://bugs.launchpad.net/kicad/+bug/1758095
2018-04-20 12:36:34 +02:00
Maciej Suminski 554cb54a4f Eagle SCH import: save project file after the full path is set
Fixes: lp:1765297
* https://bugs.launchpad.net/kicad/+bug/1765297
2018-04-20 10:04:41 +02:00
Maciej Suminski 536529e48f Fixed unused captured variable warning 2018-04-20 08:44:41 +02:00
Jeff Young 5506efaee5 Add a SaveAndContinue button to the Fields Editor. 2018-04-19 23:13:19 +01:00
Jeff Young b9239d8728 Add defensive coding for column widths in Fields Editor. 2018-04-19 21:39:25 +01:00
Jeff Young 9201417c06 Handle new fields in global field editor.
Fixes: lp:1765443
* https://bugs.launchpad.net/kicad/+bug/1765443
2018-04-19 20:33:03 +01:00
Maciej Suminski f81c77cd4e Edit Tool: update the reference point for in-place modification
Fixes: lp:1765027
* https://bugs.launchpad.net/kicad/+bug/1765027
2018-04-19 17:10:06 +02:00
Maciej Suminski 1a5139b91f eeschema: renamed 'Symbol Table' to 'Fields Editor'
Fixes: lp:1765360
* https://bugs.launchpad.net/kicad/+bug/1765360
2018-04-19 16:26:17 +02:00
Maciej Suminski 0a58de0c46 Selection Tool: reset is-hover flag
Fixes: lp:1765034
* https://bugs.launchpad.net/kicad/+bug/1765034
2018-04-19 16:17:54 +02:00
Maciej Suminski dce0743ddb Removed nagging dialog in the delete tool. 2018-04-19 15:35:10 +02:00
Maciej Suminski e3a06dca70 Fallback to system ngspice library when libngspice is not found in other paths on macOS 2018-04-19 14:48:31 +02:00
Maciej Suminski 2865084ce8 Library Field editor: validate alias name before changing it
When LIB_ALIAS is renamed, it validates the new name. In case the name
typed in the field edit dialog is invalid, there was a discrepancy
between the name used further in the code and the actual alias name.

Fixes: lp:1765375
* https://bugs.launchpad.net/kicad/+bug/1765375
2018-04-19 14:47:34 +02:00
Maciej Suminski a695c995c7 pcbnew: fixed a warning regarding unused captured variables 2018-04-19 14:42:53 +02:00
Maciej Suminski 4526f40fe1 ngspice: add extra paths to search for libngspice
The main purpose of the patch is to load libngspice from macOS bundle.
There are also some additional paths that could make Windows developers
easier.

Fixes: lp:1630675
* https://bugs.launchpad.net/kicad/+bug/1630675
2018-04-19 11:43:29 +02:00
Maciej Suminski a8ef222517 ngspice: keep the ngspice DLL handle as an automatic variable 2018-04-19 11:44:48 +02:00
Maciej Suminski d3f23a62ec Bundle libngspice, code models and init scripts for macOS 2018-04-19 11:44:48 +02:00
Maciej Suminski c960d671cd Changed negative recursion level argument to positive
BEZIER_POLY::recursiveBezier() was called with negated 'level'
variable as an argument which is incorrect for an unsigned type.
2018-04-19 08:39:46 +02:00
Jeff Young e4feb315d5 Clean up some spacing issue with the Save button.
Also went back to using a smaller font for the status lines,
although this time using more system settings.
2018-04-18 22:26:18 +01:00
Jeff Young 442d1169a8 Adjust min sizes of Global Fields editor for Windows.
Also gets rid of a slew of unnecessary sizers in the dialog.
2018-04-18 20:37:20 +01:00
Simon Richter 7e47ef7471 Fix warnings for unreferenced local variables 2018-04-18 15:08:37 -04:00
jean-pierre charras 3179e40b57 Fix compil warning (perhaps 32 bit build specific) 2018-04-18 20:41:18 +02:00
Seth Hillbrand f68268c8ca Only update msgpanel when dimension started
Fixes: lp:1765118
* https://bugs.launchpad.net/kicad/+bug/1765118
2018-04-18 10:06:23 -07:00
Seth Hillbrand 7b3dc9c28d Fix tabs->spaces 2018-04-18 08:22:52 -07:00
Maciej Suminski 41ac458e79 Fixed SCH_LEGACY_PLUGIN_CACHE::saveBezier() 2018-04-18 09:36:22 +02:00
jean-pierre charras 90741a9d76 Cvpcb: allows more room to display messages to avoid long strings to overlap buttons 2018-04-18 09:25:33 +02:00
Jean-Samuel Reynaud ad0deb16a2 Fix pcbnew: refresh canvas on opening a file only after mouse move
Fixes: lp:1760819
* https://bugs.launchpad.net/kicad/+bug/1760819
2018-04-18 09:01:13 +02:00
Seth Hillbrand 794e8d8a04 Moving IsOk dialogs to correct parents 2018-04-17 17:27:15 -07:00
Seth Hillbrand 626c8a71f7 Reworking sheet duplication messages and annotation
The messages on sheet duplication are changed to reflect the action
perceived by the user when accepting/rejecting the change.

Annotation is also reset for duplicating sheets where maintaining
existing annotation would conflict with existing sheets.
2018-04-17 17:12:51 -07:00
Seth Hillbrand fdd3f52e2d Move debug msg to relevant section 2018-04-17 17:12:29 -07:00
Jeff Young db2cda7271 Fix some merge issues. 2018-04-17 20:26:50 +01:00
Seth Hillbrand 2d5da8b04f Fix assert when removing CurPart
Fixes: lp:1762099
* https://bugs.launchpad.net/kicad/+bug/1762099
2018-04-17 12:20:01 -07:00
Seth Hillbrand 853f73e6b7 Prevent duplicate sheetnames when using mouse copy 2018-04-17 12:01:03 -07:00
Seth Hillbrand ca544eb138 Adding radius info to panel for arcs/circles 2018-04-17 11:21:34 -07:00
Seth Hillbrand 6d855cbccb Remove extraneous assert
Fixes: lp:1764619
* https://bugs.launchpad.net/kicad/+bug/1764619
2018-04-17 10:53:27 -07:00
jean-pierre charras 854cb70052 Fix compil issue with gcc 4.8 on Ubuntu 2018-04-17 19:35:26 +02:00
Jeff Young 3be876c388 Cleanup of trace logs from Simon Richter. 2018-04-17 17:27:18 +01:00
Seth Hillbrand 45d1c19eb7 Add tooltip text to drag options. 2018-04-17 08:59:52 -07:00
jean-pierre charras 0294e41cbc fix minor compil warnings (about signed/unsigned comparison) 2018-04-17 16:08:12 +02:00
Jeff Young e84e5606c9 Fix compiler warning. 2018-04-17 15:06:38 +01:00
Jeff Young 000457db7c Move Fields Editor to wxGrid.
Makes in-place editing much easier and fixes some other issues
(see bug reports).

Fixed sorting bugs in References and added better sorting for
Values.

Removed Description column as it wasn't editable and caused more
confusion than value.

Removed auto-column-width after initial render.

Re-implemented undo/redo.

Fixes: lp:1749287
* https://bugs.launchpad.net/kicad/+bug/1749287

Fixes: lp:1737361
* https://bugs.launchpad.net/kicad/+bug/1737361

Fixes: lp:1759756
* https://bugs.launchpad.net/kicad/+bug/1759756

Fixes: lp:1763223
* https://bugs.launchpad.net/kicad/+bug/1763223

Fixes: lp:1761378
* https://bugs.launchpad.net/kicad/+bug/1761378
2018-04-17 11:39:44 +01:00
jean-pierre charras 268aeeb18f Pcbnew: More explicit tool tip in right vertical toolbar (place auxiliary axis origin tool). 2018-04-17 10:06:11 +02:00
jean-pierre charras 9865fcd929 3D viewer: fix hotkeys in 3D preview panel, and incorrect icons in context menu. 2018-04-17 09:59:21 +02:00
Seth Hillbrand b46fc7fe9c Adding option for Cmake-based DISTCC/CCACHE 2018-04-16 16:28:15 -07:00
Jeff Young 12ec56bc15 Prevent reentrancy in footprint loading.
Also removes parallel implementation in favour of using the
normal one (with a new wxGauge-backed PROGRESS_REPORTER).

Fixes: lp:1764196
* https://bugs.launchpad.net/kicad/+bug/1764196
2018-04-16 23:19:08 +01:00
jean-pierre charras 2974a2c10a Eeschema: fix broken generation of the project library cache.
Because the cache is broken, the rescue library was never created after missing library or change in lib.

This was due to the fact the symbol name inside the cache is broken, since commit a5844c9,
because all illegal chars in symbol name are replaced by '_'.
Unfortunately, in library cache, the ':' (illegal in usual libraries) is used to build the cached symbol name.
so in lib cache, symbol names were broken, making this lib useless.

this fix allows the ':' char in symbol name in lib.

Fixes: lp:1764166
https://bugs.launchpad.net/kicad/+bug/1764166
2018-04-16 10:58:28 +02:00
jean-pierre charras d2cf2fe61c Eeschema, fix issue when rotating a hierarchical sheet: depending on the sheet size, the rotation center was not always on grid.
Therefore, in this case, pin sheets were no longer on grid.

Fixes: lp:1764270
https://bugs.launchpad.net/kicad/+bug/1764270
2018-04-16 10:39:34 +02:00
jean-pierre charras 8fcdc4f6c3 3D viewer: fixes about hotkeys and menubar.
Move code to specific files 3d_menubar.cpp and hotkeys.cpp like in other tools.
2018-04-15 14:07:33 +02:00
jean-pierre charras 3e64c9de38 Fix incorrect behavior of ReplaceIllegalFileNameChars( wxString& aName, int aReplaceChar ) for non ASCII8 chars.
(this function was using a comparison using chars to test wide chars)

Fixes: lp:1764055
https://bugs.launchpad.net/kicad/+bug/1764055
2018-04-15 10:06:53 +02:00
jean-pierre charras 9203e397fe List hotkeys: Use the new Ctrl+F1 key in page layout editor, like in other editors 2018-04-14 19:05:24 +02:00
jean-pierre charras 07dc12fdd3 Fix incorrect UI management of Zoom to Selection, created by fix 2a419156 2018-04-14 17:44:17 +02:00
jean-pierre charras e9ef555c6a Use Ctrl+F1 to display hotkey list also in Gerbview and Kicad manager 2018-04-14 17:12:28 +02:00
jean-pierre charras 4a254ee7f3 Eeschema, schematic file save issue: fix missing switch to C locale before saving files
The scale factor of bitmap images was incorrectly saved in countries using a comma as floating point separator

Fixes: lp:1763726
https://bugs.launchpad.net/kicad/+bug/1763726
2018-04-14 16:59:17 +02:00
Wayne Stambaugh 9b5bbd7c77 Fix wxFileDialog assertion when worksheet file has absolute path.
Fixes lp: 1763887

https://bugs.launchpad.net/kicad/+bug/1763887
2018-04-14 10:51:15 -04:00
Wayne Stambaugh a1acec5f13 Revert broken hotkey fix.
The hotkey fix committed in 53b1ec81 broke non-us keyboards.  Change the
hotkey help hotkey from '?' to Ctrl+F1 to prevent the hotkey list dialog
from being shown when placing a bus wire junction in Eeschema and when
changing the track posture in Pcbnew.  This is still broken in the GAL
framework.
2018-04-14 08:24:25 -04:00
Jeff Young 2a419156e0 Don't try to check uncheckable menu items.
When updating toolbars make sure the events are coming from the
toolbar in question (and not the menus which share the same ID).

Fixes: lp:1763563
* https://bugs.launchpad.net/kicad/+bug/1763563
2018-04-13 21:42:31 +01:00
Wayne Stambaugh 81843c37a4 Organize trace debugging code for ease of maintenance. 2018-04-13 09:59:01 -04:00
Ievgenii Meshcheriakov 89bf02adb7 Define GLM_FORCE_CTOR_INIT during build
This ensures that GLM objects are still initialized correctly when new
version of this library are used (after 0.9.9-a2).

This also fixes display corruption in 3D-viewer with Raytracer.

Fixes: lp:1762379
* https://bugs.launchpad.net/kicad/+bug/1762379
2018-04-13 14:45:16 +02:00
Maciej Suminski 0e151687e3 Fixed a typo 2018-04-13 14:24:57 +02:00
Maciej Suminski a41b2d6803 Fix names of added aliases 2018-04-13 14:24:57 +02:00
Maciej Suminski b907fb856d Fix names of libraries added to symbol/footprint library tables 2018-04-13 14:24:57 +02:00
Maciej Suminski 3f734eb1b5 Improved validation of library and entry names
Symbol/footprint library and entry have the same set of forbidden
characters with a single exception, space character. To accommodate for
this difference, LIB_ID validation and fix methods have been extended to
specify the LIB_ID type that is checked (schematic/board).

LIB_ID::HasIllegalChars() and LIB_ID::FixIllegalChars() had two different
sets of characters treated as invalid in LIB_IDs. The set has been
factored out to another function to avoid duplication.
2018-04-13 14:24:57 +02:00
Maciej Suminski 862fb430e7 eeschema: Fixed setting unit condition in the component properties dialog 2018-04-13 14:24:57 +02:00
jean-pierre charras e57435c0fc Fix compil issue (created by commit "Added std::less specialization for wxPoint") with wxWidgets 3.1.1 2018-04-13 11:06:46 +02:00
Seth Hillbrand 1663627135 Update msg panel on create/modify graphic items
This clears the msg panel when not editing an item and updates the
position information when moving
2018-04-12 10:07:24 -07:00
Seth Hillbrand 0f3fc4b6eb Avoid doubling-up std namespace 2018-04-12 09:38:45 -07:00
Tomasz Włostowski 4e99b0d0e7 pcbnew: refresh message panel while drawing & editing graphical lines, arcs, circles and texts
Fixes: lp:1763052
* https://bugs.launchpad.net/kicad/+bug/1763052
2018-04-12 18:23:33 +02:00
Maciej Suminski 58c27398cb Eagle SCH import: improved implicit connections resolution
Nets assigned by power pins are weak, meaning they are valid
as long as there is nothing else attached to such pins. This patch
checks whether there are other wires or pins attached to a power pin
before placing a global net label.

Fixes: lp:1755191
* https://bugs.launchpad.net/kicad/+bug/1755191
2018-04-12 18:12:22 +02:00
Maciej Suminski b766dbc7a4 Added std::less specialization for wxPoint
Requried to use wxPoint as key type in maps
2018-04-12 18:09:18 +02:00
Maciej Suminski f42ca89bb4 cvpcb: Overridden SetStatusText() to use m_statusLine{1,2}
Fixes: lp:1763267
* https://bugs.launchpad.net/kicad/+bug/1763267
2018-04-12 13:02:46 +02:00
Maciej Suminski df8bc93e4b gerbview: Removed duplicate zoom-to-selection handler, made the toolbar button checkable
Fixes: lp:1763270
* https://bugs.launchpad.net/kicad/+bug/1763270
2018-04-12 11:52:08 +02:00
jean-pierre charras c421840a9e Cvpcb: avoid crash on start if _pcbnew.kiface (needed by cvpcb) is not found. 2018-04-12 11:07:43 +02:00
Maciej Suminski 0d8692da20 Changed ACTION_MANAGER assert() calls to wxASSERT()
wxASSERT(), contrary to assert() does not terminate the program when
triggered. As assertions in ACTION_MANAGER are not critical and should be
treated as warnings - there is no need to close the program.
2018-04-12 08:47:09 +02:00
Seth Hillbrand 86f744a1fd Adding initialization to GLM vectors 2018-04-11 10:59:28 -07:00
Ievgenii Meshcheriakov 18b0b78397 Correctly initialize module matrices in raytracer
Initialize module matrices to identity matrices instead of default zero
matrices while creating scenes for raytracer. This fixes disappearing
modules in raytracer view.

Fixes: lp:1763026
* https://bugs.launchpad.net/kicad/+bug/1763026
2018-04-11 10:06:36 -07:00
jean-pierre charras c1ae2fd0a8 Typo 2018-04-10 20:27:54 +02:00
jean-pierre charras 4f3b77347a DIALOG_ENV_VAR_CONFIG: allows using lowercase chars when typing an env var name. these lowercase chars are converted to uppercase on the fly.
Previously, lowercase chars were not accepted, and nothing was displayed when trying to type a name in lowercase chars.
2018-04-10 20:23:49 +02:00
jean-pierre charras 9ea360f168 Pcbnew: avoid useless validation dialog about modifications when closing pcbnew or opening a file, when the initial board is empty.
Some changes (enable/disable a layer) set the dirty bit even for empty boards.
So when closing pcbnew, the dialog asking for saving the board was shown, even when no board loaded.
2018-04-10 20:17:47 +02:00
Jeff Young 5ef715f3d3 Scan all items when looking for the weak reference.
... not just those directly in the draw list.

Fixes: lp:1747037
* https://bugs.launchpad.net/kicad/+bug/1747037
2018-04-09 21:19:11 +01:00
Jeff Young 84151990cd Don't set dirty bit when adding MARKERs.
They're not saved in the file, so they shouldn't dirty it.

Fixes: lp:1762497
* https://bugs.launchpad.net/kicad/+bug/1762497
2018-04-09 21:19:11 +01:00
jean-pierre charras cb134fd065 Update demos 2018-04-09 19:37:17 +02:00
jean-pierre charras 20c30a4425 3D viewer: Cosmetic enhancement in DIALOG_3D_VIEW_OPTIONS. 2018-04-09 19:37:17 +02:00
Jeff Young f83ebb316e Don't refill if zone fills aren't out-of-date. 2018-04-09 17:04:51 +01:00
Jeff Young 05dae96275 Move zone out-of-date check to the right place.
Fixes: lp:1760097
* https://bugs.launchpad.net/kicad/+bug/1760097
2018-04-09 15:09:47 +01:00
Maciej Suminski 4b0d477c76 Symbol Editor: handle delete hotkey in block edit mode 2018-04-09 14:04:06 +02:00
Maciej Suminski 9bd6d5e97c Fix mirror X/Y hotkeys in the Symbol Editor
Fixes: lp:1762136
* https://bugs.launchpad.net/kicad/+bug/1762136
2018-04-09 13:40:42 +02:00
Jeff Young 900bf0c7a6 Allow connections to no-net items in Highlight Collisions mode.
If the track being routed is unconnected, or the end-point
clicked on is unconnected, allow the connection by changing
the unconnected item to the net of the connected one.

Fixes: lp:1548129
* https://bugs.launchpad.net/kicad/+bug/1548129
2018-04-09 11:05:14 +01:00
Jeff Young a597ebc85e Break a track when placing a via on it.
Fixes: lp:1737349
* https://bugs.launchpad.net/kicad/+bug/1737349
2018-04-09 11:05:14 +01:00
Jeff Young d54a252eaa Check zone fills for being out-of-date during DRC. 2018-04-09 11:05:14 +01:00
jean-pierre charras 9f5316e38f Remove code related to Gerber job file old format writer, as this format does not exist now.
This old format is now officially replaced by a JSON syntax.
2018-04-09 09:26:01 +02:00
Carsten Schoenert a11714b1a4 fix misspelled 'an other' -> 'another' 2018-04-08 13:24:37 -04:00
Carsten Schoenert 77b3a662fc fix misspelled 'Allows to' -> 'Allows one to' 2018-04-08 13:24:30 -04:00
Carsten Schoenert 1f32f7c55b fix misspelled 'allows to' -> 'allows one to' 2018-04-08 13:24:18 -04:00
Mario Hros efa2a13eaa Don't install Python shell when wxPython support is disabled.
Fixes lp:1760200

https://bugs.launchpad.net/kicad/+bug/1760200
2018-04-08 13:20:49 -04:00
Maciej Suminski cb2c447c23 Spice Simulator: add close buttons to plot tabs
Fixes: lp:1761902
* https://bugs.launchpad.net/kicad/+bug/1761902
2018-04-07 22:53:50 +02:00
jean-pierre charras 7f6e26e55a DrawGraphicText: remove a static variable, and replace it (when needed) by a new parameter in argument list.
It make this function thread-safe (as far as wxString is thread-safe)
2018-04-07 19:57:26 +02:00
Jeff Young baef22df9a Fix memory leak and push menu change to other apps.
Fixes: lp:1761848
* https://bugs.launchpad.net/kicad/+bug/1761848
2018-04-07 14:14:55 +01:00
Jeff Young 0bd5cc4470 Borrow LTSpice's unconnected net nomenclature.
Using an unqualified "?" results in all the unconnected pins
being connected to each other.

Fixes: lp:1720619
* https://bugs.launchpad.net/kicad/+bug/1720619
2018-04-07 11:01:56 +01:00
Jeff Young be4d7987d3 Rebuild apple menu along with others when language changes.
Fixes: lp:1761848
* https://bugs.launchpad.net/kicad/+bug/1761848
2018-04-07 11:01:56 +01:00
jean-pierre charras 2bfbff104e Very minor fix: remove a trailing space in string. Mainly to help translations. 2018-04-06 20:12:33 +02:00
jean-pierre charras b9b8d14eb9 Update tools_to_build_newstroke-font files to V5 2018-04-06 20:09:32 +02:00
Jeff Young 0dc719ca1a Update 3D view immediately when user changes parameters.
The ray-tracer runs in the background so you can still change
other settings while it's redrawing.

Fixes: lp:1612419
* https://bugs.launchpad.net/kicad/+bug/1612419
2018-04-06 17:03:00 +01:00
Maciej Suminski e7ed415930 Eagle SCH import: handle implicit connections
Each named power input pin in Eagle creates an implicit connection to a
net with the name of the pin (e.g. GND, VCC). It is also done for the
units (gates in Eagle nomenclature) that have not been instantiated in
the schematics.

To emulate this behaviour in KiCad:
- Placed components are checked for power input pins, so they will have
global net labels attached to create the described implicit connections.
- As the components are placed, the remaining units of the symbol are
checked for power inputs to see if they need to be instantiated together
with global net labels.

Fixes: lp:1755191
* https://bugs.launchpad.net/kicad/+bug/1755191
2018-04-06 16:20:59 +02:00
Maciej Suminski 78c9b34b5d Eagle SCH import: moved sheet bbox calculation to a function 2018-04-06 16:02:58 +02:00
Maciej Suminski 9ee698bbcd Eagle SCH import: save the imported library file once the library section is processed
It is required to access symbol data in later import stages.
2018-04-06 16:02:18 +02:00
Kristoffer Ödmark fdb6bbab7b Footprint Wizard now also handles custom Env paths 2018-04-06 14:51:09 +01:00
Jeff Young 591a303777 Make ERC options dialog clearer.
Fixes: lp:1667600
* https://bugs.launchpad.net/kicad/+bug/1667600
2018-04-06 14:51:09 +01:00
Tomasz Włostowski 15c64ee92d pcbnew: CONNECTIVITY_ALGO should always mark newly added nets as dirty
Fixes: lp:1761698
* https://bugs.launchpad.net/kicad/+bug/1761698
2018-04-06 14:57:27 +02:00
Jeff Young 24b8768f43 Fix missing include. 2018-04-06 11:39:35 +01:00
Jeff Young db73daa09c Workaround for wxString's lack of thread safety. 2018-04-06 11:26:59 +01:00
Jeff Young 611d5a0dc4 Standardize "assign footprints" terminology.
Fixes: lp:1760867
* https://bugs.launchpad.net/kicad/+bug/1760867
2018-04-06 11:26:59 +01:00
Maciej Suminski 94dbcc7199 Fixed crash after multiple 'cut' commands in the footprint editor
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
2018-04-05 00:26:57 +02:00
Seth Hillbrand 6fb47faebd Workaround for IGES import bug in OCE-0.18
This changes the IGES import parameter precision to be file-defined
instead of hard-coded in KiCad.  OCE-0.18 does not handle faces with
a set of points whose approximation creates a single point.

By allowing the file to set the precision level, we leave it to the
generating program to create a file with non-degenerate faces.

Fixes: lp:1738872
* https://bugs.launchpad.net/kicad/+bug/1738872
2018-04-04 13:03:34 -07:00
Seth Hillbrand d1af5210e0 Libedit: Fix a few places where item could be NULL
Fixes: lp:1761058
* https://bugs.launchpad.net/kicad/+bug/1761058
2018-04-04 10:20:15 -07:00
Seth Hillbrand bbb513e2e5 Ensure that we are drawing holes and outlines
Set hole colors in output to non-transparent values.
Ensure holes are traced when drawing drill marks.

Fixes: lp:1646482
* https://bugs.launchpad.net/kicad/+bug/1646482
2018-04-04 10:20:15 -07:00
jean-pierre charras 906b389fab fp editor: minor cosmetic fix in main menu. 2018-04-04 17:40:42 +02:00
Wayne Stambaugh 696ff81dc7 Load correct schematic page layout description file in stand alone mode.
Fixes lp:1678849

https://bugs.launchpad.net/kicad/+bug/1678849
2018-04-04 10:18:12 -04:00
Jeff Young df43f071e1 Keep track of open sockets and dispose of them in d'tor.
Fixes: lp:1760936
* https://bugs.launchpad.net/kicad/+bug/1760936
2018-04-04 12:02:40 +01:00
Jeff Young 5e36fe8df7 Move timestamp setting where it will alwasy get set.
Also update the rest of the symbol-chooser usage to current
specs, including examining the timestamp to see if the list
needs loading at all.

Partial fix to: lp:1760936
* https://bugs.launchpad.net/kicad/+bug/1760936
2018-04-04 12:02:40 +01:00
jean-pierre charras 70988271c1 WX_TEXT_ENTRY_DIALOG: fix a wxASSERT ( very minor issue in debug mode) 2018-04-04 10:40:27 +02:00
Maciej Suminski 8b21a0a53d Changed PCB_BASE_FRAME::CreateNewModule() to stop adding modules to the board
When a new footprint is created, CreateNewModule() added it to a dummy
board in the footprint editor. If a footprint was indeed created (the
action has not been aborted) then the dummy board was cleared,
destroying the just created footprint. Also, the new footprint is later
added with AddModuleToBoard() call.

Fixes: lp:1761052
* https://bugs.launchpad.net/kicad/+bug/1761052
2018-04-04 09:34:12 +02:00
Jeff Young 2e4f50f206 Make sure segments read from file are in correct order.
Fixes: lp:1752033
* https://bugs.launchpad.net/kicad/+bug/1752033
2018-04-03 22:01:34 +01:00
Maciej Suminski 7943372e8b Refill zones only when required
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
2018-04-03 22:28:05 +02:00
jean-pierre charras a2f118d2fa Gerbview: fix not working menu item "Zoom to Selection" in main menu. This also fixes a wxASSERT for this menu item 2018-04-03 16:30:16 +02:00
Maciej Suminski 71bf488507 Eagle SCH importer: fixed open-collector pin type, simplified pin direction matching 2018-04-03 14:26:15 +02:00
Maciej Suminski 6d06ed3579 Eagle SCH importer: minor fixes
- set correct reference for components
- handle "pwr" direction for pins
- discarded a redundant variable
2018-04-03 14:26:15 +02:00
jean-pierre charras f8a3ec4974 Add a method to facilitate Tools handling in main frame toolbars.
Fix also a bug in gerbview_frame.cpp, about a broken toolbar accessor (fortunately not used in current code)
2018-04-03 13:00:20 +02:00
jean-pierre charras c867de53b8 Page layout editor: fix a wxASSERT when trying to open view menu from the main menubar.
This is due to the fact the same ID was used for a menuitem in menubar, and a tool in toolbars.
2018-04-03 09:31:52 +02:00
Wayne Stambaugh 747e14f9e1 Fix broken link in compiling.md. 2018-04-02 18:27:37 -04:00
Wayne Stambaugh 4b2ced341e Fix button sizer padding in WX_TEXT_ENTRY_DIALOG. 2018-04-02 18:05:37 -04:00
Wayne Stambaugh 53b1ec8146 Fix track posture hotkey bug on windows.
The change track posture hotkey '/' was getting interpreted as the show
hotkey list shortcut '?' on windows.  This fix is temporary hack to fix
the problem which much more involved than the simple #ifdef/#endif used
to fix this issue.

Add key code tracing to help analyze key codes for future development.
2018-04-02 18:05:37 -04:00
Jeff Young d391489596 Don't clear old footprint till after user has hit OK.
Fixes: lp:1759190
* https://bugs.launchpad.net/kicad/+bug/1759190
2018-04-02 22:32:09 +01:00
Jeff Young f4c972db5e Name the Get and Move Footprint dialog to match the command.
Fixes: lp:1760635
* https://bugs.launchpad.net/kicad/+bug/1760635
2018-04-02 20:16:26 +01:00
Russell Oliver 89381e1103 Eagle Import: Correct layer set based on cream setting and rotate rectangles
Fixes: lp:1758747
* https://bugs.launchpad.net/kicad/+bug/1758747
2018-04-02 10:59:54 -07:00
Seth Hillbrand ee05b1c92e Add polygon arc support to Eagle import 2018-04-02 10:49:43 -07:00
Seth Hillbrand 532bf09817 Don't save broken polygon
If a polygon has fewer than 3 points, it is invalid.  We need to
register this as failure, otherwise we save the formatting/closing
s-expr for the polygon without the actual polygon points. This breaks
the footprint and board.
2018-04-02 10:18:10 -07:00
Maciej Suminski dd56f16776 Fix symbol editor crash when modifying fields while a field is selected
Field Editor dialog calls LIB_EDIT::SetFields() that deletes the old
LIB_FIELD objects and creates new ones. If any of the old LIB_FIELD
objects had been selected before invoking the dialog, then one of the
update UI event handlers will crash trying to access the object.
2018-04-02 17:51:11 +02:00
jean-pierre charras 0171547154 Context menu: use same message for Zoom and Grid in Legacy mode and GAL mode.
a minor cosmetic other fix in Eeschema, edit submenu.
2018-04-01 21:09:52 +02:00
jean-pierre charras e750417fa0 Eeschema: fix many wxASSERT when trying to open menus from the main menubar.
This is due to the fact the same ID was used for menuitems in menubar,
and tools in toobars.
Especially, some items were not compatible due to different attributes.

Windows does not accept the same ID for 2 items inside the same frame.
It creates issues (items not shown, Asserts, ...)
2018-04-01 20:58:27 +02:00
jean-pierre charras 54f14b08ca commit forgotten change in my previous commit 2018-03-31 18:46:29 +02:00
jean-pierre charras fa39acfc2f Gerbview, export to pcbnew : export polygons as new DRAWSEGMENT polygonal shape.
It can creates issues on copper layers, but the only one other alternative is to ignore polygons in export,
and this is worst.
2018-03-31 18:43:12 +02:00
jean-pierre charras 5b8c35f64d Gerbview: minor fix: do not report error if in header INCH ot METRIC command has no parameter (,LZ or ,TZ format)
I am not sure it should be reported, because LZ or TZ format has no meaning in decimal format, and can be omitted.
2018-03-31 18:40:29 +02:00
jean-pierre charras 62c5a706d5 DIALOG_GRAPHIC_ITEM_PROPERTIES: fix a not very understandable error message (especially when Dwgs.User layer is disabled).
Rename the method PCB_LAYER_BOX_SELECTOR::SetLayerSet to the better name SetNotAllowedLayerSet
2018-03-31 10:46:52 +02:00
Jon Evans b813eac254 Omit unnecessary scripts directory from MacOS build output 2018-03-30 22:56:51 -04:00
Jon Evans e3d9a23867 Properly escape urls passed to wxLaunchDefaultBrowser() 2018-03-30 22:02:13 -04:00
Seth Hillbrand 62fe78f08c Eeschema: Simplify GetItem
Avoids calling HitTest on each item when it is not needed
2018-03-30 17:26:34 -07:00
Seth Hillbrand 8bb9084ea9 Revise TestSegmentHit to catch missing hits
Fixes issue where TestSegmentHit falsely skips segments that are
slightly off 45°. Improves speed of function by exiting on non-hits
more quickly. Simplifies function and removes magic numbers.
2018-03-30 17:26:34 -07:00
Seth Hillbrand 7d3d9f7188 Wrapping left-over debug printf() in DBG() 2018-03-30 16:17:29 -07:00
Seth Hillbrand 2e0b75c058 Remove internal CheckCXXSymbolExists
Since Cmake 2.8.6, Cmake provides this macro.  Our use references
internal Cmake variables that have changes in Cmake 3.11.
2018-03-30 14:47:16 -07:00
Maciej Suminski 7483a73a5f Set OK button as the default one in WX_TEXT_ENTRY_DIALOG
Enables accepting the input by pressing the Return key.
2018-03-30 15:29:48 +02:00
Jon Evans b8c282fa6f Don't complain about perfectly-closed polygons as self-intersecting 2018-03-29 22:20:00 -04:00
Jon Evans 081c77f6bd OPENGL_GAL::DrawSegment(): Enforce nonzero width to match Cairo
Fixes: lp:1759958
* https://bugs.launchpad.net/kicad/+bug/1759958
2018-03-29 22:13:46 -04:00
Jon Evans 1ec217d70e Fix hit testing for zero-width gerber items 2018-03-29 22:04:51 -04:00
Seth Hillbrand 7c70e969db Prevent warning when renaming sheet name
Renaming a subsheet but keeping the filename should not present a
warning to the user.  The was triggered due to comparing a
fully-qualified filename to a relative filename.

Fixes: lp:1744475
* https://bugs.launchpad.net/kicad/+bug/1744475
2018-03-29 13:51:02 -07:00
Seth Hillbrand 4917540069 Clarify timestamp type for wxDateTime 2018-03-29 09:29:05 -07:00
Maciej Suminski eb9099238a Eagle SCH import: Improved net label placement algorithm
Eagle support net labels that are naming wires not directly connected to
the labels. In KiCad it is not possible, therefore such detached net
labels need to be moved, so they touch the corresponding wire.

The initial algorithm did not take into account that a moved net label
might be placed on a wire crossing, effectively shorting two nets. This
commit improves the placement algorithm by avoiding the wire crossing
points when placing a label.

Fixes: lp:1748502
* https://bugs.launchpad.net/kicad/+bug/1748502
2018-03-29 12:16:11 +02:00
Maciej Suminski 88915f7940 SCH_EAGLE_PLUGIN::addBusEntries(): prevent operating on deleted objects 2018-03-29 12:11:36 +02:00
Maciej Suminski 168112cf84 SEG: added Center() method 2018-03-29 12:11:35 +02:00
Maciej Suminski 99e79c077a Eagle SCH import: Code formatting 2018-03-29 12:11:35 +02:00
jean-pierre charras 0f0d9afa66 Pcbnew, legacy mode: fix ratsnest display artifacts when finishing or removing a track 2018-03-29 09:28:41 +02:00
Seth Hillbrand d1ab62fb4d pcbnew: Save only edited footprint when saving
Don't re-save all files in a library when editing a single footprint.
This creates issues with formatting in version control systems where
unmodified files are re-written without being explicitly changed by the
user.

Fixes: lp:1752991
* https://bugs.launchpad.net/kicad/+bug/1752991
2018-03-28 14:42:32 -07:00
Jon Evans ed99251f0b Add explicit file:// URI scheme for html help files
This fixes the help location on MacOS
2018-03-28 17:18:15 -04:00
jean-pierre charras 6740a37632 move and swap layers: make changes undoable.
minor code cleanup.
2018-03-28 15:30:11 +02:00
jean-pierre charras 6a4d14bade Fix cosmetic issues in dialog. Use move instead of swap in dialog, to avoid mistakes, as the dialog allows moving objects between layers, and do not really swap layers. 2018-03-28 12:45:54 +02:00
Seth Hillbrand 952aa7a1a6 Removing the last of time_t and fixing downcast corner bug in collector 2018-03-27 16:52:06 -07:00
jean-pierre charras ffa454d6f9 class MODULE: use timestamp_t instead of time_t in SetLastEditTime and GetLastEditTime, like in all other methods using a time stamp. 2018-03-27 20:43:52 +02:00
jean-pierre charras 2edc675eaf DIALOG_LAYERS_SETUP: force 4 non copper layers to be always in use.
edge cut, courtyard and margin layers are (or can be) used in DRC.
So they are seen as mandatory, and the dialog always force them active.
2018-03-27 20:26:48 +02:00
Seth Hillbrand 545e6bbd0c Defining time_t for Python
Fixes: lp:1732738
* https://bugs.launchpad.net/kicad/+bug/1732738
2018-03-27 09:43:23 -07:00
jean-pierre charras 78161b5922 Layers setup management: Warn user if some removed layers are in use in footprints loaded on the board.
Fix also memory leak and missing connectivity rebuild.
2018-03-27 13:44:59 +02:00
jean-pierre charras 602d9e1972 Fix a missing init in gerber plot script demo.
Fixes: lp:1759071
https://bugs.launchpad.net/kicad/+bug/1759071
2018-03-27 13:42:51 +02:00
Jon Evans 0ded476f9d Add a hotkey to control net highlighting
Fixes: lp:1757446
* https://bugs.launchpad.net/kicad/+bug/1757446
2018-03-26 23:09:44 -04:00
Seth Hillbrand 9472444b41 Fix minor rounding error in curved wire import 2018-03-26 15:18:47 -07:00
Seth Hillbrand ced0fcee1e Updating Eagle Importer to take curved zones
Fixes: lp:1755879
* https://bugs.launchpad.net/kicad/+bug/1755879
2018-03-26 15:09:56 -07:00
Maciej Suminski 886dc48cc4 Point Editor: reset the pointer to the modified point as it becomes invalid
Fixes: lp:1759024
* https://bugs.launchpad.net/kicad/+bug/1759024
2018-03-27 00:03:48 +02:00
Jeff Young 8b94606fb5 Promote selection up context menu hierarchy.
This is so that tools checking for a selected item won't think
the menu has been cancelled if the selection was in a submenu.

Fixes: lp:1758372
* https://bugs.launchpad.net/kicad/+bug/1758372
2018-03-26 20:35:49 +01:00
Jeff Young 778a3a4777 Count pins instead of using netcount as a proxy.
Fixes: lp:1703155
* https://bugs.launchpad.net/kicad/+bug/1703155
2018-03-26 19:57:08 +01:00
Tomasz Włostowski ca4e4aead4 router: don't push vias if push force is zero
Fixes: lp:1758540
* https://bugs.launchpad.net/kicad/+bug/1758540
2018-03-26 20:13:32 +02:00
Seth Hillbrand 347f6daddc Eagle Converter: Adjust arcs to use error-based alg
Implements the revised, difference-error based algorithm in the Eagle
arc import rather than using the hard-coded 32-segments/360°
2018-03-26 10:39:23 -07:00
Jon Evans 1dd4af2972 Sort VIEW_GROUP drawing by layer order
Fixes: lp:1757146
* https://bugs.launchpad.net/kicad/+bug/1757146
2018-03-26 10:18:50 -04:00
jean-pierre charras 1cd64778d6 fix a minor compil warning. 2018-03-26 08:24:09 +02:00
Jon Evans a8b1c2a8f2 Change dimension style to improve display and be more standard 2018-03-25 21:50:57 -04:00
Jeff Young b3e3964787 Fix Linux crash opening CvPcb. 2018-03-26 00:52:02 +01:00
Jeff Young ba49bd0386 Allow XLS netlist exporters to specify a file extension.
Fixes: lp:1591779
* https://bugs.launchpad.net/kicad/+bug/1591779
2018-03-26 00:51:54 +01:00
Wayne Stambaugh c8c5b5da07 Fix zoom to selection in bug in gal canvas. 2018-03-25 16:12:56 -04:00
Jeff Young a763435b59 Change zone segment count to high/low res. 2018-03-25 20:20:51 +01:00
Jeff Young f4ce8766e3 Implement shared FOOTPRINT_LIST.
While we already cache the loaded footprint files, parsing said files
into the list is also time-intensive.  Since the FOOTPRINT_LIST is
already hash-stamped against the current timestamps of the files that
make up the list, sharing a single copy of the list is quite
straight-forward.
2018-03-25 19:21:28 +01:00
Jeff Young b24b0d5dfe Dialog-ize CvPcb and implement proper Save.
Save now goes to disk (instead of just the in-memory schemaitc),
and the UI attempts to make this clear.
2018-03-25 19:21:27 +01:00
Wayne Stambaugh 8d8c422a19 Add zoom to selection menu entry to all editors.
Fixes lp:1753339

https://bugs.launchpad.net/kicad/+bug/1753339
2018-03-25 12:34:19 -04:00
jean-pierre charras 33f795be4f Make call to Inkscape (to convert .svg files to .png files) compatible with OSX version of Inkscape 2018-03-25 16:38:45 +02:00
Jon Evans c6e6134ebd Set appropriate parent for new directory checkbox
Fixes: lp:1754731
* https://bugs.launchpad.net/kicad/+bug/1754731
2018-03-25 10:25:40 -04:00
Jon Evans bfe9eff878 Don't use wxTE_RICH in label editing dialog
Fixes: lp:1742296
* https://bugs.launchpad.net/kicad/+bug/1742296
2018-03-24 22:31:34 -04:00
Jon Evans 6b51cc33da Set appropriate parent for 3D library downloader progress dialog
Fixes: lp:1758095
* https://bugs.launchpad.net/kicad/+bug/1758095
2018-03-24 21:08:35 -04:00
Maciej Suminski 4b5ca0ec14 Drawing tool: prevent creating zero-length lines
Fixes: lp:1758570
* https://bugs.launchpad.net/kicad/+bug/1758570
2018-03-24 23:57:06 +01:00
Marco Ciampa 4594fedc2c Small typo in menubar 2018-03-24 10:36:40 -04:00
Jeff Young 97fffe875f Notify clients when GRID_TRICKS toggles checkboxes. 2018-03-24 13:13:57 +00:00
Seth Hillbrand f317b10adf Ensure that the current copper zone is not first
The zeroth index is reserved especially for the <no net> tag, so we need
to keep the current net at 1 or greater to keep it connected.

Fixes: lp:1758488
* https://bugs.launchpad.net/kicad/+bug/1758488
2018-03-23 20:38:47 -07:00
Seth Hillbrand fb882633b2 Save layers regardless of view
We do not modify the underlying board when saving.  Previously only the
visible layers were saved.  This created a discrepancy between the board
that the user was editing and the board that was saved to disk.

Fixes: lp:1754049
* https://bugs.launchpad.net/kicad/+bug/1754049
2018-03-23 09:32:56 -07:00
jean-pierre charras 6940f92469 Fix compil issue and warning on Windows/msys2 2018-03-23 15:07:38 +01:00
Jeff Young 5957bc7dba Make sure checkboxes refresh on Linux. 2018-03-23 13:33:17 +00:00
Jeff Young 7df943af9c Play nice with JetBrains CLion 2018-03-23 12:46:17 +00:00
Jeff Young cd0cd242d1 Move 3D polygon approximation to absolute-error algorithm.
Also inflates via and pad hole polygons to bisect their circles.

Fixes: lp:1758137
* https://bugs.launchpad.net/kicad/+bug/1758137
2018-03-23 12:46:17 +00:00
Jeff Young fbf10e941b Switch zone fillets to absolute-error algorithm.
And some general cleanup to related constants, etc.
2018-03-23 12:46:17 +00:00
Jeff Young d2d0660647 Open viewer even when FPID is invalid.
Just show an empty viewer.
2018-03-23 12:46:17 +00:00
Jeff Young a0364a1137 Don't make user click twice to toggle checkbox in wxGrid. 2018-03-23 12:46:17 +00:00
jean-pierre charras 29ebca4053 Very minor fix: make a menu string more easily translatable 2018-03-22 21:00:41 +01:00
Maciej Suminski 434b385a95 Eagle SCH importer: prepend # to references of symbols without assigned footprints
With hash character starting the reference value, schematic components
are considered as virtual and therefore netlist updater do not warn about
an unsigned footprint anymore. This approach is useful to handle logos,
frames or other virtual Eagle components.

Fixes: lp:1756281
* https://bugs.launchpad.net/kicad/+bug/1756281
2018-03-22 18:20:02 +01:00
Maciej Suminski e9537953cd Eagle SCH importer: reduced code duplication for importing labels 2018-03-22 18:20:02 +01:00
Maciej Suminski 97f8a3361e Renamed ERC rule: "Test unique global labels" to "Test single instances of global labels" 2018-03-22 18:20:02 +01:00
Maciej Suminski 6331f94544 OpenGL GAL: safer error handling
Replaced assert() with wxCHECK(), so in case of problems methods return
instead of continuing with invalid state/data, wherever possible.
2018-03-22 18:20:02 +01:00
Maciej Suminski 058f2bffd0 Spice simulator: safety check 2018-03-22 18:20:02 +01:00
Jon Evans 5b653c0c1e Update MacOS icons
Fixes: lp:1750284
* https://bugs.launchpad.net/kicad/+bug/1750284
2018-03-22 11:45:42 -04:00
Jon Evans 9bc97a9316 Add MacOS icon generator script 2018-03-22 11:45:41 -04:00
jean-pierre charras 94c780975e Very minor cosmetic fix. 2018-03-22 12:01:06 +01:00
Maciej Suminski e1c8822b9e Component Properties dialog: catch IO_ERRORs when showing footprint viewer 2018-03-22 11:44:13 +01:00
Maciej Suminski 62fd734007 Footprint Viewer: do not try to preselect an empty footprint
Empty string is treated as an invalid LIB_ID, so it ends up with an
exception.
2018-03-22 11:38:10 +01:00
Maciej Suminski 351fc0c343 eeschema: preserve unit number after pasting a component
Fixes: lp:1757373
* https://bugs.launchpad.net/kicad/+bug/1757373
2018-03-22 10:55:50 +01:00
Jon Evans a931ac436a Add some safety checks to Excellon number format detection
Fixes: lp:1754121
* https://bugs.launchpad.net/kicad/+bug/1754121
2018-03-21 22:29:43 -04:00
Andrzej Wolski 4152069504 Make vias selectable even if top and bottom layer are hidden 2018-03-21 22:15:17 -04:00
Jeff Young 79fe134495 Init Footprint Viewer with current FPID.
Fixes: lp:1757421
* https://bugs.launchpad.net/kicad/+bug/1757421
2018-03-21 23:11:55 +00:00
Jeff Young 99e659ff54 Coverity fixes. 2018-03-21 23:11:55 +00:00
Andrzej Wolski ff3f229871 Decouple vias from tracks in selection filter 2018-03-21 17:21:08 -04:00
Andrzej Wolski ea3f8743fd Fixes in GAL selection filter:
- 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
2018-03-21 17:21:01 -04:00
Jon Evans 8cdb82df42 Update Windows MSYS2 build instructions; remove "easy way" for now 2018-03-21 14:33:44 -04:00
Maciej Suminski bad462a228 Spice simulator: reload ngSpice dll on error
ngSpice frequently ends up a simulation with an error:
"Error: ngspice.dll cannot recover and awaits to be detached"
The only way forward is to reload the shared library and
reinitialize ngSpice.

Fixes: lp:1753101
* https://bugs.launchpad.net/kicad/+bug/1753101
2018-03-21 18:01:38 +01:00
Maciej Suminski 61e42ba392 Spice simulator: changed NGSPICE instance type to shared_ptr
It was yet another time when I tried to free a singleton pointer.
Let's make clear it is not meant to be freed manually.
2018-03-21 18:01:38 +01:00
Maciej Suminski 50053e7f27 Spice simulator: code formatting 2018-03-21 18:01:38 +01:00
Maciej Suminski 33620ecc85 Revert "libngspice is linked at compile time"
This reverts commit 75f8b20493.
In case of problems, ngspice demands to be detached which is not
possible when it is linked at compile time.
2018-03-21 18:01:38 +01:00
Maciej Suminski dfd2a8fc48 NumericEvaluator: return false for invalid expressions
Clearing bClError flag in NumericEvaluator::parseOk() made the
expression look valid, even if the flag has been set for a previous
token. Now it is cleared before an expression is parsed and verified
after parser finishes.

Fixes: lp:1756995
* https://bugs.launchpad.net/kicad/+bug/1756995
2018-03-21 17:11:35 +01:00
jean-pierre charras 7b4a8d7eb5 Gerber job file: update file format due to a recent change.
Please: note the gerber JSON file format is currently a moving target, although most of the format is now fixed.
Most, but not all.
2018-03-21 12:40:10 +01:00
Jon Evans 477b4c5447 Update Linux application and mimetype icons 2018-03-20 22:42:32 -04:00
Jon Evans 31081269d3 Update application icons 2018-03-20 22:26:59 -04:00
Jon Evans 285bf79370 Fix strings for save/load project menu options; standardize on "Load"
Fixes: lp:1753659
* https://bugs.launchpad.net/kicad/+bug/1753659
2018-03-20 22:20:54 -04:00
Jon Evans b9ce203487 Fix pad selection requirements in footprint editor
Fixes: lp:1757295
* https://bugs.launchpad.net/kicad/+bug/1757295
2018-03-20 21:15:05 -04:00
Jon Evans b53ed148f3 Optimization to track DRC and some formatting cleanup 2018-03-20 20:37:35 -04:00
Jon Evans c78171d01f DRC: Add an optional mode to report all track errors
Fixes: lp:1754442
* https://bugs.launchpad.net/kicad/+bug/1754442
2018-03-20 19:54:06 -04:00
Seth Hillbrand 73408f3f21 Correct DRC calculation on segments
If objects are at the clearance limit, they qualify as passing DRC.
Therefore, all comparison functions that indicate failure should be
strictly greater than or less than while all comparison functions that
indicate success (in the DRC) should be greater/equal or less/equal.

This also corrects a rounding error at the nm scale and handles
scaling zero-length and large segments correctly.

Fixes: lp:1756403
* https://bugs.launchpad.net/kicad/+bug/1756403

Fixes: lp:1593373
* https://bugs.launchpad.net/kicad/+bug/1593373
2018-03-20 15:35:53 -07:00
Jeff Young 683be7155e Mirror-image coordinate system on back of board for PNP.
Also converts any delimiters in tokens to underscores.

Fixes: lp:1679205
* https://bugs.launchpad.net/kicad/+bug/1679205
2018-03-20 16:57:42 +00:00
jean-pierre charras b5f1fdd981 Add icon to Get and Move context menu item in GAL mode.
Windows does not like mixing menu items with and without icons (sizing error).

Fixes: lp:1756263
https://bugs.launchpad.net/kicad/+bug/1756263
2018-03-20 08:30:02 +01:00
Jon Evans 3103e3dc4c DRC: Center zoom on marker location, not DRC item start location
For some DRC checks, the location of the marker is not the location
of the first item in the resulting DRC_ITEM, so centering the screen
on PointA of the DRC_ITEM can be confusing.
2018-03-19 22:25:55 -04:00
Maciej Suminski b40bf4c0ea Center DIALOG_SHIM position if it would have appeared off the screen
DIALOG_SHIM stores the dialog position, so every time it is shown, it is
displayed in the same location. This caused problems on multidisplay
setups, as dialogs could show up off the screen if the original display
has been detached in the meantime, effectively making them inaccesible
to the user.

Fixes: lp:1756623
* https://bugs.launchpad.net/kicad/+bug/1756623
2018-03-20 00:02:22 +01:00
Wayne Stambaugh 620c2af356 KiCad: fix template folder load bug.
Add a check to see if the folder selected by the user contains a
project template meta data folder and use that folder instead of
assuming that it is a folder containing sub-folders with project
templates.  The normal behavior is preserved when no meta data
folder is detected.

Fixes lp:1751465

https://bugs.launchpad.net/kicad/+bug/1751465
2018-03-19 12:49:57 -04:00
Maciej Suminski 33dcc080ea STEP exporter: check board outline continuity 2018-03-19 17:34:11 +01:00
Maciej Suminski a42aed3305 Added "Copy" to right click menu in WX_HTML_REPORT_PANEL 2018-03-19 17:15:07 +01:00
Maciej Suminski 17d63dbc1f Fixed text alignment in WX_HTML_REPORT_PANEL 2018-03-19 17:04:38 +01:00
Maciej Suminski 5ba3e43d31 Converted STEP exporter dialog to use WX_HTML_REPORT_PANEL 2018-03-19 17:04:38 +01:00
Maciej Suminski eebabf165b kicad2step: Report lack of model definition rather than empty file names 2018-03-19 17:04:38 +01:00
Maciej Suminski 47e4798423 kicad2step: Report function name and line number only in debug builds 2018-03-19 17:04:38 +01:00
jean-pierre charras 2ff74cb3fc Add support for .gbrjob new file format (JSON format) in Gerbview
Add experimental code to generate .gbrjob files in the new JSON file format
2018-03-19 15:14:20 +01:00
Jeff Young 1a845bc4ad Safer way to commit in-progress changes in wxGrid.
In some cases the wxGrid would attempt to close the editor in
the middle of the d'tor, resulting in segfaults.
2018-03-19 12:13:28 +00:00
jean-pierre charras 5e34563f52 Fix a long calculation time that happens with some gerber files when closing Gerbview in legacy display mode. 2018-03-19 10:58:27 +01:00
Maciej Suminski ce610f33a2 Coverity fixes
resource leak: #172233
negative array index write: #102363
uninitialized scalar field: #174540 #174539
structurally dead code: #169334 #169331
2018-03-19 10:02:05 +01:00
Jon Evans 4e76a18d5d Add checks against missing D-Codes in flashed Gerber items
Fixes: lp:1756710
* https://bugs.launchpad.net/kicad/+bug/1756710
2018-03-18 21:55:27 -04:00
Jeff Young aa0ae48dda Update status bar and toolbars on language change.
Fixes: lp:1392582
* https://bugs.launchpad.net/kicad/+bug/1392582

Fixes: lp:1748428
* https://bugs.launchpad.net/kicad/+bug/1748428
2018-03-18 22:17:27 +00:00
Jeff Young 89ebab5df2 Comments for SELECTION_TOOL::guessSelectionCandidates(). 2018-03-18 22:17:27 +00:00
Jeff Young df924a5e68 Follow standard FBP naming conventions. 2018-03-18 22:17:27 +00:00
Carsten Schoenert bc1b10bc92 AboutDialog_main.cpp: update the link to the libraries
The KiCad official libraries have now a own dedicated website.
2018-03-18 11:21:24 -04:00
Carsten Schoenert 4723aae18c AboutDialog_main.cpp: re-adding i18n macros
Some strings in the About Kicad dialog are not displayed as translated
strings due the strings not marked as i18n based strings.
2018-03-18 11:21:24 -04:00
jean-pierre charras 827b818b5d Very minor fixes in Gerbview and Kicad:
Gerbview: fix X2 z order display of Adhesive (Glue) layers.
Kicad: very minor cosmetic enhancement in Create Project dialog.
2018-03-18 16:04:23 +01:00
Jeff Young e0e0687cd7 Revert "Allow 5.0 to read 6.0 files with hole-to-hole clearance settings."
This reverts commit 0a4c04530a.
2018-03-16 22:22:15 +00:00
Jeff Young 1684fc735a Defensive coding to attempt to prevent wxWidgets crash.
Fixes: lp:1756255
* https://bugs.launchpad.net/kicad/+bug/1756255
2018-03-16 19:02:25 +00:00
Jeff Young b8fd2f3c79 Revert "Don't be pedantic about the file format."
This reverts commit 1537cbc59c.
2018-03-16 18:11:36 +00:00
Jeff Young d3e7efcd66 Ignore pads when selecting drag candidates in router tool.
Fixes: lp:1747156
* https://bugs.launchpad.net/kicad/+bug/1747156
2018-03-16 18:01:40 +00:00
Jeff Young b335ef0531 Don't involve user in implementation details.
Fixes: lp:1756299
* https://bugs.launchpad.net/kicad/+bug/1756299
2018-03-16 16:57:38 +00:00
Jeff Young 1537cbc59c Don't be pedantic about the file format.
It's just another form of nagging.
2018-03-16 16:57:38 +00:00
Marco Ciampa 9e8bcbea04 Gerbview: fix typo in tooltip string. 2018-03-16 09:41:53 -04:00
Wayne Stambaugh 3f52e87224 Standardize terminology for automatic zoom to "Zoom to Fit".
Fixes lp:1753336

https://bugs.launchpad.net/kicad/+bug/1753336
2018-03-16 08:38:36 -04:00
jean-pierre charras 819056df9d Eeschema: Add footprint field to Cadstar netlist file.
Fixes: lp:1755996
https://bugs.launchpad.net/kicad/+bug/1755996
2018-03-16 13:20:00 +01:00
Jeff Young 3b0a758f97 Ensure router layer is visible.
Fixes: lp:1663556
* https://bugs.launchpad.net/kicad/+bug/1663556
2018-03-16 02:43:17 +00:00
Jeff Young 0a4c04530a Allow 5.0 to read 6.0 files with hole-to-hole clearance settings. 2018-03-16 00:48:35 +00:00
Jeff Young a1a4275e8b Cancel interactive tools when entering DRC.
Fixes: lp:1541526
* https://bugs.launchpad.net/kicad/+bug/1541526
2018-03-16 00:28:02 +00:00
Jeff Young fb31bc1ca7 Add separators to kicad window.
Fixes: lp:1750409
* https://bugs.launchpad.net/kicad/+bug/1750409
2018-03-15 19:14:49 +00:00
Wayne Stambaugh 5ae9ac566f Page layout editor: standardize zoom in and zoom out menu accelerators.
Fixes: lp:1753338

https://bugs.launchpad.net/kicad/+bug/1753338
2018-03-15 15:07:58 -04:00
Alessandro Gatti 86603125ac Scripting: Preemptively reset footprint wizard state.
Fixes: lp:1754992
* https://bugs.launchpad.net/kicad/+bug/1754992
2018-03-15 12:30:02 -04:00
Jon Evans 2cc5c6fd45 Add ERC check in component editor for conflicting multi-unit pins
Fixes: lp:1680638
* https://bugs.launchpad.net/kicad/+bug/1680638
2018-03-15 11:11:43 -04:00
Jon Evans 0a81782b5d Add ERC check that a pin appears in only one net
Fixes: lp:1680638
* https://bugs.launchpad.net/kicad/+bug/1680638
2018-03-15 11:11:43 -04:00
Wayne Stambaugh 89d350a7d2 Footprint editor: fix bug in footprint wizard 2D barcode generator.
The text height and thickness settings were never implemented so they
didn't get updated when the options were changed.  Added the missing
code to update both parameters.

Added text width parameter so text height and width do not need to be
the same value.  Currently both the value and reference fields are set
to the same height and width.  Please feel free to change this if you
feel the need to have separate text settings for both the value and
reference fields.

Fixes lp:1751309

https://bugs.launchpad.net/kicad/+bug/1751309
2018-03-15 10:37:36 -04:00
Jeff Young c6ef0d57f1 Retire auto-delete-old-track from toolbar.
Also corrects the backwards-wording of the setting in the Preferences
dialog.

Fixes: lp:1754667
* https://bugs.launchpad.net/kicad/+bug/1754667
2018-03-15 11:41:27 +00:00
Jeff Young d9d9a54aa8 Replace previous hidden text commit with a LOD-based one. 2018-03-15 11:00:36 +00:00
jean-pierre charras e14a7c928c Fix incorrect pin num string in cadstar and orcadpcb2 format 2018-03-15 09:15:49 +01:00
Jon Evans 213b600b54 Revert active layer behavior so gerber/drill load behavior matches
Fixes: lp:1755713
* https://bugs.launchpad.net/kicad/+bug/1755713
2018-03-14 21:52:06 -04:00
Jeff Young a75ead5efd Handle hidden text changing layers when native layer toggled.
Fixes: lp:1553459
* https://bugs.launchpad.net/kicad/+bug/1553459
2018-03-14 22:56:03 +00:00
Jeff Young 8904b2e046 Peg 3D viewer in front of Footprint Viewer and Wizard.
Fixes: lp:1754741
* https://bugs.launchpad.net/kicad/+bug/1754741
2018-03-14 19:17:09 +00:00
jean-pierre charras e8df845b3f Minor fix in zones_by_polygon.cpp: When editing a non copper zone, some settings were not those of the edited zone.
trigo.h: Add a useful double NormalizeAngleDegrees( double Angle, double aMin, double aMax ).
2018-03-14 19:03:14 +01:00
Maciej Suminski e4d512a293 Eagle PCB import: mute uninitialized variable warning
In fact radius is not used initialized, as the scope where it is
used (while loop) is dependent on the preceding if( w.curve ) clause
that initializes 'radius' variable.
2018-03-14 15:40:58 +01:00
Jeff Young 3d12a6889b Make sure ERC and DRC item lists respect color themes.
Fixes: lp:1492953
* https://bugs.launchpad.net/kicad/+bug/1492953
2018-03-14 14:15:16 +00:00
jean-pierre charras fa41026f36 Fix issue in aperture macro with some strange gerber files.
Fixes: lp:1755623
https://bugs.launchpad.net/kicad/+bug/1755623
2018-03-14 14:55:51 +01:00
jean-pierre charras 66d5d10b49 Gerbview: bigger line buffer to read some gerber files that have only one (very long) line.
small code refactor.
2018-03-14 10:42:18 +01:00
Maciej Suminski f7ad77004d Eagle PCB import: handle {smd,pad}.thermals property 2018-03-14 10:24:47 +01:00
Maciej Suminski d432a985ab Eagle PCB import: handle 'roundness' DRC rule (SMD rounded rectangles)
Fixes: lp:1754138
* https://bugs.launchpad.net/kicad/+bug/1754138
2018-03-14 10:24:47 +01:00
Maciej Suminski 5896723c60 Eagle PCB import: handle smd.{stop,cream} and pad.stop attributes 2018-03-14 10:24:47 +01:00
Maciej Suminski 128a7f252c Eagle PCB import: fixed comments 2018-03-14 09:54:41 +01:00
Jon Evans 543faa385b PDF Plotter: handle edge-case arc/circle drawing correctly
Fixes: lp:1752771
* https://bugs.launchpad.net/kicad/+bug/1752771
2018-03-13 21:01:06 -04:00
Jon Evans 2f86b497d9 Work around wxGrid boolean editor issues
Fixes: lp:1667240
* https://bugs.launchpad.net/kicad/+bug/1667240
2018-03-13 20:34:39 -04:00
Wayne Stambaugh 71d8a1ea1e GerbView: fix legacy canvas refresh when drawing outline modes. 2018-03-13 18:25:03 -04:00
Wayne Stambaugh a5cca18dd1 GerbView: add view menu.
Include all actions provided by left vertical toolbar in a new view
menu for consistency with other main frames.

Move show/hide layer manager to view menu.

Simplify some toolbar and menu update logic.

Fixes lp:1753337

https://bugs.launchpad.net/kicad/+bug/1753337
2018-03-13 18:00:15 -04:00
Maciej Suminski 8567eab09a Fix pasting BOARD_ITEMs containing Unicode characters
Fixes: lp:1749549
* https://bugs.launchpad.net/kicad/+bug/1749549
2018-03-13 17:40:18 +01:00
Maciej Suminski 83efd6b8a3 Added 'Paste' to eeschema context menus
Fixes: lp:1754891
* https://bugs.launchpad.net/kicad/+bug/1754891
2018-03-13 17:26:33 +01:00
Maciej Suminski d906acc0eb Eagle PCB import plugin: sprintf() -> snprintf() 2018-03-13 14:50:08 +01:00
Maciej Suminski aeb999b9ae Eagle PCB import: handle solder mask & paste for pads
Fixes: lp:1754138
* https://bugs.launchpad.net/kicad/+bug/1754138
2018-03-13 14:50:05 +01:00
Maciej Suminski 4055c435a5 Eagle PCB import: unified code for handling pad properties 2018-03-13 14:44:35 +01:00
Maciej Suminski 4c9be316dd Eagle import: minor ECOORD refactor
- changed EAGLE_UNIT enum names from EAGLE_* to EU_*
- renamed ToNanoMeters() to ConvertToNm() and added a comment
- added ToMils() and ToNanoMeters() method
2018-03-13 14:44:34 +01:00
Maciej Suminski 133b681006 Eagle PCB import: code formatting 2018-03-13 14:44:28 +01:00
Maciej Suminski 9d0cd1a188 Eagle PCB import: rounded rectangle pad support 2018-03-13 11:57:43 +01:00
Miles McCoo 9d98fe1b80 Fix for crash due to pcbnew_action_plugin object tracking
pcbnew_action_plug tracks items that were modified within a plugin. In the case of
deletion, the old object is no longer valid. This commit turns off the call to delete
if a plugin is active.
2018-03-13 10:19:39 +01:00
Jon Evans 935a5cada8 Fix typo in conditional check
Fixes: lp:1755265
* https://bugs.launchpad.net/kicad/+bug/1755265
2018-03-12 22:15:27 -04:00
Jeff Young f32f14dc8f Add WX_TEXT_ENTRY_DIALOG which inherits from DIALOG_SHIM.
Fixes: lp:1754977
* https://bugs.launchpad.net/kicad/+bug/1754977
2018-03-12 22:45:51 +00:00
Jeff Young 43899bbe0e Fix compile issues under some compilers. 2018-03-12 21:02:04 +00:00
Jeff Young 3d32ee774e Translatable strings must be ASCII7 for translation tools. 2018-03-12 19:54:07 +00:00
Jeff Young 4eedb3a27d The _() macro affords some nullptr safety over a naked immediate.
Fixes: lp:1477448
* https://bugs.launchpad.net/kicad/+bug/1477448
2018-03-12 19:18:05 +00:00
Tomasz Wlostowski b1f613071d eeschema: workaround for 64kByte string length limit in wxString::Format() causing segfaults in netlist update under Windows
Fixes: lp:1754402
* https://bugs.launchpad.net/kicad/+bug/1754402
2018-03-12 18:26:25 +01:00
Maciej Suminski ab37801489 Do not define hotkeys for copy/cut/paste to avoid double action execution
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
2018-03-12 16:53:17 +01:00
jean-pierre charras d64c89d964 Footprint editor: Graphic polygon don't follow footprint when moving reference anchor
Fixes: lp:1755042
https://bugs.launchpad.net/kicad/+bug/1755042
2018-03-12 13:17:22 +01:00
jean-pierre charras 243ce6979b Fix a minor coding style and minor potential issue. 2018-03-12 08:34:21 +01:00
Alessandro Gatti 53c9143b64 fpwizard: Switch page after checking parameters
The parameter check was triggered by a grid clear event which was sent
after the current page number was changed, creating a mismatch between
the old and new parameter list lengths.

Fixes: lp:1754738
* https://bugs.launchpad.net/kicad/+bug/1754738
2018-03-11 19:10:27 -04:00
jean-pierre charras d52491c715 Custom pads: allows solid connection to zones.
The 2 options are now: no connection and solid connection
2018-03-11 20:39:29 +01:00
jean-pierre charras 17f6d09935 Page layout editor: fix incorrect management of block operation in context (popup) menu. 2018-03-11 18:38:27 +01:00
Alessandro Gatti f1cf95b8dd scripting: Fix invalid error message syntax.
Fixes: lp:1754758
https://bugs.launchpad.net/kicad/+bug/1754758
2018-03-11 15:09:27 +01:00
jean-pierre charras 17c0917dac DIALOG_UPDATE_PCB: minor fix: fix dialog min size.
The call to SetSizeHints() was missing
2018-03-10 18:19:52 +01:00
jean-pierre charras 2230abde1b page layout editor: fix a crash on block move.
This crash was due to a pointer initialized to a temporary reference.
Very minor coding style fixes
2018-03-10 10:25:07 +01:00
jean-pierre charras 83d5a770e8 Page layout editor: Hotkey modification ( '@' to a better key F5 ) 2018-03-10 08:41:06 +01:00
Seth Hillbrand f7cbf157a9 Adding segmentation to Eagle curved track import
Eagle tracks can have curves.  We approximate this using the
segments_per_360 define.  This results in 32 segments for a 360-degree
curve.  We could increase this value for curved tracks to get closer
tracking with the Eagle layout if needed.

Fixes: lp:1753289
* https://bugs.launchpad.net/kicad/+bug/1753289
2018-03-09 13:25:38 -08:00
Seth Hillbrand ea4cee3393 Set Eagle import generated timestamps to KiCad std 2018-03-09 13:12:18 -08:00
Seth Hillbrand 3d27dbdcbb Spelling Unrecognised -> Unrecognized 2018-03-09 09:43:54 -08:00
Seth Hillbrand 82e5110733 Spelling Synthetize -> Synthesize 2018-03-09 09:43:54 -08:00
Seth Hillbrand 7fbf7bbf42 Spelling improoved -> improved 2018-03-09 09:43:54 -08:00
Seth Hillbrand 2e12175c13 Spelling Plese -> Please 2018-03-09 09:43:54 -08:00
Seth Hillbrand a4519478f0 Spelling Appearence -> Appearance 2018-03-09 09:43:54 -08:00
Seth Hillbrand ce8d5787f7 Standardize Hierarchy wording 2018-03-09 09:43:54 -08:00
Seth Hillbrand 6d5389a90c Spelling Behaviour -> Behavior 2018-03-09 09:43:53 -08:00
Seth Hillbrand 649809a38f Standardize Keywords->Key words 2018-03-09 09:43:53 -08:00
Seth Hillbrand 26392f8070 Remove spaces from start of common translated words 2018-03-09 08:40:43 -08:00
jean-pierre charras 52ab6216c0 Refinement in circle to segment approximation for clearance area of DRAWSEGMENTS 2018-03-09 15:56:00 +01:00
Maciej Suminski 30a78f00bc Use 32-bit timestamps for imported Eagle files
Fixes: lp:1754610
* https://bugs.launchpad.net/kicad/+bug/1754610
2018-03-09 14:27:35 +01:00
jean-pierre charras 3fcc84dde3 Fix circle to segment approximation to 0.02 mm instead of 0.01 mm
(to avoid to long calculation time in fill zone)
2018-03-09 13:36:54 +01:00
jean-pierre charras 51fe063524 Circle to polygon conversion: a few enhancements:
* Remove duplicate code
* fix incorrect formulas is some places
* add comments
2018-03-09 13:28:47 +01:00
Jon Evans 9c62792245 SVG Plotter: Handle edge-case arc and circle drawing 2018-03-08 22:44:26 -05:00
Jon Evans 921e68107b OpenGL: Make circle/arc drawing match Cairo for some edge cases 2018-03-08 22:04:33 -05:00
hauptmech eeeed88425 Use fixed width on first Symbol Table column
Autosize when the reference field is a list of all components was too long.

Fixes: lp:1753330
* https://bugs.launchpad.net/kicad/+bug/1753330
2018-03-08 20:59:46 -05:00
Jeff Young 308f28d2d4 Save ModEdit's footprint ID rather than source.
This primarily keeps us from overriding "truth" with data that
might not have even been saved when closing ModEdit.

Fixes: lp:1752543
* https://bugs.launchpad.net/kicad/+bug/1752543
2018-03-09 01:32:52 +00:00
Jeff Young f1b48eb4f4 Fix default button and focus for ModEdit save.
Fixes: lp:1752546
* https://bugs.launchpad.net/kicad/+bug/1752546
2018-03-09 00:52:45 +00:00
Jeff Young c7cc795095 Close pcb opened just to get its GAL canvas settings.
Fixes: lp:1752541
* https://bugs.launchpad.net/kicad/+bug/1752541
2018-03-08 23:51:10 +00:00
Jeff Young 4693fd6200 Resolve env vars when looking up documentation files.
Fixes: lp:1729276
* https://bugs.launchpad.net/kicad/+bug/1729276
2018-03-08 23:51:10 +00:00
Jon Evans e4b847b345 GerbView: fix a few issues with layer selection / info synchronization
Fixes: lp:1754135
* https://bugs.launchpad.net/kicad/+bug/1754135
2018-03-08 18:19:48 -05:00
Jeff Young ad5311f393 Don't allow many context-menu commands for NEW/MOVED items.
Fixes: lp:1681198
* https://bugs.launchpad.net/kicad/+bug/1681198
2018-03-08 20:34:37 +00:00
Seth Hillbrand 5fea89ebd5 Standardize plural menu items 2018-03-08 12:33:32 -08:00
Seth Hillbrand 33423fe88d Standardize capitalization
Messages should start with capitalized letter
2018-03-08 12:33:32 -08:00
Seth Hillbrand 8ff91cc0da Standardize hotkeys table 2018-03-08 12:33:32 -08:00
Seth Hillbrand 5aa4129a88 Standardize copper zones 2018-03-08 12:33:32 -08:00
Seth Hillbrand de8716bcc2 Standardize open web browser 2018-03-08 12:33:32 -08:00
Seth Hillbrand f76b89cf99 Standardize error message in Eeschema 2018-03-08 12:33:32 -08:00
Seth Hillbrand 74e13aebca Spelling "Overwrite exiting" -> "Overwrite existing" 2018-03-08 12:33:32 -08:00
Seth Hillbrand 8639c308fa Spelling "free-stanging" -> "free-standing" 2018-03-08 12:33:32 -08:00
Seth Hillbrand 3cbf5f4942 Spelling indentifier -> identifier 2018-03-08 12:33:32 -08:00
Seth Hillbrand a607174f9a Fix english grammar 2018-03-08 12:33:32 -08:00
Seth Hillbrand 583ee0e4c3 Standardize Favourite -> Favorite 2018-03-08 12:33:32 -08:00
Seth Hillbrand 9bede6900c Standardize Kicad -> KiCad 2018-03-08 12:33:32 -08:00
Jeff Young 182b134872 Don't overwite env vars with settings.
Fixes: lp:1740022
* https://bugs.launchpad.net/kicad/+bug/1740022
2018-03-08 19:17:31 +00:00
Jeff Young 8a35e58987 Calculate number of segments based on radius.
Fixes: lp:1754252
* https://bugs.launchpad.net/kicad/+bug/1754252
2018-03-08 18:04:26 +00:00
Jeff Young ab730709c7 Only use hover track if there are no selected tracks.
Fixes: lp:1645670
* https://bugs.launchpad.net/kicad/+bug/1645670
2018-03-08 18:03:46 +00:00
Maciej Suminski 0bdae22af7 ResolveFile() handles absolute paths
Fixes: lp:1753094
* https://bugs.launchpad.net/kicad/+bug/1753094
2018-03-08 11:35:27 +01:00
Maciej Suminski 9ce768c29a Modified STROKE_FONT::ComputeStringBoundaryLimits() to process multiline strings
Removed a declaration of a not existing method (STROKE_FONT::ComputeTextLineSize()).

Fixes: lp:1747967
* https://bugs.launchpad.net/kicad/+bug/1747967
2018-03-08 10:56:34 +01:00
Maciej Suminski b3601bd540 SCH_LEGACY_PLUGIN_CACHE: Rename conflicting aliases 2018-03-08 09:48:41 +01:00
Maciej Suminski d74bb131e1 SCH_LEGACY_PLUGIN_CACHE: Do not add the root alias for loaded symbols
The root alias is added in the loop iterating through all aliases.
2018-03-08 09:48:41 +01:00
Maciej Suminski a5844c9bb8 Replace illegal characters in LIB_{ALIAS,PART} LIB_IDs
Schematic components have illegal characters replaced during load,
leading to broken component-symbol links. To avoid this, library symbols
should have their names fixed in the same way.

Fixes: lp:1752419
* https://bugs.launchpad.net/kicad/+bug/1752419
2018-03-08 09:48:34 +01:00
Maciej Suminski dfc47464d7 Added ReplaceIllegalFileNameChars() for wxString& 2018-03-08 09:06:15 +01:00
Jon Evans 23f49f014b Code style fixes 2018-03-07 22:14:24 -05:00
Jon Evans 3e033aee0c Perform coordinate format detection on Excellon drill files
Fixes: lp:1754121
* https://bugs.launchpad.net/kicad/+bug/1754121
2018-03-07 22:08:59 -05:00
Jon Evans 8f0c798dc8 Update MSYS2 links 2018-03-07 21:06:30 -05:00
Jon Evans 38d211b5e1 Document workaround for Windows compilation issues with OCE 2018-03-07 21:03:04 -05:00
Jon Evans 1e66a23dbc Rework footprint selection filtering to improve behavior
Fixes: lp:1751960
* https://bugs.launchpad.net/kicad/+bug/1751960
2018-03-07 20:41:10 -05:00
Seth Hillbrand 9c532dfada Eeschema: Prevent block duplicate from disappearing
Duplicate is handled like move/drag but shouldn't mark the original
items as moving.  This prevents a redraw from drawing the original
items.

Fixes: lp:1750083
* https://bugs.launchpad.net/kicad/+bug/1750083
2018-03-07 16:43:21 -08:00
Jon Evans c3333d4665 GerbView: ensure view settings are saved/restored in measure tool
Fixes: lp:1754100
* https://bugs.launchpad.net/kicad/+bug/1754100
2018-03-07 18:56:59 -05:00
Wayne Stambaugh 1ae721442c Pcbnew: fix invalid footprint name illegal character list.
Footprint names cannot contain ':', '\n', or '\r'.
2018-03-07 14:19:07 -05:00
Seth Hillbrand 85c8648045 Fix printable character bug in footprint
Fixes: lp:1754120
* https://bugs.launchpad.net/kicad/+bug/1754120
2018-03-07 10:57:36 -08:00
Seth Hillbrand 414e6614f1 Check for toolbar before checking tool
Not all toolbars exist in all tools at all times.  Need to check before
dereferencing variable.

Fixes: lp:1754094
* https://bugs.launchpad.net/kicad/+bug/1754094
2018-03-07 09:55:58 -08:00
jean-pierre charras 8fcbb64a46 Better algo to calculate the segment count to convert a DRAWSEGMENT arc or circle to a set of segments.
Currently, the max error between the arc/circle and a segment is set to 0.05 mm
2018-03-07 14:16:39 +01:00
Tomasz Włostowski ebd2b78f86 pcbnew/router: respect default net clearance for objects that don't have any net (e.g. board outline)
Fixes: lp:1753904
* https://bugs.launchpad.net/kicad/+bug/1753904
2018-03-07 11:47:37 +01:00
Maciej Suminski a3562b354b Refresh zones in the view on a DRC run
PCB_EDIT_FRAME::Fill_All_Zones() now reuses ZONE_FILLER tool to
avoid code duplication.

Fixes: lp:1753901
* https://bugs.launchpad.net/kicad/+bug/1753901
2018-03-07 09:05:51 +01:00
Seth Hillbrand c69db6cf8f Adding rounded rect and custom pad shapes to VRML export
Fixes: lp:1753552
* https://bugs.launchpad.net/kicad/+bug/1753552
2018-03-06 16:40:08 -08:00
Wayne Stambaugh 944a0b195e Update KiCad compiling document.
Add missing build dependencies ngspice and oce.

Fix missing dependencies for MSYS2 builds on windows.

Remove enabling scripting now that is enabled by default.
2018-03-06 18:54:51 -05:00
Jeff Young 44b81c99ec Use TransferDataFromWindow so <enter> works.
Fixes: lp:1750471
* https://bugs.launchpad.net/kicad/+bug/1750471
2018-03-06 21:12:14 +00:00
Jeff Young 2b34426c36 Only set always-show-scrollbars in constructor on Mac.
Fixes: lp:1753592
* https://bugs.launchpad.net/kicad/+bug/1753592
2018-03-06 20:31:44 +00:00
Maciej Suminski 49486b83b0 Add "create a new directory" checkbox to the Create Project dialog
Fixes: lp:1753325
* https://bugs.launchpad.net/kicad/+bug/1753325
2018-03-06 16:22:46 +01:00
Tomasz Włostowski a164f7e2da pcbnew: fixed zone filling performance regression
Fixes: lp:1753224
* https://bugs.launchpad.net/kicad/+bug/1753224
2018-03-06 16:06:16 +01:00
Tomasz Włostowski f2bb398ae6 pcbnew: fixes in primitives->custom pad tool
Fixes: lp:1753712
* https://bugs.launchpad.net/kicad/+bug/1753712

Fixes: lp:1753711
* https://bugs.launchpad.net/kicad/+bug/1753711
2018-03-06 14:59:15 +01:00
Tomasz Włostowski 48459e4268 pcbnew: fixes in custom pad creation tool
Fixes: lp:1753152
* https://bugs.launchpad.net/kicad/+bug/1753152
2018-03-06 14:59:15 +01:00
Maciej Suminski aff350f593 LIB_ID: change strcpy() to strncpy() for safety 2018-03-06 14:25:18 +01:00
hauptmech e62db2841a Fix dependency bug introduced in RPATH patch e0b33ee8 2018-03-06 07:39:44 -05:00
Clemens Koller f7ef010fe1 GerbView: Minor cleanup of Menus + Toolbar for consistency.
replace: File -> File(s) when wxFD_MULTIPLE
replace: Load -> Open
replace: Erase -> Clear
add Excellon / Gerber where it makes sense
re-sort File menu
2018-03-05 18:33:21 -05:00
jean-pierre charras 5a33f09608 Fix memory leak 2018-03-05 20:18:55 +01:00
jean-pierre charras ff91e9b253 minor fix in a debug code 2018-03-05 20:18:55 +01:00
jean-pierre charras cfbd156adc Minot fix: fix a minor wxAssert in dialog 2018-03-05 20:18:55 +01:00
Seth Hillbrand 218f66a08b Fix sign comparison warning 2018-03-05 09:20:19 -08:00
Maciej Suminski 5bbb4489b3 Fixed out of bounds access to m_shaderBuffer array in 3D viewer raytracer 2018-03-05 17:49:34 +01:00
hauptmech e0b33ee8a6 Fix RPATH not removed in shared object file for python
Build pcbnew_kiface files as object target that can then be linked in to pcbnew.kiface and _pcbnew.so
Only create _pcbnew.so target if scripting modules is enabled.
For linux builds only.
2018-03-05 11:19:16 -05:00
Diego Herranz 62bcf4fde4 pcbnew: reorder "Fabrication Outputs" in menu
Place it next to "Export" since it is similar conceptually
(it effectively exports to a few different formats too).
2018-03-05 10:49:55 -05:00
Maciej Suminski 3e54e16bdc Update ratsnest after a footprint change
PCB_BASE_FRAME::PlaceModule() calls CN_CONNECTIVITY_ALGO::Update()
on the new footprint that does not have nets assigned. The Update()
method first removes the footprint (but it has not been added, so
nothing happens) and then adds it with all pads marked as not connected.
Later, when BOARD_COMMIT is pushed - it tries to add the same footprint
again with nets assigned, but the pads are already registered, therefore
they are discarded.

To prevent this, PlaceModule() does not call CN_CONNECTIVITY_ALGO::Update()
for the just created footprint, as it is handled by BOARD_COMMIT later.
2018-03-05 16:42:30 +01:00
Maciej Suminski 0521b63503 Remove negation from PCB_BASE_FRAME::PlaceModule() parameter
Negated parameters make code confusing. Now the parameter
description is accurate.
2018-03-05 16:42:30 +01:00
Tomasz Włostowski 4be12292a0 Fixed duplicate misbehaviour when duplicating single track/via
Fixes: lp:1753158
* https://bugs.launchpad.net/kicad/+bug/1753158
2018-03-05 14:52:12 +01:00
Michael Kavanagh fabbc48b40 macOS: standardise CFBundleName to application names. 2018-03-05 01:14:00 +00:00
Seth Hillbrand 9c44d67f3b Eeschema: Simplify transformation representation
Fixes: lp:1752745
* https://bugs.launchpad.net/kicad/+bug/1752745
2018-03-05 01:05:21 +00:00
Jeff Young f4eb63f871 Size fields list correctly in symbol edit.
Fixes: lp:1753323
* https://bugs.launchpad.net/kicad/+bug/1753323
2018-03-05 00:07:50 +00:00
Jeff Young 90e2c8dd7f Get rid of first-scroll jerkiness in eeschema. 2018-03-05 00:07:50 +00:00
Jon Evans cd2224b94d Add missing hotkey support to GerbView
Fixes: lp:1752982
* https://bugs.launchpad.net/kicad/+bug/1752982
2018-03-04 16:59:23 -05:00
Jon Evans d2c86f8594 GerbView: Disable legacy-only event handlers when GAL is active
Fixes: lp:1752209
* https://bugs.launchpad.net/kicad/+bug/1752209
2018-03-04 16:21:24 -05:00
Seth Hillbrand 01ef0bd2e9 pcbnew: Add graphic polygon on drawing layer
Fixes: lp:1753151
* https://bugs.launchpad.net/kicad/+bug/1753151
2018-03-04 12:49:41 -08:00
Bernhard Stegmaier 8f42e128da Fix missing C++-11 compiler flags when building on macOS with non-Xcode clang 2018-03-04 15:00:43 -05:00
Bernhard Stegmaier a786078747 Fix clang-mp build error (don't declare const variables as being firstprivate) 2018-03-04 12:22:12 -05:00
Maciej Suminski 2af51ef20f Eagle import: do not call TrimWire() on imported schematics
It turns out that TrimWire() may remove legit Eagle wires and effectively
change the netlist.
2018-03-04 18:04:19 +01:00
Maciej Suminski 1f09990618 Remove not used ListNets() methods 2018-03-04 18:04:19 +01:00
Maciej Suminski 260f680c6c Eagle import: fix memory leak on schematic sheets import 2018-03-04 16:47:26 +01:00
Maciej Suminski 419a16ae58 Eagle import: fix footprint LIB_IDs in the imported board 2018-03-04 16:45:42 +01:00
Maciej Suminski 8e8d95dd7f Eagle import: process all sheets when adding junctions; fix footprint LIB_IDs 2018-03-04 16:45:42 +01:00
Maciej Suminski f7158e834d Created STDOUT_REPORTER class for debugging 2018-03-04 16:45:42 +01:00
Maciej Suminski a3941b1dec Eagle import plugin: remap zones/tracks/vias using net name remapping
There are a few steps to assign correct nets to zones/track/vias:
- create a net name to pad map
- perform 2 stage netlist update (fix timestamps and then references)
- compare new net names with the previously created net map, save the
    differences as a old net to new net map
- remap zones/tracks/vias using the map created in the previous step

The main advantage here is it correctly handles unnamed nets (i.e. ones
without any net labels attached), which might be changed by KiCad
netlist generator.
2018-03-04 16:45:42 +01:00
Maciej Suminski 77346d81ce Eagle import plugin: add junction dots to fix connectivity 2018-03-04 16:45:42 +01:00
Maciej Suminski 1f078f533b Refactor Eagle project import to use Kiway::ExpressMail() 2018-03-04 16:45:42 +01:00
Russell Oliver 9016344bb3 Eagle Schematic Import: Fix netlist mapping for zones and vias. 2018-03-04 16:45:11 +01:00
Russell Oliver 3d9c25494c Revert "Eagle importer: use only global net labels"
This reverts commit b1f456fade.
2018-03-04 16:42:55 +01:00
Jon Evans 2da7199a37 GerbView: Fix active layer synchronization 2018-03-03 23:43:16 -05:00
Jeff Young 284c346828 Don't cache github libraries above nginx server.
It's too expensive to fetch the timestamps when the github
server is busy.  See Dick Hollenbeck's comments at the top of
github_plugin.cpp for more info.

Also adds some safety to the other caching algorithms after
seeing github_plugin's wild-west usage of the kicad_plugin.

Fixes: lp:1753143
* https://bugs.launchpad.net/kicad/+bug/1753143
2018-03-04 01:16:59 +00:00
Wayne Stambaugh 43147a3a7a Do not append "RESCUE" to symbol names when rescuing symbols.
Fixes lp:1741755

https://bugs.launchpad.net/kicad/+bug/1741755
2018-03-03 15:34:26 -05:00
Jeff Young c294a54c57 Fix footprint wizard setup of gEDA libraries.
Fixes: lp:1753164
* https://bugs.launchpad.net/kicad/+bug/1753164
2018-03-03 20:08:29 +00:00
Jeff Young c77d13292b Reinstate multi-threading in zone filler. 2018-03-03 17:41:53 +00:00
Tomasz Włostowski 919b449595 Added 'show spice netlist' menu option in the simulator
Fixes: lp:1745887
* https://bugs.launchpad.net/kicad/+bug/1745887
2018-03-03 17:38:28 +01:00
Tomasz Włostowski d3b259cc09 pcbnew: toolbar/menu state sync for display units 2018-03-03 17:38:28 +01:00
Tomasz Włostowski af7064ef89 pcbnew: synchronize zone visibility view menu entries with the toolbar buttons 2018-03-03 17:38:28 +01:00
Wayne Stambaugh aeae32b1a2 Fix file naming bug when importing Eagle projects with . in file name.
Fixes lp:1747470

https://bugs.launchpad.net/kicad/+bug/1747470
2018-03-03 08:35:53 -05:00
Seth Hillbrand 3760b6820f pcbnew: align centers to the top and left
When aligning module centers, it can be hard to determine which item
will be chosen for the alignment target when it chooses based on the
median of the center values.  Instead, this patch chooses the alignment
target as the top and left most items of the Y and X centering,
respectively
2018-03-02 20:15:51 -08:00
Seth Hillbrand 818d4257c9 pcbnew: Prevent alignment on pads + parents
Filter a selection that contains pads and the pads' parent modules
before performing alignment operations.
2018-03-02 20:15:51 -08:00
Seth Hillbrand d5cd9761dd pcbnew: Check locks in alignment
When aligning in pcbnew, check for pad/module locks before performing a
move and query the user.

When aligning on pads, don't move the pad without moving the footprint,
so we don't break footprints.

Fixes: lp:1751352
* https://bugs.launchpad.net/kicad/+bug/1751352
2018-03-02 20:15:51 -08:00
Seth Hillbrand e6245c5c5a Fix type comparison warning 2018-03-02 17:08:01 -08:00
Jeff Young 8e1d397587 Update Eagle and gEDA importers.
Remove a throw in the Eagle importer which just threw a wedge
in the works, and return a default modTime when the file hasn't
been set yet.

Give the gEDA importer the multi-file cache management performance
improvements from the kicad_plugin.

Fixes: lp:1752719
* https://bugs.launchpad.net/kicad/+bug/1752719
2018-03-03 00:21:26 +00:00
Jeff Young 33d925f631 Add GetLibraryTimestamp to other plugins.
Fixes: lp:1752719
* https://bugs.launchpad.net/kicad/+bug/1752719
2018-03-02 20:53:48 +00:00
Seth Hillbrand cb052b42a6 LibEdit: Correct Mirroring labels in context menu
Fixes: lp:1752763
* https://bugs.launchpad.net/kicad/+bug/1752763
2018-03-02 10:17:55 -08:00
Maciej Suminski 3f1a3fe65b Derive DIALOG_MULTI_OPTIONS from wxMultiChoiceDialog 2018-03-02 18:09:27 +01:00
Maciej Suminski be13bb0013 Refactored SelectSingleOption() to take advantage of wxSingleChoiceDialog. 2018-03-02 17:43:59 +01:00
Maciej Suminski 18167f829a Derive KIDIALOG from wxRichMessageDialog
wxRichMessageDialog already offers a dialog with a checkbox, so
the custom dialog setup code is not necessary anymore.
2018-03-02 17:05:35 +01:00
Maciej Suminski 1d5df8e975 Renamed KI_DIALOG to KIDIALOG 2018-03-02 11:57:03 +01:00
Maciej Suminski d5ac7c031d Assign net classes to nets before showing the Design Rules dialog
It is needed to display nets that have just been imported to the
board (e.g. in an update PCB from schematics step).
2018-03-02 11:50:13 +01:00
Andrzej Wolski 1ac5ec1fc8 Restore some missing visibility items from board file
LAYER_TRACKS, LAYER_PADS_TH and LAYER_NON_PLATEDHOLES
now have their own visibility control, so do not force them on.
2018-03-02 11:12:53 +01:00
Maciej Suminski 0923c7f4de Change 'Create Array' default hot key due to a conflict with 'New File' 2018-03-02 11:08:04 +01:00
Maciej Suminski 52fcddf4f4 Allow drawing self-intersecting polygons, just display a warning
Fixes: lp:1751654
* https://bugs.launchpad.net/kicad/+bug/1751654
2018-03-02 10:58:43 +01:00
Seth Hillbrand 886159347a Eeschema: Verify file content exists
Fixes: lp:1752724
* https://bugs.launchpad.net/kicad/+bug/1752724
2018-03-01 14:32:59 -08:00
jean-pierre charras e3c71efbeb Fix compil warnings 2018-03-01 18:24:36 +01:00
Maciej Suminski de6b32d236 Share certain settings between board and footprint editor
45 degree graphics segments and selection vs dragging preference
should use the same setting in both applications.
2018-03-01 17:20:50 +01:00
Maciej Suminski 9127e09815 Code formatting 2018-03-01 17:20:50 +01:00
Maciej Suminski 98616da017 Added an option to enforce dragging gesture to always draw selection box
Partial solution to a problem described in lp:#1636214
2018-03-01 17:15:57 +01:00
Wayne Stambaugh ce1bd4c6b7 Eeschema: fix remapping backup project with schematics in subfolders.
The backup code was designed for a project with all of the schematics
in the project folder which is not always the case.  Fix the schematic
backup to keep the schematic folder structure in tact during backups.

Fixes lp:1751662

https://bugs.launchpad.net/kicad/+bug/1751662
2018-02-28 11:42:05 -05:00
Maciej Suminski fef1ba9993 Increase the area ratio threshold for rejecting large footprints in selection 2018-02-28 17:00:45 +01:00
Jon Evans 88fb4c57e5 PcbNew: center on items rather than zooming to them on find
Fixes: lp:1751480
* https://bugs.launchpad.net/kicad/+bug/1751480
2018-02-28 16:58:05 +01:00
Simon Richter 675bd39e8a Avoid shadowed variable 2018-02-28 16:34:03 +01:00
jean-pierre charras 2c85de3ab2 gerbview layer manager: fix a minor issue, and and icons in context menu, similar to pcbnew layer manager context menu 2018-02-28 10:21:37 +01:00
Jon Evans 2c54f6fe32 GerbView: Fix DCode reordering; ensure loaded layers are visible 2018-02-28 08:23:41 +01:00
Jon Evans de483ac1aa GerbView: only erase current layer if a new file is chosen 2018-02-28 08:23:40 +01:00
Jon Evans 490a2105c3 Properly update view when GerbView display settings changed 2018-02-28 08:23:39 +01:00
Jon Evans cd14525839 GerbView: More accurate selection of arc shapes 2018-02-28 08:23:39 +01:00
Jon Evans e2408989a4 GerbView: redraw negative items when visibility changes 2018-02-27 20:59:08 +01:00
Jon Evans 37beb726e3 GerbView: Implement in-place GAL layer reordering (for X2 sorting) 2018-02-27 20:59:07 +01:00
jean-pierre charras eb94d2fcd0 Gerbview: fix an issue when loading files: Layer filenames order in right tab view modified each time a new file is loaded.
It creates strange issues (inconsistent layer filenames order, inconsistent items colors) especially with non X2 files.
2018-02-27 19:58:07 +01:00
Robbert Lagerweij a59864201a pcbnew: use centerpoint distribution in align tool for overlaping items
reimplement the centerpoint distribution and use it when the items to be
distributed overlap leaving no gap to use for spacing

Fixes: lp:1748763
* https://bugs.launchpad.net/kicad/+bug/1748763
2018-02-27 17:58:19 +01:00
jean-pierre charras 5f578c884c Fix SetValue() method in TEXT_CTRL_EVAL
Normal SetValue() call would temporarily change the displayed
value, but as soon as the text widget receives focus again, the original
expression (not evaluated) is restored.

To avoid this, the original expression is cleared in the associated
NumericEvaluator object.
2018-02-27 12:47:43 +01:00
Maciej Suminski 5f2b8e0409 Change NumericEvaluator::clear() to optionally accept an object to clear 2018-02-27 12:47:32 +01:00
Jon Evans 0d794b20bb Add null check in ROUTER_TOOL::breakTrack() 2018-02-27 08:45:06 +01:00
Dan Weatherill 4124019f41 Send model change event on design rules change
Dispatches a TA_MODEL_CHANGE event when the design rules dialog is
closed, the intention being to cause the router tool to re-sync its
design rule information

Fixes: lp:1462929
* https://bugs.launchpad.net/kicad/+bug/1462929
2018-02-26 14:40:18 -05:00
Jon Evans 80035661dc Use proper path when loading files from Gerber job file 2018-02-26 14:26:58 -05:00
Jon Evans 5292829e05 Fix edge case GERBER_FILE_IMAGE creation logic 2018-02-26 14:26:47 -05:00
Jon Evans b03ac1f614 Only update item color when highlighting items in GerbView 2018-02-26 13:48:16 -05:00
Jon Evans 449da4303e Remove more unnecessary calls to RecacheAllItems 2018-02-26 13:47:55 -05:00
Maciej Suminski 55edf1aad2 PCB_PAINTER: use dynamic_cast to determine whether an object is of EDA_ITEM type 2018-02-26 17:22:50 +01:00
Maciej Suminski ad6571a508 GAL profiling: changed wxLogDebug() to wxLogTrace() for DRAW_PANEL_GAL 2018-02-26 17:22:47 +01:00
Jon Evans 31e78d670d Ensure ROUTER_PREVIEW_ITEM draws on top of all normal layers
Fixes: lp:1751646
* https://bugs.launchpad.net/kicad/+bug/1751646
2018-02-26 11:31:39 +01:00
Maciej Suminski b9285cf0e5 Display theta character correctly in ruler tool
Fixes: lp:1749549
* https://bugs.launchpad.net/kicad/+bug/1749549
2018-02-26 10:38:40 +01:00
Jon Evans 319b7cfc67 Remove extra call to SetTopLayer() when switching active layer 2018-02-25 19:19:45 -05:00
Jon Evans e21f18a176 Don't use the RTREE in UpdateAllLayersOrder() / UpdateAllLayersColor()
Since we are going to inspect every item for these calls, we don't
need to use the RTREE search, which is expensive with high item count.

This results in ~50% improvement in layer switching time in GerbView
when working with a set of large Gerber files.
2018-02-25 19:10:02 -05:00
Jon Evans 4ec7a02ccd Add a method to conditionally update VIEW_ITEMs (GerbView performance) 2018-02-25 18:20:44 -05:00
Jon Evans d7bb83ddcb Add a REPAINT flag for faster redraw when bounding box hasn't changed 2018-02-25 18:20:34 -05:00
Jon Evans be8bb24390 Make all new hotkeys editable; label some GAL-only hotkeys
Fixes: lp:1751183
* https://bugs.launchpad.net/kicad/+bug/1751183
2018-02-25 17:57:36 -05:00
Jon Evans cfd67163a1 Refactor post-load actions in PcbNew and apply them consistently
Fixes: lp:1751589
* https://bugs.launchpad.net/kicad/+bug/1751589
2018-02-25 17:47:36 -05:00
Jon Evans b90528a7ae Fix regression in GerbView display settings; some optimization too 2018-02-25 17:35:26 -05:00
Carsten Schoenert 2b52415cae fix misspelled 'Unkown' -> 'Unknown' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 9679bd55c1 fix misspelled 'streching' -> stretching 2018-02-25 17:10:10 -05:00
Carsten Schoenert 6256feb9db fix misspelled 'occured' -> 'occurred' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 5a86083a08 fix misspelled 'Occassionally' -> 'Occasionally' 2018-02-25 17:10:10 -05:00
Carsten Schoenert ff305781fb fix misspelled 'neeeded' -> 'needed' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 39e81b253b fix misspelled 'Modifed' -> 'Modified' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 485f90f27a fix misspelled 'Appearence' -> 'Appearance' 2018-02-25 17:10:10 -05:00
Carsten Schoenert cb14742442 fix misspelled 'accesing' -> 'accessing' 2018-02-25 17:10:10 -05:00
Michael Geselbracht 21f46776c6 Fix decimal point bug, support for more units V2
If ',' is used as decimal separator by the current locale a '.' is also accepted.
Also add support for units "mi", "th" and "in" as described in the documentation of pcbnew.

Fixes: lp:1751315
* https://bugs.launchpad.net/kicad/+bug/1751315
2018-02-25 08:21:23 +01:00
2741 changed files with 348699 additions and 390180 deletions
+31
View File
@@ -0,0 +1,31 @@
# Custom attribute to mark source files using KiCad C++ formatting
[attr]kicad-cpp-source whitepace=tab-in-indent format.clang-format-kicad
# Custom attribute to mark KiCad's own CMake files
[attr]kicad-cmake-source whitespace=tab-in-indent
# Custom attribute for auto-generated sources:
# * Do not perform whitespace checking
# * Do not format
[attr]generated whitespace=-tab-in-indent,-indent-with-non-tab -format.clang-format-kicad
# By default, all C and C++ files conform to KiCad formatting,
# unless overridden
*.c kicad-cpp-source
*.cpp kicad-cpp-source
*.h kicad-cpp-source
*.cmake kicad-cmake-source
*.txt kicad-cmake-source
# Compiled bitmap sources
bitmaps_png/cpp_*/*.cpp generated
# wxFormBuilder-generated files
**/dialog*/*_base.cpp generated
**/dialog*/*_base.h generated
# Lemon grammars
common/libeval/grammar.c generated
common/libeval/grammar.h generated
+49
View File
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
#
# Git "hook chain", used to execute multiple scripts per hook.
# To use:
# * create a directory called <hookname>.d
# * add scripts to this directory (executable)
# * ln -s hook-chain <hookname>
#
# Now the scripts in that directory should be called in order.
#
# Set $HOOKCHAIN_DEBUG to see the names of invoked scripts.
#
# Based on script by Oliver Reflalo:
# https://stackoverflow.com/questions/8730514/chaining-git-hooks
#
hookname=`basename $0`
# Temp file for stdin, cleared at exit
FILE=`mktemp`
trap 'rm -f $FILE' EXIT
cat - > $FILE
# Git hooks directory (this dir)
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
# Execute hooks in the directory one by one
for hook in $DIR/$hookname.d/*;
do
if [ -x "$hook" ]; then
if [ "$HOOKCHAIN_DEBUG" ]; then
echo "Running hook $hook"
fi
cat $FILE | $hook "$@"
status=$?
if [ $status -ne 0 ]; then
echo "Hook $hook failed with error code $status"
echo "To commit anyway, use --no-verify"
exit $status
else
if [ "$HOOKCHAIN_DEBUG" ]; then
echo "Hook passed: $hook"
fi
fi
fi
done
+1
View File
@@ -0,0 +1 @@
hook-chain
+91
View File
@@ -0,0 +1,91 @@
#!/usr/bin/env bash
#
# Runs clang-format on changed regions before commit.
#
# Remaining installation checks/instructions will be printed when you commit.
#
# Based on clang-format pre-commit hook by Alex Eagle
# https://gist.github.com/alexeagle/c8ed91b14a407342d9a8e112b5ac7dab
# Set kicad.check-format to allow this hook to run
# If not set, the hook always succeeds.
do_format=false
# Check if formatting is configured
if [ "$(git config --get kicad.check-format)" = true ]; then
do_format=true
fi
# Older env variable method
if [ ! -z "$KICAD_CHECK_FORMAT" ]; then
do_format=true
fi
if [ ! ${do_format} = true ]; then
# No formatting required
exit 0;
fi
check_clang_format() {
if hash git-clang-format 2>/dev/null; then
return
else
echo "SETUP ERROR: no git-clang-format executable found, or it is not executable"
exit 1
fi
}
check_git_config() {
if [[ "$(git config --get clangFormat.style)" != "file" ]]; then
echo "SETUP ERROR: git config clangFormat.style is wrong (should be 'file'). Fix this with:"
echo "git config clangFormat.style file"
exit 1
fi
}
get_filtered_filenames()
{
format_attr='clang-format-kicad'
# command to get list of candidate files
git_list_files='git diff --cached --name-only --diff-filter=ACM'
files=$(${git_list_files} |
# Filter for format-controlled files
git check-attr --stdin format.${format_attr} |
# output only the file names
grep ": set$" |
cut -d: -f1)
echo ${files}
}
check_clang_format
check_git_config
files_to_check=$(get_filtered_filenames)
if [ -z "${files_to_check}" ]; then
# No controlled files to check
exit 0;
fi
git_clang_format_cmd="git clang-format -v --diff -- ${files_to_check}"
readonly out=$(${git_clang_format_cmd})
# In these cases, there is no formatting issues, so we succeed
if [[ "$out" == *"no modified files to format"* ]]; then exit 0; fi
if [[ "$out" == *"clang-format did not modify any files"* ]]; then exit 0; fi
# Any other case implies formatting results
echo "ERROR: you need to run clang-format (e.g. using tools/check_coding.sh) on your commit"
# print the errors to show what's the issue
${git_clang_format_cmd}
# fail the pre-commit
exit 1
+4 -2
View File
@@ -20,7 +20,6 @@ eeschema/dialogs/dialog_bom_cfg_lexer.h
eeschema/dialogs/dialog_bom_help_html.h
eeschema/template_fieldnames_keywords.*
eeschema/template_fieldnames_lexer.h
pcbnew/dialogs/dialog_freeroute_exchange_help_html.h
pcbnew/pcb_plot_params_keywords.cpp
pcbnew/pcb_plot_params_lexer.h
pcb_calculator/attenuators/bridget_tee_formula.h
@@ -53,14 +52,17 @@ bitmaps_png/png*
bitmaps_png/tmp
common/pcb_keywords.cpp
include/pcb_lexer.h
fp-info-cache
# demo project auxillary files
demos/**/*-bak
demos/**/_autosave-*
demos/**/fp-info-cache
# editor/OS fluff
.*.swp
*~
.idea
.DS_Store
*.png
*.kiface
@@ -73,4 +75,4 @@ demos/**/_autosave-*
*.old
*.gch
*.orig
*.patch
*.patch
+62 -123
View File
@@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015-2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -34,7 +35,13 @@
#include <wx/log.h>
#include <wx/stdpaths.h>
#include <boost/version.hpp>
#if BOOST_VERSION >= 106800
#include <boost/uuid/detail/sha1.hpp>
#else
#include <boost/uuid/sha1.hpp>
#endif
#include <glm/glm.hpp>
#include <glm/ext.hpp>
@@ -43,7 +50,7 @@
#include "3d_cache.h"
#include "3d_info.h"
#include "sg/scenegraph.h"
#include "3d_filename_resolver.h"
#include "filename_resolver.h"
#include "3d_plugin_manager.h"
#include "plugins/3dapi/ifsg_api.h"
@@ -52,6 +59,7 @@
static wxCriticalSection lock3D_cache;
static bool isSHA1Same( const unsigned char* shaA, const unsigned char* shaB )
{
for( int i = 0; i < 20; ++i )
@@ -61,6 +69,7 @@ static bool isSHA1Same( const unsigned char* shaA, const unsigned char* shaB )
return true;
}
static bool checkTag( const char* aTag, void* aPluginMgrPtr )
{
if( NULL == aTag || NULL == aPluginMgrPtr )
@@ -71,6 +80,7 @@ static bool checkTag( const char* aTag, void* aPluginMgrPtr )
return pp->CheckTag( aTag );
}
static const wxString sha1ToWXString( const unsigned char* aSHA1Sum )
{
unsigned char uc;
@@ -151,14 +161,8 @@ void S3D_CACHE_ENTRY::SetSHA1( const unsigned char* aSHA1Sum )
{
if( NULL == aSHA1Sum )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] NULL passed for aSHA1Sum";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] NULL passed for aSHA1Sum",
__FILE__, __FUNCTION__, __LINE__ );
return;
}
@@ -180,12 +184,13 @@ const wxString S3D_CACHE_ENTRY::GetCacheBaseName( void )
S3D_CACHE::S3D_CACHE()
{
m_DirtyCache = false;
m_FNResolver = new S3D_FILENAME_RESOLVER;
m_FNResolver = new FILENAME_RESOLVER;
m_Plugins = new S3D_PLUGIN_MANAGER;
return;
}
S3D_CACHE::~S3D_CACHE()
{
FlushCache();
@@ -210,14 +215,14 @@ SCENEGRAPH* S3D_CACHE::load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCach
if( full3Dpath.empty() )
{
// the model cannot be found; we cannot proceed
wxLogTrace( MASK_3D_CACHE, " * [3D model] could not find model '%s'\n",
aModelFile.GetData() );
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [3D model] could not find model '%s'\n",
__FILE__, __FUNCTION__, __LINE__, aModelFile );
return NULL;
}
// check cache if file is already loaded
wxCriticalSectionLocker lock( lock3D_cache );
std::map< wxString, S3D_CACHE_ENTRY*, S3D::rsort_wxString >::iterator mi;
std::map< wxString, S3D_CACHE_ENTRY*, rsort_wxString >::iterator mi;
mi = m_CacheMap.find( full3Dpath );
if( mi != m_CacheMap.end() )
@@ -294,15 +299,8 @@ SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY**
if( m_CacheMap.insert( std::pair< wxString, S3D_CACHE_ENTRY* >
( aFileName, ep ) ).second == false )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] duplicate entry in map file; key = '";
ostr << aFileName.ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] duplicate entry in map file; key = '%s'",
__FILE__, __FUNCTION__, __LINE__, aFileName );
m_CacheList.pop_back();
delete ep;
@@ -325,15 +323,8 @@ SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY**
if( m_CacheMap.insert( std::pair< wxString, S3D_CACHE_ENTRY* >
( aFileName, ep ) ).second == false )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] duplicate entry in map file; key = '";
ostr << aFileName.ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] duplicate entry in map file; key = '%s'",
__FILE__, __FUNCTION__, __LINE__, aFileName );
m_CacheList.pop_back();
delete ep;
@@ -364,33 +355,21 @@ bool S3D_CACHE::getSHA1( const wxString& aFileName, unsigned char* aSHA1Sum )
{
if( aFileName.empty() )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] empty filename";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] empty filename",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
if( NULL == aSHA1Sum )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] NULL pointer passed for aMD5Sum";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s\n * [BUG] NULL pointer passed for aMD5Sum",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
#ifdef WIN32
#ifdef _WIN32
FILE* fp = _wfopen( aFileName.wc_str(), L"rb" );
#else
FILE* fp = fopen( aFileName.ToUTF8(), "rb" );
@@ -434,17 +413,16 @@ bool S3D_CACHE::loadCacheData( S3D_CACHE_ENTRY* aCacheItem )
if( bname.empty() )
{
#ifdef DEBUG
wxLogTrace( MASK_3D_CACHE, " * [3D model] cannot load cached model; no file hash available\n" );
#endif
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; no file hash available" );
return false;
}
if( m_CacheDir.empty() )
{
wxString errmsg = "cannot load cached model; config directory unknown";
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s\n", errmsg.GetData() );
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; config directory unknown" );
return false;
}
@@ -454,8 +432,7 @@ bool S3D_CACHE::loadCacheData( S3D_CACHE_ENTRY* aCacheItem )
if( !wxFileName::FileExists( fname ) )
{
wxString errmsg = "cannot open file";
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s '%s'\n",
errmsg.GetData(), fname.GetData() );
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s '%s'", errmsg.GetData(), fname.GetData() );
return false;
}
@@ -475,28 +452,16 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem )
{
if( NULL == aCacheItem )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * NULL passed for aCacheItem";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * NULL passed for aCacheItem",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
if( NULL == aCacheItem->sceneData )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * aCacheItem has no valid scene data";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * aCacheItem has no valid scene data",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
@@ -505,17 +470,16 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem )
if( bname.empty() )
{
#ifdef DEBUG
wxLogTrace( MASK_3D_CACHE, " * [3D model] cannot load cached model; no file hash available\n" );
#endif
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; no file hash available" );
return false;
}
if( m_CacheDir.empty() )
{
wxString errmsg = "cannot load cached model; config directory unknown";
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s\n", errmsg.GetData() );
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; config directory unknown" );
return false;
}
@@ -526,9 +490,8 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem )
{
if( !wxFileName::FileExists( fname ) )
{
wxString errmsg = _( "path exists but is not a regular file" );
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s '%s'\n", errmsg.GetData(),
fname.ToUTF8() );
wxLogTrace( MASK_3D_CACHE, " * [3D model] path exists but is not a regular file '%s'",
fname );
return false;
}
@@ -559,14 +522,9 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
if( !cfgdir.DirExists() )
{
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "failed to create 3D configuration directory" );
ostr << " * " << errmsg.ToUTF8() << "\n";
errmsg = _( "config directory" );
ostr << " * " << errmsg.ToUTF8() << " '";
ostr << cfgdir.GetPath().ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
wxLogTrace( MASK_3D_CACHE,
"%s:%s:%d\n * failed to create 3D configuration directory '%s'",
__FILE__, __FUNCTION__, __LINE__, cfgdir.GetPath() );
return false;
}
@@ -577,15 +535,10 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
// inform the file resolver of the config directory
if( !m_FNResolver->Set3DConfigDir( m_ConfigDir ) )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * could not set 3D Config Directory on filename resolver\n";
ostr << " * config directory: '" << m_ConfigDir.ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE,
"%s:%s:%d\n * could not set 3D Config Directory on filename resolver\n"
" * config directory: '%s'",
__FILE__, __FUNCTION__, __LINE__, m_ConfigDir );
}
// 3D cache data must go to a user's cache directory;
@@ -597,20 +550,20 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
// 3. MSWin: AppData\Local\kicad\3d
wxString cacheDir;
#if defined(_WIN32)
#if defined(_WIN32)
wxStandardPaths::Get().UseAppInfo( wxStandardPaths::AppInfo_None );
cacheDir = wxStandardPaths::Get().GetUserLocalDataDir();
cacheDir.append( "\\kicad\\3d" );
#elif defined(__APPLE)
#elif defined(__APPLE)
cacheDir = "${HOME}/Library/Caches/kicad/3d";
#else // assume Linux
#else // assume Linux
cacheDir = ExpandEnvVarSubstitutions( "${XDG_CACHE_HOME}" );
if( cacheDir.empty() || cacheDir == "${XDG_CACHE_HOME}" )
cacheDir = "${HOME}/.cache";
cacheDir.append( "/kicad/3d" );
#endif
#endif
cacheDir = ExpandEnvVarSubstitutions( cacheDir );
cfgdir.Assign( cacheDir, "" );
@@ -621,14 +574,8 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
if( !cfgdir.DirExists() )
{
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = "failed to create 3D cache directory";
ostr << " * " << errmsg.ToUTF8() << "\n";
errmsg = "cache directory";
ostr << " * " << errmsg.ToUTF8() << " '";
ostr << cfgdir.GetPath().ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * failed to create 3D cache directory '%s'",
__FILE__, __FUNCTION__, __LINE__, cfgdir.GetPath() );
return false;
}
@@ -681,11 +628,8 @@ wxString S3D_CACHE::Get3DConfigDir( bool createDefault )
if( !cfgpath.DirExists() )
{
std::ostringstream ostr;
wxString errmsg = "failed to create 3D configuration directory";
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * " << errmsg.ToUTF8();
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * failed to create 3D configuration directory '%s'",
__FILE__, __FUNCTION__, __LINE__, cfgpath.GetPath() );
return wxT( "" );
}
@@ -736,7 +680,7 @@ wxString S3D_CACHE::GetProjectDir( void )
}
S3D_FILENAME_RESOLVER* S3D_CACHE::GetResolver( void )
FILENAME_RESOLVER* S3D_CACHE::GetResolver( void )
{
return m_FNResolver;
}
@@ -788,14 +732,9 @@ S3DMODEL* S3D_CACHE::GetModel( const wxString& aModelFileName )
if( !cp )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] model loaded with no associated S3D_CACHE_ENTRY";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE,
"%s:%s:%d\n * [BUG] model loaded with no associated S3D_CACHE_ENTRY",
__FILE__, __FUNCTION__, __LINE__ );
return NULL;
}
@@ -818,7 +757,7 @@ wxString S3D_CACHE::GetModelHash( const wxString& aModelFileName )
return wxEmptyString;
// check cache if file is already loaded
std::map< wxString, S3D_CACHE_ENTRY*, S3D::rsort_wxString >::iterator mi;
std::map< wxString, S3D_CACHE_ENTRY*, rsort_wxString >::iterator mi;
mi = m_CacheMap.find( full3Dpath );
if( mi != m_CacheMap.end() )
+6 -6
View File
@@ -32,8 +32,8 @@
#include <list>
#include <map>
#include <wx/string.h>
#include "str_rsort.h"
#include "3d_filename_resolver.h"
#include "kicad_string.h"
#include "filename_resolver.h"
#include "3d_info.h"
#include "plugins/3dapi/c3dmodel.h"
@@ -42,7 +42,7 @@ class PGM_BASE;
class S3D_CACHE;
class S3D_CACHE_ENTRY;
class SCENEGRAPH;
class S3D_FILENAME_RESOLVER;
class FILENAME_RESOLVER;
class S3D_PLUGIN_MANAGER;
@@ -53,10 +53,10 @@ private:
std::list< S3D_CACHE_ENTRY* > m_CacheList;
/// mapping of file names to cache names and data
std::map< wxString, S3D_CACHE_ENTRY*, S3D::rsort_wxString > m_CacheMap;
std::map< wxString, S3D_CACHE_ENTRY*, rsort_wxString > m_CacheMap;
/// object to resolve file names
S3D_FILENAME_RESOLVER* m_FNResolver;
FILENAME_RESOLVER* m_FNResolver;
/// plugin manager
S3D_PLUGIN_MANAGER* m_Plugins;
@@ -167,7 +167,7 @@ public:
*/
SCENEGRAPH* Load( const wxString& aModelFile );
S3D_FILENAME_RESOLVER* GetResolver( void );
FILENAME_RESOLVER* GetResolver( void );
/**
* Function GetFileFilters
+2
View File
@@ -30,6 +30,8 @@
class CACHE_WRAPPER : public S3D_CACHE, public PROJECT::_ELEM
{
public:
KICAD_T Type() override { return CACHE_WRAPPER_T; }
CACHE_WRAPPER();
virtual ~CACHE_WRAPPER();
};
+4 -8
View File
@@ -149,14 +149,10 @@ void S3D_PLUGIN_MANAGER::loadPlugins( void )
#endif
#ifndef _WIN32
// multiarch friendly determination of the plugin directory: the executable dir
// is first determined via wxStandardPaths::Get().GetExecutablePath() and then
// the CMAKE_INSTALL_LIBDIR path is appended relative to the executable dir.
// PLUGINDIR = CMAKE_INSTALL_FULL_LIBDIR path is the absolute path
// corresponding to the install path used for constructing KICAD_USER_PLUGIN
fn.Assign( wxStandardPaths::Get().GetExecutablePath() );
fn.RemoveLastDir();
wxString tfname = fn.GetPathWithSep();
tfname.Append( wxString::FromUTF8Unchecked( PLUGINDIR ) );
wxString tfname = wxString::FromUTF8Unchecked( PLUGINDIR );
fn.Assign( tfname, "");
fn.AppendDir( "kicad" );
#else
@@ -490,7 +486,7 @@ SCENEGRAPH* S3D_PLUGIN_MANAGER::Load3DModel( const wxString& aFileName, std::str
wxFileName raw( aFileName );
wxString ext = raw.GetExt();
#ifdef WIN32
#ifdef _WIN32
// note: plugins only have a lowercase filter within Windows; including an uppercase
// filter will result in duplicate file entries and should be avoided.
ext.LowerCase();
@@ -27,7 +27,7 @@
#include "3d_cache.h"
#include "plugins/3dapi/ifsg_api.h"
#include "3d_cache_dialogs.h"
#include "dlg_3d_pathconfig.h"
#include "dialog_configure_paths.h"
#include "dlg_select_3dmodel.h"
@@ -51,16 +51,9 @@ bool S3D::Select3DModel( wxWindow* aParent, S3D_CACHE* aCache,
}
bool S3D::Configure3DPaths( wxWindow* aParent, S3D_FILENAME_RESOLVER* aResolver )
bool S3D::Configure3DPaths( wxWindow* aParent, FILENAME_RESOLVER* aResolver )
{
DLG_3D_PATH_CONFIG* dp = new DLG_3D_PATH_CONFIG( aParent, aResolver );
DIALOG_CONFIGURE_PATHS dlg( aParent, aResolver );
if( wxID_OK == dp->ShowModal() )
{
delete dp;
return true;
}
delete dp;
return false;
return( dlg.ShowModal() == wxID_OK );
}
@@ -27,14 +27,14 @@
#include <wx/window.h>
class S3D_CACHE;
class S3D_FILENAME_RESOLVER;
class FILENAME_RESOLVER;
namespace S3D
{
bool Select3DModel( wxWindow* aParent, S3D_CACHE* aCache,
wxString& prevModelSelectDir, int& prevModelWildcard, MODULE_3D_SETTINGS* aModel );
bool Configure3DPaths( wxWindow* aParent, S3D_FILENAME_RESOLVER* aResolver );
bool Configure3DPaths( wxWindow* aParent, FILENAME_RESOLVER* aResolver );
}
#endif // CACHE_DIALOGS_3D_H
@@ -1,384 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <wx/msgdlg.h>
#include <pgm_base.h>
#include <html_messagebox.h>
#include "3d_cache/dialogs/dlg_3d_pathconfig.h"
#include "3d_cache/3d_filename_resolver.h"
DLG_3D_PATH_CONFIG::DLG_3D_PATH_CONFIG( wxWindow* aParent, S3D_FILENAME_RESOLVER* aResolver ) :
DLG_3D_PATH_CONFIG_BASE( aParent ), m_resolver( aResolver )
{
initDialog();
GetSizer()->SetSizeHints( this );
Centre();
return;
}
void DLG_3D_PATH_CONFIG::initDialog()
{
m_Aliases->EnableEditing( true );
// Gives a min width to each column, when the user drags a column
m_Aliases->SetColMinimalWidth( 0, 80 );
m_Aliases->SetColMinimalWidth( 1, 300 );
m_Aliases->SetColMinimalWidth( 2, 120 );
m_Aliases->SetColMinimalAcceptableWidth( 80 );
// Set column sizes to this min value
m_Aliases->SetColSize( 0, 80 );
m_Aliases->SetColSize( 1, 300 );
m_Aliases->SetColSize( 2, 120 );
m_EnvVars->SetColMinimalWidth( 0, 80 );
m_EnvVars->SetColMinimalWidth( 1, 300 );
m_EnvVars->SetColMinimalAcceptableWidth( 80 );
m_EnvVars->SetColSize( 0, 80 );
m_EnvVars->SetColSize( 1, 300 );
if( m_resolver )
{
updateEnvVars();
// prohibit these characters in the alias names: []{}()%~<>"='`;:.,&?/\|$
m_aliasValidator.SetStyle( wxFILTER_EXCLUDE_CHAR_LIST );
m_aliasValidator.SetCharExcludes( wxT( "{}[]()%~<>\"='`;:.,&?/\\|$" ) );
const std::list< S3D_ALIAS >* rpaths = m_resolver->GetPaths();
std::list< S3D_ALIAS >::const_iterator rI = rpaths->begin();
std::list< S3D_ALIAS >::const_iterator rE = rpaths->end();
size_t listsize = rpaths->size();
size_t listidx = 0;
while( rI != rE && ( (*rI).m_alias.StartsWith( "${" )
|| (*rI).m_alias.StartsWith( "$(" ) ) )
{
++listidx;
++rI;
}
if( listidx < listsize )
m_curdir = (*rI).m_pathexp;
else
return;
listsize = listsize - listidx - m_Aliases->GetNumberRows();
// note: if the list allocation fails we have bigger problems
// and there is no point in trying to notify the user here
if( listsize > 0 && !m_Aliases->InsertRows( 0, listsize ) )
return;
int nitems = 0;
wxGridCellTextEditor* pEdAlias;
while( rI != rE )
{
m_Aliases->SetCellValue( nitems, 0, rI->m_alias );
if( 0 == nitems )
{
m_Aliases->SetCellEditor( nitems, 0, new wxGridCellTextEditor );
pEdAlias = (wxGridCellTextEditor*) m_Aliases->GetCellEditor( nitems, 0 );
pEdAlias->SetValidator( m_aliasValidator );
pEdAlias->DecRef();
}
else
{
pEdAlias->IncRef();
m_Aliases->SetCellEditor( nitems, 0, pEdAlias );
}
m_Aliases->SetCellValue( nitems, 1, rI->m_pathvar );
m_Aliases->SetCellValue( nitems++, 2, rI->m_description );
// TODO: implement a wxGridCellEditor which invokes a wxDirDialog
++rI;
}
m_Aliases->AutoSize();
}
}
bool DLG_3D_PATH_CONFIG::TransferDataFromWindow()
{
if( NULL == m_resolver )
{
wxMessageBox( _( "[BUG] No valid resolver; data will not be updated" ),
_( "Update 3D search path list" ) );
return false;
}
std::vector<S3D_ALIAS> alist;
S3D_ALIAS alias;
int ni = m_Aliases->GetNumberRows();
if( ni <= 0 )
{
// note: UI usability: we should ask a user if they're sure they
// want to clear the entire path list
m_resolver->UpdatePathList( alist );
return true;
}
for( int i = 0; i < ni; ++i )
{
alias.m_alias = m_Aliases->GetCellValue( i, 0 );
alias.m_pathvar = m_Aliases->GetCellValue( i, 1 );
alias.m_description = m_Aliases->GetCellValue( i, 2 );
if( !alias.m_alias.empty() && !alias.m_pathvar.empty() )
alist.push_back( alias );
}
return m_resolver->UpdatePathList( alist );
}
void DLG_3D_PATH_CONFIG::OnAddAlias( wxCommandEvent& event )
{
int ni = m_Aliases->GetNumberRows();
if( m_Aliases->InsertRows( ni, 1 ) )
{
wxGridCellTextEditor* pEdAlias;
pEdAlias = (wxGridCellTextEditor*) m_Aliases->GetCellEditor( 0, 0 );
m_Aliases->SetCellEditor( ni, 0, pEdAlias );
m_Aliases->SelectRow( ni, false );
m_Aliases->AutoSize();
Fit();
// TODO: set the editors on any newly created rows
}
event.Skip();
}
void DLG_3D_PATH_CONFIG::OnDelAlias( wxCommandEvent& event )
{
wxArrayInt sel = m_Aliases->GetSelectedRows();
if( sel.empty() )
{
wxMessageBox( _( "No entry selected" ), _( "Delete alias entry" ) );
return;
}
if( sel.size() > 1 )
{
wxMessageBox( _( "Multiple entries selected; please\nselect only one entry" ),
_( "Delete alias entry" ) );
return;
}
if( m_Aliases->GetNumberRows() > 1 )
{
int ni = sel.front();
m_Aliases->DeleteRows( ni, 1 );
if( ni >= m_Aliases->GetNumberRows() )
ni = m_Aliases->GetNumberRows() - 1;
m_Aliases->SelectRow( ni, false );
m_Aliases->AutoSize();
Fit();
}
else
{
m_Aliases->SetCellValue( 0, 0, wxEmptyString );
m_Aliases->SetCellValue( 0, 1, wxEmptyString );
m_Aliases->SetCellValue( 0, 2, wxEmptyString );
}
event.Skip();
}
void DLG_3D_PATH_CONFIG::OnAliasMoveUp( wxCommandEvent& event )
{
wxArrayInt sel = m_Aliases->GetSelectedRows();
if( sel.empty() )
{
wxMessageBox( _( "No entry selected" ), _( "Move alias up" ) );
return;
}
if( sel.size() > 1 )
{
wxMessageBox( _( "Multiple entries selected; please\nselect only one entry" ),
_( "Move alias up" ) );
return;
}
int ci = sel.front();
if( ci > 0 )
{
S3D_ALIAS al0;
al0.m_alias = m_Aliases->GetCellValue( ci, 0 );
al0.m_pathvar = m_Aliases->GetCellValue( ci, 1 );
al0.m_description = m_Aliases->GetCellValue( ci, 2 );
int ni = ci - 1;
m_Aliases->SetCellValue( ci, 0, m_Aliases->GetCellValue( ni, 0 ) );
m_Aliases->SetCellValue( ci, 1, m_Aliases->GetCellValue( ni, 1 ) );
m_Aliases->SetCellValue( ci, 2, m_Aliases->GetCellValue( ni, 2 ) );
m_Aliases->SetCellValue( ni, 0, al0.m_alias );
m_Aliases->SetCellValue( ni, 1, al0.m_pathvar );
m_Aliases->SetCellValue( ni, 2, al0.m_description );
m_Aliases->SelectRow( ni, false );
}
event.Skip();
}
void DLG_3D_PATH_CONFIG::OnAliasMoveDown( wxCommandEvent& event )
{
wxArrayInt sel = m_Aliases->GetSelectedRows();
if( sel.empty() )
{
wxMessageBox( _( "No entry selected" ), _( "Move alias down" ) );
return;
}
if( sel.size() > 1 )
{
wxMessageBox( _( "Multiple entries selected; please\nselect only one entry" ),
_( "Move alias down" ) );
return;
}
int ni = m_Aliases->GetNumberRows() - 1;
int ci = sel.front();
if( ci < ni )
{
S3D_ALIAS al0;
al0.m_alias = m_Aliases->GetCellValue( ci, 0 );
al0.m_pathvar = m_Aliases->GetCellValue( ci, 1 );
al0.m_description = m_Aliases->GetCellValue( ci, 2 );
ni = ci + 1;
m_Aliases->SetCellValue( ci, 0, m_Aliases->GetCellValue( ni, 0 ) );
m_Aliases->SetCellValue( ci, 1, m_Aliases->GetCellValue( ni, 1 ) );
m_Aliases->SetCellValue( ci, 2, m_Aliases->GetCellValue( ni, 2 ) );
m_Aliases->SetCellValue( ni, 0, al0.m_alias );
m_Aliases->SetCellValue( ni, 1, al0.m_pathvar );
m_Aliases->SetCellValue( ni, 2, al0.m_description );
m_Aliases->SelectRow( ni, false );
}
event.Skip();
}
void DLG_3D_PATH_CONFIG::OnConfigEnvVar( wxCommandEvent& event )
{
Pgm().ConfigurePaths( this );
updateEnvVars();
event.Skip();
}
void DLG_3D_PATH_CONFIG::updateEnvVars( void )
{
if( !m_resolver )
return;
std::list< wxString > epaths;
m_resolver->GetKicadPaths( epaths );
size_t nitems = epaths.size();
size_t nrows = m_EnvVars->GetNumberRows();
bool resize = nrows != nitems; // true after adding/removing env vars
if( nrows > nitems )
{
size_t ni = nrows - nitems;
m_EnvVars->DeleteRows( 0, ni );
}
else if( nrows < nitems )
{
size_t ni = nitems - nrows;
m_EnvVars->InsertRows( 0, ni );
}
int j = 0;
for( const auto& i : epaths )
{
wxString val = ExpandEnvVarSubstitutions( i );
m_EnvVars->SetCellValue( j, 0, i );
m_EnvVars->SetCellValue( j, 1, val );
m_EnvVars->SetReadOnly( j, 0, true );
m_EnvVars->SetReadOnly( j, 1, true );
wxGridCellAttr* ap = m_EnvVars->GetOrCreateCellAttr( j, 0 );
ap->SetReadOnly( true );
ap->SetBackgroundColour( *wxLIGHT_GREY );
m_EnvVars->SetRowAttr( j, ap );
++j;
}
m_EnvVars->AutoSize();
// Resizing the full dialog is sometimes needed for a clean display
// i.e. when adding/removing Kicad environment variables
if( resize )
GetSizer()->SetSizeHints( this );
return;
}
void DLG_3D_PATH_CONFIG::OnHelp( wxCommandEvent& event )
{
wxString msg = _( "Enter the name and path for each 3D alias variable.<br>KiCad "
"environment variables and their values are shown for "
"reference only and cannot be edited." );
msg << "<br><br><b>";
msg << _( "Alias names may not contain any of the characters " );
msg << "{}[]()%~<>\"='`;:.,&?/\\|$";
msg << "</b>";
HTML_MESSAGE_BOX dlg( GetParent(), _( "Environment Variable Help" ) );
dlg.AddHTML_Text( msg );
dlg.ShowModal();
event.Skip();
}
@@ -1,162 +0,0 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 22 2017)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dlg_3d_pathconfig_base.h"
///////////////////////////////////////////////////////////////////////////
DLG_3D_PATH_CONFIG_BASE::DLG_3D_PATH_CONFIG_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizer5;
bSizer5 = new wxBoxSizer( wxVERTICAL );
m_EnvVars = new wxGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
// Grid
m_EnvVars->CreateGrid( 1, 2 );
m_EnvVars->EnableEditing( true );
m_EnvVars->EnableGridLines( true );
m_EnvVars->EnableDragGridSize( false );
m_EnvVars->SetMargins( 0, 0 );
// Columns
m_EnvVars->SetColSize( 0, 150 );
m_EnvVars->SetColSize( 1, 300 );
m_EnvVars->EnableDragColMove( false );
m_EnvVars->EnableDragColSize( true );
m_EnvVars->SetColLabelSize( 30 );
m_EnvVars->SetColLabelValue( 0, _("Name") );
m_EnvVars->SetColLabelValue( 1, _("Path") );
m_EnvVars->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
// Rows
m_EnvVars->EnableDragRowSize( true );
m_EnvVars->SetRowLabelSize( 80 );
m_EnvVars->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
// Label Appearance
// Cell Defaults
m_EnvVars->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
m_EnvVars->SetMinSize( wxSize( 250,100 ) );
bSizer5->Add( m_EnvVars, 1, wxALL|wxEXPAND, 5 );
m_btnEnvCfg = new wxButton( this, wxID_ANY, _("Configure Environment Variables"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer5->Add( m_btnEnvCfg, 0, wxALIGN_CENTER|wxALL, 5 );
bSizerMain->Add( bSizer5, 0, wxEXPAND, 5 );
m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizerMain->Add( m_staticline2, 0, wxEXPAND | wxALL, 5 );
wxBoxSizer* bSizerGrid;
bSizerGrid = new wxBoxSizer( wxHORIZONTAL );
m_Aliases = new wxGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
// Grid
m_Aliases->CreateGrid( 1, 3 );
m_Aliases->EnableEditing( true );
m_Aliases->EnableGridLines( true );
m_Aliases->EnableDragGridSize( false );
m_Aliases->SetMargins( 0, 0 );
// Columns
m_Aliases->SetColSize( 0, 80 );
m_Aliases->SetColSize( 1, 300 );
m_Aliases->SetColSize( 2, 120 );
m_Aliases->EnableDragColMove( false );
m_Aliases->EnableDragColSize( true );
m_Aliases->SetColLabelSize( 30 );
m_Aliases->SetColLabelValue( 0, _("Alias") );
m_Aliases->SetColLabelValue( 1, _("Path") );
m_Aliases->SetColLabelValue( 2, _("Description") );
m_Aliases->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
// Rows
m_Aliases->AutoSizeRows();
m_Aliases->EnableDragRowSize( false );
m_Aliases->SetRowLabelSize( 80 );
m_Aliases->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
// Label Appearance
// Cell Defaults
m_Aliases->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
m_Aliases->SetMinSize( wxSize( -1,150 ) );
bSizerGrid->Add( m_Aliases, 1, wxALL|wxEXPAND, 5 );
bSizerMain->Add( bSizerGrid, 1, wxEXPAND, 5 );
wxBoxSizer* bSizerButtons;
bSizerButtons = new wxBoxSizer( wxHORIZONTAL );
m_btnAddAlias = new wxButton( this, wxID_ANY, _("Add Alias"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerButtons->Add( m_btnAddAlias, 0, wxALL, 5 );
m_btnDelAlias = new wxButton( this, wxID_ANY, _("Remove Alias"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerButtons->Add( m_btnDelAlias, 0, wxALL, 5 );
m_btnMoveUp = new wxButton( this, wxID_ANY, _("Move Up"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerButtons->Add( m_btnMoveUp, 0, wxALL, 5 );
m_btnMoveDown = new wxButton( this, wxID_ANY, _("Move Down"), wxDefaultPosition, wxDefaultSize, 0 );
bSizerButtons->Add( m_btnMoveDown, 0, wxALL, 5 );
bSizerMain->Add( bSizerButtons, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizerMain->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
m_sdbSizer2 = new wxStdDialogButtonSizer();
m_sdbSizer2OK = new wxButton( this, wxID_OK );
m_sdbSizer2->AddButton( m_sdbSizer2OK );
m_sdbSizer2Cancel = new wxButton( this, wxID_CANCEL );
m_sdbSizer2->AddButton( m_sdbSizer2Cancel );
m_sdbSizer2Help = new wxButton( this, wxID_HELP );
m_sdbSizer2->AddButton( m_sdbSizer2Help );
m_sdbSizer2->Realize();
bSizerMain->Add( m_sdbSizer2, 0, wxALL|wxEXPAND, 5 );
this->SetSizer( bSizerMain );
this->Layout();
bSizerMain->Fit( this );
this->Centre( wxBOTH );
// Connect Events
m_btnEnvCfg->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnConfigEnvVar ), NULL, this );
m_btnAddAlias->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnAddAlias ), NULL, this );
m_btnDelAlias->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnDelAlias ), NULL, this );
m_btnMoveUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnAliasMoveUp ), NULL, this );
m_btnMoveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnAliasMoveDown ), NULL, this );
m_sdbSizer2Help->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnHelp ), NULL, this );
}
DLG_3D_PATH_CONFIG_BASE::~DLG_3D_PATH_CONFIG_BASE()
{
// Disconnect Events
m_btnEnvCfg->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnConfigEnvVar ), NULL, this );
m_btnAddAlias->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnAddAlias ), NULL, this );
m_btnDelAlias->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnDelAlias ), NULL, this );
m_btnMoveUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnAliasMoveUp ), NULL, this );
m_btnMoveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnAliasMoveDown ), NULL, this );
m_sdbSizer2Help->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DLG_3D_PATH_CONFIG_BASE::OnHelp ), NULL, this );
}
File diff suppressed because it is too large Load Diff
@@ -1,67 +0,0 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov 22 2017)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DLG_3D_PATHCONFIG_BASE_H__
#define __DLG_3D_PATHCONFIG_BASE_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
#include "dialog_shim.h"
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/string.h>
#include <wx/font.h>
#include <wx/grid.h>
#include <wx/gdicmn.h>
#include <wx/button.h>
#include <wx/sizer.h>
#include <wx/statline.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DLG_3D_PATH_CONFIG_BASE
///////////////////////////////////////////////////////////////////////////////
class DLG_3D_PATH_CONFIG_BASE : public DIALOG_SHIM
{
private:
protected:
wxGrid* m_EnvVars;
wxButton* m_btnEnvCfg;
wxStaticLine* m_staticline2;
wxGrid* m_Aliases;
wxButton* m_btnAddAlias;
wxButton* m_btnDelAlias;
wxButton* m_btnMoveUp;
wxButton* m_btnMoveDown;
wxStaticLine* m_staticline1;
wxStdDialogButtonSizer* m_sdbSizer2;
wxButton* m_sdbSizer2OK;
wxButton* m_sdbSizer2Cancel;
wxButton* m_sdbSizer2Help;
// Virtual event handlers, overide them in your derived class
virtual void OnConfigEnvVar( wxCommandEvent& event ) { event.Skip(); }
virtual void OnAddAlias( wxCommandEvent& event ) { event.Skip(); }
virtual void OnDelAlias( wxCommandEvent& event ) { event.Skip(); }
virtual void OnAliasMoveUp( wxCommandEvent& event ) { event.Skip(); }
virtual void OnAliasMoveDown( wxCommandEvent& event ) { event.Skip(); }
virtual void OnHelp( wxCommandEvent& event ) { event.Skip(); }
public:
DLG_3D_PATH_CONFIG_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("3D Search Path Configuration"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DLG_3D_PATH_CONFIG_BASE();
};
#endif //__DLG_3D_PATHCONFIG_BASE_H__
@@ -3,7 +3,7 @@
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -39,7 +39,7 @@
#define ID_CFG_PATHS ( ID_SET_DIR + 1 )
wxBEGIN_EVENT_TABLE( DLG_SELECT_3DMODEL, wxDialog )
wxBEGIN_EVENT_TABLE( DLG_SELECT_3DMODEL, DIALOG_SHIM )
EVT_DIRCTRL_SELECTIONCHANGED( ID_FILE_TREE, DLG_SELECT_3DMODEL::OnSelectionChanged )
EVT_DIRCTRL_FILEACTIVATED( ID_FILE_TREE, DLG_SELECT_3DMODEL::OnFileActivated )
EVT_CHOICE( ID_SET_DIR, DLG_SELECT_3DMODEL::SetRootDir )
@@ -49,9 +49,9 @@ wxEND_EVENT_TABLE()
DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheManager,
MODULE_3D_SETTINGS* aModelItem, wxString& prevModelSelectDir, int& prevModelWildcard ) :
wxDialog( aParent, wxID_ANY, _( "Select 3D Model" ), wxDefaultPosition,
wxSize( 500,200 ), wxCAPTION | wxRESIZE_BORDER | wxCLOSE_BOX
| wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU ),
DIALOG_SHIM( aParent, wxID_ANY, _( "Select 3D Model" ), wxDefaultPosition,
wxSize( 500,200 ), wxCAPTION | wxRESIZE_BORDER | wxCLOSE_BOX
| wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU ),
m_model( aModelItem ), m_cache( aCacheManager ), m_previousDir( prevModelSelectDir ),
m_previousFilterIndex( prevModelWildcard )
{
@@ -75,22 +75,20 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana
m_FileTree = new wxGenericDirCtrl( this, ID_FILE_TREE, prevModelSelectDir, wxDefaultPosition,
wxSize( 300,100 ), wxDIRCTRL_3D_INTERNAL | wxDIRCTRL_EDIT_LABELS
| wxDIRCTRL_SELECT_FIRST | wxDIRCTRL_SHOW_FILTERS|wxSUNKEN_BORDER, wxEmptyString, 0 );
| wxDIRCTRL_SELECT_FIRST | wxDIRCTRL_SHOW_FILTERS | wxBORDER_SIMPLE, wxEmptyString, 0 );
m_FileTree->ShowHidden( false );
m_FileTree->SetMinSize( wxSize( 300,100 ) );
m_FileTree->SetMinSize( wxSize( 300, 400 ) );
m_FileTree->SetLabel( wxT( "3D_MODEL_SELECTOR" ) );
bSizer2->Add( m_FileTree, 1, wxEXPAND | wxALL, 5 );
bSizer1->Add( bSizer2, 1, wxEXPAND, 5 );
bSizer1->Add( bSizer2, 3, wxEXPAND, 5 );
m_modelViewer = new C3D_MODEL_VIEWER( this,
COGL_ATT_LIST::GetAttributesList( true ),
m_cache );
m_modelViewer->SetMinSize( wxSize( 512, 384 ) );
m_modelViewer = new C3D_MODEL_VIEWER( this, COGL_ATT_LIST::GetAttributesList( true ), m_cache );
m_modelViewer->SetMinSize( wxSize( 500, 400 ) );
bSizer1->Add( m_modelViewer, 0, wxCENTER, 5 );
bSizer1->Add( m_modelViewer, 5, wxEXPAND | wxALL | wxCENTER, 5 );
// create the filter list
if( NULL != m_cache )
@@ -108,13 +106,12 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana
if( sL != eL )
filter.Append( wxT( "|" ) );
}
if( !filter.empty() )
m_FileTree->SetFilter( filter );
else
m_FileTree->SetFilter( wxT( "*.*" ) );
m_FileTree->SetFilter( wxFileSelectorDefaultWildcardStr );
if( prevModelWildcard >= 0 && prevModelWildcard < (int)fl->size() )
m_FileTree->SetFilterIndex( prevModelWildcard );
@@ -126,7 +123,7 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana
}
else
{
m_FileTree->SetFilter( wxT( "*.*" ) );
m_FileTree->SetFilter( wxFileSelectorDefaultWildcardStr );
prevModelWildcard = 0;
m_FileTree->SetFilterIndex( 0 );
}
@@ -137,7 +134,7 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana
dirChoices->SetMinSize( wxSize( 320, 12 ) );
wxStaticText* stDirChoice = new wxStaticText( this, -1, _( "Paths:" ) );
wxButton* cfgPaths = new wxButton( this, ID_CFG_PATHS, _( "Configure Path" ) );
wxButton* cfgPaths = new wxButton( this, ID_CFG_PATHS, _( "Configure Paths" ) );
hboxDirChoice->Add( stDirChoice, 0, wxALL | wxCENTER, 5 );
hboxDirChoice->Add( dirChoices, 1, wxEXPAND | wxALL, 5 );
hboxDirChoice->Add( cfgPaths, 0, wxALL, 5 );
@@ -243,9 +240,9 @@ void DLG_SELECT_3DMODEL::updateDirChoiceList( void )
if( NULL == m_FileTree || NULL == m_resolver || NULL == dirChoices )
return;
std::list< S3D_ALIAS > const* md = m_resolver->GetPaths();
std::list< S3D_ALIAS >::const_iterator sL = md->begin();
std::list< S3D_ALIAS >::const_iterator eL = md->end();
std::list< SEARCH_PATH > const* md = m_resolver->GetPaths();
std::list< SEARCH_PATH >::const_iterator sL = md->begin();
std::list< SEARCH_PATH >::const_iterator eL = md->end();
std::set< wxString > cl;
wxString prjDir;
@@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -38,17 +39,19 @@
#include <wx/sizer.h>
#include <wx/frame.h>
class MODULE_3D_SETTINGS;
class S3D_CACHE;
class S3D_FILENAME_RESOLVER;
class C3D_MODEL_VIEWER;
#include <dialog_shim.h>
class DLG_SELECT_3DMODEL : public wxDialog
class MODULE_3D_SETTINGS;
class S3D_CACHE;
class FILENAME_RESOLVER;
class C3D_MODEL_VIEWER;
class DLG_SELECT_3DMODEL : public DIALOG_SHIM
{
private:
MODULE_3D_SETTINGS* m_model; // data for the selected model
MODULE_3D_SETTINGS* m_model; // data for the selected model
S3D_CACHE* m_cache; // cache manager
S3D_FILENAME_RESOLVER* m_resolver; // 3D filename resolver
FILENAME_RESOLVER* m_resolver; // 3D filename resolver
wxString& m_previousDir;
int& m_previousFilterIndex;
+310 -353
View File
@@ -1,353 +1,310 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jan 12 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "panel_prev_3d_base.h"
///////////////////////////////////////////////////////////////////////////
PANEL_PREV_3D_BASE::PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
wxBoxSizer* bSizermain;
bSizermain = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizerLeft;
bSizerLeft = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizerScale;
bSizerScale = new wxBoxSizer( wxVERTICAL );
m_staticTextScale = new wxStaticText( this, wxID_ANY, _("Scale"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextScale->Wrap( -1 );
bSizerScale->Add( m_staticTextScale, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
wxFlexGridSizer* fgSizerScale;
fgSizerScale = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerScale->SetFlexibleDirection( wxBOTH );
fgSizerScale->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText1 = new wxStaticText( this, wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1->Wrap( -1 );
fgSizerScale->Add( m_staticText1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
xscale = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerScale->Add( xscale, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinXscale = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerScale->Add( m_spinXscale, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText2 = new wxStaticText( this, wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText2->Wrap( -1 );
fgSizerScale->Add( m_staticText2, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
yscale = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerScale->Add( yscale, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxTOP, 5 );
m_spinYscale = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerScale->Add( m_spinYscale, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText3 = new wxStaticText( this, wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3->Wrap( -1 );
fgSizerScale->Add( m_staticText3, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
zscale = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerScale->Add( zscale, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_spinZscale = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerScale->Add( m_spinZscale, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
bSizerScale->Add( fgSizerScale, 0, wxEXPAND|wxRIGHT|wxLEFT, 10 );
bSizerLeft->Add( bSizerScale, 0, wxEXPAND, 5 );
wxBoxSizer* bSizerRotation;
bSizerRotation = new wxBoxSizer( wxVERTICAL );
m_staticTextRot = new wxStaticText( this, wxID_ANY, _("Rotation (degrees)"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextRot->Wrap( -1 );
bSizerRotation->Add( m_staticTextRot, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
wxFlexGridSizer* fgSizerRotate;
fgSizerRotate = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerRotate->SetFlexibleDirection( wxBOTH );
fgSizerRotate->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText11 = new wxStaticText( this, wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText11->Wrap( -1 );
fgSizerRotate->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
xrot = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
#ifdef __WXGTK__
if ( !xrot->HasFlag( wxTE_MULTILINE ) )
{
xrot->SetMaxLength( 9 );
}
#else
xrot->SetMaxLength( 9 );
#endif
fgSizerRotate->Add( xrot, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinXrot = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerRotate->Add( m_spinXrot, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText21 = new wxStaticText( this, wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText21->Wrap( -1 );
fgSizerRotate->Add( m_staticText21, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
yrot = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
#ifdef __WXGTK__
if ( !yrot->HasFlag( wxTE_MULTILINE ) )
{
yrot->SetMaxLength( 9 );
}
#else
yrot->SetMaxLength( 9 );
#endif
fgSizerRotate->Add( yrot, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxTOP, 5 );
m_spinYrot = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerRotate->Add( m_spinYrot, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText31 = new wxStaticText( this, wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText31->Wrap( -1 );
fgSizerRotate->Add( m_staticText31, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
zrot = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
#ifdef __WXGTK__
if ( !zrot->HasFlag( wxTE_MULTILINE ) )
{
zrot->SetMaxLength( 9 );
}
#else
zrot->SetMaxLength( 9 );
#endif
fgSizerRotate->Add( zrot, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_spinZrot = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerRotate->Add( m_spinZrot, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
bSizerRotation->Add( fgSizerRotate, 0, wxEXPAND|wxRIGHT|wxLEFT, 10 );
bSizerLeft->Add( bSizerRotation, 0, wxEXPAND, 5 );
wxBoxSizer* bSizerOffset;
bSizerOffset = new wxBoxSizer( wxVERTICAL );
m_staticTextOffset = new wxStaticText( this, wxID_ANY, _("Offset"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextOffset->Wrap( -1 );
bSizerOffset->Add( m_staticTextOffset, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
wxFlexGridSizer* fgSizerOffset;
fgSizerOffset = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerOffset->SetFlexibleDirection( wxBOTH );
fgSizerOffset->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText12 = new wxStaticText( this, wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText12->Wrap( -1 );
fgSizerOffset->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
xoff = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerOffset->Add( xoff, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinXoffset = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerOffset->Add( m_spinXoffset, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText22 = new wxStaticText( this, wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText22->Wrap( -1 );
fgSizerOffset->Add( m_staticText22, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
yoff = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerOffset->Add( yoff, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
m_spinYoffset = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerOffset->Add( m_spinYoffset, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText32 = new wxStaticText( this, wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText32->Wrap( -1 );
fgSizerOffset->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
zoff = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerOffset->Add( zoff, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinZoffset = new wxSpinButton( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerOffset->Add( m_spinZoffset, 0, wxALIGN_CENTER_VERTICAL, 5 );
bSizerOffset->Add( fgSizerOffset, 0, wxEXPAND|wxLEFT|wxRIGHT, 10 );
bSizerLeft->Add( bSizerOffset, 1, wxEXPAND, 5 );
bSizermain->Add( bSizerLeft, 0, wxEXPAND, 5 );
wxBoxSizer* bSizerRight;
bSizerRight = new wxBoxSizer( wxVERTICAL );
m_SizerPanelView = new wxBoxSizer( wxVERTICAL );
bSizerRight->Add( m_SizerPanelView, 1, wxEXPAND, 5 );
wxBoxSizer* bSizer3DButtons;
bSizer3DButtons = new wxBoxSizer( wxHORIZONTAL );
bSizer3DButtons->Add( 0, 0, 1, wxEXPAND, 5 );
m_fgSizerButtons = new wxFlexGridSizer( 0, 4, 0, 0 );
m_fgSizerButtons->AddGrowableCol( 0 );
m_fgSizerButtons->AddGrowableCol( 1 );
m_fgSizerButtons->AddGrowableCol( 2 );
m_fgSizerButtons->AddGrowableCol( 3 );
m_fgSizerButtons->SetFlexibleDirection( wxBOTH );
m_fgSizerButtons->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_bpvISO = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_bpvISO->SetToolTip( _("Change to isometric perspective") );
m_fgSizerButtons->Add( m_bpvISO, 0, wxALL|wxEXPAND, 5 );
m_bpvLeft = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_fgSizerButtons->Add( m_bpvLeft, 0, wxALL|wxEXPAND, 5 );
m_bpvFront = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_fgSizerButtons->Add( m_bpvFront, 0, wxALL|wxEXPAND, 5 );
m_bpvTop = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_fgSizerButtons->Add( m_bpvTop, 0, wxALL|wxEXPAND, 5 );
m_bpUpdate = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_bpUpdate->SetToolTip( _("Reload board and 3D models") );
m_fgSizerButtons->Add( m_bpUpdate, 0, wxALL|wxEXPAND, 5 );
m_bpvRight = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_fgSizerButtons->Add( m_bpvRight, 0, wxALL|wxEXPAND, 5 );
m_bpvBack = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_fgSizerButtons->Add( m_bpvBack, 0, wxALL|wxEXPAND, 5 );
m_bpvBottom = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
m_fgSizerButtons->Add( m_bpvBottom, 0, wxALL|wxEXPAND, 5 );
bSizer3DButtons->Add( m_fgSizerButtons, 6, wxEXPAND, 5 );
bSizer3DButtons->Add( 0, 0, 1, wxEXPAND, 5 );
bSizerRight->Add( bSizer3DButtons, 0, wxALL|wxEXPAND, 5 );
bSizermain->Add( bSizerRight, 1, wxEXPAND, 5 );
this->SetSizer( bSizermain );
this->Layout();
bSizermain->Fit( this );
// Connect Events
xscale->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
xscale->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXscale->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinXscale->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
yscale->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
yscale->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYscale->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinYscale->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
zscale->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
zscale->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZscale->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinZscale->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
xrot->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
xrot->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXrot->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinXrot->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
yrot->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
yrot->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYrot->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinYrot->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
zrot->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
zrot->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZrot->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinZrot->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
xoff->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
xoff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXoffset->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinXoffset->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
yoff->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
yoff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYoffset->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinYoffset->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
zoff->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
zoff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZoffset->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinZoffset->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
m_bpvISO->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DISO ), NULL, this );
m_bpvLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DLeft ), NULL, this );
m_bpvFront->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DFront ), NULL, this );
m_bpvTop->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DTop ), NULL, this );
m_bpUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DUpdate ), NULL, this );
m_bpvRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DRight ), NULL, this );
m_bpvBack->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBack ), NULL, this );
m_bpvBottom->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBottom ), NULL, this );
}
PANEL_PREV_3D_BASE::~PANEL_PREV_3D_BASE()
{
// Disconnect Events
xscale->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
xscale->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXscale->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinXscale->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
yscale->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
yscale->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYscale->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinYscale->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
zscale->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
zscale->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZscale->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinZscale->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
xrot->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
xrot->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXrot->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinXrot->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
yrot->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
yrot->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYrot->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinYrot->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
zrot->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
zrot->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZrot->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinZrot->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
xoff->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
xoff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXoffset->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinXoffset->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
yoff->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
yoff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYoffset->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinYoffset->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
zoff->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
zoff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZoffset->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinZoffset->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
m_bpvISO->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DISO ), NULL, this );
m_bpvLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DLeft ), NULL, this );
m_bpvFront->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DFront ), NULL, this );
m_bpvTop->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DTop ), NULL, this );
m_bpUpdate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DUpdate ), NULL, this );
m_bpvRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DRight ), NULL, this );
m_bpvBack->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBack ), NULL, this );
m_bpvBottom->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBottom ), NULL, this );
}
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 5 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "panel_prev_3d_base.h"
///////////////////////////////////////////////////////////////////////////
PANEL_PREV_3D_BASE::PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style )
{
wxBoxSizer* bSizermain;
bSizermain = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizerLeft;
bSizerLeft = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizerScale;
sbSizerScale = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Scale") ), wxVERTICAL );
wxFlexGridSizer* fgSizerScale;
fgSizerScale = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerScale->SetFlexibleDirection( wxBOTH );
fgSizerScale->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText1 = new wxStaticText( sbSizerScale->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText1->Wrap( -1 );
fgSizerScale->Add( m_staticText1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
xscale = new wxTextCtrl( sbSizerScale->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerScale->Add( xscale, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinXscale = new wxSpinButton( sbSizerScale->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerScale->Add( m_spinXscale, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText2 = new wxStaticText( sbSizerScale->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText2->Wrap( -1 );
fgSizerScale->Add( m_staticText2, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
yscale = new wxTextCtrl( sbSizerScale->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerScale->Add( yscale, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinYscale = new wxSpinButton( sbSizerScale->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerScale->Add( m_spinYscale, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText3 = new wxStaticText( sbSizerScale->GetStaticBox(), wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3->Wrap( -1 );
fgSizerScale->Add( m_staticText3, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
zscale = new wxTextCtrl( sbSizerScale->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerScale->Add( zscale, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_spinZscale = new wxSpinButton( sbSizerScale->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerScale->Add( m_spinZscale, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
sbSizerScale->Add( fgSizerScale, 0, wxEXPAND|wxRIGHT|wxLEFT, 10 );
bSizerLeft->Add( sbSizerScale, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
wxStaticBoxSizer* sbSizerRotation;
sbSizerRotation = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Rotation") ), wxVERTICAL );
wxFlexGridSizer* fgSizerRotate;
fgSizerRotate = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerRotate->SetFlexibleDirection( wxBOTH );
fgSizerRotate->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText11 = new wxStaticText( sbSizerRotation->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText11->Wrap( -1 );
fgSizerRotate->Add( m_staticText11, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
xrot = new wxTextCtrl( sbSizerRotation->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRotate->Add( xrot, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinXrot = new wxSpinButton( sbSizerRotation->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerRotate->Add( m_spinXrot, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText21 = new wxStaticText( sbSizerRotation->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText21->Wrap( -1 );
fgSizerRotate->Add( m_staticText21, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
yrot = new wxTextCtrl( sbSizerRotation->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRotate->Add( yrot, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinYrot = new wxSpinButton( sbSizerRotation->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerRotate->Add( m_spinYrot, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText31 = new wxStaticText( sbSizerRotation->GetStaticBox(), wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText31->Wrap( -1 );
fgSizerRotate->Add( m_staticText31, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
zrot = new wxTextCtrl( sbSizerRotation->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRotate->Add( zrot, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_spinZrot = new wxSpinButton( sbSizerRotation->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerRotate->Add( m_spinZrot, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
sbSizerRotation->Add( fgSizerRotate, 0, wxEXPAND|wxRIGHT|wxLEFT, 10 );
bSizerLeft->Add( sbSizerRotation, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
wxStaticBoxSizer* sbSizerOffset;
sbSizerOffset = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Offset") ), wxVERTICAL );
wxFlexGridSizer* fgSizerOffset;
fgSizerOffset = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerOffset->SetFlexibleDirection( wxBOTH );
fgSizerOffset->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticText12 = new wxStaticText( sbSizerOffset->GetStaticBox(), wxID_ANY, _("X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText12->Wrap( -1 );
fgSizerOffset->Add( m_staticText12, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
xoff = new wxTextCtrl( sbSizerOffset->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerOffset->Add( xoff, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinXoffset = new wxSpinButton( sbSizerOffset->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerOffset->Add( m_spinXoffset, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText22 = new wxStaticText( sbSizerOffset->GetStaticBox(), wxID_ANY, _("Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText22->Wrap( -1 );
fgSizerOffset->Add( m_staticText22, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
yoff = new wxTextCtrl( sbSizerOffset->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerOffset->Add( yoff, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_spinYoffset = new wxSpinButton( sbSizerOffset->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerOffset->Add( m_spinYoffset, 0, wxALIGN_CENTER_VERTICAL, 5 );
m_staticText32 = new wxStaticText( sbSizerOffset->GetStaticBox(), wxID_ANY, _("Z:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText32->Wrap( -1 );
fgSizerOffset->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
zoff = new wxTextCtrl( sbSizerOffset->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerOffset->Add( zoff, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 );
m_spinZoffset = new wxSpinButton( sbSizerOffset->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS|wxSP_VERTICAL );
fgSizerOffset->Add( m_spinZoffset, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 );
sbSizerOffset->Add( fgSizerOffset, 0, wxEXPAND|wxLEFT|wxRIGHT, 10 );
bSizerLeft->Add( sbSizerOffset, 0, wxEXPAND|wxALL, 5 );
bSizermain->Add( bSizerLeft, 0, 0, 5 );
wxBoxSizer* bSizerRight;
bSizerRight = new wxBoxSizer( wxVERTICAL );
wxStaticText* staticPreviewLabel;
staticPreviewLabel = new wxStaticText( this, wxID_ANY, _("Preview"), wxDefaultPosition, wxDefaultSize, 0 );
staticPreviewLabel->Wrap( -1 );
staticPreviewLabel->SetFont( wxFont( 11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
bSizerRight->Add( staticPreviewLabel, 0, wxLEFT, 15 );
m_SizerPanelView = new wxBoxSizer( wxVERTICAL );
bSizerRight->Add( m_SizerPanelView, 1, wxEXPAND|wxBOTTOM, 8 );
bSizermain->Add( bSizerRight, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 4 );
wxBoxSizer* bSizer3DButtons;
bSizer3DButtons = new wxBoxSizer( wxVERTICAL );
bSizer3DButtons->Add( 0, 0, 0, wxEXPAND|wxTOP, 4 );
m_bpvISO = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
m_bpvISO->SetToolTip( _("Change to isometric perspective") );
bSizer3DButtons->Add( m_bpvISO, 0, wxTOP|wxBOTTOM, 5 );
m_bpvLeft = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
bSizer3DButtons->Add( m_bpvLeft, 0, 0, 5 );
m_bpvRight = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
bSizer3DButtons->Add( m_bpvRight, 0, 0, 5 );
m_bpvFront = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
bSizer3DButtons->Add( m_bpvFront, 0, 0, 5 );
m_bpvBack = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
bSizer3DButtons->Add( m_bpvBack, 0, 0, 5 );
m_bpvTop = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
bSizer3DButtons->Add( m_bpvTop, 0, 0, 5 );
m_bpvBottom = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
bSizer3DButtons->Add( m_bpvBottom, 0, 0, 5 );
m_bpUpdate = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 40,40 ), wxBU_AUTODRAW );
m_bpUpdate->SetToolTip( _("Reload board and 3D models") );
bSizer3DButtons->Add( m_bpUpdate, 0, wxTOP, 5 );
bSizermain->Add( bSizer3DButtons, 0, wxALL|wxEXPAND, 5 );
this->SetSizer( bSizermain );
this->Layout();
bSizermain->Fit( this );
// Connect Events
xscale->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
xscale->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXscale->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinXscale->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
yscale->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
yscale->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYscale->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinYscale->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
zscale->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
zscale->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZscale->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinZscale->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
xrot->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
xrot->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXrot->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinXrot->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
yrot->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
yrot->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYrot->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinYrot->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
zrot->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
zrot->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZrot->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinZrot->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
xoff->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
xoff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXoffset->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinXoffset->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
yoff->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
yoff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYoffset->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinYoffset->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
zoff->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
zoff->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZoffset->Connect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinZoffset->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
m_bpvISO->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DISO ), NULL, this );
m_bpvLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DLeft ), NULL, this );
m_bpvRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DRight ), NULL, this );
m_bpvFront->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DFront ), NULL, this );
m_bpvBack->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBack ), NULL, this );
m_bpvTop->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DTop ), NULL, this );
m_bpvBottom->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBottom ), NULL, this );
m_bpUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DUpdate ), NULL, this );
}
PANEL_PREV_3D_BASE::~PANEL_PREV_3D_BASE()
{
// Disconnect Events
xscale->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
xscale->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXscale->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinXscale->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
yscale->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
yscale->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYscale->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinYscale->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
zscale->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelScale ), NULL, this );
zscale->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZscale->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementScale ), NULL, this );
m_spinZscale->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementScale ), NULL, this );
xrot->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
xrot->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXrot->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinXrot->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
yrot->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
yrot->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYrot->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinYrot->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
zrot->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelRot ), NULL, this );
zrot->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZrot->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementRot ), NULL, this );
m_spinZrot->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementRot ), NULL, this );
xoff->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
xoff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinXoffset->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinXoffset->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
yoff->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
yoff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinYoffset->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinYoffset->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
zoff->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( PANEL_PREV_3D_BASE::onMouseWheelOffset ), NULL, this );
zoff->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( PANEL_PREV_3D_BASE::updateOrientation ), NULL, this );
m_spinZoffset->Disconnect( wxEVT_SCROLL_LINEDOWN, wxSpinEventHandler( PANEL_PREV_3D_BASE::onDecrementOffset ), NULL, this );
m_spinZoffset->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREV_3D_BASE::onIncrementOffset ), NULL, this );
m_bpvISO->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DISO ), NULL, this );
m_bpvLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DLeft ), NULL, this );
m_bpvRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DRight ), NULL, this );
m_bpvFront->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DFront ), NULL, this );
m_bpvBack->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBack ), NULL, this );
m_bpvTop->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DTop ), NULL, this );
m_bpvBottom->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DBottom ), NULL, this );
m_bpUpdate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREV_3D_BASE::View3DUpdate ), NULL, this );
}
File diff suppressed because it is too large Load Diff
+107 -110
View File
@@ -1,110 +1,107 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jan 12 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __PANEL_PREV_3D_BASE_H__
#define __PANEL_PREV_3D_BASE_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/textctrl.h>
#include <wx/spinbutt.h>
#include <wx/sizer.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/bmpbuttn.h>
#include <wx/button.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_PREV_3D_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_PREV_3D_BASE : public wxPanel
{
private:
protected:
wxStaticText* m_staticTextScale;
wxStaticText* m_staticText1;
wxTextCtrl* xscale;
wxSpinButton* m_spinXscale;
wxStaticText* m_staticText2;
wxTextCtrl* yscale;
wxSpinButton* m_spinYscale;
wxStaticText* m_staticText3;
wxTextCtrl* zscale;
wxSpinButton* m_spinZscale;
wxStaticText* m_staticTextRot;
wxStaticText* m_staticText11;
wxTextCtrl* xrot;
wxSpinButton* m_spinXrot;
wxStaticText* m_staticText21;
wxTextCtrl* yrot;
wxSpinButton* m_spinYrot;
wxStaticText* m_staticText31;
wxTextCtrl* zrot;
wxSpinButton* m_spinZrot;
wxStaticText* m_staticTextOffset;
wxStaticText* m_staticText12;
wxTextCtrl* xoff;
wxSpinButton* m_spinXoffset;
wxStaticText* m_staticText22;
wxSpinButton* m_spinYoffset;
wxStaticText* m_staticText32;
wxTextCtrl* zoff;
wxSpinButton* m_spinZoffset;
wxBoxSizer* m_SizerPanelView;
wxFlexGridSizer* m_fgSizerButtons;
wxBitmapButton* m_bpvISO;
wxBitmapButton* m_bpvLeft;
wxBitmapButton* m_bpvFront;
wxBitmapButton* m_bpvTop;
wxBitmapButton* m_bpUpdate;
wxBitmapButton* m_bpvRight;
wxBitmapButton* m_bpvBack;
wxBitmapButton* m_bpvBottom;
// Virtual event handlers, overide them in your derived class
virtual void onMouseWheelScale( wxMouseEvent& event ) { event.Skip(); }
virtual void updateOrientation( wxCommandEvent& event ) { event.Skip(); }
virtual void onDecrementScale( wxSpinEvent& event ) { event.Skip(); }
virtual void onIncrementScale( wxSpinEvent& event ) { event.Skip(); }
virtual void onMouseWheelRot( wxMouseEvent& event ) { event.Skip(); }
virtual void onDecrementRot( wxSpinEvent& event ) { event.Skip(); }
virtual void onIncrementRot( wxSpinEvent& event ) { event.Skip(); }
virtual void onMouseWheelOffset( wxMouseEvent& event ) { event.Skip(); }
virtual void onDecrementOffset( wxSpinEvent& event ) { event.Skip(); }
virtual void onIncrementOffset( wxSpinEvent& event ) { event.Skip(); }
virtual void View3DISO( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DLeft( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DFront( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DTop( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DUpdate( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DRight( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DBack( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DBottom( wxCommandEvent& event ) { event.Skip(); }
public:
wxTextCtrl* yoff;
PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
~PANEL_PREV_3D_BASE();
};
#endif //__PANEL_PREV_3D_BASE_H__
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 5 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __PANEL_PREV_3D_BASE_H__
#define __PANEL_PREV_3D_BASE_H__
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/textctrl.h>
#include <wx/spinbutt.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/bmpbuttn.h>
#include <wx/button.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_PREV_3D_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_PREV_3D_BASE : public wxPanel
{
private:
protected:
wxStaticText* m_staticText1;
wxTextCtrl* xscale;
wxSpinButton* m_spinXscale;
wxStaticText* m_staticText2;
wxTextCtrl* yscale;
wxSpinButton* m_spinYscale;
wxStaticText* m_staticText3;
wxTextCtrl* zscale;
wxSpinButton* m_spinZscale;
wxStaticText* m_staticText11;
wxTextCtrl* xrot;
wxSpinButton* m_spinXrot;
wxStaticText* m_staticText21;
wxTextCtrl* yrot;
wxSpinButton* m_spinYrot;
wxStaticText* m_staticText31;
wxTextCtrl* zrot;
wxSpinButton* m_spinZrot;
wxStaticText* m_staticText12;
wxTextCtrl* xoff;
wxSpinButton* m_spinXoffset;
wxStaticText* m_staticText22;
wxSpinButton* m_spinYoffset;
wxStaticText* m_staticText32;
wxTextCtrl* zoff;
wxSpinButton* m_spinZoffset;
wxBoxSizer* m_SizerPanelView;
wxBitmapButton* m_bpvISO;
wxBitmapButton* m_bpvLeft;
wxBitmapButton* m_bpvRight;
wxBitmapButton* m_bpvFront;
wxBitmapButton* m_bpvBack;
wxBitmapButton* m_bpvTop;
wxBitmapButton* m_bpvBottom;
wxBitmapButton* m_bpUpdate;
// Virtual event handlers, overide them in your derived class
virtual void onMouseWheelScale( wxMouseEvent& event ) { event.Skip(); }
virtual void updateOrientation( wxCommandEvent& event ) { event.Skip(); }
virtual void onDecrementScale( wxSpinEvent& event ) { event.Skip(); }
virtual void onIncrementScale( wxSpinEvent& event ) { event.Skip(); }
virtual void onMouseWheelRot( wxMouseEvent& event ) { event.Skip(); }
virtual void onDecrementRot( wxSpinEvent& event ) { event.Skip(); }
virtual void onIncrementRot( wxSpinEvent& event ) { event.Skip(); }
virtual void onMouseWheelOffset( wxMouseEvent& event ) { event.Skip(); }
virtual void onDecrementOffset( wxSpinEvent& event ) { event.Skip(); }
virtual void onIncrementOffset( wxSpinEvent& event ) { event.Skip(); }
virtual void View3DISO( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DLeft( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DRight( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DFront( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DBack( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DTop( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DBottom( wxCommandEvent& event ) { event.Skip(); }
virtual void View3DUpdate( wxCommandEvent& event ) { event.Skip(); }
public:
wxTextCtrl* yoff;
PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL );
~PANEL_PREV_3D_BASE();
};
#endif //__PANEL_PREV_3D_BASE_H__
+164 -453
View File
@@ -28,69 +28,53 @@
* @file panel_prev_model.cpp
*/
#include "panel_prev_model.h"
#include <3d_canvas/eda_3d_canvas.h>
#include <common_ogl/cogl_att_list.h>
#include <cstdlib>
#include <limits.h>
#include <bitmaps.h>
#include <wx/valnum.h>
#include <wx/tglbtn.h>
#include "project.h"
#include "panel_prev_model.h"
#include <class_board.h>
#include <base_units.h>
#include <bitmaps.h>
#include <class_drawpanel.h>
#include <dpi_scaling.h>
#include <pgm_base.h>
#include <project.h>
PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, S3D_CACHE* aCacheManager,
MODULE* aModuleCopy,
COLORS_DESIGN_SETTINGS *aColors,
std::vector<MODULE_3D_SETTINGS> *aParentInfoList ) :
PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, MODULE* aModule,
std::vector<MODULE_3D_SETTINGS> *aParentModelList ) :
PANEL_PREV_3D_BASE( aParent, wxID_ANY )
{
m_userUnits = aFrame->GetUserUnits();
initPanel();
// Initialize the color settings to draw the board and the footprint
if( aColors )
m_dummyBoard->SetColorsSettings( aColors );
else
{
static COLORS_DESIGN_SETTINGS defaultColors( FRAME_PCB_DISPLAY3D );
m_dummyBoard->SetColorsSettings( &defaultColors );
}
m_dummyBoard->SetColorsSettings( &aFrame->Settings().Colors() );
if( NULL != aCacheManager )
m_resolver = aCacheManager->GetResolver();
m_parentModelList = aParentModelList;
m_parentInfoList = aParentInfoList;
m_dummyBoard->Add( (MODULE*)aModuleCopy );
m_copyModule = aModuleCopy;
m_dummyModule = new MODULE( *aModule );
m_dummyBoard->Add( m_dummyModule );
// Set 3d viewer configuration for preview
m_settings3Dviewer = new CINFO3D_VISU();
// Create the 3D canvas
m_previewPane = new EDA_3D_CANVAS( this,
COGL_ATT_LIST::GetAttributesList( true ),
m_dummyBoard,
*m_settings3Dviewer,
aCacheManager );
m_previewPane = new EDA_3D_CANVAS( this, COGL_ATT_LIST::GetAttributesList( true ),
m_dummyBoard, *m_settings3Dviewer,
aFrame->Prj().Get3DCacheManager() );
m_SizerPanelView->Add( m_previewPane, 1, wxEXPAND );
loadCommonSettings();
m_previewPane->Connect( wxEVT_ENTER_WINDOW,
wxMouseEventHandler( PANEL_PREV_3D::onEnterPreviewCanvas ),
NULL, this );
m_SizerPanelView->Add( m_previewPane, 1, wxEXPAND, 5 );
}
PANEL_PREV_3D::~PANEL_PREV_3D()
{
m_previewPane->Disconnect( wxEVT_ENTER_WINDOW,
wxMouseEventHandler( PANEL_PREV_3D::onEnterPreviewCanvas ),
NULL, this );
delete m_settings3Dviewer;
delete m_dummyBoard;
delete m_previewPane;
@@ -99,10 +83,8 @@ PANEL_PREV_3D::~PANEL_PREV_3D()
void PANEL_PREV_3D::initPanel()
{
m_resolver = NULL;
currentModelFile.clear();
m_dummyBoard = new BOARD();
m_currentSelectedIdx = -1;
m_selected = -1;
// Set the bitmap of 3D view buttons:
m_bpvTop->SetBitmap( KiBitmap( axis3d_top_xpm ) );
@@ -127,323 +109,142 @@ void PANEL_PREV_3D::initPanel()
};
for( int ii = 0; ii < 9; ii++ )
{
spinButtonList[ii]->SetRange( INT_MIN, INT_MAX );
}
wxString units;
switch( g_UserUnit )
{
case INCHES:
units = _( "inches" );
break;
case MILLIMETRES:
units = _( "mm" );
break;
default:
break;
}
if( !units.IsEmpty() )
{
units = wxString::Format( _( "Offset (%s)" ), units );
m_staticTextOffset->SetLabel( units );
}
}
void PANEL_PREV_3D::loadCommonSettings()
{
wxCHECK_RET( m_previewPane, "Cannot load settings to null canvas" );
wxConfigBase& cmnCfg = *Pgm().CommonSettings();
{
const DPI_SCALING dpi{ &cmnCfg, this };
m_previewPane->SetScaleFactor( dpi.GetScaleFactor() );
}
{
bool option;
cmnCfg.Read( ENBL_MOUSEWHEEL_PAN_KEY, &option, false );
m_settings3Dviewer->SetFlag( FL_MOUSEWHEEL_PANNING, option );
}
}
/**
* @brief checkRotation
* @brief rotationFromString
* Ensure -MAX_ROTATION <= rotation <= MAX_ROTATION
* aRotation will be normalized between -MAX_ROTATION and MAX_ROTATION
* @param aRotation: in out parameter
*/
static void checkRotation( double& aRotation )
static double rotationFromString( const wxString& aValue )
{
if( aRotation > MAX_ROTATION )
double rotation = DoubleValueFromString( DEGREES, aValue ) / 10.0;
if( rotation > MAX_ROTATION )
{
int n = aRotation / MAX_ROTATION;
aRotation -= MAX_ROTATION * n;
int n = rotation / MAX_ROTATION;
rotation -= MAX_ROTATION * n;
}
else if( aRotation < -MAX_ROTATION )
else if( rotation < -MAX_ROTATION )
{
int n = -aRotation / MAX_ROTATION;
aRotation += MAX_ROTATION * n;
int n = -rotation / MAX_ROTATION;
rotation += MAX_ROTATION * n;
}
return rotation;
}
static bool validateFloatTextCtrl( wxTextCtrl* aTextCtrl )
wxString PANEL_PREV_3D::formatScaleValue( double aValue )
{
if( aTextCtrl == NULL )
return false;
if( aTextCtrl->GetLineLength(0) == 0 ) // This will skip the got and event with empty field
return false;
if( aTextCtrl->GetLineLength(0) == 1 )
{
if( (aTextCtrl->GetLineText(0).compare( "." ) == 0) ||
(aTextCtrl->GetLineText(0).compare( "," ) == 0) )
return false;
}
return true;
return wxString::Format( "%.4f", aValue );
}
static void incrementTextCtrl( wxTextCtrl* aTextCtrl, double aInc, double aMinval, double aMaxval )
wxString PANEL_PREV_3D::formatRotationValue( double aValue )
{
if( !validateFloatTextCtrl( aTextCtrl ) )
return;
double curr_value = 0;
aTextCtrl->GetValue().ToDouble( &curr_value );
curr_value += aInc;
if( curr_value > aMaxval )
curr_value = aMaxval;
if( curr_value < aMinval )
curr_value = aMinval;
aTextCtrl->SetValue( wxString::Format( "%.4f", curr_value ) );
return wxString::Format( "%.2f %s", aValue, GetAbbreviatedUnitsLabel( DEGREES ) );
}
void PANEL_PREV_3D::SetModelDataIdx( int idx, bool aReloadPreviewModule )
wxString PANEL_PREV_3D::formatOffsetValue( double aValue )
{
wxASSERT( m_parentInfoList != NULL );
// Convert from internal units (mm) to user units
if( m_userUnits == INCHES )
aValue /= 25.4f;
if( m_parentInfoList && (idx >= 0) )
{
wxASSERT( (unsigned int)idx < (*m_parentInfoList).size() );
if( (unsigned int)idx < (*m_parentInfoList).size() )
{
m_currentSelectedIdx = -1; // In case that we receive events on the
// next updates, it will set first an
// invalid selection
const MODULE_3D_SETTINGS *aModel = (const MODULE_3D_SETTINGS *)&((*m_parentInfoList)[idx]);
xscale->SetValue( wxString::Format( "%.4f", aModel->m_Scale.x ) );
yscale->SetValue( wxString::Format( "%.4f", aModel->m_Scale.y ) );
zscale->SetValue( wxString::Format( "%.4f", aModel->m_Scale.z ) );
xrot->SetValue( wxString::Format( "%.2f", aModel->m_Rotation.x ) );
yrot->SetValue( wxString::Format( "%.2f", aModel->m_Rotation.y ) );
zrot->SetValue( wxString::Format( "%.2f", aModel->m_Rotation.z ) );
// Convert from internal units (mm) to user units
double scaler = 1;
switch( g_UserUnit )
{
case MILLIMETRES:
scaler = 1.0f;
break;
case INCHES:
scaler = 25.4f;
break;
default:
wxASSERT( 0 );
}
xoff->SetValue( wxString::Format( "%.4f", aModel->m_Offset.x / scaler ) );
yoff->SetValue( wxString::Format( "%.4f", aModel->m_Offset.y / scaler ) );
zoff->SetValue( wxString::Format( "%.4f", aModel->m_Offset.z / scaler ) );
UpdateModelName( aModel->m_Filename );
if( aReloadPreviewModule && m_previewPane )
{
updateListOnModelCopy();
m_previewPane->ReloadRequest();
m_previewPane->Request_refresh();
}
m_currentSelectedIdx = idx;
}
}
if( m_previewPane )
{
m_previewPane->SetFocus();
}
return;
return wxString::Format( "%.4f %s", aValue, GetAbbreviatedUnitsLabel( m_userUnits ) );
}
void PANEL_PREV_3D::ResetModelData( bool aReloadPreviewModule )
void PANEL_PREV_3D::SetSelectedModel( int idx )
{
m_currentSelectedIdx = -1;
xscale->SetValue( wxString::FromDouble( 1.0 ) );
yscale->SetValue( wxString::FromDouble( 1.0 ) );
zscale->SetValue( wxString::FromDouble( 1.0 ) );
xrot->SetValue( wxString::FromDouble( 0.0 ) );
yrot->SetValue( wxString::FromDouble( 0.0 ) );
zrot->SetValue( wxString::FromDouble( 0.0 ) );
xoff->SetValue( wxString::FromDouble( 0.0 ) );
yoff->SetValue( wxString::FromDouble( 0.0 ) );
zoff->SetValue( wxString::FromDouble( 0.0 ) );
// This will update the model on the preview board with the current list of 3d shapes
if( aReloadPreviewModule )
if( m_parentModelList && idx >= 0 && idx < (int) m_parentModelList->size() )
{
updateListOnModelCopy();
m_selected = idx;
const MODULE_3D_SETTINGS& modelInfo = m_parentModelList->at( (unsigned) m_selected );
if( m_previewPane )
{
m_previewPane->ReloadRequest();
m_previewPane->Request_refresh();
}
}
// Use ChangeValue() instead of SetValue(). It's not the user making the change, so we
// don't want to generate wxEVT_GRID_CELL_CHANGED events.
if( m_previewPane )
m_previewPane->SetFocus();
}
xscale->ChangeValue( formatScaleValue( modelInfo.m_Scale.x ) );
yscale->ChangeValue( formatScaleValue( modelInfo.m_Scale.y ) );
zscale->ChangeValue( formatScaleValue( modelInfo.m_Scale.z ) );
xrot->ChangeValue( formatRotationValue( modelInfo.m_Rotation.x ) );
yrot->ChangeValue( formatRotationValue( modelInfo.m_Rotation.y ) );
zrot->ChangeValue( formatRotationValue( modelInfo.m_Rotation.z ) );
void PANEL_PREV_3D::UpdateModelName( wxString const& aModelName )
{
bool newModel = false;
m_modelInfo.m_Filename = aModelName;
// if the model name is a directory simply clear the current model
if( aModelName.empty() || wxFileName::DirExists( aModelName ) )
{
currentModelFile.clear();
m_modelInfo.m_Filename.clear();
xoff->ChangeValue( formatOffsetValue( modelInfo.m_Offset.x ) );
yoff->ChangeValue( formatOffsetValue( modelInfo.m_Offset.y ) );
zoff->ChangeValue( formatOffsetValue( modelInfo.m_Offset.z ) );
}
else
{
wxString newModelFile;
m_selected = -1;
if( m_resolver )
newModelFile = m_resolver->ResolvePath( aModelName );
xscale->ChangeValue( wxEmptyString );
yscale->ChangeValue( wxEmptyString );
zscale->ChangeValue( wxEmptyString );
if( !newModelFile.empty() && newModelFile.Cmp( currentModelFile ) )
newModel = true;
xrot->ChangeValue( wxEmptyString );
yrot->ChangeValue( wxEmptyString );
zrot->ChangeValue( wxEmptyString );
currentModelFile = newModelFile;
xoff->ChangeValue( wxEmptyString );
yoff->ChangeValue( wxEmptyString );
zoff->ChangeValue( wxEmptyString );
}
if( currentModelFile.empty() || newModel )
{
updateListOnModelCopy();
if( m_previewPane )
{
m_previewPane->ReloadRequest();
m_previewPane->Refresh();
}
if( currentModelFile.empty() )
return;
}
else
{
if( m_previewPane )
m_previewPane->Refresh();
}
if( m_previewPane )
m_previewPane->SetFocus();
return;
}
void PANEL_PREV_3D::updateOrientation( wxCommandEvent &event )
{
wxTextCtrl *textCtrl = (wxTextCtrl *)event.GetEventObject();
if( textCtrl == NULL )
return;
if( textCtrl->GetLineLength(0) == 0 ) // This will skip the got and event with empty field
return;
if( textCtrl->GetLineLength(0) == 1 )
if( (textCtrl->GetLineText(0).compare( "." ) == 0) ||
(textCtrl->GetLineText(0).compare( "," ) == 0) )
return;
SGPOINT scale;
SGPOINT rotation;
SGPOINT offset;
getOrientationVars( scale, rotation, offset );
m_modelInfo.m_Scale.x = scale.x;
m_modelInfo.m_Scale.y = scale.y;
m_modelInfo.m_Scale.z = scale.z;
m_modelInfo.m_Offset.x = offset.x;
m_modelInfo.m_Offset.y = offset.y;
m_modelInfo.m_Offset.z = offset.z;
m_modelInfo.m_Rotation.x = rotation.x;
m_modelInfo.m_Rotation.y = rotation.y;
m_modelInfo.m_Rotation.z = rotation.z;
if( m_currentSelectedIdx >= 0 )
if( m_parentModelList && m_selected >= 0 && m_selected < (int) m_parentModelList->size() )
{
// This will update the parent list with the new data
(*m_parentInfoList)[m_currentSelectedIdx] = m_modelInfo;
// Write settings back to the parent
MODULE_3D_SETTINGS* modelInfo = &m_parentModelList->at( (unsigned) m_selected );
// It will update the copy model in the preview board
updateListOnModelCopy();
modelInfo->m_Scale.x = DoubleValueFromString( UNSCALED_UNITS, xscale->GetValue() );
modelInfo->m_Scale.y = DoubleValueFromString( UNSCALED_UNITS, yscale->GetValue() );
modelInfo->m_Scale.z = DoubleValueFromString( UNSCALED_UNITS, zscale->GetValue() );
// Since the OpenGL render does not need to be reloaded to update the
// shapes position, we just request to redraw again the canvas
if( m_previewPane )
m_previewPane->Refresh();
modelInfo->m_Rotation.x = rotationFromString( xrot->GetValue() );
modelInfo->m_Rotation.y = rotationFromString( yrot->GetValue() );
modelInfo->m_Rotation.z = rotationFromString( zrot->GetValue() );
modelInfo->m_Offset.x = DoubleValueFromString( m_userUnits, xoff->GetValue() ) / IU_PER_MM;
modelInfo->m_Offset.y = DoubleValueFromString( m_userUnits, yoff->GetValue() ) / IU_PER_MM;
modelInfo->m_Offset.z = DoubleValueFromString( m_userUnits, zoff->GetValue() ) / IU_PER_MM;
// Update the dummy module for the preview
UpdateDummyModule( false );
}
}
void PANEL_PREV_3D::onIncrementRot( wxSpinEvent& event )
{
wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
wxTextCtrl * textCtrl = xrot;
if( spinCtrl == m_spinYrot )
textCtrl = yrot;
else if( spinCtrl == m_spinZrot )
textCtrl = zrot;
incrementTextCtrl( textCtrl, ROTATION_INCREMENT, -MAX_ROTATION, MAX_ROTATION );
}
void PANEL_PREV_3D::onDecrementRot( wxSpinEvent& event )
{
wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
wxTextCtrl * textCtrl = xrot;
if( spinCtrl == m_spinYrot )
textCtrl = yrot;
else if( spinCtrl == m_spinZrot )
textCtrl = zrot;
incrementTextCtrl( textCtrl, -ROTATION_INCREMENT, -MAX_ROTATION, MAX_ROTATION );
}
void PANEL_PREV_3D::onIncrementScale( wxSpinEvent& event )
void PANEL_PREV_3D::doIncrementScale( wxSpinEvent& event, double aSign )
{
wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
@@ -454,26 +255,37 @@ void PANEL_PREV_3D::onIncrementScale( wxSpinEvent& event )
else if( spinCtrl == m_spinZscale )
textCtrl = zscale;
incrementTextCtrl( textCtrl, SCALE_INCREMENT, 1/MAX_SCALE, MAX_SCALE );
double curr_value = DoubleValueFromString( UNSCALED_UNITS, textCtrl->GetValue() );
curr_value += ( SCALE_INCREMENT * aSign );
curr_value = std::max( 1/MAX_SCALE, curr_value );
curr_value = std::min( curr_value, MAX_SCALE );
textCtrl->SetValue( formatScaleValue( curr_value ) );
}
void PANEL_PREV_3D::onDecrementScale( wxSpinEvent& event )
void PANEL_PREV_3D::doIncrementRotation( wxSpinEvent& aEvent, double aSign )
{
wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
wxSpinButton* spinCtrl = (wxSpinButton*) aEvent.GetEventObject();
wxTextCtrl* textCtrl = xrot;
wxTextCtrl * textCtrl = xscale;
if( spinCtrl == m_spinYrot )
textCtrl = yrot;
else if( spinCtrl == m_spinZrot )
textCtrl = zrot;
if( spinCtrl == m_spinYscale )
textCtrl = yscale;
else if( spinCtrl == m_spinZscale )
textCtrl = zscale;
double curr_value = DoubleValueFromString( DEGREES, textCtrl->GetValue() ) / 10.0;
incrementTextCtrl( textCtrl, -SCALE_INCREMENT, 1/MAX_SCALE, MAX_SCALE );
curr_value += ( ROTATION_INCREMENT * aSign );
curr_value = std::max( -MAX_ROTATION, curr_value );
curr_value = std::min( curr_value, MAX_ROTATION );
textCtrl->SetValue( formatRotationValue( curr_value ) );
}
void PANEL_PREV_3D::onIncrementOffset( wxSpinEvent& event )
void PANEL_PREV_3D::doIncrementOffset( wxSpinEvent& event, double aSign )
{
wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
@@ -486,30 +298,16 @@ void PANEL_PREV_3D::onIncrementOffset( wxSpinEvent& event )
double step = OFFSET_INCREMENT_MM;
if( g_UserUnit == INCHES )
if( m_userUnits == INCHES )
step = OFFSET_INCREMENT_MIL/1000.0;
incrementTextCtrl( textCtrl, step, -MAX_OFFSET, MAX_OFFSET );
}
double curr_value = DoubleValueFromString( m_userUnits, textCtrl->GetValue() ) / IU_PER_MM;
curr_value += ( step * aSign );
curr_value = std::max( -MAX_OFFSET, curr_value );
curr_value = std::min( curr_value, MAX_OFFSET );
void PANEL_PREV_3D::onDecrementOffset( wxSpinEvent& event )
{
wxSpinButton* spinCtrl = (wxSpinButton*) event.GetEventObject();
wxTextCtrl * textCtrl = xoff;
if( spinCtrl == m_spinYoffset )
textCtrl = yoff;
else if( spinCtrl == m_spinZoffset )
textCtrl = zoff;
double step = OFFSET_INCREMENT_MM;
if( g_UserUnit == INCHES )
step = OFFSET_INCREMENT_MIL/1000.0;
incrementTextCtrl( textCtrl, -step, -MAX_OFFSET, MAX_OFFSET );
textCtrl->SetValue( formatOffsetValue( curr_value ) );
}
@@ -525,7 +323,13 @@ void PANEL_PREV_3D::onMouseWheelScale( wxMouseEvent& event )
if( event.GetWheelRotation() >= 0 )
step = -step;
incrementTextCtrl( textCtrl, step, 1/MAX_SCALE, MAX_SCALE );
double curr_value = DoubleValueFromString( UNSCALED_UNITS, textCtrl->GetValue() );
curr_value += step;
curr_value = std::max( 1/MAX_SCALE, curr_value );
curr_value = std::min( curr_value, MAX_SCALE );
textCtrl->SetValue( formatScaleValue( curr_value ) );
}
@@ -533,8 +337,6 @@ void PANEL_PREV_3D::onMouseWheelRot( wxMouseEvent& event )
{
wxTextCtrl* textCtrl = (wxTextCtrl*) event.GetEventObject();
wxKeyboardState kbdState;
double step = ROTATION_INCREMENT_WHEEL;
if( event.ShiftDown( ) )
@@ -543,7 +345,13 @@ void PANEL_PREV_3D::onMouseWheelRot( wxMouseEvent& event )
if( event.GetWheelRotation() >= 0 )
step = -step;
incrementTextCtrl( textCtrl, step, -MAX_ROTATION, MAX_ROTATION );
double curr_value = DoubleValueFromString( DEGREES, textCtrl->GetValue() ) / 10.0;
curr_value += step;
curr_value = std::max( -MAX_ROTATION, curr_value );
curr_value = std::min( curr_value, MAX_ROTATION );
textCtrl->SetValue( formatRotationValue( curr_value ) );
}
@@ -556,7 +364,7 @@ void PANEL_PREV_3D::onMouseWheelOffset( wxMouseEvent& event )
if( event.ShiftDown( ) )
step = OFFSET_INCREMENT_MM_FINE;
if( g_UserUnit == INCHES )
if( m_userUnits == INCHES )
{
step = OFFSET_INCREMENT_MIL/1000.0;
if( event.ShiftDown( ) )
@@ -566,128 +374,31 @@ void PANEL_PREV_3D::onMouseWheelOffset( wxMouseEvent& event )
if( event.GetWheelRotation() >= 0 )
step = -step;
incrementTextCtrl( textCtrl, step, -MAX_OFFSET, MAX_OFFSET );
double curr_value = DoubleValueFromString( m_userUnits, textCtrl->GetValue() ) / IU_PER_MM;
curr_value += step;
curr_value = std::max( -MAX_OFFSET, curr_value );
curr_value = std::min( curr_value, MAX_OFFSET );
textCtrl->SetValue( formatOffsetValue( curr_value ) );
}
void PANEL_PREV_3D::getOrientationVars( SGPOINT& aScale, SGPOINT& aRotation, SGPOINT& aOffset )
void PANEL_PREV_3D::UpdateDummyModule( bool aReloadRequired )
{
if( NULL == xscale || NULL == yscale || NULL == zscale
|| NULL == xrot || NULL == yrot || NULL == zrot
|| NULL == xoff || NULL == yoff || NULL == zoff )
m_dummyModule->Models().clear();
for( size_t i = 0; i < m_parentModelList->size(); ++i )
{
return;
if( m_parentModelList->at( i ).m_Preview )
{
m_dummyModule->Models().insert( m_dummyModule->Models().end(),
m_parentModelList->at( i ) );
}
}
xscale->GetValue().ToDouble( &aScale.x );
yscale->GetValue().ToDouble( &aScale.y );
zscale->GetValue().ToDouble( &aScale.z );
if( aReloadRequired )
m_previewPane->ReloadRequest();
xrot->GetValue().ToDouble( &aRotation.x );
yrot->GetValue().ToDouble( &aRotation.y );
zrot->GetValue().ToDouble( &aRotation.z );
checkRotation( aRotation.x );
checkRotation( aRotation.y );
checkRotation( aRotation.z );
xoff->GetValue().ToDouble( &aOffset.x );
yoff->GetValue().ToDouble( &aOffset.y );
zoff->GetValue().ToDouble( &aOffset.z );
// Convert from user units to internal units (mm)
double scaler = 1.0f;
switch( g_UserUnit )
{
case MILLIMETRES:
scaler = 1.0f;
break;
case INCHES:
scaler = 25.4f;
break;
default:
wxASSERT( 0 );
}
aOffset.x *= scaler;
aOffset.y *= scaler;
aOffset.z *= scaler;
return;
}
bool PANEL_PREV_3D::ValidateWithMessage( wxString& aErrorMessage )
{
bool invalidScale = false;
for( unsigned int idx = 0; idx < m_parentInfoList->size(); ++idx )
{
wxString msg;
bool addError = false;
MODULE_3D_SETTINGS& s3dshape = (*m_parentInfoList)[idx];
SGPOINT scale;
scale.x = s3dshape.m_Scale.x;
scale.y = s3dshape.m_Scale.y;
scale.z = s3dshape.m_Scale.z;
if( 1/MAX_SCALE > scale.x || MAX_SCALE < scale.x )
{
invalidScale = true;
addError = true;
msg += _( "Invalid X scale" );
}
if( 1/MAX_SCALE > scale.y || MAX_SCALE < scale.y )
{
invalidScale = true;
addError = true;
if( !msg.IsEmpty() )
msg += "\n";
msg += _( "Invalid Y scale" );
}
if( 1/MAX_SCALE > scale.z || MAX_SCALE < scale.z )
{
invalidScale = true;
addError = true;
if( !msg.IsEmpty() )
msg += "\n";
msg += _( "Invalid Z scale" );
}
if( addError )
{
msg.Prepend( s3dshape.m_Filename + "\n" );
if( !aErrorMessage.IsEmpty() )
aErrorMessage += "\n\n";
aErrorMessage += msg;
}
}
if( !aErrorMessage.IsEmpty() )
{
aErrorMessage += "\n\n";
aErrorMessage += wxString::Format( "Min value = %.4f and max value = %.4f",
1/MAX_SCALE, MAX_SCALE );
}
return invalidScale == false;
}
void PANEL_PREV_3D::updateListOnModelCopy()
{
auto draw3D = &m_copyModule->Models();
draw3D->clear();
draw3D->insert( draw3D->end(), m_parentInfoList->begin(), m_parentInfoList->end() );
m_previewPane->Request_refresh();
}
+62 -83
View File
@@ -47,23 +47,23 @@
#define MAX_ROTATION 180.0
#define MAX_OFFSET 1000.0
#define SCALE_INCREMENT_FINE 0.02
#define SCALE_INCREMENT 0.1
#define SCALE_INCREMENT_FINE 0.02
#define SCALE_INCREMENT 0.1
#define ROTATION_INCREMENT 5 // in degrees, for spin button command
#define ROTATION_INCREMENT_WHEEL 15 // in degrees, for mouse wheel command
#define ROTATION_INCREMENT_WHEEL_FINE 1 // in degrees, for mouse wheel command
#define OFFSET_INCREMENT_MM 0.5
#define OFFSET_INCREMENT_MM_FINE 0.1
#define OFFSET_INCREMENT_MM 0.5
#define OFFSET_INCREMENT_MM_FINE 0.1
#define OFFSET_INCREMENT_MIL 25.0
#define OFFSET_INCREMENT_MIL_FINE 5.0
#define OFFSET_INCREMENT_MIL 25.0
#define OFFSET_INCREMENT_MIL_FINE 5.0
// Declared classes to create pointers
class S3D_CACHE;
class S3D_FILENAME_RESOLVER;
class FILENAME_RESOLVER;
class BOARD;
class CINFO3D_VISU;
class MODULE;
@@ -72,42 +72,32 @@ class COLORS_DESIGN_SETTINGS;
class PANEL_PREV_3D: public PANEL_PREV_3D_BASE
{
public:
PANEL_PREV_3D( wxWindow* aParent, S3D_CACHE* aCacheManager,
MODULE* aModuleCopy,
COLORS_DESIGN_SETTINGS *aColors,
std::vector<MODULE_3D_SETTINGS> *aParentInfoList = NULL );
PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, MODULE* aModule,
std::vector<MODULE_3D_SETTINGS> *aParentModelList );
~PANEL_PREV_3D();
private:
wxString currentModelFile; ///< Used to check if the model file was changed
S3D_FILENAME_RESOLVER *m_resolver; ///< Used to get the full path name
EDA_3D_CANVAS* m_previewPane;
CINFO3D_VISU* m_settings3Dviewer;
/// The 3D canvas
EDA_3D_CANVAS *m_previewPane;
BOARD* m_dummyBoard;
MODULE* m_dummyModule;
/// A dummy board used to store the copy moduled
BOARD *m_dummyBoard;
std::vector<MODULE_3D_SETTINGS>* m_parentModelList;
int m_selected; /// Index into m_parentInfoList
/// The settings that will be used for this 3D viewer canvas
CINFO3D_VISU *m_settings3Dviewer;
/// A pointer to a new copy of the original module
MODULE *m_copyModule;
/// A pointer to the parent MODULE_3D_SETTINGS list that we will use to copy to the preview module
std::vector<MODULE_3D_SETTINGS> *m_parentInfoList;
/// The current selected index of the MODULE_3D_SETTINGS list
int m_currentSelectedIdx;
/// Current MODULE_3D_SETTINGS that is being edited
MODULE_3D_SETTINGS m_modelInfo;
EDA_UNITS_T m_userUnits;
// Methods of the class
private:
void initPanel();
/**
* Load 3D relevant settings from the user configuration
*/
void loadCommonSettings();
/**
* @brief updateOrientation - it will receive the events from editing the fields
* @param event
@@ -118,32 +108,38 @@ private:
void onMouseWheelRot( wxMouseEvent& event ) override;
void onMouseWheelOffset( wxMouseEvent& event ) override;
void onIncrementRot( wxSpinEvent& event ) override;
void onDecrementRot( wxSpinEvent& event ) override;
void onIncrementScale( wxSpinEvent& event ) override;
void onDecrementScale( wxSpinEvent& event ) override;
void onIncrementOffset( wxSpinEvent& event ) override;
void onDecrementOffset( wxSpinEvent& event ) override;
/**
* @brief getOrientationVars - gets the transformation from entries and validate it
* @param aScale: output scale var
* @param aRotation: output rotation var
* @param aOffset: output offset var
*/
void getOrientationVars( SGPOINT& aScale, SGPOINT& aRotation, SGPOINT& aOffset );
/**
* @brief updateListOnModelCopy - copy the current shape list to the copy of module that is on
* the preview dummy board
*/
void updateListOnModelCopy();
void onEnterPreviewCanvas( wxMouseEvent& event )
void onIncrementRot( wxSpinEvent& event ) override
{
m_previewPane->SetFocus();
doIncrementRotation( event, 1.0 );
}
void onDecrementRot( wxSpinEvent& event ) override
{
doIncrementRotation( event, -1.0 );
}
void onIncrementScale( wxSpinEvent& event ) override
{
doIncrementScale( event, 1.0 );
}
void onDecrementScale( wxSpinEvent& event ) override
{
doIncrementScale( event, -1.0 );
}
void onIncrementOffset( wxSpinEvent& event ) override
{
doIncrementOffset( event, 1.0 );
}
void onDecrementOffset( wxSpinEvent& event ) override
{
doIncrementOffset( event, -1.0 );
}
void doIncrementScale( wxSpinEvent& aEvent, double aSign );
void doIncrementRotation( wxSpinEvent& aEvent, double aSign );
void doIncrementOffset( wxSpinEvent& aEvent, double aSign );
wxString formatScaleValue( double aValue );
wxString formatRotationValue( double aValue );
wxString formatOffsetValue( double aValue );
void View3DISO( wxCommandEvent& event ) override
{
@@ -153,7 +149,7 @@ private:
void View3DLeft( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'X' );
m_previewPane->SetView3D( GR_KB_SHIFT + 'X' );
}
void View3DFront( wxCommandEvent& event ) override
@@ -163,7 +159,7 @@ private:
void View3DTop( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'z' );
m_previewPane->SetView3D( 'Z' );
}
void View3DUpdate( wxCommandEvent& event ) override
@@ -174,48 +170,31 @@ private:
void View3DRight( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'x' );
m_previewPane->SetView3D( 'X' );
}
void View3DBack( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'y' );
m_previewPane->SetView3D( GR_KB_SHIFT + 'Y' );
}
void View3DBottom( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'Z' );
m_previewPane->SetView3D( GR_KB_SHIFT + 'Z' );
}
public:
/**
* @brief SetModelDataIdx - This will set the index of the INFO list that was set on the parent.
* So we will update our values to edit based on the index on that list.
* @param idx - The index that was selected
* @param aReloadPreviewModule: if need to update the preview module
* @brief SetModelDataIdx - Sets the currently selected index in the model list so that
* the scale/rotation/offset controls can be updated.
*/
void SetModelDataIdx( int idx, bool aReloadPreviewModule = false );
void SetSelectedModel( int idx );
/**
* @brief ResetModelData - Clear the values and reload the preview board
* @param aReloadPreviewModule: if need to update the preview module
* @brief UpdateModelInfoList - copy shapes from the current shape list which are flagged
* for preview to the copy of module that is on the preview dummy board
*/
void ResetModelData( bool aReloadPreviewModule = false );
void UpdateModelName( wxString const& aModel );
/**
* @brief verify X,Y and Z scale factors are acceptable (> 0.001 and < 1000.0)
* @return false if one (or more) value is not acceptable.
* @param aErrorMessage is a wxString to store error messages, if any
*/
bool ValidateWithMessage( wxString& aErrorMessage );
bool Validate() override
{
wxString temp;
return ValidateWithMessage(temp);
}
void UpdateDummyModule( bool aRelaodRequired = true );
};
#endif // PANEL_PREV_MODEL_H
+3 -6
View File
@@ -358,22 +358,19 @@ bool S3D::GetMatIndex( MATLIST& aList, SGNODE* aNode, int& aIndex )
void S3D::INIT_SMATERIAL( SMATERIAL& aMaterial )
{
memset( &aMaterial, 0, sizeof( aMaterial ) );
return;
aMaterial = {};
}
void S3D::INIT_SMESH( SMESH& aMesh )
{
memset( &aMesh, 0, sizeof( aMesh ) );
return;
aMesh = {};
}
void S3D::INIT_S3DMODEL( S3DMODEL& aModel )
{
memset( &aModel, 0, sizeof( aModel ) );
return;
aModel = {};
}
-87
View File
@@ -1,87 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015 Cirilo Bernardo <cirilo.bernardo@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file str_rsort.h
* provides a wxString sorting functino which works from the
* end of the string towards the beginning
*/
#ifndef STR_RSORT_H
#define STR_RSORT_H
#include <wx/string.h>
namespace S3D
{
struct rsort_wxString
{
bool operator() (const wxString& strA, const wxString& strB ) const
{
// sort a wxString using the reverse character order; for 3d model
// filenames this will typically be a much faster operation than
// a normal alphabetic sort
wxString::const_reverse_iterator sA = strA.rbegin();
wxString::const_reverse_iterator eA = strA.rend();
wxString::const_reverse_iterator sB = strB.rbegin();
wxString::const_reverse_iterator eB = strB.rend();
if( strA.empty() )
{
if( strB.empty() )
return false;
// note: this rule implies that a null string is first in the sort order
return true;
}
if( strB.empty() )
return false;
while( sA != eA && sB != eB )
{
if( (*sA) == (*sB) )
{
++sA;
++sB;
continue;
}
if( (*sA) < (*sB) )
return true;
else
return false;
}
if( sB == eB )
return false;
return true;
}
};
} // end NAMESPACE
#endif // STR_RSORT_H
+8 -31
View File
@@ -33,6 +33,7 @@
#include <class_board.h>
#include <3d_math.h>
#include "3d_fastmath.h"
#include <geometry/geometry_utils.h>
/**
* Trace mask used to enable or disable the trace output of this class.
@@ -62,7 +63,7 @@ CINFO3D_VISU::CINFO3D_VISU() :
m_boardPos = wxPoint();
m_boardSize = wxSize();
m_boardCenter = SFVEC3F();
m_boardCenter = SFVEC3F( 0.0f );
m_boardBoudingBox.Reset();
m_board2dBBox3DU.Reset();
@@ -243,37 +244,20 @@ int CINFO3D_VISU::GetCopperThicknessBIU() const
return COPPER_THICKNESS;
}
// Constant factors used for number of segments approximation calcs
#define MIN_SEG_PER_CIRCLE 12
#define MAX_SEG_PER_CIRCLE 48
#define SEG_MIN_FACTOR_BIU ( 0.10f * IU_PER_MM )
#define SEG_MAX_FACTOR_BIU ( 6.00f * IU_PER_MM )
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( float aDiameter3DU ) const
{
wxASSERT( aDiameter3DU > 0.0f );
unsigned int result = mapf( aDiameter3DU,
m_calc_seg_min_factor3DU, m_calc_seg_max_factor3DU,
(float)MIN_SEG_PER_CIRCLE, (float)MAX_SEG_PER_CIRCLE );
wxASSERT( result > 1 );
return result;
return GetNrSegmentsCircle( (int)( aDiameter3DU / m_biuTo3Dunits ) );
}
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( int aDiameterBUI ) const
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( int aDiameterBIU ) const
{
wxASSERT( aDiameterBUI > 0 );
wxASSERT( aDiameterBIU > 0 );
unsigned int result = mapf( (float)aDiameterBUI,
(float)SEG_MIN_FACTOR_BIU, (float)SEG_MAX_FACTOR_BIU,
(float)MIN_SEG_PER_CIRCLE, (float)MAX_SEG_PER_CIRCLE );
wxASSERT( result > 1 );
return result;
// Require at least 3 segments for a circle
return std::max( GetArcToSegmentCount( aDiameterBIU / 2, ARC_HIGH_DEF, 360.0 ), 3 );
}
@@ -281,7 +265,7 @@ double CINFO3D_VISU::GetCircleCorrectionFactor( int aNrSides ) const
{
wxASSERT( aNrSides >= 3 );
return 1.0 / cos( M_PI / ( (double)aNrSides * 2.0 ) );
return GetCircletoPolyCorrectionFactor( aNrSides );
}
@@ -318,10 +302,6 @@ void CINFO3D_VISU::InitSettings( REPORTER *aStatusTextReporter )
// Calculate the convertion to apply to all positions.
m_biuTo3Dunits = RANGE_SCALE_3D / std::max( m_boardSize.x, m_boardSize.y );
// Calculate factors for cicle segment approximation
m_calc_seg_min_factor3DU = (float)( SEG_MIN_FACTOR_BIU * m_biuTo3Dunits );
m_calc_seg_max_factor3DU = (float)( SEG_MAX_FACTOR_BIU * m_biuTo3Dunits );
m_epoxyThickness3DU = m_board->GetDesignSettings().GetBoardThickness() *
m_biuTo3Dunits;
@@ -483,9 +463,6 @@ void CINFO3D_VISU::createBoardPolygon()
wxLogMessage( errmsg );
}
// Be sure the polygon is strictly simple to avoid issues.
m_board_poly.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
Polygon_Calc_BBox_3DU( m_board_poly, m_board2dBBox3DU, m_biuTo3Dunits );
}
+4 -4
View File
@@ -394,10 +394,10 @@ class CINFO3D_VISU
/**
* @brief GetNrSegmentsCircle
* @param aDiameterBUI: diameter in board unities
* @param aDiameterBIU: diameter in board internal units
* @return number of sides that should be used in that circle
*/
unsigned int GetNrSegmentsCircle( int aDiameterBUI ) const;
unsigned int GetNrSegmentsCircle( int aDiameterBIU ) const;
/**
* @brief GetCircleCorrectionFactor - computes a angle correction
@@ -427,11 +427,11 @@ class CINFO3D_VISU
void createNewPad( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
const wxSize &aInflateValue ) const;
wxSize aInflateValue ) const;
void createNewPadWithClearance( const D_PAD *aPad,
CGENERICCONTAINER2D *aDstContainer,
int aClearanceValue ) const;
wxSize aClearanceValue ) const;
COBJECT2D *createNewPadDrill( const D_PAD* aPad, int aInflateValue );
@@ -40,7 +40,7 @@
#include "../3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h"
#include <openmp_mutex.h>
#include <class_board.h>
#include <class_module.h>
#include <class_pad.h>
@@ -66,7 +66,7 @@ static const CBBOX2D *s_boardBBox3DU = NULL;
static const BOARD_ITEM *s_boardItem = NULL;
// This is a call back function, used by DrawGraphicText to draw the 3D text shape:
void addTextSegmToContainer( int x0, int y0, int xf, int yf )
void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData )
{
wxASSERT( s_boardBBox3DU != NULL );
wxASSERT( s_dstcontainer != NULL );
@@ -297,10 +297,14 @@ COBJECT2D *CINFO3D_VISU::createNewTrack( const TRACK* aTrack,
// board_items_to_polygon_shape_transform.cpp
void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
int aClearanceValue ) const
wxSize aClearanceValue ) const
{
const int dx = (aPad->GetSize().x / 2) + aClearanceValue;
const int dy = (aPad->GetSize().y / 2) + aClearanceValue;
// note: for most of shapes, aClearanceValue.x = aClearanceValue.y
// only rectangular and oval shapes can have different values
// when drawn on the solder paste layer, because we can have a margin that is a
// percent of pad size
const int dx = (aPad->GetSize().x / 2) + aClearanceValue.x;
const int dy = (aPad->GetSize().y / 2) + aClearanceValue.y;
if( !dx || !dy )
{
@@ -328,7 +332,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
case PAD_SHAPE_OVAL:
{
if( abs( dx - dy ) == 0 )
if( dx == dy )
{
// The segment object cannot store start and end the same position,
// so add a circle instead
@@ -351,7 +355,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
shape_offset.y = dy - dx;
iwidth = dx * 2;
}
else //if( dy <= dx )
else //if( dy < dx )
{
shape_offset.x = dy - dx;
iwidth = dy * 2;
@@ -374,8 +378,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
}
else
{
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU,
end3DU,
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU,
iwidth * m_biuTo3Dunits,
*aPad ) );
}
@@ -386,7 +389,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
case PAD_SHAPE_TRAPEZOID:
case PAD_SHAPE_RECT:
{
// https://github.com/KiCad/kicad-source-mirror/blob/0cab3e47ad8097db7b898b3cef2cf9b235318ca3/pcbnew/board_items_to_polygon_shape_transform.cpp#L613
// see pcbnew/board_items_to_polygon_shape_transform.cpp
wxPoint corners[4];
aPad->BuildPadPolygon( corners, wxSize( 0, 0), aPad->GetOrientation() );
@@ -415,38 +418,34 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
*aPad ) );
// Add the PAD contours
// !TODO: check the corners because it cannot add
// roundsegments that are in the same start and end position
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[0],
corners3DU[1],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[1],
corners3DU[2],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[2],
corners3DU[3],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[3],
corners3DU[0],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
// Round segments cannot have 0-length elements, so we approximate them
// as a small circle
for( int i = 1; i <= 4; i++ )
{
if( Is_segment_a_circle( corners3DU[i - 1], corners3DU[i & 3] ) )
{
aDstContainer->Add( new CFILLEDCIRCLE2D( corners3DU[i - 1],
aClearanceValue.x * m_biuTo3Dunits,
*aPad ) );
}
else
{
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[i - 1],
corners3DU[i & 3],
aClearanceValue.x * 2.0f * m_biuTo3Dunits,
*aPad ) );
}
}
}
break;
case PAD_SHAPE_ROUNDRECT:
{
const int pad_radius = aPad->GetRoundRectCornerRadius();
const int rounding_radius = pad_radius + aClearanceValue;
wxSize shapesize( aPad->GetSize() );
shapesize.x += aClearanceValue * 2;
shapesize.y += aClearanceValue * 2;
shapesize.x += aClearanceValue.x * 2;
shapesize.y += aClearanceValue.y * 2;
int rounding_radius = aPad->GetRoundRectCornerRadius( shapesize );
wxPoint corners[4];
@@ -471,27 +470,24 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
*aPad ) );
// Add the PAD contours
// !TODO: check the corners because it cannot add
// roundsegments that are in the same start and end position
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[0],
corners3DU[1],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[1],
corners3DU[2],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[2],
corners3DU[3],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[3],
corners3DU[0],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
// Round segments cannot have 0-length elements, so we approximate them
// as a small circle
for( int i = 1; i <= 4; i++ )
{
if( Is_segment_a_circle( corners3DU[i - 1], corners3DU[i & 3] ) )
{
aDstContainer->Add( new CFILLEDCIRCLE2D( corners3DU[i - 1],
rounding_radius * m_biuTo3Dunits,
*aPad ) );
}
else
{
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[i - 1],
corners3DU[i & 3],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
}
}
}
break;
@@ -501,12 +497,8 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
polyList.Append( aPad->GetCustomShapeAsPolygon() );
aPad->CustomShapeAsPolygonToBoardPosition( &polyList, aPad->ShapePos(), aPad->GetOrientation() );
if( aClearanceValue )
polyList.Inflate( aClearanceValue, 32 );
// This convert the poly in outline and holes
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
polyList.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
if( aClearanceValue.x )
polyList.Inflate( aClearanceValue.x, 32 );
// Add the PAD polygon
Convert_shape_line_polygon_to_triangles( polyList, *aDstContainer, m_biuTo3Dunits, *aPad );
@@ -576,7 +568,7 @@ COBJECT2D *CINFO3D_VISU::createNewPadDrill( const D_PAD* aPad, int aInflateValue
// board_items_to_polygon_shape_transform.cpp
void CINFO3D_VISU::createNewPad( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
const wxSize &aInflateValue ) const
wxSize aInflateValue ) const
{
switch( aPad->GetShape() )
{
@@ -584,7 +576,7 @@ void CINFO3D_VISU::createNewPad( const D_PAD* aPad,
case PAD_SHAPE_OVAL:
case PAD_SHAPE_ROUNDRECT:
case PAD_SHAPE_CUSTOM:
createNewPadWithClearance( aPad, aDstContainer, aInflateValue.x );
createNewPadWithClearance( aPad, aDstContainer, aInflateValue );
break;
case PAD_SHAPE_TRAPEZOID:
@@ -760,8 +752,9 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
PCB_LAYER_ID aLayerId,
int aClearanceValue )
{
// The full width of the lines to create:
const int linewidth = aDrawSegment->GetWidth() + (2 * aClearanceValue);
// The full width of the lines to create
// The extra 1 protects the inner/outer radius values from degeneracy
const int linewidth = aDrawSegment->GetWidth() + (2 * aClearanceValue) + 1;
switch( aDrawSegment->GetShape() )
{
@@ -770,7 +763,8 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
const SFVEC2F center3DU( aDrawSegment->GetCenter().x * m_biuTo3Dunits,
-aDrawSegment->GetCenter().y * m_biuTo3Dunits );
const float inner_radius = (aDrawSegment->GetRadius() - linewidth / 2) * m_biuTo3Dunits;
const float inner_radius =
std::max<float>( (aDrawSegment->GetRadius() - linewidth / 2) * m_biuTo3Dunits, 0.0 );
const float outter_radius = (aDrawSegment->GetRadius() + linewidth / 2) * m_biuTo3Dunits;
aDstContainer->Add( new CRING2D( center3DU,
@@ -819,19 +813,17 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
}
break;
case S_CURVE:
case S_POLYGON:
{
const int segcountforcircle = 16;
const int segcountforcircle = ARC_APPROX_SEGMENTS_COUNT_HIGH_DEF;
const double correctionFactor = GetCircleCorrectionFactor( segcountforcircle );
SHAPE_POLY_SET polyList;
aDrawSegment->TransformShapeWithClearanceToPolygon( polyList, aClearanceValue,
segcountforcircle, correctionFactor );
// This convert the poly in outline and holes
// Note: This two sequencial calls are need in order to get
// the triangulation function to work properly.
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
polyList.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
if( polyList.IsEmpty() ) // Just for caution
break;
@@ -841,9 +833,6 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
}
break;
case S_CURVE: // Bezier curve (not yet in use in KiCad)
break;
default:
break;
}
@@ -858,24 +847,14 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
PCB_LAYER_ID aLayerId )
{
// Copy the polys list because we have to simplify it
SHAPE_POLY_SET polyList = SHAPE_POLY_SET(aZoneContainer->GetFilledPolysList());
SHAPE_POLY_SET polyList = SHAPE_POLY_SET( aZoneContainer->GetFilledPolysList(), true );
// This convert the poly in outline and holes
// Note: This two sequencial calls are need in order to get
// the triangulation function to work properly.
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
polyList.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
if( polyList.IsEmpty() )
return;
Convert_shape_line_polygon_to_triangles( polyList,
*aDstContainer,
m_biuTo3Dunits,
*aZoneContainer );
// add filled areas outlines, which are drawn with thick lines segments
// /////////////////////////////////////////////////////////////////////////
for( int i = 0; i < polyList.OutlineCount(); ++i )
@@ -893,10 +872,11 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
if( Is_segment_a_circle( start3DU, end3DU ) )
{
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU,
(aZoneContainer->GetMinThickness() / 2) *
m_biuTo3Dunits,
*aZoneContainer ) );
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
if( radius > 0.0 ) // degenerated circles crash 3D viewer
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius ,
*aZoneContainer ) );
}
else
{
@@ -922,11 +902,12 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
if( Is_segment_a_circle( start3DU, end3DU ) )
{
aDstContainer->Add(
new CFILLEDCIRCLE2D( start3DU,
(aZoneContainer->GetMinThickness() / 2) *
m_biuTo3Dunits,
*aZoneContainer ) );
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
if( radius > 0.0 ) // degenerated circles crash 3D viewer
aDstContainer->Add(
new CFILLEDCIRCLE2D( start3DU, radius,
*aZoneContainer ) );
}
else
{
+68 -56
View File
@@ -40,7 +40,7 @@
#include "../3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h"
#include <openmp_mutex.h>
#include <class_board.h>
#include <class_module.h>
#include <class_pad.h>
@@ -52,6 +52,9 @@
#include <trigo.h>
#include <utility>
#include <vector>
#include <thread>
#include <algorithm>
#include <atomic>
#include <profile.h>
@@ -216,10 +219,10 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
layer_id.clear();
layer_id.reserve( m_copperLayersCount );
for( unsigned i = 0; i < DIM( cu_seq ); ++i )
for( unsigned i = 0; i < arrayDim( cu_seq ); ++i )
cu_seq[i] = ToLAYER_ID( B_Cu - i );
for( LSEQ cu = cu_set.Seq( cu_seq, DIM( cu_seq ) ); cu; ++cu )
for( LSEQ cu = cu_set.Seq( cu_seq, arrayDim( cu_seq ) ); cu; ++cu )
{
const PCB_LAYER_ID curr_layer_id = *cu;
@@ -745,7 +748,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
switch( item->Type() )
{
case PCB_LINE_T: // should not exist on copper layers
case PCB_LINE_T:
{
const int nrSegments =
GetNrSegmentsCircle( item->GetBoundingBox().GetSizeMax() );
@@ -788,36 +791,43 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// Add zones objects
// /////////////////////////////////////////////////////////////////////
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
std::atomic<size_t> nextZone( 0 );
std::atomic<size_t> threadsFinished( 0 );
size_t parallelThreadCount = std::max<size_t>( std::thread::hardware_concurrency(), 2 );
for( size_t ii = 0; ii < parallelThreadCount; ++ii )
{
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
if( aStatusTextReporter )
aStatusTextReporter->Report( wxString::Format( _( "Create zones of layer %s" ),
LSET::Name( curr_layer_id ) ) );
wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() );
CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id];
// ADD COPPER ZONES
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
std::thread t = std::thread( [&]()
{
const ZONE_CONTAINER* zone = m_board->GetArea( ii );
const PCB_LAYER_ID zonelayer = zone->GetLayer();
if( zonelayer == curr_layer_id )
for( size_t areaId = nextZone.fetch_add( 1 );
areaId < static_cast<size_t>( m_board->GetAreaCount() );
areaId = nextZone.fetch_add( 1 ) )
{
AddSolidAreasShapesToContainer( zone,
layerContainer,
curr_layer_id );
const ZONE_CONTAINER* zone = m_board->GetArea( areaId );
if( zone == nullptr )
break;
auto layerContainer = m_layers_container2D.find( zone->GetLayer() );
if( layerContainer != m_layers_container2D.end() )
AddSolidAreasShapesToContainer( zone, layerContainer->second,
zone->GetLayer() );
}
}
threadsFinished++;
} );
t.detach();
}
while( threadsFinished < parallelThreadCount )
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
#ifdef PRINT_STATISTICS_3D_VIEWER
printf( "T13: %.3f ms\n", (float)( GetRunningMicroSecs() - start_Time ) / 1e3 );
printf( "fill zones T13: %.3f ms\n", (float)( GetRunningMicroSecs() - start_Time ) / 1e3 );
start_Time = GetRunningMicroSecs();
#endif
@@ -825,29 +835,18 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) &&
(m_render_engine == RENDER_ENGINE_OPENGL_LEGACY) )
{
// Add zones poly contourns
// /////////////////////////////////////////////////////////////////////
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
// ADD COPPER ZONES
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
{
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
const ZONE_CONTAINER* zone = m_board->GetArea( ii );
wxASSERT( m_layers_poly.find( curr_layer_id ) != m_layers_poly.end() );
if( zone == nullptr )
break;
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
auto layerContainer = m_layers_poly.find( zone->GetLayer() );
// ADD COPPER ZONES
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
{
const ZONE_CONTAINER* zone = m_board->GetArea( ii );
const LAYER_NUM zonelayer = zone->GetLayer();
if( zonelayer == curr_layer_id )
{
zone->TransformSolidAreasShapesToPolygonSet( *layerPoly,
segcountforcircle,
correctionFactor );
}
}
if( layerContainer != m_layers_poly.end() )
zone->TransformSolidAreasShapesToPolygonSet( *layerContainer->second, segcountforcircle, correctionFactor );
}
}
@@ -865,22 +864,35 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
if( GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) &&
(m_render_engine == RENDER_ENGINE_OPENGL_LEGACY) )
{
const int nLayers = layer_id.size();
std::atomic<size_t> nextItem( 0 );
std::atomic<size_t> threadsFinished( 0 );
#pragma omp parallel for
for( signed int lIdx = 0; lIdx < nLayers; ++lIdx )
size_t parallelThreadCount = std::min<size_t>(
std::max<size_t>( std::thread::hardware_concurrency(), 2 ),
layer_id.size() );
for( size_t ii = 0; ii < parallelThreadCount; ++ii )
{
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
std::thread t = std::thread( [&nextItem, &threadsFinished, &layer_id, this]()
{
for( size_t i = nextItem.fetch_add( 1 );
i < layer_id.size();
i = nextItem.fetch_add( 1 ) )
{
auto layerPoly = m_layers_poly.find( layer_id[i] );
wxASSERT( m_layers_poly.find( curr_layer_id ) != m_layers_poly.end() );
if( layerPoly != m_layers_poly.end() )
// This will make a union of all added contours
layerPoly->second->Simplify( SHAPE_POLY_SET::PM_FAST );
}
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
threadsFinished++;
} );
wxASSERT( layerPoly != NULL );
// This will make a union of all added contourns
layerPoly->Simplify( SHAPE_POLY_SET::PM_FAST );
t.detach();
}
while( threadsFinished < parallelThreadCount )
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
#ifdef PRINT_STATISTICS_3D_VIEWER
@@ -961,7 +973,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// User layers are not drawn here, only technical layers
for( LSEQ seq = LSET::AllNonCuMask().Seq( teckLayerList, DIM( teckLayerList ) );
for( LSEQ seq = LSET::AllNonCuMask().Seq( teckLayerList, arrayDim( teckLayerList ) );
seq;
++seq )
{
+12 -1
View File
@@ -52,8 +52,19 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
case PAD_SHAPE_CIRCLE:
case PAD_SHAPE_OVAL:
case PAD_SHAPE_ROUNDRECT:
aPad->TransformShapeWithClearanceToPolygon( aCornerBuffer, aInflateValue.x,
{
// We are using TransformShapeWithClearanceToPolygon to build the shape.
// Currently, this method uses only the same inflate value for X and Y dirs.
// so because here this is not the case, we use a inflated dummy pad to build
// the polygonal shape
// TODO: remove this dummy pad when TransformShapeWithClearanceToPolygon will use
// a wxSize to inflate the pad size
D_PAD dummy( *aPad );
wxSize new_size = aPad->GetSize() + aInflateValue + aInflateValue;
dummy.SetSize( new_size );
dummy.TransformShapeWithClearanceToPolygon( aCornerBuffer, 0,
aSegmentsPerCircle, aCorrectionFactor );
}
break;
case PAD_SHAPE_TRAPEZOID:
+173 -100
View File
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -28,6 +28,7 @@
*/
#include <GL/glew.h> // Must be included first
#include <wx/tokenzr.h>
#include "../common_ogl/openGL_includes.h"
#include "../common_ogl/ogl_utils.h"
@@ -39,19 +40,18 @@
#include <class_board.h>
#include "status_text_reporter.h"
#include <gl_context_mgr.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
#include <profile.h> // To use GetRunningMicroSecs or another profiling utility
#include <bitmaps.h>
#include <hotkeys_basic.h>
#include <menus_helpers.h>
extern struct EDA_HOTKEY_CONFIG g_3DViewer_Hokeys_Descr[];
/**
* Trace mask used to enable or disable the trace output of this class.
* The debug output can be turned on by setting the WXTRACE environment variable to
* "KI_TRACE_EDA_3D_CANVAS". See the wxWidgets documentation on wxLogTrace for
* more information.
* Flag to enable 3D canvas debug tracing.
*
* Use "KI_TRACE_EDA_3D_CANVAS" to enable.
*
* @ingroup trace_env_vars
*/
const wxChar * EDA_3D_CANVAS::m_logTrace = wxT( "KI_TRACE_EDA_3D_CANVAS" );
@@ -64,16 +64,16 @@ BEGIN_EVENT_TABLE( EDA_3D_CANVAS, wxGLCanvas )
EVT_CHAR_HOOK( EDA_3D_CANVAS::OnCharHook )
// mouse events
EVT_LEFT_DOWN( EDA_3D_CANVAS::OnLeftDown )
EVT_LEFT_UP( EDA_3D_CANVAS::OnLeftUp )
EVT_MIDDLE_UP( EDA_3D_CANVAS::OnMiddleUp )
EVT_LEFT_DOWN( EDA_3D_CANVAS::OnLeftDown )
EVT_LEFT_UP( EDA_3D_CANVAS::OnLeftUp )
EVT_MIDDLE_UP( EDA_3D_CANVAS::OnMiddleUp )
EVT_MIDDLE_DOWN( EDA_3D_CANVAS::OnMiddleDown)
EVT_RIGHT_DOWN( EDA_3D_CANVAS::OnRightClick )
EVT_MOUSEWHEEL( EDA_3D_CANVAS::OnMouseWheel )
EVT_MOTION( EDA_3D_CANVAS::OnMouseMove )
EVT_RIGHT_DOWN( EDA_3D_CANVAS::OnRightClick )
EVT_MOUSEWHEEL( EDA_3D_CANVAS::OnMouseWheel )
EVT_MOTION( EDA_3D_CANVAS::OnMouseMove )
#if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
EVT_MAGNIFY( EDA_3D_CANVAS::OnMagnify )
EVT_MAGNIFY( EDA_3D_CANVAS::OnMagnify )
#endif
// other events
@@ -90,7 +90,6 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent,
const int *aAttribList,
BOARD *aBoard,
CINFO3D_VISU &aSettings , S3D_CACHE *a3DCachePointer ) :
HIDPI_GL_CANVAS( aParent,
wxID_ANY,
aAttribList,
@@ -101,9 +100,8 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent,
m_settings( aSettings )
{
// Run test cases in debug mode, once.
//DBG( Run_3d_viewer_test_cases() );
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::EDA_3D_CANVAS" ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::EDA_3D_CANVAS" );
m_editing_timeout_timer.SetOwner( this );
Connect( m_editing_timeout_timer.GetId(),
@@ -130,6 +128,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent,
m_is_opengl_initialized = false;
m_render_raytracing_was_requested = false;
m_opengl_supports_raytracing = false;
m_parentStatusBar = NULL;
m_glRC = NULL;
@@ -154,7 +153,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent,
EDA_3D_CANVAS::~EDA_3D_CANVAS()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::~EDA_3D_CANVAS" ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::~EDA_3D_CANVAS" );
releaseOpenGL();
}
@@ -172,7 +171,7 @@ void EDA_3D_CANVAS::releaseOpenGL()
delete m_3d_render_ogl_legacy;
m_3d_render_ogl_legacy = NULL;
// This is just a copy of a pointer, can safelly be set to NULL
// This is just a copy of a pointer, can safely be set to NULL
m_3d_render = NULL;
GL_CONTEXT_MANAGER::Get().UnlockCtx( m_glRC );
@@ -189,14 +188,16 @@ void EDA_3D_CANVAS::OnCloseWindow( wxCloseEvent &event )
event.Skip();
}
void EDA_3D_CANVAS::OnResize( wxSizeEvent &event )
{
this->Request_refresh();
}
bool EDA_3D_CANVAS::initializeOpenGL()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::initializeOpenGL" ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::initializeOpenGL" );
const GLenum err = glewInit();
@@ -210,11 +211,53 @@ bool EDA_3D_CANVAS::initializeOpenGL()
}
else
{
wxLogTrace( m_logTrace,
wxString( wxT( "EDA_3D_CANVAS::initializeOpenGL Using GLEW " ) ) +
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::initializeOpenGL Using GLEW version %s",
FROM_UTF8( (char*) glewGetString( GLEW_VERSION ) ) );
}
wxString version = FROM_UTF8( (char *) glGetString( GL_VERSION ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::%s OpenGL version string %s.",
__WXFUNCTION__, version );
// Extract OpenGL version from string. This method is used because prior to OpenGL 2,
// getting the OpenGL major and minor version as integers didn't exist.
wxString tmp;
wxStringTokenizer tokenizer( version );
m_opengl_supports_raytracing = true;
if( tokenizer.HasMoreTokens() )
{
long major = 0;
long minor = 0;
tmp = tokenizer.GetNextToken();
tokenizer.SetString( tmp, wxString( "." ) );
if( tokenizer.HasMoreTokens() )
tokenizer.GetNextToken().ToLong( &major );
if( tokenizer.HasMoreTokens() )
tokenizer.GetNextToken().ToLong( &minor );
if( major < 2 || ( (major == 2 ) && (minor < 1) ) )
{
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::%s OpenGL ray tracing not supported.",
__WXFUNCTION__ );
if( GetParent() )
{
wxCommandEvent evt( wxEVT_MENU, ID_DISABLE_RAY_TRACING );
GetParent()->ProcessWindowEvent( evt );
}
m_opengl_supports_raytracing = false;
}
}
m_is_opengl_initialized = true;
return true;
@@ -260,14 +303,11 @@ void EDA_3D_CANVAS::DisplayStatus()
{
wxString msg;
msg.Printf( wxT( "dx %3.2f" ), m_settings.CameraGet().GetCameraPos().x );
msg.Printf( "dx %3.2f", m_settings.CameraGet().GetCameraPos().x );
m_parentStatusBar->SetStatusText( msg, 1 );
msg.Printf( wxT( "dy %3.2f" ), m_settings.CameraGet().GetCameraPos().y );
msg.Printf( "dy %3.2f", m_settings.CameraGet().GetCameraPos().y );
m_parentStatusBar->SetStatusText( msg, 2 );
//msg.Printf( _( "Zoom: %3.1f" ), 50 * m_settings.CameraGet().ZoomGet() );
//m_parentStatusBar->SetStatusText( msg, 3 );
}
}
@@ -282,7 +322,7 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
// SwapBuffer requires the window to be shown before calling
if( !IsShownOnScreen() )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnPaint !IsShown" ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnPaint !IsShown" );
return;
}
@@ -290,7 +330,7 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
// ensure this parent is still alive. When it is closed before the viewer
// frame, a paint event can be generated after the parent is closed,
// therefore with invalid board.
// This is dependant of the platform.
// This is dependent of the platform.
// Especially on OSX, but also on Windows, it frequently happens
if( !GetParent()->GetParent()->IsShown() )
return; // The parent board editor frame is no more alive
@@ -301,7 +341,6 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
//WX_STRING_REPORTER errorReporter( &err_messages );
STATUS_TEXT_REPORTER activityReporter( m_parentStatusBar, 0 );
unsigned strtime = GetRunningMicroSecs();
// "Makes the OpenGL state that is represented by the OpenGL rendering
@@ -320,11 +359,10 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
// multiple canvases: If we updated the viewport in the wxSizeEvent
// handler, changing the size of one canvas causes a viewport setting that
// is wrong when next another canvas is repainted.
wxSize clientSize = GetClientSize();
wxSize clientSize = GetNativePixelSize();
const bool windows_size_changed = m_settings.CameraGet().SetCurWindowSize( clientSize );
// Initialize openGL if need
// /////////////////////////////////////////////////////////////////////////
if( !m_is_opengl_initialized )
@@ -337,8 +375,15 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
}
}
// Don't attend to ray trace if OpenGL doesn't support it.
if( !m_opengl_supports_raytracing )
{
m_3d_render = m_3d_render_ogl_legacy;
m_render_raytracing_was_requested = false;
m_settings.RenderEngineSet( RENDER_ENGINE_OPENGL_LEGACY );
}
// Check if a raytacing was requented and need to switch to raytracing mode
// Check if a raytacing was requested and need to switch to raytracing mode
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
{
const bool was_camera_changed = m_settings.CameraGet().ParametersChanged();
@@ -356,7 +401,6 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
}
}
float curtime_delta_s = 0.0f;
if( m_camera_is_moving )
@@ -380,7 +424,6 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
}
}
// It will return true if the render request a new redraw
bool requested_redraw = false;
@@ -409,7 +452,7 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
{
if( m_mouse_was_moved || m_camera_is_moving )
{
// Calculation time in miliseconds
// Calculation time in milliseconds
const double calculation_time = (double)( GetRunningMicroSecs() - strtime) / 1e3;
activityReporter.Report( wxString::Format( _( "Render time %.0f ms ( %.1f fps)" ),
@@ -433,7 +476,7 @@ void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
void EDA_3D_CANVAS::OnEraseBackground( wxEraseEvent &event )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnEraseBackground" ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnEraseBackground" );
// Do nothing, to avoid flashing.
}
@@ -442,7 +485,7 @@ void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent &event )
{
bool mouseActivity = false;
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnMouseWheel" ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnMouseWheel" );
if( m_camera_is_moving )
return;
@@ -508,6 +551,8 @@ void EDA_3D_CANVAS::OnMouseWheel( wxMouseEvent &event )
#if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
void EDA_3D_CANVAS::OnMagnify( wxMouseEvent& event )
{
SetFocus();
if( m_camera_is_moving )
return;
@@ -531,7 +576,7 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent &event )
if( m_camera_is_moving )
return;
m_settings.CameraGet().SetCurWindowSize( GetClientSize() );
m_settings.CameraGet().SetCurWindowSize( GetNativePixelSize() );
if( event.Dragging() )
{
@@ -555,6 +600,7 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent &event )
void EDA_3D_CANVAS::OnLeftDown( wxMouseEvent &event )
{
SetFocus();
stop_editingTimeOut_Timer();
}
@@ -574,6 +620,7 @@ void EDA_3D_CANVAS::OnLeftUp( wxMouseEvent &event )
void EDA_3D_CANVAS::OnMiddleDown( wxMouseEvent &event )
{
SetFocus();
stop_editingTimeOut_Timer();
}
@@ -597,7 +644,9 @@ void EDA_3D_CANVAS::OnMiddleUp( wxMouseEvent &event )
void EDA_3D_CANVAS::OnRightClick( wxMouseEvent &event )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnRightClick" ) );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnRightClick" );
SetFocus();
if( m_camera_is_moving )
return;
@@ -609,71 +658,71 @@ void EDA_3D_CANVAS::OnRightClick( wxMouseEvent &event )
pos.x = event.GetX();
pos.y = event.GetY();
msg = AddHotkeyName( _( "Zoom +" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Zoom +" ), GetHotkeyConfig(),
ID_POPUP_ZOOMIN );
AddMenuItem( &PopUpMenu, ID_POPUP_ZOOMIN,
msg, KiBitmap( zoom_in_xpm ) );
msg = AddHotkeyName( _( "Zoom -" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Zoom -" ), GetHotkeyConfig(),
ID_POPUP_ZOOMOUT );
AddMenuItem( &PopUpMenu, ID_POPUP_ZOOMOUT,
msg, KiBitmap( zoom_out_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Top View" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Top View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_ZPOS );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_ZPOS,
msg, KiBitmap( axis3d_top_xpm ) );
msg = AddHotkeyName( _( "Bottom View" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Bottom View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_ZNEG );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_ZNEG,
msg, KiBitmap( axis3d_bottom_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Right View" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Right View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_XPOS );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_XPOS,
msg, KiBitmap( axis3d_right_xpm ) );
msg = AddHotkeyName( _( "Left View" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Left View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_XNEG );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_XNEG,
msg, KiBitmap( axis3d_left_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Front View" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Front View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_YPOS );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_YPOS,
msg, KiBitmap( axis3d_front_xpm ) );
msg = AddHotkeyName( _( "Back View" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Back View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_YNEG );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_YNEG,
msg, KiBitmap( axis3d_back_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Move Left <-" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Move Left <-" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_LEFT );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_LEFT,
msg, KiBitmap( left_xpm ) );
msg = AddHotkeyName( _( "Move Right ->" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Move Right ->" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_RIGHT );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_RIGHT,
msg, KiBitmap( right_xpm ) );
msg = AddHotkeyName( _( "Move Up ^" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Move Up ^" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_UP );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_UP,
msg, KiBitmap( up_xpm ) );
msg = AddHotkeyName( _( "Move Down" ), g_3DViewer_Hokeys_Descr,
msg = AddHotkeyName( _( "Move Down" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_DOWN );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_DOWN,
msg, KiBitmap( down_xpm ) );
@@ -686,7 +735,7 @@ void EDA_3D_CANVAS::OnPopUpMenu( wxCommandEvent &event )
{
int id = event.GetId();
wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnPopUpMenu id:%d" ), id );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnPopUpMenu id:%d", id );
int key = 0;
@@ -701,27 +750,27 @@ void EDA_3D_CANVAS::OnPopUpMenu( wxCommandEvent &event )
break;
case ID_POPUP_VIEW_XPOS:
key = 'x';
break;
case ID_POPUP_VIEW_XNEG:
key = 'X';
break;
case ID_POPUP_VIEW_YPOS:
key = 'y';
case ID_POPUP_VIEW_XNEG:
key = GR_KB_SHIFT + 'X';
break;
case ID_POPUP_VIEW_YNEG:
case ID_POPUP_VIEW_YPOS:
key = 'Y';
break;
case ID_POPUP_VIEW_YNEG:
key = GR_KB_SHIFT + 'Y';
break;
case ID_POPUP_VIEW_ZPOS:
key = 'z';
key = 'Z';
break;
case ID_POPUP_VIEW_ZNEG:
key = 'Z';
key = GR_KB_SHIFT + 'Z';
break;
case ID_POPUP_MOVE3D_LEFT:
@@ -750,20 +799,35 @@ void EDA_3D_CANVAS::OnPopUpMenu( wxCommandEvent &event )
void EDA_3D_CANVAS::OnCharHook( wxKeyEvent &event )
{
//wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnCharHook" ) );
//wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnCharHook" );
event.Skip();
}
void EDA_3D_CANVAS::OnKeyEvent( wxKeyEvent& event )
{
//wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnKeyEvent" ) );
//wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnKeyEvent" );
int localkey = event.GetKeyCode();
// Use only upper char values in comparisons
// (the Shift modifier is a separate attribute)
if( (localkey >= 'a') && (localkey <= 'z') )
localkey += 'A' - 'a';
if( m_camera_is_moving )
return;
SetView3D( event.GetKeyCode() );
event.Skip();
if( event.ShiftDown() )
localkey |= GR_KB_SHIFT;
if( event.ControlDown() )
localkey |= GR_KB_CTRL;
if( event.AltDown() )
localkey |= GR_KB_ALT;
if( !SetView3D( localkey ) )
event.Skip();
}
@@ -875,54 +939,55 @@ void EDA_3D_CANVAS::move_pivot_based_on_cur_mouse_position()
}
void EDA_3D_CANVAS::SetView3D( int keycode )
bool EDA_3D_CANVAS::SetView3D( int aKeycode )
{
if( m_camera_is_moving )
return;
return false;
const float delta_move = m_delta_move_step_factor * m_settings.CameraGet().ZoomGet();
const float arrow_moving_time_speed = 8.0f;
bool handled = false;
switch( keycode )
switch( aKeycode )
{
case WXK_SPACE:
move_pivot_based_on_cur_mouse_position();
return;
return true;
case WXK_LEFT:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( -delta_move, 0.0f, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_RIGHT:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( +delta_move, 0.0f, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_UP:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( 0.0f, +delta_move, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_DOWN:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( 0.0f, -delta_move, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_HOME:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
request_start_moving_camera( glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case WXK_END:
break;
@@ -932,25 +997,28 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().RotateZ_T1( glm::radians( 45.0f ) );
request_start_moving_camera();
handled = true;
break;
case WXK_F1:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
if( m_settings.CameraGet().Zoom_T1( 1.4f ) )
request_start_moving_camera( 3.0f );
return;
return true;
case WXK_F2:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
if( m_settings.CameraGet().Zoom_T1( 1/1.4f ) )
request_start_moving_camera( 3.0f );
return;
return true;
case '+':
break;
case '-':
break;
@@ -959,6 +1027,7 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL,
!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL ) );
ReloadRequest();
handled = true;
break;
case 's':
@@ -966,6 +1035,7 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT,
!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT ) );
ReloadRequest();
handled = true;
break;
case 'v':
@@ -973,6 +1043,7 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL,
!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL ) );
ReloadRequest();
handled = true;
break;
case 'r':
@@ -981,62 +1052,62 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
request_start_moving_camera( glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case 'x':
case 'X':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateZ_T1( glm::radians( -90.0f ) );
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
request_start_moving_camera();
return;
return true;
case 'X':
case GR_KB_SHIFT + 'X':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateZ_T1( glm::radians( 90.0f ) );
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
request_start_moving_camera();
return;
return true;
case 'y':
case 'Y':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
request_start_moving_camera();
return;
return true;
case 'Y':
case GR_KB_SHIFT + 'Y':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
m_settings.CameraGet().RotateZ_T1( glm::radians( -180.0f ) );
request_start_moving_camera();
return;
case 'z':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
request_start_moving_camera(
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case 'Z':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateX_T1( glm::radians( -180.0f ) );
request_start_moving_camera(
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case GR_KB_SHIFT + 'Z':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateY_T1( glm::radians( 180.0f ) );
request_start_moving_camera(
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return true;
default:
return;
return false;
}
m_mouse_was_moved = true;
@@ -1045,6 +1116,8 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
DisplayStatus();
Request_refresh();
return handled;
}
+19 -7
View File
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -47,7 +47,6 @@
/**
* Class EDA_3D_CANVAS
* Implement a canvas based on a wxGLCanvas
*/
class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
@@ -100,9 +99,11 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
/**
* @brief SetView3D - Helper function to call view commands
* @param keycode: ascii key commands
* @param aKeycode: ascii key commands
* @return true if the key code was handled,
* false if no command found for this code.
*/
void SetView3D( int keycode );
bool SetView3D( int aKeycode );
/**
* @brief RenderEngineChanged - Notify that the render engine was changed
@@ -121,7 +122,18 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
*/
void Request_refresh( bool aRedrawImmediately = true );
private:
void OnKeyEvent( wxKeyEvent& event );
bool SupportsRayTracing() const { return m_opengl_supports_raytracing; }
bool IsOpenGLInitialized() const { return m_is_opengl_initialized; }
/**
* Return a structure containing currently used hotkey mapping.
*/
EDA_HOTKEY_CONFIG* GetHotkeyConfig() const;
private:
void OnPaint( wxPaintEvent &event );
@@ -149,8 +161,6 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
void OnCharHook( wxKeyEvent& event );
void OnKeyEvent( wxKeyEvent& event );
void OnTimerTimeout_Editing( wxTimerEvent& event );
/**
@@ -268,6 +278,8 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
/// Flags that the user requested the current view to be render with raytracing
bool m_render_raytracing_was_requested;
bool m_opengl_supports_raytracing;
/**
* Trace mask used to enable or disable the trace output of this class.
* The debug output can be turned on by setting the WXTRACE environment variable to
+1 -1
View File
@@ -1 +1 @@
#define PLUGINDIR "@CMAKE_INSTALL_LIBDIR@"
#define PLUGINDIR "@CMAKE_INSTALL_FULL_LIBDIR@"
@@ -35,7 +35,7 @@
#include "../../3d_fastmath.h"
#include <trigo.h>
#include <project.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
#include <profile.h> // To use GetRunningMicroSecs or another profiling utility
void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CFILLEDCIRCLE2D * aFilledCircle,
@@ -369,7 +369,8 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
// /////////////////////////////////////////////////////////////////////////
CCONTAINER2D boardContainer;
Convert_shape_line_polygon_to_triangles( m_settings.GetBoardPoly(),
SHAPE_POLY_SET tmpBoard = m_settings.GetBoardPoly();
Convert_shape_line_polygon_to_triangles( tmpBoard,
boardContainer,
m_settings.BiuTo3Dunits(),
(const BOARD_ITEM &)*m_settings.GetBoard() );
@@ -500,11 +501,7 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
get_layer_z_pos( layer_id, layer_z_top, layer_z_bot );
m_ogl_disp_lists_layers_holes_outer[layer_id] = generate_holes_display_list(
container->GetList(),
*poly,
layer_z_top,
layer_z_bot,
false );
container->GetList(), *poly, layer_z_top, layer_z_bot, false );
}
for( MAP_POLY::const_iterator ii = innerMapHoles.begin();
@@ -518,11 +515,7 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
get_layer_z_pos( layer_id, layer_z_top, layer_z_bot );
m_ogl_disp_lists_layers_holes_inner[layer_id] = generate_holes_display_list(
container->GetList(),
*poly,
layer_z_top,
layer_z_bot,
false );
container->GetList(), *poly, layer_z_top, layer_z_bot, false );
}
}
@@ -530,7 +523,6 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
generate_3D_Vias_and_Pads();
// Add layers maps
// /////////////////////////////////////////////////////////////////////////
if( aStatusTextReporter )
aStatusTextReporter->Report( _( "Load OpenGL: layers" ) );
@@ -571,38 +563,33 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
switch( object2d_A->GetObjectType() )
{
case OBJ2D_FILLED_CIRCLE:
add_object_to_triangle_layer( (const CFILLEDCIRCLE2D *)object2d_A,
layerTriangles,
layer_z_top, layer_z_bot );
case OBJ2D_FILLED_CIRCLE:
add_object_to_triangle_layer( (const CFILLEDCIRCLE2D *)object2d_A,
layerTriangles, layer_z_top, layer_z_bot );
break;
case OBJ2D_POLYGON4PT:
add_object_to_triangle_layer( (const CPOLYGON4PTS2D *)object2d_A,
layerTriangles,
layer_z_top, layer_z_bot );
case OBJ2D_POLYGON4PT:
add_object_to_triangle_layer( (const CPOLYGON4PTS2D *)object2d_A,
layerTriangles, layer_z_top, layer_z_bot );
break;
case OBJ2D_RING:
add_object_to_triangle_layer( (const CRING2D *)object2d_A,
layerTriangles,
layer_z_top, layer_z_bot );
case OBJ2D_RING:
add_object_to_triangle_layer( (const CRING2D *)object2d_A,
layerTriangles, layer_z_top, layer_z_bot );
break;
case OBJ2D_TRIANGLE:
add_object_to_triangle_layer( (const CTRIANGLE2D *)object2d_A,
layerTriangles,
layer_z_top, layer_z_bot );
case OBJ2D_TRIANGLE:
add_object_to_triangle_layer( (const CTRIANGLE2D *)object2d_A,
layerTriangles, layer_z_top, layer_z_bot );
break;
case OBJ2D_ROUNDSEG:
add_object_to_triangle_layer( (const CROUNDSEGMENT2D *) object2d_A,
layerTriangles,
layer_z_top, layer_z_bot );
case OBJ2D_ROUNDSEG:
add_object_to_triangle_layer( (const CROUNDSEGMENT2D *) object2d_A,
layerTriangles, layer_z_top, layer_z_bot );
break;
default:
wxFAIL_MSG("C3D_RENDER_OGL_LEGACY: Object type is not implemented");
default:
wxFAIL_MSG("C3D_RENDER_OGL_LEGACY: Object type is not implemented");
break;
}
}
@@ -614,11 +601,9 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
{
const SHAPE_POLY_SET *polyList = map_poly.at( layer_id );
layerTriangles->AddToMiddleContourns( *polyList,
layer_z_bot,
layer_z_top,
m_settings.BiuTo3Dunits(),
false );
if( polyList->OutlineCount() > 0 )
layerTriangles->AddToMiddleContourns( *polyList, layer_z_bot, layer_z_top,
m_settings.BiuTo3Dunits(), false );
}
// Create display list
@@ -642,7 +627,7 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
if( aStatusTextReporter )
aStatusTextReporter->Report( _( "Loading 3D models" ) );
load_3D_models();
load_3D_models( aStatusTextReporter );
#ifdef PRINT_STATISTICS_3D_VIEWER
unsigned stats_end_models_Load_Time = GetRunningMicroSecs();
@@ -768,9 +753,11 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
{
const VIA *via = static_cast<const VIA*>(track);
const float holediameter = via->GetDrillValue() * m_settings.BiuTo3Dunits();
const float thickness = m_settings.GetCopperThickness3DU();
const float hole_inner_radius = ( holediameter / 2.0f );
const float holediameter = via->GetDrillValue() * m_settings.BiuTo3Dunits();
const float thickness = m_settings.GetCopperThickness3DU();
const int nrSegments = m_settings.GetNrSegmentsCircle( via->GetDrillValue() );
const double correctionFactor = m_settings.GetCircleCorrectionFactor( nrSegments );
const float hole_inner_radius = ( holediameter / 2.0f ) * correctionFactor;
const SFVEC2F via_center( via->GetStart().x * m_settings.BiuTo3Dunits(),
-via->GetStart().y * m_settings.BiuTo3Dunits() );
@@ -790,7 +777,7 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
hole_inner_radius + thickness,
ztop,
zbot,
m_settings.GetNrSegmentsCircle( via->GetDrillValue() ),
nrSegments,
layerTriangleVIA );
}
}
@@ -829,20 +816,20 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
// we use the hole diameter to calculate the seg count.
// for round holes, drillsize.x == drillsize.y
// for oblong holes, the diameter is the smaller of
// (drillsize.x, drillsize.y)
const int diam = std::min( drillsize.x, drillsize.y ) +
m_settings.GetCopperThicknessBIU() * 2;
const int segmentsPerCircle = m_settings.GetNrSegmentsCircle( diam );
// for slots, the diameter is the smaller of (drillsize.x, drillsize.y)
int copperThickness = m_settings.GetCopperThicknessBIU();
int radius = std::min( drillsize.x, drillsize.y ) / 2 + copperThickness;
int nrSegments = m_settings.GetNrSegmentsCircle( radius * 2 );
double correctionFactor = m_settings.GetCircleCorrectionFactor( nrSegments );
int correction = radius * ( correctionFactor - 1 );
pad->BuildPadDrillShapePolygon( tht_outer_holes_poly,
m_settings.GetCopperThicknessBIU(),
segmentsPerCircle );
copperThickness + correction,
nrSegments );
pad->BuildPadDrillShapePolygon( tht_inner_holes_poly,
0,
segmentsPerCircle );
correction,
nrSegments );
}
}
}
@@ -884,12 +871,8 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
const SFVEC2F &v2 = tri->GetP2();
const SFVEC2F &v3 = tri->GetP3();
add_triangle_top_bot( layerTriangles,
v1,
v2,
v3,
layer_z_top,
layer_z_bot );
add_triangle_top_bot( layerTriangles, v1, v2, v3,
layer_z_top, layer_z_bot );
}
wxASSERT( tht_outer_holes_poly.OutlineCount() > 0 );
@@ -897,16 +880,14 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
if( tht_outer_holes_poly.OutlineCount() > 0 )
{
layerTriangles->AddToMiddleContourns( tht_outer_holes_poly,
layer_z_bot,
layer_z_top,
layer_z_bot, layer_z_top,
m_settings.BiuTo3Dunits(),
false );
m_ogl_disp_list_pads_holes = new CLAYERS_OGL_DISP_LISTS(
*layerTriangles,
m_ogl_circle_texture, // not need
layer_z_top,
layer_z_top );
layer_z_top, layer_z_top );
}
delete layerTriangles;
@@ -921,7 +902,7 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
* cache for this render. (cache based on C_OGL_3DMODEL with associated
* openGL lists in GPU memory)
*/
void C3D_RENDER_OGL_LEGACY::load_3D_models()
void C3D_RENDER_OGL_LEGACY::load_3D_models( REPORTER *aStatusTextReporter )
{
if( (!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL )) &&
(!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT )) &&
@@ -930,8 +911,7 @@ void C3D_RENDER_OGL_LEGACY::load_3D_models()
// Go for all modules
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
module;
module = module->Next() )
module; module = module->Next() )
{
if( !module->Models().empty() )
{
@@ -943,7 +923,18 @@ void C3D_RENDER_OGL_LEGACY::load_3D_models()
{
if( !sM->m_Filename.empty() )
{
if( aStatusTextReporter )
{
// Display the short filename of the 3D model loaded:
// (the full name is usually too long to be displayed)
wxFileName fn( sM->m_Filename );
wxString msg;
msg.Printf( _( "Loading %s" ), fn.GetFullName() );
aStatusTextReporter->Report( msg );
}
// Check if the model is not present in our cache map
// (Not already loaded in memory)
if( m_3dmodel_map.find( sM->m_Filename ) == m_3dmodel_map.end() )
{
// It is not present, try get it from cache
@@ -175,8 +175,7 @@ void C3D_RENDER_OGL_LEGACY::render_3D_arrows()
void C3D_RENDER_OGL_LEGACY::setupMaterials()
{
memset( &m_materials, 0, sizeof( m_materials ) );
m_materials = {};
if( m_settings.GetFlag( FL_USE_REALISTIC_MODE ) )
{
@@ -174,7 +174,7 @@ private:
void generate_3D_Vias_and_Pads();
void load_3D_models();
void load_3D_models( REPORTER *aStatusTextReporter );
/**
* @brief render_3D_models
@@ -218,7 +218,7 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel,
glDisableClientState( GL_NORMAL_ARRAY );
glDisableClientState( GL_VERTEX_ARRAY );
glFinish();
glFlush();
delete [] pColorRGBA;
}
@@ -319,7 +319,7 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel,
for( unsigned int mesh_i = 0; mesh_i < a3DModel.m_MeshesSize; ++mesh_i )
m_model_bbox.Union( m_meshs_bbox[mesh_i] );
glFinish();
glFlush();
}
}
@@ -30,6 +30,9 @@
#include "clayer_triangles.h"
#include <wx/debug.h> // For the wxASSERT
#include <mutex>
#include <thread>
#include <atomic>
CLAYER_TRIANGLE_CONTAINER::CLAYER_TRIANGLE_CONTAINER( unsigned int aNrReservedTriangles,
@@ -147,7 +150,7 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont
float zTop,
bool aInvertFaceDirection )
{
if( aContournPoints.size() > 4 )
if( aContournPoints.size() >= 4 )
{
// Calculate normals of each segment of the contourn
std::vector< SFVEC2F > contournNormals;
@@ -161,7 +164,6 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont
{
const SFVEC2F &v0 = aContournPoints[i + 0];
const SFVEC2F &v1 = aContournPoints[i + 1];
const SFVEC2F n = glm::normalize( v1 - v0 );
contournNormals[i] = SFVEC2F( n.y,-n.x );
@@ -173,7 +175,6 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont
{
const SFVEC2F &v0 = aContournPoints[i + 0];
const SFVEC2F &v1 = aContournPoints[i + 1];
const SFVEC2F n = glm::normalize( v1 - v0 );
contournNormals[i] = SFVEC2F( -n.y, n.x );
@@ -219,8 +220,8 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont
const SFVEC2F &v0 = aContournPoints[i + 0];
const SFVEC2F &v1 = aContournPoints[i + 1];
#pragma omp critical
{
std::lock_guard<std::mutex> lock( m_middle_layer_lock );
m_layer_middle_contourns_quads->AddQuad( SFVEC3F( v0.x, v0.y, zTop ),
SFVEC3F( v1.x, v1.y, zTop ),
SFVEC3F( v1.x, v1.y, zBot ),
@@ -279,8 +280,6 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_POLY_SET &aPolySet,
double aBiuTo3Du,
bool aInvertFaceDirection )
{
wxASSERT( aPolySet.OutlineCount() > 0 );
if( aPolySet.OutlineCount() == 0 )
return;
@@ -305,8 +304,7 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_POLY_SET &aPolySet,
m_layer_middle_contourns_quads->Reserve_More( nrContournPointsToReserve * 2,
true );
#pragma omp parallel for
for( signed int i = 0; i < aPolySet.OutlineCount(); ++i )
for( int i = 0; i < aPolySet.OutlineCount(); i++ )
{
// Add outline
const SHAPE_LINE_CHAIN& pathOutline = aPolySet.COutline( i );
@@ -35,6 +35,7 @@
#include <geometry/shape_line_chain.h>
#include <geometry/shape_poly_set.h>
#include <vector>
#include <mutex>
typedef std::vector< SFVEC3F > SFVEC3F_VECTOR;
@@ -174,6 +175,8 @@ public:
float zTop,
bool aInvertFaceDirection );
std::mutex m_middle_layer_lock;
CLAYER_TRIANGLE_CONTAINER *m_layer_top_segment_ends;
CLAYER_TRIANGLE_CONTAINER *m_layer_top_triangles;
CLAYER_TRIANGLE_CONTAINER *m_layer_middle_contourns_quads;
@@ -29,6 +29,7 @@
#include "ccontainer2d.h"
#include <vector>
#include <mutex>
#include <boost/range/algorithm/partition.hpp>
#include <boost/range/algorithm/nth_element.hpp>
#include <wx/debug.h>
@@ -46,6 +47,7 @@ CGENERICCONTAINER2D::CGENERICCONTAINER2D( OBJECT2D_TYPE aObjType )
void CGENERICCONTAINER2D::Clear()
{
std::lock_guard<std::mutex> lock( m_lock );
m_bbox.Reset();
for( LIST_OBJECT2D::iterator ii = m_objects.begin();
@@ -32,6 +32,7 @@
#include "../shapes2D/cobject2d.h"
#include <list>
#include <mutex>
typedef std::list<COBJECT2D *> LIST_OBJECT2D;
typedef std::list<const COBJECT2D *> CONST_LIST_OBJECT2D;
@@ -52,6 +53,7 @@ public:
{
if( aObject ) // Only add if it is a valid pointer
{
std::lock_guard<std::mutex> lock( m_lock );
m_objects.push_back( aObject );
m_bbox.Union( aObject->GetBBox() );
}
@@ -70,6 +72,7 @@ public:
CONST_LIST_OBJECT2D &aOutList ) const = 0;
private:
std::mutex m_lock;
};
@@ -46,7 +46,7 @@
#include <class_module.h>
#include <base_units.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
#include <profile.h> // To use GetRunningMicroSecs or another profiling utility
/**
* Scale convertion from 3d model units to pcb units
@@ -918,7 +918,6 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
}
m_accelerator = 0;
//m_accelerator = new CGRID( m_object_container );
m_accelerator = new CBVH_PBRT( m_object_container );
#ifdef PRINT_STATISTICS_3D_VIEWER
@@ -1211,7 +1210,7 @@ void C3D_RENDER_RAYTRACING::load_3D_models()
wxPoint pos = module->GetPosition();
glm::mat4 moduleMatrix = glm::mat4();
glm::mat4 moduleMatrix = glm::mat4( 1.0f );
moduleMatrix = glm::translate( moduleMatrix,
SFVEC3F( pos.x * m_settings.BiuTo3Dunits(),
File diff suppressed because it is too large Load Diff
@@ -131,7 +131,7 @@ private:
unsigned long int m_stats_start_rendering_time;
/// Save the number of blocks progress of the render
long m_nrBlocksRenderProgress;
size_t m_nrBlocksRenderProgress;
CPOSTSHADER_SSAO m_postshader_ssao;
@@ -165,7 +165,7 @@ private:
std::vector< SFVEC2UI > m_blockPositions;
/// this flags if a position was already processed (cleared each new render)
std::vector< bool > m_blockPositionsWasProcessed;
std::vector< int > m_blockPositionsWasProcessed;
/// this encodes the Morton code positions (on fast preview mode)
std::vector< SFVEC2UI > m_blockPositionsFast;
@@ -50,9 +50,9 @@ void RAY::Init( const SFVEC3F& o, const SFVEC3F& d )
// Amy Williams Steve Barrus R. Keith Morley Peter Shirley
// University of Utah
// http://people.csail.mit.edu/amy/papers/box-jgt.pdf
m_dirIsNeg[0] = m_Dir.x <= 0.0f;
m_dirIsNeg[1] = m_Dir.y <= 0.0f;
m_dirIsNeg[2] = m_Dir.z <= 0.0f;
m_dirIsNeg[0] = m_Dir.x < 0.0f;
m_dirIsNeg[1] = m_Dir.y < 0.0f;
m_dirIsNeg[2] = m_Dir.z < 0.0f;
// ray slope
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -740,31 +740,6 @@ void Polygon_Calc_BBox_3DU( const SHAPE_POLY_SET &aPolysList,
}
void Polygon_Convert( const KI_POLYGON &aPolygon,
ClipperLib::Path &aOutPath,
CBBOX2D &aOutBBox,
float aBiuTo3DunitsScale )
{
aOutPath.resize( aPolygon.size() );
aOutBBox.Reset();
for( unsigned i = 0; i < aPolygon.size(); i++ )
{
const KI_POLY_POINT point = *(aPolygon.begin() + i);
aOutPath[i] = ClipperLib::IntPoint( (ClipperLib::cInt)point.x(),
(ClipperLib::cInt)point.y() );
aOutBBox.Union( SFVEC2F( (float) point.x() * aBiuTo3DunitsScale,
(float)-point.y() * aBiuTo3DunitsScale ) );
}
aOutBBox.ScaleNextUp();
ClipperLib::CleanPolygon( aOutPath );
}
#ifdef DEBUG
static void polygon_Convert( const ClipperLib::Path &aPath,
SEGMENTS &aOutSegment,
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -33,7 +33,6 @@
#include "cobject2d.h"
#include "../accelerators/ccontainer2d.h"
#include <geometry/shape_poly_set.h>
#include <polygons_defs.h>
#include <vector>
@@ -155,11 +154,6 @@ void Polygon_Calc_BBox_3DU( const SHAPE_POLY_SET &aPolysList,
CBBOX2D &aOutBBox,
float aBiuTo3DunitsScale );
void Polygon_Convert( const KI_POLYGON &aPolygon,
ClipperLib::Path &aOutPath,
CBBOX2D &aOutBBox,
float aBiuTo3DunitsScale );
void Polygon2d_TestModule();
#endif // _CPOLYGON2D_H_
@@ -76,7 +76,7 @@ bool CROUNDSEGMENT2D::Intersects( const CBBOX2D &aBBox ) const
return false;
if( (aBBox.Max().x > m_bbox.Max().x) &&
(aBBox.Max().y > m_bbox.Max().x) &&
(aBBox.Max().y > m_bbox.Max().y) &&
(aBBox.Min().x < m_bbox.Min().x) &&
(aBBox.Min().y < m_bbox.Min().y)
)
@@ -35,9 +35,9 @@
#include <wx/glcanvas.h> // CALLBACK definition, needed on Windows
// alse needed on OSX to define __DARWIN__
#include <geometry/polygon_triangulation.h>
#include "../../../3d_fastmath.h"
#include <poly2tri/poly2tri.h>
CTRIANGLE2D::CTRIANGLE2D ( const SFVEC2F &aV1,
@@ -126,172 +126,28 @@ bool CTRIANGLE2D::IsPointInside( const SFVEC2F &aPoint ) const
const float c = 1.0f - a - b;
return 0.0f <= c && c <= 1.0f;
/*
return 0.0f <= a && a <= 1.0f &&
0.0f <= b && b <= 1.0f &&
0.0f <= c && c <= 1.0f;*/
}
template <class C> void FreeClear( C & cntr )
{
for( typename C::iterator it = cntr.begin();
it != cntr.end();
++it )
{
delete * it;
}
cntr.clear();
}
// Note: Please check edgeshrink.cpp in order to learn the EdgeShrink propose
#define APPLY_EDGE_SHRINK
#ifdef APPLY_EDGE_SHRINK
extern void EdgeShrink( std::vector<SFVEC2I64> &aPath );
#define POLY_SCALE_FACT 256
#define POLY_SCALE_FACT_INVERSE (1.0 / (double)(POLY_SCALE_FACT))
#endif
void Convert_shape_line_polygon_to_triangles( const SHAPE_POLY_SET &aPolyList,
void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET &aPolyList,
CGENERICCONTAINER2D &aDstContainer,
float aBiuTo3DunitsScale ,
const BOARD_ITEM &aBoardItem )
{
unsigned int nOutlines = aPolyList.OutlineCount();
aPolyList.CacheTriangulation();
const double conver_d = (double)aBiuTo3DunitsScale;
for( unsigned int idx = 0; idx < nOutlines; ++idx )
for( unsigned int j = 0; j < aPolyList.TriangulatedPolyCount(); j++ )
{
const SHAPE_LINE_CHAIN &outlinePath = aPolyList.COutline( idx );
auto triPoly = aPolyList.TriangulatedPolygon( j );
wxASSERT( outlinePath.PointCount() >= 3 );
std::vector<SFVEC2I64> scaledOutline;
scaledOutline.resize( outlinePath.PointCount() );
// printf("\nidx: %u\n", idx);
// Apply a scale to the points
for( unsigned int i = 0;
i < (unsigned int)outlinePath.PointCount();
++i )
for( size_t i = 0; i < triPoly->GetTriangleCount(); i++ )
{
const VECTOR2I& a = outlinePath.CPoint( i );
#ifdef APPLY_EDGE_SHRINK
scaledOutline[i] = SFVEC2I64( (glm::int64)a.x * POLY_SCALE_FACT,
(glm::int64)a.y * POLY_SCALE_FACT );
#else
scaledOutline[i] = SFVEC2I64( (glm::int64)a.x,
(glm::int64)a.y );
#endif
}
#ifdef APPLY_EDGE_SHRINK
// Apply a modification to the points
EdgeShrink( scaledOutline );
#endif
// Copy to a array of pointers
std::vector<p2t::Point*> polyline;
polyline.resize( outlinePath.PointCount() );
for( unsigned int i = 0;
i < (unsigned int)scaledOutline.size();
++i )
{
const SFVEC2I64 &a = scaledOutline[i];
//printf("%lu %lu\n", a.x, a.y);
polyline[i] = new p2t::Point( (double)a.x,
(double)a.y );
}
// Start creating the structured to be triangulated
p2t::CDT* cdt = new p2t::CDT( polyline );
// Add holes for this outline
unsigned int nHoles = aPolyList.HoleCount( idx );
std::vector< std::vector<p2t::Point*> > polylineHoles;
polylineHoles.resize( nHoles );
for( unsigned int idxHole = 0; idxHole < nHoles; ++idxHole )
{
const SHAPE_LINE_CHAIN &outlineHoles = aPolyList.CHole( idx,
idxHole );
wxASSERT( outlineHoles.PointCount() >= 3 );
std::vector<SFVEC2I64> scaledHole;
scaledHole.resize( outlineHoles.PointCount() );
// Apply a scale to the points
for( unsigned int i = 0;
i < (unsigned int)outlineHoles.PointCount();
++i )
{
const VECTOR2I &h = outlineHoles.CPoint( i );
#ifdef APPLY_EDGE_SHRINK
scaledHole[i] = SFVEC2I64( (glm::int64)h.x * POLY_SCALE_FACT,
(glm::int64)h.y * POLY_SCALE_FACT );
#else
scaledHole[i] = SFVEC2I64( (glm::int64)h.x,
(glm::int64)h.y );
#endif
}
#ifdef APPLY_EDGE_SHRINK
// Apply a modification to the points
EdgeShrink( scaledHole );
#endif
// Resize and reserve space
polylineHoles[idxHole].resize( outlineHoles.PointCount() );
for( unsigned int i = 0;
i < (unsigned int)outlineHoles.PointCount();
++i )
{
const SFVEC2I64 &h = scaledHole[i];
polylineHoles[idxHole][i] = new p2t::Point( h.x, h.y );
}
cdt->AddHole( polylineHoles[idxHole] );
}
// Triangulate
cdt->Triangulate();
// Hint: if you find any crashes on the triangulation poly2tri library,
// you can use the following site to debug the points and it will mark
// the errors in the polygon:
// http://r3mi.github.io/poly2tri.js/
// Get and add triangles
std::vector<p2t::Triangle*> triangles;
triangles = cdt->GetTriangles();
#ifdef APPLY_EDGE_SHRINK
const double conver_d = (double)aBiuTo3DunitsScale *
POLY_SCALE_FACT_INVERSE;
#else
const double conver_d = (double)aBiuTo3DunitsScale;
#endif
for( unsigned int i = 0; i < triangles.size(); ++i )
{
p2t::Triangle& t = *triangles[i];
p2t::Point& a = *t.GetPoint( 0 );
p2t::Point& b = *t.GetPoint( 1 );
p2t::Point& c = *t.GetPoint( 2 );
VECTOR2I a;
VECTOR2I b;
VECTOR2I c;
triPoly->GetTriangle( i, a, b, c );
aDstContainer.Add( new CTRIANGLE2D( SFVEC2F( a.x * conver_d,
-a.y * conver_d ),
@@ -302,15 +158,5 @@ void Convert_shape_line_polygon_to_triangles( const SHAPE_POLY_SET &aPolyList,
aBoardItem ) );
}
// Delete created data
delete cdt;
// Free points
FreeClear(polyline);
for( unsigned int idxHole = 0; idxHole < nHoles; ++idxHole )
{
FreeClear( polylineHoles[idxHole] );
}
}
}
@@ -68,7 +68,7 @@ public:
};
void Convert_shape_line_polygon_to_triangles( const SHAPE_POLY_SET &aPolyList,
void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET &aPolyList,
CGENERICCONTAINER2D &aDstContainer,
float aBiuTo3DunitsScale,
const BOARD_ITEM &aBoardItem );
@@ -1,89 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file edgeshrink.cpp
* @brief The edgeShrink function was found in the project clip2tri by the:
* Bitfighter project (http://bitfighter.org)
* https://github.com/raptor/clip2tri
* https://github.com/raptor/clip2tri/blob/f62a734d22733814b8a970ed8a68a4d94c24fa5f/clip2tri/clip2tri.cpp#L150
*/
#include <plugins/3dapi/xv3d_types.h>
#include <vector>
// clip2tri is Licenced under:
// The MIT License (MIT)
// Copyright (c) 2014 Bitfighter developers
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// Shrink large polygons by reducing each coordinate by 1 in the
// general direction of the last point as we wind around
//
// This normally wouldn't work in every case, but our upscaled-by-1000 polygons
// have little chance to create new duplicate points with this method.
//
// For information on why this was needed, see:
//
// https://github.com/greenm01/poly2tri/issues/90
//
#define S_INC 1
void EdgeShrink( std::vector<SFVEC2I64> &aPath )
{
unsigned int prev = aPath.size() - 1;
for( unsigned int i = 0; i < aPath.size(); i++ )
{
// Adjust coordinate by 1 depending on the direction
(aPath[i].x - aPath[prev].x) > 0 ? aPath[i].x -= S_INC :
aPath[i].x += S_INC;
(aPath[i].y - aPath[prev].y) > 0 ? aPath[i].y -= S_INC :
aPath[i].y += S_INC;
prev = i;
}
}
@@ -271,7 +271,7 @@ SFVEC3F CBBOX::Offset( const SFVEC3F &p ) const
// https://github.com/mmp/pbrt-v2/blob/master/src/core/geometry.cpp#L68
// /////////////////////////////////////////////////////////////////////////
#if 0
bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 )
bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) const
{
float t0 = 0.0f;
float t1 = FLT_MAX;
+39 -18
View File
@@ -31,6 +31,10 @@
#include "buffers_debug.h"
#include <string.h> // For memcpy
#include <atomic>
#include <thread>
#include <chrono>
#ifndef CLAMP
#define CLAMP(n, min, max) {if( n < min ) n=min; else if( n > max ) n = max;}
#endif
@@ -469,34 +473,51 @@ void CIMAGE::EfxFilter( CIMAGE *aInImg, E_FILTER aFilterType )
aInImg->m_wraping = WRAP_CLAMP;
m_wraping = WRAP_CLAMP;
#pragma omp parallel for
for( int iy = 0; iy < (int)m_height; iy++)
std::atomic<size_t> nextRow( 0 );
std::atomic<size_t> threadsFinished( 0 );
size_t parallelThreadCount = std::max<size_t>( std::thread::hardware_concurrency(), 2 );
for( size_t ii = 0; ii < parallelThreadCount; ++ii )
{
for( int ix = 0; ix < (int)m_width; ix++ )
std::thread t = std::thread( [&]()
{
int v = 0;
for( int sy = 0; sy < 5; sy++ )
for( size_t iy = nextRow.fetch_add( 1 );
iy < m_height;
iy = nextRow.fetch_add( 1 ) )
{
for( int sx = 0; sx < 5; sx++ )
for( size_t ix = 0; ix < m_width; ix++ )
{
int factor = filter.kernel[sx][sy];
unsigned char pixelv = aInImg->Getpixel( ix + sx - 2,
iy + sy - 2 );
int v = 0;
v += pixelv * factor;
for( size_t sy = 0; sy < 5; sy++ )
{
for( size_t sx = 0; sx < 5; sx++ )
{
int factor = filter.kernel[sx][sy];
unsigned char pixelv = aInImg->Getpixel( ix + sx - 2,
iy + sy - 2 );
v += pixelv * factor;
}
}
v /= filter.div;
v += filter.offset;
CLAMP(v, 0, 255);
//TODO: This needs to write to a separate buffer
m_pixels[ix + iy * m_width] = v;
}
}
v /= filter.div;
threadsFinished++;
} );
v += filter.offset;
CLAMP(v, 0, 255);
m_pixels[ix + iy * m_width] = v;
}
t.detach();
}
while( threadsFinished < parallelThreadCount )
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
+330
View File
@@ -0,0 +1,330 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file 3d_menubar.cpp
*/
#include <fctsys.h>
#include <eda_3d_viewer.h>
#include <3d_canvas/cinfo3d_visu.h>
#include <menus_helpers.h>
#include <3d_viewer_id.h>
#include "help_common_strings.h"
void EDA_3D_VIEWER::CreateMenuBar()
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::CreateMenuBar" );
wxMenuBar* menuBar = new wxMenuBar;
wxMenu* fileMenu = new wxMenu;
wxMenu* editMenu = new wxMenu;
wxMenu* viewMenu = new wxMenu;
wxMenu* prefsMenu = new wxMenu;
wxMenu* helpMenu = new wxMenu;
menuBar->Append( fileMenu, _( "&File" ) );
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_PNG,
_( "Export Current View as PNG..." ),
KiBitmap( export_xpm ) );
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_JPEG,
_( "Export Current View as JPEG..." ),
KiBitmap( export_xpm ) );
fileMenu->AppendSeparator();
AddMenuItem( fileMenu, wxID_EXIT,
_( "&Exit" ),
KiBitmap( exit_xpm ) );
menuBar->Append( editMenu, _( "&Edit" ) );
AddMenuItem( editMenu, ID_TOOL_SCREENCOPY_TOCLIBBOARD,
_( "Copy 3D Image" ),
KiBitmap( copy_xpm ) );
menuBar->Append( viewMenu, _( "&View" ) );
AddMenuItem( viewMenu, ID_ZOOM_IN,
_( "Zoom &In" ), HELP_ZOOM_IN,
KiBitmap( zoom_in_xpm ) );
AddMenuItem( viewMenu, ID_ZOOM_OUT,
_( "Zoom &Out" ), HELP_ZOOM_OUT,
KiBitmap( zoom_out_xpm ) );
AddMenuItem( viewMenu, ID_ZOOM_PAGE,
_( "Zoom to &Fit" ), HELP_ZOOM_FIT,
KiBitmap( zoom_fit_in_page_xpm ) );
AddMenuItem( viewMenu, ID_ZOOM_REDRAW,
_( "&Redraw" ), HELP_ZOOM_REDRAW,
KiBitmap( zoom_redraw_xpm ) );
viewMenu->AppendSeparator();
AddMenuItem( viewMenu, ID_ROTATE3D_X_NEG,
_( "Rotate X Clockwise" ),
KiBitmap( rotate_neg_x_xpm ) );
AddMenuItem( viewMenu, ID_ROTATE3D_X_POS,
_( "Rotate X Counterclockwise" ),
KiBitmap( rotate_pos_x_xpm ) );
viewMenu->AppendSeparator();
AddMenuItem( viewMenu, ID_ROTATE3D_Y_NEG,
_( "Rotate Y Clockwise" ),
KiBitmap( rotate_neg_y_xpm ) );
AddMenuItem( viewMenu, ID_ROTATE3D_Y_POS,
_( "Rotate Y Counterclockwise" ),
KiBitmap( rotate_pos_y_xpm ) );
viewMenu->AppendSeparator();
AddMenuItem( viewMenu, ID_ROTATE3D_Z_NEG,
_( "Rotate Z Clockwise" ),
KiBitmap( rotate_neg_z_xpm ) );
AddMenuItem( viewMenu, ID_ROTATE3D_Z_POS,
_( "Rotate Z Counterclockwise" ),
KiBitmap( rotate_pos_z_xpm ) );
viewMenu->AppendSeparator();
AddMenuItem( viewMenu, ID_MOVE3D_LEFT,
_( "Move left" ),
KiBitmap( left_xpm ) );
AddMenuItem( viewMenu, ID_MOVE3D_RIGHT,
_( "Move right" ),
KiBitmap( right_xpm ) );
AddMenuItem( viewMenu, ID_MOVE3D_UP,
_( "Move up" ),
KiBitmap( up_xpm ) );
AddMenuItem( viewMenu, ID_MOVE3D_DOWN,
_( "Move down" ),
KiBitmap( down_xpm ) );
menuBar->Append( prefsMenu, _( "&Preferences" ) );
AddMenuItem( prefsMenu, ID_TOOL_SET_VISIBLE_ITEMS,
_( "Display Options" ),
KiBitmap( read_setup_xpm ) );
prefsMenu->AppendCheckItem( ID_RENDER_CURRENT_VIEW, _( "Raytracing" ) );
prefsMenu->Check( ID_RENDER_CURRENT_VIEW,
m_settings.RenderEngineGet() != RENDER_ENGINE_OPENGL_LEGACY );
wxMenu * renderOptionsMenu = new wxMenu;
AddMenuItem( prefsMenu, renderOptionsMenu, ID_MENU3D_FL,
_( "Render Options" ), KiBitmap( options_3drender_xpm ) );
wxMenu * materialsList = new wxMenu;
AddMenuItem( renderOptionsMenu, materialsList, ID_MENU3D_FL_RENDER_MATERIAL,
_( "Material Properties" ), KiBitmap( color_materials_xpm ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
_( "Use All Properties" ),
_( "Use all material properties from each 3D model file" ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY,
_( "Use Diffuse Only" ),
_( "Use only the diffuse color property from model 3D model file" ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
_( "CAD Color Style" ),
_( "Use a CAD color style based on the diffuse color of the material" ) );
// Add specific preferences for OpenGL
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_OPENGL = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL,
_( "OpenGL Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
_( "Show Copper Thickness" ),
_( "Shows the copper thickness on copper layers (slower loading)"),
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
_( "Show Model Bounding Boxes" ),
KiBitmap( ortho_xpm ), wxITEM_CHECK );
// Add specific preferences for Raytracing
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_RAYTRACING = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING,
_( "Raytracing Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
_( "Render Shadows" ),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
_( "Procedural Textures" ),
_( "Apply procedural textures to materials (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
_( "Add Floor" ),
_( "Adds a floor plane below the board (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
_( "Refractions" ),
_( "Render materials with refractions properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
_( "Reflections" ),
_( "Render materials with reflections properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
_( "Anti-aliasing" ),
_( "Render with improved quality on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
_( "Post-processing" ),
_( "Apply Screen Space Ambient Occlusion and Global Illumination reflections on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
prefsMenu->AppendSeparator();
// Colors, axis and grid elements
// /////////////////////////////////////////////////////////////////////////
// Add submenu set Colors
wxMenu * setColorMenu = new wxMenu;
AddMenuItem( prefsMenu, setColorMenu, ID_MENU3D_COLOR,
_( "Choose Colors" ), KiBitmap( palette_xpm ) );
wxMenu * setBgColorMenu = new wxMenu;
AddMenuItem( setColorMenu, setBgColorMenu, ID_MENU3D_BGCOLOR,
_( "Background Color" ), KiBitmap( palette_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_TOP_SELECTION,
_( "Background Top Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
_( "Background Bottom Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
_( "Silkscreen Color..." ), KiBitmap( setcolor_silkscreen_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
_( "Solder Mask Color..." ), KiBitmap( setcolor_soldermask_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
_( "Solder Paste Color..." ), KiBitmap( setcolor_solderpaste_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_COPPER_COLOR_SELECTION,
_( "Copper/Surface Finish Color..." ), KiBitmap( setcolor_copper_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_PCB_BODY_COLOR_SELECTION,
_( "Board Body Color..." ), KiBitmap( setcolor_board_body_xpm ) );
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
// Creates grid menu
// /////////////////////////////////////////////////////////////////////////
wxMenu * gridlistMenu = new wxMenu;
AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
_( "3D Grid" ), KiBitmap( grid_xpm ) );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString );
// If the grid is on, check the corresponding menuitem showing the grid size
if( m_settings.GridGet() != GRID3D_NONE )
{
gridlistMenu->Check( ID_MENU3D_GRID_10_MM, m_settings.GridGet() == GRID3D_10MM );
gridlistMenu->Check( ID_MENU3D_GRID_5_MM, m_settings.GridGet() == GRID3D_5MM );
gridlistMenu->Check( ID_MENU3D_GRID_2P5_MM, m_settings.GridGet() == GRID3D_2P5MM );
gridlistMenu->Check( ID_MENU3D_GRID_1_MM, m_settings.GridGet() == GRID3D_1MM );
}
else
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
// Reset options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_RESET_DEFAULTS,
_( "Reset to Default Settings" ),
KiBitmap( tools_xpm ) );
// Help menu
// /////////////////////////////////////////////////////////////////////////
menuBar->Append( helpMenu, _( "&Help" ) );
AddMenuItem( helpMenu, wxID_HELP,
_( "Pcbnew &Manual" ),
_( "Open Pcbnew Manual" ),
KiBitmap( online_help_xpm ) );
AddMenuItem( helpMenu, wxID_INDEX,
_( "&Getting Started in KiCad" ),
_( "Open \"Getting Started in KiCad\" guide for beginners" ),
KiBitmap( help_xpm ) );
wxString text = AddHotkeyName( _( "&List Hotkeys..." ), GetHotkeyConfig(), HK_HELP );
AddMenuItem( helpMenu, ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST,
text,
_( "Displays the current hotkeys list and corresponding commands" ),
KiBitmap( hotkeys_xpm ) );
helpMenu->AppendSeparator();
AddMenuItem( helpMenu, ID_HELP_GET_INVOLVED,
_( "Get &Involved" ),
_( "Contribute to KiCad (opens a web browser)" ),
KiBitmap( info_xpm ) );
helpMenu->AppendSeparator();
AddMenuItem( helpMenu, wxID_ABOUT,
_( "&About KiCad" ),
_( "Display KiCad About dialog" ),
KiBitmap( about_xpm ) );
SetMenuBar( menuBar );
}
+62 -438
View File
@@ -3,8 +3,8 @@
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -38,489 +38,113 @@
void EDA_3D_VIEWER::ReCreateMainToolbar()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::ReCreateMainToolbar" ) );
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::ReCreateMainToolbar" );
if( m_mainToolBar != NULL )
wxWindowUpdateLocker dummy( this );
if( m_mainToolBar )
{
// Simple update to the list of old files.
SetToolbars();
return;
m_mainToolBar->Clear();
}
else
{
m_mainToolBar = new wxAuiToolBar( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
}
m_mainToolBar = new wxAuiToolBar( this, ID_H_TOOLBAR, wxDefaultPosition, wxDefaultSize,
KICAD_AUI_TB_STYLE | wxAUI_TB_HORZ_LAYOUT );
// Set up toolbar
m_mainToolBar->AddTool( ID_RELOAD3D_BOARD, wxEmptyString,
KiBitmap( import3d_xpm ), _( "Reload board" ) );
KiScaledBitmap( import3d_xpm, this ), _( "Reload board" ) );
m_mainToolBar->AddSeparator();
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddTool( ID_TOOL_SCREENCOPY_TOCLIBBOARD, wxEmptyString,
KiBitmap( copy_xpm ),
KiScaledBitmap( copy_xpm, this ),
_( "Copy 3D image to clipboard" ) );
m_mainToolBar->AddSeparator();
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddTool( ID_TOOL_SET_VISIBLE_ITEMS, wxEmptyString,
KiBitmap( read_setup_xpm ),
_( "Set display options, and some layers visibility" ) );
KiScaledBitmap( read_setup_xpm, this ),
_( "Set display options, and some layers visibility" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_RENDER_CURRENT_VIEW, wxEmptyString,
KiBitmap( render_mode_xpm ),
_( "Render current view using Raytracing" ) );
KiScaledBitmap( render_mode_xpm, this ),
_( "Render current view using Raytracing" ), wxITEM_CHECK );
m_mainToolBar->AddSeparator();
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddTool( ID_ZOOM_IN, wxEmptyString, KiBitmap( zoom_in_xpm ),
m_mainToolBar->AddTool( ID_ZOOM_IN, wxEmptyString,
KiScaledBitmap( zoom_in_xpm, this ),
_( "Zoom in" ) );
m_mainToolBar->AddTool( ID_ZOOM_OUT, wxEmptyString, KiBitmap( zoom_out_xpm ),
m_mainToolBar->AddTool( ID_ZOOM_OUT, wxEmptyString,
KiScaledBitmap( zoom_out_xpm, this ),
_( "Zoom out" ) );
m_mainToolBar->AddTool( ID_ZOOM_REDRAW, wxEmptyString,
KiBitmap( zoom_redraw_xpm ),
KiScaledBitmap( zoom_redraw_xpm, this ),
_( "Redraw view" ) );
m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, KiBitmap( zoom_fit_in_page_xpm ),
_( "Fit in page" ) );
m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString,
KiScaledBitmap( zoom_fit_in_page_xpm, this ),
_( "Zoom to fit 3D model" ) );
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_ROTATE3D_X_NEG, wxEmptyString,
KiBitmap( rotate_neg_x_xpm ),
_( "Rotate X <-" ) );
KiScaledBitmap( rotate_neg_x_xpm, this ),
_( "Rotate X Clockwise" ) );
m_mainToolBar->AddTool( ID_ROTATE3D_X_POS, wxEmptyString,
KiBitmap( rotate_pos_x_xpm ),
_( "Rotate X ->" ) );
KiScaledBitmap( rotate_pos_x_xpm, this ),
_( "Rotate X Counterclockwise" ) );
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_ROTATE3D_Y_NEG, wxEmptyString,
KiBitmap( rotate_neg_y_xpm ),
_( "Rotate Y <-" ) );
KiScaledBitmap( rotate_neg_y_xpm, this ),
_( "Rotate Y Clockwise" ) );
m_mainToolBar->AddTool( ID_ROTATE3D_Y_POS, wxEmptyString,
KiBitmap( rotate_pos_y_xpm ),
_( "Rotate Y ->" ) );
KiScaledBitmap( rotate_pos_y_xpm, this ),
_( "Rotate Y Counterclockwise" ) );
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_ROTATE3D_Z_NEG, wxEmptyString,
KiBitmap( rotate_neg_z_xpm ),
_( "Rotate Z <-" ) );
KiScaledBitmap( rotate_neg_z_xpm, this ),
_( "Rotate Z Clockwise" ) );
m_mainToolBar->AddTool( ID_ROTATE3D_Z_POS, wxEmptyString,
KiBitmap( rotate_pos_z_xpm ),
_( "Rotate Z ->" ) );
KiScaledBitmap( rotate_pos_z_xpm, this ),
_( "Rotate Z Counterclockwise" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_MOVE3D_LEFT, wxEmptyString, KiBitmap( left_xpm ),
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddTool( ID_MOVE3D_LEFT, wxEmptyString,
KiScaledBitmap( left_xpm, this ),
_( "Move left" ) );
m_mainToolBar->AddTool( ID_MOVE3D_RIGHT, wxEmptyString, KiBitmap( right_xpm ),
m_mainToolBar->AddTool( ID_MOVE3D_RIGHT, wxEmptyString,
KiScaledBitmap( right_xpm, this ),
_( "Move right" ) );
m_mainToolBar->AddTool( ID_MOVE3D_UP, wxEmptyString, KiBitmap( up_xpm ),
m_mainToolBar->AddTool( ID_MOVE3D_UP, wxEmptyString,
KiScaledBitmap( up_xpm, this ),
_( "Move up" ) );
m_mainToolBar->AddTool( ID_MOVE3D_DOWN, wxEmptyString, KiBitmap( down_xpm ),
m_mainToolBar->AddTool( ID_MOVE3D_DOWN, wxEmptyString,
KiScaledBitmap( down_xpm, this ),
_( "Move down" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_ORTHO, wxEmptyString, KiBitmap( ortho_xpm ),
KiScaledSeparator( m_mainToolBar, this );
m_mainToolBar->AddTool( ID_ORTHO, wxEmptyString,
KiScaledBitmap( ortho_xpm, this ),
_( "Enable/Disable orthographic projection" ),
wxITEM_CHECK );
m_mainToolBar->Realize();
}
void EDA_3D_VIEWER::CreateMenuBar()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::CreateMenuBar" ) );
wxMenuBar* menuBar = new wxMenuBar;
wxMenu* fileMenu = new wxMenu;
wxMenu* editMenu = new wxMenu;
wxMenu* prefsMenu = new wxMenu;
wxMenu* helpMenu = new wxMenu;
menuBar->Append( fileMenu, _( "&File" ) );
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_PNG,
_( "Export Current View as PNG..." ),
KiBitmap( export_xpm ) );
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_JPEG,
_( "Export Current View as JPEG..." ),
KiBitmap( export_xpm ) );
fileMenu->AppendSeparator();
AddMenuItem( fileMenu, wxID_EXIT,
_( "&Exit" ),
KiBitmap( exit_xpm ) );
menuBar->Append( editMenu, _( "&Edit" ) );
AddMenuItem( editMenu, ID_TOOL_SCREENCOPY_TOCLIBBOARD,
_( "Copy 3D Image" ),
KiBitmap( copy_xpm ) );
menuBar->Append( prefsMenu, _( "&Preferences" ) );
AddMenuItem( prefsMenu, ID_MENU3D_MOUSEWHEEL_PANNING,
_( "Use Touchpad to Pan" ),
KiBitmap( tools_xpm ), wxITEM_CHECK );
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_REALISTIC_MODE,
_( "Realistic Mode" ),
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
wxMenu * renderEngineList = new wxMenu;
AddMenuItem( prefsMenu, renderEngineList, ID_MENU3D_ENGINE,
_( "Render Engine" ), KiBitmap( render_mode_xpm ) );
renderEngineList->AppendRadioItem( ID_MENU3D_ENGINE_OPENGL_LEGACY,
_( "OpenGL" ),
wxEmptyString );
renderEngineList->AppendRadioItem( ID_MENU3D_ENGINE_RAYTRACING,
_( "Raytracing" ),
wxEmptyString );
renderEngineList->Check( ID_MENU3D_ENGINE_OPENGL_LEGACY,
m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY );
renderEngineList->Check( ID_MENU3D_ENGINE_RAYTRACING,
m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING );
wxMenu * renderOptionsMenu = new wxMenu;
AddMenuItem( prefsMenu, renderOptionsMenu, ID_MENU3D_FL,
_( "Render Options" ), KiBitmap( options_3drender_xpm ) );
wxMenu * materialsList = new wxMenu;
AddMenuItem( renderOptionsMenu, materialsList, ID_MENU3D_FL_RENDER_MATERIAL,
_( "Material Properties" ), KiBitmap( color_materials_xpm ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
_( "Use All Properties" ),
_( "Use all material properties from each 3D model file" ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY,
_( "Use Diffuse Only" ),
_( "Use only the diffuse color property from model 3D model file " ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
_( "CAD Color Style" ),
_( "Use a CAD color style based on the diffuse color of the material" ) );
// Add specific preferences for OpenGL
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_OPENGL = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL,
_( "OpenGL Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
_( "Show Copper Thickness" ),
_( "Shows the copper thickness on copper layers (slower loading)"),
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
_( "Show Model Bounding Boxes" ),
KiBitmap( ortho_xpm ), wxITEM_CHECK );
// Add specific preferences for Raytracing
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_RAYTRACING = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING,
_( "Raytracing Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
_( "Render Shadows" ),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
_( "Procedural Textures" ),
_( "Apply procedural textures to materials (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
_( "Add Floor" ),
_( "Adds a floor plane below the board (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
_( "Refractions" ),
_( "Render materials with refractions properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
_( "Reflections" ),
_( "Render materials with reflections properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
_( "Anti-aliasing" ),
_( "Render with improoved quality on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
_( "Post-processing" ),
_( "Apply Screen Space Ambient Occlusion and Global Illumination reflections on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
prefsMenu->AppendSeparator();
// Colors, axis and grid elements
// /////////////////////////////////////////////////////////////////////////
// Add submenu set Colors
wxMenu * setColorMenu = new wxMenu;
AddMenuItem( prefsMenu, setColorMenu, ID_MENU3D_COLOR,
_( "Choose Colors" ), KiBitmap( palette_xpm ) );
wxMenu * setBgColorMenu = new wxMenu;
AddMenuItem( setColorMenu, setBgColorMenu, ID_MENU3D_BGCOLOR,
_( "Background Color" ), KiBitmap( palette_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_TOP_SELECTION,
_( "Background Top Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
_( "Background Bottom Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
_( "Silkscreen Color..." ), KiBitmap( setcolor_silkscreen_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
_( "Solder Mask Color..." ), KiBitmap( setcolor_soldermask_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
_( "Solder Paste Color..." ), KiBitmap( setcolor_solderpaste_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_COPPER_COLOR_SELECTION,
_( "Copper/Surface Finish Color..." ), KiBitmap( setcolor_copper_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_PCB_BODY_COLOR_SELECTION,
_( "Board Body Color..." ), KiBitmap( setcolor_board_body_xpm ) );
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
// Creates grid menu
// /////////////////////////////////////////////////////////////////////////
wxMenu * gridlistMenu = new wxMenu;
AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
_( "3D Grid" ), KiBitmap( grid_xpm ) );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString );
// If the grid is on, check the corresponding menuitem showing the grid size
if( m_settings.GridGet() != GRID3D_NONE )
{
gridlistMenu->Check( ID_MENU3D_GRID_10_MM, m_settings.GridGet() == GRID3D_10MM );
gridlistMenu->Check( ID_MENU3D_GRID_5_MM, m_settings.GridGet() == GRID3D_5MM );
gridlistMenu->Check( ID_MENU3D_GRID_2P5_MM, m_settings.GridGet() == GRID3D_2P5MM );
gridlistMenu->Check( ID_MENU3D_GRID_1_MM, m_settings.GridGet() == GRID3D_1MM );
}
else
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
// Display elements options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_SHOW_BOARD_BODY,
_( "Show Board Bod&y" ), KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
AddMenuItem( prefsMenu, ID_MENU3D_ZONE_ONOFF,
_( "Show Zone &Filling" ), KiBitmap( add_zone_xpm ), wxITEM_CHECK );
wxMenu * moduleAttributes = new wxMenu;
AddMenuItem( prefsMenu, moduleAttributes, ID_MENU3D_MODULE_ONOFF,
_( "Show 3D M&odels" ), KiBitmap( shape_3d_xpm ) );
moduleAttributes->AppendCheckItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL,
_( "Through Hole" ),
_( "Footprint Properties -> Placement type -> Through hole" ) );
moduleAttributes->AppendCheckItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL_INSERT,
_( "Surface Mount" ),
_( "Footprint Properties -> Placement type -> Surface mount" ) );
moduleAttributes->AppendCheckItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_VIRTUAL,
_( "Virtual" ),
_( "Footprint Properties -> Placement type -> Virtual (eg: edge connectors, test points, mechanical parts)" ) );
// Layer options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
wxMenu * layersMenu = new wxMenu;
AddMenuItem( prefsMenu, layersMenu, ID_MENU3D_LAYERS,
_( "Show &Layers" ), KiBitmap( tools_xpm ) );
AddMenuItem( layersMenu, ID_MENU3D_ADHESIVE_ONOFF,
_( "Show &Adhesive Layers" ), KiBitmap( tools_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_SILKSCREEN_ONOFF,
_( "Show &Silkscreen Layers" ), KiBitmap( text_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_SOLDER_MASK_ONOFF,
_( "Show Solder &Mask Layers" ), KiBitmap( pads_mask_layers_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_SOLDER_PASTE_ONOFF,
_( "Show Solder &Paste Layers" ), KiBitmap( pads_mask_layers_xpm ), wxITEM_CHECK );
// Other layers are not "board" layers, and are not shown in realistic mode
// These menus will be disabled in in realistic mode
AddMenuItem( layersMenu, ID_MENU3D_COMMENTS_ONOFF,
_( "Show &Comments and Drawings Layers" ), KiBitmap( editor_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_ECO_ONOFF,
_( "Show &Eco Layers" ), KiBitmap( editor_xpm ), wxITEM_CHECK );
// Reset options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_RESET_DEFAULTS,
_( "Reset to Default Settings" ),
KiBitmap( tools_xpm ) );
// Help menu
// /////////////////////////////////////////////////////////////////////////
menuBar->Append( helpMenu, _( "&Help" ) );
AddMenuItem( helpMenu, ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST,
_( "&List Hotkeys..." ),
_( "Displays the current hotkeys list and corresponding commands" ),
KiBitmap( hotkeys_xpm ) );
SetMenuBar( menuBar );
SetMenuBarOptionsState();
}
void EDA_3D_VIEWER::SetMenuBarOptionsState()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::SetMenuBarOptionsState" ) );
wxMenuBar* menuBar = GetMenuBar();
if( menuBar == NULL )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::SetMenuBarOptionsState menuBar == NULL" ) );
return;
}
wxMenuItem* item;
// Set the state of toggle menus according to the current display options
item = menuBar->FindItem( ID_MENU3D_MOUSEWHEEL_PANNING );
item->Check( m_settings.GetFlag( FL_MOUSEWHEEL_PANNING ) );
item = menuBar->FindItem( ID_MENU3D_ENGINE_OPENGL_LEGACY );
item->Check( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY );
item = menuBar->FindItem( ID_MENU3D_ENGINE_RAYTRACING );
item->Check( m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING );
item = menuBar->FindItem( ID_MENU3D_REALISTIC_MODE );
item->Check( m_settings.GetFlag( FL_USE_REALISTIC_MODE ) );
item = menuBar->FindItem( ID_MENU3D_COMMENTS_ONOFF );
item->Enable( !m_settings.GetFlag( FL_USE_REALISTIC_MODE ) );
item = menuBar->FindItem( ID_MENU3D_ECO_ONOFF );
item->Enable( !m_settings.GetFlag( FL_USE_REALISTIC_MODE ) );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_NORMAL );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_DIFFUSE_ONLY );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_CAD_MODE );
// OpenGL
item = menuBar->FindItem( ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS );
item->Check( m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) );
item = menuBar->FindItem( ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX );
item->Check( m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) );
// Raytracing
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_SHADOWS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_BACKFLOOR );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_REFRACTIONS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFRACTIONS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_REFLECTIONS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_POST_PROCESSING );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) );
item = menuBar->FindItem( ID_MENU3D_SHOW_BOARD_BODY );
item->Check( m_settings.GetFlag( FL_SHOW_BOARD_BODY ) );
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL );
item->Check( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL ) );
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL_INSERT );
item->Check( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT ) );
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_VIRTUAL );
item->Check( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL ) );
item = menuBar->FindItem( ID_MENU3D_ZONE_ONOFF );
item->Check( m_settings.GetFlag( FL_ZONE ) );
item = menuBar->FindItem( ID_MENU3D_AXIS_ONOFF );
item->Check( m_settings.GetFlag( FL_AXIS ) );
item = menuBar->FindItem( ID_MENU3D_ADHESIVE_ONOFF );
item->Check( m_settings.GetFlag( FL_ADHESIVE ) );
item = menuBar->FindItem( ID_MENU3D_SILKSCREEN_ONOFF );
item->Check( m_settings.GetFlag( FL_SILKSCREEN ) );
item = menuBar->FindItem( ID_MENU3D_SOLDER_MASK_ONOFF );
item->Check( m_settings.GetFlag( FL_SOLDERMASK ) );
item = menuBar->FindItem( ID_MENU3D_SOLDER_PASTE_ONOFF );
item->Check( m_settings.GetFlag( FL_SOLDERPASTE ) );
item = menuBar->FindItem( ID_MENU3D_COMMENTS_ONOFF );
item->Check( m_settings.GetFlag( FL_COMMENTS ) );
item = menuBar->FindItem( ID_MENU3D_ECO_ONOFF );
item->Check( m_settings.GetFlag( FL_ECO ));
}
void EDA_3D_VIEWER::SetToolbars()
{
}
}
@@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2014-2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2014-2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -52,11 +52,7 @@ void EDA_3D_VIEWER::Install3DViewOptionDialog( wxCommandEvent& event )
if( dlg.ShowModal() == wxID_OK )
{
SetMenuBarOptionsState();
// Force immediate display redraw:
ReloadRequest();
m_canvas->Request_refresh();
NewDisplay( true );
}
}
@@ -1,8 +1,8 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Aug 4 2017)
// C++ code generated with wxFormBuilder (version Jul 11 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_3D_view_option_base.h"
@@ -87,7 +87,10 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizerRenderOptions->Add( fgSizer3, 1, wxEXPAND, 5 );
bSizeLeft->Add( fgSizerRenderOptions, 1, wxEXPAND, 5 );
bSizeLeft->Add( fgSizerRenderOptions, 0, wxEXPAND|wxBOTTOM, 5 );
bSizeLeft->Add( 0, 10, 0, 0, 5 );
m_staticText3DmodelVisibility = new wxStaticText( this, wxID_ANY, _("3D model visibility:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3DmodelVisibility->Wrap( -1 );
@@ -128,10 +131,10 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizer3DVisibility->Add( m_checkBox3DshapesVirtual, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLeft->Add( fgSizer3DVisibility, 1, wxEXPAND, 5 );
bSizeLeft->Add( fgSizer3DVisibility, 0, wxEXPAND, 5 );
bSizerUpper->Add( bSizeLeft, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
bSizerUpper->Add( bSizeLeft, 1, wxEXPAND, 5 );
m_staticlineVertical = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
bSizerUpper->Add( m_staticlineVertical, 0, wxEXPAND | wxALL, 5 );
@@ -190,9 +193,12 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizerShowBrdLayersOpts->Add( m_checkBoxAdhesive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLayer->Add( fgSizerShowBrdLayersOpts, 1, wxEXPAND, 5 );
bSizeLayer->Add( fgSizerShowBrdLayersOpts, 0, wxEXPAND, 5 );
m_staticTextUserLayers = new wxStaticText( this, wxID_ANY, _("User layers:"), wxDefaultPosition, wxDefaultSize, 0 );
bSizeLayer->Add( 0, 10, 0, 0, 5 );
m_staticTextUserLayers = new wxStaticText( this, wxID_ANY, _("User layers (not shown in realistic mode):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextUserLayers->Wrap( -1 );
m_staticTextUserLayers->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
@@ -222,7 +228,7 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizerShowUserLayersOpts->Add( m_checkBoxECO, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLayer->Add( fgSizerShowUserLayersOpts, 1, wxEXPAND, 5 );
bSizeLayer->Add( fgSizerShowUserLayersOpts, 0, wxEXPAND, 5 );
bSizerRight->Add( bSizeLayer, 1, wxEXPAND, 5 );
@@ -234,7 +240,7 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
m_staticlineH = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizerMain->Add( m_staticlineH, 0, wxEXPAND | wxALL, 5 );
bSizerMain->Add( m_staticlineH, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_sdbSizer = new wxStdDialogButtonSizer();
m_sdbSizerOK = new wxButton( this, wxID_OK );
@@ -243,7 +249,7 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
m_sdbSizer->AddButton( m_sdbSizerCancel );
m_sdbSizer->Realize();
bSizerMain->Add( m_sdbSizer, 0, wxALL|wxEXPAND, 5 );
bSizerMain->Add( m_sdbSizer, 0, wxALL|wxALIGN_RIGHT, 5 );
this->SetSizer( bSizerMain );
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="13" />
<FileVersion major="1" minor="14" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
@@ -14,6 +14,7 @@
<property name="file">dialog_3D_view_option_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property>
<property name="name">dialog_3D_view_option_base</property>
<property name="namespace"></property>
@@ -44,7 +45,7 @@
<property name="minimum_size"></property>
<property name="name">DIALOG_3D_VIEW_OPTIONS_BASE</property>
<property name="pos"></property>
<property name="size">571,399</property>
<property name="size">571,372</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
<property name="title">3D Display Options</property>
@@ -54,13 +55,20 @@
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneActivated"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -75,17 +83,23 @@
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMaximize"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnMove"></event>
<event name="OnMoveEnd"></event>
<event name="OnMoveStart"></event>
<event name="OnMoving"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnShow"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
@@ -104,7 +118,7 @@
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
@@ -144,6 +158,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Render options:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -169,7 +184,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -196,8 +218,8 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -276,7 +298,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -363,7 +392,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox">OnCheckRealisticMode</event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -455,7 +491,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -542,7 +585,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -634,7 +684,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -721,7 +778,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -813,7 +877,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -900,7 +971,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -992,7 +1070,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1079,7 +1164,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1125,6 +1217,16 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">10</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
@@ -1158,6 +1260,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">3D model visibility:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -1183,7 +1286,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1211,7 +1321,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -1290,7 +1400,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1377,7 +1494,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1469,7 +1593,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1556,7 +1687,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1648,7 +1786,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1735,7 +1880,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1821,7 +1973,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1897,6 +2056,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Board layers:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -1922,7 +2082,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1950,7 +2117,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -2029,7 +2196,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2116,7 +2290,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2208,7 +2389,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2295,7 +2483,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2387,7 +2582,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2474,7 +2676,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2566,7 +2775,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2653,7 +2869,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2681,6 +2904,16 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">10</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
@@ -2713,7 +2946,8 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User layers:</property>
<property name="label">User layers (not shown in realistic mode):</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -2739,7 +2973,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2767,7 +3008,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -2846,7 +3087,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2933,7 +3181,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -3025,7 +3280,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -3112,7 +3374,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -3148,7 +3417,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticLine" expanded="1">
<property name="BottomDockable">1</property>
@@ -3202,7 +3471,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -3229,7 +3505,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="flag">wxALL|wxALIGN_RIGHT</property>
<property name="proportion">0</property>
<object class="wxStdDialogButtonSizer" expanded="1">
<property name="Apply">0</property>
@@ -1,8 +1,8 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Aug 4 2017)
// C++ code generated with wxFormBuilder (version Jul 11 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_3D_VIEW_OPTION_BASE_H__
@@ -11,8 +11,6 @@
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
class DIALOG_SHIM;
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/stattext.h>
@@ -85,7 +83,7 @@ class DIALOG_3D_VIEW_OPTIONS_BASE : public DIALOG_SHIM
public:
DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("3D Display Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,399 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("3D Display Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,372 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_3D_VIEW_OPTIONS_BASE();
};
File diff suppressed because it is too large Load Diff
+46 -33
View File
@@ -3,8 +3,8 @@
*
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-2019 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -32,11 +32,11 @@
#ifndef EDA_3D_VIEWER_H
#define EDA_3D_VIEWER_H
#include "../3d_canvas/cinfo3d_visu.h"
#include "../3d_canvas/eda_3d_canvas.h"
#include <kiway_player.h>
#include <wx/colourdata.h>
#include <../common/dialogs/dialog_color_picker.h> // for CUSTOM_COLORS_LIST definition
#define KICAD_DEFAULT_3D_DRAWFRAME_STYLE (wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS)
@@ -44,7 +44,6 @@
#define VIEWER3D_FRAMENAME wxT( "Viewer3DFrameName" )
/**
* Class EDA_3D_VIEWER
* Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard
*/
class EDA_3D_VIEWER : public KIWAY_PLAYER
@@ -52,8 +51,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
public:
EDA_3D_VIEWER( KIWAY *aKiway,
PCB_BASE_FRAME *aParent,
EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent,
const wxString &aTitle,
long style = KICAD_DEFAULT_3D_DRAWFRAME_STYLE );
@@ -66,7 +64,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
/**
* Request reloading the 3D view. However the request will be executed
* only when the 3D canvas is refreshed.
* It allows to prepare changes and request for 3D rebuild only when all
* It allows one to prepare changes and request for 3D rebuild only when all
* changes are committed.
* This is made because the 3D rebuild can take a long time, and this rebuild
* cannot always made after each change, for calculation time reason.
@@ -86,44 +84,42 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void NewDisplay( bool aForceImmediateRedraw = false );
/**
* Function SetDefaultFileName
* Set the default file name (eg: to be suggested to a screenshot)
* @param aFn = file name to assign
*/
void SetDefaultFileName( const wxString &aFn )
void SetDefaultFileName( const wxString& aFn )
{
wxFileName fn( aFn );
m_defaultFileName = fn.GetName();
m_defaultSaveScreenshotFileName = aFn;
}
/**
* Function GetDefaultFileName
* @return the default suggested file name
*/
const wxString &GetDefaultFileName() const { return m_defaultFileName; }
const wxFileName& GetDefaultFileName() const { return m_defaultSaveScreenshotFileName; }
/**
* Function GetSettings
* @return current settings
*/
CINFO3D_VISU &GetSettings() { return m_settings; }
/**
* Function Set3DColorFromUser
* Return a structure containing currently used hotkey mapping.
*/
EDA_HOTKEY_CONFIG* GetHotkeyConfig() const;
/**
* Get a SFVEC3D from a wx colour dialog
* @param aColor is the SFVEC3D to change
* @param aTitle is the title displayed in the colordialog selector
* @param aPredefinedColors is a reference to a wxColourData
* @param aPredefinedColors is a reference to a CUSTOM_COLOR_ITEM list
* which contains a few predefined colors
* if it is NULL, no predefined colors are used
* @return true if a new color is chosen, false if
* no change or aborted by user
* if empty, no predefined colors are used.
* no change if aborted by user
*/
bool Set3DColorFromUser( SFVEC3D &aColor, const wxString& aTitle,
wxColourData* aPredefinedColors = NULL );
CUSTOM_COLORS_LIST* aPredefinedColors );
/**
* Function Set3DSolderMaskColorFromUser
* Set the solder mask color from a set of colors
* @return true if a new color is chosen, false if
* no change or aborted by user
@@ -131,7 +127,6 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
bool Set3DSolderMaskColorFromUser();
/**
* Function Set3DSolderPasteColorFromUser
* Set the solder mask color from a set of colors
* @return true if a new color is chosen, false if
* no change or aborted by user
@@ -139,7 +134,6 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
bool Set3DSolderPasteColorFromUser();
/**
* Function Set3DCopperColorFromUser
* Set the copper color from a set of colors
* @return true if a new color is chosen, false if
* no change or aborted by user
@@ -147,7 +141,6 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
bool Set3DCopperColorFromUser();
/**
* Function Set3DBoardBodyBodyColorFromUser
* Set the copper color from a set of colors
* @return true if a new color is chosen, false if
* no change or aborted by user
@@ -155,13 +148,21 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
bool Set3DBoardBodyColorFromUser();
/**
* Function Set3DSilkScreenColorFromUser
* Set the silkscreen color from a set of colors
* @return true if a new color is chosen, false if
* no change or aborted by user
*/
bool Set3DSilkScreenColorFromUser();
/**
* Notification that common settings are updated.
*
* This would be private (and only called by the Kiway), but we
* need to do this manually from the PCB frame because the 3D viewer isn't
* updated via the #KIWAY.
*/
void CommonSettingsChanged() override;
private:
/// Called when user press the File->Exit
void Exit3DFrame( wxCommandEvent &event );
@@ -173,8 +174,13 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void On3DGridSelection( wxCommandEvent &event );
void OnRenderEngineSelection( wxCommandEvent &event );
void OnDisableRayTracing( wxCommandEvent& aEvent );
void OnUpdateMenus(wxUpdateUIEvent& event);
void OnUpdateUIEngine( wxUpdateUIEvent& aEvent );
void OnUpdateUIMaterial( wxUpdateUIEvent& aEvent );
void OnUpdateUIOpenGL( wxUpdateUIEvent& aEvent );
void OnUpdateUIRayTracing( wxUpdateUIEvent& aEvent );
void OnUpdateUIAxis( wxUpdateUIEvent& aEvent );
void ProcessZoom( wxCommandEvent &event );
@@ -186,13 +192,14 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void CreateMenuBar();
void DisplayHotKeys();
void DisplayHotKeys()
{
DisplayHotkeyList( this, GetHotkeyConfig() );
}
/**
* Set the state of toggle menus according to the current display options
* Equivalent of EDA_DRAW_FRAME::ReCreateHToolbar
*/
void SetMenuBarOptionsState();
void ReCreateMainToolbar();
void SetToolbars();
@@ -202,13 +209,12 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void LoadSettings( wxConfigBase *aCfg ) override;
void OnLeftClick( wxDC *DC, const wxPoint &MousePos );
void OnRightClick( const wxPoint &MousePos, wxMenu *PopMenu );
void OnKeyEvent( wxKeyEvent& event );
void RedrawActiveWindow( wxDC *DC, bool EraseBg );
/**
* Function TakeScreenshot
* Create a Screenshot of the current 3D view.
* Output file format is png or jpeg, or image is copied to the clipboard
*/
@@ -223,10 +229,15 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
private:
/**
* Load configuration from common settings.
*/
void loadCommonSettings();
/**
* Filename to propose for save a screenshot
*/
wxString m_defaultFileName;
wxFileName m_defaultSaveScreenshotFileName;
/**
* The canvas where the openGL context will be rendered
@@ -238,6 +249,8 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
*/
CINFO3D_VISU m_settings;
bool m_disable_ray_tracing;
/**
* Trace mask used to enable or disable the trace output of this class.
* The debug output can be turned on by setting the WXTRACE environment variable to
+105
View File
@@ -0,0 +1,105 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file hotkeys.cpp
* @brief list of hotkeys used in 3D viewer
*/
#include <hotkeys_basic.h>
#include "eda_3d_viewer.h"
#include "../3d_viewer_id.h"
// Define 3D Viewer Hotkeys
static EDA_HOTKEY HkHotkeysHelp( _HKI( "List Hotkeys" ), HK_HELP, GR_KB_CTRL + WXK_F1 );
static EDA_HOTKEY Hk3D_PivotCenter( _HKI( "Center pivot rotation (Middle mouse click)" ), 0, WXK_SPACE );
static EDA_HOTKEY Hk3D_MoveLeft( _HKI( "Move board Left" ), ID_POPUP_MOVE3D_LEFT, WXK_LEFT );
static EDA_HOTKEY Hk3D_MoveRight( _HKI( "Move board Right" ), ID_POPUP_MOVE3D_RIGHT, WXK_RIGHT );
static EDA_HOTKEY Hk3D_MoveUp( _HKI( "Move board Up" ), ID_POPUP_MOVE3D_UP, WXK_UP );
static EDA_HOTKEY Hk3D_MoveDown( _HKI( "Move board Down" ), ID_POPUP_MOVE3D_DOWN, WXK_DOWN );
static EDA_HOTKEY Hk3D_HomeView( _HKI( "Home view" ), 0, WXK_HOME );
static EDA_HOTKEY Hk3D_ResetView( _HKI( "Reset view" ), 0, 'R' );
static EDA_HOTKEY Hk3D_ViewFront( _HKI( "View Front" ), ID_POPUP_VIEW_YPOS, 'Y' );
static EDA_HOTKEY Hk3D_ViewBack( _HKI( "View Back" ), ID_POPUP_VIEW_YNEG, GR_KB_SHIFT + 'Y' );
static EDA_HOTKEY Hk3D_ViewLeft( _HKI( "View Left" ), ID_POPUP_VIEW_XNEG, GR_KB_SHIFT + 'X' );
static EDA_HOTKEY Hk3D_ViewRight( _HKI( "View Right" ), ID_POPUP_VIEW_XPOS, 'X' );
static EDA_HOTKEY Hk3D_ViewTop( _HKI( "View Top" ), ID_POPUP_VIEW_ZPOS, 'Z' );
static EDA_HOTKEY Hk3D_ViewBot( _HKI( "View Bot" ), ID_POPUP_VIEW_ZNEG, GR_KB_SHIFT + 'Z' );
static EDA_HOTKEY Hk3D_Rotate45axisZ( _HKI( "Rotate 45 degrees over Z axis" ), 0, WXK_TAB );
static EDA_HOTKEY Hk3D_ZoomIn( _HKI( "Zoom in " ), ID_POPUP_ZOOMIN, WXK_F1 );
static EDA_HOTKEY Hk3D_ZoomOut( _HKI( "Zoom out" ), ID_POPUP_ZOOMOUT, WXK_F2 );
static EDA_HOTKEY Hk3D_AttributesTHT( _HKI( "Toggle 3D models with type Through Hole" ), 0, 'T' );
static EDA_HOTKEY Hk3D_AttributesSMD( _HKI( "Toggle 3D models with type Surface Mount" ), 0, 'S' );
static EDA_HOTKEY Hk3D_AttributesVirtual( _HKI( "Toggle 3D models with type Virtual" ), 0, 'V' );
static wxString viewer3DSectionTitle( _HKI( "Viewer 3D" ) );
// List of hotkey descriptors for the 3D Viewer only
// !TODO: this is used just for help menu, the structured are not used yet in the viewer
static EDA_HOTKEY* viewer3d_Hotkey_List[] =
{
&HkHotkeysHelp,
&Hk3D_PivotCenter,
&Hk3D_MoveLeft,
&Hk3D_MoveRight,
&Hk3D_MoveUp,
&Hk3D_MoveDown,
&Hk3D_HomeView,
&Hk3D_ResetView,
&Hk3D_ViewFront,
&Hk3D_ViewBack,
&Hk3D_ViewLeft,
&Hk3D_ViewRight,
&Hk3D_ViewTop,
&Hk3D_ViewBot,
&Hk3D_Rotate45axisZ,
&Hk3D_ZoomIn,
&Hk3D_ZoomOut,
&Hk3D_AttributesTHT,
&Hk3D_AttributesSMD,
&Hk3D_AttributesVirtual,
NULL
};
// list of sections and corresponding hotkey list for the 3D Viewer
// (used to list current hotkeys)
static struct EDA_HOTKEY_CONFIG s_3DViewer_Hotkeys_Descr[] =
{
{ &g_CommonSectionTag, viewer3d_Hotkey_List, &viewer3DSectionTitle },
{ NULL, NULL, NULL }
};
EDA_HOTKEY_CONFIG* EDA_3D_VIEWER::GetHotkeyConfig() const
{
return s_3DViewer_Hotkeys_Descr;
}
EDA_HOTKEY_CONFIG* EDA_3D_CANVAS::GetHotkeyConfig() const
{
return s_3DViewer_Hotkeys_Descr;
}
+3 -7
View File
@@ -56,7 +56,6 @@ enum id_3dview_frm
ID_MENU3D_COMMENTS_ONOFF,
ID_MENU3D_ECO_ONOFF,
ID_MENU3D_SHOW_BOARD_BODY,
ID_MENU3D_MOUSEWHEEL_PANNING,
ID_MENU3D_REALISTIC_MODE,
ID_MENU3D_FL,
@@ -79,8 +78,6 @@ enum id_3dview_frm
ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
ID_RENDER_CURRENT_VIEW,
ID_MENU_SCREENCOPY_PNG,
ID_MENU_SCREENCOPY_JPEG,
ID_MENU_SCREENCOPY_TOCLIBBOARD,
@@ -92,6 +89,8 @@ enum id_3dview_frm
ID_MENU_COMMAND_END,
ID_RENDER_CURRENT_VIEW,
ID_TOOL_SET_VISIBLE_ITEMS,
ID_MENU3D_GRID,
@@ -102,10 +101,7 @@ enum id_3dview_frm
ID_MENU3D_GRID_1_MM,
ID_MENU3D_GRID_END,
ID_MENU3D_ENGINE,
ID_MENU3D_ENGINE_OPENGL_LEGACY,
ID_MENU3D_ENGINE_RAYTRACING,
ID_MENU3D_ENGINE_END,
ID_DISABLE_RAY_TRACING,
ID_POPUP_3D_VIEW_START,
ID_POPUP_ZOOMIN,
+4 -10
View File
@@ -6,8 +6,8 @@ configure_file( 3d_plugin_dir.h.in 3d_plugin_dir.h @ONLY )
include_directories(BEFORE ${INC_BEFORE})
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
../include/legacy_wx
../pcbnew
../polygon
3d_canvas
3d_cache
3d_rendering
@@ -33,18 +33,10 @@ set(3D-VIEWER_SRCS
3d_cache/3d_cache_wrapper.cpp
3d_cache/3d_cache.cpp
3d_cache/3d_plugin_manager.cpp
3d_cache/3d_filename_resolver.cpp
${DIR_DLG}/3d_cache_dialogs.cpp
${DIR_DLG}/dlg_3d_pathconfig_base.cpp
${DIR_DLG}/dlg_3d_pathconfig.cpp
${DIR_DLG}/dlg_select_3dmodel.cpp
${DIR_DLG}/panel_prev_3d_base.cpp
${DIR_DLG}/panel_prev_model.cpp
../polygon/poly2tri/common/shapes.cc
../polygon/poly2tri/sweep/advancing_front.cc
../polygon/poly2tri/sweep/cdt.cc
../polygon/poly2tri/sweep/sweep.cc
../polygon/poly2tri/sweep/sweep_context.cc
3d_canvas/cinfo3d_visu.cpp
3d_canvas/create_layer_items.cpp
3d_canvas/create_3Dgraphic_brd_items.cpp
@@ -79,7 +71,6 @@ set(3D-VIEWER_SRCS
${DIR_RAY_2D}/cring2d.cpp
${DIR_RAY_2D}/croundsegment2d.cpp
${DIR_RAY_2D}/ctriangle2d.cpp
${DIR_RAY_2D}/edgeshrink.cpp
${DIR_RAY_3D}/cbbox.cpp
${DIR_RAY_3D}/cbbox_ray.cpp
${DIR_RAY_3D}/ccylinder.cpp
@@ -97,6 +88,8 @@ set(3D-VIEWER_SRCS
3d_rendering/cpostshader.cpp
3d_rendering/cpostshader_ssao.cpp
3d_rendering/ctrack_ball.cpp
3d_viewer/3d_menubar.cpp
3d_viewer/hotkeys.cpp
3d_rendering/test_cases.cpp
3d_rendering/trackball.cpp
3d_viewer/3d_toolbar.cpp
@@ -114,6 +107,7 @@ add_dependencies( 3d-viewer pcbcommon )
target_link_libraries( 3d-viewer
gal
polygon
${Boost_}
${wxWidgets_LIBRARIES}
${OPENGL_LIBRARIES}
+1 -1
View File
@@ -75,7 +75,7 @@ const int COGL_ATT_LIST::m_openGL_attributes_list[] = {
#define ATT_WX_GL_SAMPLE_BUFFERS_DATA 11
int COGL_ATT_LIST::m_openGL_attributes_list_to_use[
DIM( COGL_ATT_LIST::m_openGL_attributes_list ) ] = { 0 };
arrayDim( COGL_ATT_LIST::m_openGL_attributes_list ) ] = { 0 };
const int *COGL_ATT_LIST::GetAttributesList( bool aUseAntiAliasing )
+4 -1
View File
@@ -50,6 +50,9 @@ void OGL_GetScreenshot( wxImage &aDstImage )
// Alphabuffer was causing some transparency problems on some systems (Windows)
// unsigned char* alphabuffer = (unsigned char*) malloc( viewport.x * viewport.y );
// Call glFinish before screenshot to ensure everything is fully drawn.
glFinish();
glPixelStorei( GL_PACK_ALIGNMENT, 1 );
glReadBuffer( GL_BACK_LEFT );
@@ -130,7 +133,7 @@ GLuint OGL_LoadTexture( const CIMAGE &aImage )
glBindTexture( GL_TEXTURE_2D, 0 );
glFinish();
glFlush();
free( rgbaBuffer );
-81
View File
@@ -1,81 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file openmp_mutex.h
* @brief a mutex for openmp got from the website:
* http://bisqwit.iki.fi/story/howto/openmp/
* by Joel Yliluoma <bisqwit@iki.fi>
*/
#ifndef _OPENMP_MUTEX_H
#define _OPENMP_MUTEX_H
#ifdef _OPENMP
# include <omp.h>
struct MutexType
{
MutexType() { omp_init_lock( &lock ); }
~MutexType() { omp_destroy_lock( &lock ); }
void Lock() { omp_set_lock( &lock ); }
void Unlock() { omp_unset_lock( &lock ); }
MutexType( const MutexType& ) { omp_init_lock( &lock ); }
MutexType& operator= ( const MutexType& ) { return *this; }
public:
omp_lock_t lock;
};
#else
/// A dummy mutex that doesn't actually exclude anything,
/// but as there is no parallelism either, no worries.
struct MutexType
{
void Lock() {}
void Unlock() {}
};
#endif
/// An exception-safe scoped lock-keeper.
struct ScopedLock
{
explicit ScopedLock( MutexType& m ) : mut( m ), locked( true ) { mut.Lock(); }
~ScopedLock() { Unlock(); }
void Unlock() { if( !locked ) return; locked = false; mut.Unlock(); }
void LockAgain() { if( locked ) return; mut.Lock(); locked = true; }
private:
MutexType& mut;
bool locked;
private: // prevent copying the scoped lock.
void operator=(const ScopedLock&);
ScopedLock(const ScopedLock&);
};
#endif // _OPENMP_MUTEX_H
+4 -3
View File
@@ -1,5 +1,5 @@
* Copyright (C) 1992-2015 Jean-Pierre Charras
* Copyright (C) 1992-2017 Kicad Developers Team
* Copyright (C) 1992-2019 Kicad Developers Team
* under GNU General Public License (see copyright.txt)
== Main Authors
@@ -34,7 +34,7 @@ Andrew Zonenberg <azonenberg[at]drawersteak-dot-com>
Cirilo Bernardo <cirilo_bernardo[at]yahoo-dot-com>
Adam Wolf <adamwolf[at]feelslikeburning-dot-com>
Bernhard Stegmaier <stegmaier[at]sw-systems-dot-de>
Chris Pavlina <pavlina.chris[at]gmail-dot-com>
Alexis Lockwood <alexlockwood[at]fastmail-dot-com>
Simon Richter <Simon.Richter[at]hogyros-dot-de>
Mario Luzeiro <mrluzeiro[at]ua-dot-pt>
Mateusz Skowroński <skowri[at]gmail-dot-com>
@@ -55,7 +55,7 @@ https://code.launchpad.net/~kicad-product-committers/kicad/+git/product-git/+ref
Jean-Pierre Charras <jean-pierre.charras[at]gipsa-lab.inpg-dot-fr>
Igor Plyatov <plyatov[at]gmail-dot-com>
Fabrizio Tappero <fabrizio-dot-tappero[at]gmail-dot-com>
Marco Ciampa <ciampix[at]libero-dot-it>
Marco Ciampa <ciampix[at]posteo-dot-net>
Wayne Stambaugh <stambaughw[at]gmail-dot-com
@@ -64,6 +64,7 @@ Czech (CZ) Martin Kratoška <martin[at]ok1rr-dot-com>
Dutch (NL) Jerry Jacobs <xor.gate.engineering[at]gmail-dot-com>
Finnish (FI) Vesa Solonen <vesa.solonen[at]hut-dot-fi>
French (FR) Jean-Pierre Charras <jean-pierre.charras[at]inpg-dot-fr>
Italian (IT) Marco Ciampa <ciampix[at]posteo-dot-net>
Polish (PL) Mateusz Skowro¿ski <skowri[at]gmail-dot-com>
Polish (PL) Kerusey Karyu <keruseykaryu[at]o2.pl>
Portuguese (PT) Renie Marquet <reniemarquet[at]uol-dot-com-dot-br>"
+262 -186
View File
@@ -1,7 +1,7 @@
#
# This program source code file is part of KICAD, a free EDA CAD application.
#
# Copyright (C) 2007-2016 Kicad Developers, see AUTHORS.txt for contributors.
# Copyright (C) 2007-2018 Kicad Developers, see AUTHORS.txt for contributors.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -21,6 +21,15 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
cmake_minimum_required( VERSION 2.8.12 FATAL_ERROR )
# because of http://public.kitware.com/Bug/view.php?id=10395
# See https://gitlab.kitware.com/cmake/cmake/issues/15943
# Remove as soon as 3.1 is minimum required version
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW) # CMake 3.0
endif()
# Default to CMAKE_BUILD_TYPE = Release unless overridden on command line
# http://www.cmake.org/pipermail/cmake/2008-September/023808.html
if( DEFINED CMAKE_BUILD_TYPE )
@@ -33,12 +42,16 @@ project( kicad )
include( GNUInstallDirs )
cmake_minimum_required( VERSION 2.8.12 FATAL_ERROR )
# because of http://public.kitware.com/Bug/view.php?id=10395
# Path to local CMake modules.
set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules )
# On Windows, binaries created by link option -g3 are very large (more than 1Gb for pcbnew,
# and more than 3Gb for the full kicad suite)
# This option create binaries using link option -g1 that create much smaller files, but
# there are less info in debug (but the file names and line numbers are available)
option( BUILD_SMALL_DEBUG_FILES "In debug build: create smaller binaries." OFF )
#
# KiCad build options should be added below.
#
@@ -51,37 +64,49 @@ option( USE_WX_GRAPHICS_CONTEXT
"Use wxGraphicsContext for rendering (default OFF). Warning, this is experimental" )
option( USE_WX_OVERLAY
"Use wxOverlay: Always ON for MAC (default OFF). Warning, this is experimental" )
"Use wxOverlay: Always ON for MAC and GTK3 (default OFF)." )
option( KICAD_SCRIPTING
"Build the Python scripting support inside KiCad binaries (default OFF)."
"Build the Python scripting support inside KiCad binaries (default ON)."
ON )
option( KICAD_SCRIPTING_MODULES
"Build native portion of the pcbnew Python module: _pcbnew.{pyd,so} for OS command line use of Python."
ON )
option( KICAD_SCRIPTING_PYTHON3
"Build for Python 3 instead of 2 (default OFF)."
OFF )
option( KICAD_SCRIPTING_WXPYTHON
"Build wxPython implementation for wx interface building in Python and py.shell (default OFF)."
"Build wxPython implementation for wx interface building in Python and py.shell (default ON)."
ON )
option( KICAD_SCRIPTING_WXPYTHON_PHOENIX
"Use new wxPython binding (default OFF)."
OFF )
option( KICAD_SCRIPTING_ACTION_MENU
"Build a tools menu with registred python plugins: actions plugins (default OFF)."
)
option( KICAD_USE_OCE
"Build tools and plugins related to OpenCascade Community Edition (default OFF)"
"Build a tools menu with registered python plugins: actions plugins (default ON)."
ON )
option( KICAD_USE_OCE
"Build tools and plugins related to OpenCascade Community Edition (default ON)"
ON )
option( KICAD_USE_OCC
"Build tools and plugins related to OpenCascade Technology (overrides KICAD_USE_OCE, default OFF)"
OFF )
option( KICAD_INSTALL_DEMOS
"Install kicad demos and examples (default ON)"
"Install KiCad demos and examples (default ON)"
ON )
# when option KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES is enabled:
# PYTHON_EXECUTABLE can be defined when invoking cmake
# ( use -DPYTHON_EXECUTABLE=<python path>/python.exe or python2 )
# when not defined by user, the default is python.exe under Windows and python2 for others
# python binary file should be is exec path.
# python binary file should be in exec path.
# KICAD_SCRIPTING_MODULES requires KICAD_SCRIPTING enable it here if KICAD_SCRIPTING_MODULES is ON
if ( KICAD_SCRIPTING_MODULES AND NOT KICAD_SCRIPTING )
@@ -97,7 +122,7 @@ endif()
option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." ON )
option( KICAD_SPICE "Build Kicad with internal Spice simulator." ON )
option( KICAD_SPICE "Build KiCad with internal Spice simulator." ON )
# Global setting: exports are explicit
set( CMAKE_CXX_VISIBILITY_PRESET "hidden" )
@@ -153,7 +178,7 @@ if( NOT DEFAULT_INSTALL_PATH )
"Location of KiCad data files." )
endif()
message( STATUS "Kicad install dir: <${DEFAULT_INSTALL_PATH}>" )
message( STATUS "KiCad install dir: <${DEFAULT_INSTALL_PATH}>" )
# Generate build system specific header file.
include( PerformFeatureChecks )
@@ -187,6 +212,13 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
if(COMPILER_SUPPORTS_WSUGGEST_OVERRIDE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsuggest-override")
endif()
CHECK_CXX_COMPILER_FLAG("-Wvla" COMPILER_SUPPORTS_WVLA)
if(COMPILER_SUPPORTS_WVLA)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=vla")
endif()
endif()
@@ -194,7 +226,7 @@ endif()
# Unfortunately, the swig autogenerated files have a lot of shadowed variables
# and -Wno-shadow does not exist.
# Adding -Wshadow can be made only for .cpp files
#and will be added later in CMakeLists.txt
# and will be added later in CMakeLists.txt
if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
include(CheckCXXCompilerFlag)
@@ -205,20 +237,59 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
endif()
endif()
if( WIN32 )
# define UNICODE and_UNICODE definition on Windows. KiCad uses unicode.
# Both definitions are required
add_definitions(-DUNICODE -D_UNICODE)
endif()
#================================================
# Provide access to CCACHE
#================================================
if (USE_CCACHE)
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
get_property(RULE_LAUNCH_COMPILE GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
set(RULE_LAUNCH_COMPILE "${RULE_LAUNCH_COMPILE} ${CCACHE_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${RULE_LAUNCH_COMPILE})
get_property(RULE_LAUNCH_LINK GLOBAL PROPERTY RULE_LAUNCH_LINK)
set(RULE_LAUNCH_LINK "${RULE_LAUNCH_LINK} ${CCACHE_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${RULE_LAUNCH_LINK})
message(STATUS "Used ${CCACHE_FOUND} for compilation.")
else(CCACHE_FOUND)
message(STATUS "CCache was requested but not found.")
endif(CCACHE_FOUND)
endif(USE_CCACHE)
#================================================
# Provide access to DISTCC
#================================================
if (USE_DISTCC)
find_program(DISTCC_FOUND distcc)
if(DISTCC_FOUND)
get_property(RULE_LAUNCH_COMPILE GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
set(RULE_LAUNCH_COMPILE "${RULE_LAUNCH_COMPILE} ${DISTCC_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${RULE_LAUNCH_COMPILE})
message(STATUS "Using ${DISTCC_FOUND} for distributed build.")
else(DISTCC_FOUND)
message(INFO "Distcc was requested but not found.")
endif(DISTCC_FOUND)
endif(USE_DISTCC)
#================================================
# Set flags for GCC, or treat llvm as GCC
#================================================
if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE )
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( TO_LINKER -XLinker )
else()
set( TO_LINKER -Wl )
# Set 32-bit flag for GCC to prevent excess precision
if( CMAKE_SIZEOF_VOID_P EQUAL 4 )
set( CMAKE_CXX_FLAGS "-ffloat-store ${CMAKE_CXX_FLAGS}" )
endif()
# Establish -Wall early, so specialized relaxations of this may come
@@ -226,19 +297,22 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}" )
set( CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}" )
set( CMAKE_C_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG" )
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
# Link flags in Debug: -g1 and -ggdb1 or -g1 and -ggdb3 can be used.
# Level 1 produces minimal information, enough for making basic backtraces.
# This includes descriptions of functions and external variables, and line number tables,
# but no information about local variables.
# Level 3 includes full information, but binaries are much larger.
if( BUILD_SMALL_DEBUG_FILES )
set( CMAKE_C_FLAGS_DEBUG "-g1 -ggdb1 -DDEBUG" )
set( CMAKE_CXX_FLAGS_DEBUG "-g1 -ggdb1 -DDEBUG -Wno-deprecated-declarations" )
else()
set( CMAKE_C_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG" )
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
endif()
if( MINGW )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
# _UNICODE definition seems needed under mingw/gcc 4.8
# (Kicad uses unicode, and on Windows, wxWidgets >= 2.9.4 is mandatory
# and uses unicode)
if( GCC_VERSION VERSION_EQUAL 4.8.0 OR GCC_VERSION VERSION_GREATER 4.8.0 )
add_definitions(-D_UNICODE)
endif()
# Since version 2.8.5, Cmake uses a response file (.rsp) to
# pass the list of include paths to gcc
# unfortunately, under mingw32+msys, at least with gcc 4.8 and previous,
@@ -264,29 +338,21 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
# snprintf
add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
else()
if( NOT APPLE )
# Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it)
set( CMAKE_SHARED_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
set( CMAKE_MODULE_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
elseif( NOT APPLE )
# Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it)
set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
set( CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined" )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
# Defeat ELF's ability to use the GOT to replace locally implemented functions
# with ones from another module.
# https://bugs.launchpad.net/kicad/+bug/1322354
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
endif()
# Defeat ELF's ability to use the GOT to replace locally implemented functions
# with ones from another module.
# https://bugs.launchpad.net/kicad/+bug/1322354
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-Bsymbolic" )
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-Bsymbolic" )
endif()
# quiet GCC while in boost
if( GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8 OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-local-typedefs" )
endif()
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-strict-aliasing" )
if( APPLE )
set( CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -headerpad_max_install_names") # needed by fixbundle
endif()
@@ -305,10 +371,18 @@ if( KICAD_SCRIPTING_MODULES )
add_definitions( -DKICAD_SCRIPTING_MODULES )
endif()
if( KICAD_SCRIPTING_PYTHON3 )
add_definitions( -DKICAD_SCRIPTING_PYTHON3 )
endif()
if( KICAD_SCRIPTING_WXPYTHON )
add_definitions( -DKICAD_SCRIPTING_WXPYTHON )
endif()
if( KICAD_SCRIPTING_WXPYTHON_PHOENIX )
add_definitions( -DKICAD_SCRIPTING_WXPYTHON_PHOENIX )
endif()
if( KICAD_SCRIPTING_ACTION_MENU )
add_definitions( -DKICAD_SCRIPTING_ACTION_MENU )
endif()
@@ -321,6 +395,12 @@ if( KICAD_USE_OCE )
add_definitions( -DKICAD_USE_OCE )
endif()
if( KICAD_USE_OCC )
add_definitions( -DKICAD_USE_OCC )
remove_definitions( -DKICAD_USE_OCE )
unset( KICAD_USE_OCE )
endif()
if( KICAD_USE_CUSTOM_PADS )
add_definitions( -DKICAD_USE_CUSTOM_PADS )
endif()
@@ -356,6 +436,9 @@ if( NOT APPLE )
set( KICAD_BIN bin
CACHE PATH "Location of KiCad binaries." )
set( KICAD_DATA ${CMAKE_INSTALL_DATADIR}/kicad
CACHE PATH "Location of KiCad data files." )
if( WIN32 )
set( KICAD_PLUGINS ${KICAD_BIN}/scripting/plugins
CACHE PATH "Location of KiCad plugins." )
@@ -366,7 +449,7 @@ if( NOT APPLE )
set( KICAD_USER_PLUGIN ${KICAD_BIN}/plugins
CACHE PATH "Location of KiCad user-loaded plugins" )
else()
set( KICAD_PLUGINS ${CMAKE_INSTALL_LIBDIR}/kicad/plugins
set( KICAD_PLUGINS ${KICAD_DATA}/plugins
CACHE PATH "Location of KiCad plugins." )
set( KICAD_LIB ${CMAKE_INSTALL_LIBDIR}
@@ -376,8 +459,6 @@ if( NOT APPLE )
CACHE PATH "Location of KiCad user-loaded plugins" )
endif()
set( KICAD_DATA ${CMAKE_INSTALL_DATADIR}/kicad
CACHE PATH "Location of KiCad data files." )
set( KICAD_DOCS ${CMAKE_INSTALL_DATADIR}/doc/kicad
CACHE PATH "Location of KiCad documentation files." )
set( KICAD_DEMOS ${KICAD_DATA}/demos
@@ -471,59 +552,10 @@ include( ExternalProject )
#================================================
include( CheckFindPackageResult )
#
# Find OpenMP support, optional
#
find_package( OpenMP )
if( OPENMP_FOUND )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
add_definitions( -DUSE_OPENMP )
# MinGW does not include the OpenMP link library and FindOpenMP.cmake does not
# set it either. Not sure this is the most elegant solution but it works.
if( MINGW )
set( OPENMP_LIBRARIES gomp )
endif()
endif()
#
# Find wxWidgets library, required
#
# Here you can define what libraries of wxWidgets you need for your
# application. You can figure out what libraries you need here;
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
# Turn on wxWidgets compatibility mode for some classes
add_definitions( -DWX_COMPATIBILITY )
# See line 41 of CMakeModules/FindwxWidgets.cmake
set( wxWidgets_CONFIG_OPTIONS ${wxWidgets_CONFIG_OPTIONS} --static=no )
find_package( wxWidgets 3.0.0 COMPONENTS gl aui adv html core net base xml stc REQUIRED )
# Include wxWidgets macros.
include( ${wxWidgets_USE_FILE} )
# Check the toolkit used to build wxWidgets
execute_process( COMMAND sh -c "${wxWidgets_CONFIG_EXECUTABLE} --query-toolkit"
RESULT_VARIABLE wxWidgets_TOOLKIT_RESULT
OUTPUT_VARIABLE wxWidgets_TOOLKIT_FOUND
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if( wxWidgets_TOOLKIT_FOUND STREQUAL "gtk3" )
message( WARNING "\nwxWidgets library has been built against GTK3, it causes a lot of problems in KiCad" )
add_definitions( -DUSE_WX_GRAPHICS_CONTEXT )
add_definitions( -DWXGTK3 )
endif()
#
# Find OpenGL library, required
#
set( OpenGL_GL_PREFERENCE "LEGACY" ) # CMake 3.11+ setting; see 'cmake --help-policy CMP0072'
find_package( OpenGL REQUIRED )
#
@@ -538,6 +570,12 @@ endif()
# Find GLM library, required
#
find_package( GLM 0.9.5.1 REQUIRED )
if( GLM_VERSION MATCHES "0.9.9.3" AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
MESSAGE( FATAL_ERROR "\nGLM version ${GLM_VERSION} is incompatible with KiCad using GCC.\n"
"Please downgrade to GLM version 0.9.9.2 or older or use clang instead" )
endif()
add_definitions( -DGLM_FORCE_CTOR_INIT )
#
# Find CURL library, required for github plugin
@@ -549,7 +587,7 @@ endif()
#
# Find Cairo library, required
#
find_package( Cairo 1.8.8 REQUIRED )
find_package( Cairo 1.12 REQUIRED )
find_package( Pixman 0.30 REQUIRED )
#
@@ -559,10 +597,16 @@ find_package( Boost 1.54.0 REQUIRED )
# Include MinGW resource compiler.
include( MinGWResourceCompiler )
# Find GDI+ on windows if wxGraphicsContext is available.
if( MINGW AND USE_WX_GRAPHICS_CONTEXT )
find_package( GdiPlus )
check_find_package_result( GDI_PLUS_FOUND "GDI+" )
# Find GDI+ on windows if wxGraphicsContext is available, and only link gdiplus library
# if wxGraphicsContext not used, because the cairo printing system uses this library
if( WIN32 )
if( USE_WX_GRAPHICS_CONTEXT )
find_package( GdiPlus )
check_find_package_result( GDI_PLUS_FOUND "GDI+" )
else()
# if WX_GRAPHICS_CONTEXT is not used we just need the gdiplus library for cairo printing
set( GDI_PLUS_LIBRARIES gdiplus )
endif()
endif()
# Find ngspice library, required for integrated circuit simulator
@@ -572,9 +616,24 @@ endif()
# Find OpenCascade Community Edition, required for STEP plugin and tools
if( KICAD_USE_OCE )
set( LIBS_OCE TKBinXCAF TKPCAF TKSTEP TKXDESTEP TKIGES TKXDEIGES )
set( OCC_LIBRARIES TKBinXCAF TKPCAF TKSTEP TKXDESTEP TKIGES TKXDEIGES )
find_package( OCE 0.16 REQUIRED ${LIBS_OCE} )
find_package( OCE 0.16 REQUIRED ${OCC_LIBRARIES} )
elseif( KICAD_USE_OCC )
find_package(OpenCASCADE)
if( NOT OCC_FOUND )
MESSAGE( FATAL_ERROR "================================================================\n"
" KICAD_USE_OCC=True but OpenCASCADE was no found!\n"
"================================================================\n")
endif()
if( OCC_VERSION_STRING VERSION_LESS 6.8.0 )
MESSAGE( FATAL_ERROR "================================================================\n"
"OpenCASCADE version ${OCC_VERSION_STRING} was found.\n"
" KiCad requires a minimum version of 6.8.0\n"
"================================================================\n")
endif()
include_directories( SYSTEM ${OCC_INCLUDE_DIR} )
endif()
# Assist with header file searching optimization:
@@ -604,22 +663,27 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
find_package( SWIG 3.0 REQUIRED )
include( ${SWIG_USE_FILE} )
# force a python version < 3.0
set( PythonInterp_FIND_VERSION 2.6 )
set( PythonLibs_FIND_VERSION 2.6 )
if( KICAD_SCRIPTING_PYTHON3 )
set( PythonInterp_FIND_VERSION 3.3 )
set( PythonLibs_FIND_VERSION 3.3 )
else()
# force a python version < 3.0
set( PythonInterp_FIND_VERSION 2.6 )
set( PythonLibs_FIND_VERSION 2.6 )
endif()
find_package( PythonInterp )
check_find_package_result( PYTHONINTERP_FOUND "Python Interpreter" )
if( NOT PYTHON_VERSION_MAJOR EQUAL 2 )
if( NOT KICAD_SCRIPTING_PYTHON3 AND NOT PYTHON_VERSION_MAJOR EQUAL 2 )
message( FATAL_ERROR "Python 2.x is required." )
endif()
# Get the correct Python site package install path from the Python interpreter found by
# FindPythonInterp unless the user specifically defined a custom path.
if( NOT PYTHON_SITE_PACKAGE_PATH )
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import distutils.sysconfig;print\"%s\"%distutils.sysconfig.get_python_lib(plat_specific=0, standard_lib=0, prefix='')"
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import distutils.sysconfig;print(\"%s\"%distutils.sysconfig.get_python_lib(plat_specific=0, standard_lib=0, prefix=''))"
OUTPUT_VARIABLE PYTHON_SITE_PACKAGE_PATH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
@@ -644,78 +708,87 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
mark_as_advanced( PYTHON_DEST )
message( STATUS "Python module install path: ${PYTHON_DEST}" )
find_package( PythonLibs 2.6 )
if( KICAD_SCRIPTING_WXPYTHON )
# Check to see if the correct version of wxPython is installed based on the version of
# wxWidgets found. At least the major an minor version should match.
set( _wxpy_version "${wxWidgets_VERSION_MAJOR}.${wxWidgets_VERSION_MINOR}" )
set( _py_cmd "import wxversion;print wxversion.checkInstalled('${_wxpy_version}')" )
# Add user specified Python site package path.
if( PYTHON_SITE_PACKAGE_PATH )
set( _py_cmd
"import sys;sys.path.insert(0, \"${PYTHON_SITE_PACKAGE_PATH}\");${_py_cmd}" )
endif()
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "${_py_cmd}"
RESULT_VARIABLE WXPYTHON_VERSION_RESULT
OUTPUT_VARIABLE WXPYTHON_VERSION_FOUND
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# message( STATUS "WXPYTHON_VERSION_FOUND: ${WXPYTHON_VERSION_FOUND}" )
# message( STATUS "WXPYTHON_VERSION_RESULT: ${WXPYTHON_VERSION_RESULT}" )
# Check to see if any version of wxPython is installed on the system.
if( WXPYTHON_VERSION_RESULT GREATER 0 )
message( FATAL_ERROR "wxPython does not appear to be installed on the system." )
endif()
if( NOT WXPYTHON_VERSION_FOUND STREQUAL "True" )
message( FATAL_ERROR
"wxPython version ${_wxpy_version} does not appear to be installed on the system." )
endif()
set( WXPYTHON_VERSION ${_wxpy_version} CACHE STRING "wxPython version found." )
message( STATUS "wxPython version ${_wxpy_version} found." )
# Compare wxPython and wxWidgets toolkits
set( _py_cmd "import wx; print(wx.version().split(' ')[1])" )
# Add user specified Python site package path.
if( PYTHON_SITE_PACKAGE_PATH )
set( _py_cmd
"import sys;sys.path.insert(0, \"${PYTHON_SITE_PACKAGE_PATH}\");${_py_cmd}" )
endif()
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "${_py_cmd}"
RESULT_VARIABLE WXPYTHON_TOOLKIT_RESULT
OUTPUT_VARIABLE WXPYTHON_TOOLKIT_FOUND
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Check if wxWidgets toolkits match, it is a Linux-only issue
if( UNIX AND NOT APPLE AND NOT wxWidgets_TOOLKIT_FOUND STREQUAL WXPYTHON_TOOLKIT_FOUND )
message( FATAL_ERROR "\nwxWidgets and wxPython use different toolkits "
"(${wxWidgets_TOOLKIT_FOUND} vs ${WXPYTHON_TOOLKIT_FOUND}). "
"It will result in a broken build. Please either install wxPython built using "
"${wxWidgets_TOOLKIT_FOUND} or add '-DKICAD_SCRIPTING_WXPYTHON=OFF' to cmake "
"parameters to disable wxPython support." )
endif()
if( KICAD_SCRIPTING_PYTHON3 )
find_package( PythonLibs 3.3 REQUIRED )
else()
find_package( PythonLibs 2.6 REQUIRED )
endif()
#message( STATUS "PYTHON_INCLUDE_DIRS:${PYTHON_INCLUDE_DIRS}" )
if( KICAD_SCRIPTING_WXPYTHON )
find_package( wxPython REQUIRED )
message( STATUS "Found ${WXPYTHON_FLAVOR} "
"${WXPYTHON_VERSION}/${WXPYTHON_TOOLKIT} "
"(wxWidgets ${WXPYTHON_WXVERSION})" )
endif()
# Infrequently needed headers go at end of search paths, append to INC_AFTER which
# although is used for all components, should be a harmless hit for something like eeschema
# so long as unused search paths are at the end like this.
set( INC_AFTER ${INC_AFTER} ${PYTHON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/scripting )
#message( STATUS "/ INC_AFTER:${INC_AFTER}" )
endif()
#
# Find wxWidgets library, required
#
# Turn on wxWidgets compatibility mode for some classes
add_definitions( -DWX_COMPATIBILITY )
if( KICAD_SCRIPTING_WXPYTHON )
# Check if '--toolkit=xxx' option has been passed
string( REGEX MATCH "--toolkit=([a-zA-Z0-9]+)"
WXWIDGETS_REQUESTED_TOOLKIT "${wxWidgets_CONFIG_OPTIONS}" )
if( WXWIDGETS_REQUESTED_TOOLKIT
AND NOT WXWIDGETS_REQUESTED_TOOLKIT STREQUAL "--toolkit=${WXPYTHON_TOOLKIT}" )
message( WARNING "wxWidgets and wxPython must be based on the same toolkit.\n"
"It will be fixed automatically if you skip the '--toolkit=xxx' "
"wxWidgets_CONFIG_OPTIONS parameter.")
else()
# Use the same toolkit as wxPython otherwise there will be a symbol conflict
set( wxWidgets_CONFIG_OPTIONS ${wxWidgets_CONFIG_OPTIONS} "--toolkit=${WXPYTHON_TOOLKIT}" )
endif()
# Require the same wxWidgets version as is used by wxPython
set( wxWidgets_REQ_VERSION ${WXPYTHON_WXVERSION} )
else()
# Require wxWidgets 3.0.0 as the minimum when wxPython is disabled
set( wxWidgets_REQ_VERSION 3.0.0 )
endif()
# See line 49 of CMakeModules/FindwxWidgets.cmake
set( wxWidgets_CONFIG_OPTIONS ${wxWidgets_CONFIG_OPTIONS} --static=no )
find_package( wxWidgets ${wxWidgets_REQ_VERSION} COMPONENTS gl aui adv html core net base xml stc REQUIRED )
# Include wxWidgets macros.
include( ${wxWidgets_USE_FILE} )
# Check for GTK3 libraries - These do not have XOR, so we need overlay (Page layout editor)
if( wxWidgets_LIBRARIES MATCHES "gtk3" )
add_definitions( -DUSE_WX_OVERLAY )
endif()
if( KICAD_SCRIPTING_WXPYTHON AND NOT KICAD_SCRIPTING_WXPYTHON_PHOENIX )
# wxPython appears to be installed and valid so make sure the headers are available.
foreach( path ${wxWidgets_INCLUDE_DIRS} )
#message( STATUS "Searching for wx/wxPython/wxPython.h in ${path}" )
find_path( wxPYTHON_INCLUDE_DIRS wx/wxPython/wxPython.h
PATHS "${path}" )
if( wxPYTHON_INCLUDE_DIRS )
message( STATUS "Found wxPython.h in ${path}/wx/wxPython" )
break()
endif()
endforeach()
if( NOT wxPYTHON_INCLUDE_DIRS )
message( FATAL_ERROR "Cannot find wxPython.h" )
endif()
endif()
if( APPLE )
# Remove app bundles in ${KICAD_BIN} before installing anything new.
# Must be defined before all includes so that it is executed first.
@@ -754,6 +827,8 @@ if( DOXYGEN_FOUND )
DEPENDS Doxyfile
COMMENT "building developer's resource docs into directory Documentation/development/doxygen/html"
)
add_subdirectory(Documentation/docset)
else()
message( STATUS "WARNING: Doxygen not found - doxygen-docs (Source Docs) target not created" )
endif()
@@ -793,7 +868,7 @@ add_custom_target( uninstall
###
# Install scripts
###
if( UNIX )
if( UNIX AND NOT APPLE )
install( DIRECTORY scripts
DESTINATION ${KICAD_DOCS}
COMPONENT resources
@@ -815,30 +890,31 @@ if( UNIX AND NOT APPLE )
# Install Mime directory
install( DIRECTORY ${UNIX_ICON_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
# Install Icons
install( DIRECTORY ${UNIX_MIME_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
# Install Applications directory (.desktop files)
install( DIRECTORY ${UNIX_APPLICATIONS_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
# Install AppStream directory (app store entry)
install( DIRECTORY ${UNIX_APPDATA_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
endif()
#include( CTest )
enable_testing()
if( UNIX AND NOT APPLE )
@@ -868,7 +944,7 @@ add_subdirectory( 3d-viewer )
add_subdirectory( cvpcb )
add_subdirectory( eeschema )
add_subdirectory( gerbview )
add_subdirectory( lib_dxf )
add_subdirectory( dxflib_qcad )
add_subdirectory( pcbnew )
add_subdirectory( polygon )
add_subdirectory( pagelayout_editor )
-42
View File
@@ -1,42 +0,0 @@
# - Check if a symbol exists as a function, variable, or macro in C++
# CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>)
#
# Check that the <symbol> is available after including given header
# <files> and store the result in a <variable>. Specify the list
# of files in one argument as a semicolon-separated list.
# CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as opposed
# to CHECK_SYMBOL_EXISTS(), which works only for C.
#
# If the header files define the symbol as a macro it is considered
# available and assumed to work. If the header files declare the
# symbol as a function or variable then the symbol must also be
# available for linking. If the symbol is a type or enum value
# it will not be recognized (consider using CheckTypeSize or
# CheckCSourceCompiles).
#
# The following variables may be set before calling this macro to
# modify the way the check is run:
#
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
#=============================================================================
# Copyright 2003-2011 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
include(CheckSymbolExists)
macro(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
_CHECK_SYMBOL_EXISTS("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
endmacro()
@@ -39,7 +39,6 @@ macro( create_git_version_header _git_src_path )
ERROR_VARIABLE _git_log_error
RESULT_VARIABLE _git_log_result
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
set( ENV{LC_ALL} ${_Git_SAVED_LC_ALL} )
endif( GIT_FOUND )
+192
View File
@@ -0,0 +1,192 @@
# Try to find OCC
# Once done this will define
#
# OCC_FOUND - system has OCC - OpenCASCADE
# OCC_INCLUDE_DIR - where the OCC include directory can be found
# OCC_LIBRARY_DIR - where the OCC library directory can be found
# OCC_LIBRARIES - Link this to use OCC
############################################################################
#
# Modifications Copyright (C) 2018 Seth Hillbrand
#
# Based on FindOpenCasCade.cmake by the FreeCAD CAx development team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Set the needed libraries
set( OCC_LIBS
TKBinL
TKBin
TKBinTObj
TKBinXCAF
TKBool
TKBO
TKBRep
TKCAF
TKCDF
TKernel
TKFeat
TKFillet
TKG2d
TKG3d
TKGeomAlgo
TKGeomBase
TKHLR
TKIGES
TKLCAF
TKMath
TKMesh
TKMeshVS
TKOffset
TKOpenGl
TKPrim
TKService
TKShHealing
TKSTEP209
TKSTEPAttr
TKSTEPBase
TKSTEP
TKSTL
TKTObj
TKTopAlgo
TKV3d
TKVRML
TKXCAF
TKXDEIGES
TKXDESTEP
TKXMesh
TKXmlL
TKXml
TKXmlTObj
TKXmlXCAF
TKXSBase
)
set(OCC_TYPE "OpenCASCADE Standard Edition")
if(WIN32)
if(CYGWIN OR MINGW)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
/usr/include/opencascade
/usr/local/include/opencascade
/opt/opencascade/include
/opt/opencascade/inc
)
FIND_LIBRARY(OCC_LIBRARY TKernel
HINTS
${OCC_LIBRARY_DIR}
/usr/lib
/usr/local/lib
/opt/opencascade/lib
)
else(CYGWIN OR MINGW)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/include"
)
FIND_LIBRARY(OCC_LIBRARY TKernel
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/lib"
)
endif(CYGWIN OR MINGW)
else(WIN32)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
/usr/include/opencascade
/usr/local/include/opencascade
/opt/opencascade/include
/opt/opencascade/inc
)
FIND_LIBRARY(OCC_LIBRARY TKernel
HINTS
${OCC_LIBRARY_DIR}
/usr
/usr/local
/opt/opencascade
/opt/opencascade/lin64/gcc
PATH_SUFFIXES lib
)
endif(WIN32)
if(OCC_LIBRARY)
GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH)
IF(NOT OCC_INCLUDE_DIR)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
${OCC_LIBRARY_DIR}/../inc
)
ENDIF()
else(OCC_LIBRARY)
message( "" )
message( "*** OpenCascade library missing ***" )
message( "Verify your OpenCascade installation or pass CMake" )
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" )
message( "" )
message( FATAL_ERROR "" )
endif(OCC_LIBRARY)
if(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR
REGEX "#define OCC_VERSION_MAJOR.*"
)
string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR})
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR
REGEX "#define OCC_VERSION_MINOR.*"
)
string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR})
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT
REGEX "#define OCC_VERSION_MAINTENANCE.*"
)
string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT})
set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}")
else(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
message( "" )
message( "*** OpenCascade header files missing ***" )
message( "Verify your OpenCascade installation or pass CMake" )
message( " the header directory as '-DOCC_INCLUDE_DIR=<path>'" )
message( "" )
message( FATAL_ERROR "" )
endif(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
# handle the QUIETLY and REQUIRED arguments and set OCC_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OCC REQUIRED_VARS OCC_INCLUDE_DIR VERSION_VAR OCC_VERSION_STRING)
if(OCC_FOUND)
foreach(lib IN LISTS OCC_LIBS)
#Use the specified library location if given
find_library(OCC_TEMP_LIB ${lib} HINTS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH)
if(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
message( "" )
message( "*** OpenCascade library missing ***" )
message( "Could not find a library for ${lib} at ${OCC_LIBRARY_DIR}" )
message( "Verify your OpenCascade installation or pass CMake" )
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" )
message( "" )
message( FATAL_ERROR "" )
else(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
list(APPEND OCC_LIBRARIES ${OCC_TEMP_LIB})
endif(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
unset(OCC_TEMP_LIB CACHE)
endforeach(lib)
#Convert path names to absolute for cleaner display
get_filename_component(OCC_INCLUDE_DIR "${OCC_INCLUDE_DIR}" ABSOLUTE)
get_filename_component(OCC_LIBRARY_DIR "${OCC_LIBRARY_DIR}" ABSOLUTE)
message(STATUS "Found ${OCC_TYPE} version: ${OCC_VERSION_STRING}")
message(STATUS " ++ ${OCC_TYPE} include directory: ${OCC_INCLUDE_DIR}")
message(STATUS " ++ ${OCC_TYPE} shared libraries directory: ${OCC_LIBRARY_DIR}")
endif(OCC_FOUND)
+1 -1
View File
@@ -37,7 +37,7 @@ unset(_Python_NAMES)
set(_PYTHON1_VERSIONS 1.6 1.5)
set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
set(_PYTHON3_VERSIONS 3.3 3.2 3.1 3.0)
set(_PYTHON3_VERSIONS 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
if(PythonInterp_FIND_VERSION)
if(PythonInterp_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
+1 -1
View File
@@ -44,7 +44,7 @@ cmake_find_frameworks(Python)
set(_PYTHON1_VERSIONS 1.6 1.5)
set(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
set(_PYTHON3_VERSIONS 3.3 3.2 3.1 3.0)
set(_PYTHON3_VERSIONS 3.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
if(PythonLibs_FIND_VERSION)
if(PythonLibs_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
+31 -6
View File
@@ -1,6 +1,24 @@
# CMake script for finding libngspice
# (C) CERN 2016
# Copyright (C) 2016 CERN
# Author: Maciej Suminski <maciej.suminski@cern.ch>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you may find one here:
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# or you may search the http://www.gnu.org website for the version 2 license,
# or you may write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
find_path( NGSPICE_INCLUDE_DIR ngspice/sharedspice.h
PATHS ${NGSPICE_ROOT_DIR} $ENV{NGSPICE_ROOT_DIR} ${NGSPICE_INCLUDE_PATH}
@@ -12,6 +30,15 @@ find_library( NGSPICE_LIBRARY ngspice
PATH_SUFFIXES src/.libs lib
)
if( WIN32 AND MSYS )
# NGSPICE_LIBRARY points to libngspice.dll.a on Windows,
# but the goal is to find out the DLL name.
find_library( NGSPICE_DLL NAMES libngspice-0.dll libngspice-1.dll )
else()
set( NGSPICE_DLL "${NGSPICE_LIBRARY}" )
endif()
include( FindPackageHandleStandardArgs )
if( ${NGSPICE_INCLUDE_DIR} STREQUAL "NGSPICE_INCLUDE_DIR-NOTFOUND" OR ${NGSPICE_LIBRARY} STREQUAL "NGSPICE_LIBRARY-NOTFOUND" )
@@ -20,7 +47,7 @@ if( ${NGSPICE_INCLUDE_DIR} STREQUAL "NGSPICE_INCLUDE_DIR-NOTFOUND" OR ${NGSPICE_
message( "Most of ngspice packages do not provide the required libngspice library." )
message( "You can either compile ngspice configured with --with-ngshared parameter" )
message( "or run a script that does the job for you:" )
message( " cd ./scripts" )
message( " cd ./scripting/build_tools" )
message( " chmod +x get_libngspice_so.sh" )
message( " ./get_libngspice_so.sh" )
message( " sudo ./get_libngspice_so.sh install" )
@@ -28,12 +55,10 @@ if( ${NGSPICE_INCLUDE_DIR} STREQUAL "NGSPICE_INCLUDE_DIR-NOTFOUND" OR ${NGSPICE_
endif()
find_package_handle_standard_args( ngspice
REQUIRED_VARS
NGSPICE_INCLUDE_DIR
NGSPICE_LIBRARY
)
REQUIRED_VARS NGSPICE_INCLUDE_DIR NGSPICE_LIBRARY NGSPICE_DLL )
mark_as_advanced(
NGSPICE_INCLUDE_DIR
NGSPICE_LIBRARY
NGSPICE_DLL
)
+101
View File
@@ -0,0 +1,101 @@
# CMake script for finding wxPython/Phoenix library
# Copyright (C) 2018 CERN
# Author: Maciej Suminski <maciej.suminski@cern.ch>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you may find one here:
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# or you may search the http://www.gnu.org website for the version 2 license,
# or you may write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
# Exported variables:
# WXPYTHON_VERSION: wxPython/Phoenix version,
# normally 3.x.x for wxPython, 4.x.x for Phoenix
# WXPYTHON_FLAVOR: 'Phoenix' or 'wxPython'
# WXPYTHON_TOOLKIT: base library toolkit (e.g. gtk2, gtk3, msw, osx_cocoa)
# WXPYTHON_WXVERSION: wxWidgets version used by wxPython/Phoenix
# Create a CMake list containing wxPython version
set( _py_cmd "import wx;print(wx.version())" )
# Add user specified Python site package path
if( PYTHON_SITE_PACKAGE_PATH )
set( _py_site_path
"import sys;sys.path.insert(0, \"${PYTHON_SITE_PACKAGE_PATH}\");" )
if( APPLE ) # extra path for macOS, so that 'wx' module is accessible
set( _py_site_path
"${_py_site_path}sys.path.insert(0, \"${PYTHON_SITE_PACKAGE_PATH}/wx-3.0-osx_cocoa\");" )
endif()
endif()
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "${_py_site_path}${_py_cmd}"
RESULT_VARIABLE _WXPYTHON_VERSION_RESULT
OUTPUT_VARIABLE _WXPYTHON_VERSION_FOUND
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Check to see if any version of wxPython is installed on the system.
if( _WXPYTHON_VERSION_RESULT GREATER 0 )
message( FATAL_ERROR "wxPython/Phoenix does not appear to be installed on the system" )
endif()
# Turn the version string to a list for easier processing
set( _WXPYTHON_VERSION_LIST ${_WXPYTHON_VERSION_FOUND})
separate_arguments( _WXPYTHON_VERSION_LIST )
list( LENGTH _WXPYTHON_VERSION_LIST _VERSION_LIST_LEN )
if( _VERSION_LIST_LEN LESS 3 )
message( FATAL_ERROR "Unknown wxPython/Phoenix version string: ${_WXPYTHON_VERSION_FOUND}" )
endif()
# wxPython style, e.g. '3.0.2.0;gtk3;(classic) or Pheonix style: e.g. 4.0.1;gtk3;(phoenix)
list( GET _WXPYTHON_VERSION_LIST 0 WXPYTHON_VERSION )
list( GET _WXPYTHON_VERSION_LIST 1 WXPYTHON_TOOLKIT )
list( GET _WXPYTHON_VERSION_LIST 2 WXPYTHON_FLAVOR )
# Determine wxWidgets version used by wxPython/Phoenix
if( WXPYTHON_FLAVOR MATCHES "phoenix" )
# 4.0.1;gtk3;(phoenix) does not contain wxWidgets version, request it explicitly
set( _py_cmd "import wx;print(wx.wxWidgets_version.split(' ')[1])")
execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "${_py_site_path}${_py_cmd}"
RESULT_VARIABLE WXPYTHON_WXVERSION_RESULT
OUTPUT_VARIABLE WXPYTHON_WXVERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if( NOT WXPYTHON_WXVERSION_RESULT EQUAL 0 )
set( WXPYTHON_WXVERSION "3.0.2" )
message( WARNING "Could not determine wxWidgets version used by Phoenix, "
"requesting ${WXPYTHON_WXVERSION}" )
endif()
set( WXPYTHON_FLAVOR "Phoenix" )
elseif( WXPYTHON_FLAVOR MATCHES "classic" )
# 3.0.2.0;gtk3;(classic) has the wxWidgets version in the first part
set( WXPYTHON_WXVERSION ${WXPYTHON_VERSION} )
set( WXPYTHON_FLAVOR "wxPython" )
else()
message( FATAL_ERROR "Unknown wxPython/Phoenix type: ${WXPYTHON_FLAVOR}")
endif()
# Fix an incosistency between the toolkit names reported by wx.version() and wx-config for cocoa
if( WXPYTHON_TOOLKIT STREQUAL "osx-cocoa" )
set( WXPYTHON_TOOLKIT "osx_cocoa" )
endif()
+31 -31
View File
@@ -1,38 +1,38 @@
#
# This program source code file is part of KICAD, a free EDA CAD application.
#
#
# This program source code file is part of KICAD, a free EDA CAD application.
#
# Copyright (C) 2016 Wayne Stambaugh <stambaughw@gmail.com>
# Copyright (C) 2016 - 2018 KiCad Developers, see AUTHORS.txt for contributors.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you may find one here:
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# or you may search the http://www.gnu.org website for the version 2 license,
# or you may write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
# Note: unless you are the person responsible for creating releases,
# do *not* change these variables. This way the KiCad project
# can maintain control over what is an official KiCad build and
# what is not. Setting these variable that conflict with KiCad
# releases is a shooting offense.
#
# This file gets included in the WriteVersionHeader.cmake file to set
# Copyright (C) 2016 - 2019 KiCad Developers, see AUTHORS.txt for contributors.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you may find one here:
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# or you may search the http://www.gnu.org website for the version 2 license,
# or you may write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
# Note: unless you are the person responsible for creating releases,
# do *not* change these variables. This way the KiCad project
# can maintain control over what is an official KiCad build and
# what is not. Setting these variable that conflict with KiCad
# releases is a shooting offense.
#
# This file gets included in the WriteVersionHeader.cmake file to set
# the default KiCad version when the source is provided in an archive
# file or git is not available on the build system. When KiCad is
# cloned using git, the git version is used. This version string should
# be set after each version tag is added to the git repo. This will
# give developers a reasonable idea where which branch was used to build
# KiCad.
set( KICAD_VERSION "5.0.0-rc2-dev-unknown" )
set( KICAD_VERSION "5.1.2" )
+1 -1
View File
@@ -47,7 +47,7 @@ set( output_begin "
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.h>
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {"
)
+3
View File
@@ -72,4 +72,7 @@
#define KIFACE_SUFFIX "@KIFACE_SUFFIX@"
#define KIFACE_PREFIX "@KIFACE_PREFIX@"
/// Allows scripts install directory to be referenced by the program code.
#define PYTHON_DEST "@PYTHON_DEST@"
#endif // CONFIG_H_
+1 -1
View File
@@ -1128,7 +1128,7 @@ removed: (common/infospgm.cpp) is no longer needed
When a sheet is deleted by block delete. it is put in undo list.
It is really deleted after 10 changes (when the undo list is full).
At this time, the associated data is also deleted.
If an other (not deleted) sheet shares the same data, this data is lost.
If another (not deleted) sheet shares the same data, this data is lost.
Need work to solve this problem and keep the undo/redo feature.
+1 -1
View File
@@ -281,7 +281,7 @@ Component library object and other minor improvements.
Speed up ZONE_CONTAINER::Copy method
Speed up NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname ) by using afast binary search
Switch to kbool V2.1. This version solves others problems in zones calculations.
Adding an other way to generate thermal shape; DO NOT USE: this is for kbool tests only
Adding another way to generate thermal shape; DO NOT USE: this is for kbool tests only
(I am thinking some bugs are remaining, so i am always working on kbool tests.
Klaas Olwerda is supporting me)
File diff suppressed because it is too large Load Diff
@@ -50,6 +50,51 @@ developers. The other KiCad developers will appreciate your effort.
**Do not modify this document without the consent of the project
leader. All changes to this document require approval.**
## 1.3 Tools
There are some tools that can help you format your code easily.
[`clang-format`][clang-format] is a formatting tool that can both be used to
provide code-style automation to your editor of choice, as well as allow git to
check formatting when committing (using a "Git hook"). You should install this
program to be able to use the Git hooks.
The style config file is `_clang-format`, and should be picked up automatically
by `clang-format` when the `--style=file` option is set.
To enable the Git hooks (only needs to be done once per Git repo):
git config core.hooksPath .githooks
Set the `git clang-format` tool to use the provided `_clang-format` file:
git config clangFormat.style file
Then, to enable the format checker, set the `kicad.check-format` Git config
to "true" for the KiCad repo:
git config kicad.check-format true
Without this config, the format checker will not run on commit, but you can
still check files staged for commit manually:
tools/check_coding.sh --diff
If the hook is enabled, when you commit a change, you will be told if you
have caused any style violations (only in your changed code). You can fix your
staged changes automatically with this tool:
tools/check_coding.sh
Or you can proceed anyway, if you are sure your style is correct:
git commit --no-verify
The `check_coding.sh` tool has other modes:
* Make (or see only) changes to files modified in the previous commit:
* `check_coding.sh --amend [--diff]`
# 2. Naming Conventions # {#naming_conventions}
Before delving into anything as esoteric as indentation and formatting,
@@ -201,8 +246,8 @@ good practice to actually generate the Doxygen \*.html files by
building target doxygen-docs, and then to review the quality of your
Doxygen comments with a web browser before submitting a patch.
[doccode]: http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html
[manual]: http://www.stack.nl/~dimitri/doxygen/manual.html
[doccode]: http://www.doxygen.nl/manual/docblocks.html
[manual]: http://www.doxygen.nl/manual
### 3.2.1 Function Comments ### {#function_comments}
These go into a header file, unless the function is a private (i.e.
@@ -788,6 +833,7 @@ learn something new.
- [C++ Operator Overloading Guidelines][overloading]
- [Wikipedia's Programming Style Page][style]
[clang-format]: https://clang.llvm.org/docs/ClangFormat.html
[cppstandard]:http://www.possibility.com/Cpp/CppCodingStandard.html
[kernel]:http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/Documentation/CodingStyle
[overloading]:http://www.cs.caltech.edu/courses/cs11/material/cpp/donnie/cpp-ops.html
+104 -85
View File
@@ -95,22 +95,39 @@ available and is always required to build KiCad.
## Python Programming Language ## {#python}
The [Python][] programming language is used to provide scripting support to KiCad. It only needs
to be install if the [KiCad scripting](#kicad_scripting) build configuration option is enabled.
The [Python][] programming language is used to provide scripting support to KiCad. It needs
to be installed unless the [KiCad scripting](#kicad_scripting) build configuration option is
disabled.
## wxPython Library ## {#wxpython}
The [wxPython][] library is used to provide a scripting console for Pcbnew. It only needs to be
installed if the [wxPython scripting](#wxpython_scripting) build configuration option is enabled.
When building KiCad with wxPython support, make sure the version of the wxWidgets library and
the version of wxPython installed on your system are the same. Mismatched versions have been
known to cause runtime issues.
The [wxPython][] library is used to provide a scripting console for Pcbnew. It needs to be
installed unless the [wxPython scripting](#wxpython_scripting) build configuration option is
disabled. When building KiCad with wxPython support, make sure the version of the wxWidgets
library and the version of wxPython installed on your system are the same. Mismatched versions
have been known to cause runtime issues.
## Curl Multi-Protocol File Transfer Library ## {#curl}
The [Curl Multi-Protocol File Transfer Library][libcurl] is used to provide secure internet
file transfer access for the [GitHub][] plug in. This library only needs to be installed if
the GitHub plug build option is enabled.
file transfer access for the [GitHub][] plug in. This library needs to be installed unless
the GitHub plug build option is disabled.
## OpenCascade Library ## {#oce}
The [OpenCascade Community Edition (OCE)][liboce] is used to provide support for loading and saving
3D model file formats such as STEP. This library needs to be installed unless the OCE build
option is disabled.
[Open CASCSADE Technology (OCC)][libocc] should also work as an alternative to OCE. Selection of
library Cascade library can be specified at build time. See the [STEP/IGES support](#oce_opt)
section.
## Ngspice Library ## {#ngspice}
The [Ngspice Library][libngsice] is used to provide Spice simulation support in the schematic
editor. Make sure the the version of ngspice library used was built with the--with-ngshared
option. This library needs to be installed unless the Spice build option is disabled.
# KiCad Build Configuration Options # {#build_opts}
@@ -139,11 +156,21 @@ This options is enabled by default.
The KICAD_SCRIPTING_MODULES option is used to enable building and installing the Python modules
supplied by KiCad. This option is enabled by default.
## Python 3 Scripting Support ## {#python3}
The KICAD_SCRIPTING_PYTHON3 option is used to enable building of the Python 3 interface instead
of Python 2. This option is disabled by default.
## wxPython Scripting Support ## {#wxpython_opt}
The KICAD_SCRIPTING_WXPYTHON option is used to enable building the wxPython interface into
Pcbnew including the wxPython console. This option is enabled by default.
## wxPython Phoenix Scripting Support ## {#wxpython_phoenix}
The KICAD_SCRIPTING_WXPYTHON_PHOENIX option is used to enable building the wxPython interface with
the new Phoenix binding instead of the legacy one. This option is disabled by default.
## GitHub Plugin ## {#github_opt}
The BUILD_GITHUB_PLUGIN option is used to control if the GitHub plug in is built. This option is
@@ -159,9 +186,12 @@ library. This option is enabled by default.
The KICAD_USE_OCE is used for the 3D viewer plugin to support STEP and IGES 3D models. Build tools
and plugins related to OpenCascade Community Edition (OCE) are enabled with this option. When
enabled it requires [OCE][] to be available, and the location of the installed OCE library to be
enabled it requires [liboce][] to be available, and the location of the installed OCE library to be
passed via the OCE_DIR flag. This option is enabled by default.
Alternatively KICAD_USE_OCC can be used instead of OCE. Both options are not supposed to be enabled
at the same time.
## Demos and Examples ## {#demo_install_opt}
The KiCad source code includes some demos and examples to showcase the program. You can choose
@@ -175,29 +205,22 @@ The KICAD_SCRIPTING_ACTION_MENU option allows Python scripts to be added directl
menu. This option is disabled by default. Please note that this option is highly experimental
and can cause Pcbnew to crash if Python scripts create an invalid object state within Pcbnew.
## Setting the Build Version and Repository Name ## {#build_version_opt}
## KiCad Build Version ## {#build_version_opt}
The KiCad version string is defined by the three CMake variables KICAD_VERSION, KICAD_BRANCH_NAME,
and KICAD_VERSION_EXTRA. Variables KICAD_BRANCH_NAME and KICAD_VERSION_EXTRA are defined as empty
strings and can be set at configuration. Unless the source branch is a stable release archive,
KICAD_VERSION is set to "no-vcs-found". If an optional variable is not define, it is not appended
to the full version string. If an optional variable is defined it is appended along with a leading
'-' to the full version string as follows:
The KiCad version string is defined by the output of `git describe --dirty` when git is available
or the version string defined in CMakeModules/KiCadVersion.cmake with the value of
KICAD_VERSION_EXTRA appended to the former. If the KICAD_VERSION_EXTRA variable is not define,
it is not appended to the version string. If the KICAD_VERSION_EXTRA variable is defined it
is appended along with a leading '-' to the full version string as follows:
KICAD_VERSION[-KICAD_BRANCH_NAME][-KICAD_VERSION_EXTRA]
(KICAD_VERSION[-KICAD_VERSION_EXTRA])
When the version string is set to "no-vcs-found", the build script automatically creates the
version string information from the [git][] repository information as follows:
The build script automatically creates the version string information from the [git][] repository
information as follows:
(2016-08-26 revision 67230ac)-master
| | |
| | branch name, "HEAD" if not on a branch,
| | or "unknown" if no .git present
| |
| abbreviated commit hash, or no-git if no .git
| present
(5.0.0-rc2-dev-100-g5a33f0960)
|
date of commit, or date of build if no .git present
output of `git describe --dirty` if git is available.
# Getting the KiCad Source Code ## {#getting_src}
@@ -206,7 +229,7 @@ can down load the source archive from the [KiCad Launchpad][] developers page.
other archive program to extract the source on your system. If you are using tar, use the
following command:
tar -xzf kicad_src_archive.tar.gz
tar -xaf kicad_src_archive.tar.xz
If you are contributing directly to the KiCad project on Launchpad, you can create a local
copy on your machine by using the following command:
@@ -215,7 +238,7 @@ copy on your machine by using the following command:
Here is a list of source links:
Stable release archive: https://launchpad.net/kicad/4.0/4.0.2/+download/kicad-4.0.2.tar.xz
Stable release archive: https://launchpad.net/kicad/5.0/5.0.2/+download/kicad-5.0.2.tar.xz
Development branch: https://code.launchpad.net/~kicad-product-committers/kicad/+git/product-git/+ref/master
@@ -230,9 +253,6 @@ To perform a full build on Linux, run the following commands:
mkdir build/debug # Optional for debug build.
cd build/release
cmake -DCMAKE_BUILD_TYPE=Release \
-DKICAD_SCRIPTING=ON \
-DKICAD_SCRIPTING_MODULES=ON \
-DKICAD_SCRIPTING_WXPYTHON=ON \
../../
make
sudo make install
@@ -249,38 +269,19 @@ the dependencies from source which is a huge and frustrating undertaking. The [
provides packages for all of the require dependencies to build KiCad. To setup the [MSYS2][]
build environment, depending on your system download and run either the [MSYS2 32-bit Installer][]
or the [MSYS2 64-bit Installer][]. After the installer is finished, update to the latest
package versions by running the `msys2_shell.bat` file located in the MSYS2 install path and
package versions by running the `msys2_shell.cmd` file located in the MSYS2 install path and
running the command `pacman -Syu`. If the msys2-runtime package is updated, close the shell
and run `msys2_shell.bat`.
and run `msys2_shell.cmd`.
## MSYS2 the Easy Way ## {#msys2_easy}
## Building using MSYS2 ## {#msys2_build}
The easiest way to build KiCad using the [MSYS2][] build environment is to use the KiCad
[PKGBUILD][] provided by the MSYS2 project to build package using the head of the KiCad
development branch. To build the KiCad package, run the `msys2_shell.bat` file located in the
MSYS2 install path and run the following commands:
pacman -S base-devel git
mkdir src
cd src
git clone https://github.com/Alexpux/MINGW-packages
cd MinGW-packages/mingw-w64-kicad-git
makepkg-mingw -is
This will download and install all of the build dependencies, clone the KiCad source mirror
from GitHub, create both 32-bit and 64-bit KiCad packages depending on your MSYS setup, and
install the newly built KiCad packages. Please note that this build process takes a very
long time to build even on a fast system.
## MSYS2 the Hard Way ## {#msys2_hard}
If you do not want to create KiCad packages and prefer the traditional `make && make install`
method of building KiCad, your task is significantly more involved. For 64 bit builds run
the `mingw64_shell.bat` file located in the MSYS2 install path. At the command prompt run the
the following commands:
The following commands assume you are building for 64-bit Windows, and that you already have
the KiCad source code in a folder called `kicad-source` in your home directory. See below
for changes if you need to build for 32-bit instead. Run `mingw64.exe` from the MSYS2
install path. At the command prompt run the the following commands:
pacman -S base-devel \
git \
mingw-w64-x86_64-cmake \
mingw-w64-x86_64-doxygen \
mingw-w64-x86_64-gcc \
@@ -294,7 +295,9 @@ the following commands:
mingw-w64-x86_64-wxPython \
mingw-w64-x86_64-wxWidgets \
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-glm
mingw-w64-x86_64-glm \
mingw-w64-x86_64-oce \
mingw-w64-x86_64-ngspice
cd kicad-source
mkdir -p build/release
mkdir build/debug # Optional for debug build.
@@ -304,15 +307,13 @@ the following commands:
-DCMAKE_PREFIX_PATH=/mingw64 \
-DCMAKE_INSTALL_PREFIX=/mingw64 \
-DDEFAULT_INSTALL_PATH=/mingw64 \
-DKICAD_SCRIPTING=ON \
-DKICAD_SCRIPTING_MODULES=ON \
-DKICAD_SCRIPTING_WXPYTHON=ON \
../../
make install
For 32-bit builds, run `mingw32_shell.bat` and change `x86_64` to `i686` in the package names and
For 32-bit builds, run `mingw32.exe` and change `x86_64` to `i686` in the package names and
change the paths in the cmake configuration from `/mingw64` to `/mingw32`.
For debug builds, run the cmake command with `-DCMAKE_BUILD_TYPE=Debug` from the `build/debug` folder.
## Known MSYS2 Build Issues ## {#known_issues_msys2}
@@ -328,27 +329,46 @@ to crash. You must downgrade to version 1.57 by running the command:
pacman -U /var/cache/pacman/pkg/mingw-w64-x86_64-boost-1.57.0-4-any.pkg.tar.xz
If the file mingw-w64-x86_64-boost-1.57.0-4-any.pkg.tar.xz is no longer in your pacman cache,
you will have to down load it from the [MSYS2 64-bit SourceForge repo][]. You should also
you will have to download it from the [MSYS2 64-bit SourceForge repo][]. You should also
configure pacman to prevent upgrading the 64-bit Boost package by adding:
IgnorePkg = mingw-w64-x86_64-boost
to your /etc/pacman.conf file.
### Building OCE from source
KiCad requires OCE by default, and the version installed by `pacman` can cause build errors in
x86_64 systems as of March 2018. In order to work around this, you can build OCE from source on
these systems. Building OCE on Windows requires that you place the source code in a very short
directory path, otherwise you will run into errors caused by the maximum path length on Windows.
In the example below, the `MINGW-packages` repository is cloned to `/c/mwp`, which is equivalent to
`C:\mwp` in Windows path terminology. You may wish to change the destination of the `git clone`
command if you do not want to place it on the root of your C drive, but if you run in to strange
compilation errors about missing files, it is probably because your path is too long.
git clone https://github.com/Alexpux/MINGW-packages /c/mwp
cd /c/mwp/mingw-w64-oce
makepkg-mingw -is
# Building KiCad on macOS # {#build_osx}
Building on macOS is challenging at best. It typically requires building dependency libraries
that require patching in order to work correctly. For more information on the complexities of
building and packaging KiCad on macOS, see the [macOS bundle build scripts][].
As of V5, building and packaging for macOS can be done using [kicad-mac-builder][],
which downloads, patches, builds, and packages for macOS. It is used to create the official
releases and nightlies, and it reduces the complexity of setting up a build environment to a command
or two. Usage of kicad-mac-builder is detailed at on its website.
In the following set of commands, replace the macOS version number (i.e. 10.9) with the desired
If you wish to build without kicad-mac-builder, please use the following and its source code
as reference. Building on macOS requires building dependency libraries that require patching
in order to work correctly.
In the following set of commands, replace the macOS version number (i.e. 10.11) with the desired
minimum version. It may be easiest to build for the same version you are running.
KiCad currently won't work with a stock version of wxWidgets that can be downloaded or installed by
package managers like MacPorts or Homebrew. To avoid having to deal with patches a [KiCad fork of
wxWidgets][] is being maintained on GitHub. All the needed patches and some other fixes/improvements
are contained in the `kicad/macos-wx-3.0` branch.
KiCad currently won't work with a stock version of wxWidgets that can be downloaded or
installed by package managers like MacPorts or Homebrew. To avoid having to deal with
patches a [KiCad fork of wxWidgets][] is being maintained on GitHub. All the needed patches
and some other fixes/improvements are contained in the `kicad/macos-wx-3.0` branch.
To perform a wxWidgets build, execute the following commands:
@@ -370,7 +390,7 @@ To perform a wxWidgets build, execute the following commands:
--with-zlib=builtin \
--with-expat=builtin \
--without-liblzma \
--with-macosx-version-min=10.9 \
--with-macosx-version-min=10.11 \
--enable-universal-binary=i386,x86_64 \
CC=clang \
CXX=clang++
@@ -386,7 +406,7 @@ Now, build a basic KiCad without Python scripting using the following commands:
cd build/release
cmake -DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \
-DwxWidgets_CONFIG_EXECUTABLE=<your wxWidgets build folder>/wx-bin/bin/wx-config \
-DKICAD_SCRIPTING=OFF \
-DKICAD_SCRIPTING_MODULES=OFF \
@@ -411,9 +431,6 @@ configuration as follows to point it to your own wxWidgets/wxPython:
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 \
-DwxWidgets_CONFIG_EXECUTABLE=<your wxWidgets build folder>/wx-bin/bin/wx-config \
-DKICAD_SCRIPTING=ON \
-DKICAD_SCRIPTING_MODULES=ON \
-DKICAD_SCRIPTING_WXPYTHON=ON \
-DPYTHON_EXECUTABLE=<path-to-python-exe>/python \
-DPYTHON_SITE_PACKAGE_PATH=<your wxWidgets build folder>/wx-bin/lib/python2.7/site-packages \
-DCMAKE_INSTALL_PREFIX=../bin \
@@ -445,7 +462,7 @@ you will have to apply the Boost patches in the KiCad source [patches folder][].
[GIT]: https://git-scm.com/
[GitHub]: https://github.com/KiCad/kicad-source-mirror
[ngspice]: http://ngspice.sourceforge.net/
[Doxygen]: http://www.stack.nl/~dimitri/doxygen/
[Doxygen]: http://www.doxygen.nl
[mailing list]: https://launchpad.net/~kicad-developers
[SWIG]: http://www.swig.org/
[wxWidgets]: http://wxwidgets.org/
@@ -456,11 +473,11 @@ you will have to apply the Boost patches in the KiCad source [patches folder][].
[Cairo]: http://cairographics.org/
[Python]: https://www.python.org/
[wxPython]: http://wxpython.org/
[MSYS2]: http://msys2.github.io/
[MSYS2 32-bit Installer]: http://repo.msys2.org/distrib/i686/msys2-i686-20150916.exe
[MSYS2 64-bit Installer]: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20150916.exe
[MSYS2]: http://www.msys2.org/
[MSYS2 32-bit Installer]: http://repo.msys2.org/distrib/i686/msys2-i686-20161025.exe
[MSYS2 64-bit Installer]: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20161025.exe
[PKGBUILD]: https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-kicad-git/PKGBUILD
[macOS bundle build scripts]:http://bazaar.launchpad.net/~adamwolf/+junk/kicad-mac-packaging/files
[kicad-mac-builder]:https://github.com/KiCad/kicad-mac-builder
[KiCad fork of wxWidgets]:https://github.com/KiCad/wxWidgets
[MinGW]: http://mingw.org/
[build Boost]: http://www.boost.org/doc/libs/1_59_0/more/getting_started/index.html
@@ -468,4 +485,6 @@ you will have to apply the Boost patches in the KiCad source [patches folder][].
[libcurl]: http://curl.haxx.se/libcurl/
[GLM]: http://glm.g-truc.net/
[git]: https://git-scm.com/
[OCE]: https://github.com/tpaviot/oce
[liboce]: https://github.com/tpaviot/oce
[libocc]: https://www.opencascade.com/content/overview
[libngspice]: https://sourceforge.net/projects/ngspice/
+36 -4
View File
@@ -31,7 +31,7 @@ additional support regarding online manipulation of board projects is available
for Pcbnew. Plugins using this feature are called `Action Plugins` and they are
accessible using a Pcbnew menu entry that can be found under `Tools->External
Plugins`. KiCad plugins that follow the `Action Plugin` conventions can be made
to show up as external plugins in that menu.
to show up as external plugins in that menu and optionally as top toolbar button.
The user can run the plugin resulting in calling a defined entry function in the
Python plugin's code.
This function can then be used to access and manipulate the currently loaded
@@ -43,9 +43,26 @@ packages and Python script files in specific directories on startup.
In order for the discovery process to work, the following requirements must be met.
* The plugin must be installed in the KiCad plugins search paths as documented
in `scripting/kicadplugins.i`.
(Currently on a Linux Mint Installation this is
/usr/share/kicad/scripting/plugins/ and ~/.kicad_plugins/)
in `scripting/kicadplugins.i`. You can always discover the search path for your
setup by opening the Scripting console and entering the command: `import pcbnew;
print pcbnew.PLUGIN_DIRECTORIES_SEARCH`.
Currently on a Linux Installation the plugins search path is
* /usr/share/kicad/scripting/plugins/
* ~/.kicad/scripting/plugins
* ~/.kicad_plugins/
On Windows
* \{KICAD_INSTALL_PATH\}/share/kicad/scripting/plugins
* %APPDATA%/Roaming/kicad/scripting/plugins
On macOS, there is a security feature that makes it easier to add scripting plugins to the ~/Library... path than to kicad.app, but the search path is
* /Applications/kicad/Kicad/Contents/SharedSupport/scripting/plugins
* ~/Library/Application Support/kicad/scripting/plugins
* Alternatively a symbolic link can be created in the KiCad plugin path link to
the plugin file/folder in another location of the file system. This can be
useful for development.
@@ -69,16 +86,20 @@ KiCad plugin path.
+ ~/.kicad_plugins/ # A folder in the KiCad plugin path
- simple_plugin.py
- simple_plugin.png (optional)
The file `simple_plugin.py` contains the following.
import pcbnew
import os
class SimplePlugin(pcbnew.ActionPlugin):
def defaults(self):
self.name = "Plugin Name as shown in Pcbnew: Tools->External Plugins"
self.category = "A descriptive category name"
self.description = "A description of the plugin and what it does"
self.show_toolbar_button = False # Optional, defaults to False
self.icon_file_name = os.path.join(os.path.dirname(__file__), 'simple_plugin.png') # Optional, defaults to ""
def Run(self):
# The entry function of the plugin that is executed on user action
@@ -86,6 +107,13 @@ The file `simple_plugin.py` contains the following.
SimplePlugin().register() # Instantiate and register to Pcbnew
Note that if specified `icon_file_name` must contain absolute path to the plugin icon.
It must be png file, recommended size is 26x26 pixels. Alpha channel for opacity is supported.
If icon is not specified a generic tool icon will be used.
`show_toolbar_button` only defines a default state for plugin toolbar button. Users can override
it in pcbnew preferences.
## Complex Plugin Example ## {#ppi_complex_example}
The complex plugin example represents a single Python package that is imported
on Pcbnew startup. When the Python package is imported, the `__init__.py` file
@@ -103,6 +131,7 @@ The following folder structure shows how complex plugins are implemented:
- __main__.py # This file is optional. See below
- complex_plugin_action.py # The ActionPlugin derived class lives here
- complex_plugin_utils.py # Other Python parts of the plugin
- icon.png
+ otherstuff/
- otherfile.png
- misc.txt
@@ -113,12 +142,15 @@ In this case the file is named `complex_plugin_action.py` with the following
contents:
import pcbnew
import os
class ComplexPluginAction(pcbnew.ActionPlugin)
def defaults(self):
self.name = "A complex action plugin"
self.category = "A descriptive category name"
self.description "A description of the plugin"
self.show_toolbar_button = True # Optional, defaults to False
self.icon_file_name = os.path.join(os.path.dirname(__file__), 'icon.png') # Optional
def Run(self):
# The entry function of the plugin that is executed on user action
+1 -1
View File
@@ -453,7 +453,7 @@ involved with the project.
**Status:**
- In progress. Most of the developer documentation has been converted to
[Doxygen markdown](http://www.stack.nl/~dimitri/doxygen/manual/markdown.html)
[Doxygen markdown](http://www.doxygen.nl/manual/markdown.html)
and the [output][kicad-docs] is rebuilt automatically when a commit is
made to the KiCad repo.
+272 -4
View File
@@ -1,18 +1,127 @@
# Testing KiCad #
# Unit tests #
[TOC]
# Unit tests {#unit-tests}
KiCad has a limited number of unit tests, which can be used to
check that certain functionality works.
## Python modules ##
Tests are registered using [CTest][], part of CMake. CTest gathers all the
disparate test programs and runs them. Most C++ unit
tests are written using the [Boost Unit Test framework][], but this is not
required to add a test to the testing suite.
The test CMake targets generally start with `qa_`, the names of the tests
within CTest are the same but without the `qa_` prefix.
## Running tests {#running-tests}
You can run all tests after building with `make test` or `ctest`. The latter
option allows many CTest options which can be useful, especially in automated
or CI environments.
### Running specific tests {#running-specific-tests}
To run a specific test executable, you can just run with `ctest` or run
the executable directly. Running directly is often the simplest way when
working on a specific test and you want access to the test executable's
arguments. For example:
# run the libcommon tests
cd /path/to/kicad/build
qa/common/qa_common [parameters]
For Boost unit tests, you can see the options for the test with `<test> --help`.
Common useful patterns:
* `<test> -t "Utf8/*"` runs all tests in the `Utf8` test suite.
* `<test> -t "Utf8/UniIterNull"` runs only a single test in a specific suite.
* `<test> -l all` adds more verbose debugging to the output.
* `<test> --list_content` lists the test suites and test cases within the
test program. You can use these for arguments to `-t`.
You can rebuild just a specific test with CMake to avoid rebuilding
everything when working on a small area, e.g. `make qa_common`.
## Writing Boost tests {#writing-boost-tests}
Boost unit tests are straightforward to write. Individual test cases can be
registered with:
BOOST_AUTO_TEST_CASE( SomeTest )
{
BOOST_CHECK_EQUAL( 1, 1 );
}
There is a range of functions like `BOOST_CHECK`, which are documented
[here][boost-test-functions]. Using the most specific function is preferred, as that
allows Boost to provide more detailed failures: `BOOST_CHECK( foo == bar )` only
reports a mismatch, `BOOST_CHECK_EQUAL( foo, bar )` will show the values of
each.
To output debug messages, you can use `BOOST_TEST_MESSAGE` in the unit tests,
which will be visible only if you set the `-l` parameter to `message` or higher.
This colours the text differently to make it stand out from other testing
messages and standard output.
You can also use `std::cout`, `printf`, `wxLogDebug` and so on for debug
messages inside tested functions (i.e. where you don't have access to the Boost
unit test headers). These will always be printed, so take care
to remove them before committing, or they'll show up when KiCad runs normally!
### Expected failures {#expected-failures}
Sometimes, it is helpful to check in tests that do not pass. However, it is bad
practise to intentionally check in commits that break builds (which is what
happens if you cause `make test` to fail).
Boost provides a method of declaring that some specific tests are allowed to fail.
This syntax is not consistently available in all supported Boost versions, so you
should use the following construct:
```
#include <unit_test_utils/unit_test_utils.h>
// On platforms with older boosts, the test will be excluded entirely
#ifdef HAVE_EXPECTED_FAILURES
// Declare a test case with 1 "allowed" failure (out of 2, in this case)
BOOST_AUTO_TEST_CASE( SomeTest, *boost::unit_test::expected_failures( 1 ) )
{
BOOST_CHECK_EQUAL( 1, 1 );
// This check fails, but does not cause a test suite failure
BOOST_CHECK_EQUAL( 1, 2 );
// Further failures *would* be a test suit failure
}
#endif
```
When run, this produces output somewhat like this:
```
qa/common/test_mytest.cpp(123): error: in "MyTests/SomeTest": check 1 == 2 has failed [1 != 2
*** No errors detected
```
And the unit test executable returns `0` (success).
Checking in a failing test is a strictly temporary situation, used to illustrate
the triggering of a bug prior to fixing it. This is advantageous, not only from
a "project history" perspective, but also to ensure that the test you write to
catch the bug in question does, in fact, catch the bug in the first place.
## Python modules {#python-tests}
The Pcbnew Python modules have some test programs in the `qa` directory.
You must have the `KICAD_SCRIPTING_MODULES` option on in CMake to
build the modules and enable this target.
The main test script is `qa/test.py` and the test units are in
`qa/testcases`. All the test units can by run using `make qa`, which
`qa/testcases`. All the test units can by run using `ctest python`, which
runs `test.py`.
You can also run an individual case manually, by making sure the
@@ -24,7 +133,7 @@ from the source tree:
cd /path/to/kicad/source/qa
python2 testcase/test_001_pcb_load.py
### Diagnosing segfaults ###
### Diagnosing segfaults {#python-segfaults}
Although the module is Python, it links against a C++ library
(the same one used by KiCad Pcbnew), so it can segfault if the library
@@ -39,3 +148,162 @@ You can run the tests in GDB to trace this:
If the test segfaults, you will get a familiar backtrace, just like
if you were running pcbnew under GDB.
# Utility programs {#utility-programs}
KiCad includes some utility programs that can be used for debugging, profiling,
analysing or developing certain parts of the code without having to invoke the full
GUI program.
Generally, they are part of the `qa_*_tools` QA executables, each one containing
the relevant tools for that library. To list the tools in a given program, pass
the `-l` parameter. Most tools provide help with the `-h` argument.
To invoke a program:
qa_<lib>_tools <tool name> [-h] [tool arguments]
Below is a brief outline of some available tools. For full information and command-line
parameters, refer to the tools' usage test (`-h`).
* `common_tools` (the common library and core functions):
* `coroutine`: A simple coroutine example
* `io_benchmark`: Show relative speeds of reading files using various IO techniques.
* `qa_pcbnew_tools` (pcbnew-related functions):
* `drc`: Run and benchmark certain DRC functions on a user-provided `.kicad_pcb` files
* `pcb_parser`: Parse user-provided `.kicad_pcb` files
* `polygon_generator`: Dump polygons found on a PCB to the console
* `polygon_triangulation`: Perform triangulation of zone polygons on PCBs
# Fuzz testing {#fuzz-testing}
It is possible to run fuzz testing on some parts of KiCad. To do this for a
generic function, you need to be able to pass some kind of input from the fuzz
testing tool to the function under test.
For example, to use the [AFL fuzzing tool][], you will need:
* A test executable that can:
* Receive input from `stdin` to be run by `afl-fuzz`.
* Optional: process input from a filename to allow `afl-tmin` to minimise the
input files.
* To compile this executable with an AFL compiler, to enable the instrumentation
that allows the fuzzer to detect the fuzzing state.
For example, the `qa_pcbnew_tools` executable (which contains `pcb_parser`,
a fuzz testing tool for `.kicad_pcb` file parsing) can be compiled like this:
mkdir build
cd build
cmake -DCMAKE_CXX_COMPILER=/usr/bin/afl-clang-fast++ -DCMAKE_C_COMPILER=/usr/bin/afl-clang-fast ../kicad_src
make qa_pcbnew_tools
You may need to disable core dumps and CPU frequency scaling on your system (AFL
will warn you if you should do this). For example, as root:
# echo core >/proc/sys/kernel/core_pattern
# echo performance | tee cpu*/cpufreq/scaling_governor
To fuzz, run the executable via `afl-fuzz`:
afl-fuzz -i fuzzin -o fuzzout -m500 qa/pcbnew_tools/qa_pcbnew_tools pcb_parser
where:
* `-i` is a directory of files to use as fuzz input "seeds"
* `-o` is a directory to write the results (including inputs that provoke crashes
or hangs)
* `-t` is the maximum time that a run is allowed to take before being declared a "hang"
* `-m` is the memory allowed to use (this often needs to be bumped, as KiCad code
tends to use a lot of memory to initialise)
The AFL TUI will then display the fuzzing progress, and you can use the hang- or
crash-provoking inputs to debug code as needed.
# Run-time debugging {#run-time}
KiCad can be debugged at run-time, either under a full debugger
such as GDB, or using simple methods like logging debug to the
console.
## Printing debug {#print-debug}
If you are compiling KiCad yourself, you can simply add debugging statements to
relevant places in the code, for example:
wxLogDebug( "Value of variable: %d", my_int );
This produces debug output that can only be seen when compiling
in Debug mode.
You can also use `std::cout` and `printf`.
Ensure you do not leave this kind of debugging in place when
submitting code.
## Printing trace {#trace-debug}
Some parts of the code have "trace" that can be enabled selectively according to
a "mask", for example:
wxLogTrace( "TRACEMASK", "My trace, value: %d", my_int );
This will not be printed by default. To show it, set the `WXTRACE` environment
variable when you run KiCad to include the masks you wish to enable:
$ WXTRACE="TRACEMASK,OTHERMASK" kicad
When printed, the debug will be prefixed with a timestamp and the trace mask:
11:22:33: Trace: (TRACEMASK) My trace, value: 42
If you add a trace mask, define and document the mask as a variable in
`include/trace_helpers.h`. This will add it to the [trace mask documentation][].
Some available masks:
* Core KiCad functions:
* `KICAD_KEY_EVENTS`
* `KicadScrollSettings`
* `KICAD_FIND_ITEM`
* `KICAD_FIND_REPLACE`
* `KICAD_NGSPICE`
* `KICAD_PLUGINLOADER`
* `GAL_PROFILE`
* `GAL_CACHED_CONTAINER`
* `PNS`
* `CN`
* `SCROLL_ZOOM` - for the scroll-wheel zooming logic in GAL
* Plugin-specific (including "standard" KiCad formats):
* `3D_CACHE`
* `3D_SG`
* `3D_RESOLVER`
* `3D_PLUGIN_MANAGER`
* `KI_TRACE_CCAMERA`
* `PLUGIN_IDF`
* `PLUGIN_VRML`
* `KICAD_SCH_LEGACY_PLUGIN`
* `KICAD_GEDA_PLUGIN`
* `KICAD_PCB_PLUGIN`
# Advanced configuration {#advanced-configuration}
There are some advance configuration options, which are mostly used for
development or testing purposes.
To set these options, you can create the file `kicad_advanced` and set the keys
as desired (the [advanced config documentation][] for a current list. You should
never need to set these keys for normal usage - if you do, that's a bug.
Any features enabled though the advanced configuration system are
considered experimental and therefore unsuitable for production use. These
features are explicitly not supported or considered fully tested.
Issues are still welcome for defects discovered.
[CTest]: https://cmake.org/cmake/help/latest/module/CTest.html
[Boost Unit Test framework]: https://www.boost.org/doc/libs/1_68_0/libs/test/doc/html/index.html
[boost-test-functions]: https://www.boost.org/doc/libs/1_68_0/libs/test/doc/html/boost_test/utf_reference/testing_tool_ref.html
[AFL fuzzing tool]: http://lcamtuf.coredump.cx/afl/
[trace mask documentation]: http://docs.kicad-pcb.org/doxygen/group__trace__env__vars.html
[trace mask documentation]: http://docs.kicad-pcb.org/doxygen/group__trace__env__vars.html
[advanced config documentation]: http://docs.kicad-pcb.org/doxygen/namespaceAC__KEYS.html
+5 -2
View File
@@ -30,7 +30,7 @@ Some examples of tools in the Pcbnew GAL are:
* The drawing tool - this tool controls the process of drawing graphics
elements such as line segments and circles.
(pcbnew/tools/drawing_tool.cpp,pcbnew/tools/drawing_tool.h)
* The zoom tool - allows the user to zoom in and out
* The zoom tool - allows the user to zoom in and out.
# Major parts of a tool # {#major-parts}
@@ -60,7 +60,10 @@ or not, has a `TOOL_ACTION` instance. This provides:
tooltip and provides a more detailed description if needed.
* An "icon", which is shown in menus and on buttons for the action
* "Flags" which include:
* `AF_ACTIVATE` which indicates that the tool enters an active state
* `AF_ACTIVATE` which indicates that the tool enters an active state. When
a tool is active it will keep receiving UI events, such as mouse clicks
or key presses, which are normally handled in an event loop (see
TOOL_INTERACTIVE::Wait()).
* A parameter, which allows different actions to call the same function
with different effects, for example "step left" and "step right".
+8 -8
View File
@@ -71,12 +71,12 @@ Webpage titles and navigational elements | Header
This section defines how dialog boxes should be designed. The KiCad project
uses the [GNOME User Interface Guidelines][gnome-ui-guidelines] for laying out
dialogs. KiCad's dialogs must be designed with [wxFormBuilder][wxformbuilder].
As wxFormBuilder available in packages is likely to be a different version than
what other developers have installed, it has been decided to use the version
kept in a Github repository, branch [wxFB3.5RC-1][wxformbuilder-github] to avoid
version mismatch. When designing dialogs, follow the [visual layout section of
the GNOME User Interface Guidelines][gnome-ui-layout].
dialogs. When designing dialogs, follow the [visual layout section of the GNOME
User Interface Guidelines][gnome-ui-layout]. KiCad's dialogs may either be
designed with [wxFormBuilder][wxformbuilder] or created by hand. However,
existing dialogs must be maintained in the same way as they have been
implemented. Please use [wxFormBuilder v3.8.0 or later][wxformbuilder-releases]
to avoid version mismatch between developers.
## Escape Key Termination ## {#dialogs-esc-key}
Please note that the escape key termination only works properly if there is a
@@ -168,8 +168,8 @@ controls so text should be quoted with single quotes ''. e.g.:
[gnome-ui-guidelines]:https://developer.gnome.org/hig/stable/
[gnome-ui-layout]:https://developer.gnome.org/hig/stable/visual-layout.html.en
[gnome-ui-style]:https://developer.gnome.org/hig/stable/writing-style.html.en
[wxformbuilder]:https://sourceforge.net/projects/wxformbuilder/
[wxformbuilder-github]:https://github.com/marekr/wxFormBuilder/tree/wxFB3.5-RC1
[wxformbuilder]:https://github.com/wxFormBuilder/wxFormBuilder
[wxformbuilder-releases]:https://github.com/wxFormBuilder/wxFormBuilder/releases
[wxwidgets-doc]:http://docs.wxwidgets.org/3.0/
[wxdialog-setescapeid]:http://docs.wxwidgets.org/3.0/classwx_dialog.html#a585869988e308f549128a6a065f387c6
[wxwidgets-sizers]:http://docs.wxwidgets.org/3.0/overview_sizer.html
+131
View File
@@ -0,0 +1,131 @@
#
# This program source code file is part of KICAD, a free EDA CAD application.
#
# Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you may find one here:
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# or you may search the http://www.gnu.org website for the version 2 license,
# or you may write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
# Build file for docset generation.
#
# Docsets are generated from the Doxygen docs by this process:
# * Modify the existing doxygen file for a docset-friendly output
# * Run doxygen to generate normal docygen output
# * Run a makefile made by doxygen to start the docset
# * Run doxytag2zealdb to generate the docset index
# * Make a couple of changes to the Plist file and add icons
find_program(DOXYTAG2ZEALDB doxytag2zealdb)
find_program(SED sed)
if(DOXYGEN_FOUND AND DOXYTAG2ZEALDB AND SED)
function(get_kicad_doc_version RESULT_NAME)
include( ${CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
create_git_version_header(${CMAKE_SOURCE_DIR})
# Now we have KICAD_VERSION, but it's got () around it
string(REPLACE "(" "" KICAD_VERSION ${KICAD_VERSION})
string(REPLACE ")" "" KICAD_VERSION ${KICAD_VERSION})
set (${RESULT_NAME} ${KICAD_VERSION} PARENT_SCOPE)
endfunction()
# The DocSet's bundle ID, which is used for most of the ID's
set(BUNDLE_ID KiCad)
# The source for the doxygen config
set(SRC_DOXYFILE ${CMAKE_SOURCE_DIR}/Doxyfile)
# A new doxyfile with the original, plus some extra config
set(DOCSET_DOXYFILE ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
# Various pieces of the docset
set(DOCSET_LOC ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html/${BUNDLE_ID}.docset)
set(DOXY_MAKEFILE ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html/Makefile)
set(DOXY_TAG_FILE ${CMAKE_CURRENT_BINARY_DIR}/${BUNDLE_ID}.tag)
set(DOCSET_PLIST ${DOCSET_LOC}/Contents/Info.plist)
set(DOCSET_DSIDX ${DOCSET_LOC}/Contents/Resources/docSet.dsidx)
#icon files
set(DOCSET_SRC_ICON16 ${CMAKE_CURRENT_SOURCE_DIR}/icon-16.png)
set(DOCSET_ICON16 ${DOCSET_LOC}/icon.png)
get_kicad_doc_version(KICAD_DOC_VERSION)
# copy and modify the "normal" Doxyfile
file(COPY ${SRC_DOXYFILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(APPEND ${DOCSET_DOXYFILE} "
# Added for DocSet generation
OUTPUT_DIRECTORY = ${CMAKE_CURRENT_BINARY_DIR}/doxygen
PROJECT_NAME = ${BUNDLE_ID}
PROJECT_NUMBER = ${KICAD_DOC_VERSION}
GENERATE_DOCSET = YES
DOCSET_FEEDNAME = ${BUNDLE_ID}
DOCSET_BUNDLE_ID = ${BUNDLE_ID}
DISABLE_INDEX = YES
GENERATE_TREEVIEW = NO
SEARCHENGINE = NO
GENERATE_TAGFILE = ${DOXY_TAG_FILE}"
)
add_custom_command(
COMMAND ${DOXYGEN_EXECUTABLE} ${DOCSET_DOXYFILE}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT ${DOXY_TAG_FILE} ${DOXY_MAKEFILE}
DEPENDS ${DOCSET_DOXYFILE}
COMMENT "Generating Doxygen for DocSet"
)
# Generate the skeleton of the docset
# And modify the plist: DocSetPlatformFamily is used for the prefix in Zeal,
add_custom_command(
COMMAND make || true
COMMAND ${SED} -i "/<key>DocSetPlatformFamily<\\/key>/!b;n;s/doxygen/${BUNDLE_ID}/" ${DOCSET_PLIST}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html
DEPENDS ${DOXY_MAKEFILE}
OUTPUT ${DOCSET_PLIST}
COMMENT "Running doxygen-generated makefile"
VERBATIM
)
add_custom_command(
COMMAND ${DOXYTAG2ZEALDB} --tag ${DOXY_TAG_FILE}
--db ${DOCSET_DSIDX}
--include-parent-scopes
--include-function-signatures
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doxygen/html
DEPENDS ${DOCSET_PLIST} ${DOXY_TAG_FILE}
OUTPUT ${DOCSET_DSIDX}
COMMENT "Generating docset index"
)
add_custom_command(
COMMAND ${CMAKE_COMMAND} -E copy ${DOCSET_SRC_ICON16} ${DOCSET_ICON16}
DEPENDS ${DOCSET_DSIDX} ${DOCSET_SRC_ICON16}
OUTPUT ${DOCSET_ICON16}
COMMENT "Copying docset icons"
)
add_custom_target(docset
DEPENDS ${DOCSET_ICON16}
)
endif()
Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

+1568 -906
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -114,7 +114,7 @@ GLM >= 9.5.4 http://glm.g-truc.net/
pkg-config http://pkgconfig.freedesktop.org/
Doxygen (optional) http://www.stack.nl/~dimitri/doxygen/index.html
Doxygen (optional) http://www.doxygen.nl
python >= 2.6 (optional) http://python.org/
+661
View File
@@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
+23
View File
@@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
+255
View File
@@ -0,0 +1,255 @@
Creative Commons Attribution-ShareAlike 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to
be bound by the terms and conditions of this Creative Commons
Attribution-ShareAlike 4.0 International Public License ("Public License").
To the extent this Public License may be interpreted as a contract, You are
granted the Licensed Rights in consideration of Your acceptance of these
terms and conditions, and the Licensor grants You such rights in
consideration of benefits the Licensor receives from making the Licensed
Material available under these terms and conditions.
Section 1 Definitions.
a. Adapted Material means material subject to Copyright and Similar Rights
that is derived from or based upon the Licensed Material and in which the
Licensed Material is translated, altered, arranged, transformed, or
otherwise modified in a manner requiring permission under the Copyright
and Similar Rights held by the Licensor. For purposes of this Public
License, where the Licensed Material is a musical work, performance, or
sound recording, Adapted Material is always produced where the Licensed
Material is synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright and
Similar Rights in Your contributions to Adapted Material in accordance
with the terms and conditions of this Public License.
c. BY-SA Compatible License means a license listed at
creativecommons.org/compatiblelicenses, approved by Creative Commons as
essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights closely
related to copyright including, without limitation, performance,
broadcast, sound recording, and Sui Generis Database Rights, without
regard to how the rights are labeled or categorized. For purposes of this
Public License, the rights specified in Section 2(b)(1)-(2) are not
Copyright and Similar Rights.
e. Effective Technological Measures means those measures that, in the absence
of proper authority, may not be circumvented under laws fulfilling
obligations under Article 11 of the WIPO Copyright Treaty adopted on
December 20, 1996, and/or similar international agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or any other
exception or limitation to Copyright and Similar Rights that applies to
Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name of a
Creative Commons Public License. The License Elements of this Public
License are Attribution and ShareAlike.
h. Licensed Material means the artistic or literary work, database, or other
material to which the Licensor applied this Public License.
i. Licensed Rights means the rights granted to You subject to the terms and
conditions of this Public License, which are limited to all Copyright and
Similar Rights that apply to Your use of the Licensed Material and that
the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights under this
Public License.
k. Share means to provide material to the public by any means or process thati
requires permission under the Licensed Rights, such as reproduction,
public display, public performance, distribution, dissemination,
communication, or importation, and to make material available to the
public including in ways that members of the public may access the
material from a place and at a time individually chosen by them.
l. Sui Generis Database Rights means rights other than copyright resulting
from Directive 96/9/EC of the European Parliament and of the Council of 11
March 1996 on the legal protection of databases, as amended and/or
succeeded, as well as other essentially equivalent rights anywhere in the
world.
m. You means the individual or entity exercising the Licensed Rights under
this Public License. Your has a corresponding meaning.
Section 2 Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License, the
Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to exercise the
Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part; and
B. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions
and Limitations apply to Your use, this Public License does not apply,
and you do not need to comply with its terms and conditions.
3. Term. The term of this Public License is specified in Section 6(a).
4. Media and formats; technical modifications allowed. The Licensor
authorizes You to exercise the Licensed Rights in all media and formats
whether now known or hereafter created, and to make technical
modifications necessary to do so. The Licensor waives and/or agrees not
to assert any right or authority to forbid You from making technical
modifications necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective Technological
Measures. For purposes of this Public License, simply making
modifications authorized by this Section 2(a)(4) never produces Adapted
Material.
5. Downstream recipients.
A. Offer from the Licensor Licensed Material. Every recipient of the
Licensed Material automatically receives an offer from the Licensor
to exercise the Licensed Rights under the terms and conditions of
this Public License.
B. Additional offer from the Licensor Adapted Material. Every
recipient of Adapted Material from You automatically receives an
offer from the Licensor to exercise the Licensed Rights in the
Adapted Material under the conditions of the Adapters License You
apply.
C. No downstream restrictions. You may not offer or impose any
additional or different terms or conditions on, or apply any
Effective Technological Measures to, the Licensed Material if doing
so restricts exercise of the Licensed Rights by any recipient of
the Licensed Material.
6. No endorsement. Nothing in this Public License constitutes or may be
construed as permission to assert or imply that You are, or that Your
use of the Licensed Material is, connected with, or sponsored,
endorsed, or granted official status by, the Licensor or others
designated to receive attribution as provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not licensed under
this Public License, nor are publicity, privacy, and/or other similar
personality rights; however, to the extent possible, the Licensor
waives and/or agrees not to assert any such rights held by the Licensor
to the limited extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public License.
3. To the extent possible, the Licensor waives any right to collect
royalties from You for the exercise of the Licensed Rights, whether
directly or through a collecting society under any voluntary or
waivable statutory or compulsory licensing scheme. In all other cases
the Licensor expressly reserves any right to collect such royalties.
Section 3 License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified form), You
must:
A. retain the following if it is supplied by the Licensor with the
Licensed Material:
i. identification of the creator(s) of the Licensed Material and any
others designated to receive attribution, in any reasonable manner
requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent
reasonably practicable;
B. indicate if You modified the Licensed Material and retain an
indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public
License, and include the text of, or the URI or hyperlink to, this
Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable
manner based on the medium, means, and context in which You Share the
Licensed Material. For example, it may be reasonable to satisfy the
conditions by providing a URI or hyperlink to a resource that includes
the required information.
3. If requested by the Licensor, You must remove any of the information
required by Section 3(a)(1)(A) to the extent reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share Adapted
Material You produce, the following conditions also apply.
1. The Adapters License You apply must be a Creative Commons license with
the same License Elements, this version or later, or a BY-SA Compatible
License.
2. You must include the text of, or the URI or hyperlink to, the Adapter's
License You apply. You may satisfy this condition in any reasonable
manner based on the medium, means, and context in which You Share
Adapted Material.
3. You may not offer or impose any additional or different terms or
conditions on, or apply any Effective Technological Measures to,
Adapted Material that restrict exercise of the rights granted under the
Adapter's License You apply.
Section 4 Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to
Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to
extract, reuse, reproduce, and Share all or a substantial portion of the
contents of the database;
b. if You include all or a substantial portion of the database contents in a
database in which You have Sui Generis Database Rights, then the database
in which You have Sui Generis Database Rights (but not its individual
contents) is Adapted Material, including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share all or a
substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace
Your obligations under this Public License where the Licensed Rights include
other Copyright and Similar Rights.
Section 5 Disclaimer of Warranties and Limitation of Liability.
a. Unless otherwise separately undertaken by the Licensor, to the extent
possible, the Licensor offers the Licensed Material as-is and as-available,
and makes no representations or warranties of any kind concerning the
Licensed Material, whether express, implied, statutory, or other. This
includes, without limitation, warranties of title, merchantability, fitness
for a particular purpose, non-infringement, absence of latent or other
defects, accuracy, or the presence or absence of errors, whether or not
known or discoverable. Where disclaimers of warranties are not allowed in
full or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable to You on
any legal theory (including, without limitation, negligence) or otherwise
for any direct, special, indirect, incidental, consequential, punitive,
exemplary, or other losses, costs, expenses, or damages arising out of
this Public License or use of the Licensed Material, even if the Licensor
has been advised of the possibility of such losses, costs, expenses, or
damages. Where a limitation of liability is not allowed in full or in
part, this limitation may not apply to You.
c. The disclaimer of warranties and limitation of liability provided above
shall be interpreted in a manner that, to the extent possible, most
closely approximates an absolute disclaimer and waiver of all liability.
Section 6 Term and Termination.
a. This Public License applies for the term of the Copyright and Similar
Rights licensed here. However, if You fail to comply with this Public
License, then Your rights under this Public License terminate
automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is
cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any right
the Licensor may have to seek remedies for Your violations of this Public
License.
c. For the avoidance of doubt, the Licensor may also offer the Licensed
Material under separate terms or conditions or stop distributing the
Licensed Material at any time; however, doing so will not terminate this
Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different terms or
conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the Licensed
Material not stated herein are separate from and independent of the terms
and conditions of this Public License.
Section 8 Interpretation.
a. For the avoidance of doubt, this Public License does not, and shall not
be interpreted to, reduce, limit, restrict, or impose conditions on any use
of the Licensed Material that could lawfully be made without permission
under this Public License.
b. To the extent possible, if any provision of this Public License is deemed
unenforceable, it shall be automatically reformed to the minimum extent
necessary to make it enforceable. If the provision cannot be reformed, it
shall be severed from this Public License without affecting the
enforceability of the remaining terms and conditions.
c. No term or condition of this Public License will be waived and no failure
to comply consented to unless expressly agreed to by the Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a
limitation upon, or waiver of, any privileges and immunities that apply to
the Licensor or You, including from the legal processes of any jurisdiction
or authority.
+674
View File
@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+10
View File
@@ -0,0 +1,10 @@
Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA
OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+21
View File
@@ -0,0 +1,21 @@
The majority of KiCad's source code is developed and distributed under the terms
of the GPLv3 or later. However, It does include some third-party code licensed
under AGPLv3 or later as well as sections licensed under the BOOST license v1.0
and portions licensed under the ISC license.
These licenses are compatible, but a combined works as is will be governed under
the terms of the AGPLv3 (or later). This includes any binary distribution of the
KiCad EDA suite by the KiCad project or any third party, e.g. Linux distributor.
You are free to use the *sources* under the terms of their respective licenses.
Licensed under AGPLv3 (or later):
- TTL [https://www.sintef.no/projectweb/geometry-toolkits/ttl/], sources in include/ttl/*
Licensed under BOOSTv1:
- libcontext [https://github.com/boostorg/context], sources in common/system/libcontext.cpp
Licensed under ISC:
- portions of code in include/geometry/polygon_triangulation.h
Licensed under CC-BY-SA-4.0:
- All the demo files provided in demos/*
Licensed under GPLv3 (or later):
- All remaining code not listed above
+2 -2
View File
@@ -40,8 +40,8 @@ polygon - Sourcecode of the polygon library
potrace - Sourcecode of the potrace library, used in bitmap2component
qa - Testcases using the python interface
resources - Resources for freedesktop mime-types for linux
scripting - SWIG Python scripting definitions
scripts - Helper scripts for various things
scripting - SWIG Python scripting definitions and build scripts
scripts - Example scripts for distribution with KiCad
template - Project and pagelayout templates
tools - Other miscellaneous helpers for testing
utils - Small utils for kicad, e.g. IDF tools

Some files were not shown because too many files have changed in this diff Show More