Compare commits

..

890 Commits

Author SHA1 Message Date
jean-pierre charras 2758acfd42 Fix compatibility with some old V4 schematic files.
From master branch, commit #bfe59581
2021-12-01 13:45:05 +01:00
jean-pierre charras 54c3031d74 Zone fill: When using the fillet outline option, in some cases the shape is strange.
Due to some bug in Fillet() incorrect zone outline happens in (rare) polygon shapes.
So clip it with the initial polygon (aSmoothedPoly must be contained in m_Poly)
Fixes #9692
https://gitlab.com/kicad/code/kicad/issues/9692
2021-11-19 13:55:05 +01:00
Christoph Moench-Tegeder 9a9c7856b3 Adapt OCE 3D plugin to OpenCascade 7.6.0 (for KiCad 5.1)
In line with
https://dev.opencascade.org/doc/overview/html/occt__upgrade.html#upgrade_occt760_poly
the Poly_Triangulation does not provide direct access to the internal
arrays anymore - use the accessor functions instead.
To keep changes minimal, switch only builds with a new (7.6+)
OpenCascade to the new API and keep everything else the same.

Related: !1013
2021-11-17 23:41:56 +01:00
Wayne Stambaugh 401b2fb524 Fix broken search stack behavior.
The overload of wxFilePath::FindValidPath() broke the normal behavior
when the file searched for existed in the current working directory.
This was causing the initial library table file to be copied from the
current working directory instead of from the list of search paths.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/9599

(cherry picked from commit f4b97eca63)
2021-11-13 08:43:25 -05:00
Wayne Stambaugh 0a0a2da680 Begin version 5.1.13 development. 2021-11-04 17:24:40 -04:00
Wayne Stambaugh e4df76d986 Tag release version 5.1.12. 2021-11-04 16:41:52 -04:00
jean-pierre charras 79028f1627 Handle mandatory fields name translated and not translated in SCH_COMPONENT::GetFieldText.
Fixes #9520
https://gitlab.com/kicad/code/kicad/issues/9520
2021-11-04 18:17:51 +01:00
jean-pierre charras d87e5cb809 Revert "Revert "Apply WX_LOCALE change from master branch.""
This reverts commit 3484334d15.
2021-11-04 16:47:10 +01:00
Seth Hillbrand 3484334d15 Revert "Apply WX_LOCALE change from master branch."
This reverts commit 8e9e1a618b.
2021-11-03 15:12:37 -07:00
Wayne Stambaugh 9ab6571b3f Begin version 5.1.12 development. 2021-10-27 21:33:13 -04:00
Wayne Stambaugh dad5600e7e Tag release version 5.1.11. 2021-10-27 13:53:49 -04:00
Seth Hillbrand ee56d58173 Don't raise an error for valid microvias
When the layers are adjacent, the microvia is _probably_ valid.  This is
not the case when trying to run a microvia through the core material but
without stackup information, we cannot be certain.

Note that microvias are not required in current manufacturing techniques
to be blind.

KSC Issue '400'
2021-10-27 10:52:25 -07:00
Wayne Stambaugh 9f8f2a2449 Revert "Tag release version 5.1.11."
This reverts commit f591534a0f.
2021-10-27 13:50:01 -04:00
Wayne Stambaugh f591534a0f Tag release version 5.1.11. 2021-10-26 14:51:40 -04:00
Wayne Stambaugh 7a2e0c6632 Remove old domain name from developer documentation. 2021-10-26 14:49:50 -04:00
Wayne Stambaugh 29519c5fda Revert "Tag release version 5.1.11."
This reverts commit 4c58397949.
2021-10-26 14:45:17 -04:00
Wayne Stambaugh 4b996f6bbe Revert "Begin version 5.1.12 development."
This reverts commit e4a5bfc788.
2021-10-26 14:44:41 -04:00
Wayne Stambaugh e4a5bfc788 Begin version 5.1.12 development. 2021-10-26 07:55:07 -04:00
Wayne Stambaugh 4c58397949 Tag release version 5.1.11. 2021-10-26 07:23:58 -04:00
Mark Roszko 011b4027db Add vertexIndex bounds check 2021-10-23 15:46:58 +00:00
Seth Hillbrand a1adc59cb8 Remove all references to old website
The kicad-pcb.org website is no longer valid
2021-10-18 15:47:01 -07:00
Johannes Maibaum ee4a8fc05a kicad-pcb.org->kicad.org in kicad.appdata.xml.in
kicad-pcb.org seems to cause TLS handshake errors recently.
As kicad.org is now the official domain, switch all uses of
kicad-pcb.org to kicad.org in kicad.appdata.xml.in.
2021-10-18 22:19:34 +02:00
Adam Wolf 420a3ce498 On macOS, copy libngspice dylibs and symlinks
Now that ngspice creates soversion'ed libraries, we need to tweak
how we copy the dylibs around.

This is meant to address
https://gitlab.com/kicad/code/kicad/-/issues/9143.

(cherry picked from commit ec10b12c6a)
2021-10-15 10:40:13 -07:00
Wayne Stambaugh 9b6798c479 Eeschema: yet another attempt to fix network share editing performance.
Root out a few other areas where the hierarchy integrity test was being
performed while editing where it wasn't required.
2021-10-07 07:22:50 -04:00
Wayne Stambaugh 765816ccb1 Eeschema: fix lag on network shares when duplicating and copying objects.
The delay was due to recursion checks being performed every time a new
SCH_SHEET_LIST object was created.  The fix was to back port the optional
integrity check flag added from master.  It's similar to commit 63a0f537
by Jeff Young but it could not be cherry-picked due to the changes in
master branch.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/9278
2021-10-04 16:34:30 -04:00
Seth Hillbrand f3e9e3497b Cherry-picking some external run routines
Mostly from c6bcb85562 but trees have
diverged sufficiently that there are others mixed in.  This removes the
system() call on MacOS when opening a directory
2021-09-29 11:32:25 -07:00
jean-pierre charras 8e9e1a618b Apply WX_LOCALE change from master branch.
See master branch, commits 0cf81b6 and b065ff3
2021-09-29 16:54:07 +02:00
jean-pierre charras 7272020cd3 fix use of a non const method in a const method ( from master branch) 2021-09-14 14:33:40 +02:00
jean-pierre charras 16fff71c31 Gerbview: fix incorrect bounding box of lines drawn with a rectangular aperture.
See master, commit 5abe25
2021-09-14 10:50:51 +02:00
jean-pierre charras 190223949c Gerber files: fix incorrect FileFunction attribute value for F.Fab and B.Fab layers. 2021-09-01 11:17:05 +02:00
jean-pierre charras 38d463ae49 Apply commit ddba9e2 from master: fix of not updating spice primitive field 2021-08-31 11:07:37 +02:00
jean-pierre charras 73193196d2 Cvpcb: fix possible crash when pressing the ESC key during some calculations.
From master branch, commit b1c67d9
2021-08-28 15:58:04 +02:00
Jeff Young 2975e85950 Add (a somewhat hacked) future format error for page layout files. 2021-08-27 13:16:22 +01:00
Seth Hillbrand b2fbf982a8 Don't use REALPATH to find shared/dynamic libraries
We require API compatibility in the ngspice library because we
dynamically load the library and assign function pointers to specific
names/signatures.  This should be consistent for all versions of the the
library until the soversion changes.

Fixes https://gitlab.com/kicad/code/kicad/issues/8878

(cherry picked from commit 17a17586a6)
2021-08-24 11:46:03 -07:00
Jeff Young 0843fbf904 Fix nullptr dereference.
Fixes: lp:8996
* https://bugs.launchpad.net/kicad/+bug/8996
2021-08-19 11:59:07 +01:00
jean-pierre charras 8dab9041e4 Gerbview, Excellon reader: use Leading Zeros format when not specified in file.
Some very poor files do not specify the coordinates format.
In this case, the default is INCH,LZ that looks like the more usual.
From master branch, commit b1fd462
2021-08-01 16:08:28 +02:00
jean-pierre charras 6aed98f795 Gerbview, Excellon reader: fix incorrect size of tools when the size is embedded.
From master branch, commit 70b5e26.
2021-08-01 10:26:23 +02:00
jean-pierre charras c20a76f3e2 Fix Python consoles cannot be created.
Fixes #8899
https://gitlab.com/kicad/code/kicad/issues/8899
2021-07-31 16:46:27 +02:00
Seth Hillbrand 435b1720c3 Prevent help() from blocking terminal
Ensures that the pydoc pager gets re-directed to the PyShell.  Also
keeps a copy of stdin to prevent closure in case of re-assignment

Fixes https://gitlab.com/kicad/code/kicad/issues/8047
2021-07-12 16:52:52 -07:00
Wayne Stambaugh 22bdf37fc2 Fix SPICE simulator plot bug.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/1944
2021-07-09 16:44:23 -04:00
Ian McInerney 9e3ac0eafb Don't install the import library for the 3dsg library
No one on Windows should be linking to it outside of
the build process, so there is no need for it in the
installer

Fixes https://gitlab.com/kicad/code/kicad/issues/1842


(cherry picked from commit 3bb44f3804)
2021-07-01 19:31:46 +00:00
Wayne Stambaugh 5c1c24cdab Pcbnew: fix footprint selection bug.
Do not remove footprint objects from list of selected objects when there
are no drawable objects other than the reference and value text.

Increase the minimum size rectangle for footprints from 0.025mm to 1mm
when the footprint has no drawing objects so that it is easier to select
the footprint in this case.

Add debugging code to show the footprint bounding box and polygon outline
so that it's possible to tell the difference between selection areas.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8379
2021-06-24 14:13:30 -04:00
jean-pierre charras c9cc824761 Footprint editor: fix broken mirroring of custom pad shapes.
Fixes #8649
https://gitlab.com/kicad/code/kicad/issues/8649
2021-06-23 16:31:18 +02:00
Eeli Kaikkonen b3c1e0330a OCC is the default cmake flag instead of OCE.
(cherry picked from commit 168a21bb43)
2021-06-16 12:47:58 -04:00
jean-pierre charras 4506fb2022 Fix not initialized var (m_HoleToHoleMin) in DRC when starting Pcbnew in stand-alone. 2021-06-16 11:44:02 +02:00
jean-pierre charras ecec324121 Fix a link issue created by fix 959b33c, on Linux.
Fixes #8475
2021-05-25 08:59:44 +02:00
jean-pierre charras 959b33c59b Footprint editor: fix incorrect "Zoom to Fit" when the F.Cu layer is not shown.
Fixes #8420
2021-05-14 15:30:38 +02:00
Wayne Stambaugh d6646c34ef Eeschema: fix BOM path bug in stand alone mode.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/8180
2021-05-07 15:44:21 -04:00
Wayne Stambaugh b56ac54cb2 KiCad: don't rename page description file on new project from template.
Doing so will break the link in the schematic and/or board file so copy
page description file(s) verbatim to the new project folder.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/6524
2021-05-05 07:39:22 -04:00
Mark Roszko 5bc47a0c3b Write xml netlists explicitly via wxFFileOutputStream for performance
Fix #6944
2021-05-03 23:13:38 +00:00
Wayne Stambaugh f2db83008a Begin version 5.1.11 development. 2021-04-23 13:47:08 -04:00
Wayne Stambaugh 9a01cf1b35 Tag release version 5.1.10. 2021-04-23 13:42:36 -04:00
Seth Hillbrand 0f6f30b26e Ensure collapsed tree before update
We had been maintaining the tree collapse state for "clear" actions
where the user went back to no object search.  This was helpful in the
case where we had previous items (e.g. last placed element)

But this causes isses when a sub element was previously select on GTK.
Now we choose safety for GTK over the pretty display

Fixes https://gitlab.com/kicad/code/kicad/issues/8198
2021-04-20 11:50:08 -07:00
Marek Roszko 8219334806 Fix wrong offset in msys2 x64 libcontext implementation not saving fiber data pointer
This should have/may have been causing random crashes on calls into win32 api.
fiber data is located at offset 0x20 of the stack not 0x18.
2021-04-12 19:11:44 -04:00
Wayne Stambaugh e6997d87b3 Eeschema: fix zero length line segfault.
Clear the current draw item when line segment clean up results in no lines.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8175
2021-04-12 14:41:52 -04:00
jean-pierre charras 13b453c21e PDT plotter: fix incorrect header (from Master branch) 2021-04-06 11:34:52 +02:00
Seth Hillbrand 4ec3f18fda Return wxString for gfx importer messages
Returning a reference to a temporary value crashes when the value is
deallocated before use.  Passing a full string fixes the crash and
allows NVRO on the temporary value.
2021-04-04 06:20:14 -07:00
Jon Evans fc8ffd8421 Disable Cairo canvas for Mac
Fixes https://gitlab.com/kicad/code/kicad/-/issues/7052
2021-04-02 18:50:21 -04:00
Seth Hillbrand 4551651777 Fix empty translated string 2021-04-02 11:12:39 -07:00
Marek Roszko 82f2e8c344 More gracefully handle tinyspline not liking a spline definition
Partial fix for #6634

(cherry picked from commit e409b04538)
2021-04-02 09:41:22 -07:00
jean-pierre charras b76c5c9433 Drill map report: use more digits in float values for diameters. 2021-03-29 11:21:24 +02:00
Jon Evans 1737927814 Fix cherry-pick error 2021-02-17 08:12:05 -05:00
Graham Keeth 38d7ac6d9c Add BOM file extension to BOM plugin command line
Attempt to parse BOM output file extension from BOM plugin header, and
append it to the "%O" argument in the BOM plugin command line.

Fixes #6943

(cherry picked from commit f54ab830f6)
2021-02-11 21:19:31 -05:00
Seth Hillbrand db1bf4351b Fix GTK crash when multiple libraries are expanded
Once more into the gtk_tree_view breach.

This may also be related to https://gitlab.com/kicad/code/kicad/-/issues/7344

Fixes https://gitlab.com/kicad/code/kicad/issues/7422

(cherry picked from commit 4657ca5d4f)
2021-02-08 14:36:08 -08:00
Seth Hillbrand 2d491f9cbd Update multi-unit symbols uniquely
This updates multi unit symbols uniquely even when the schematic is
unannotated (and therefore there are multiple symbols with the same
reference).  We attempt to enfore a single unit update per symbol and
test for both value and reference commonality before assuming that the
unit is part of the larger multi-unit symbol

Fixes https://gitlab.com/kicad/code/kicad/issues/7117
2021-01-14 14:52:55 -08:00
Johannes Maibaum a58d0f8a67 Add diode model to rectifier demo (ngspice-32 fix)
Patch by Holger Vogt

Fixes https://gitlab.com/kicad/code/kicad/issues/4453
2021-01-14 20:24:36 +01:00
Johannes Maibaum 42cd6ca4ca Fix screenshot sizes in kicad.appdata.xml.in 2021-01-13 18:14:33 +01:00
jean-pierre charras f292f1628b Spice sim: fix incorrect (very large) dialog size displaying the netlist.
It was previously fixed to 1500x900 pixels, that can be too large.
The window size and position is also now retained during a session.
From master branch, commit 60152bc
2021-01-11 10:55:51 +01:00
Seth Hillbrand 20909d4948 Fix crash when deleting symbol in GTK
So many things can go wrong with this control in GTK.  We have to
collapse the tree when updating the search string to avoid a crash when
referencing a child object but collapsing the tree will iterate over
elements and crash when we have deleted a symbol.

The temporary fix for this nonsense is to carefully order the calls.
We only need to collapse the search tree if we are not keeping our state
(in other words if we are fully re-building the tree)

Fixes https://gitlab.com/kicad/code/kicad/issues/6910

(cherry picked from commit 8af4cf88a0)
2021-01-04 09:38:51 -08:00
Jeff Young 1f6ff4a519 Fix access into empty container.
Fixes https://gitlab.com/kicad/code/kicad/issues/6840

(cherry picked from commit 359c29639f)
2021-01-04 09:26:01 -08:00
jean-pierre charras 07568f87c3 Step exporter: better values for min distance between 2 points to merge them.
- The default value is 0.01 mm (according to comments and similar to the 3D viewer
 settings that uses 0.02 mm)
- The export dialog  has now 3 values 1 micron, 0.01mm (default) and 0.1 mm

From Master branch, commits a9feb1c and 5db7580
2021-01-03 14:52:42 +01:00
Mikołaj Wielgus 267e510071 Update PCBMODEL::SetMinDistance to set BRepBuilderAPI precision
Fixes #3818
2021-01-03 13:39:38 +01:00
Marek Roszko 73b921d591 Correct assembly opcode 2021-01-02 16:20:50 -05:00
Marek Roszko 8677035989 libcontext: Call exit instead of random memory address on MSW x86_64
cherrypick of 580293c7fa

See #6820
2021-01-02 16:18:10 -05:00
jean-pierre charras a179893d70 specctra_export: fix an issue with custom pads.
From Master, commit 686254.
In some cases a created pad stack name had the same name as an other pad stack
having a slightly different shape, thus creating pads with a incorrect shape on board.

Fixes #6495 for the 5.1.10 branch.
2020-12-29 17:41:36 +01:00
Jan Mrázek 540fb91d34 Backport 93466fa1: Fix crash when adding 3D Models via Python 2020-12-28 23:22:16 +01:00
Wayne Stambaugh 591a07d2d9 Begin version 5.1.10 development. 2020-12-22 15:09:32 -05:00
Wayne Stambaugh f607e913d5 Tag release version 5.1.9. 2020-12-22 15:05:01 -05:00
jean-pierre charras 3d57de91e8 SCH_SHEET::SearchHierarchy(): fix an issue when comparing file names.
We are using the unix separator in filenames in all platforms.
However on Windows some filenames can contain native separators.
We now ensure all filenames use the unix separator before comparison.

Fix #6742
2020-12-20 14:32:25 +01:00
Marek Roszko 9fbceaa458 Nix another easily triggered infinite event loop on Windows
This infinite loop was triggered on any dynamic scaling change with KiCad open.
Either local display scale change OR Remote Desktop.
2020-12-19 17:07:22 -05:00
Jon Evans 281180512f Prevent refresh loops on GTK/MSW
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6787
2020-12-19 14:48:13 -05:00
qu1ck 50fa1937f9 Read fp-info-cache on first start of fp editor
if fp info list is not initialized
2020-12-19 00:48:42 -05:00
Jon Evans d79aee3f78 Fix refresh logic on MacOS to prevent excessive redraws
This new logic does not need to be MacOS-specific; it should
account for timer inconsistencies on any platform.

Thanks to Mark for the suggestions.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/6222
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6332
2020-12-18 13:52:57 -05:00
jean-pierre charras f599185e2d fp editor: fix incorrect parent for a error message box
From master branch (commit b425889)
2020-12-17 11:25:12 +01:00
Wayne Stambaugh fd79c7ae46 Eeschema: fix assertion creating a new sheet.
Fixes https://gitlab.com/kicad/code/kicad/issues/6722
2020-12-16 16:21:15 -05:00
Marek Roszko 9de0846f3e Formatting
Because I can't use a real IDE with msys
2020-12-14 20:06:44 -05:00
Marek Roszko f168ece461 Disable the wxFileSystemWatcher on network shares
Fix #5740
Fix #4126

This is a stupid solution because SAMBA sends invalid events and wxWidgets decides to assert rather than ignore them.
Why can't people just use Windows Server shares :(
2020-12-14 20:02:18 -05:00
Ian McInerney 4100650ce1 Fix some new compiler warnings on GCC 10 2020-12-15 00:24:42 +00:00
Marek Roszko 87bb437fd3 Fix formatting 2020-12-14 08:28:57 -05:00
Marek Roszko 626c671448 Reset frame position when wxDisplay cannot find the matching display
Fix #6732
2020-12-14 08:28:04 -05:00
Wayne Stambaugh b532c4a2b8 Eeschema: fix overzealous save file update UI event handler.
Apparently wxFileName stats the file on Windows when using the == operator
which causes slow response when adding sheets in designs saved on remote
shares.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/5596
2020-12-13 21:08:49 +00:00
jean-pierre charras 276cb7590d Gerber: speed up seriously solder mask creation.
Fixes https://gitlab.com/kicad/code/kicad/issues/6360
2020-12-13 18:53:17 +01:00
Marek Roszko f66aae2213 Fix flickering on msgpanel paints 2020-12-11 23:21:26 -05:00
Marek Roszko 17c4e21f34 Use a temp file for saving the fp-info-cache for now 2020-12-11 22:36:54 -05:00
Marek Roszko 3613bca5ea Read the fp-info-cache on pcb file load rather than on frame open
Otherwise in standalone mode pcbnew will never load the cache files and also later erase them :/
2020-12-11 22:36:47 -05:00
Marek Roszko eff9c46e59 Replace wxTextFile for writing fp info cache
wxTextFile uses wxFile which uses write syscalls which means its unbuffered.
This makes file IO more expensive against network shares where it will flush far too aggressively.
wxTextFile is fine for reads however.
2020-12-11 22:34:56 -05:00
jean-pierre charras c186a42a54 Replace wxFloatingPointValidator by our UNIT_BINDER in DIALOG_PAD_PROPERTIES.
the change is a try to fix an annoying issue (#6499 similar to #6670) we cannot
reproduce but is probably related to a locale issue.
2020-12-09 19:50:28 +01:00
jean-pierre charras 676d35f559 Replace wxFloatingPointValidator by our UNIT_BINDER in DIALOG_TEXT_PROPERTIES.
wxFloatingPointValidator has some limitations, but mainly the change is a try
to fix an annoying issue (#6670) we cannot reproduce but is probably related
to a locale issue.
2020-12-09 19:45:03 +01:00
Wayne Stambaugh e8bc4632b4 Minor dialog and other layout fixes.
* Fix clipped bitmap buttons.
* Remove colons from the end of wxStaticBoxSizer strings.
* Minor padding improvements.
2020-12-08 09:19:32 -05:00
Jeff Young 222158e954 Don't free part before removing from view. 2020-12-07 17:04:29 +00:00
Mark Roszko dde87b2f45 Prevent dxf imports of text from processing NaN coordinates 2020-12-05 01:55:39 +00:00
jean-pierre charras 789284f519 Pcbnew, modifiers for left click behavior.
Due to last changes fixing the ALT key problems, the highlight net is
CTRL+SHIFT + left click on Windows and Linux
CTRL+ALT + left click on OSX
Fix also a bad behavior of "remove from selection" left click option

Fixes #6599
https://gitlab.com/kicad/code/kicad/issues/6599
2020-12-04 12:05:46 +01:00
jean-pierre charras 19576ae167 Fix a compil issue 2020-12-04 10:44:23 +01:00
Mark Roszko be8fe7bdd6 Block off potential errant double activation of tree project items
Additional fix for #6606

Cherrypick from 535dbc1a06
2020-12-04 02:15:07 +00:00
Seth Hillbrand d7a6a2cc71 Fix locking scheme for double-clicks
In some cases, the events may be driven in the same thread, which can
lead to a deadlock.  Instead of waiting for the lock, simply refuse to
run if a loading system in in progress.

Fixes https://gitlab.com/kicad/code/kicad/issues/6606
2020-12-03 14:30:17 -08:00
Seth Hillbrand 7eea344f91 Fix/workaround GTK libtree issue with multi-unit symbols
When preparing for clearing the tree, GTK requires walking through
parents.  After calling "Freeze()" to protect against returning bad data
(see #6458 and #4471), we can no longer access Parent() from GTK and the
tree cannot be cleared.

The fix is to collapse the first element if it is open.  This prevents
the common case of the history elements being expanded in the tree

Fixes https://gitlab.com/kicad/code/kicad/issues/6102
2020-12-03 14:12:58 -08:00
Ian McInerney 2bd0b67591 Link kicad appdata with the desktop file
This link is needed to ensure appstream-builder finds
the icon for the program and includes it in the appstream
metadata for distribution software centers.

Fixes https://gitlab.com/kicad/code/kicad/issues/6593

(Cherry-picked from 9c968b0ef7)
2020-12-02 19:41:20 +00:00
Steven A. Falco d9307a174d Update desktop files, substituting Science for Development.
KiCad more properly fits into the Science and Engineering category.

(Cherry-picked from 675bb90128)
2020-12-02 19:40:58 +00:00
Seth Hillbrand 59c5b30f3f CMake adjust Linux build
Instead of linking the same target name and re-building, we can install
the file to a new name.  This speeds the build process and keeps linking
routines from stepping on each other.  Available now that we are at
CMake 3.0.2

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

(cherry picked from commit 51511eda85)

Fixes https://gitlab.com/kicad/code/kicad/issues/6576
2020-12-02 08:28:49 -08:00
Seth Hillbrand 938859f10a SPICE export full precision data
Saving csv files loses precision when time/data steps are smaller than
10^-6.  This switches to engineering notation when dealing with higher
precision.

Ref KiCad Services ticket 281
2020-11-30 13:26:10 -08:00
jean-pierre charras a9b53d94e8 Page layout editor: fix missing scrollbars in properties panel (GTK specific) From master branch 2020-11-30 20:24:47 +01:00
jean-pierre charras a33e2ed9b1 gendrill_file_writer_base: better algo to sort holes:
Holes were correctly sorted by size, but inside the same hole size
the holes were strangely sorted.
Now holes are sorted by hole size, and (inside the same size) by position.

From master branch
2020-11-30 20:22:30 +01:00
Wayne Stambaugh 7687ca2080 Pcbnew: change block selection and heuristic context menu modifier keys.
Do not use the alt modifier key to force the display of the heuristic
context menu.  This causes a conflict with menu selection on windows
and immediately dismisses the disambiguation context menu.

Fixes: https://gitlab.com/kicad/code/kicad/-/issues/1873
2020-11-30 11:47:15 -05:00
jean-pierre charras 2a1a6e8cbe From master branch: Make path substitutions grid read only in lib table dialog
From master branch, commit becc811.
2020-11-29 13:21:15 +01:00
jean-pierre charras 45fa9e8448 bitmap2component.cpp: ensure polygon calculation use PM_STRICTLY_SIMPLE option. 2020-11-29 13:18:01 +01:00
Steven Falco 0ca66d1af3 Add python 3.10 detection to CMake
(Cherry-picked from d85d0efdd8)
2020-11-28 22:28:10 +00:00
jean-pierre charras 63baa69342 Some fixes from master branch:
- fix environment variable changes after running Pcbnew in some cases.
- kicad manager: correct bitmap icon for gerber job files
- incorrect position of some checkboxes (not readable) when compiled with
wxWidgets 3.1.4
2020-11-21 15:56:54 +01:00
taotieren 894291faba Update Linux appdata file 2020-11-10 13:38:39 +00:00
jean-pierre charras 51708bab49 Gerbview, Legacy graphic mode: fix missing or incorrect inits related to zoom.
Fixes #6326
https://gitlab.com/kicad/code/kicad/issues/6326
2020-11-09 10:32:12 +01:00
jean-pierre charras 4497a754fb clear flags after a block placement (that previously leave moved item shown
in the selected state color)
2020-11-08 10:57:13 +01:00
taotieren 6223e7475c Add Simplified Chinese desktop file translations 2020-11-06 11:50:15 +08:00
Seth Hillbrand bf97378168 Don't allow selection of PCB_NETINFO_T
This is a version of master commit d9a94dc538
but that cannot be cherry-picked because it contains a number of
unrelated modifications

Fixes https://gitlab.com/kicad/code/kicad/issues/5729
2020-11-03 10:19:04 -08:00
Mark Roszko 5a6f291c72 Remove infinitely recursive loop on Windows (in special cases)
This looks like it was always intended for macOS but was accidentally changed for Windows as well.
If this is a requirement on windows, I'm sure theres better ways to fix it....

Cherrypick from 98ece9d
2020-11-02 13:45:14 +00:00
Roberto Fernandez Bautista 3404f4e86b Check GLEW functions exist before calling them
Fixes https://gitlab.com/kicad/code/kicad/-/issues/6235
2020-10-30 19:45:33 +00:00
Roberto Fernandez Bautista 6c07ebe5f2 Combine return statements in OPENGL_GAL::CheckFeatures 2020-10-30 19:43:22 +00:00
Roberto Fernandez Bautista 24a4f06013 Fix OPENGL_GAL initialization sequence (Version for 5.1)
- New public static function OPENGL_GAL::CheckFeatures() gets called in EDA_DRAW_PANEL_GAL::SwitchBackend() before switching to OPENGL_GAL
- Moved all OpenGL feature checks from OPENGL_GAL constructor to OPENGL_GAL::init()

Fixes https://gitlab.com/kicad/code/kicad/-/issues/4714
2020-10-30 17:38:19 +00:00
Seth Hillbrand 73bf4cbce7 Unselect and freeze before starting reset
In some cases, the BeforeReset() will cause an iteration over the tree
elements.  If we have deleted an element before doing this, we risk a
corruption/crash.

Fixes https://gitlab.com/kicad/code/kicad/issues/6192

(cherry picked from commit 3bd080b64e)
2020-10-30 10:00:36 -07:00
Wayne Stambaugh 67c8071bf4 Begin version 5.1.9 development. 2020-10-30 08:37:55 -04:00
Wayne Stambaugh 9b163cb444 Tag release version 5.1.8. 2020-10-28 15:28:02 -04:00
Wayne Stambaugh 83d6a77617 Eeschema: fix symbol rescue bug.
Loading the schematic symbol preserves the invalid LIB_ID characters in
the symbol name.  Unfortunately, loading the library symbol automatically
fixes the invalid characters so this caused the symbol rescue to not find
library symbols with invalid characters.  Replacing the invalid characters
in the schematic symbol name during rescue fixed the issue.  This fix
isn't perfect because there is the off chance that replacing the invalid
characters could lead to a name clash in the library resulting in the
incorrect symbol to be rescued.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/2319

(cherry picked from commit d90d734166)
2020-10-28 09:45:27 -04:00
Marek Roszko e5e174a20e Avoid 3d viewer stealing back focus/activation
Fix #6184
2020-10-27 19:41:14 -04:00
Seth Hillbrand 8aede85214 Correct freeze ordering in lib_tree_model
Adapts the BeforeReset()/AfterReset() logic to the 5.1 branch

Fixes https://gitlab.com/kicad/code/kicad/issues/6102
2020-10-26 11:28:58 -07:00
Seth Hillbrand c625b9e3cc Remove errant printf
(cherry picked from commit cce11e40a1)
2020-10-23 14:47:39 -07:00
Seth Hillbrand 222d44a8d8 Fully freeze tree GUI
This is the v5 analog of 0d6684bdf

Fixes https://gitlab.com/kicad/code/kicad/issues/6102
2020-10-23 12:35:14 -07:00
Seth Hillbrand 386f827d38 Be diligent in our search for color information
Just because we find a label reference does not mean that is where the
color is stored.  We do an exhaustive search through the hierarchy for
the correct color data

Fixes https://gitlab.com/kicad/code/kicad/issues/6107

(cherry picked from commit 75c2d1a0bf)
2020-10-23 12:13:34 -07:00
Marek Roszko 831c51c875 Launch tools from Idle in the kicad manager.
Launching on a control event can allow that control to steal focus from the new windows as more events may exist intended for the control.

Fix #4479
2020-10-17 00:58:17 -04:00
Marek Roszko 2d25d37112 Fix focus theft, Windows sends mouse events to windows regardless of focus.
We need to check if the window is foreground before fight over focus which will make the window foreground if it wasn't.

Fixes #4099
Fixes #5958
2020-10-17 00:53:26 -04:00
Mark Roszko a3172d643f Add wxTimer stallout fix to tool dispatcher 2020-10-15 04:51:07 +00:00
Seth Hillbrand 02787784a4 Bump OCE Plugin version
We modified how we search for color information.  Changing the version
data will for models to reload instead of keeping the cached data with
(possibly) missing color information

(cherry picked from commit b51ca1ab0e)
2020-10-14 08:49:46 -07:00
Seth Hillbrand 967f390aec Seach full model for color information
Assemblies may not have their face information in the top level of the
file.  Search recurses to get the explicit shape in sub assemblies as
well.

Fixes https://gitlab.com/kicad/code/kicad/issues/5163

(cherry picked from commit a2168c6add)
2020-10-14 08:49:18 -07:00
jean-pierre charras 89951b01ff Fix incorrect vertical position of check boxes in some wxGrid on wxWidgets 3.1.4.
Fix also 2 compil warnings.

These fixes come from the master branch
2020-10-04 09:55:09 +02:00
Wayne Stambaugh ca8f026bc3 Begin version 5.1.8 development. 2020-09-25 16:06:11 -04:00
Wayne Stambaugh 4c14d7ef5a Tag release version 5.1.7. 2020-09-25 15:49:58 -04:00
Seth Hillbrand 8234c20e28 Remove threading from Python wrapper
Python threading can cause issues with zone filler, connectivity
calculations and many other parts.  This forces the emitted code to hold
the GIL when running.

Fixes https://gitlab.com/kicad/code/kicad/issues/4436
2020-09-15 17:11:12 -07:00
jean-pierre charras 52e272954f Fix a DRC crash if a zone is flagged as filled but has 0 filled areas
Fixes #5631
https://gitlab.com/kicad/code/kicad/issues/5631
2020-09-15 14:18:23 +02:00
Seth Hillbrand 77caf50265 Remove OGLTest
We don't use this utility nor do we have plans to

(cherry picked from commit de12d40ee6)
2020-09-12 06:49:51 -07:00
jean-pierre charras 2ab8751fd4 Drill files export: ensure the Top to Bottom PTH drill file is always created,
even if there are no hole. NPTH file is already always created.

From Master.

Fixes #5566
https://gitlab.com/kicad/code/kicad/issues/5566
2020-09-10 17:04:01 +02:00
jean-pierre charras 54589c0828 FOOTPRINT_WIZARD_FRAME::ParametersUpdated(): fix a reentering issue
On wxWidgets 3.0.5, in some cases calling ReCreateParameterList() generates
a EVT_GRID_CMD_CELL_CHANGED that call ParametersUpdated()
and creating an infinite loop
Note also it happens **only for languages using a comma** instead
of a point for floating point separator
It does not happen on wxWidgets 3.1.4

From master branch
2020-09-08 19:02:17 +02:00
Seth Hillbrand 1fdb247167 Reverts premature Python 3 calls in favor of backwards compat.
This reverts commits d8d8f4f670
and 9614f6d0d9.

(cherry picked from commit 91914f1a71)
2020-09-03 20:06:28 -07:00
Wayne Stambaugh 49cc47afd1 Eeschema: fix broken new sheet path comparison on windows.
Using wxFileName::GetPath( wxPATH_WITH_SEPARATOR ) does not include the
drive specifier (A:, B:, C:, etc.) on windows which fails the comparison
with the project path 100% of the time.  wxFileName::GetPathWithSep()
solves the issue nicely.

Fixes https://gitlab.com/kicad/code/kicad/issues/5077

(cherry picked from commit 03423f13a1)
2020-09-03 14:26:31 -04:00
Wayne Stambaugh 673677c831 Eeschema: fix segfault when auto save file is detected.
Fixes https://gitlab.com/kicad/code/kicad/issues/5068
2020-09-01 10:29:06 -04:00
Ian McInerney c30dc04571 Skip the slider event to allow the stepping to work
The stepping is in a static event handler, so it is called
after the dynamic handler and so the dynamic handler must
allow the event to continue processing.

Fixes https://gitlab.com/kicad/code/kicad/issues/5319
2020-08-29 23:32:11 +01:00
Ian McInerney f58de79ceb Provide a checkbox to use negative coordinates in the position file
ADDED: A checkbox to allow selection of positive/negative X coordinates
for bottom components.

Fixes https://gitlab.com/kicad/code/kicad/issues/4638
2020-08-29 23:17:29 +01:00
Seth Hillbrand 8d9bb7a63e libedit: Unselect before re-syncing
The library alias may change so we need to ensure that the underlying
selected lib_id is not maintained across regenerations.

Fixes https://gitlab.com/kicad/code/kicad/issues/5144
2020-08-26 10:10:43 -07:00
Marek Roszko 18490162f7 Use a local tmp file for plotting
Fix #5238

(cherry picked from commit de7a1b647c)
2020-08-20 15:28:18 -07:00
jean-pierre charras bf71a4e012 Gerbview: fix draw issue when drawing a line using a rectangular aperture.
Lines using a rectangular aperture are not common, but this is legal in Gerber files.

Fixes #5205
https://gitlab.com/kicad/code/kicad/issues/5205
2020-08-18 10:26:10 +02:00
Seth Hillbrand d29edf6381 Removing extra parameters to super() calls
The extra parameters seem to cause problems for some Python
configurations and are not needed.

Fixes https://gitlab.com/kicad/code/kicad/issues/4896

(cherry picked from commit d8d8f4f670)
2020-08-12 06:33:22 -07:00
Blake Smith b087b7743e Fix PadGridArray super call
(cherry picked from commit 9614f6d0d9)
2020-08-12 06:33:21 -07:00
Ian McInerney 8ee1a7f67f Preserve the externally defined variables in the configure paths dialog
Previously the variables that were defined externally weren't being
readded to the variable map, so they would not appear in the dialog
the next time.

(Cherry-picked from fedc6519cd)
2020-08-12 00:29:17 +01:00
Ian McInerney 475385d876 Force regeneration of the lib tree on first load
Just setting the text field is not guaranteed to fire
a text event, so we must forcefully call the regenerate
function to ensure the preselect is handled.

Fixes https://gitlab.com/kicad/code/kicad/issues/4105

(Cherry-picked from 63b53c3968)
2020-08-12 00:27:33 +01:00
Ian McInerney 1b967a07e5 Remove shadowing linewidth member from the Cairo GAL
The base GAL has the linewidth property already, and its
accessor will only return the base version. This was causing
problems with the Cairo printing GAL, since that setter wasn't
using the base class version. Also, this removes the print-specific
setter, since the actual setting of line width shouldn't be done
there and is instead done where the drawing happens.

Fixes https://gitlab.com/kicad/code/kicad/issues/5089

(Cherry-picked from 5684708b22)
2020-08-11 00:54:23 +01:00
Ian McInerney 1088d613d5 Escape all env var strings sent to the Python interpreter
Fixes https://gitlab.com/kicad/code/kicad/issues/5130

(Cherry-picked from 0a0ed9e064)
2020-08-11 00:53:48 +01:00
Ian McInerney 1b2d4d6522 Entries typed into the text size field should be read as mils
Previously, they were being interpreted as inches, and then being
displayed as mils - leading to a multiplication by 1000 if there
was no unit string included.

Fixes https://gitlab.com/kicad/code/kicad/issues/5117

(Cherry-picked from 259cacf648)
2020-08-11 00:52:05 +01:00
Seth Hillbrand 0fd1214dea pcbnew: Fix multiple issues with BOARD_CONNECTED_ITEM
Modules are not members of BOARD_CONNECTED_ITEM, so we cannot use this
as a proxy for membership in the connectivity or ratsnest calculations.

Fixes https://gitlab.com/kicad/code/kicad/issues/5140
2020-08-10 12:53:37 -07:00
Jeff Young 00547b7aac Fix compile errors on CLang. 2020-08-10 20:06:06 +01:00
Jeff Young 621bfe36a8 Convert smart quotes and dashes in reports to ASCII quotes and dashes.
Fixes https://gitlab.com/kicad/code/kicad/issues/1861
2020-08-10 18:30:46 +01:00
Jeff Young c1849f7e00 Don't throw out search hits because they have unit children.
(Cherry-picked from 6aa0ceff36)

Fixes https://gitlab.com/kicad/code/kicad/issues/3746
2020-08-10 17:04:36 +01:00
Ian McInerney b23db7c4cb Fixup the UI for the symbol preview widget
This is the proper fix for the symbole preview widget. It will ensure
there are no size changes between the two panels (preview and status),
and also ensure that the status panel has the same background color as
the preview panel.

Fixes https://gitlab.com/kicad/code/kicad/issues/4997
2020-08-10 00:52:48 +01:00
Ian McInerney b3525bc642 Hide the scrollbars on the symbol preview canvas
This canvas supports mouse interaction, and navigating using the
scrollbars is very difficult (it causes large jumps). Also, having
the scrollbars causes the background to bleed through around them,
making them appear floating in the canvas.

Fixes https://gitlab.com/kicad/code/kicad/issues/4997
2020-08-09 23:13:03 +01:00
Ian McInerney 589951eaea Ensure the environment variables are synced between Pcbnew and Python
This ensures that when the project or an environment variable is changed
in pcbnew, the Python interpreter is updated to reflect that.
This is a backport version of the master-branch commit, and will not
synchronize any changes to the environment variables if they are made
from frames other tna Pcbnew.

Fixes https://gitlab.com/kicad/code/kicad/issues/5071
2020-08-09 20:32:38 +01:00
jean-pierre charras 74adbbcc5d Ensure values with units are displayed correctly when numbers are very small.
from master branch.
see https://gitlab.com/kicad/code/kicad/issues/5074
2020-08-09 09:48:10 +02:00
Ian McInerney bab61dd249 Initialize clear annotation variable to false so they aren't cleared by accident
When it was uninitialized, cancelling the dialog could lead to the
sheet's annotations being cleared because the variable wasn't set
to false anywhere.
2020-08-08 23:24:36 +01:00
Ian McInerney 5c3bcb09fa Give the length tuning tool an inital end point that isn't the start point
Using the starting point as the end point means that the tool
initializes with 0 length traces and so nothing is visible.

Fixes https://gitlab.com/kicad/code/kicad/issues/1912
2020-08-08 22:55:18 +01:00
Ian McInerney f0b94dd0d4 Load the previous project if an empty string is the argument
Previously it would just not open any project at all. This
was a problem for some launchers, which would pass an empty string
when no file is passed by the user.

Fixes https://gitlab.com/kicad/code/kicad/issues/5055
2020-08-08 22:55:03 +01:00
jean-pierre charras ba5ab99a03 pcbnew: More about Prevent use of non-connected item in ratsnest
Another static cast was left. changed now to dyn_cast

We need to be careful in the connectivity system to always use
dyn_cast/dynamic_cast and check the return when dealing with board
items.
Fixes https://gitlab.com/kicad/code/kicad/issues/5082
2020-08-08 09:59:54 +02:00
Seth Hillbrand 9bc3028eb7 pcbnew: Prevent use of non-connected item in ratsnest
We need to be careful in the connectivity system to always use
dyn_cast/dynamic_cast and check the return when dealing with board
items.  Getting non-connected items will result in null nets when
propagated.

Fixes https://gitlab.com/kicad/code/kicad/issues/5082

(cherry picked from commit 406de56964)
2020-08-07 14:09:03 -07:00
Wayne Stambaugh 5ef9db6d67 Eeschema: fix large diffs when saving schematics.
Apparently the < operator was never implemented for SCH_JUNCTION objects
so they were not get sorted which was causing the large diffs between
schematic saves.

Fixes https://gitlab.com/kicad/code/kicad/issues/4370

(cherry picked from commit 35f3eb6220)
2020-08-06 09:27:14 -04:00
jean-pierre charras 86a710e175 Gerbview: show a message instead of an error when trying to open a job file as plot file.
From master branch, commit ef0ae8
2020-08-06 14:59:29 +02:00
Tormod Volden 1797a9c61a bom2grouped_csv.xsl: Fix sorting of grouped references
Commit a96ebe8f seems to have missed a dollar sign.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/940
hopefully for good this time.

Signed-off-by: Tormod Volden <debian.tormod@gmail.com>

(Cherry-picked from e82e30d215)
2020-08-06 10:14:26 +01:00
Frank Severinsen fd49bc5d8d Check reference designator type when comparing comp
example: prevents a 10K NTC resistor from getting grouped with a 10K SMD resistor

(Cherry-picked from 9ca61b50b6)
2020-08-06 10:12:57 +01:00
Matthias Urlichs de4c6c6fab Allow SWIG 4.0.
No other changes are necessary.

(Cherry-picked from 3bba96baa2)
2020-08-06 10:06:24 +01:00
Ian McInerney 78a7dd3269 Properly dismiss the grid combobox editor when it loses focus
The old way of checking for focus loss caused GTK to be unable to
even open the combobox. This way checks for the event sent when the
list closes and uses that to close the grid editor.

Fixes https://gitlab.com/kicad/code/kicad/issues/4617

(Cherry-picked from af24a5d5a7)
2020-08-06 02:02:32 +01:00
Wayne Stambaugh 0cf53da0fe Fix ngspice version information issue.
The config.h header for ngspice is not packaged with all platforms so
use pkg-config to fetch the version information when available.  When
pkg-config is not available, check if the ngspice/config.h file is
installed on the system before including it to build the ngspice version
string.  If neither pkg-config or ngspice/config.h is available set the
version string to "unknown".

Fixes https://gitlab.com/kicad/code/kicad/issues/4851
2020-08-02 15:49:25 +02:00
jean-pierre charras 13b8708e58 Better fix for OPENGL_GAL::DrawSegment() than initial commit 5bdc78e.
segments having a length <= 1 internal unit are not drawn in opengl gal.
So these segments are drawn as circle.
Fix from master branch.
2020-07-31 15:44:24 +02:00
Simon Richter b6d91bd28a Remove commented-out code for building cvpcb.exe 2020-07-31 14:12:32 +02:00
Seth Hillbrand 5bdc78e3ba GAL: Fix issue with small tracks being hidden
When drawing segments that are smaller than the segment width, OpenGL
did not use realistic values, leading to hidden, small tracks.  Instead,
we set the track to only draw a segment when the length is at least 1
radius long (so that we can see the full semi-circle at the track end)

Fixes https://gitlab.com/kicad/code/kicad/issues/5009

(cherry picked from commit 294dabf640)
2020-07-30 15:12:17 -07:00
Seth Hillbrand bce8fb31ab Mirror hidden text in SVG plotter
We output a 0 opacity text in the SVG plotter to allow searching.  When
this text is changed to 100 opacity, it can show up on the user screen
and so needs to be mirrored to match the stroke font output

Fixes https://gitlab.com/kicad/code/kicad/issues/5001

(cherry picked from commit b650e4568b)
2020-07-30 06:26:49 -07:00
jean-pierre charras 77d7d21130 Simulator: optimize a plot function, to support large amount of points.
Redundant points are not plotted.

From master, commit 010316457
2020-07-29 08:55:45 +02:00
Seth Hillbrand fed1520a8e Treat 0-length ovals as circles
Some buggy SVG interpreters can't handle 0-length ovals.  In this case,
they are meant to be circles, so we can export as circles in our
plotter.

Fixes https://gitlab.com/kicad/code/kicad/issues/3995

(cherry picked from commit e38ab6c699)
2020-07-28 09:53:26 -07:00
jean-pierre charras 284d5861dd Remove creation on the fly of wxPaintEvent instances, not allowed in 3.1.4 wxWidgets
From master branch
2020-07-18 08:24:58 +02:00
Urja Rannikko ee6154c842 GAL: Remove dead code regarding SHADER_LINE_B in the fragment shader
The only test for it was only called from a function
that's called if the mode is SHADER_LINE_A, not B.

(cherry picked from commit 65ceeebc71)
2020-07-17 14:10:29 -07:00
Urja Rannikko 709197c294 GAL: Round the incoming mode parameter in fragment shader
This fixes some letters being randomly boxes and some circles
being randomly triangles on the Mali T760.

(cherry picked from commit aa7ab46a06)
2020-07-17 14:07:34 -07:00
jean-pierre charras fd55b7b4ed 3D viewer: use the full board bounding box to define the visible area.
From master, commit eab98eee.
2020-07-07 11:46:46 +02:00
Ian McInerney 5bca5e2d77 eeschema: Only warn user about off-grid pins if the position has changed
(Cherry-picked from f7156a9d49)

Fixes https://gitlab.com/kicad/code/kicad/issues/4673
2020-07-03 03:02:03 +01:00
Jeff Young ee96937fd4 Scale polygon drawing guides with zoom.
Fixes https://gitlab.com/kicad/code/kicad/issues/4769

(cherry picked from commit e26625fc99)
2020-07-01 17:34:35 +01:00
jean-pierre charras a370d69542 Gerber plotter: Better object attributes handling when plotting a zone
- Clear object attributes before and after plotting a zone.
 It avoid using previously defined object attributes when plotting the next
 zone, and using therefore incorrect attributes.
- Add aperture attribute to filled zone solid polygons (regions in Gerber)

From master branch
2020-06-28 13:14:06 +02:00
Seth Hillbrand 24aad2eed4 Fix order-of-ops issue in sim plot
(cherry picked from commit 67bd49b4a8)
2020-06-27 20:00:17 -07:00
Frank Severinsen 910605cc7d Fix text rotation after flip
fixes https://gitlab.com/kicad/code/kicad/-/issues/4407

(cherry picked from commit 9cf1e61d8a)
2020-06-27 21:49:15 -04:00
Seth Hillbrand 7194e25bba pcbnew: Allow slow ratsnest to turn off
Depending on where you move the selection, the slow ratsnest might turn
on.  This prevents that setting from being sticky, reverting to smooth
movement.

(cherry picked from commit a893d19d26)

Fixes https://gitlab.com/kicad/code/kicad/issues/1909
2020-06-24 17:27:39 -07:00
Seth Hillbrand 7f287cb8f9 Remove delauney computations from dynamic ratsnest
Avoids additional calculations on movement by using cached ratsnest for
internal nets and keeping bicolored line calc for others.

Fixes https://gitlab.com/kicad/code/kicad/issues/1865

cherry-picked from 104ff29e5f
2020-06-22 20:42:12 -07:00
jean-pierre charras a0ce1491d9 Gerber plot solder mask margin: use new algo from master branch to avoid
merging pad shapes when the min width mask is not 0.

Keeping pad shapes clearly identified in Gerber files is mandatory,
so the initial algo that merged shapes in some cases was not good
from this point of view.
2020-06-21 20:47:58 +02:00
jean-pierre charras 26035d23fe Pcbnew, DIALOG_PLOT_BASE: better warning message about non null solder mask margins. 2020-06-21 20:42:37 +02:00
jean-pierre charras 835debe75e Gerber plot solder mask layer: prepare new algo to avoid merging pads in zones 2020-06-18 17:54:00 +02:00
jean-pierre charras b482deb8b0 Fix a incorrect code after a old other code change. 2020-06-18 12:53:06 +02:00
Ian McInerney 76fd1e6f5a Include the ngspice library in the bundle fixup command
This is a patch that has been carried in the kicad-mac-builder
repository that is being upstreamed into the main codebase.

(cherry-picked from 0bfe4130f5)
2020-06-15 22:47:43 +01:00
jean-pierre charras abb45fbe45 Gerber plotter: better choice of aperture attributes in internal layers.
From master branch
2020-06-14 18:18:20 +02:00
jean-pierre charras 567ce48cc1 panel lib tables: avoid crash when deleting the last entry in list.
From master branch
2020-06-14 17:51:27 +02:00
jean-pierre charras 56a17b4e68 Gerber plotter: ensure the gerber region for a round rect pad is always closed.
Due to rounding issues, sometimes (especially for rotated pads)
the region (4 segments+4 arcs) was incorrectly closed
1 unit (nanometer) mismatch between start point and end point.
Although it does not create bad shape, its breaks the round rect pad
identification in CAM tools. start point and end point are now the same.

From master.
2020-06-12 10:54:09 +02:00
jean-pierre charras c027e72439 Solder mask clearance default value: set default to 0, taking advice from
both Ucamco and Eurocircuits.
Update message in plot dialog about best solder mask clearance value.
Show a warning message in plot dialog if these values are no 0.

From master branch.
2020-06-07 15:52:12 +02:00
Seth Hillbrand 25b8da8e3b PNS: Use segment shape for all oval pads
Instead of calculating a simple polygon for the oval pads that are
rotated, we use a rotated segment.

Fixes https://gitlab.com/kicad/code/kicad/issues/4604
2020-06-04 20:28:59 -07:00
Seth Hillbrand 5b47d1a910 Prevent multiple kiway from loading simultaneously
Each KIWAY_PLAYER has some initialization elements that may take time
before the frame is raised.  If handling is returned to the UI during
that load, we can cause reentrant issues for players.

Fixes https://gitlab.com/kicad/code/kicad/issues/4284

Fixes https://gitlab.com/kicad/code/kicad/issues/3743
2020-06-04 16:37:35 -07:00
Jeff Young a844c3043c Fix offset issue when pad edited from board instead of modEdit.
(cherry picked from commit 7db4a3f702)
2020-06-03 14:42:13 +01:00
jean-pierre charras e099a82d15 eeschema: do not propagate text field change to other units for not annotated symbols
Fixes #4602
https://gitlab.com/kicad/code/kicad/issues/4602
2020-06-03 08:52:48 +02:00
Jeff Young b681af4556 Check for duplicate field names.
Fixes https://gitlab.com/kicad/code/kicad/issues/4219

(cherry picked from commit 5d493abea7)
2020-06-02 22:57:29 +01:00
Jeff Young 78d66a9ac3 Don't allow the pad preview canvas to become too large.
Also offset canvas with pad so that hole stays in centre.

Fixes https://gitlab.com/kicad/code/kicad/issues/4185

(cherry picked from commit 3bd4c0c5dc)
2020-06-02 22:57:05 +01:00
Jeff Young bfe4d9f3f4 Cherry pick fix for 4549.
Fixes: lp:4549
* https://gitlab.com/kicad/code/kicad/-/issues/4549
2020-06-01 21:57:16 +01:00
Jeff Young a02ee3719c Update membership grid when a netclass name changes.
Fixes https://gitlab.com/kicad/code/kicad/issues/4596
2020-06-01 21:57:16 +01:00
jean-pierre charras 542f713678 Fix PCBnew crash when show local ratsnest and selecting a footprint with no pads
From master, commit e3c3dae
2020-06-01 09:22:29 +02:00
jean-pierre charras 2395c6fdaa toolbars_lib_view.cpp and toolbars_libedit.cpp: do not
recreate comboboxes when clearing toolbars. Clearing toolbars delete only
tools, not other widgets. recreating comboboxes creates strange cosmetic issues.

From master, commit 598ed8b39.
2020-05-30 15:57:18 +02:00
Steven A. Falco c7f02d5e51 Add Python 3.9 compatibility
Taken from downstream Fedora commit.

Original author info:
Charalampos Stratakis <cstratak@redhat.com>  2020-05-28 12:26:59

Downstream commit: a2677c159ad529

(cherry-picked from 7fd661f06b)
2020-05-29 22:13:26 +01:00
Érico Rolim 55a726e933 Fix sg_version detection for cross compilation
Fixes https://gitlab.com/kicad/code/kicad/issues/4525

(cherry picked from commit e9e72bd8e4)
2020-05-28 13:19:10 -04:00
jean-pierre charras 601633347c Pcbnew: fix a crash when trying to edit a pad in the board editor 2020-05-28 09:51:06 +02:00
Michael Kavanagh 182973c0ee NPTH pads can have the hole offset from centre
Fixes https://gitlab.com/kicad/code/kicad/issues/3671

(cherry picked from commit e800c47406)
2020-05-26 13:35:38 -04:00
Wayne Stambaugh a16e9ac76a Symbol editor: fix crash when editing new symbol value field.
Fixes https://gitlab.com/kicad/code/kicad/issues/4471
2020-05-21 16:46:00 -04:00
emC5RgViIK 66f70e5da6 (Cherry-picked from 47297402d3) 2020-05-15 12:37:41 +01:00
Simon Richter 5a187c6ca8 Make sure that Ninja knows the version header (fixes #4209)
This is required, because Ninja otherwise doesn't properly rebuild after
updating the version string header file.

Because BYPRODUCTS requires CMake 3.2, bump the minimum version and remove
now unused compatibility code for older CMake versions.
2020-05-15 10:51:12 +00:00
Jeff Young c6042100f9 Add ~ processing in env vars.
Fixes https://gitlab.com/kicad/code/kicad/issues/1829

(cherry picked from commit 3a9746c657)
2020-05-14 00:35:10 +01:00
jean-pierre charras fde7ae4d19 Pcbnew: fix a crash due to use of invalid pointers after a list modification
from master branch, fix bug #4409
2020-05-13 14:04:20 +02:00
Jeff Young e37e13e700 If more than one text matches by text try layer and then position.
Fixes https://gitlab.com/kicad/code/kicad/issues/4187

(cherry picked from commit 8df5f70c4a)
2020-05-13 00:14:40 +01:00
Jeff Young d22003578e Use standard OK/Cancel paradigm rather than Apply/Cancel.
Apply/Cancel puts the buttons in a different order on some platforms.

Fixes https://gitlab.com/kicad/code/kicad/issues/4332

(cherry picked from commit 52d1c93777)
2020-05-13 00:04:51 +01:00
Jeff Young 52139cf0c4 Don't resync the screen before we've changed it back.
Fixes: lp:4382
* https://bugs.launchpad.net/kicad/+bug/4382
2020-05-12 22:58:15 +01:00
Jeff Young 37b723d8ae Fix pad name increment to use last edited pad.
Fixes https://gitlab.com/kicad/code/kicad/issues/1882

(cherry picked from commit 56946f4db1)
2020-05-12 22:58:15 +01:00
Jeff Young aec3649524 Add FocusOnLocation for second items in ERC markers.
Fixes: lp:4237
* https://bugs.launchpad.net/kicad/+bug/4237
2020-05-12 22:58:15 +01:00
Jeff Young 36d716bb50 Update toolbars when changing units.
Fixes: lp:4249
* https://bugs.launchpad.net/kicad/+bug/4249
2020-05-12 22:58:15 +01:00
Wayne Stambaugh f61c692929 Eeschema: fix partial schematic load bug in the legacy plugin.
Move the hierarchical sheet loading outside of the try exception block
so that any sheets that were loaded when a schematic file load fails
are loaded rather than skipped.  This allows more of the schematic to
be loaded when any parser errors occur.

(cherry picked from commit 1a8082c6d6)
2020-05-11 16:45:11 -04:00
Wayne Stambaugh 3f717f3baf Eeschema: fix sheet bug in schematic editor drawing tool.
SCH_SHEET objects can only have another SCH_SHEET object as a parent
or nullptr for the root sheet so overload EDA_ITEM::SetParent() to
prevent the parent from being set to another type of object and add
some checks to the root sheet code just in case someone gets clever
and attempts to bypass the overloaded SetParent() call.

(cherry picked from commit fa57c8a570)
2020-05-11 16:33:40 -04:00
Wayne Stambaugh ffc95090aa Begin version 5.1.7 development. 2020-05-11 14:47:14 -04:00
Wayne Stambaugh 2eaa9236f2 Tag release version 5.1.6. 2020-05-11 14:27:08 -04:00
Jeff Young e4bab37b62 Don't try and run drawing tools in ModEdit with no module selected.
Fixes: lp:1836673
* https://bugs.launchpad.net/kicad/+bug/1836673

(cherry picked from commit 02eb1d2c62)
2020-05-09 17:41:56 +01:00
Jeff Young 105c9c71ee Don't let point editor interrupt other operations.
Fixes: lp:1832416
* https://bugs.launchpad.net/kicad/+bug/1832416

(cherry picked from commit ae8daee83c)
2020-05-09 17:41:56 +01:00
Jon Evans e135229ca6 Don't try to draw a zone that has no outline
Fixes #4352

(cherry picked from commit 366673d995)
2020-05-07 17:54:00 -04:00
jean-pierre charras 97dea6ede5 Gerbview: Fix a crash Don't try to close an empty polygon on G37 command.
Can happens with malformed Gerber files.
From Master, commit 528ebf8.
2020-05-07 09:55:13 +02:00
jean-pierre charras d871a92d1c library viewers: fix a focus issue that prevent using arrow keys in lib or fp lists.
Once the gal canvas hsad the focus, it was not possible to use arrow keys in library
or symbols or fp lists even after clicking on an item.

This focus issue is now fixed.

From the fix in Master
2020-05-03 20:23:41 +02:00
jean-pierre charras a152aa125b Footprint editor: fix a crash when a graphic item is selected and the
measurement tool is active and closing the frame, or selecting a new footprint.
I am guessing it was a use after delete data.

Fixes #4302
https://gitlab.com/kicad/code/kicad/issues/4302
2020-05-03 09:03:32 +02:00
jean-pierre charras 4e217d4028 SVG plotter: fix some issues: incorrect bitmap size and missing lines in header.
From master branch.
2020-04-24 16:52:50 +02:00
Jeff Young e5da7a4606 Fix via printing.
LAYER_VIAS needs to get set for them to print at all, and GetLOD
needs too look at the view layer visibiilties, not the board layer
visibilities.

Also implements a more pad-like strategy for printing blind/buried
vias when printing one layer per page (where the top/bottom arcs
don't make sense).

Fixes https://gitlab.com/kicad/code/kicad/issues/1938

(cherry picked from commit dce42612d3)
2020-04-20 20:29:05 +01:00
Jeff Young faace3090c Add specific selection updating when adding 3D models.
This keeps us from being at the receiving end of wxWidgets' vagaries.

Fixes https://gitlab.com/kicad/code/kicad/issues/3760
2020-04-19 22:43:32 +01:00
jean-pierre charras d3e2345f94 Dxf import: fix a bug that disable import of data inside blocks 2020-04-19 13:32:59 +02:00
jean-pierre charras a3e087ab51 Pcbnew: Fix crashes when delete footprint text in some cases.
Fixes #4221
https://gitlab.com/kicad/code/kicad/issues/4221
2020-04-18 20:00:26 +02:00
jean-pierre charras 3a614a8ea1 Legacy plugin: fix incorrect number of copper layers after loading a .brd file. 2020-04-18 19:58:45 +02:00
Marcus Comstedt 9cb60dcdf5 Cairo GAL: fix incorrect use of pixman formats
Fixes https://gitlab.com/kicad/code/kicad/issues/3970

(cherry-picked from 55ac575a88)
2020-04-15 01:29:50 +01:00
Jon Evans af6db68816 Defer image surface destruction until next paint
Fixes #4043

(cherry picked from commit 23c1baae8e)
2020-04-15 01:18:55 +01:00
Adam Wolf 305ed0b65a For macOS, fix KICAD_BUNDLE_LIBS in ogltest.
(Cherry-picked from e143ecbf40)
2020-04-10 20:09:34 +01:00
jean-pierre charras 263efb41e8 Gerbview: fix incorrect rendering of oval vertical standard aperture with hole.
Fix also incorrect display of dcode size in toolbal: was Y size, X size.
Now is X size, Y size as expected.

From master branch
2020-04-10 16:26:38 +02:00
jean-pierre charras d6312c7b92 Gerbview: add a error message for invalid files missing G74 or G75 commands.
They are mandatory to read arc coordinates.
2020-04-10 13:38:11 +02:00
Jeff Young b31af4891d Be smarter about determining if there are modules in the selection list.
The old algorithm would delete modules if another module was in the
list, which was not the intention.

Fixes https://gitlab.com/kicad/code/kicad/issues/4175
2020-04-09 00:07:07 +01:00
Adam Wolf 0ba08f57f2 Add macOS KICAD_BUNDLE_LIBS search path for bundle fixup.
(cherry-picked from ac20428b82)
2020-04-03 01:39:31 +01:00
Wayne Stambaugh a2d7881afe Fix cherry pick error on previous commit. 2020-04-02 16:09:25 -04:00
Wayne Stambaugh d79e598bf8 Eeschema: fix symbol cache library look up bug.
Use an underscore character instead of a semicolon between the library
ID library nickname and symbol name in library ID search strings when
looking up symbols in the cache library since that is how they are saved
when creating the cache library.  This fixes rescuing missing symbols
from the cache when they have been removed from the original library and
preventing a broken symbol link indicator from being shown when a symbol
is removed from the library.

Add some defensive testing to make sure the library passed to function
SchGetLibPart() is actually the cache library.

(cherry picked from commit f6d7ef367d)
2020-04-02 16:04:59 -04:00
jean-pierre charras a6a39cb842 Gerber plotter: Non horiz or vertical oval pads: better plot output:
These pads were plotted as a segment. This is not the right way:
Pads must be flashed or plotted as regions, not painted.
They are now plotted as Gerber regions round rectangle pads.
These regions are similar to flashed pads.

From Master branch, commit de7154e8e.
2020-04-02 19:50:59 +02:00
Wayne Stambaugh 5d0883c0e4 Eeschema: fix rescue multiple unit symbol bug.
The code that checked for pin conflicts to determine if a symbol needed
rescued did not check either the pin convert setting so it was possible
for a pin from the other convert on symbols that do not have identical
units to appear to not have a pin conflict.  Add tests for pin unit and
convert setting to prevent that from breaking the comparison.  This must
have always been broken.

Fix the symbol preview widget to prevent drawing all symbols on top of
each other (if we need to do this the code will have to be revised) and
also show the convert if valid.

Fix broken symbol cache library when saving alias symbols.

Fixes https://gitlab.com/kicad/code/kicad/issues/3879

(cherry picked from commit e91f1f57dd)
2020-04-02 09:31:25 -04:00
Seth Hillbrand e6d49424cf PNS: Don't link unroutable items
The joint map only works for items that are routable, so don't bother
adding unroutable items as this only takes additional time to process

Fixes #3976 | https://gitlab.com/kicad/code/kicad/issues/3976

(cherry picked from commit 9769e1020b)

Fixes https://gitlab.com/kicad/code/kicad/issues/4143
2020-04-01 08:31:57 -07:00
Seth Hillbrand 72abcd5991 Correct cyrillic 'f' in newstroke
The lowercase greek phi had been used which did not match the cyrillic
f.  We use the variant of phi that includes the full strokes instead.

Fixes #3898 | https://gitlab.com/kicad/code/kicad/issues/3898

(cherry picked from commit 39a45f2a81)
2020-04-01 08:31:14 -07:00
jean-pierre charras 9c2bb85858 3D viewer: fix a minor problem: to many rotations when typing
Shift+z or Shift+y more than once.

From master, commit 00d9e77e
2020-03-31 17:48:50 +02:00
Jeff Young e9b059ee94 Re-implement change from cbef95256b
Fixes: lp:4103
* https://bugs.launchpad.net/kicad/+bug/4103
2020-03-30 20:24:08 +01:00
Ian McInerney 7a913844e2 Fix discrepancy between ASCII and CSV fp pos files
(based on 570ea62b64)

Fixes https://gitlab.com/kicad/code/kicad/issues/3897
2020-03-30 10:42:15 +01:00
jean-pierre charras f8be7e1f57 Gerber X2 format: Set default values to Enable X2 format 2020-03-29 15:37:36 +02:00
jean-pierre charras d5c43c4675 Gerber: fix a minor issue in OBLONG standard aperture: - incorrect (too big) bounding box. - HitTest did not test the exact shape. 2020-03-27 16:19:22 +01:00
jean-pierre charras 85fa6d8025 3D viewer: apply patch from master 04d6ea982.
The 3D viewer does not show the issue on solder paste layer having
negative clearance.
However the bug was here and not seen just because some draw code was different:
The code tried to draw outlines with segments having a negative thickness.
It happens mainly on solder paste layers.
2020-03-27 10:36:14 +01:00
Ian McInerney 6b2a8f54a1 Check for file writability before saving part
This is a 5.1 only fix for this crash. Fixing in master requires
a major refactor of the library writability detection code.

Fixes https://gitlab.com/kicad/code/kicad/issues/3864
2020-03-25 13:23:49 +00:00
jean-pierre charras bd1fb845b1 3D viewer: fix a minor issue in solder paste rect pads:
the solder paste mask clearance was no taken in account
for rect and trap shapes.
2020-03-25 13:47:48 +01:00
jean-pierre charras 9c64c9af5d Kicad manager: fix an issue on Windows when killing Kicad.
For some obscure reason, on Windows, when killing Kicad from the Windows task manager
if a editor frame (schematic, library, board editor or fp editor) is open and has
some edition to save, OnCloseWindow is run twice *at the same time*, creating race
conditions between OnCloseWindow() code.

Fixes #4072
https://gitlab.com/kicad/code/kicad/issues/4072
2020-03-25 09:51:12 +01:00
jean-pierre charras 1057eceb2f Gerber plotter: plot round rectangle pads using a region with arcs.
Previously, the region was a usual polygon with arc approximated by segment.
Using a region with arcs is a better way because it allows CAM tools to
identify this region as a round-rect pad.

Similar to master branch, commit 9cb3333d05.
2020-03-22 08:31:25 +01:00
Wayne Stambaugh 445bc75319 3D Viewer: fix broken check for write image permission check.
Fixes https://gitlab.com/kicad/code/kicad/issues/4081

(cherry picked from commit d8e99dc5be)
2020-03-21 17:20:04 -04:00
jean-pierre charras 4fb7ee02cd Kicad: unzip project: fix issues: - files with no extension were skipped. - subdirs were ignored. 2020-03-21 14:08:38 +01:00
Wayne Stambaugh ad11b7ebd0 3D viewer: fix double warning attempting to save screen shot file.
Fixes https://gitlab.com/kicad/code/kicad/issues/4028.

(cherry picked from commit fc20f9f0b2)
2020-03-16 13:09:02 -04:00
Seth Hillbrand 5d9bda6f97 Partial revert of 134a7ba85
The margin fix prevented some schematics from printing.  Reverting in
favor of transitioning to the Cairo print base in eeschema

(cherry picked from commit 9de7547c25)
2020-03-13 11:54:09 -07:00
jean-pierre charras 54be07c17d Pcbnew: Set default solder mask min size to 0.
When the solder mask min size is > 0, pads are no longer flashed or regions items.
Good Gerber files need pads flashed or regions items.

Non 0 solder mask min size is reserved to special cases (home made PCBs for instance)

From master branch.
2020-03-12 20:47:21 +01:00
jean-pierre charras 2c7ab3a28e Pcbnew, Gerber output: always generates Aperture Attributes.
Previously, for historical reasons, they were added only if
Include Netlist Attributes option was on.

But Aperture Attributes have nothing to do with Netlist Attributes, and good
Gerber files must include them.

From master branch
2020-03-12 17:00:55 +01:00
jean-pierre charras 3cc3c1bbd3 Zones: fix a crash when adding a zone cutout to a zone having already holes
From master branch
2020-03-12 14:49:36 +01:00
jean-pierre charras ddedf2e046 Annotate dialog: fix incorrect list of changes in complex hierarchies
Previously, to list changes, the Reference field was used in comparisons.
In complex hierarchies, this is incorrect: the Reference field contains
only the last displayed reference, not the reference of a given sheet.

The comparison uses now the sheet paths for ref and unit selection.

From a similar fix in master branch.
2020-03-09 18:28:39 +01:00
Seth Hillbrand a60c339f85 PCAD: Handle mirrored text
Mirrored text rotates clockwise in the mirror, so we need to invert the
sign for aligning mirrored PCAD text

Fixes https://gitlab.com/kicad/code/kicad/issues/3992

(cherry picked from commit 058fb3afa1)
2020-03-05 15:29:47 -08:00
Michael Kavanagh ce2c5d6528 Remove empty choice in Via type dropdown
Fixes https://gitlab.com/kicad/code/kicad/issues/3968

(cherry picked from commit 265c1663f9)
2020-03-03 14:21:21 -08:00
Seth Hillbrand fd81f70355 Drop invalid arcs on footprint load
In the case where the footprint arc has a non-normal angle, we cannot
represent this in pcbnew and it corrupts the gerber output.  Therefore
we drop the invalid arc and continue to load the footprint/board.

Fixes #3918 | https://gitlab.com/kicad/code/kicad/issues/3918

(cherry picked from commit 3e0ff72720)
2020-03-02 15:59:35 -08:00
Seth Hillbrand 100bb7c6ca Set Module Editor flag for tools
The commit takes the module edit flag when resetting the tool.  All
tools should reset this flag when we setup the Module editor.

This is slightly different in master and v5, so  this is a rework of
7bdf71abc

Fixes #3973 | https://gitlab.com/kicad/code/kicad/issues/3973
2020-03-02 12:45:47 -08:00
Seth Hillbrand 1ffcedd9d4 libedit: Fix speed of lib check
The symbol check output the HTML message for each item.  This is _very_
slow and can lock the system reponsiveness.  Changing to a queue/flush
method is much faster

cherry-picked from 245b778454
2020-02-28 08:50:05 -08:00
Ben Dooks fc1f713106 Fix issue with DRC for through hole being applied to SMD pads
Commit d7272b7f5e fixed the use of
the eagle DRC to change the library pad shapes. This was also
applied incorrectly to SMD stacks.

Remove the references to m_rules in packageSMD() and the code
that deals with them. eagle 7.7 does not have any SMD pad options
other than rectangle with rounding.

(cherry picked from commit 070c6b8ce0)
2020-02-27 09:01:42 -08:00
Seth Hillbrand 83c3a78e6d pcbnew: Avoid wx scaling error
When drawing to a scaled DC, the window doesn't reflect the expected
size if scaled after.  This causes elements drawn on the edge to reflect
back into the drawing area instead of being cut off.

We can simply scale our own values to avoid this issue.

Fixes #3849 | https://gitlab.com/kicad/code/kicad/issues/3849

(cherry picked from commit 5b6a4d794f)
2020-02-27 09:01:18 -08:00
Ian McInerney e6a3e7024d Also verify that the .dcm is writable when saving library
Fixes https://gitlab.com/kicad/code/kicad/issues/3946

(cherry-picked from b2cc454878)
2020-02-26 19:38:30 +00:00
jean-pierre charras d62fde0d79 Pcbnew, Fix issue when trying to create a drawing (line,circle,arc,polygon):
Display a error message if no free graphic layer is enabled, to switch from
a copper layer.

Fixes #3916
https://gitlab.com/kicad/code/kicad/issues/3916
2020-02-24 19:59:07 +01:00
Jon Evans a70cf464d6 Check if scaling factor has changed when top-level window is moved
Fixes #2592

(cherry picked from commit 712ae5a953)
2020-02-23 15:55:05 -05:00
Jon Evans 546260348d Rework window size and position fixing code
Fixes #2624
Fixes #3888

(cherry picked from commit 96da45f12f)
2020-02-23 15:55:05 -05:00
jean-pierre charras 693aec949c Gerbview: Gerber attributes display: fix incorrect attributes deletion.
The Gerber attribute deletion command (%TD,xxx) always cleared all attributes,
instead of clearing xxx attribute.
Therefore some attributes were not always displayed.

From master branch, commit 7206b567
2020-02-23 10:05:00 +01:00
jean-pierre charras 5c7ac1bb7e ZONE_FILLER: fix incorrect thermal clearance of pads having "not in zone" option. Pads inside a zone of the same net having the "not in zone" option have a "antipad" clearance. The value in this case is the biggest between zone clearance and thermal clearance (the net clearance is 0 betwen items of the same net)
However a bug created a incorrect value, due to the fact the minimal zone width
was incorrectly taking in account in calculations.
2020-02-17 17:12:24 +01:00
jean-pierre charras 8862752523 Remove a fix committed in 6b78fdf by mistake. 2020-02-17 13:00:56 +01:00
jean-pierre charras 201c380925 QA tests: remove deprecated headers, already not used in master branch. 2020-02-17 12:58:04 +01:00
jean-pierre charras c7230a6f77 eeschema: fixes related to translated and not translated field names.
When searching for fields, the code was sometimes comparing
translated and not translated names. This is an issue for mandatory fields,
in non English languages.

From master branch.
2020-02-17 12:26:51 +01:00
jean-pierre charras 6b78fdf822 LOCALE_IO: replace the call to setlocale by a call to wxLocale to switch to "C" locale.
Previously we call only setlocale( xx, "C" ), but it was not enough on Windows.
Now we call wxLocale("C")
wxLocale calls setlocale, but also make some others initialization in wxWidgets.
It fixes some issues related to comma versus point as fp separator.
Especially wxWidgets warnings are no longer thrown, and a one case of incorrect
conversion is fixed.
However, wxLocale( "C" ) also switches the current translations to English, so
loading files can have a slightly different behavior
2020-02-17 09:14:18 +01:00
Jon Evans 3cb326e426 ADDED: Expose GetBuildVersion and GetBuildDate to Python
(cherry picked from commit 8fb72d8290)
2020-02-15 09:59:43 -05:00
jean-pierre charras d3f9332372 Kicad manager: Avoid crash when calling configure libraries from main menu,
when _eeschema.kiface or _pcbnew.kiface is not found.
Happen mainly when running Kicad from build tree.

From master branch.
2020-02-11 16:15:19 +01:00
jean-pierre charras be0f6a6af2 Fp editor: fix: Reference and Value default values aren't saved in Footprint Editor preferences
Fixes #3889
https://gitlab.com/kicad/code/kicad/issues/3889
2020-02-11 15:48:05 +01:00
Seth Hillbrand 25aa233cef eeschema: Temporary fix for GTK printing offset
The full fix will be Cairo printing in v6

Fixes https://gitlab.com/kicad/code/kicad/issues/1907

(cherry picked from commit 134a7ba85d)
2020-02-10 09:07:21 -08:00
Jeff Young 5fdc424202 Don't report Eagle errors on the Unrouted layer.
Fixes https://gitlab.com/kicad/code/kicad/issues/3398
2020-02-05 22:20:16 +00:00
Jeff Young 9b74bb5c92 Remove preferred layer disambiguation for multiple modules.
The preferred list isn't actually in use anymore at this point, so
it currently has no effect other than to mess things up since we
aren't keeping track of which modules have been rejected when we
check the module count.

Fixes https://gitlab.com/kicad/code/kicad/issues/3721

(cherry picked from commit d02c0da3ab)
2020-02-05 22:20:16 +00:00
Jeff Young 8bf8a649c8 Adjust justified text for mirroring and rotation.
Fixes https://gitlab.com/kicad/code/kicad/issues/3737

(cherry picked from commit 2507f985ad)
2020-02-05 22:20:16 +00:00
Ian McInerney 7ba8d8b608 Revert eeschema highlighting changes
This reverts commit 366d4d7b0b.
This reverts commit 8b3c0a941c.

Fixes https://gitlab.com/kicad/code/kicad/issues/3866
2020-02-05 11:51:46 +00:00
Drew Fustini e35328fece Update copyright year in About dialog to 2020
(Cherry-picked from f359892de3)
2020-02-04 21:42:23 +00:00
Ian McInerney 366d4d7b0b eeschema: Ignore the highlight flag when responding to dbl click
Fixes https://gitlab.com/kicad/code/kicad/issues/3855
2020-02-03 21:41:03 +00:00
jean-pierre charras 3af1e75084 Gerber plots: Add initial G01 command to the header,
to ensure linear interpolation mode.
To avoid issues, an interpolation mode must be set before first D01 command.

From master branch.
2020-02-03 17:56:02 +01:00
jean-pierre charras dabd80fe4c Dxf importer: fix issue when importing some "degenerated" splines.
(From master, commit 8f3e8cf)
Sometimes a dxf curve is a "degenerated" bezier curve having only 3 points.
(a control point is at same location as a end point)
This commit fix incorrect import of these curves.

Fixes #3845
https://gitlab.com/kicad/code/kicad/issues/3845
2020-02-03 12:49:45 +01:00
Ian McInerney cb711a648f Fix layout in color dialog on GTK
Don't initially set the minimum widget size, and instead let it be
computed at launch.

Fixes #2617

(Partial cherry-pick of 4f82939384)
2020-02-02 15:40:42 +00:00
Karl Zeilhofer 5b58dbc980 Fixes dangling ends and rotation when labels/texts are converted into each other
CHANGED: Eeschema: Preserve text justification when switching text types

Closes https://gitlab.com/kicad/code/kicad/-/merge_requests/86
2020-02-01 16:08:34 +00:00
easyw 8b3c0a941c Highlight eeschema symbol on left click
CHANGED: Highlight eeschema symbol on left click

Closes https://gitlab.com/kicad/code/kicad/-/merge_requests/83
2020-02-01 16:08:19 +00:00
Seth Hillbrand 3ce29a3d7e Eeschema: Add bit that was missing from commit 7ac83ac64
This part of the check removes recursive sheets from the schematic when
loading and notifies the user that their schematic has been repaired.

(cherry picked from commit 128ec782dd)
2020-01-27 09:43:07 -08:00
Seth Hillbrand dc3c6b2f39 Check recursion before appending
We need to ensure that the appended sheet does not already exist in the
parent hierarchy.  We do this for new sheets but need to check for
existing ones as well.

Fixes #3806 | https://gitlab.com/kicad/code/kicad/issues/3806

(cherry picked from commit 7ac83ac64d)
2020-01-27 06:31:16 -08:00
Ian McInerney 1cbee4c504 gerbview: Add default filename to export to pcbnew function
Some platforms (such as Linux) don't automatically append file
extensions, so we should ensure extensions are correct and the user is
prompted accordingly.

Fixes https://gitlab.com/kicad/code/kicad/issues/3817

(Cherry-picked from 88e0ef548d)
2020-01-26 16:26:03 +00:00
qu1ck 798e4c288a Fix polygon shape move
Move vector should not affect start/end points as they are assumed to
always be 0,0. Polygon is defined by outline only.

(cherry-picked from 32674ef360)
2020-01-23 00:40:33 +00:00
Seth Hillbrand ac39e32bc9 Recognize subckt blocks in spice
Spice lines defining circuit elements are contained in a .subckt ..
.ends block.  The intervening lines should be exported to the netlist as
well as the control lines.

(cherry picked from commit d9eaff1c99f4c6664e23f8995062cf34f92dbc6c)
2020-01-17 18:58:27 -08:00
Seth Hillbrand 52da7f931b pcbnew: Check before reading/writing cache
The open/create calls can fail so we need to account for this before
using the result that assumes success.

(cherry picked from commit 88729de68553427c7f2ca2d32cad46f959b8cc3c)
2020-01-17 18:34:28 -08:00
Ian McInerney fcb6f814de Fix macos plist version string generation
Generate these resource files similar to how it is done one Linux.

Fixes mac-builder issue https://gitlab.com/kicad/packaging/kicad-mac-builder/issues/275

(Cherry-picked from 25a302758e)
2020-01-18 01:44:01 +00:00
Seth Hillbrand 9e6b56d783 PNS: Detect collisions including newline width
The new line collision search uses BBox() to check for colliding
objects.  BBox in the SHAPE_LINE_CHAIN did not include width as the
chains were assumed to be zero-width.  This is not the case for
PNS::LINE elements.

We mostly don't notice this because DRC checks for SEGMENT collisions
but it becomes obvious/annoying when we cannot place a track for unknown
reasons and the snap-back doesn't take line width into account.

Fixes #3776 | https://gitlab.com/kicad/code/kicad/issues/3776

(cherry picked from commit fe15511d38f2e6ffb293e2e708f8e3ed89c1a4d3)
2020-01-17 11:26:02 -08:00
Seth Hillbrand 923dad6ca8 PNS: Modify MarkObstacles logic to select shorter
When routing where we hit multiple obstacles, we choose the shortest
path to allow overlapping hits to choose the shorter path, thus giving a
better chance of returning true for the DRC-compliant path.

Fixes #3773 | https://gitlab.com/kicad/code/kicad/issues/3773

(cherry picked from commit 38f13ef481cd2e5cf560b921bcaabf9cdc7d00fb)
2020-01-16 19:58:19 -08:00
Ian McInerney 9f17d91b32 Fix return type in KIDIALOG
It was returned as a bool for some reason...

(Cherry-picked from 1f8611f1988f3165d49dc3039ad9b42947b57f01)
2020-01-15 18:30:24 +00:00
Mark Roszko 2bcb04a3b1 KIDIALOG should ignore "cancel" for the do not show again option.
CHANGED: Do not remember "do not show again" when cancel button is pressed

Fix #3734

(Cherry-picked from 3ae784d97fb50bc70cc49e27b9f424958e583257)
2020-01-15 18:26:20 +00:00
Ian McInerney a530b600b8 Smoothen rotation in 3D viewer when crossing the 0-2pi line
Rotating to 0 when above pi would result in the board spinning back
through pi to get there. This led to jarring motion.

Also fix an issue added in b6f64815 where the board would rotate
2pi when crossing over the 0-2pi boundary.

(Cherry-pick of 4fc9b4e5ab63fa192ec2a7d40574f614b318668c)
2020-01-15 18:10:46 +00:00
jean-pierre charras d494a2bee2 3D viewer: normalize rotation angles between -2_PI and 2_PI.
Fixes #3761
https://gitlab.com/kicad/code/kicad/issues/3761

(Cherry-pick of b6f64815f4)
2020-01-15 16:30:41 +00:00
Ian McInerney 6a027662ae Update Linux appdata file and CMake version strings
CHANGED: Update the Linux appdata file to include new tags

* Include version tags (and others) in the appdata file
* Refactor the version string generation to clean it up

Cherry-pick of:
3370e89967
e54c954aed
2020-01-15 16:23:22 +00:00
Ian McInerney 577bb7bf31 Update AUTHORS.txt with changes from master branch
Cherry-pick of:
8fcd59ebda
037e6bc006
0857a1f5dc
07c6cfdc38

Closes !64
2020-01-15 16:17:19 +00:00
Ian McInerney df664bd55f Don't tie generic validators to a specific field
(Partial cherry-pick of 15cd13ba6e)

Fixes #3667
2020-01-15 16:12:39 +00:00
Seth Hillbrand 8a2705f81f PNS: Assume the current line is a base before optimizing
We use the cost of the current line before trying to improve the pad
breakout cost when optimizing the smart pads

Fixes #3759 | https://gitlab.com/kicad/code/kicad/issues/3759

(cherry picked from commit 52bfdb9703)
2020-01-12 11:13:19 -08:00
Seth Hillbrand fcaf11422a Fix bitmap clipping
When printing (using DC context) the bitmap will clear the full screen
unless the clipping region is set to the image itself.

Addresses KSC ticket 126

Fixes #1877 | https://gitlab.com/kicad/code/kicad/issues/1877

(cherry picked from commit 195c3d074b)
2020-01-11 10:00:57 -08:00
Seth Hillbrand 3444409554 pcbnew: Fix polygon comparison () for end
This is a v5-only fix incorporating 2c5876e and 72da237 into the 5
branch to resolve a crash when parsing invalid polygons.

Fixes #3752 | https://gitlab.com/kicad/code/kicad/issues/3752
2020-01-09 17:15:48 -08:00
jean-pierre charras 683c01b301 SVG plotter: fix an issue with mirrored texts. Mirrored texts have a size < 0. Of course, the actual value for the plotter is the absolute value. 2020-01-09 18:24:15 +01:00
jean-pierre charras e2492f773d FILENAME_RESOLVER: fix missing conversion from UTF8 to wide chars.
Fixes #3742
https://gitlab.com/kicad/code/kicad/issues/3742
2020-01-08 10:47:14 +01:00
Ian McInerney 1f3a2dcd1d Fix cherry-pick error
Fixes https://gitlab.com/kicad/code/kicad/issues/3744
2020-01-08 09:41:01 +00:00
Mario Luzeiro 4205cb32c5 3d-viewer, make ortho projection zoom similar as prespective projection
Fixes #1843
Fixes reload of Raytracing when the projection button is pressed.

(cherry picked from commit 2c00540ad6)
2020-01-06 19:33:00 -08:00
Mario Luzeiro 6ab9bdb346 3d-viewer, ray-tracing, do not add coincident segments
Fixes #1946 (lp 1852970)

(cherry picked from commit 518c1df81b)
2020-01-06 13:56:25 -05:00
Mario Luzeiro a4aec1919c 3D-viewer: raytracing, implement multiple shape board.
Fixes #1879 (lp:1820099)
Fixes #2126 (lp:1764039)

(cherry picked from commit 37c3e34486)
2020-01-06 13:55:31 -05:00
Jon Evans 5b97d70d57 Use existing pcb filename for Save As where possible 2020-01-06 10:33:00 -05:00
Ian McInerney eeeb4596c3 Properly escape spaces when opening PDFs on windows
Fixes https://gitlab.com/kicad/code/kicad/issues/2625

(cherry-picked from 20e7fc8a0e)
2020-01-03 19:09:04 +00:00
jean-pierre charras 23853cae14 Try to fix SEG::PointCloserThan(), not working for quasi H or V segments.
Quasi H or V segments are segments having the same x value or y value
(with a + or -1 max diff) for end points coordinates.
The change is a workaround, not really a fix.

Fixes #3711
https://gitlab.com/kicad/code/kicad/issues/3711
2019-12-31 15:59:45 +01:00
jean-pierre charras 87f6f33b37 fix a minor wxWidgets alert. 2019-12-27 20:03:02 +01:00
jean-pierre charras 8c03d1bdde Gerber files: update unicode coding to the 2019 06 Gerber specifications.
In gbr files, not allowed chars are coded using a 16 bit (4 hexa digits)
unicode sequence.
Previously, it was \XXXX and now is \uXXXX escape sequence.

Changes from master branch.
2019-12-27 20:03:01 +01:00
Wayne Stambaugh 7f1c7d808d Eeschema: fix sheet file name case sensitivity test.
Fix overzealous test if the new file name is the same as an existing
file name.

Fix a potential comparison bug due to missing file extension.

(cherry picked from commit b66ecf141f)
2019-12-27 12:08:13 -05:00
Wayne Stambaugh be12aece5b Eeschema: fix sheet file name case sensitivity bug.
Apparently there are some issues with wxString::CmpNoCase() that was
causing the sheet file name case sensitivity test to incorrectly fail.
Converting the name strings to lower case before comparing resolved
the issue.

(cherry picked from commit 773f45aae3)
2019-12-27 12:07:15 -05:00
Wayne Stambaugh d7605f1449 Eeschema: fix multiple sheet file name bugs.
Add missing check for root sheet when searching sheet hierarchies for
already loaded schematics.  This prevents the root sheet from being
omitted when adding new sheets using the root sheet file name.

CHANGED: Make file name tests case sensitive so that schematic sheet
file names on non-Windows systems can be uses as expected.

Warn users when attempting to use schematic file names that only vary
by case sensitivity that doing so will result in a project that is not
portable to Windows.

Fixes lp:1843415

https://bugs.launchpad.net/kicad/+bug/1843415
(cherry picked from commit d4cea0f2b7)
2019-12-27 12:05:59 -05:00
Jon Evans ef80642dec LSET: Prevent assertion in MSW when size is not a multiple of 4
(cherry picked from commit 2ea565473f)
2019-12-26 10:01:44 -05:00
Jon Evans a5622c93d4 Don't try to write fp-info-cache to a read-only directory
Fixes #1890

(cherry picked from commit 80fb3bde56)
2019-12-25 18:48:21 -05:00
Ian McInerney b6f9bfe9a5 pcbnew: Fix cmake to work with no wxPython on macOS
(cherry-picked from bf5dba847c)
2019-12-25 23:23:31 +00:00
Ian McInerney 79954657e2 eeschema: Fix return ID check in annotate dialog
Fixes https://gitlab.com/kicad/code/kicad/issues/3708

(cherry-picked from e6e2cf47fd)
2019-12-25 23:18:31 +00:00
Mark Roszko 35d3f1f72a common: Remove out of bounds and erroenous array access
(cherry-picked from bf32122134)
2019-12-19 11:35:21 +00:00
jean-pierre charras 388d74faf4 Pcbnew: graphic polygon: display the points count, instead of length,
and coordinate origin.
Previously, the meaningless length (always 0) and begin and end (@0,0)
coordinates were always displayed.

From master branch.
2019-12-18 13:21:35 +01:00
jean-pierre charras 0f8747e194 Gerber plotter: modify G02 and G03 commands.
They are now in a specific block and no longer combined with an other
command.
(combining these commands with an other command (D01 or D02) is deprecated)

Fixes #3677 | https://gitlab.com/kicad/code/kicad/issues/3677
2019-12-18 12:30:28 +01:00
Ian McInerney 93f16ba9e3 Update about dialog link to GitLab
(cherry-picked from c31c99abd1)

Fixes #3687
2019-12-17 20:21:59 +00:00
jean-pierre charras bea2d42e8c Gerbview,export to pcbnew: avoid exporting not valid polygons.
Gerber regions are exported as polygons (they are filled polygon).
The fix ensure the polygons are simple and valid.
Invalid polygons crash Pcbnew.

From master branch, commit 25504319.
2019-12-15 14:24:11 +01:00
jean-pierre charras 68d644fd28 P&S router: length tuning tool: fix a crash after trying to tune a track.
It happens on Windows, and wxWidgets 3.1.3. It is created by
PNS_TUNE_STATUS_POPUP instance used in tool. I am pretty sure this crash is
created by the stack switching when managing events, due to some changes in
wxWidgets code.
The fix creates the instance on the heap, instead of on the stack.
This is not the first time I see this kind of issue.

From master, commit 21dd8db
2019-12-12 10:26:27 +01:00
jean-pierre charras f6e33450ff Gerber object attribute: avoid trying to guess if a SMD pad is a BGA pad.
Previously, if a SMD pad was round, itb was seen as BGA pad.
But this is not always true. so use always SMD PAD attribute,
until an explicit BGA pad attribute is added in Pcbnew
2019-12-11 08:55:44 +01:00
Seth Hillbrand 65008c5c0b Eeschema: Check twice before using GAL
The windows display may through an error which we need to catch when
starting GAL under windows.  This is a reimplementation of
e39586e15 which cannot be cherry-picked into v5

Fixes #2620 | https://gitlab.com/kicad/code/kicad/issues/2620
2019-12-10 16:01:59 -08:00
Seth Hillbrand dbfaf568fc Plot SVG embedded
ADDED: embedded image support for SVG files

Fixes #3643 | https://gitlab.com/kicad/code/kicad/issues/3643

(cherry picked from commit fa133f3f5c)
2019-12-08 08:59:01 -08:00
Fabien Corona 58fd6ac03e PCBnew: placing a blind/buried via sometimes incorrectly place a through via.
From master branch commit 36fba5bd7f
2019-12-08 13:31:21 +01:00
Seth Hillbrand 1e64524afb PNS: Allow snap to temp hidden
The IFACE for kicad refers to the board hidden state, not the
temporarily hidden state used by the router.  We allow snapping to items
that have been removed by the temporary router state to provide snapping
to original track location.

Fixes #1827 | https://gitlab.com/kicad/code/kicad/issues/1827
2019-12-07 09:49:59 -08:00
Seth Hillbrand 20a5d8effd pcbnew: Handle intermediate pad on route
The length calculation wanted to find start/end pads but this was
complicated for paths that had a via on the intermediate pad.  Instead
of warning, we calculate the longest path of the three possibilities

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

Fixes #2554 | https://gitlab.com/kicad/code/kicad/issues/2554
2019-12-04 13:46:09 -08:00
jean-pierre charras 8c7e0bcb0a DIALOG_DRC_CONTROL: fix a crash on wxWidgets 3.1.3
Happens when right clicking on an item in displayed lists.
The crash was due to a bug in wxWidgets, and the fix is only a workaround

From commit 5cd7f3fd in master branch.

Also remove duplicate code.
2019-12-03 09:47:42 +01:00
Jeff Young c69080f11e Fix some issues with the previous commit. 2019-12-02 23:33:45 +00:00
Jeff Young 5a48c800ee Make sure that libraries are always sorted consistently.
Fixes #1847481 | https://gitlab.com/kicad/code/kicad/issues/1847481
2019-12-02 21:55:31 +00:00
Jeff Young c6eff4d373 Update local coords when editing EDGE_MODULEs.
Fixes: lp:1853726
* https://bugs.launchpad.net/kicad/+bug/1853726
2019-12-02 20:01:11 +00:00
Seth Hillbrand 5c056c2a3e Fix compile error for old compilers 2019-12-02 09:19:13 -08:00
M.Scholz 61f593f350 Corrects IsDirWritable check
The check for IsDirWritable needs to reference the absolute path to
return correct values.

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

(cherry picked from commit dbb9b5f64f)
2019-11-21 17:25:48 -08:00
jean-pierre charras 6cc7dc7aaa Pcbnew: fix crash on Linux (when opening Edit Spice model in component properties)
It happens when the spice library model shown in dialog is a large file.
Looks like the wxTextCtrl used to displays the library content
creates the crash ( GKT bug?) for large texts.

The fix is to replace this wxTextCtrlt by a wxStyledTextCtrl.
It has advantages (does not crash... and much faster display) and
inconvenients (cannot disable editing).

Fixes: lp:1853161
https://bugs.launchpad.net/kicad/+bug/1853161
2019-11-21 13:15:14 +01:00
jean-pierre charras 239f040a98 Fix minor wxWidgets alert (wxWidgets 3.1.3) 2019-11-20 18:29:11 +01:00
jean-pierre charras 3827c16fde Fix a wxWidgets alert 2019-11-20 10:02:09 +01:00
Fabien Corona e299343807 Pad ratsnest settings initial value
Pad ratsnest settings set to global settings during initilization.

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

(cherry picked from commit 29ce76b4e4)
(slightly modified due to settings structure difference between
master and 5.1)
2019-11-18 22:34:21 +00:00
Fabien Corona 4130ce2b93 Ratsnest default value for tracks and vias
Fixes: lp:1851611
* https://bugs.launchpad.net/kicad/+bug/1851611

(cherry picked from commit 6182133a4e)
(slightly modified due to differences between master and 5.1)
2019-11-18 22:23:00 +00:00
Seth Hillbrand d6acb64514 CMake: Fix OCE/OCC swap
unset() needs to remove the cached variable to get rid of the implicit
version

(cherry picked from commit 365f9224e7)
2019-11-18 21:20:10 +00:00
jean-pierre charras 8e233e2591 Fix compil issue due to a small incompatibility from cherry-picked code. 2019-11-18 09:13:04 +01:00
jean-pierre charras 9cda16220e Gerbview: add parsing of optional Aperture Macro parameter. AMP_CIRCLE primitive has 4 or 5 parameters (last is optional) Reading the optional parameter was missing.
Fixes: lp:1852924
https://bugs.launchpad.net/kicad/+bug/1852924
2019-11-18 09:07:32 +01:00
jean-pierre charras 36acadbd52 DIALOG_PAD_PROPERTIES: fix incorrect pad type for Aperture option.
The aperture option created a Connector pad only on the paste layer.
This is incorrect: the SMD type only is acceptable.
Connector is *only* for edge card connectors.
Moreover, The dialog did not even accept the setting defined by this dialog...
2019-11-17 18:28:08 +01:00
jean-pierre charras 37b6552c42 FIX: add parameter to GAL::DrawCurve to control the curve to polyline
conversion.
Cairo supports curves, but not Opengl, that needs a conversion to polyline.
This control allows optimization in conversion
2019-11-17 18:22:13 +01:00
jean-pierre charras 1903052d79 Bezier curves: replace previous algorithm to convert the curve to segments.
In some cases it was not working well.
Opengl was using an other algo (using the curve properties to create segments)
Now only the OpenGL algo is used,
with optimization to reduce the number of segments.
2019-11-17 18:22:13 +01:00
jean-pierre charras 2b4cfd9a60 Footprint wizard frame: rebuild the parameter grid list after any parameter change. The python footprint wizard can modify other parameters than the one that was changed by user. So the parameter grid list must be updated after every parameter change.
Fixes: lp:1846404
https://bugs.launchpad.net/kicad/+bug/1846404
2019-11-17 18:22:13 +01:00
Fabien Corona decbb65f09 High contrast color for holes in microvias and buried bias
In high contrast mode, the holes of buried vias and microvias were no darkened when not on the active layer.
In high contrast mode, the outer circle of buried vias and microvias were alway darkened.

In high contrast mode, when the selected layer is non visible through-vias are now darkend.

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

(cherry picked from commit 04edc6ceff)
2019-11-15 12:02:47 -08:00
Seth Hillbrand 8e2ca37edc pcbnew: Prevent extra selection
We want to avoid selecting items that are disabled in the item list.
Our standard method is in the GetViewLOD() that performs both size and
visibility.  This extends the check to module text and via.

Fixes: lp:1851133
* https://bugs.launchpad.net/kicad/+bug/1851133
2019-11-14 09:50:39 -08:00
Wayne Stambaugh 8fb6bcc8b1 Begin version 5.1.6 development. 2019-11-14 12:14:16 -05:00
Wayne Stambaugh 2f36c670ff Tag release version 5.1.5. 2019-11-14 12:09:45 -05:00
jean-pierre charras d701c3a480 Gerber plot: fix a minor issue: TF attribute "Drawing" is now "OtherDrawing,Comment" This is due some changes in recent Gerber file format. 2019-11-05 20:15:00 +01:00
jean-pierre charras cd7f3375b2 Add missing code to plot Bezier curves (EDGE_MODULE shape) in footprints 2019-11-05 20:14:48 +01:00
jean-pierre charras 46cd185524 Fix incorrect HitTest in DRAWSEGMENT (bezier curve) 2019-11-05 16:21:45 +01:00
jean-pierre charras e04d82e940 Gerber plot: minor fixes in TO object attributes.
Gerbview: remove a outdated warning about RS274D format.
2019-11-05 14:25:30 +01:00
jean-pierre charras 26d0863921 minor fix in a python script (kicad_netlist_reader.py) Sort lists was incorrectly made. 2019-11-05 14:25:30 +01:00
Jeff Young 37f23fa537 When copying an item it's no longer at the original location and so can't be "locked".
Fixes: lp:1851038
* https://bugs.launchpad.net/kicad/+bug/1851038
2019-11-03 17:43:36 +00:00
Seth Hillbrand 167d408b5e qrcode: Handle Python3 integer promotion
In Python3, all division operators promote integers to floats.  We need
to downcast back to integer for the polygon vertices.

There was also an unhandled overflow in the QR generation that allowed
more than 512 bits to be loaded.  This overflows the type of QR we
generate, so this truncates the input string to 62 bytes ( leaving 12
bits for the checksum )

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

(cherry picked from commit 9bccbaf497)
2019-11-01 14:57:07 -07:00
Jeff Young d4a8ff4872 Backported edit point colour fix from master.
Fixes: lp:1846372
* https://bugs.launchpad.net/kicad/+bug/1846372
2019-10-31 23:35:23 +00:00
jean-pierre charras fb9b12a982 Footprint editor: fix a crash when trying to edit the properties of a footprint not yet in tree (i.e. imported from file)
(cherry picked from commit cee1873fff)

Fixes: lp:1850497
* https://bugs.launchpad.net/kicad/+bug/1850497
2019-10-29 13:13:54 -07:00
Wayne Stambaugh 88a03f1a1d Begin version 5.1.5-rc2 development. 2019-10-25 14:31:02 -04:00
Wayne Stambaugh ba7e400e13 Tag release version 5.1.5-rc1. 2019-10-25 14:24:51 -04:00
Seth Hillbrand 57f0f88552 pcbnew: Treat circular ovals as circles
The oval clearance adds an edge on the 0-length side of a circular oval.
This is not needed and can affect the fill algorithm.  Instead, we treat
round ovals as circles for pad polygons

Fixes: lp:1849846
* https://bugs.launchpad.net/kicad/+bug/1849846
2019-10-25 09:28:09 -07:00
jean-pierre charras 42a0cf6283 PCB_BASE_FRAME::SelectFootprintFromLibTree(): fix annoying issue: the progress reporter was displayed after loading libraries, because it was destroyed too late. 2019-10-25 18:08:02 +02:00
Seth Hillbrand b67acd5ea1 pcbnew: Fix 45° snapping polygons
The constrained draw was constraining the polygon size to fit the
existing points rather than extending the existing points to fit the
user's intent.

This adds a 90° double-joint for the completion polygon that allows the
user to complete common constrained polygons visually based on the
preview with a double-click to finish.

(cherry picked from commit bae50fab9f)

Fixes: lp:1849299
* https://bugs.launchpad.net/kicad/+bug/1849299
2019-10-24 16:05:27 -07:00
Seth Hillbrand 5e2721d2f5 Increase visibility of polygon preview
This set the polygon preview item to wider size and adjusts the draw
order to ensure it remains visible even when antialiasing

(cherry picked from commit ea1c8525ce)
2019-10-24 16:05:12 -07:00
jean-pierre charras 2cd43aee0a Gerber output: fix some (minor) issues related to attributes when plotting polygonal pads.
rect (when not horizontal or vertical), trapezoid and custom shapes are draw as polygons.

The dummy pad used to give attributes is removed, and TO attributes are used in Regions (polygons in Gerber dialect)

This is due to some modifications in Gerber format since the attributes are added in Kicad.
2019-10-24 09:32:40 +02:00
jean-pierre charras fb1570d290 DIALOG_POSITION_RELATIVE_BASE: fix wxWidget alerts 2019-10-23 20:41:00 +02:00
Seth Hillbrand 79972ad4db pcbnew: Fix DXF Import with blocks
BLOCK elements in DXF are re-usable bits that are useful when editing
the file but should not be shown when importing the model.  This skips
all references except those that exist in the default "*Model_Space".
This block is required in each DXF file and cannot be renamed.

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

(cherry picked from commit df3fabfa21)
2019-10-23 11:31:43 -07:00
Ian McInerney 61934c285c pcbnew: Fix deletion of vias in global delete window
Fixes: lp:1847580
* https://bugs.launchpad.net/kicad/+bug/1847580

(cherry picked from commit 3b1817ee32)
2019-10-23 12:25:00 -04:00
Seth Hillbrand a7d554971c eeschema: Pad spice ops to differentiate
The .op command is isolated, so differentiating from .option with a
space will only work if we ensure all commandlines have a space at their
end.

(cherry picked from commit 4004c733c8)
2019-10-23 06:33:10 -07:00
jean-pierre charras e54ea90607 PROGRESS_REPORTER: fix serious bug in its DTOR: the DTOR was calling Destroy. But Destroy() in wxWidgets calls the DTOR.
It can create recursive calls of the DTOR.
2019-10-23 11:29:44 +02:00
jean-pierre charras fda403a079 Fix potential issue 2019-10-21 08:26:22 +02:00
Sylwester Kocjan f2e75c96be eeschema: fixed recognizing SPICE sim directive
(cherry picked from commit 1c01cc001d)
2019-10-20 12:11:38 -07:00
Seth Hillbrand 322eb2b8a8 pcbnew: Commit polygon points to new constrained zone
Adds leader points if they are not already existing in the zone

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

(cherry picked from commit 2e1af66a2b)
2019-10-20 10:31:08 -07:00
Seth Hillbrand 6f71183d0e Revert "kicad2step: scale models"
This reverts commit 5064df4ba2.

There were un-addressed issues with the VRML substitution and concerns
by MCAD folks that ECAD designers should not be allowed to perform this
action.  Full addressing in v6.
2019-10-20 10:06:43 -07:00
Seth Hillbrand 5d852cf6ae pcbnew: Don't limit editing of the polygons
45 deg contraints are not saved per polygon, so don't limit per polygon.
The constraint is only enforced during creation.

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

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

(cherry picked from commit 8f1c1cf298)
2019-10-20 09:31:26 -07:00
Seth Hillbrand 2d1ea1618b pcbnew: prevent assert with first pt
Finding the pt-to-end intersection requires a segment, so check for
multiple points.

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

(cherry picked from commit 70c64d93e4)
2019-10-20 07:41:48 -07:00
Seth Hillbrand 50723d07a6 GAL: Use vector for stroke elements
deque structures have higher overhead than vectors.  Not usually
problematic, but with hundreds of thousands of characters each with only
a few strokes, the overhead becomes dominant.

(cherry picked from commit 6084614371)
2019-10-19 07:28:25 -07:00
Seth Hillbrand 1161562bc8 Remove Yahoo Groups link
Yahoo has discontinued its groups.

See https://help.yahoo.com/kb/groups/SLN31010.html
2019-10-17 15:59:06 -07:00
Seth Hillbrand 0c8b3aaced eeschema: Don't warp before processing right-click
The logic handling the two bug reports attached to this code is now
higher up in the chain.  As it stood, warping before right-click meant
that we cannot affect any point on the wire that is not an endpoint.
2019-10-17 13:49:49 -07:00
Seth Hillbrand b81b7decf6 eeschema: Add junction when breaking overlapping wires
This is the v5 version of 363281dd4.

Fixes: lp:1848450
* https://bugs.launchpad.net/kicad/+bug/1848450
2019-10-17 13:32:14 -07:00
Seth Hillbrand e5463330ef view: Check for viewData in IsVisible()
viewData can be NULL, make sure we verify it before dereferencing.

(cherry picked from commit 5b8661f2ab)
2019-10-15 09:46:47 -07:00
Seth Hillbrand 17c0b3e460 pcbnew: Check all layers for routing snaps
Flipped footprint pads may report their "primary" layer as not the front
layer in high contrast.  We need to check whether the board item for
snaps is visible on the active layers.

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

(cherry picked from commit 07c8596084)
2019-10-15 09:46:39 -07:00
jean-pierre charras 3bc3193805 Fix typo 2019-10-15 17:50:40 +02:00
jean-pierre charras d6db6dedca Gerber file export: avoid duplicate corner when creating polygons (regions in Gerber dialect)
Fixes: lp:1847714
https://bugs.launchpad.net/kicad/+bug/1847714
2019-10-11 21:01:40 +02:00
Seth Hillbrand d931bc72c7 pcbnew: Snap during routing needs active parent
The router items may not yet have a board item parent.  In this case,
the reference to the parent needs to be guarded before dereferencing.

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

(cherry picked from commit 0f8a1c22ad)
2019-10-11 09:16:58 -07:00
jean-pierre charras 6506f77689 Gencad export: fix an issue in hash_eda calculation,
that can generate the same hash for 2 different footprints.
Therefore, for some footprints, the right footprint was not associated to the component.
The hash calculation was using a XOR to combine 2 sub hash values.
This is not a reliable way to combine these hash values.
They are now added.
Looks better to identify similar and different footprints.

Fixes: lp:1847575
https://bugs.launchpad.net/kicad/+bug/1847575
2019-10-10 20:20:45 +02:00
Seth Hillbrand 0d64b38dbc pcbnew: Remove snapping to hidden items
Items and layers that are hidden in the view should not be used as snap
points.  This happens in multiple locations:
1) Grid Helper for normal tools
2) TOOL_BASE::snapToItem for router

Resolves KiPro Issue #116

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

(cherry picked from commit cecfeea947)
2019-10-10 09:47:34 -07:00
jean-pierre charras 7856061cf0 Fix a few wxWidget asserts related to not existing block operations from mouse drag command.
block rotate and block mirror are not implemented in HandleBlockPlace.
(only available from context menu)

Fixes: lp:1847554
https://bugs.launchpad.net/kicad/+bug/1847554
2019-10-10 10:07:15 +02:00
jean-pierre charras 0210e414d2 Fp editor, DIALOG_FOOTPRINT_FP_EDITOR: fix a very annoying issue: the value field was copuled to the fp name. Unlike schematic symbols, the value field and the footprint name are 2 different fields. So coupling these fields in the DIALOG_FOOTPRINT_FP_EDITOR dialog created serious issues.
Fixes: lp:1846533
https://bugs.launchpad.net/kicad/+bug/1846533
2019-10-09 18:58:23 +02:00
jean-pierre charras 41231e8ae2 Gerber file generation: fix incorrect aperFunction attribute for graphic items on edge cut layer.
Was NonConductor. Must be Profile.
From master branch.
2019-10-09 16:02:45 +02:00
jean-pierre charras ba2e34682e Gerbview: enhancement: show attributes for polygons (Regions in Gerber dialect) that have no DCode
This change is needed to follow current specifications in Gerber X2
2019-10-08 10:25:25 +02:00
jean-pierre charras b234ff9234 Eeschema: fix issues with pin shapes related to clock input pin shapes.
Fixes from master, commit eaea03217:
* Fix not drawn shapes for clock low, inverted clock and broken shape for falling edge clock
* Especially, shape for falling edge clock was a not existing shape, therefore useless.
* now falling edge clock and clock low shape are similar.
2019-10-08 10:11:56 +02:00
Ian McInerney 3442cc3d1a pcbnew: Don't reset router settings when breaking a track
Calling Init() in an action routine will reset the router
settings to the state they were in when first starting pcbnew.
The Init() function is automatically called when the tool is created.

Fixes: lp:1843810
* https://bugs.launchpad.net/kicad/+bug/1843810
2019-10-07 16:10:22 -04:00
Ian McInerney e618e34c94 pcbnew: Clean up extension handling in graphics plugins
* Fix wildcard display in the file selector dialog (on GTK
  it would show the regex to the user)
* Move the file extension comparison into a common function

(cherry picked from commit b33c3a5ad8)
2019-10-04 16:01:15 -04:00
Adam Wolf 105c3b0a4c Add additional ngspice codemodel path for launching from standalone eeschema on macOS.
(cherry picked from commit c7c49cee5a)
2019-10-04 14:33:23 -04:00
Ian McInerney 69d0446019 Update pleditor path for run from build directory
(cherry picked from commit 3a2dbf7786)
2019-10-04 07:58:17 -04:00
jean-pierre charras 078045f73b Gerbview: fix incorrect canvas type saving after closing Gerbview.
Was due to the fact the canvas type was now saved into m_canvasType when opening Gerbview.
2019-10-02 18:30:36 +02:00
jean-pierre charras 78af1daa2e Fix an issue in DIALOG_NETLIST: if the netlist filename does not exist, one cannot always modify the entered name.
(from master branch)
2019-09-30 19:43:25 +02:00
jean-pierre charras 0bd0d57a81 Cairo print, on GTK: use a better DPI definition to avoid artifacts rendering (GTK specific) Previously, a 600 DPI was used to set device scale (can create minor visible rounding issues). Using now 4800 DPI to reduce these rounding artifacts.
Fixes: lp:1845229
https://bugs.launchpad.net/kicad/+bug/1845229
2019-09-27 11:17:58 +02:00
jean-pierre charras 9dd5b6ce37 simulator: plot curves: fix incorrect draw area limits calculation when zooming.
Fixes: lp:1674132
https://bugs.launchpad.net/kicad/+bug/1674132
2019-09-26 16:30:28 +02:00
Seth Hillbrand d862cdaa72 pcbnew: properly close tags when handling bad poly
The parenthesis depth is 2 when the polygon isn't closed.  This
shouldn't happen but we have the fall-through to handle odd cases

Fixes: lp:1844872
* https://bugs.launchpad.net/kicad/+bug/1844872
2019-09-21 09:25:16 -07:00
Seth Hillbrand 4f57de9688 connectivity: Use pad anchor for connections
The pad should use its anchor point rather than the geometrical center
of the pad for connections.
2019-09-19 13:25:26 -07:00
Seth Hillbrand 92b6e05909 connectivity: Check all anchors for connection
With pads, we should check available anchor points for each connection,
increasing probability of finding connection to match fill algorithm

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

(cherry picked from commit b7128639f8)
2019-09-19 12:46:03 -07:00
Ian McInerney 2bd0bae2f7 Remove unneeded wxWidgets version checks in the code
Now that the minimum version is 3.0.0, we don't need to actually
check if the version is greater than 3.0.0 inside the code.

(cherry picked from commit a37d8f2859)
2019-09-18 14:27:30 -04:00
Wayne Stambaugh 69b5d24f28 Eeschema: do not save legacy symbol libraries in schematic file.
Fixes lp:1843473

https://bugs.launchpad.net/kicad/+bug/1843473
(cherry picked from commit 7cf42bb308)
2019-09-18 14:24:20 -04:00
Wayne Stambaugh e5dcb9d9da Eeschema: improve error message when writing cache library.
Remove duplicate missing symbol names from the extended error message.

Fixes lp:1842452

https://bugs.launchpad.net/kicad/+bug/1842452
(cherry picked from commit 18667377f7)
2019-09-13 15:58:37 -04:00
jean-pierre charras 4db8638f7e PANEL_SETUP_NETCLASSES: fix not working (immediately closed) wxChoice widgets to select a filter This happens with wxWidgets 3.0.4 on Windows and is a side effect of a call to Layout(). The fix just calls Layout() only when needed.
Fixes: lp:1843594
https://bugs.launchpad.net/kicad/+bug/1843594
2019-09-13 11:53:03 +02:00
Jeff Young cec885daf9 Partial cherry-pick of f1790c24e5.
Fixes: lp:1842199
* https://bugs.launchpad.net/kicad/+bug/1842199
2019-09-12 22:15:36 +01:00
Michal Jahelka 90fbf27114 c3d_render_ogl_legacy.cpp: initialize m_Emissive member of SMATERIAL to be sure it is set to 0, 0, 0 2019-09-10 17:46:35 +02:00
Jeff Young f1436cec9b Restore PointCloserThan() behaviour to really be "closer than".
Change calls which really want it to be "closer than or equal" to
distance + 1.

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

(cherry picked from commit 25fa2131d2)
2019-09-10 12:57:52 +01:00
Jeff Young cf968cb6b5 Performance enhancement. 2019-09-09 23:22:29 +01:00
Jeff Young 2278f40051 Fix zero failure in SEG::PointCloserThan().
Fixes: lp:1843329
* https://bugs.launchpad.net/kicad/+bug/1843329
2019-09-09 23:22:29 +01:00
Ian McInerney 18a76d3a87 Manually put the UNIT_BINDER text on the primary selection clipboard
The OnKillFocus handler of the UNIT_BINDER replaces the text in the
control with the evaluated string, which removes the selection. To
get the original text on the primary selection clipboard, we must
add it ourselves.

Fixes: lp:1794623
* https://bugs.launchpad.net/kicad/+bug/1794623
2019-09-09 09:02:23 -07:00
Jeff Young 6a65461ec7 Replace buggy code in TestSegmentHit() with call to SEG::PointCloserThan()
Fixes: lp:1843101
* https://bugs.launchpad.net/kicad/+bug/1843101

(cherry picked from commit 6f0d8c3eac)
2019-09-08 12:40:33 +01:00
Jeff Young a5a0a7c4f3 Fix bug with high-frequency plots.
Fixes: lp:1839712
* https://bugs.launchpad.net/kicad/+bug/1839712

(cherry picked from commit 2ac270ce8e)
2019-09-08 01:12:33 +01:00
Jeff Young f1e6f8042c Check for dup layer names in the GUI, not in the internals.
Doing so in the internals keeps users from being able to swap layer
names as the dialog does each layer name change individually.

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

(cherry picked from commit f491b7fff7)
2019-09-07 23:57:49 +01:00
Jeff Young 848873d87e Add some protection against newlines sneaking into the file.
Fixes: lp:1842943
* https://bugs.launchpad.net/kicad/+bug/1842943
2019-09-07 02:32:56 +01:00
Jeff Young 75bb864237 Workaround wxWidgets inability to find the default PDF viewer.
Fixes: lp:1843061
* https://bugs.launchpad.net/kicad/+bug/1843061

(cherry picked from commit d55f4d05b4)
2019-09-07 00:07:06 +01:00
Ian McInerney d5275b16aa eeschema: Find the closest line end to the mouse when grabbing
Fixes: lp:1842175
* https://bugs.launchpad.net/kicad/+bug/1842175
2019-09-06 14:16:56 -07:00
Seth Hillbrand 15d1b6cef0 eeschema: Handle broken spin style value
The spin style is stored as a numeric and can be corrupted.  We handle
this by triggering assertions for debugging the bad value while
resetting to default if we have non-valid spin values that are outside
the array.

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

(cherry picked from commit c3226653cc)
2019-09-06 13:18:34 -07:00
Wayne Stambaugh 6d4dd3e17a Pcbnew: fix size of graphics import warning dialog.
Use the HTML_MESSAGE_BOX window to present the warning messages rather
than wxMessageBox which would overflow the display when there were a lot
of graphic items that could not be parsed.

Fixes lp:1839565

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

(cherry picked from commit 24454f5105)
2019-09-06 14:59:40 -04:00
Ian McInerney 649c22a34e wxWidgets compatibility fixes
* Remove unneeded check
* Fix WX_GRID since upstream renamed a variable in 3.1.3

(cherry picked from commit 8d86d94a4d)
2019-09-06 08:48:03 -04:00
Jeff Young 8d04d39036 Cherry-pick of https://git.launchpad.net/kicad/patch/?id=c03535343c67c17ddf0ac18621743d9cf762eb05
Fixes: lp:1842652
* https://bugs.launchpad.net/kicad/+bug/1842652
2019-09-04 20:08:39 +01:00
Jeff Young 0e90c719b0 Update description in footprint tree when it's edited.
Fixes: lp:1842660
* https://bugs.launchpad.net/kicad/+bug/1842660

(cherry picked from commit 6688e80131)
2019-09-04 17:24:17 +01:00
jean-pierre charras a79526cad8 Footprint viewers: force cairo canvas instead of legacy canvas when the legacy canvas is selected in the board editor.
Legacy canvas does not work in footprint preview panel and does not work fine in footprint viewer frame.

Fixes: lp:1842483
https://bugs.launchpad.net/kicad/+bug/1842483
2019-09-04 16:00:54 +02:00
jean-pierre charras d05d8b6100 Pcbnew: Fix incorrect canvas type saved in config, when the type is legacy canvas. 2019-09-04 11:22:55 +02:00
Jeff Young 9856867954 Correct tooltip for Footprint Filter icon on Cvpcb toolbar.
Fixes: lp:1842477
* https://bugs.launchpad.net/kicad/+bug/1842477
2019-09-03 19:46:39 +01:00
Ian McInerney 19064b680e Make the extension check for graphics import case insensitive
The regex for the file extension that matches against all case
possibilities is only built on Linux.

Fixes: lp:1842180
* https://bugs.launchpad.net/kicad/+bug/1842180
2019-09-02 10:03:39 +02:00
jean-pierre charras 95265c765b Pcbnew, DIALOG_TEXT_PROPERTIES: make lines thickness editable when editing a dimension.
From Master branch (commit 762dabd7)

Fixes: lp:1841797
https://bugs.launchpad.net/kicad/+bug/1841797
2019-09-02 10:03:39 +02:00
Jeff Young 1ed8912f57 Workaround an issue where a throw terminates (even when there's a catch for it).
You can trigger it before this fix by running Cvpcb when a .kicad_mod file is
incorrectly set as "Legacy" in your footprint table.

(cherry picked from commit e269b5d1b9)
2019-09-01 12:37:58 +01:00
Jeff Young 82a0eb4413 Use Move() instead of SetPosition() so that the second pt gets updated too.
Fixes: lp:1841989
* https://bugs.launchpad.net/kicad/+bug/1841989

(cherry picked from commit 315a99e0fe)
2019-08-30 23:32:54 +01:00
Jeff Young be7215402b Partial cherry-pick of 79d062aefc. 2019-08-30 13:47:39 +01:00
Seth Hillbrand 4500b064d8 Handle active layer overloading
Setting the active layer should be tied to the events that are triggered
by the layer change and overloaded for each frame.  This ties the hotkey
back to these events.

Note: In the 5.1 cherry-pick this also adds the missing hotkey to
footprint editor

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

(cherry picked from commit 494d0de9b8)
2019-08-28 05:57:48 -07:00
jean-pierre charras 93d191d7c9 fix compil error 2019-08-28 10:05:25 +02:00
jean-pierre charras 1607ceaf3e Eeschema, symbol tree selector: make the selected lib and symbol readable.
Previously, the background was highlighted, but not the text.
On Windows, the text was unreadable, until it was selected.

From Master, commit 34e00bdb.
2019-08-28 09:34:46 +02:00
Jeff Young 5b24ea9dd9 Clearance should be in mils, not inches.
Fixes: lp:1841360
* https://bugs.launchpad.net/kicad/+bug/1841360

(cherry picked from commit 7c85dc6cd7)
2019-08-27 21:15:54 +01:00
Jeff Young c879dcaf7d Sort pins by number when grouping by name.
Fixes: lp:1828648
* https://bugs.launchpad.net/kicad/+bug/1828648

(cherry picked from commit 97212acecb)
2019-08-27 21:15:17 +01:00
Jeff Young 86691dabbf Partial cherry-pick of 03da721030.
Fixes: lp:1841361
* https://bugs.launchpad.net/kicad/+bug/1841361
2019-08-27 18:16:25 +01:00
Seth Hillbrand fe71a66bb9 pcbnew: Force resize event when changing pad type
The local settings panel needs to have its children sized when shown.
Triggering a resize event on changing the pad shape accomplishes this.
This is not triggered in master due to refactor of the custom pad
connection options.

Fixes: lp:1837789
* https://bugs.launchpad.net/kicad/+bug/1837789
2019-08-27 05:55:04 -07:00
Seth Hillbrand 80e0d848f2 eeschema: Modify all units at the same time
When editing symbol library reference, this ensures that all units are
modified by the same action and the component is not represented by its
subunits.

Fixes: lp:1834509
* https://bugs.launchpad.net/kicad/+bug/1834509
2019-08-26 20:42:29 -07:00
Seth Hillbrand 8b3a2984bf pcbnew: Two layer boards need both masks
Adds the missing default layer to the default board setups for two
layers with parts on single side (either top or bottom)

Fixes: lp:1841294
* https://bugs.launchpad.net/kicad/+bug/1841294
2019-08-26 17:14:13 -07:00
Seth Hillbrand fccce265aa pcbnew: Retain 45° constraint
This also finishes the polygon with 45° lines when chosen as a create
option.

Fixes: lp:1833673
* https://bugs.launchpad.net/kicad/+bug/1833673
2019-08-26 14:33:30 -07:00
Seth Hillbrand a43a228f78 eagle: Set module-relative position of ref/val
We need to set the footprint local coordinates of the footprint
reference and value fields at instantiation separately from the
TEXT_DIVERS elements.

Fixes: lp:1829727
* https://bugs.launchpad.net/kicad/+bug/1829727
2019-08-26 09:56:42 -07:00
Jeff Young dd8610fd5c Don't apply GTK fix to OSX as it causes a hang.
Fixes: lp:1841379
* https://bugs.launchpad.net/kicad/+bug/1841379

(cherry picked from commit de8f97be6b)
2019-08-26 00:50:54 +01:00
Seth Hillbrand b991beb712 pcbnew: Fix error in connecitivty calculation
Point in polygon should test against half the stroke width as the stroke
is performed _on_ the polygon edge.

(cherry picked from commit 820c2d2722)
2019-08-23 10:52:11 -07:00
Seth Hillbrand 25f6483488 gerbview: Ensure selection lives on top
Just picking the next layer will be overwritten when we have multiple
objects on the same layer in gerbview.  Move the selection to the top to
ensure it is out top-most layer when drawing.

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

(cherry picked from commit 77488e379c)
2019-08-22 10:52:56 -07:00
Seth Hillbrand efc0325e14 Handle wx scrollbar thumbs in system-independent way
The thumb size changes between system versions and (on GTK) render
managers, so hard-coded wasn't working.  This gets the actual value from
the system and uses to adjust the range.  Changes in the range can also
trigger the refresh.

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

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

(cherry picked from commit 85df994eda)
2019-08-22 10:16:25 -07:00
Seth Hillbrand d19ec021fe PNS: Check that we are optimizing a pad
Vias are also sent to breakout optimizer, so we need to check for the
solid cast before dereference.

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

(cherry picked from commit 03d5bf0df5)
2019-08-22 09:03:12 -07:00
Seth Hillbrand b34a307936 pcbnew: Scale line width for import
The line width in the import dialog is meant to reflect the resulting
width and not the given width of the file.

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

(cherry picked from commit 22fdc7f51f)
2019-08-21 10:35:40 -07:00
Seth Hillbrand fb565caf7b pcbnew: Optimize pad connection revision
This modifies that logic for optimizing pad connections.

1) Custom pads now prefer the connections to their longer side.  This is
particularly important to match the behavior in a rectangular pad
2) Costs for straight lines are non-zero.  This favors fewer connections
3) Custom pad breakouts are at the polygon boundary rather than offset
by 0.1mm.  This also matches the circular and rectangular paradigm.
4) Line Heads contained in the pad itself are not optimized.  This
prevents escaping the pad unnecessarily

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

(cherry picked from commit 06cb21cc47)
2019-08-20 19:37:59 -07:00
Seth Hillbrand 6796e8fff6 EEschema: Plot stroked edges over BG
Items that have BG fill need to be plotted in the background but we
still need their stroked edges to be in the FG.  This is a workaround
that overplots the edges ensuring visual similarity.  Re-working the
plot engine to support layers is a larger project.

Fixes: lp:1833428
* https://bugs.launchpad.net/kicad/+bug/1833428
2019-08-20 12:03:19 -07:00
Seth Hillbrand 213547f545 SVG: Correct plot fills for arcs/polylines
When plotting in Eeschema, various elements may be filled with either
the foreground or background colors.  The fill mode is rather unique,
requiring un-stroked pie wedges for arcs and both closed and open filled
polylines.

Fixes: lp:1840769
* https://bugs.launchpad.net/kicad/+bug/1840769
2019-08-20 12:01:00 -07:00
Jeff Young 73851e962b Implement undo/redo for lock/unlock/toggle lock.
Fixes: lp:1840770
* https://bugs.launchpad.net/kicad/+bug/1840770

(cherry picked from commit b219fbc3d2)
2019-08-20 16:42:20 +01:00
Jeff Young de22204514 Allow mouse drag to initiate a router drag if over a track or via.
Fixes: lp:1840694
* https://bugs.launchpad.net/kicad/+bug/1840694

(cherry picked from commit 1bfefc61ea)
2019-08-19 23:32:56 +01:00
Seth Hillbrand ebba15fe67 Alphabetize Library Table returns
KiCad is case sensitive but we need to be consistent in displaying sort
order as case insensitive (same as file systems)

Fixes: lp:1836911
* https://bugs.launchpad.net/kicad/+bug/1836911
2019-08-19 15:23:29 -07:00
Jeff Young c1cd3339fa Fix assertion in new Duplicate Hotkey warning message. 2019-08-19 14:24:26 +01:00
Jeff Young 713a296a59 Update all aliases of current node after Symbol Properties dialog.
Fixes: lp:1840466
* https://bugs.launchpad.net/kicad/+bug/1840466
2019-08-19 10:55:17 +01:00
jean-pierre charras 06bde527d5 Pcbnew, layer manager: fix flicker when loading a file, and incorrect size on start when no file is loaded
From master, commit b25ffc0
2019-08-19 10:58:45 +02:00
Erik Bosman dcd31f5701 Fix a null-pointer dereference in 5.1 branch
TRACK::GetEndNetCode() can get called using a NULL-pointer as 'this'.
The compiler assumes this won't happen and optimizes away a NULL pointer
check at the start of the function (so we might as well remove this check.)

Fixes: lp:1840562
https://bugs.launchpad.net/kicad/+bug/1840562
2019-08-18 14:59:58 +02:00
Seth Hillbrand 65f2af5849 3d: Disable floor rendering by default
The floor render in raytracing creates interesting shadow effects but
significantly increasing the processing time for renders and has the
side effect of making the bottom of the board very dark if you simply
flip it over.  Making this option off by default, we allow power users
to turn it on if needed for their renders while speeding up the default
raytrace and preventing new user confusion.

(cherry picked from commit 4fcfd266e0)
2019-08-16 11:42:21 -07:00
Seth Hillbrand 2dd7a8637c pcbnew: Handle edge cuts in footprints for bbox
The Board bounding box calculation has two modes: edges only and
everything.  While the everything mode works as expected, the edges only
calculation (and everything that depends on it) was seeing only the edge
cuts on the board drawings layer and not the footprint edge cuts.

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

(cherry picked from commit 99859727e8)
2019-08-16 11:14:14 -07:00
Seth Hillbrand 211d056728 3d-viewer: Remove dead code
The 2d-bbox of the 3d viewer was calculated and set but never used

(cherry picked from commit 59ed9f086f)
2019-08-16 11:01:01 -07:00
Seth Hillbrand dc0aed5b16 Allow EDA_RECT to properly be uninitialized
The base initialization of EDA_RECT sets a 0/0/0/0 rectangle that
prevents merging properly with valid EDA_RECT.  This sets the default to
be uninitialized until the internal data are set.

(cherry picked from commit 46feb76aba)
2019-08-16 11:01:01 -07:00
Simon Schubert 5064df4ba2 kicad2step: scale models
Fixes: lp:1784257
* https://bugs.launchpad.net/kicad/+bug/1784257

(cherry picked from commit a0ed40876d)
2019-08-15 14:32:32 -07:00
Simon Schubert 469c31da97 3d: min dot needs to be square
Given that we compare the dot product (square of length) to s_min_dot,
it means that s_min_dot also needs to be square, or we wind up
converting line segments into circles that are visually distinct from
circles, leading to gaps in polylines.

(cherry picked from commit 0823692dda)
2019-08-15 14:32:32 -07:00
Simon Schubert 5fb41e6ecc 3d canvas: use radius, not width for circles
(cherry picked from commit e01348cccc)
2019-08-15 14:32:32 -07:00
Simon Schubert a68a442bbb SVG plot: output invisible text in addition to plotting
Fixes: lp:1544918
* https://bugs.launchpad.net/kicad/+bug/1544918

(cherry picked from commit 176fe80425)
2019-08-15 14:32:32 -07:00
Seth Hillbrand 84db5644d6 pcbnew: Adjust drag snapping to avoid start
When dragging, you will seldom want to snap to the original item.  This
commit prevents the "size of track" snap to the original item and
replaces it with an auxilary grid origin for the snap.  This means
effectively that the snap will happen to grid for the original item
unless the cursor is closer to the original item line than it is to the
grid crossing.

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

(cherry picked from commit 0de25e557b)
2019-08-15 12:43:19 -07:00
Seth Hillbrand fc1fb7a590 PNS: Don't allow routing on hidden layers
If the layer is not shown, we should not be allowing it's items to be
selected and chosen as the start/end items in the router.
2019-08-15 12:38:16 -07:00
Wayne Stambaugh dc91d4eca8 Symbol editor: fix mnemonic issues in pin properties dialog.
Control ordering is critical to make dialog mnemonics work correct.  The
static text with the mnemonic must immediately proceed the control and
no additional controls can be added between static text/control pair.
Fixing this required adding the units static text controls after all of
the mnemonic static text controls and their associated edit controls.
Mnemonics do not work for read only controls so all of the combobox
controls were moved after the text controls.

Fixes lp:1818930

https://bugs.launchpad.net/kicad/+bug/1818930
(cherry picked from commit 92fe201c5b)
2019-08-15 15:10:43 -04:00
Shawn Anastasio f6a42a36d6 Fix libcontext on PPC64 ELFv2
libcontext currently restores and saves the FPSCR register
on ppc64. This behavior is fine (though unnecessary) on the
ELFv1 ABI which designates the register as volatile, but has
been observed to cause crashes on ELFv2 systems.

The ELFv2 ABI designates the FPSCR register as Limited-access
and specifies specific conditions that must be met to clobber
it. It does not seem that a context swap function meets these
conditions (and indeed, the save/restore register example in the
ABI document does not modify FPSCR).

This patch fixes ELFv2 ABI compliance by removing the FPSCR
save/restore code in libcontext entirely. This fixes observed
crashes on the platform and should have no consequence for
ELFv1 support.

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

(cherry picked from commit 3e22b75948)
2019-08-14 11:18:25 -07:00
Wayne Stambaugh 2a769dc0b0 Eeschema: fix bug in sheet name comparisons on Windows.
The use of wxPATH_UNIX when calling GetFullPath() on windows drops the
volume identifier (c:\) from the file name which will cause comparison
failures.

(cherry picked from commit 0328f3e33b)
2019-08-13 16:36:01 -04:00
Jeff Young 3475bfb2aa New move tool doesn't require GetAndPlace to jump through hoops.
And at least one of those hoops leaves the cursor forced.

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

(cherry picked from commit dd938b02df)
2019-08-13 10:02:57 +01:00
jean-pierre charras f9f8fade89 Pcbnew plot: fix missing footprint texts on solder mask layers.
Fix from master branch commit 1c295d46a9
2019-08-13 09:55:11 +02:00
Jeff Young e404fb772b Invoke move by ACTION; the EDIT_TOOL does lots of other stuff too.
Fixes: lp:1839877
* https://bugs.launchpad.net/kicad/+bug/1839877

(cherry picked from commit f3f0a6899f)
2019-08-12 23:00:55 +01:00
Wayne Stambaugh 2a9412042c Eeschema: remove dead code from LIB_PART object.
(cherry picked from commit 9020a3a26c)
2019-08-12 12:55:21 -04:00
Wayne Stambaugh e8ab661504 PCB calculator: fix regulator dialog layout.
Set default dialog size to -1,-1 to allow the dialog to size itself
properly to prevent the buttons in the standard dialog button sizer
from being truncated.

Fixes lp:1839695

https://bugs.launchpad.net/kicad/+bug/1839695
(cherry picked from commit e3e546f7d2)
2019-08-12 10:02:15 -04:00
Jeff Young 3f91db25d4 Minimal cherry-pick of c836cc9cf8.
Fixes: lp:1839534
* https://bugs.launchpad.net/kicad/+bug/1839534
2019-08-10 22:27:05 +01:00
Wayne Stambaugh 300381ba4d KiCad: fix new project from template bug.
Do no rename symbol library files to the new project name.  Only rename
the cache library.  This prevents breaking symbol library links in the
schematic due to the project symbol library table pointing to the wrong
library file name.

Fixes lp:1837667

https://bugs.launchpad.net/kicad/+bug/1837667
(cherry picked from commit c7fc54b348)
2019-08-07 15:39:19 -04:00
Seth Hillbrand 4363e6a213 eeschema: Fix list invalidation
When removing a junction, we need to keep the next pointer for deleted
item, marking them with a flag until committed.

Fixes: lp:1837398
* https://bugs.launchpad.net/kicad/+bug/1837398
2019-08-05 09:03:38 -07:00
Wayne Stambaugh 450dac4b1e Revert "Revert "Eeschema: remove rogue symbol libraries from project file.""
This reverts commit 0893e0043f.
2019-08-04 13:05:47 -04:00
Wayne Stambaugh 278127fe29 Revert "Revert "Eeschema: fix edit sheet bug.""
This reverts commit 2d48c81d58.
2019-08-04 13:05:35 -04:00
Wayne Stambaugh 23d71de75f Revert "Revert "Eeschema: fix many append schematic bugs.""
This reverts commit 238fb00727.
2019-08-04 13:05:09 -04:00
Wayne Stambaugh d86789898d Begin version 5.1.5 development. 2019-08-04 12:38:05 -04:00
Wayne Stambaugh c3dc1f65d4 Tag release version 5.1.4. 2019-08-04 12:36:25 -04:00
Wayne Stambaugh 238fb00727 Revert "Eeschema: fix many append schematic bugs."
This reverts commit 3518153d5b.
2019-08-04 12:34:25 -04:00
Wayne Stambaugh 2d48c81d58 Revert "Eeschema: fix edit sheet bug."
This reverts commit 6051dfae30.
2019-08-04 12:33:55 -04:00
Wayne Stambaugh 0893e0043f Revert "Eeschema: remove rogue symbol libraries from project file."
This reverts commit 5d60fe6812.
2019-08-04 12:33:19 -04:00
Jeff Young 72c0267fe6 Ativate delete tool so it can display the selection clarification menu when needed.
Fixes: lp:1835371
* https://bugs.launchpad.net/kicad/+bug/1835371

(cherry picked from commit c60118b6a4)
2019-08-03 22:49:27 -06:00
Seth Hillbrand c9956def36 pcbnew: Fix copy-paste error from 161dc9ce7
create_vrml_shell() needed the idxSide check but create_vrml_plane only
had an extra variable that wasn't used and so shouldn't be checked.
2019-08-02 13:14:02 -07:00
Wayne Stambaugh 5d60fe6812 Eeschema: remove rogue symbol libraries from project file.
Check for symbol libraries that somehow ended up in the project file
after remapping occurred and remove all of them to prevent potentially
broken symbol library links.

Add nagware dialog to warn the user and a checkbox to never show the
dialog again.

Fixes lp:1838185

https://bugs.launchpad.net/kicad/+bug/1838185
(cherry picked from commit 8789ab9265)
2019-08-01 15:24:55 -04:00
Wayne Stambaugh 6051dfae30 Eeschema: fix edit sheet bug.
Remove an existing sheet from the current page that requires a schematic
load from file to prevent a corrupt screen list from causing a segfault.

Merge the edit sheet file loading with the append schematic code since
they are functionally the same.  This allows the sheet edit code to
take advantage of all of the added broken symbol library links added in
the recent append schematic fixes.

Fixes lp:1835841

https://bugs.launchpad.net/kicad/+bug/1835841
(cherry picked from commit b595dc0d3b)
2019-08-01 15:24:55 -04:00
Wayne Stambaugh 3518153d5b Eeschema: fix many append schematic bugs.
Do not add cache library from another project to old library list.  This
is wrong and can cause all kinds of symbol library linking issues.  It's
better to force the user to fix broken symbol library links than the false
security of using multiple cache libraries.

Use correct paths when appending schematic outside of the current project
path when hierarchical sheets are appended.  If the path can be relative,
give the user the option to use either relative or absolute paths.

Do not change symbol library names in schematics appended from a source
outside the current project.  This will almost ensure the symbol library
links will be broken in the source project.

When the appended schematic is from another project, attempt to check all
of the possible combinations of symbol library table importing that could
cause broken symbol library links and give the user the option of canceling
the append operation or live with the possibility that there may be broken
symbol library links.

When the append schematic is in the current project path but not part of
the schematic, check to see if there are any library nicknames that do
no exist in the project symbol library table and give the user a chance
to cancel the append process.

(cherry picked from commit 9fae30162d)
2019-08-01 15:24:55 -04:00
Seth Hillbrand cf949609b2 eeschema: Properly map edge cases of legacy onto GAL
While we do not generate these arcs internally, some external tools
generate arcs that are technically valid but display correctly only
because of an oddity in the degeneracy mapping.

Fixes: lp:1838557
* https://bugs.launchpad.net/kicad/+bug/1838557
2019-08-01 11:45:10 -07:00
Jeff Young d482a8805c Perform better cleanup after cancelling text placement.
Fixes: lp:1838452
* https://bugs.launchpad.net/kicad/+bug/1838452
2019-07-31 23:17:08 -06:00
Seth Hillbrand 161dc9ce7e pcbnew: Fix VRML export checking
In rare cases, the VRML triangulator may claim to work but return empty
vectors.  These cases need to be caught before we dereference the vector
elements.

Fixes: lp:1838448
* https://bugs.launchpad.net/kicad/+bug/1838448
2019-07-31 20:03:49 -07:00
jean-pierre charras 090073cc3b Pcbnew, exchange footprints: fix a bug that prevent the new footprint to be at the right place.
Fixes: lp:1838446
https://bugs.launchpad.net/kicad/+bug/1838446
2019-07-31 12:07:49 +02:00
Ian McInerney 6ae718e4d6 pcbnew: Fix DXF units in drill map plotting
Fixes: lp:1836924
* https://bugs.launchpad.net/kicad/+bug/1836924

(cherry picked from commit 6c401ecce7)
2019-07-30 17:20:38 -04:00
Thomas Pointhuber 783b1cb611 Fix handling of filled circle in eagle importer (was only partly fixed)
Partly fixed in 4fc692f04b, but missed
that there is a loadPlain where I need to handle this case as well.

(cherry picked from commit 5f438b7a85)
2019-07-30 15:33:39 -04:00
Jeff Young 4b01f80e8d Fix typo in cherry-pick.
Fixes: lp:1838006
* https://bugs.launchpad.net/kicad/+bug/1838006
2019-07-30 11:49:06 -06:00
Jeff Young c8278f377b Alternative to cherry-picking b70df18939.
Fixes: lp:1838158
* https://bugs.launchpad.net/kicad/+bug/1838158
2019-07-29 20:19:46 -06:00
jean-pierre charras d34b664933 Simulation: do not add .save V(0) and/or .save V(GND) to ngspice.
These 2 nets are internally added by ngspice (info from Holger Vogt)

(cherry picked from commit d92396341e)
2019-07-28 04:52:57 -07:00
jean-pierre charras c8f40e1d26 PANEL_SETUP_NETCLASSES_BASE: fix minor wxAlert. 2019-07-28 13:26:58 +02:00
jean-pierre charras 185a8d7582 Try to fix UI issues in select layer pair dialog and slect layer dialog.
Fixes: lp:1838173
https://bugs.launchpad.net/kicad/+bug/1838173
2019-07-28 12:55:47 +02:00
jean-pierre charras 8373e91a1b Python scripting: fix missing definition of uint32_t (and some other similar defs).
Fixes: lp:1837867
https://bugs.launchpad.net/kicad/+bug/1837867
2019-07-27 08:22:10 +02:00
Jeff Young 6aeedfb70c Partial cherry-pick of 3904d7ccfc.
Fixes: lp:1838006
* https://bugs.launchpad.net/kicad/+bug/1838006
2019-07-26 20:46:12 -06:00
Stefan Hamminga e7f3851212 Rebased LTO fix for coroutines
Fixes: lp:1793329
* https://bugs.launchpad.net/kicad/+bug/1793329

(cherry picked from commit e58d9606dd)
2019-07-25 12:17:11 -07:00
jean-pierre charras 7df05ade4c Pcbnew: Fix bug in MODULE::FindPadByName( const wxString& aPadName ). This method was using a case insensitive comparison to find the pad matching aPadName. But in netlist we are using case sensitive comparisons to attribute a net to a pad. So if in the netlist there is a pad name that does not match any footprint pad name using case sensitive comparison but if it matches some pads using case insensitive comparison, the net is not set, but the test to detect non existing pads fails. 2019-07-25 17:57:38 +02:00
Seth Hillbrand 24b032ce5b Project Templates: Allow multiple line titles
This fixes two display issues in the project template selector.  The
first captured HTML tags in the template title display and the second
prevented more than one line for showing (at least on GTK) in the
preview.  This prevented disambiguation between the various templates.
2019-07-23 15:05:25 -07:00
Seth Hillbrand b6fe4ff637 eeschema: Clean up backup name
This fixes the last suffix that was missed by 168fa09f5.  The schematic
backup files should have the suffix .sch-bak to distinguish from
.kicad_pcb-bak or other backups.
2019-07-23 10:47:15 -07:00
Wayne Stambaugh 8f1aa28b37 Begin version 5.1.4 development. 2019-07-23 08:16:06 -04:00
Wayne Stambaugh 55c1e22a67 Tag release version 5.1.3. 2019-07-23 08:07:28 -04:00
Jeff Young ca0d4511a9 Copy ratsnest flags when exchanging modules.
Fixes: lp:1834214
* https://bugs.launchpad.net/kicad/+bug/1834214

(cherry picked from commit 2ca379b281)
2019-07-21 20:27:12 -06:00
Jeff Young b56855c542 Don't shove stitching vias.
Whether or not it's a good idea, the current algorithm doesn't support
it and leaves them on top of each other.

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

(cherry picked from commit aa4d7682ca)
2019-07-21 16:41:56 -06:00
Jeff Young 72e8eb3b94 Initialize plot with aux origin checkbox.
Fixes: lp:1836923
* https://bugs.launchpad.net/kicad/+bug/1836923

(cherry picked from commit b5e01ea163)
2019-07-20 07:58:43 -06:00
Jeff Young 281a1cdc2c Update DXF units drop-down.
Fixes: lp:1836927
* https://bugs.launchpad.net/kicad/+bug/1836927

(cherry picked from commit 4a1edf581e)
2019-07-20 07:58:38 -06:00
jean-pierre charras 3c8f901a1f Revert "Fix ngspice netlisting when net names contain '/'"
This reverts commit 216573bf48,
because the issue with net names containing '/' is not actually inside the netlist.
This commit 2165 creates issues with ngspice 2.8 and older, and do not fix anything in ngspice
2019-07-19 15:52:18 +02:00
Seth Hillbrand e0589d2908 pcbnew: Make clearance translucent
This sets the clearance outline to a slightly better opacity to allow
viewing of items behind the routed track clearance.  Future work should
include making this a configuration option.

Fixes: lp:1826719
* https://bugs.launchpad.net/kicad/+bug/1826719
2019-07-18 10:44:44 -07:00
Jeff Young dfd53976d4 Fix double-highlighted radio buttons on GTK.
Fixes: lp:1836538
* https://bugs.launchpad.net/kicad/+bug/1836538
2019-07-17 12:57:21 +01:00
Ian McInerney 02d43be93c pcbnew: Make the netlist class panel usable with a lot of classes
Fixes: lp:1826154
* https://bugs.launchpad.net/kicad/+bug/1826154

(cherry picked from commit 39954b20fe)
2019-07-15 06:12:13 -07:00
jean-pierre charras 2e8bceb676 Fix a minor wxWidgets alert, already fixed in master branch. 2019-07-15 12:27:54 +02:00
Jeff Young 16f9e697ab Allow edits to self-intersecting polygons.
1) Intermediate states might be self-intersecting, and we shouldn't
be policing our users on what order to do things in
2) The polygon might already be self-intersecting, at which point we're
preventing the user from fixing it.

Also includes better const management for SHAPE_POLY_SET API.

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

(cherry picked from commit a3c74051c2)
2019-07-14 18:36:47 +01:00
jean-pierre charras 269f88ee28 Fix incorrect handling of unicode chars (non ASCII7) in filenames in .gbrjob files. 2019-07-14 11:19:03 +02:00
Jeff Young f11d950448 Don't let visibility bit get nuked when updating effects.
Fixes: lp:1836183
* https://bugs.launchpad.net/kicad/+bug/1836183

(cherry picked from commit 6c9e34e799)
2019-07-11 23:01:54 +01:00
Jeff Young 6ba2c44e88 Add FootprintExists() which can be more careful about FS differences.
(And in particular, MSW's case-insensitive FS.)

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

(cherry picked from commit 20036f8105)
2019-07-11 23:01:25 +01:00
Jeff Young d1ed4665de OSX compiler didn't like the other syntax.
(cherry picked from commit f14e41133b)
2019-07-11 12:35:11 -07:00
Seth Hillbrand 5b68cfa018 Fix import graphics routines and tests
The returns of KiCad file extensions on GTK contain basic regex matching
case-insensitive file extensions.  We need to match these in the
provider and tests

(cherry picked from commit 1956c074ba)
2019-07-10 10:47:13 -07:00
Seth Hillbrand 85f88b6b05 Fix case-sensitive import using KiCad std
Fixes: lp:1832853
* https://bugs.launchpad.net/kicad/+bug/1832853

(cherry picked from commit 79e2000af4)
2019-07-10 10:33:03 -07:00
Seth Hillbrand ea467441d2 import_gfx: Make file selection case-insensitive
This adds the upper-case version of files names to the selection box for
filesystems that support case-sensitive file names.

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

(cherry picked from commit 36f70704eb)
2019-07-10 10:32:48 -07:00
Ian McInerney 40ba502853 pcbnew: Clean up warnings with unit handling in the DXF export
(cherry picked from commit ff9d899ae0)
2019-07-10 12:42:54 -04:00
Ian McInerney 09d7d0f1bc Update ngspice build tool script to ngspice-30
(cherry picked from commit 6186dd5c51)
2019-07-10 09:20:41 -04:00
Jeff Young 3418d53a6d Update symbol ID before running Update Fields from Library.
Fixes: lp:1827707
* https://bugs.launchpad.net/kicad/+bug/1827707

(cherry picked from commit fb881ee209)
2019-07-08 22:57:15 +01:00
Ian McInerney d5440d60ab eeschema: Fix initial selected text in reference value dialog
Fixes: lp:1834741
* https://bugs.launchpad.net/kicad/+bug/1834741

(cherry picked from commit e32306c232)
2019-07-08 14:50:53 -04:00
Jeff Young 2ba237ec12 Test for crash bug fix. 2019-07-08 15:34:01 +01:00
Jeff Young 01a343f28e Fix crash when re-entering a drag operation with a move.
Fixes: lp:1834111
* https://bugs.launchpad.net/kicad/+bug/1834111
2019-07-05 02:24:15 +01:00
Jeff Young 85220591e2 Fix bugs in keyboard cursor movement.
1) Generate refreshPreview events so the modern toolset doesn't
fall behind by one event (see LP:1818667)
2) In the legacy toolset don't call unimplemented routines and don't
snap to grid on the non-movement axis.
2019-07-05 01:32:15 +01:00
Jeff Young ecadc8bbba Fix bugs in new wire/line-width split.
If Symbol Editor isn't open then Eeschema needs to read in the
default line width.

Symbol Editor was failing to write line width parameter back to
properties.

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

(cherry picked from commit ef03afe289)
2019-07-03 14:34:11 +01:00
Jeff Young 26c92eaf0f Give up on KillFocus validation.
wxWidgets sends the KillFocus event before the Cancel button event,
and it sets the receiving-focus window pointer to NULL (so you can't
even check for it being the Cancel button.  Last time around (with
the UNIT_BINDER) I also tried a bunch of hacks for whether the window
pointer is NULL, etc., but they aren't discriminatory either.

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

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

(cherry picked from commit 1c30f3d9a9)
2019-07-02 18:13:27 +01:00
jean-pierre charras d129abb9c9 Eeschema, lib editor: fix a message error when loading a symbol from the schematic editor.
Adaptation from master branch, commit ff995bb7
2019-07-02 18:40:48 +02:00
Jeff Young 3b98b00d6f Only warn once in KillFocus for each error value in footprint name.
More than that just gets annoying, and there is at least one edge case
which throws us into an infinite loop if we don't have something to
break us out.

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

(cherry picked from commit 29db6152b3)
2019-07-02 00:48:57 +01:00
Jeff Young ce329e13fb Set library selection when pre-loading the Footprint Viewer.
Fixes: lp:1826932
* https://bugs.launchpad.net/kicad/+bug/1826932

(cherry picked from commit 8efe8d1835)
2019-07-01 22:17:57 +01:00
Seth Hillbrand be9cd98cb1 Move zone refill to action
This unifies the zone refill across architecture into the tool-based
architecture.  Also provides ZONE_FILLER-based progress managment for
tools.
2019-07-01 09:16:32 -07:00
Jeff Young 216acd98d6 Separate default line and wire thicknesses.
Fixes: lp:1834324
* https://bugs.launchpad.net/kicad/+bug/1834324
2019-06-30 11:13:17 +01:00
Jeff Young 10fd8a59b2 Apply relevant fixes from 51479c2042.
Fixes: lp:1834703
* https://bugs.launchpad.net/kicad/+bug/1834703
2019-06-29 21:17:22 +01:00
Seth Hillbrand 3974c6fd89 Enforcing rational limits on length tuner
The length tuning dialog needed validators on close to prevent negative
and percentages >100%

Fixes: lp:1834734
* https://bugs.launchpad.net/kicad/+bug/1834734
2019-06-29 09:37:47 -07:00
Ian McInerney f82962e42c eeschema: Fix python BOM generators to handle symbols
* Implement proper natural sorting of the reference values
* Perform quoting of all items in BOM generators that use csv.writer

Fixes: lp:1833822
* https://bugs.launchpad.net/kicad/+bug/1833822
2019-06-29 17:17:20 +02:00
Seth Hillbrand bf1ced4184 Allow more segments for large-arc footprints
When approximating arcs for polygons, we should allow for large radius
arcs/circles without coarsening the arc beyond a limit.  This is a
5.1.x-only patch to address this issue.  It should not be picked to
master as this is already addressed separately by max_error
2019-06-28 19:25:42 -07:00
Seth Hillbrand cabfcbc73c pcbnew: Drop tracks not on copper
We do not allow non-copper routed tracks and they will break assumptions
elsewhere in the code.  We drop them in the beginning so that they are
not saved.
2019-06-28 19:25:28 -07:00
Wayne Stambaugh 574473c480 Pcbnew: fix clean up tracks and vias segfault bug.
If a track has no connected items, do not attempt to access an empty
connected item map.

Fixes lp:1823973

https://bugs.launchpad.net/kicad/+bug/1823973
2019-06-28 13:12:23 -04:00
jean-pierre charras 17143fd53f Pcbnew, connectivity: fix incorrect detection of dangling track ends when a end is inside a zone.
This end was not detected as connected by the IsDangling method
2019-06-28 15:27:01 +02:00
Jeff Young b8fff99e68 Hook up zone-connection controls in Edit Footprint dialog.
Fixes: lp:1834629
* https://bugs.launchpad.net/kicad/+bug/1834629
2019-06-28 12:26:28 +01:00
Ian McInerney 3b038feae0 Cleanup cmake python dependency handling to catch errors
* Changed the KICAD_SCRIPTING flag to be a global disable, so it
  will disable all other scripting flags when set to OFF
* Added version testing with the wxPython flags to ensure the
  proper version is found for the flags provided

(cherry picked from commit 42e14b5a4e)
2019-06-27 13:41:55 -04:00
jean-pierre charras 032bda223e Gerber drill file: Modify a aperture attribute for oblong holes (slots).
Oblong holes (slots) use now a aperture attribute similar to round holes.
(The previous attribute "slot" is now deprecated)
However they have a specific aperture, and a comment is added in drill files for these apertures.
2019-06-26 17:53:09 +02:00
Jeff Young b16d4d18e0 Don't select items on inactive layers in high-contrast mode.
Fixes: lp:1833870
* https://bugs.launchpad.net/kicad/+bug/1833870
2019-06-26 01:18:59 +01:00
Wayne Stambaugh df3a57dcda Symbol and footprint library table editor fix.
Prevent the symbol and footprint library table editors from substituting
the current project path (${KIPRJMOD}) when adding libraries to the global
library table.  This will almost assuredly fail when opening a different
project.  We still allow users to manually use ${KIPRJMOD} in global table
paths under the assumption that if they are typing this in then they most
likely understand environment variable substitution.

Fixes lp:1830694

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

(cherry picked from commit 288982b15d)
2019-06-25 08:46:27 -04:00
Tomasz Włostowski 3bf7ab910f TestSegmentHit: add corner case for null segment (start == end)
Fixes: lp:1833059
* https://bugs.launchpad.net/kicad/+bug/1833059

(cherry picked from commit 6180687bbd)
2019-06-25 08:45:27 -04:00
Seth Hillbrand e8ce0ba6ef pcbnew: Avoid wxassert in message
wxstring::Printf() needs size_t cast to acceptable type or it gives an
assertion in debug mode.
2019-06-24 09:42:06 -07:00
Wayne Stambaugh d8fff5c820 Footprint library nickname comparison fixes.
Footprint library nicknames are case sensitive but the comparison for
the library tree control was case insensitive.

Also make the footprint name comparisons case sensitive as well.  While
not strictly necessary, the plan is to start using the name defined in
the footprint file instead of the file name which will allow for case
sensitivity.

Fixes lp:1833701

https://bugs.launchpad.net/kicad/+bug/1833701
2019-06-24 08:00:21 -04:00
Seth Hillbrand aa9897d932 Fix bug in tesselation
When we hit a self-intersection, we need to be careful that we don't
lose the stop vertex.

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

(cherry picked from commit 6d60b98dc8)
2019-06-23 20:56:29 -07:00
Seth Hillbrand f265a52c96 Enforce build order with qa system
The QA objects link to the direct kiface objects, which creates a second
dependency on the generated lexer files.  To ensure that the primary
apps are finished building them in a (potentially) different thread, we
set a false dependency on the final build product in the qa CMake.

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

(cherry picked from commit 172542cfc4)
2019-06-23 12:53:19 -07:00
Jeff Young f214cfae12 Don't try to show sub-dialog in OnActivate(). High Sierra asserts.
Fixes: lp:1832635
* https://bugs.launchpad.net/kicad/+bug/1832635
2019-06-23 15:39:05 +01:00
Seth Hillbrand febc8cd6aa pcbnew: Ensure save dialog with zones
Fixes: lp:1833748
* https://bugs.launchpad.net/kicad/+bug/1833748
2019-06-22 08:45:00 -07:00
Seth Hillbrand 463e061740 Clear non-copper edge rounding
Non-copper zones do not have a fillet/chamfer option, so we need to
clear it before the zone tool uses the last-used option.

Fixes: lp:1833672
* https://bugs.launchpad.net/kicad/+bug/1833672
2019-06-22 08:25:38 -07:00
Ian McInerney d80759efb8 cvpcb: Implement delete/cut/copy/paste for individual associations
Fixes: lp:1794883
* https://bugs.launchpad.net/kicad/+bug/1794883
2019-06-21 09:58:53 -04:00
Ian McInerney 1d66aad4df cvpcb: Allow the escape key to close the window
Fixes: lp:1830483
* https://bugs.launchpad.net/kicad/+bug/1830483
2019-06-21 09:22:51 -04:00
Seth Hillbrand f5284ced54 Allow null path in 3d model
This allows a setting where the path is not one of the options.  This
permits the user to select once to go to any path option (rather than
off the current and then back to currect) when the filetree doesn't
match the dropdown.  This also selects the drop down item if it matches
the tree.
2019-06-20 20:10:25 -07:00
Ian McInerney c951ca6f47 cvpcb: Added library location to status bar
Fixes: lp:1782805
* https://bugs.launchpad.net/kicad/+bug/1782805
2019-06-20 16:20:15 -04:00
Seth Hillbrand f25ae373bb Fixup previous move commit
The previous commit missed a case where the number was so large that it
overflowed the integer invalidating the comparison.  This protects
against that case by using floating point comparison.
2019-06-20 06:46:41 -07:00
Seth Hillbrand 845833e8fd pcbnew: Enforce maximum movement in Move Exact
This checks the movement against a maximum value that would place the
selection outside of the valid area for the footprint or board.

Fixes: lp:1833478
* https://bugs.launchpad.net/kicad/+bug/1833478
2019-06-20 06:29:53 -07:00
jean-pierre charras f0ac61a8fd Eeschema: minor fix for root sheet plot file name.
Fixes: lp:1833487
https://bugs.launchpad.net/kicad/+bug/1833487
2019-06-20 13:41:04 +02:00
Seth Hillbrand 8f7278e34f Eeschema: Normalize layer ordering between plot and screen
Fixes: lp:1833428
* https://bugs.launchpad.net/kicad/+bug/1833428
2019-06-19 10:49:28 -07:00
Seth Hillbrand b124599de3 Don't skip handled events in GTK
Now that our tool framework handles the hotkeys, we need to skip the
passed handling work-around for actions that are already handled in the
event.

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

(cherry picked from commit b876309999)

Fixes: lp:1819210
* https://bugs.launchpad.net/kicad/+bug/1819210
2019-06-18 22:06:10 -07:00
Seth Hillbrand 697234dd51 eeschema: Insert junctions when repeating
Fixes: lp:1832253
* https://bugs.launchpad.net/kicad/+bug/1832253
2019-06-18 19:38:13 -07:00
Seth Hillbrand ba97494d6f Update toolbar to get new icon/tooltip
After a save-as the footprint belongs to the library, we need to refresh
the toolbar to get the correct icon.

Fixes: lp:1826889
* https://bugs.launchpad.net/kicad/+bug/1826889
2019-06-18 19:24:47 -07:00
Jeff Young 1996fba8a6 Check for a tree selection before checking it against the board item.
Fixes: lp:1833295
* https://bugs.launchpad.net/kicad/+bug/1833295
2019-06-19 00:11:23 +01:00
Wayne Stambaugh a6bbe907ee Set about dialog name for 3D viewer frame.
(cherry picked from commit 2f2c358aef)
2019-06-18 15:32:09 -04:00
Wayne Stambaugh 43579f4c02 Minor library identifier validator change.
Use the wxTextValidator style flag to allow the user to clear the library
identifier string.  Use wxTextValidator::SetStyle( wxFILTER_EMPTY ) to
prevent empty library identifier strings which is the current behavior.

(cherry picked from commit 9f9e87f11f)
2019-06-18 12:16:51 -04:00
Seth Hillbrand 909a25c147 pcbnew: Correct polygon flipping in custom pads
Custom pads are referenced to the anchor pad 0-point, so flipping the
polygon should be about 0 and not the flip point.

Fixes: lp:1831311
* https://bugs.launchpad.net/kicad/+bug/1831311
2019-06-17 15:26:56 -07:00
Wayne Stambaugh aa3aafc4ff Eeschema: fix sheet plotting bug.
Prefix the sheet name with "Sheet: " and the sheet file name with "File: "
when plotting so that it matches the display sheet rendering.

Improve the root sheet plot file name.

Fixes lp:1832081

https://bugs.launchpad.net/kicad/+bug/1832081
(cherry picked from commit 7235da0979)
2019-06-17 17:02:21 -04:00
Seth Hillbrand b32439a694 Plotting: Handle mask transparency
This handles images with transparent colors by mapping the transparent
color to white.  This only works when plotted into the background.
2019-06-17 13:27:58 -07:00
Seth Hillbrand ddbc25077c Eeschema: Plot in same order as drawing
This ensures the junctions are on top and the bitmaps are on bottom
2019-06-17 13:27:11 -07:00
Seth Hillbrand b075886b19 DC printing: Place worksheet behind schematic
And place bitmaps behind other items.  This ensures they are drawn in
the background of the page rather than covering schematic elements.

This also hacks around the buggy wxPostScriptDC implementation that
resets the page to print an image.

Fixes: lp:1819934
* https://bugs.launchpad.net/kicad/+bug/1819934
2019-06-17 13:03:00 -07:00
Wayne Stambaugh eae999a85a Eeschema: allow empty field strings in field table editor.
The grid apply code was always preventing empty fields.  Change this the
broken behavior to allow any field to be empty except the reference and
value fields.

Fixes lp:1832722

https://bugs.launchpad.net/kicad/+bug/1832722
(cherry picked from commit d74ec1a1b2)
2019-06-17 15:06:27 -04:00
Seth Hillbrand 77f0799750 Print bitmaps using BW setting
When selecting the "Print in B&W", all items on the schematic should be
printed using black and white.  This converts the embedded images
greyscale before outputting to the printer
2019-06-17 09:54:52 -07:00
jean-pierre charras 8de93ad8b4 Eeschema: fix incorrect size of junctions on screen.
Fixes: lp:1831931
https://bugs.launchpad.net/kicad/+bug/1831931
2019-06-17 18:08:44 +02:00
Ian McInerney b377b5bbed pcbnew: Fix invalid hotkeys 2019-06-17 08:11:01 -04:00
Seth Hillbrand 75b5324762 Eeschema: Allow junction dots to be hidden
Drawing junction dots at the line width allows users who do not like
them in their schematics to avoid having them drawn.
2019-06-17 04:48:10 -07:00
Wayne Stambaugh 610d200e8a Fix spelling error in symbol library table warning string.
(cherry picked from commit be8fe3884f)
2019-06-16 12:28:56 -04:00
Wayne Stambaugh 8002692f3e CvPcb: fix save changes dialog layout issue.
DIALOG_EXIT was not being laid out correctly after setting the dialog
message.  Rather than fix our custom DIALOG_EXIT, wxMessageDialog and
wxRichMessageDialog were substituted as direct replacements for all
of the variants of DIALOG_EXIT.  This make message dialogs appear more
consistent because wxMessageDialog uses the default platform message
dialog and wxRichMessageDialog uses the default platform rich message
dialog on windows.

Remove DIALOG_EXIT_BASE as it is no longer required.

Fixes lp:1832899

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

(cherry picked from commit 3f665318f4ab5c02b7d3c29b5233a273fdac2e4e)
2019-06-16 12:28:35 -04:00
Seth Hillbrand 9496b57b01 tool_mgr: Don't invalidate our own iterators
Re-arranging the stack will invalidate the iterator that is removed and
inserted (begin()).  Because this is not a threaded operation, we can
only do it to ourselves, so check that the operation isn't a NOP before
performing.

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

(cherry picked from commit 552815d486)
2019-06-15 17:49:52 -07:00
jean-pierre charras a5cd5844ec Fix invalid wxImageList build.
Fixes: lp:1832905
https://bugs.launchpad.net/kicad/+bug/1832905
2019-06-15 16:08:07 +02:00
Ian McInerney da16b479a0 Make DXF monochrome output only contain Black layer
Fixes: lp:1832359
* https://bugs.launchpad.net/kicad/+bug/1832359

(cherry picked from commit dc56678289)
2019-06-13 16:10:17 -07:00
Ian McInerney 44f1059000 Allow DXF to be exported in either inches or millimeters
Fixes: lp:1832188
* https://bugs.launchpad.net/kicad/+bug/1832188

(cherry picked from commit d5f680ecd2)
2019-06-13 16:10:12 -07:00
Ian McInerney cf4b41f7d9 pcbnew: Update plot dialog to contain a unit selector for DXF
(cherry picked from commit b2c848579a)
2019-06-13 16:10:03 -07:00
Seth Hillbrand a84ca5b147 cmake: Further petting dependencies
eeschema cpp files consume generated header files that have targets in
the common directory, so no dependencies get created from eeschema.  We
add the dependencies in common to force the setting through libraries.

Fixes: lp:1831643
* https://bugs.launchpad.net/kicad/+bug/1831643
2019-06-13 16:09:45 -07:00
Ian McInerney 71f5f96e64 Remove help from F1 key and move it to an action
Create a new action in pcbnew, gerbview and the footprint viewer/
editor to display the help documentation. Disconnect the wxID_HELP
event from the window so that it no longer conflicts with the zoom
action.

Fixes: lp:1822041
* https://bugs.launchpad.net/kicad/+bug/1822041
2019-06-13 14:11:24 -04:00
Ian McInerney 2aa8e444ee Added hotkey validity checking to the preferences menu 2019-06-13 13:53:04 -04:00
Steven A. Falco cfa187f477 Show the current grid setting. 2019-06-13 12:14:41 -04:00
Wayne Stambaugh 1ed411e431 LibEdit: fix library tree refresh issue when library is removed.
A bug in LIB_MANAGER::LibraryExists() prevented a library removed from
the symbol library table from being removed from the tree view.  Add the
proper check to SYMBOL_TREE_SYNCHRONIZING_ADAPTER::Sync().

This exposed another issue with synchronization between the library
table editor and the tree view which could lead to orphaned library
modifications and/or a segfault when the currently selected library was
removed from the symbol library table.  Give the user a chance to save
or revert any changes before allowing changes to the symbol library
table.

Fixes lp:1821691

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

(cherry picked from commit 028973d182)
2019-06-13 08:59:26 -04:00
Seppe Stas 9233ae97d0 Set KiCad version in MacOS apps
Uses CMake's configure_file function [1] to automaticaly set the
CFBundleShortVersionString [2] value in every app's Info.plist file.

Also updates the CFBundleLongVersionString and CFBundleVersion with the
extended KiCad Version

[1]: https://cmake.org/cmake/help/latest/command/configure_file.html
[2]: https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring

(cherry picked from commit 455ee4c08c)
2019-06-12 14:12:01 -07:00
Seth Hillbrand 0ee38653f7 Fix default User Template location
When we assign a string to the wxFilename, it takes the last section as
the filename (unless there is a trailing '/').  So on Linux, we got
/home/user for the Documents dir and /home/ was the directory while
'user' was the filename.  Appending directories 'kicad/templates' made
the final directory '/home/kicad/templates'.  Forcing this to be a
directory restores correct behavior.
2019-06-11 13:46:10 -07:00
Seth Hillbrand df89b5bf8a eeschema: Don't extend the block when finalizing action
The block draw function is called during the mouse capture callback.  It
shouldn't be called after the block size is finalized.

Fixes: lp:1832289
* https://bugs.launchpad.net/kicad/+bug/1832289
2019-06-11 12:17:25 -07:00
Seth Hillbrand cca4037fec CMake: Another go at linear dependencies
This simplifies the linear dependencies for custom targets.  Should be
single shot for make this time.

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

(cherry picked from commit 720889edd0)
2019-06-10 14:55:01 -07:00
jean-pierre charras e015da8d95 Add a search path to allow find ngspice include dir on some msys2 installs 2019-06-10 20:42:21 +02:00
jean-pierre charras 4ceb186251 Eeschema: fix incorrect saving in prj config on the default netlist format. It was not always saved, and this was not the default, but the last used format. 2019-06-10 20:37:34 +02:00
Seth Hillbrand 370109b868 Eagle: Fix stacked NC pin import
Since Eagle does not connect stacked NC pins but KiCad will if the pins
are coincident, we choose to only import the first of the stacked NC
pins.  While this creates symbols that are slightly different in pin
count from the Eagle version, it keeps the schematic and netlist
functionally correct relative to the Eagle version.

Fixes: lp:1821319
* https://bugs.launchpad.net/kicad/+bug/1821319
2019-06-09 17:02:46 -07:00
Seth Hillbrand 3b3165ad51 pcbnew: Allow DRC violations when marked
We shouldn't consider any obstacles when we are routing in DRC violation
mode.

Fixes: lp:1826723
* https://bugs.launchpad.net/kicad/+bug/1826723
2019-06-09 13:00:13 -07:00
Seth Hillbrand 98e68cd66a Adding MIT license
The tinyspline library is under MIT, so needs to be included in our
license bundle.
2019-06-09 08:38:54 -07:00
jean-pierre charras 407301a28c Fix issue in cairo_gal when drawing a 360 deg arc (in fact a circle). It was due to a angle normalization between -360 and 360 degrees. So, in arcs, if the start angle and end angle diff is n*360 deg, this normalization gives start angle = end angle. The fix forces end angle = start angle+360deg in this case.
Fixes: lp:1832096
https://bugs.launchpad.net/kicad/+bug/1832096
2019-06-09 11:09:43 +02:00
Seth Hillbrand 5ce0e7265b modedit: Clear undo when importing
Importing a footprint is creating a new board.  Undo breaks here as we
don't maintain undo/redo across boards.

Fixes: lp:1832107
* https://bugs.launchpad.net/kicad/+bug/1832107
2019-06-08 13:05:02 -07:00
Seth Hillbrand f1704fd61a bitmap2component: Fix logic for alpha mask
For POTRACE, black is the foreground and white is the background.  We
should keep the convention by requiring the pixin to be less than the
black threshhold as well as the alpha to be at least the alpha
threshhold.

Fixes: lp:1821563
* https://bugs.launchpad.net/kicad/+bug/1821563
2019-06-08 12:03:48 -07:00
Seth Hillbrand 35e87128f5 pcbnew: Ensure cursor remains set during tool activity
Mouse capture end is called by some actions such as save board.  This
resets the cursor image but doesn't change the current tool.  Resetting
the cursor image during action prevents this.
2019-06-08 10:23:38 -07:00
Seth Hillbrand dd93f89931 Import Vector Dialog formatting
This standardizes the import vector graphics file dialog to use the
sbSizer titles instead of bold+lines.  Tooltip changes will be in the
next change as we don't change strings for bugfix releases and this
commit is targeted for 5.1.3

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

(cherry picked from commit f7550940ee)
2019-06-08 09:47:29 -07:00
Seth Hillbrand fb85612f81 eagle: Strip newlines from description
Eeschema old format is line-terminated so the newlines in descriptions
will break the schematic file if saved.

Fixes: lp:1829707
* https://bugs.launchpad.net/kicad/+bug/1829707
2019-06-07 22:08:06 -07:00
Seth Hillbrand 966173c129 pcbnew: Don't reset triangular points for intersection
We prevent the creation of invalid polygons by keeping the converging
lines from intersecting.  This test doesn't make sense for triangular
polygons as they always intersect and we want to allow them to move
outside of the singular point.

Fixes: lp:1831481
* https://bugs.launchpad.net/kicad/+bug/1831481
2019-06-07 21:35:03 -07:00
jean-pierre charras 55757039fa Custom pads: fix a bug when plotting the custom shape. This bug was seen only with some shapes, not all, and only for layers having a negative margin.
Fixes: lp:1831941
https://bugs.launchpad.net/kicad/+bug/
2019-06-07 10:51:43 +02:00
jean-pierre charras 1113e18c40 Fix incorrect initialization of some menuitems IDs.
Although is is currently working, it is a potential issue.
2019-06-06 08:01:24 +02:00
Jon Evans 02947345e8 Mathplot: properly set foreground color when saving screenshots
Fixes: lp:1810914
* https://bugs.launchpad.net/kicad/+bug/1810914

(cherry picked from commit 27a5ed1a9f)
2019-06-05 22:44:18 -04:00
Seth Hillbrand 63f18f0b03 CMake: Handle custom_target indirection
Building custom targets that depend on custom commands such as our
keyword lexer requires two layers of indirection to pick up changes
properly and not overwrite the same file in parallel builds.

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

(cherry picked from commit c6af38477d)
2019-06-05 13:10:00 -07:00
Jeff Young cd6da987cc Make sure the current desc is shown for parts being edited.
Fixes: lp:1820298
* https://bugs.launchpad.net/kicad/+bug/1820298

(cherry picked from commit 7c337ec45d)
2019-06-04 16:30:59 +01:00
Ian McInerney 006d7ddd31 pcbnew: Add context menu for measure tool
Fixes: lp:1831063
* https://bugs.launchpad.net/kicad/+bug/1831063
2019-06-02 07:57:41 -07:00
Ian McInerney 81842fc9d0 eeschema: Make symbol editor cursor track crosshairs with arrow keys
Fixes: lp:1829280
* https://bugs.launchpad.net/kicad/+bug/1829280
2019-05-31 07:47:18 -04:00
Ian McInerney ec9e0b2086 pcbnew: Fix export of edge.cuts layer to STEP format
Fixes: lp:1820841
* https://bugs.launchpad.net/kicad/+bug/1820841

(cherry picked from commit 55261eb223)
2019-05-29 19:43:16 -07:00
Jon Evans 64b71644bb Zoom to fit: only consider worksheet if there are no other items
(cherry picked from commit 04d6ec7de7e7f90482310311fcee416e8ed6410f)
2019-05-29 20:52:07 -04:00
Seth Hillbrand 1e58b09d96 Don't change the board without user action
Grid and ratsnest visibility are stored in the board file and should not
be changed without the user explicitly modifying them.

In the future, we'll move these settings out of the board file but we
shouldn't cause extra file-churn for flipped bits.

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

(cherry picked from commit e7e20b85b5)
2019-05-29 11:28:28 -07:00
Seth Hillbrand 455136ee50 eeschema: end mouse capture before exiting sheet
The mouse capture has a cleanup associated that we call to cancel the
action.  This prevents issues when trying to copy between hierarchical
sheets.

Fixes: lp:1819278
* https://bugs.launchpad.net/kicad/+bug/1819278
2019-05-28 21:19:21 -07:00
Jon Evans 1058ba6a0f PcbNew: ensure Bezier points are updated before plotting
(cherry picked from commit b060880aacfb5e2ff44dea0000733e835d0b8b2a)
2019-05-29 00:07:22 -04:00
Jon Evans f8c541c0d7 PcbNew: fix Bezier curves not having bounding boxes at startup
(cherry picked from commit 40621de3559ee3993d7193a0faee5d0a777be848)
2019-05-29 00:06:55 -04:00
Ian McInerney b485e78030 gal: Decoupled X and Y grid step sizes
Made the X and Y step sizes for the grid separate in the GAL.

Cleaned up the types inside the DrawGrid functions.

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

(cherry picked from commit 45f10fcff1)
2019-05-28 20:37:07 -07:00
Ian McInerney d8e7892081 pcbnew: Fix reload of python plugins in python 3
Update the reload function call to be python3 compatible along with
simplifying the load function to unify the loading of simple and
complex plugins.

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

(cherry picked from commit 59b729c731)
2019-05-28 17:21:00 -07:00
Wayne Stambaugh 1638c3b1c2 Eeschema: fix broken symbol library links after sheet edit.
Refresh the currently edit sheet screen symbol links when the sheet file
name is changed.

This fix was better than the previous fix as it was the same diff between
the master and 5.1 branches.

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

Fixes lp:1830315

(cherry picked from commit 89ada624d3d3b28ad5ee1477b353501d46dae3a2)
2019-05-28 17:29:48 -04:00
Wayne Stambaugh 2d0e92d412 Revert "Eeschema: fix broken symbol library links after sheet edit."
This reverts commit f1a43f4977.
2019-05-28 17:07:46 -04:00
Wayne Stambaugh f1a43f4977 Eeschema: fix broken symbol library links after sheet edit.
Refresh the currently edit sheet screen symbol links when the sheet file
name is changed.

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

Fixes lp:1830315
2019-05-28 14:49:02 -04:00
Michael Kavanagh 18f7d0129a Stop PNS router settings from being overwritten when switching modes
Fixes: lp:1824967
* https://bugs.launchpad.net/kicad/+bug/1824967

(cherry picked from commit 27d097a78c)
2019-05-27 16:16:55 -07:00
Jon Evans 356ccd0314 Eeschema: improve simulator behavior for two-source DC analysis
Fixes: lp:1830478
* https://bugs.launchpad.net/kicad/+bug/1830478
2019-05-27 18:13:07 -04:00
Jon Evans 4adf89b40b Improve image alpha handling in PDF and PS plotters
Fixes: lp:1825276
* https://bugs.launchpad.net/kicad/+bug/1825276
2019-05-27 12:35:12 -04:00
Jon Evans eb4aded5d6 PcbNew: Fix ordering of fab and courtyard layers
Fixes: lp:1829511
* https://bugs.launchpad.net/kicad/+bug/1829511
2019-05-27 11:54:43 -04:00
Jon Evans 5230f45658 Prevent unbalanced PTH pad labels from being hidden by drills
Fixes: lp:1829067
* https://bugs.launchpad.net/kicad/+bug/1829067
2019-05-27 11:54:43 -04:00
Seth Hillbrand b4e70e56a6 Eagle: Fix crash when importing Eagle V6
This fixes multiple issues when importing Eagle V6 files.

Crashes occured when arcs of 0-length were found and when parts were
referenced in the schematic that were not found in the library.  This
could happen if the library and schematic were different cases.

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

(cherry picked from commit 0e5cc54ec9)
2019-05-26 20:34:05 -07:00
Jon Evans cb3edf2607 PcbNew: Fix layer alpha overrides being overwritten by color changes
Fixes: lp:1827518
* https://bugs.launchpad.net/kicad/+bug/1827518
2019-05-26 20:20:31 -04:00
Jon Evans 720b26d11e Eeschema: fix worksheet and background color for printing
Fixes: lp:1820611
* https://bugs.launchpad.net/kicad/+bug/1820611
2019-05-26 14:25:57 -04:00
Jon Evans e35be13b23 Eeschema: use worksheet color when plotting
Fixes: lp:1825568
* https://bugs.launchpad.net/kicad/+bug/1825568
2019-05-26 12:21:08 -04:00
Jon Evans ba19d93df9 GerbView: Fix selection of the last two grid settings
Fixes: lp:1827642
* https://bugs.launchpad.net/kicad/+bug/1827642
2019-05-25 17:14:35 -04:00
Jon Evans 5d1dcb4387 GerbView: properly load worksheet visibility at startup 2019-05-25 16:58:10 -04:00
Jon Evans f101934909 Report actual intersection position for crossing tracks
Fixes: lp:1825588
* https://bugs.launchpad.net/kicad/+bug/1825588
2019-05-25 15:02:06 -04:00
Jon Evans ede2575018 Exclude invisible items from view bounding box for zoom-to-fit
Fixes: lp:1116457
* https://bugs.launchpad.net/kicad/+bug/1116457
2019-05-25 10:44:15 -04:00
Jon Evans fb80ee5a0e Store items changed by connectivity algorithm in undo list
Fixes: lp:1828442
* https://bugs.launchpad.net/kicad/+bug/1828442
2019-05-24 21:55:49 -04:00
Michael Kavanagh 44fc69398c Fix footprint marked as modified when layer visibility changed
Fixes: lp:1830330
* https://bugs.launchpad.net/kicad/+bug/1830330

(cherry picked from commit 741140e4a4)
2019-05-24 16:17:43 -04:00
Wayne Stambaugh c162337cab Pcbnew: Python scripting support clean up.
Always check the return value of PyRun_SimpleString() for errors when a
Python script is run and show an error message rather than fail silently.

Enable Python interpreter I/O redirection in debug builds so that script
string errors will be shown when PyRun_SimpleString() is called.

Do not call PyErr_Print() after a PyRun_SimpleString() call failure.  It
doesn't do anything useful.

Do not call Py_Finalize() after a PyRun_SimpleString() call failure.  It
seems to cause Pcbnew to crash.

(cherry picked from commit 816f6db310)
2019-05-24 08:01:57 -04:00
John Beard 821faaf3c0 Format: add some formatting aliases, improve dev docs
The aliases are easier than calling check_coding.sh manually,
and we already provide an alias file for the fixes alias, so
do the same for these.

(cherry picked from commit 241127788e)
2019-05-23 21:29:36 +01:00
Ian McInerney bf85eb9b4e pcbnew: Fixed listing of 3D libraries in the github wizard
Fixes: lp:1830137
* https://bugs.launchpad.net/kicad/+bug/1830137

(cherry picked from commit 0daf14f9c3)
2019-05-23 09:51:10 -07:00
Seth Hillbrand 691c6614a8 Plotter: Ensure group style is respected in SVG
Graphics Changed is cleared when setting graphics for a group but needs
to be reset when the group ends.

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

(cherry picked from commit 1a56dfe342)
2019-05-23 09:48:38 -07:00
Wayne Stambaugh 6db7cb8937 Symbol Editor: fix datasheet field bug loading old symbol libraries.
This only applies to the root symbol when the datasheet field is not
empty and the datasheet for root symbol alias in the document file is
empty.  Use the root symbol datasheet field value when adding a new
symbol that meets this criteria.

The root symbol datasheet field gets copied to the root symbol alias
datasheet member variable so if the symbol is modified and saved, the
datasheet information is saved in the .dcm file.

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

Fixes lp:1830078

(cherry picked from commit c52ff1ca23)
2019-05-23 09:02:21 -04:00
Wayne Stambaugh 6afc572eae Eeschema: fix datasheet field bug loading old symbol libraries.
This only applies to the root symbol when the datasheet field is not
empty and the datasheet for root symbol alias in the document file is
empty.  Use the root symbol datasheet field value when adding a new
symbol that meets this criteria.

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

Fixes lp:1830083

(cherry picked from commit 300f5cb082)
2019-05-23 07:35:10 -04:00
Michael Kavanagh 2a932a2176 Allow setting cursor and aux items colour in footprint editor
Fixes: lp:1829850
* https://bugs.launchpad.net/kicad/+bug/1829850
2019-05-22 15:11:20 -04:00
Seth Hillbrand b2bcde1bfc EAGLE: Correct pcb text orientation
Fixes: lp:1829711
* https://bugs.launchpad.net/kicad/+bug/1829711

(cherry picked from commit 1181b9f9b4)
2019-05-22 10:38:16 -07:00
Seth Hillbrand ec6fd23636 EAGLE: Prevent numeric-only component references
KiCad does not allow references to be numeric only.  This prefixes such
references with "UNK" to note that the reference designator type is
unknown.

(cherry picked from commit a62a89eac3)
2019-05-22 10:38:16 -07:00
Seth Hillbrand 6f34f95c52 Allow squared inflation and inflate Eagle Zones
Sometimes we want to inflate a polygon without adding rounded edges.
This add the option using the jtMiter setting.

This is used in the Eagle parser to expand the Eagle zones for KiCad.
Eagle Zones are drawn on the polygon edge, so they extend out from the
outline.  KiCad zones are drawn inside the polygon.  We need to both
increase the zone size and decrease the minimum pen width to account for
this.

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

(cherry picked from commit 490c805319)
2019-05-22 10:38:16 -07:00
Seth Hillbrand 94e5b36279 pcbnew: Allow adding SHAPE_LINE_CHAIN to zones
(cherry picked from commit bf0a466642)
2019-05-22 10:38:16 -07:00
Seth Hillbrand f0ce4d6336 eagle: Use width on imported lines if available
If not, use the current board design settings for line thickness based
on the board layer.

(cherry picked from commit c80e3e0ffc)
2019-05-22 10:33:24 -07:00
Seth Hillbrand d06b42b917 Eagle: Allow directory creation when importing
The DD_MUST_EXIST flag prevents users from creating a new directory for
their imported eagle project.  This is a UX annoyance.

(cherry picked from commit 9992839c78)
2019-05-22 10:33:09 -07:00
jean-pierre charras 764986a9b0 Fix a compil issue 2019-05-22 18:35:58 +02:00
jean-pierre charras c4efa95b4a * Eeschema: Ensure axis are always drawn in libedit and viewlib
(From master branch)
2019-05-22 17:56:08 +02:00
Wayne Stambaugh 5a655779d7 Eeschema: fix broken cursor after mouse wheel pan.
Fixes lp:1827787

https://bugs.launchpad.net/kicad/+bug/1827787
2019-05-21 14:21:53 -04:00
Wayne Stambaugh 0403437ad0 Eeschema: replace invalid characters when converting from text to label.
Fixes lp:1829664

https://bugs.launchpad.net/kicad/+bug/1829664
2019-05-20 14:49:49 -04:00
jean-pierre charras b62f94f5c2 Pcbnew: release the lock file if a board was loaded, and when clearing the board currently edited. When the board is cleared, the previous loaded board is no longer in edit. 2019-05-20 18:38:03 +02:00
jean-pierre charras daf09ed9fe Pcbnew: fix a (minor) lock file issue: the lock was too early set. If the file was (for some reason) not actually loaded, it was locked. Now, the file is locked only if it is actually loaded. 2019-05-20 18:37:49 +02:00
Seth Hillbrand 72794f1416 eagle: Use the "first" tag instead of pin num
Eagle parsing allows pin 1 to be different from the other pins in the
package but this is set by a tag marking the pin as "first" rather than
the actual number of the pin.

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

(cherry picked from commit dbc40096db)
2019-05-20 06:03:07 -07:00
Jon Evans b00e20b23f GerbView: fix saving of canvas type and lingering legacy menu item
Fixes: lp:1829647
* https://bugs.launchpad.net/kicad/+bug/1829647
2019-05-19 15:28:27 -04:00
John Beard e99a2181ff Correct Slovenian flag
The symbol was wrong (copied from Slovakian flag) and the
blue colour was not the same as the flag on Wikipedia (which
does admittedly seem contentious, but they seem to have reached
some kind of consensus).

(cherry picked from commit de055031a3)
2019-05-17 21:06:32 +01:00
Seth Hillbrand 65b38e8dcf pcbnew: Check for valid data before deleting
We need to check for valid rows and iterators before removing a 3d model

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

(cherry picked from commit f32c95229e)
2019-05-17 09:36:18 -07:00
Wayne Stambaugh 9b8780a2fd Pcbnew: fix bug in Eagle footprint plugin.
Some how a board object was required to fetch the line width when a
footprint is being parsed.  The problem is that there is no board
defined when loading Eagle footprint libraries so there was a nullptr
segfault as a result.  When there is no board defined, use the default
KiCad layer line widths.

Fixes lp:1829243

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

(cherry picked from commit 97166a72f5)
2019-05-17 08:40:05 -04:00
jean-pierre charras 9c0e4cae74 Eeschema: fix incorrect position of fields of a hierarchical sheet when rotated
(From master branch)

Fixes: lp:1829048
https://bugs.launchpad.net/kicad/+bug/1829048
2019-05-17 08:36:09 +02:00
Wayne Stambaugh deb387f54c A better fix for commit d34433a1.
Replace INCREMENTAL_TEXT_CTRL with wxSpinCtrlDouble because it looks
and works better.

Remove INCREMENTAL_TEXT_CTRL header and source files because the only
place they were used was in GAL_OPTIONS_PANEL.

(cherry picked from commit f08d040c02)
2019-05-15 18:19:40 -04:00
Seth Hillbrand 5d5422b4c5 Fix default button option on close
The default is meant to be "Save" but "Discard" was selected due to ID
ordering on creation.  Setting the focus before setting the default
makes the "Save" option the highlighted option that can be selected
immediately by pressing enter.

(cherry picked from commit a0f477cc5f)
2019-05-15 14:55:12 -07:00
Seth Hillbrand 85b8dd8b34 plotter: We we trying to export mm but chose in
Note that the comment in line 142 where the scale factor was set had the
correct value to indicate metric (1) but in the actual boilerplate, we
set imperial (0).  This has been around for 6-8 years, so it would seem
DXF is not our most popular export.

Note, I initially tried to use '1' to specify metric units but this was
not handled by DXF readers (QCAM, Inkscape).  Instead, scaling the page
units to inches properly seems to work.

(cherry picked from commit 0eb391b13f)
2019-05-15 14:55:00 -07:00
Wayne Stambaugh b93d34dff4 Fix GAL display options panel spin button layout on windows.
Fixes lp:1829224

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

(cherry picked from commit d34433a1df)
2019-05-15 15:01:00 -04:00
jean-pierre charras e997a7db9a Gerbview: Sync issue between the D Code drop list and the active layer
Fixes: lp:1829234
https://bugs.launchpad.net/kicad/+bug/1829234
2019-05-15 16:28:18 +02:00
Wayne Stambaugh d1a065119e Pcbnew: fix crash when deleting DRC errors from DRC dialog.
Fixes lp:1828726

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

(cherry picked from commit a32bb4e9a5)
2019-05-14 18:42:03 -04:00
Mario Luzeiro 1dab468e20 Add some epsilon value to ray dir on orthographic mode
so they will not be zero when viewing the board com the top/bot.
This was causing problems with BBox intersect function that was using
invDir values.

Fixes lp:1828747
https://bugs.launchpad.net/kicad/+bug/1828747
2019-05-14 16:10:54 +02:00
Henner Zeller c5cd0c73a3 Raytracing - a more pleasing way sequencing blocks to render.
(cherry picked from commit 2aea26de1e)
2019-05-14 09:28:55 -04:00
Wayne Stambaugh ae139403e4 Fix library table editor dialog environment variable grid column names.
Fixes lp:1825977

https://bugs.launchpad.net/kicad/+bug/1828459
(cherry picked from commit 6f27ef7f66)
2019-05-14 07:59:22 -04:00
Wayne Stambaugh d3c9154f9a Fix frame name capitalization in all about dialogs.
This is a stop gap fix.  It should be possible to use the wxFrame title
string for this but some of the frame windows have appropriated the title
string for configuration file naming purposes which is less than ideal.

Fixes lp:1825977

https://bugs.launchpad.net/kicad/+bug/1825977
(cherry picked from commit 3c4f8c1bf7)
2019-05-13 16:22:52 -04:00
jean-pierre charras caba60968a Python fp wizards: fix a few issues in qrcode_footprint_wizard.py
Fixes: lp:1828744
https://bugs.launchpad.net/kicad/+bug/1828744
2019-05-13 13:26:08 +02:00
Jeff Young 2e0def8670 Defensive coding that will possibly fix a crash when scrolling through footprints.
Fixes: lp:1828289
* https://bugs.launchpad.net/kicad/+bug/1828289

(cherry picked from commit 717b1d37be)
2019-05-11 23:55:08 +01:00
Martin McNamara 8c3d16a395 PCBnew: Fixes crosshair issue with "Place Text" and "Add Dimension".
When using "Place Text" the crosshair was freezing if cancelled before
placing text.

After the crosshair freezes, the next uses of the "Place Text" or
"Add Dimension" caused the crosshair to jump to the screen location
where the previously the crosshair was frozen.

Cancelling the "Add Dimension" caused the crosshair to jump to the
screen location where the crosshair was when cancelled on the next use
of the "Place Text" or "Add Dimension".

Fixes: lp:1822578
* https://bugs.launchpad.net/kicad/+bug/1822578
2019-05-11 06:54:40 -07:00
jean-pierre charras 3f48531da7 DIALOG_EDIT_COMPONENT_IN_LIBRARY: fix a dialog resize issue (grid not resized). 2019-05-11 10:09:32 +02:00
Mark 128cdca068 Fix for SWIG 4.0.0
(cherry picked from commit 5685174808)
2019-05-10 14:38:26 -04:00
Michael Kavanagh bd997a3900 Add Save As hotkey to footprint editor
Fixes: lp:1828481
* https://bugs.launchpad.net/kicad/+bug/1828481

(cherry picked from commit a3483f44d2)
2019-05-10 15:39:33 +01:00
Wayne Stambaugh 8e93eda449 Eeschema: fix corrupted schematic and symbol library files.
Prevent user from pasting text with carriage return and/or line feed
characters in field value edit control in the schematic symbol and symbol
library properties dialogs.

Make all objects derived from GRID_CELL_TEXT_BUTTON use validators
correctly.

Add validators to FIELDS_GRID_TABLE object for field values other than
the mandatory fields.

Create a validator to check that a string is a valid LIB_ID.

Fixes lp:1828214

https://bugs.launchpad.net/kicad/+bug/1828214
(cherry picked from commit ae54f34392)
2019-05-10 09:16:38 -04:00
John Beard a6674ecd56 Pcbnew: remove SVG from menu text
The SVG importer is an advanced config. It's not supported or
normally available in 5.1, so don't advertise in the menu.

If the advanced config is enabled, the dialog will be able
to import SVG.

This could have been "Import *Vector* Graphics" like in master,
5.1 documentation will probably still say "DXF", so keep consistent.

Fixes: lp:1821571
* https://bugs.launchpad.net/kicad/+bug/1821571
2019-05-10 12:41:29 +01:00
jean-pierre charras 654651856f Custom pads: minor fix in legacy mode related to commit a155289f. 2019-05-09 16:46:13 +02:00
jean-pierre charras c489659a20 Custom pads: fix incorrect shape of masks when the shape is a polygon with holes and the mask margin is < 0. This is mainly the solder paste layer that shows this issue. This is due to the fact SHAPE_POLY_SET::Inflate does not work fine with polygons with linked holes. SHAPE_POLY_SET::InflateWithLinkedHoles it added to fix this issue.
Fixes: lp:1828287
https://bugs.launchpad.net/kicad/+bug/1828287
2019-05-09 16:24:39 +02:00
Wayne Stambaugh 18377e0c9f Developer documentation updates.
Remove version 5 road map since version 5 has been released.

Update version 6 road map to reflect current development goals.

Cleaned out old goals from generic road map in preparation for version
7 development.

Add note to compiling document about building with Boost 1.70 on Windows.

Fix link to Linux coding style policy in KiCad Coding Style Guide.

Update tool framework documentation to reflect changes in the tool
framework code.

(cherry picked from commit 3caa4376a5)
2019-05-08 08:39:00 -04:00
jean-pierre charras cebba6c0b9 Cairo GAL: fix incorrect arc position in mirror mode. the previous fix
(c56e540e5d) did not really work.

Fix from master branch.
2019-05-08 14:25:14 +02:00
John Beard 89f9bf545d All: fix horizontal touchpad panning
Commit e10c01aaf didn't work when touchpad panning was enabled.

This commit changes it to only discard horizontal wheel events
when in "scroll mode" rather than "pan mode".

Based on a patch by Adrian Scripcă <benishor@gmail.com>.

Follow-up to fix: lp:1828080
https://bugs.launchpad.net/kicad/+bug/1828080

(cherry picked from commit e6fe220f84)
2019-05-08 11:07:45 +01:00
Adrian Scripca 055d36abd7 All: fix spurious wheel scroll events caused when using modern mice.
Modern mice feature horizontal scrolling capabilities and those end
up being treated by KiCad as regular scroll events causing confusion
among users.

The fix works by discarding the handling of wheel events other than
the ones for the vertical axis.

Fixes: lp:1828080
https://bugs.launchpad.net/kicad/+bug/1828080
(cherry picked from commit e10c01aaff)
2019-05-07 17:36:23 +01:00
John Beard 7bafc5fa8b About dialog: Add mnemonics to the buttons
(cherry picked from commit 4a3add7ac5)
2019-05-07 11:15:13 +01:00
John Beard 6946c0bedb About dialog: update wxFB version
Avoid contaminating wxFB files with version fluff, which hides real
changes in the version history.

(cherry picked from commit cc28fb18fd)
2019-05-07 11:15:13 +01:00
jean-pierre charras bb40f86daa * Eeschema: fix incorrect display of the page number in a complex hierarchy.
When, inside a complex hierarchy, one switch from an instance of a sheet to an other instance of this sheet,
the page number shown in the worksheet was not updated on screen, and the initial number was displayed.

Fix from master branch.
2019-05-07 11:02:05 +02:00
John Beard 89d198659c Format: Default to switch cases on separate lines by default
Currently, the format enforces single lines when possible, but does
not enforce readable column-based alignment (and, moreover, *removes*
such manually added alignment:

    switch( m_orientation )
    {
    case PIN_RIGHT: m_orientation = PIN_UP; break;
    case PIN_UP: m_orientation = PIN_LEFT; break;
    }

Change this to multi-line by default:

    switch( m_orientation )
    {
    case PIN_RIGHT:
        m_orientation = PIN_UP;
        break;
    case PIN_UP:
        m_orientation = PIN_LEFT;
        break;
    }

If the developer wishes for column-aligned single-line cases, this
is permitted, but much be done manually:

    switch( m_orientation )
    {
    case PIN_RIGHT: m_orientation = PIN_DOWN;  break;
    case PIN_UP:    m_orientation = PIN_RIGHT; break;
    }

CHANGE: the _clang-format file to reflect this, and add note about
manual override in the dev docs.

(cherry picked from commit 272c045c37)
2019-05-07 09:50:22 +01:00
jean-pierre charras c56e540e5d Cairo GAL: fix incorrect arc position in mirror mode. It happens in print mode and also when the Pcb view is flipped.
Fixes: lp:1824720
https://bugs.launchpad.net/kicad/+bug/1824720

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

Fixes: lp:1823147
https://bugs.launchpad.net/kicad/+bug/1823147
2019-05-06 11:30:15 +02:00
Seth Hillbrand d3fd74246f Merge remote-tracking branch 'andrei/pr-gitignore'
(cherry picked from commit 4d776034ca)

This also picks up an additional line from 45aa514591 that keeps
CMakeModules/*.cmake.  The rest of that commit does not merge cleanly.
2019-05-02 10:38:40 -07:00
Wayne Stambaugh 616061a6ca Eeschema: fix broken symbol library links.
Force the symbol library links whenever the symbol library table has been
modified.  This will use the cache as a fallback when a library has been
removed that contains links in the schematic rather than display.

Fix the SCH_COMPONENT symbol resolver when falling back to the cache.  The
resolver was using the LIB_ID ':' notation which was failing.  Replacing
':' with '_' fixed this issue.  This was also an issue when generating the
symbol message panel information.

Convert wxLogDebug to wxLogTrace in symbol resolver code path.  Add new
trace type KICAD_SYM_RESOLVE.

Fixes lp:1821606

https://bugs.launchpad.net/kicad/+bug/1821606
(cherry picked from commit 7d803437e2)
2019-05-02 12:13:30 -04:00
Tomasz Włostowski d94b8b9c0e router: copy m_maxClearance when cloning/branching PNS::NODEs
Fixes: lp:1813328
* https://bugs.launchpad.net/kicad/+bug/1813328

(cherry picked from commit 9e00f48efc)
2019-05-01 11:39:15 +01:00
John Beard 89d39cf8ff Pcbnew: use same null check as eeschema for recently used
When Pcbnew's add footprint browser is run up, it constructs
the recently used list without checking for nulls.

Although the DoAddLibrary call does internally check for
null, it's easier to filter these out before placing into
the vector in the first place.

The same logic in the symbol tree is already handled in the
same way.

(cherry picked from commit 42d20cbd96)
2019-04-29 17:00:42 +01:00
jean-pierre charras 0ba130dbd3 Pcbnew: fix in board editor crash when try to load a footprint from Add footprint tool if the latest loaded footprint was deleted. In this case, the history has a cleared link that created the crash when the dialog tried to select this deleted FootprintEnumerate
Fixes: lp:1826794
https://bugs.launchpad.net/kicad/+bug/1826794
2019-04-29 17:23:27 +02:00
John Beard 434935613c Eeschema: Fix/circumvert GTK3 tree view bug
There is a rendering bug in GTK3, which appears to be
an upstream GTK issue.

This can be worked around by, when filtering, ensuring the
*parent* item of the selected item is visible. This will
not cause the selected item to not be visible, as the selected
item will be the first shown child. So it will be visible, as long
as the list box is greater than a single row high, which it will be
in all practical scenarios.

This is done on all platforms, as it has a beneficial side-effect:
the parent library of the selection is naturally shown to the
user, so they don't need to scroll up to see what library their
current filter selection was in.

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

(cherry picked from commit 10900c918f)
2019-04-28 17:18:09 +01:00
John Beard 454585d3d2 GAL: add some trace to GAL display options config
This can be helpful when tracing where certain configurations
come from (some apps load from other apps' config basenames).

(cherry picked from commit fcc4a84e0e)
2019-04-27 14:58:50 +01:00
John Beard 65a6e341ad Eeschema: Symbol preview widget needs common config for Hi-DPI
Currently, this widget doesn't read the common library settings.
This means it doesn't use the configured DPI scaling or anti-aliasing
settings.

Use the ReadConfig method on the GAL options to fix (rather than
only ReadAppConfig).

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

(cherry picked from commit 33fe9a2761)
2019-04-27 14:58:50 +01:00
John Beard fc933034db Eeschema: fix resizing of pin table and edit symbol dialog
These dialogs had logic to avoid a table re-adjustment unless
the width changed. This was done to avoid spurious resizing
calls under GTK+3. This was commit
13249b723b, fixing bug lp:1817810.

However, by only calling event.Skip() when the width changed,
redraws were inhibited when only the height changed.

Placing the Skip() outside the width-change check fixes this,
and does not re-introduce the lp:1817810 bug (it is the column
adjust call that causes that).

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

(cherry picked from commit eccadd92fb)
2019-04-27 14:12:00 +01:00
John Beard 20c8b094d6 SHAPE_ARC: Fix bug introduced in 5813164d1.
This fixes the bug exposed in the previous commit.
The tests which exposed it now pass and expected failures
removed.

(cherry picked from commit d89d0e6b74)
2019-04-25 23:51:01 +01:00
John Beard 552ddfbdfa SHAPE_ARC: Expose bug introduced by 5813164d1 in tests
The angle needs to be added to the start angle.

Add tests to cover this:

* Check end point is correct
* Check midpoints are within tolerance

This would have prevented the bug fixed in 5813164d1,
as well as the bug fixed in this commit.

As well as failed tests, this manifests when routing across
Edge.Cuts arcs (unless they happen to start at 0 degrees
staritng angle).

Expose as expected failure to prove tests catch it.
Fix to follow in separate commit.

(cherry picked from commit 183f4fe9a5)
2019-04-25 23:51:01 +01:00
Tomasz Włostowski 9743eec3ab SHAPE_ARC: fixed polyline conversion bug introduced in e312e2b286
Fixes: lp:1826278
* https://bugs.launchpad.net/kicad/+bug/1826278

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

(cherry picked from commit 5813164d15)
2019-04-25 23:51:01 +01:00
Michael Kavanagh b3ad1dc26e PL editor: fix delete hotkey behaviour
Fixes: lp:1819419
* https://bugs.launchpad.net/kicad/+bug/1819419
2019-04-25 20:27:10 +02:00
Seth Hillbrand b6c9d4a88c Add missing header to qa
(cherry picked from commit 9c00a7a5c3)
2019-04-24 14:33:28 +01:00
Wayne Stambaugh 25b6ac61cb Begin version 5.1.2 development. 2019-04-22 17:16:51 -04:00
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
1738 changed files with 227368 additions and 188729 deletions
+19 -1
View File
@@ -1,5 +1,6 @@
boost_root
.downloads-by-cmake
.gdb_history
boost_root
Build*
build*
common/fp_lib_table_keywords.cpp
@@ -95,3 +96,20 @@ pcbnew/Info.plist
.cproject
.pydevproject
__pycache__
# Visual Studio
.vs/
.editorconfig
CMakeSettings.json
# Sublime Text
*.sublime-*
# KDevelop
.kdev4/
*.kdev4
# Translations
*.mo
i18n_status.svg
i18n_status.csv
-6
View File
@@ -40,12 +40,6 @@ CACHE_WRAPPER::~CACHE_WRAPPER()
}
FILENAME_RESOLVER* PROJECT::Get3DFilenameResolver()
{
return Get3DCacheManager()->GetResolver();
}
S3D_CACHE* PROJECT::Get3DCacheManager( bool updateProjDir )
{
wxCriticalSectionLocker lock( lock3D_wrapper );
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 5 2018)
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@@ -9,209 +9,209 @@
///////////////////////////////////////////////////////////////////////////
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 )
PANEL_PREV_3D_BASE::PANEL_PREV_3D_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name )
{
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 );
bSizerRight->Add( staticPreviewLabel, 0, wxALL, 5 );
m_SizerPanelView = new wxBoxSizer( wxVERTICAL );
bSizerRight->Add( m_SizerPanelView, 1, wxEXPAND|wxBOTTOM, 8 );
bSizerRight->Add( m_SizerPanelView, 1, wxEXPAND|wxBOTTOM, 5 );
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 = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
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 );
m_bpvLeft = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
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_bpvRight = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
bSizer3DButtons->Add( m_bpvRight, 0, wxTOP, 5 );
m_bpvFront = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
bSizer3DButtons->Add( m_bpvFront, 0, wxTOP, 5 );
m_bpvBack = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
bSizer3DButtons->Add( m_bpvBack, 0, wxTOP, 5 );
m_bpvTop = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
bSizer3DButtons->Add( m_bpvTop, 0, wxTOP, 5 );
m_bpvBottom = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
bSizer3DButtons->Add( m_bpvBottom, 0, wxTOP, 5 );
m_bpUpdate = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 );
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 );
@@ -306,5 +306,5 @@ PANEL_PREV_3D_BASE::~PANEL_PREV_3D_BASE()
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
+11 -13
View File
@@ -1,12 +1,11 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jun 5 2018)
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __PANEL_PREV_3D_BASE_H__
#define __PANEL_PREV_3D_BASE_H__
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
@@ -21,10 +20,10 @@
#include <wx/spinbutt.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/bmpbuttn.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>
@@ -34,10 +33,10 @@
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_PREV_3D_BASE
///////////////////////////////////////////////////////////////////////////////
class PANEL_PREV_3D_BASE : public wxPanel
class PANEL_PREV_3D_BASE : public wxPanel
{
private:
protected:
wxStaticText* m_staticText1;
wxTextCtrl* xscale;
@@ -74,7 +73,7 @@ class PANEL_PREV_3D_BASE : public wxPanel
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(); }
@@ -94,14 +93,13 @@ class PANEL_PREV_3D_BASE : public wxPanel
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( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~PANEL_PREV_3D_BASE();
};
#endif //__PANEL_PREV_3D_BASE_H__
@@ -24,12 +24,20 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @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 <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>
@@ -44,7 +52,7 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, MODULE*
initPanel();
// Initialize the color settings to draw the board and the footprint
m_dummyBoard->SetGeneralSettings( &aFrame->Settings() );
m_dummyBoard->SetColorsSettings( &aFrame->Settings().Colors() );
m_parentModelList = aParentModelList;
@@ -100,8 +108,8 @@ void PANEL_PREV_3D::initPanel()
m_spinXoffset,m_spinYoffset, m_spinZoffset
};
for( wxSpinButton* button : spinButtonList )
button->SetRange(INT_MIN, INT_MAX );
for( int ii = 0; ii < 9; ii++ )
spinButtonList[ii]->SetRange( INT_MIN, INT_MAX );
}
@@ -50,8 +50,8 @@
#define SCALE_INCREMENT_FINE 0.02
#define SCALE_INCREMENT 0.1
#define ROTATION_INCREMENT 90 // in degrees, for spin button command
#define ROTATION_INCREMENT_WHEEL 90 // in degrees, for mouse wheel command
#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
+6 -2
View File
@@ -44,7 +44,7 @@ if( APPLE )
endif()
find_file( S3DSG_VERSION_FILE sg_version.h
PATHS ${CMAKE_SOURCE_DIR}/include/plugins/3dapi NO_DEFAULT_PATH )
PATHS ${CMAKE_SOURCE_DIR}/include/plugins/3dapi NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
if( NOT ${S3DSG_VERSION_FILE} STREQUAL "S3DSG_VERSION_FILE-NOTFOUND" )
@@ -95,8 +95,12 @@ target_compile_definitions( kicad_3dsg PRIVATE -DCOMPILE_SGLIB )
target_link_libraries( kicad_3dsg ${wxWidgets_LIBRARIES} )
# Don't specify the ARCHIVE DESTINATION parameter to prevent
# the install of the import library on Windows
# https://cmake.org/pipermail/cmake/2011-November/047746.html
install( TARGETS
kicad_3dsg
DESTINATION ${KICAD_LIB}
RUNTIME DESTINATION ${KICAD_LIB}
LIBRARY DESTINATION ${KICAD_LIB}
COMPONENT binary
)
+5 -9
View File
@@ -65,7 +65,7 @@ CINFO3D_VISU::CINFO3D_VISU() :
m_boardSize = wxSize();
m_boardCenter = SFVEC3F( 0.0f );
m_boardBoundingBox.Reset();
m_boardBoudingBox.Reset();
m_layers_container2D.clear();
m_layers_holes2D.clear();
@@ -272,13 +272,9 @@ void CINFO3D_VISU::InitSettings( REPORTER *aStatusTextReporter )
{
wxLogTrace( m_logTrace, wxT( "CINFO3D_VISU::InitSettings" ) );
// Calculates the board bounding box
// First, use only the board outlines
EDA_RECT bbbox = m_board->ComputeBoundingBox( true );
// If no outlines, use the board with items
if( ( bbbox.GetWidth() == 0 ) && ( bbbox.GetHeight() == 0 ) )
bbbox = m_board->ComputeBoundingBox( false );
// Calculates the board bounding box (board outlines + items)
// to ensure any item, even outside the board outlines can be seen
EDA_RECT bbbox = m_board->ComputeBoundingBox( false );
// Gives a non null size to avoid issues in zoom / scale calculations
if( ( bbbox.GetWidth() == 0 ) && ( bbbox.GetHeight() == 0 ) )
@@ -415,7 +411,7 @@ void CINFO3D_VISU::InitSettings( REPORTER *aStatusTextReporter )
boardMin.z = m_layerZcoordTop[B_Adhes];
boardMax.z = m_layerZcoordTop[F_Adhes];
m_boardBoundingBox = CBBOX( boardMin, boardMax );
m_boardBoudingBox = CBBOX( boardMin, boardMax );
#ifdef PRINT_STATISTICS_3D_VIEWER
unsigned stats_startCreateBoardPolyTime = GetRunningMicroSecs();
+13 -7
View File
@@ -144,7 +144,7 @@ class CINFO3D_VISU
* @brief GetBBox3DU - Get the bbox of the pcb board
* @return the board bbox in 3d units
*/
const CBBOX &GetBBox3DU() const { return m_boardBoundingBox; }
const CBBOX &GetBBox3DU() const { return m_boardBoudingBox; }
/**
* @brief GetEpoxyThickness3DU - Get the current epoxy thickness
@@ -425,6 +425,10 @@ class CINFO3D_VISU
// Helper functions to create the board
COBJECT2D *createNewTrack( const TRACK* aTrack , int aClearanceValue ) const;
void createNewPad( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
wxSize aInflateValue ) const;
void createNewPadWithClearance( const D_PAD *aPad,
CGENERICCONTAINER2D *aDstContainer,
wxSize aClearanceValue ) const;
@@ -478,7 +482,7 @@ class CINFO3D_VISU
SHAPE_POLY_SET &aCornerBuffer,
int aWidth) const;
void transformPadsShapesWithClearanceToPolygon( const PADS &aPads,
void transformPadsShapesWithClearanceToPolygon( const DLIST<D_PAD> &aPads,
PCB_LAYER_ID aLayer,
SHAPE_POLY_SET &aCornerBuffer,
int aInflateValue,
@@ -490,10 +494,12 @@ class CINFO3D_VISU
void buildPadShapePolygon( const D_PAD *aPad,
SHAPE_POLY_SET &aCornerBuffer,
wxSize aInflateValue ) const;
wxSize aInflateValue,
int aSegmentsPerCircle,
double aCorrectionFactor ) const;
public:
public:
SFVEC3D m_BgColorBot; ///< background bottom color
SFVEC3D m_BgColorTop; ///< background top color
SFVEC3D m_BoardBodyColor; ///< in realistic mode: FR4 board color
@@ -503,7 +509,7 @@ public:
SFVEC3D m_CopperColor; ///< in realistic mode: copper color
private:
private:
/// Current board
BOARD *m_board;
@@ -541,8 +547,8 @@ private:
// Pcb board bounding boxes
/// 3d bounding box of the pcb board in 3d units
CBBOX m_boardBoundingBox;
/// 3d bouding box of the pcb board in 3d units
CBBOX m_boardBoudingBox;
/// It contains polygon contours for each layer
MAP_POLY m_layers_poly;
@@ -50,7 +50,7 @@
#include <class_text_mod.h>
#include <convert_basic_shapes_to_polygon.h>
#include <trigo.h>
#include <gr_text.h>
#include <draw_graphic_text.h>
#include <utility>
#include <vector>
@@ -64,7 +64,7 @@ static CGENERICCONTAINER2D *s_dstcontainer = NULL;
static float s_biuTo3Dunits;
static const BOARD_ITEM *s_boardItem = NULL;
// This is a call back function, used by GRText to draw the 3D text shape:
// 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* aData )
{
wxASSERT( s_dstcontainer != NULL );
@@ -87,46 +87,51 @@ void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData )
// Based on
// void TEXTE_PCB::TransformShapeWithClearanceToPolygonSet
// board_items_to_polygon_shape_transform.cpp
void CINFO3D_VISU::AddShapeWithClearanceToContainer( const TEXTE_PCB* aText,
void CINFO3D_VISU::AddShapeWithClearanceToContainer( const TEXTE_PCB* aTextPCB,
CGENERICCONTAINER2D *aDstContainer,
PCB_LAYER_ID aLayerId,
int aClearanceValue )
{
wxSize size = aText->GetTextSize();
wxSize size = aTextPCB->GetTextSize();
if( aText->IsMirrored() )
if( aTextPCB->IsMirrored() )
size.x = -size.x;
s_boardItem = (const BOARD_ITEM *) &aText;
s_boardItem = (const BOARD_ITEM *)&aTextPCB;
s_dstcontainer = aDstContainer;
s_textWidth = aText->GetThickness() + ( 2 * aClearanceValue );
s_textWidth = aTextPCB->GetThickness() + ( 2 * aClearanceValue );
s_biuTo3Dunits = m_biuTo3Dunits;
// not actually used, but needed by GRText
// not actually used, but needed by DrawGraphicText
const COLOR4D dummy_color = COLOR4D::BLACK;
if( aText->IsMultilineAllowed() )
if( aTextPCB->IsMultilineAllowed() )
{
wxArrayString strings_list;
wxStringSplit( aText->GetShownText(), strings_list, '\n' );
wxStringSplit( aTextPCB->GetShownText(), strings_list, '\n' );
std::vector<wxPoint> positions;
positions.reserve( strings_list.Count() );
aText->GetPositionsOfLinesOfMultilineText( positions, strings_list.Count() );
aTextPCB->GetPositionsOfLinesOfMultilineText( positions,
strings_list.Count() );
for( unsigned ii = 0; ii < strings_list.Count(); ++ii )
{
wxString txt = strings_list.Item( ii );
GRText( NULL, positions[ii], dummy_color, txt, aText->GetTextAngle(), size,
aText->GetHorizJustify(), aText->GetVertJustify(), aText->GetThickness(),
aText->IsItalic(), true, addTextSegmToContainer );
DrawGraphicText( NULL, NULL, positions[ii], dummy_color,
txt, aTextPCB->GetTextAngle(), size,
aTextPCB->GetHorizJustify(), aTextPCB->GetVertJustify(),
aTextPCB->GetThickness(), aTextPCB->IsItalic(),
true, addTextSegmToContainer );
}
}
else
{
GRText( NULL, aText->GetTextPos(), dummy_color, aText->GetShownText(),
aText->GetTextAngle(), size, aText->GetHorizJustify(), aText->GetVertJustify(),
aText->GetThickness(), aText->IsItalic(), true, addTextSegmToContainer );
DrawGraphicText( NULL, NULL, aTextPCB->GetTextPos(), dummy_color,
aTextPCB->GetShownText(), aTextPCB->GetTextAngle(), size,
aTextPCB->GetHorizJustify(), aTextPCB->GetVertJustify(),
aTextPCB->GetThickness(), aTextPCB->IsItalic(),
true, addTextSegmToContainer );
}
}
@@ -176,7 +181,9 @@ void CINFO3D_VISU::AddGraphicsShapesWithClearanceToContainer( const MODULE* aMod
std::vector<TEXTE_MODULE *> texts; // List of TEXTE_MODULE to convert
EDGE_MODULE* outline;
for( auto item : aModule->GraphicalItems() )
for( EDA_ITEM* item = aModule->GraphicalItemsList();
item != NULL;
item = item->Next() )
{
switch( item->Type() )
{
@@ -219,17 +226,20 @@ void CINFO3D_VISU::AddGraphicsShapesWithClearanceToContainer( const MODULE* aMod
s_dstcontainer = aDstContainer;
s_biuTo3Dunits = m_biuTo3Dunits;
for( TEXTE_MODULE* text : texts )
for( unsigned ii = 0; ii < texts.size(); ++ii )
{
s_textWidth = text->GetThickness() + ( 2 * aInflateValue );
wxSize size = text->GetTextSize();
TEXTE_MODULE *textmod = texts[ii];
s_textWidth = textmod->GetThickness() + ( 2 * aInflateValue );
wxSize size = textmod->GetTextSize();
if( text->IsMirrored() )
if( textmod->IsMirrored() )
size.x = -size.x;
GRText( NULL, text->GetTextPos(), BLACK, text->GetShownText(), text->GetDrawRotation(),
size, text->GetHorizJustify(), text->GetVertJustify(), text->GetThickness(),
text->IsItalic(), true, addTextSegmToContainer );
DrawGraphicText( NULL, NULL, textmod->GetTextPos(), BLACK,
textmod->GetShownText(), textmod->GetDrawRotation(), size,
textmod->GetHorizJustify(), textmod->GetVertJustify(),
textmod->GetThickness(), textmod->IsItalic(),
true, addTextSegmToContainer );
}
}
@@ -376,9 +386,22 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
case PAD_SHAPE_RECT:
{
// see pcbnew/board_items_to_polygon_shape_transform.cpp
wxPoint corners[4];
aPad->BuildPadPolygon( corners, wxSize( 0, 0), aPad->GetOrientation() );
bool drawOutline;
// For aClearanceValue.x == aClearanceValue.y and > 0 we use the pad shape
// and draw outlines with thicknes = aClearanceValue.
// Otherwise we draw only the inflated/deflated shape
if( aClearanceValue.x > 0 && aClearanceValue.x == aClearanceValue.y )
{
drawOutline = true;
aPad->BuildPadPolygon( corners, wxSize( 0, 0 ), aPad->GetOrientation() );
}
else
{
drawOutline = false;
aPad->BuildPadPolygon( corners, aClearanceValue, aPad->GetOrientation() );
}
SFVEC2F corners3DU[4];
@@ -406,20 +429,23 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
// Add the PAD contours
// Round segments cannot have 0-length elements, so we approximate them
// as a small circle
for( int i = 1; i <= 4; i++ )
if( drawOutline )
{
if( Is_segment_a_circle( corners3DU[i - 1], corners3DU[i & 3] ) )
for( int i = 1; i <= 4; i++ )
{
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 ) );
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 ) );
}
}
}
}
@@ -477,25 +503,6 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
}
break;
case PAD_SHAPE_CHAMFERED_RECT:
{
wxSize shapesize( aPad->GetSize() );
shapesize.x += aClearanceValue.x * 2;
shapesize.y += aClearanceValue.y * 2;
SHAPE_POLY_SET polyList; // Will contain the pad outlines in board coordinates
int corner_radius = aPad->GetRoundRectCornerRadius( shapesize );
TransformRoundChamferedRectToPolygon( polyList, PadShapePos, shapesize, aPad->GetOrientation(),
corner_radius, aPad->GetChamferRectRatio(),
aPad->GetChamferPositions(), ARC_HIGH_DEF );
// Add the PAD polygon
Convert_shape_line_polygon_to_triangles( polyList, *aDstContainer, m_biuTo3Dunits, *aPad );
}
break;
case PAD_SHAPE_CUSTOM:
{
SHAPE_POLY_SET polyList; // Will contain the pad outlines in board coordinates
@@ -568,15 +575,59 @@ COBJECT2D *CINFO3D_VISU::createNewPadDrill( const D_PAD* aPad, int aInflateValue
}
// This function pretends to be like the
// void D_PAD::BuildPadShapePolygon(
// board_items_to_polygon_shape_transform.cpp
void CINFO3D_VISU::createNewPad( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
wxSize aInflateValue ) const
{
switch( aPad->GetShape() )
{
case PAD_SHAPE_CIRCLE:
case PAD_SHAPE_OVAL:
case PAD_SHAPE_ROUNDRECT:
case PAD_SHAPE_CUSTOM:
createNewPadWithClearance( aPad, aDstContainer, aInflateValue );
break;
case PAD_SHAPE_TRAPEZOID:
case PAD_SHAPE_RECT:
wxPoint corners[4];
aPad->BuildPadPolygon( corners, aInflateValue, aPad->GetOrientation() );
// Note: for pad having a shape offset,
// the pad position is NOT the shape position
for( unsigned int ii = 0; ii < 4; ++ii )
corners[ii] += aPad->ShapePos(); // Shift origin to position
aDstContainer->Add( new CPOLYGON4PTS2D(
SFVEC2F( corners[0].x * m_biuTo3Dunits,
-corners[0].y * m_biuTo3Dunits ),
SFVEC2F( corners[1].x * m_biuTo3Dunits,
-corners[1].y * m_biuTo3Dunits ),
SFVEC2F( corners[2].x * m_biuTo3Dunits,
-corners[2].y * m_biuTo3Dunits ),
SFVEC2F( corners[3].x * m_biuTo3Dunits,
-corners[3].y * m_biuTo3Dunits ),
*aPad ) );
break;
}
}
void CINFO3D_VISU::AddPadsShapesWithClearanceToContainer( const MODULE* aModule,
CGENERICCONTAINER2D *aDstContainer,
PCB_LAYER_ID aLayerId,
int aInflateValue,
bool aSkipNPTHPadsWihNoCopper )
{
const D_PAD* pad = aModule->PadsList();
wxSize margin;
for( auto pad : aModule->Pads() )
for( ; pad != NULL; pad = pad->Next() )
{
if( !pad->IsOnLayer( aLayerId ) )
continue;
@@ -625,7 +676,7 @@ void CINFO3D_VISU::AddPadsShapesWithClearanceToContainer( const MODULE* aModule,
break;
}
createNewPadWithClearance( pad, aDstContainer, margin );
createNewPad( pad, aDstContainer, margin );
}
}
@@ -724,13 +775,14 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
const SFVEC2F center3DU( aDrawSegment->GetCenter().x * m_biuTo3Dunits,
-aDrawSegment->GetCenter().y * m_biuTo3Dunits );
float inner_radius = ( aDrawSegment->GetRadius() - linewidth / 2 ) * m_biuTo3Dunits;
float outer_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;
if( inner_radius < 0 )
inner_radius = 0;
aDstContainer->Add( new CRING2D( center3DU, inner_radius, outer_radius, *aDrawSegment ) );
aDstContainer->Add( new CRING2D( center3DU,
inner_radius,
outter_radius,
*aDrawSegment ) );
}
break;
@@ -776,9 +828,12 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
case S_CURVE:
case S_POLYGON:
{
const int segcountforcircle = ARC_APPROX_SEGMENTS_COUNT_HIGH_DEF;
const double correctionFactor = GetCircleCorrectionFactor( segcountforcircle );
SHAPE_POLY_SET polyList;
aDrawSegment->TransformShapeWithClearanceToPolygon( polyList, aClearanceValue );
aDrawSegment->TransformShapeWithClearanceToPolygon( polyList, aClearanceValue,
segcountforcircle, correctionFactor );
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
@@ -807,16 +862,13 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
SHAPE_POLY_SET polyList = SHAPE_POLY_SET( aZoneContainer->GetFilledPolysList(), true );
// This convert the poly in outline and holes
Convert_shape_line_polygon_to_triangles( polyList, *aDstContainer, m_biuTo3Dunits,
Convert_shape_line_polygon_to_triangles( polyList,
*aDstContainer,
m_biuTo3Dunits,
*aZoneContainer );
// add filled areas outlines, which are drawn with thick lines segments
// but only if filled polygons outlines have thickness
if( !aZoneContainer->GetFilledPolysUseThickness() )
return;
float line_thickness = aZoneContainer->GetMinThickness() * m_biuTo3Dunits;
// /////////////////////////////////////////////////////////////////////////
for( int i = 0; i < polyList.OutlineCount(); ++i )
{
// Add outline
@@ -832,15 +884,17 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
if( Is_segment_a_circle( start3DU, end3DU ) )
{
float radius = line_thickness/2;
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
if( radius > 0.0 ) // degenerated circles crash 3D viewer
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius,
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius ,
*aZoneContainer ) );
}
else
{
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU, line_thickness,
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU,
aZoneContainer->GetMinThickness() *
m_biuTo3Dunits,
*aZoneContainer ) );
}
}
@@ -860,7 +914,7 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
if( Is_segment_a_circle( start3DU, end3DU ) )
{
float radius = line_thickness/2;
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
if( radius > 0.0 ) // degenerated circles crash 3D viewer
aDstContainer->Add(
@@ -870,7 +924,9 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
else
{
aDstContainer->Add(
new CROUNDSEGMENT2D( start3DU, end3DU, line_thickness,
new CROUNDSEGMENT2D( start3DU, end3DU,
aZoneContainer->GetMinThickness() *
m_biuTo3Dunits,
*aZoneContainer ) );
}
}
@@ -890,17 +946,28 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsSegments( const D_PAD* aPad,
-aPad->ShapePos().y * m_biuTo3Dunits );
const int radius = aPad->GetSize().x / 2;
const float inner_radius = ( radius - aWidth / 2 ) * m_biuTo3Dunits;
const float outer_radius = ( radius + aWidth / 2 ) * m_biuTo3Dunits;
const float inner_radius = (radius - aWidth / 2) * m_biuTo3Dunits;
const float outter_radius = (radius + aWidth / 2) * m_biuTo3Dunits;
aDstContainer->Add( new CRING2D( center3DU, inner_radius, outer_radius, *aPad ) );
aDstContainer->Add( new CRING2D( center3DU,
inner_radius,
outter_radius,
*aPad ) );
return;
}
// For other shapes, draw polygon outlines
SHAPE_POLY_SET corners;
aPad->BuildPadShapePolygon( corners, wxSize( 0, 0 ) );
const int segcountforcircle = GetNrSegmentsCircle( glm::min( aPad->GetSize().x,
aPad->GetSize().y) );
const double correctionFactor = GetCircleCorrectionFactor( segcountforcircle );
aPad->BuildPadShapePolygon( corners, wxSize( 0, 0 ),
// This two factors are only expected to be used if render an oval
segcountforcircle, correctionFactor );
// Add outlines as thick segments in polygon buffer
@@ -917,13 +984,15 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsSegments( const D_PAD* aPad,
if( Is_segment_a_circle( start3DU, end3DU ) )
{
aDstContainer->Add(
new CFILLEDCIRCLE2D( start3DU, ( aWidth / 2 ) * m_biuTo3Dunits, *aPad ) );
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU,
(aWidth / 2) * m_biuTo3Dunits,
*aPad ) );
}
else
{
aDstContainer->Add(
new CROUNDSEGMENT2D( start3DU, end3DU, aWidth * m_biuTo3Dunits, *aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU,
aWidth * m_biuTo3Dunits,
*aPad ) );
}
}
}
+141 -49
View File
@@ -140,6 +140,17 @@ void CINFO3D_VISU::destroyLayers()
void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
{
// Number of segments to draw a circle using segments (used on countour zones
// and text copper elements )
const int segcountforcircle = 12;
const double correctionFactor = GetCircleCorrectionFactor( segcountforcircle );
// segments to draw a circle to build texts. Is is used only to build
// the shape of each segment of the stroke font, therefore no need to have
// many segments per circle.
const int segcountInStrokeFont = 12;
const double correctionFactorStroke = GetCircleCorrectionFactor( segcountInStrokeFont );
destroyLayers();
// Build Copper layers
@@ -166,9 +177,9 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// /////////////////////////////////////////////////////////////////////////
std::vector< const TRACK *> trackList;
trackList.clear();
trackList.reserve( m_board->Tracks().size() );
trackList.reserve( m_board->m_Track.GetCount() );
for( auto track : m_board->Tracks() )
for( const TRACK* track = m_board->m_Track; track; track = track->Next() )
{
if( !Is3DLayerEnabled( track->GetLayer() ) ) // Skip non enabled layers
continue;
@@ -382,7 +393,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// Add VIA hole contourns
// /////////////////////////////////////////////////////////
// Add outer holes of VIAs
// Add outter holes of VIAs
SHAPE_POLY_SET *layerOuterHolesPoly = NULL;
SHAPE_POLY_SET *layerInnerHolesPoly = NULL;
@@ -414,11 +425,15 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
const int holediameter = via->GetDrillValue();
const int hole_outer_radius = (holediameter / 2) + GetCopperThicknessBIU();
TransformCircleToPolygon( *layerOuterHolesPoly, via->GetStart(),
hole_outer_radius, ARC_HIGH_DEF );
TransformCircleToPolygon( *layerOuterHolesPoly,
via->GetStart(),
hole_outer_radius,
GetNrSegmentsCircle( hole_outer_radius * 2 ) );
TransformCircleToPolygon( *layerInnerHolesPoly, via->GetStart(),
holediameter / 2, ARC_HIGH_DEF );
TransformCircleToPolygon( *layerInnerHolesPoly,
via->GetStart(),
holediameter / 2,
GetNrSegmentsCircle( holediameter ) );
}
else if( lIdx == 0 ) // it only adds once the THT holes
{
@@ -427,16 +442,22 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// Add through hole contourns
// /////////////////////////////////////////////////////////
TransformCircleToPolygon( m_through_outer_holes_poly, via->GetStart(),
hole_outer_radius, ARC_HIGH_DEF );
TransformCircleToPolygon( m_through_outer_holes_poly,
via->GetStart(),
hole_outer_radius,
GetNrSegmentsCircle( hole_outer_radius * 2 ) );
TransformCircleToPolygon( m_through_inner_holes_poly, via->GetStart(),
holediameter / 2, ARC_HIGH_DEF );
TransformCircleToPolygon( m_through_inner_holes_poly,
via->GetStart(),
holediameter / 2,
GetNrSegmentsCircle( holediameter ) );
// Add samething for vias only
TransformCircleToPolygon( m_through_outer_holes_vias_poly, via->GetStart(),
hole_outer_radius, ARC_HIGH_DEF );
TransformCircleToPolygon( m_through_outer_holes_vias_poly,
via->GetStart(),
hole_outer_radius,
GetNrSegmentsCircle( hole_outer_radius * 2 ) );
//TransformCircleToPolygon( m_through_inner_holes_vias_poly,
// via->GetStart(),
@@ -476,7 +497,13 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
continue;
// Add the track contour
track->TransformShapeWithClearanceToPolygon( *layerPoly, 0 );
int nrSegments = GetNrSegmentsCircle( track->GetWidth() );
track->TransformShapeWithClearanceToPolygon(
*layerPoly,
0,
nrSegments,
GetCircleCorrectionFactor( nrSegments ) );
}
}
}
@@ -488,9 +515,11 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// Add holes of modules
// /////////////////////////////////////////////////////////////////////////
for( auto module : m_board->Modules() )
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
{
for( auto pad : module->Pads() )
const D_PAD* pad = module->PadsList();
for( ; pad; pad = pad->Next() )
{
const wxSize padHole = pad->GetDrillSize();
@@ -520,9 +549,11 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// Add contours of the pad holes (pads can be Circle or Segment holes)
// /////////////////////////////////////////////////////////////////////////
for( auto module : m_board->Modules() )
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
{
for( auto pad : module->Pads() )
const D_PAD* pad = module->PadsList();
for( ; pad; pad = pad->Next() )
{
const wxSize padHole = pad->GetDrillSize();
@@ -532,16 +563,28 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// The hole in the body is inflated by copper thickness.
const int inflate = GetCopperThicknessBIU();
// we use the hole diameter to calculate the seg count.
// for round holes, padHole.x == padHole.y
// for oblong holes, the diameter is the smaller of (padHole.x, padHole.y)
const int diam = std::min( padHole.x, padHole.y );
if( pad->GetAttribute () != PAD_ATTRIB_HOLE_NOT_PLATED )
{
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly, inflate );
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly,
inflate,
GetNrSegmentsCircle( diam ) );
pad->BuildPadDrillShapePolygon( m_through_inner_holes_poly, 0 );
pad->BuildPadDrillShapePolygon( m_through_inner_holes_poly,
0,
GetNrSegmentsCircle( diam ) );
}
else
{
// If not plated, no copper.
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly_NPTH, inflate );
pad->BuildPadDrillShapePolygon( m_through_outer_holes_poly_NPTH,
inflate,
GetNrSegmentsCircle( diam ) );
}
}
}
@@ -562,7 +605,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id];
// ADD PADS
for( auto module : m_board->Modules() )
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
{
// Note: NPTH pads are not drawn on copper layers when the pad
// has same shape as its hole
@@ -599,22 +642,25 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
// ADD PADS
for( auto module : m_board->Modules() )
for( const MODULE* module = m_board->m_Modules; module; module = module->Next() )
{
// Construct polys
// /////////////////////////////////////////////////////////////
// Note: NPTH pads are not drawn on copper layers when the pad
// has same shape as its hole
transformPadsShapesWithClearanceToPolygon( module->Pads(),
transformPadsShapesWithClearanceToPolygon( module->PadsList(),
curr_layer_id,
*layerPoly,
0,
true );
// Micro-wave modules may have items on copper layers
module->TransformGraphicTextWithClearanceToPolygonSet(
curr_layer_id, *layerPoly, 0 );
module->TransformGraphicTextWithClearanceToPolygonSet( curr_layer_id,
*layerPoly,
0,
segcountforcircle,
correctionFactor );
transformGraphicModuleEdgeToPolygonSet( module, curr_layer_id, *layerPoly );
}
@@ -644,7 +690,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
switch( item->Type() )
{
case PCB_LINE_T:
case PCB_LINE_T: // should not exist on copper layers
{
AddShapeWithClearanceToContainer( (DRAWSEGMENT*)item,
layerContainer,
@@ -703,17 +749,31 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
switch( item->Type() )
{
case PCB_LINE_T:
( (DRAWSEGMENT*) item )->TransformShapeWithClearanceToPolygon( *layerPoly, 0 );
break;
{
const int nrSegments =
GetNrSegmentsCircle( item->GetBoundingBox().GetSizeMax() );
( (DRAWSEGMENT*) item )->TransformShapeWithClearanceToPolygon(
*layerPoly,
0,
nrSegments,
GetCircleCorrectionFactor( nrSegments ) );
}
break;
case PCB_TEXT_T:
( (TEXTE_PCB*) item )->TransformShapeWithClearanceToPolygonSet( *layerPoly, 0 );
break;
( (TEXTE_PCB*) item )->TransformShapeWithClearanceToPolygonSet(
*layerPoly,
0,
segcountforcircle,
correctionFactor );
break;
default:
wxLogTrace( m_logTrace, wxT( "createLayers: item type: %d not implemented" ),
item->Type() );
break;
wxLogTrace( m_logTrace,
wxT( "createLayers: item type: %d not implemented" ),
item->Type() );
break;
}
}
}
@@ -786,7 +846,7 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
auto layerContainer = m_layers_poly.find( zone->GetLayer() );
if( layerContainer != m_layers_poly.end() )
zone->TransformSolidAreasShapesToPolygonSet( *layerContainer->second );
zone->TransformSolidAreasShapesToPolygonSet( *layerContainer->second, segcountforcircle, correctionFactor );
}
}
@@ -974,11 +1034,22 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
switch( item->Type() )
{
case PCB_LINE_T:
( (DRAWSEGMENT*) item )->TransformShapeWithClearanceToPolygon( *layerPoly, 0 );
{
const unsigned int nr_segments =
GetNrSegmentsCircle( item->GetBoundingBox().GetSizeMax() );
((DRAWSEGMENT*) item)->TransformShapeWithClearanceToPolygon( *layerPoly,
0,
nr_segments,
0.0 );
}
break;
case PCB_TEXT_T:
( (TEXTE_PCB*) item )->TransformShapeWithClearanceToPolygonSet( *layerPoly, 0 );
((TEXTE_PCB*) item)->TransformShapeWithClearanceToPolygonSet( *layerPoly,
0,
segcountInStrokeFont,
1.0 );
break;
default:
@@ -989,39 +1060,49 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// Add modules tech layers - objects
// /////////////////////////////////////////////////////////////////////
for( auto module : m_board->Modules() )
for( MODULE* module = m_board->m_Modules; module; module = module->Next() )
{
if( (curr_layer_id == F_SilkS) || (curr_layer_id == B_SilkS) )
{
D_PAD* pad = module->PadsList();
int linewidth = g_DrawDefaultLineThickness;
for( auto pad : module->Pads() )
for( ; pad; pad = pad->Next() )
{
if( !pad->IsOnLayer( curr_layer_id ) )
continue;
buildPadShapeThickOutlineAsSegments( pad, layerContainer, linewidth );
buildPadShapeThickOutlineAsSegments( pad,
layerContainer,
linewidth );
}
}
else
{
AddPadsShapesWithClearanceToContainer(
module, layerContainer, curr_layer_id, 0, false );
AddPadsShapesWithClearanceToContainer( module,
layerContainer,
curr_layer_id,
0,
false );
}
AddGraphicsShapesWithClearanceToContainer( module, layerContainer, curr_layer_id, 0 );
AddGraphicsShapesWithClearanceToContainer( module,
layerContainer,
curr_layer_id,
0 );
}
// Add modules tech layers - contours
// /////////////////////////////////////////////////////////////////////
for( auto module : m_board->Modules() )
for( MODULE* module = m_board->m_Modules; module; module = module->Next() )
{
if( (curr_layer_id == F_SilkS) || (curr_layer_id == B_SilkS) )
{
D_PAD* pad = module->PadsList();
const int linewidth = g_DrawDefaultLineThickness;
for( auto pad : module->Pads() )
for( ; pad; pad = pad->Next() )
{
if( !pad->IsOnLayer( curr_layer_id ) )
continue;
@@ -1031,12 +1112,20 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
}
else
{
transformPadsShapesWithClearanceToPolygon(
module->Pads(), curr_layer_id, *layerPoly, 0, false );
transformPadsShapesWithClearanceToPolygon( module->PadsList(),
curr_layer_id,
*layerPoly,
0,
false );
}
// On tech layers, use a poor circle approximation, only for texts (stroke font)
module->TransformGraphicTextWithClearanceToPolygonSet( curr_layer_id, *layerPoly, 0 );
module->TransformGraphicTextWithClearanceToPolygonSet( curr_layer_id,
*layerPoly,
0,
segcountInStrokeFont,
correctionFactorStroke,
segcountInStrokeFont );
// Add the remaining things with dynamic seg count for circles
transformGraphicModuleEdgeToPolygonSet( module, curr_layer_id, *layerPoly );
@@ -1066,7 +1155,10 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
if( !zone->IsOnLayer( curr_layer_id ) )
continue;
zone->TransformSolidAreasShapesToPolygonSet( *layerPoly );
zone->TransformSolidAreasShapesToPolygonSet( *layerPoly,
// Use the same segcount as stroke font
segcountInStrokeFont,
correctionFactorStroke );
}
}
+41 -22
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-2019 KiCad Developers, see AUTHORS.txt for contributors.
* 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
@@ -40,7 +40,9 @@
// but it adds the rect/trapezoid shapes with a different winding
void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
SHAPE_POLY_SET& aCornerBuffer,
wxSize aInflateValue ) const
wxSize aInflateValue,
int aSegmentsPerCircle,
double aCorrectionFactor ) const
{
wxPoint corners[4];
wxPoint PadShapePos = aPad->ShapePos(); /* Note: for pad having a shape offset,
@@ -50,7 +52,6 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
case PAD_SHAPE_CIRCLE:
case PAD_SHAPE_OVAL:
case PAD_SHAPE_ROUNDRECT:
case PAD_SHAPE_CHAMFERED_RECT:
{
// We are using TransformShapeWithClearanceToPolygon to build the shape.
// Currently, this method uses only the same inflate value for X and Y dirs.
@@ -61,7 +62,8 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
D_PAD dummy( *aPad );
wxSize new_size = aPad->GetSize() + aInflateValue + aInflateValue;
dummy.SetSize( new_size );
dummy.TransformShapeWithClearanceToPolygon( aCornerBuffer, 0 );
dummy.TransformShapeWithClearanceToPolygon( aCornerBuffer, 0,
aSegmentsPerCircle, aCorrectionFactor );
}
break;
@@ -87,17 +89,8 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
case PAD_SHAPE_CUSTOM:
{
SHAPE_POLY_SET polyList; // Will contain the pad outlines in board coordinates
auto inflate_val = std::max( aInflateValue.x, aInflateValue.y );
polyList.Append( aPad->GetCustomShapeAsPolygon() );
aPad->CustomShapeAsPolygonToBoardPosition( &polyList, aPad->ShapePos(), aPad->GetOrientation() );
if( inflate_val > 0 )
{
int numSegs = GetNrSegmentsCircle( inflate_val );
polyList.Inflate( inflate_val, numSegs );
}
aCornerBuffer.Append( polyList );
}
break;
@@ -111,8 +104,11 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
{
if( aPad->GetShape() == PAD_SHAPE_CIRCLE ) // Draw a ring
{
unsigned int nr_sides_per_circle = GetNrSegmentsCircle( ( aPad->GetSize().x / 2 +
aWidth / 2 ) * 2 );
TransformRingToPolygon( aCornerBuffer, aPad->ShapePos(),
aPad->GetSize().x / 2, ARC_HIGH_DEF, aWidth );
aPad->GetSize().x / 2, nr_sides_per_circle, aWidth );
return;
}
@@ -120,7 +116,11 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
// For other shapes, draw polygon outlines
SHAPE_POLY_SET corners;
buildPadShapePolygon( aPad, corners, wxSize( 0, 0 ) );
unsigned int nr_sides_per_circle = GetNrSegmentsCircle( glm::min( aPad->GetSize().x,
aPad->GetSize().y) );
buildPadShapePolygon( aPad, corners, wxSize( 0, 0 ),
nr_sides_per_circle,
GetCircleCorrectionFactor( nr_sides_per_circle ) );
// Add outlines as thick segments in polygon buffer
@@ -131,21 +131,26 @@ void CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
const VECTOR2I& a = path.CPoint( ii );
const VECTOR2I& b = path.CPoint( ii + 1 );
TransformRoundedEndsSegmentToPolygon( aCornerBuffer, wxPoint( a.x, a.y ),
wxPoint( b.x, b.y ), ARC_HIGH_DEF, aWidth );
TransformRoundedEndsSegmentToPolygon( aCornerBuffer,
wxPoint( a.x, a.y ),
wxPoint( b.x, b.y ),
nr_sides_per_circle,
aWidth );
}
}
// Based on the same function name in board_items_to_polyshape_transform.cpp
// It was implemented here to allow dynamic segments count per pad shape
void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const PADS& aPads, PCB_LAYER_ID aLayer,
void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const DLIST<D_PAD>& aPads, PCB_LAYER_ID aLayer,
SHAPE_POLY_SET& aCornerBuffer,
int aInflateValue,
bool aSkipNPTHPadsWihNoCopper ) const
{
const D_PAD* pad = aPads;
wxSize margin;
for( auto pad : aPads )
for( ; pad != NULL; pad = pad->Next() )
{
if( !pad->IsOnLayer(aLayer) )
continue;
@@ -194,7 +199,11 @@ void CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon( const PADS& aPads,
break;
}
buildPadShapePolygon( pad, aCornerBuffer, margin );
unsigned int aCircleToSegmentsCount = GetNrSegmentsCircle( pad->GetSize().x );
double aCorrectionFactor = GetCircleCorrectionFactor( aCircleToSegmentsCount );
buildPadShapePolygon( pad, aCornerBuffer, margin,
aCircleToSegmentsCount, aCorrectionFactor );
}
}
@@ -202,7 +211,9 @@ void CINFO3D_VISU::transformGraphicModuleEdgeToPolygonSet( const MODULE *aModule
PCB_LAYER_ID aLayer,
SHAPE_POLY_SET& aCornerBuffer ) const
{
for( auto item : aModule->GraphicalItems() )
for( const EDA_ITEM* item = aModule->GraphicalItemsList();
item != NULL;
item = item->Next() )
{
switch( item->Type() )
{
@@ -213,7 +224,15 @@ void CINFO3D_VISU::transformGraphicModuleEdgeToPolygonSet( const MODULE *aModule
if( outline->GetLayer() != aLayer )
break;
outline->TransformShapeWithClearanceToPolygon( aCornerBuffer, 0 );
unsigned int aCircleToSegmentsCount =
GetNrSegmentsCircle( outline->GetBoundingBox().GetSizeMax() );
double aCorrectionFactor = GetCircleCorrectionFactor( aCircleToSegmentsCount );
outline->TransformShapeWithClearanceToPolygon( aCornerBuffer,
0,
aCircleToSegmentsCount,
aCorrectionFactor );
}
break;
+77 -45
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-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2020 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
@@ -45,8 +45,6 @@
#include <hotkeys_basic.h>
#include <menus_helpers.h>
#include <widgets/wx_busy_indicator.h>
/**
* Flag to enable 3D canvas debug tracing.
@@ -59,6 +57,9 @@ const wxChar * EDA_3D_CANVAS::m_logTrace = wxT( "KI_TRACE_EDA_3D_CANVAS" );
const float EDA_3D_CANVAS::m_delta_move_step_factor = 0.7f;
// A custom event, used to call DoRePaint during an idle time
wxDEFINE_EVENT( wxEVT_REFRESH_CUSTOM_COMMAND, wxEvent);
BEGIN_EVENT_TABLE( EDA_3D_CANVAS, wxGLCanvas )
EVT_PAINT( EDA_3D_CANVAS::OnPaint )
@@ -80,6 +81,7 @@ BEGIN_EVENT_TABLE( EDA_3D_CANVAS, wxGLCanvas )
// other events
EVT_ERASE_BACKGROUND( EDA_3D_CANVAS::OnEraseBackground )
EVT_CUSTOM(wxEVT_REFRESH_CUSTOM_COMMAND, ID_CUSTOM_EVENT_1, EDA_3D_CANVAS::OnRefreshRequest )
EVT_MENU_RANGE( ID_POPUP_3D_VIEW_START,
ID_POPUP_3D_VIEW_END, EDA_3D_CANVAS::OnPopUpMenu )
@@ -143,11 +145,6 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow *aParent,
wxASSERT( m_3d_render_raytracing != NULL );
wxASSERT( m_3d_render_ogl_legacy != NULL );
auto busy_indicator_factory = []() { return std::make_unique<WX_BUSY_INDICATOR>(); };
m_3d_render_raytracing->SetBusyIndicatorFactory( busy_indicator_factory );
m_3d_render_ogl_legacy->SetBusyIndicatorFactory( busy_indicator_factory );
RenderEngineChanged();
wxASSERT( aBoard != NULL );
@@ -319,17 +316,22 @@ void EDA_3D_CANVAS::DisplayStatus()
}
void EDA_3D_CANVAS::OnPaint( wxPaintEvent &event )
void EDA_3D_CANVAS::OnPaint( wxPaintEvent& aEvent )
{
// Please have a look at:
// https://lists.launchpad.net/kicad-developers/msg25149.html
// wxPaintDC( this );
// event.Skip( false );
// aEvent.Skip( false );
DoRePaint();
}
void EDA_3D_CANVAS::DoRePaint()
{
// SwapBuffer requires the window to be shown before calling
if( !IsShownOnScreen() )
{
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::OnPaint !IsShown" );
wxLogTrace( m_logTrace, "EDA_3D_CANVAS::DoRePaint !IsShown" );
return;
}
@@ -660,42 +662,79 @@ void EDA_3D_CANVAS::OnRightClick( wxMouseEvent &event )
wxPoint pos;
wxMenu PopUpMenu;
wxString msg;
pos.x = event.GetX();
pos.y = event.GetY();
msg = AddHotkeyName( _( "Zoom +" ), GetHotkeyConfig(),
ID_POPUP_ZOOMIN );
AddMenuItem( &PopUpMenu, ID_POPUP_ZOOMIN,
_( "Zoom +\tF1" ), KiBitmap( zoom_in_xpm ) );
msg, KiBitmap( zoom_in_xpm ) );
msg = AddHotkeyName( _( "Zoom -" ), GetHotkeyConfig(),
ID_POPUP_ZOOMOUT );
AddMenuItem( &PopUpMenu, ID_POPUP_ZOOMOUT,
_( "Zoom -\tF2" ), KiBitmap( zoom_out_xpm ) );
msg, KiBitmap( zoom_out_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Top View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_ZPOS );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_ZPOS,
_( "Top View\tZ" ), KiBitmap( axis3d_top_xpm ) );
msg, KiBitmap( axis3d_top_xpm ) );
msg = AddHotkeyName( _( "Bottom View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_ZNEG );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_ZNEG,
_( "Bottom View\tShift+Z" ), KiBitmap( axis3d_bottom_xpm ) );
msg, KiBitmap( axis3d_bottom_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Right View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_XPOS );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_XPOS,
_( "Right View\tX" ), KiBitmap( axis3d_right_xpm ) );
msg, KiBitmap( axis3d_right_xpm ) );
msg = AddHotkeyName( _( "Left View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_XNEG );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_XNEG,
_( "Left View\tShift+X" ), KiBitmap( axis3d_left_xpm ) );
msg, KiBitmap( axis3d_left_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Front View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_YPOS );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_YPOS,
_( "Front View\tY" ), KiBitmap( axis3d_front_xpm ) );
msg, KiBitmap( axis3d_front_xpm ) );
msg = AddHotkeyName( _( "Back View" ), GetHotkeyConfig(),
ID_POPUP_VIEW_YNEG );
AddMenuItem( &PopUpMenu, ID_POPUP_VIEW_YNEG,
_( "Back View\tShift+Y" ), KiBitmap( axis3d_back_xpm ) );
msg, KiBitmap( axis3d_back_xpm ) );
PopUpMenu.AppendSeparator();
msg = AddHotkeyName( _( "Move Left <-" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_LEFT );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_LEFT,
_( "Move Left <-\tLeft" ), KiBitmap( left_xpm ) );
msg, KiBitmap( left_xpm ) );
msg = AddHotkeyName( _( "Move Right ->" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_RIGHT );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_RIGHT,
_( "Move Right ->\tRight" ), KiBitmap( right_xpm ) );
msg, KiBitmap( right_xpm ) );
msg = AddHotkeyName( _( "Move Up ^" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_UP );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_UP,
_( "Move Up ^\tUp" ), KiBitmap( up_xpm ) );
msg, KiBitmap( up_xpm ) );
msg = AddHotkeyName( _( "Move Down" ), GetHotkeyConfig(),
ID_POPUP_MOVE3D_DOWN );
AddMenuItem( &PopUpMenu, ID_POPUP_MOVE3D_DOWN,
_( "Move Down\tDown" ), KiBitmap( down_xpm ) );
msg, KiBitmap( down_xpm ) );
PopupMenu( &PopUpMenu, pos );
}
@@ -826,13 +865,13 @@ void EDA_3D_CANVAS::restart_editingTimeOut_Timer()
void EDA_3D_CANVAS::OnTimerTimeout_Redraw( wxTimerEvent &event )
{
(void)event;
Request_refresh( true );
}
//Refresh();
//Update();
wxPaintEvent redrawEvent;
wxPostEvent( this, redrawEvent );
void EDA_3D_CANVAS::OnRefreshRequest( wxEvent& aEvent )
{
DoRePaint();
}
@@ -840,22 +879,12 @@ void EDA_3D_CANVAS::Request_refresh( bool aRedrawImmediately )
{
if( aRedrawImmediately )
{
// On some systems, just calling Refresh does not work always
// (Issue experienced on Win7 MSYS2)
//Refresh();
//Update();
// Using PostEvent will take priority to other events, like
// mouse movements, keys, etc.
wxPaintEvent redrawEvent;
// Just calling Refresh() does not work always
// Using an event to call DoRepaint ensure the repaint code will be executed,
// and PostEvent will take priority to other events like mouse movements, keys, etc.
// and is executed during the next idle time
wxCommandEvent redrawEvent( wxEVT_REFRESH_CUSTOM_COMMAND, ID_CUSTOM_EVENT_1 );
wxPostEvent( this, redrawEvent );
// This behaves the same
// wxQueueEvent( this,
// From wxWidget documentation: "The heap-allocated and
// non-NULL event to queue, the function takes ownership of it."
// new wxPaintEvent()
// );
}
else
{
@@ -1055,7 +1084,10 @@ bool EDA_3D_CANVAS::SetView3D( int aKeycode )
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 ) );
// The rotation angle should be 180.
// We use 179.999 (180 - epsilon) to avoid a full 360 deg rotation when
// using 180 deg if the previous rotated position was already 180 deg
m_settings.CameraGet().RotateZ_T1( glm::radians( -179.999f ) );
request_start_moving_camera();
return true;
@@ -1071,7 +1103,7 @@ bool EDA_3D_CANVAS::SetView3D( int aKeycode )
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 ) );
m_settings.CameraGet().RotateY_T1( glm::radians( 179.999f ) ); // Rotation = 180-epsilon
request_start_moving_camera(
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return true;
+18 -2
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-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2020 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
@@ -128,12 +128,28 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
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 );
/** Called by a wxPaintEvent event
*/
void OnPaint( wxPaintEvent& aEvent );
/**
* The actual function to repaint the canvas.
* It is usually called by OnPaint() but because it does not use a wxPaintDC
* it can be called outside a wxPaintEvent
*/
void DoRePaint();
void OnEraseBackground( wxEraseEvent &event );
void OnRefreshRequest( wxEvent& aEvent );
void OnMouseWheel( wxMouseEvent &event );
#if wxCHECK_VERSION( 3, 1, 0 ) || defined( USE_OSX_MAGNIFY_EVENT )
@@ -745,7 +745,9 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
// /////////////////////////////////////////////////////////////////////////
// Insert vias holes (vertical cylinders)
for( auto track : m_settings.GetBoard()->Tracks() )
for( const TRACK* track = m_settings.GetBoard()->m_Track;
track;
track = track->Next() )
{
if( track->Type() == PCB_VIA_T )
{
@@ -798,9 +800,11 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
tht_inner_holes_poly.RemoveAllContours();
// Insert pads holes (vertical cylinders)
for( const auto module : m_settings.GetBoard()->Modules() )
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
module;
module = module->Next() )
{
for( auto pad : module->Pads() )
for( const D_PAD* pad = module->PadsList(); pad; pad = pad->Next() )
{
if( pad->GetAttribute() != PAD_ATTRIB_HOLE_NOT_PLATED )
{
@@ -819,10 +823,13 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
double correctionFactor = m_settings.GetCircleCorrectionFactor( nrSegments );
int correction = radius * ( correctionFactor - 1 );
pad->BuildPadDrillShapePolygon(
tht_outer_holes_poly, copperThickness + correction );
pad->BuildPadDrillShapePolygon( tht_outer_holes_poly,
copperThickness + correction,
nrSegments );
pad->BuildPadDrillShapePolygon( tht_inner_holes_poly, correction );
pad->BuildPadDrillShapePolygon( tht_inner_holes_poly,
correction,
nrSegments );
}
}
}
@@ -903,7 +910,8 @@ void C3D_RENDER_OGL_LEGACY::load_3D_models( REPORTER *aStatusTextReporter )
return;
// Go for all modules
for( auto module : m_settings.GetBoard()->Modules() )
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
module; module = module->Next() )
{
if( !module->Models().empty() )
{
@@ -198,6 +198,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
0.00f, 0.30f );
m_materials.m_Copper.m_Shininess = shininessfactor * 128.0f;
m_materials.m_Copper.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Paste material mixed with paste color
@@ -213,6 +214,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
m_settings.m_SolderPasteColor.b );
m_materials.m_Paste.m_Shininess = 0.1f * 128.0f;
m_materials.m_Paste.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Silk screen material mixed with silk screen color
@@ -228,6 +230,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
m_settings.m_SilkScreenColor.b + 0.10f );
m_materials.m_SilkS.m_Shininess = 0.078125f * 128.0f;
m_materials.m_SilkS.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Solder mask material mixed with solder mask color
@@ -244,6 +247,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
m_materials.m_SolderMask.m_Shininess = 0.8f * 128.0f;
m_materials.m_SolderMask.m_Transparency = 0.17f;
m_materials.m_SolderMask.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Epoxy material
@@ -258,6 +262,7 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
20.0f / 255.0f );
m_materials.m_EpoxyBoard.m_Shininess = 0.1f * 128.0f;
m_materials.m_EpoxyBoard.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
}
else // Technical Mode
{
@@ -269,34 +274,40 @@ void C3D_RENDER_OGL_LEGACY::setupMaterials()
m_materials.m_Copper.m_Ambient = matAmbientColor;
m_materials.m_Copper.m_Specular = matSpecularColor;
m_materials.m_Copper.m_Shininess = matShininess;
m_materials.m_Copper.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Paste material
m_materials.m_Paste.m_Ambient = matAmbientColor;
m_materials.m_Paste.m_Specular = matSpecularColor;
m_materials.m_Paste.m_Shininess = matShininess;
m_materials.m_Paste.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Silk screen material
m_materials.m_SilkS.m_Ambient = matAmbientColor;
m_materials.m_SilkS.m_Specular = matSpecularColor;
m_materials.m_SilkS.m_Shininess = matShininess;
m_materials.m_SilkS.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Solder mask material
m_materials.m_SolderMask.m_Ambient = matAmbientColor;
m_materials.m_SolderMask.m_Specular = matSpecularColor;
m_materials.m_SolderMask.m_Shininess = matShininess;
m_materials.m_SolderMask.m_Transparency = 0.17f;
m_materials.m_SolderMask.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Epoxy material
m_materials.m_EpoxyBoard.m_Ambient = matAmbientColor;
m_materials.m_EpoxyBoard.m_Diffuse = m_settings.m_BoardBodyColor;
m_materials.m_EpoxyBoard.m_Specular = matSpecularColor;
m_materials.m_EpoxyBoard.m_Shininess = matShininess;
m_materials.m_EpoxyBoard.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
// Gray material (used for example in technical vias and pad holes)
m_materials.m_GrayMaterial.m_Ambient = SFVEC3F( 0.8f, 0.8f, 0.8f );
m_materials.m_GrayMaterial.m_Diffuse = SFVEC3F( 0.3f, 0.3f, 0.3f );
m_materials.m_GrayMaterial.m_Specular = SFVEC3F( 0.4f, 0.4f, 0.4f );
m_materials.m_GrayMaterial.m_Shininess = 0.01f * 128.0f;
m_materials.m_GrayMaterial.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
}
}
@@ -347,6 +358,7 @@ void C3D_RENDER_OGL_LEGACY::set_layer_material( PCB_LAYER_ID aLayerID )
m_materials.m_Plastic.m_Diffuse.b * 0.7f );
m_materials.m_Plastic.m_Shininess = 0.078125f * 128.0f;
m_materials.m_Plastic.m_Emissive = SFVEC3F( 0.0f, 0.0f, 0.0f );
OGL_SetMaterial( m_materials.m_Plastic );
break;
@@ -472,7 +484,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving,
if( m_reloadRequested )
{
std::unique_ptr<BUSY_INDICATOR> busy = CreateBusyIndicator();
wxBusyCursor dummy;
if( aStatusTextReporter )
aStatusTextReporter->Report( _( "Loading..." ) );
@@ -980,13 +992,18 @@ void C3D_RENDER_OGL_LEGACY::render_3D_models( bool aRenderTopOrBot,
bool aRenderTransparentOnly )
{
// Go for all modules
for( auto module : m_settings.GetBoard()->Modules() )
if( m_settings.GetBoard()->m_Modules.GetCount() )
{
if( !module->Models().empty() )
if( m_settings.ShouldModuleBeDisplayed( (MODULE_ATTR_T) module->GetAttributes() ) )
if( ( aRenderTopOrBot && !module->IsFlipped() )
|| ( !aRenderTopOrBot && module->IsFlipped() ) )
render_3D_module( module, aRenderTransparentOnly );
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
module;
module = module->Next() )
{
if( !module->Models().empty() )
if( m_settings.ShouldModuleBeDisplayed( (MODULE_ATTR_T)module->GetAttributes() ) )
if( ( aRenderTopOrBot && !module->IsFlipped()) ||
(!aRenderTopOrBot && module->IsFlipped()) )
render_3D_module( module, aRenderTransparentOnly );
}
}
}
@@ -286,7 +286,9 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
m_outlineBoard2dObjects = new CCONTAINER2D;
if( ((const SHAPE_POLY_SET &)m_settings.GetBoardPoly()).OutlineCount() == 1 )
const int outlineCount = m_settings.GetBoardPoly().OutlineCount();
if( outlineCount > 0 )
{
float divFactor = 0.0f;
@@ -299,12 +301,16 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
SHAPE_POLY_SET boardPolyCopy = m_settings.GetBoardPoly();
boardPolyCopy.Fracture( SHAPE_POLY_SET::PM_FAST );
Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
boardPolyCopy,
*m_outlineBoard2dObjects,
m_settings.BiuTo3Dunits(),
divFactor,
(const BOARD_ITEM &)*m_settings.GetBoard() );
for( int iOutlinePolyIdx = 0; iOutlinePolyIdx < outlineCount; iOutlinePolyIdx++ )
{
Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
boardPolyCopy,
*m_outlineBoard2dObjects,
m_settings.BiuTo3Dunits(),
divFactor,
*dynamic_cast<const BOARD_ITEM*>( m_settings.GetBoard() ),
iOutlinePolyIdx );
}
if( m_settings.GetFlag( FL_SHOW_BOARD_BODY ) )
{
@@ -443,6 +449,10 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
++ii )
{
PCB_LAYER_ID layer_id = static_cast<PCB_LAYER_ID>(ii->first);
const CBVHCONTAINER2D *container2d = static_cast<const CBVHCONTAINER2D *>(ii->second);
if( !container2d )
continue;
// Mask kayers are not processed here because they are a special case
if( (layer_id == B_Mask) || (layer_id == F_Mask) )
@@ -503,7 +513,6 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
break;
}
const CBVHCONTAINER2D *container2d = static_cast<const CBVHCONTAINER2D *>(ii->second);
const LIST_OBJECT2D &listObject2d = container2d->GetList();
for( LIST_OBJECT2D::const_iterator itemOnLayer = listObject2d.begin();
@@ -649,6 +658,9 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
const CBVHCONTAINER2D *containerLayer2d =
static_cast<const CBVHCONTAINER2D *>(ii->second);
if( !containerLayer2d )
continue;
// Only get the Solder mask layers
if( !((layer_id == B_Mask) || (layer_id == F_Mask)) )
continue;
@@ -1076,7 +1088,7 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const D_PAD* aPad )
width * m_settings.BiuTo3Dunits(),
*aPad );
CROUNDSEGMENT2D *outerSeg = new CROUNDSEGMENT2D(
CROUNDSEGMENT2D *outterSeg = new CROUNDSEGMENT2D(
SFVEC2F( start.x * m_settings.BiuTo3Dunits(),
-start.y * m_settings.BiuTo3Dunits() ),
SFVEC2F( end.x * m_settings.BiuTo3Dunits(),
@@ -1090,14 +1102,14 @@ void C3D_RENDER_RAYTRACING::insert3DPadHole( const D_PAD* aPad )
std::vector<const COBJECT2D *> *object2d_B = new std::vector<const COBJECT2D *>();
object2d_B->push_back( innerSeg );
CITEMLAYERCSG2D *itemCSG2d = new CITEMLAYERCSG2D( outerSeg,
CITEMLAYERCSG2D *itemCSG2d = new CITEMLAYERCSG2D( outterSeg,
object2d_B,
CSGITEM_FULL,
*aPad );
m_containerWithObjectsToDelete.Add( itemCSG2d );
m_containerWithObjectsToDelete.Add( innerSeg );
m_containerWithObjectsToDelete.Add( outerSeg );
m_containerWithObjectsToDelete.Add( outterSeg );
object2d_A = itemCSG2d;
}
@@ -1171,7 +1183,9 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container()
// /////////////////////////////////////////////////////////////////////////
// Insert vias holes (vertical cylinders)
for( auto track : m_settings.GetBoard()->Tracks() )
for( const TRACK* track = m_settings.GetBoard()->m_Track;
track;
track = track->Next() )
{
if( track->Type() == PCB_VIA_T )
{
@@ -1181,9 +1195,11 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container()
}
// Insert pads holes (vertical cylinders)
for( auto module : m_settings.GetBoard()->Modules() )
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
module;
module = module->Next() )
{
for( auto pad : module->Pads() )
for( const D_PAD* pad = module->PadsList(); pad; pad = pad->Next() )
if( pad->GetAttribute () != PAD_ATTRIB_HOLE_NOT_PLATED )
{
insert3DPadHole( pad );
@@ -1195,7 +1211,9 @@ void C3D_RENDER_RAYTRACING::add_3D_vias_and_pads_to_container()
void C3D_RENDER_RAYTRACING::load_3D_models()
{
// Go for all modules
for( auto module : m_settings.GetBoard()->Modules() )
for( const MODULE* module = m_settings.GetBoard()->m_Modules;
module;
module = module->Next() )
{
if( (!module->Models().empty() ) &&
m_settings.ShouldModuleBeDisplayed( (MODULE_ATTR_T)module->GetAttributes() ) )
@@ -1,4 +1,4 @@
/*
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
@@ -167,7 +167,7 @@ bool C3D_RENDER_RAYTRACING::Redraw( bool aIsMoving, REPORTER *aStatusTextReporte
initialize_block_positions();
}
std::unique_ptr<BUSY_INDICATOR> busy = CreateBusyIndicator();
wxBusyCursor dummy;
// Reload board if it was requested
// /////////////////////////////////////////////////////////////////////////
@@ -109,9 +109,9 @@ public:
float *aOutT,
SFVEC2F *aNormalOut ) const = 0;
/**
* Function IsBBoxInside
* @brief Tests if the bounding is out, intersects or is complety inside
/** Function IsBBoxInside
* @brief Tests if the bouding is out, intersects or is complety inside
* @param aBBox - The bounding box to test
* @return INTERSECTION_RESULT
*/
virtual INTERSECTION_RESULT IsBBoxInside( const CBBOX2D &aBBox ) const = 0;
@@ -408,17 +408,16 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
CGENERICCONTAINER2D &aDstContainer,
float aBiuTo3DunitsScale,
float aDivFactor,
const BOARD_ITEM &aBoardItem )
const BOARD_ITEM &aBoardItem,
int aPolyIndex )
{
BOX2I pathBounds = aMainPath.BBox();
// Get the path
wxASSERT( aMainPath.OutlineCount() == 1 );
const SHAPE_POLY_SET::POLYGON& curr_polywithholes = aMainPath.CPolygon( 0 );
wxASSERT( aPolyIndex < aMainPath.OutlineCount() );
wxASSERT( curr_polywithholes.size() == 1 );
const SHAPE_LINE_CHAIN& path = curr_polywithholes[0]; // a simple polygon
const SHAPE_LINE_CHAIN& path = aMainPath.COutline( aPolyIndex );
BOX2I pathBounds = path.BBox();
// Convert the points to segments class
CBBOX2D bbox;
@@ -430,8 +429,10 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
// Contains a closed polygon used to calc if points are inside
SEGMENTS segments;
segments_and_normals.resize( path.PointCount() );
segments.resize( path.PointCount() );
segments_and_normals.reserve( path.PointCount() );
segments.reserve( path.PointCount() );
SFVEC2F prevPoint;
for( int i = 0; i < path.PointCount(); i++ )
{
@@ -440,9 +441,23 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
const SFVEC2F point ( (float)( a.x) * aBiuTo3DunitsScale,
(float)(-a.y) * aBiuTo3DunitsScale );
bbox.Union( point );
segments_and_normals[i].m_Start = point;
segments[i].m_Start = point;
// Only add points that are not coincident
if( (i == 0) ||
(fabs(prevPoint.x - point.x) > FLT_EPSILON) ||
(fabs(prevPoint.y - point.y) > FLT_EPSILON) )
{
prevPoint = point;
bbox.Union( point );
SEGMENT_WITH_NORMALS sn;
sn.m_Start = point;
segments_and_normals.push_back( sn );
POLYSEGMENT ps;
ps.m_Start = point;
segments.push_back( ps );
}
}
bbox.ScaleNextUp();
@@ -518,13 +533,13 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
segments_and_normals[i].m_Normals.m_Start = normalSeg;
else
segments_and_normals[i].m_Normals.m_Start =
glm::normalize( (((normalBeforeSeg * dotBefore ) + normalSeg) * 0.5f) );
glm::normalize( (normalBeforeSeg * dotBefore ) + normalSeg );
if( dotAfter < 0.7f )
segments_and_normals[i].m_Normals.m_End = normalSeg;
else
segments_and_normals[i].m_Normals.m_End =
glm::normalize( (((normalAfterSeg * dotAfter ) + normalSeg) * 0.5f) );
glm::normalize( (normalAfterSeg * dotAfter ) + normalSeg );
}
if( aDivFactor == 0.0f )
@@ -751,7 +766,7 @@ void Polygon2d_TestModule()
aPath[2] = ClipperLib::IntPoint( 2, 2 );
aPath[3] = ClipperLib::IntPoint( -2, 2 );
// It must be an outer polygon
// It must be an outter polygon
wxASSERT( ClipperLib::Orientation( aPath ) );
polygon_Convert( aPath, aSegments, 1.0f );
@@ -86,7 +86,7 @@ typedef struct
class CPOLYGONBLOCK2D : public COBJECT2D
{
private:
/// This is the outer part of the polygon. This list is used to test a ray
/// This is the outter part of the polygon. This list is used to test a ray
/// intersection with the boundaries of this sub polygon.
/// It contains also the interpolated normals that are passed from the main
/// polygon.
@@ -148,7 +148,8 @@ void Convert_path_polygon_to_polygon_blocks_and_dummy_blocks(
CGENERICCONTAINER2D &aDstContainer,
float aBiuTo3DunitsScale,
float aDivFactor,
const BOARD_ITEM &aBoardItem );
const BOARD_ITEM &aBoardItem,
int aPolyIndex );
void Polygon2d_TestModule();
@@ -88,7 +88,7 @@ bool CPOLYGON4PTS2D::Intersects( const CBBOX2D &aBBox ) const
if( !m_bbox.Intersects( aBBox ) )
return false;
// Check if the bounding box complety have inside the small bounding box
// Check if the bouding box complety have inside the small bouding box
if( (aBBox.Max().x > m_bbox.Max().x) &&
(aBBox.Max().y > m_bbox.Max().x) &&
(aBBox.Min().x < m_bbox.Min().x) &&
@@ -87,15 +87,15 @@ bool CRING2D::Intersect( const RAYSEG2D &aSegRay,
// dd*t^2 + (2*qd)*t + (qq-r^2) = 0
const float discriminantsqr = qd * qd - qq;
const float discriminantsqr_outer = discriminantsqr + m_outer_radius_squared;
const float discriminantsqr_outter = discriminantsqr + m_outer_radius_squared;
// If the discriminant is less than zero, there is no intersection
if( discriminantsqr_outer < FLT_EPSILON )
if( discriminantsqr_outter < FLT_EPSILON )
return false;
// Otherwise check and make sure that the intersections occur on the ray (t
// > 0) and return the closer one
const float discriminant = sqrt( discriminantsqr_outer );
const float discriminant = sqrt( discriminantsqr_outter );
float t = (-qd - discriminant);
if( (t > FLT_EPSILON) && (t < aSegRay.m_Length) )
@@ -83,7 +83,7 @@ public:
CROUNDSEG( const SFVEC2F &aStart,
const SFVEC2F &aEnd,
float aInnerRadius,
float aOuterRadius,
float aOutterRadius,
float aZmin,
float aZmax );
@@ -102,9 +102,9 @@ private:
float m_inner_radius;
float m_inner_radius_squared;
float m_inner_inv_radius;
float m_outer_radius;
float m_outer_radius_squared;
float m_outer_inv_radius;
float m_outter_radius;
float m_outter_radius_squared;
float m_outter_inv_radius;
float m_width;
float m_seglen_over_two_squared;
};
@@ -54,19 +54,3 @@ C3D_RENDER_BASE::~C3D_RENDER_BASE()
{
}
void C3D_RENDER_BASE::SetBusyIndicatorFactory( BUSY_INDICATOR::FACTORY aNewFactory )
{
m_busyIndicatorFactory = aNewFactory;
}
std::unique_ptr<BUSY_INDICATOR> C3D_RENDER_BASE::CreateBusyIndicator() const
{
std::unique_ptr<BUSY_INDICATOR> busy;
if( m_busyIndicatorFactory )
busy = m_busyIndicatorFactory();
return busy;
}
-19
View File
@@ -35,8 +35,6 @@
#include "../3d_canvas/cinfo3d_visu.h"
#include <reporter.h>
#include <widgets/busy_indicator.h>
/**
* This is a base class to hold data and functions for render targets.
*/
@@ -88,22 +86,9 @@ public:
*/
virtual int GetWaitForEditingTimeOut() = 0;
/**
* Set a new busy indicator factory.
*
* When set, this factory will be used to generate busy indicators when
* suitable. If not set, no busy indicator will be used.
*/
void SetBusyIndicatorFactory( BUSY_INDICATOR::FACTORY aNewFactory );
// Attributes
protected:
/**
* Return a created busy indicator, if a factory has been set, else
* a null pointer.
*/
std::unique_ptr<BUSY_INDICATOR> CreateBusyIndicator() const;
/// settings refrence in use for this render
CINFO3D_VISU &m_settings;
@@ -124,10 +109,6 @@ protected:
* more information.
*/
static const wxChar *m_logTrace;
private:
/// Factory that returns a suitable busy indicator for the context.
BUSY_INDICATOR::FACTORY m_busyIndicatorFactory;
};
#endif // C3D_RENDER_BASE_H
+39 -9
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
@@ -31,6 +31,17 @@
#include <wx/log.h>
// A helper function to normalize aAngle between -2PI and +2PI
inline void normalise2PI( float& aAngle )
{
while( aAngle > 0.0 )
aAngle -= M_PI*2;
while( aAngle < 0.0 )
aAngle += M_PI*2;
}
/**
* 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
@@ -95,6 +106,20 @@ void CCAMERA::Reset_T1()
m_zoom_t1 = 1.0f;
m_rotate_aux_t1 = SFVEC3F( 0.0f );
m_lookat_pos_t1 = m_board_lookat_pos_init;
// Since 0 = 2pi, we want to reset the angle to be the closest
// one to where we currently are. That ensures that we rotate
// the board around the smallest distance getting there.
if( m_rotate_aux_t0.x > M_PI )
m_rotate_aux_t1.x = 2*M_PI;
if( m_rotate_aux_t0.y > M_PI )
m_rotate_aux_t1.y = 2*M_PI;
if( m_rotate_aux_t0.z > M_PI )
m_rotate_aux_t1.z = 2*M_PI;
}
@@ -111,14 +136,17 @@ void CCAMERA::updateRotationMatrix()
m_rotationMatrixAux = glm::rotate( glm::mat4( 1.0f ),
m_rotate_aux.x,
SFVEC3F( 1.0f, 0.0f, 0.0f ) );
normalise2PI( m_rotate_aux.x );
m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux,
m_rotate_aux.y,
SFVEC3F( 0.0f, 1.0f, 0.0f ) );
normalise2PI( m_rotate_aux.y );
m_rotationMatrixAux = glm::rotate( m_rotationMatrixAux,
m_rotate_aux.z,
SFVEC3F( 0.0f, 0.0f, 1.0f ) );
normalise2PI( m_rotate_aux.z );
m_parametersChanged = true;
@@ -163,7 +191,7 @@ void CCAMERA::rebuildProjection()
m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
m_frustum.tang = glm::tan( glm::radians( m_frustum.angle ) * 0.5f ) ;
m_frustum.tang = glm::tan( glm::radians( m_frustum.angle ) * 0.5f );
m_focalLen.x = ( (float)m_windowSize.y / (float)m_windowSize.x ) / m_frustum.tang;
m_focalLen.y = 1.0f / m_frustum.tang;
@@ -178,19 +206,21 @@ void CCAMERA::rebuildProjection()
m_frustum.nearD = -m_frustum.farD; // Use a symmetrical clip plane for ortho projection
const float orthoReductionFactor = m_zoom / 75.0f;
// This formula was found by trial and error
const float orthoReductionFactor = glm::length( m_camera_pos_init ) *
m_zoom * m_zoom * 0.5f;
// Initialize Projection Matrix for Ortographic View
m_projectionMatrix = glm::ortho( -m_windowSize.x * orthoReductionFactor,
m_windowSize.x * orthoReductionFactor,
-m_windowSize.y * orthoReductionFactor,
m_windowSize.y * orthoReductionFactor,
m_projectionMatrix = glm::ortho( -m_frustum.ratio * orthoReductionFactor,
m_frustum.ratio * orthoReductionFactor,
-orthoReductionFactor,
orthoReductionFactor,
m_frustum.nearD, m_frustum.farD );
m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
m_frustum.nw = m_windowSize.x * orthoReductionFactor * 2.0f;
m_frustum.nh = m_windowSize.y * orthoReductionFactor * 2.0f;
m_frustum.nw = orthoReductionFactor * 2.0f * m_frustum.ratio;
m_frustum.nh = orthoReductionFactor * 2.0f;
m_frustum.fw = m_frustum.nw;
m_frustum.fh = m_frustum.nh;
+45
View File
@@ -0,0 +1,45 @@
/*
* 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) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
* 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 3d_viewer.h
* @brief Declaration of the eda_3d_viewer class
*/
#ifndef _3D_VIEWER_H_
#define _3D_VIEWER_H_
/// A variable name whose value holds the path of 3D shape files.
/// Currently an environment variable, eventually a project variable.
#define KISYS3DMOD wxT( "KISYS3DMOD" )
/// All 3D files are expected to be stored in LIB3D_FOLDER, or one of
/// its subdirectory.
#define LIB3D_FOLDER wxT( "packages3d" )
#endif // _3D_VIEWER_H_
-129
View File
@@ -1,129 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2017 Jon Evans <jon@craftyjon.com>
* Copyright (C) 2017-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 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 <http://www.gnu.org/licenses/>.
*/
#include <tool/tool_manager.h>
#include <bitmaps.h>
#include "3d_actions.h"
// Actions, being statically-defined, require specialized I18N handling. We continue to
// use the _() macro so that string harvesting by the I18N framework doesn't have to be
// specialized, but we don't translate on initialization and instead do it in the getters.
#undef _
#define _(s) s
TOOL_ACTION EDA_3D_ACTIONS::pivotCenter( "3DViewer.Control.pivotCenter",
AS_GLOBAL,
' ', "",
"Center pivot rotation (Middle mouse click)" );
TOOL_ACTION EDA_3D_ACTIONS::moveLeft( "3DViewer.Control.moveLeft",
AS_GLOBAL,
WXK_LEFT, "",
"Move board Left" );
TOOL_ACTION EDA_3D_ACTIONS::moveRight( "3DViewer.Control.moveRight",
AS_GLOBAL,
WXK_RIGHT, "",
"Move board Right" );
TOOL_ACTION EDA_3D_ACTIONS::moveUp( "3DViewer.Control.moveUp",
AS_GLOBAL,
WXK_UP, "",
"Move board Up" );
TOOL_ACTION EDA_3D_ACTIONS::moveDown( "3DViewer.Control.moveDown",
AS_GLOBAL,
WXK_DOWN, "",
"Move board Down" );
TOOL_ACTION EDA_3D_ACTIONS::homeView( "3DViewer.Control.homeView",
AS_GLOBAL,
WXK_HOME, "",
"Home view" );
TOOL_ACTION EDA_3D_ACTIONS::resetView( "3DViewer.Control.resetView",
AS_GLOBAL,
'R', "",
"Reset view" );
TOOL_ACTION EDA_3D_ACTIONS::viewFront( "3DViewer.Control.viewFront",
AS_GLOBAL,
'Y', "",
"View Front" );
TOOL_ACTION EDA_3D_ACTIONS::viewBack( "3DViewer.Control.viewBack",
AS_GLOBAL,
MD_SHIFT + 'Y', "",
"View Back" );
TOOL_ACTION EDA_3D_ACTIONS::viewLeft( "3DViewer.Control.viewLeft",
AS_GLOBAL,
MD_SHIFT + 'X', "",
"View Left" );
TOOL_ACTION EDA_3D_ACTIONS::viewRight( "3DViewer.Control.viewRight",
AS_GLOBAL,
'X', "",
"View Right" );
TOOL_ACTION EDA_3D_ACTIONS::viewTop( "3DViewer.Control.viewTop",
AS_GLOBAL,
'Z', "",
"View Top" );
TOOL_ACTION EDA_3D_ACTIONS::viewBottom( "3DViewer.Control.viewBottom",
AS_GLOBAL,
MD_SHIFT + 'Z', "",
"View Bottom" );
TOOL_ACTION EDA_3D_ACTIONS::rotate45axisZ( "3DViewer.Control.rotate45axisZ",
AS_GLOBAL,
WXK_TAB, "",
"Rotate 45 degrees over Z axis" );
TOOL_ACTION EDA_3D_ACTIONS::zoomIn( "3DViewer.Control.zoomIn",
AS_GLOBAL,
WXK_F1, "",
"Zoom in " );
TOOL_ACTION EDA_3D_ACTIONS::zoomOut( "3DViewer.Control.zoomOut",
AS_GLOBAL,
WXK_F2, "",
"Zoom out" );
TOOL_ACTION EDA_3D_ACTIONS::attributesTHT( "3DViewer.Control.attributesTHT",
AS_GLOBAL,
'T', "",
"Toggle 3D models with type Through Hole" );
TOOL_ACTION EDA_3D_ACTIONS::attributesSMD( "3DViewer.Control.attributesSMD",
AS_GLOBAL,
'S', "",
"Toggle 3D models with type Surface Mount" );
TOOL_ACTION EDA_3D_ACTIONS::attributesVirtual( "3DViewer.Control.attributesVirtual",
AS_GLOBAL,
'V', "",
"Toggle 3D models with type Virtual" );
-70
View File
@@ -1,70 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013-2016 CERN
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
* @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
*/
#ifndef EDA_3D_ACTIONS_H
#define EDA_3D_ACTIONS_H
#include <tool/tool_action.h>
#include <tool/actions.h>
#include <core/optional.h>
class TOOL_EVENT;
class TOOL_MANAGER;
/**
* Class EDA_3D_ACTIONS
*
* Note: these aren't "real" actions; we just use them to see the hotkeys display.
*/
class EDA_3D_ACTIONS : public ACTIONS
{
public:
static TOOL_ACTION pivotCenter;
static TOOL_ACTION moveLeft;
static TOOL_ACTION moveRight;
static TOOL_ACTION moveUp;
static TOOL_ACTION moveDown;
static TOOL_ACTION homeView;
static TOOL_ACTION resetView;
static TOOL_ACTION viewFront;
static TOOL_ACTION viewBack;
static TOOL_ACTION viewLeft;
static TOOL_ACTION viewRight;
static TOOL_ACTION viewTop;
static TOOL_ACTION viewBottom;
static TOOL_ACTION rotate45axisZ;
static TOOL_ACTION zoomIn;
static TOOL_ACTION zoomOut;
static TOOL_ACTION attributesTHT;
static TOOL_ACTION attributesSMD;
static TOOL_ACTION attributesVirtual;
///> @copydoc COMMON_ACTIONS::TranslateLegacyId()
virtual OPT<TOOL_EVENT> TranslateLegacyId( int aId ) override { return OPT<TOOL_EVENT>(); }
};
#endif
+249 -261
View File
@@ -24,319 +24,307 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file 3d_menubar.cpp
*/
#include <fctsys.h>
#include <tool/conditional_menu.h>
#include <eda_3d_viewer.h>
#include <3d_canvas/cinfo3d_visu.h>
#include <menus_helpers.h>
#include <3d_viewer_id.h>
#include <3d_actions.h>
#include <tool/tool_manager.h>
#include <tool/common_control.h>
#include "help_common_strings.h"
void EDA_3D_VIEWER::CreateMenuBar()
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::CreateMenuBar" );
COMMON_CONTROL* tool = m_toolManager->GetTool<COMMON_CONTROL>();
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 );
//-- File menu -----------------------------------------------------------
//
CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, tool );
// Add specific preferences for Raytracing
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_RAYTRACING = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING,
_( "Raytracing Options" ), KiBitmap( tools_xpm ) );
fileMenu->AddItem( ID_MENU_SCREENCOPY_PNG, _( "Export Current View as PNG..." ), "",
export_xpm, SELECTION_CONDITIONS::ShowAlways );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
_( "Render Shadows" ),
KiBitmap( green_xpm ), wxITEM_CHECK );
fileMenu->AddItem( ID_MENU_SCREENCOPY_JPEG, _( "Export Current View as JPEG..." ), "",
export_xpm, SELECTION_CONDITIONS::ShowAlways );
fileMenu->AddSeparator();
fileMenu->AddClose( _( "3D Viewer" ) );
fileMenu->Resolve();
//-- Edit menu -------------------------------------------------------
//
CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, tool );
editMenu->AddItem( ID_TOOL_SCREENCOPY_TOCLIBBOARD, _( "Copy 3D Image" ), "",
copy_xpm, SELECTION_CONDITIONS::ShowAlways );
editMenu->Resolve();
//-- View menu -------------------------------------------------------
//
CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, tool );
viewMenu->AddItem( ID_ZOOM_IN, _( "Zoom In\tF1" ), HELP_ZOOM_IN,
zoom_in_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_ZOOM_OUT, _( "Zoom Out\tF2" ), HELP_ZOOM_OUT,
zoom_out_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_ZOOM_PAGE, _( "Zoom to Fit" ), HELP_ZOOM_FIT,
zoom_fit_in_page_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_ZOOM_REDRAW, _( "Redraw\tR" ), HELP_ZOOM_REDRAW,
zoom_redraw_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddSeparator();
viewMenu->AddItem( ID_ROTATE3D_X_NEG, _( "Rotate X Clockwise\tShift+X" ), "",
rotate_neg_x_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_ROTATE3D_X_POS, _( "Rotate X Counterclockwise\tX" ), "",
rotate_pos_x_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddSeparator();
viewMenu->AddItem( ID_ROTATE3D_Y_NEG, _( "Rotate Y Clockwise\tShift+Y" ), "",
rotate_neg_y_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_ROTATE3D_Y_POS, _( "Rotate Y Counterclockwise\tY" ), "",
rotate_pos_y_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddSeparator();
viewMenu->AddItem( ID_ROTATE3D_Z_NEG, _( "Rotate Z Clockwise\tShift+Z" ), "",
rotate_neg_z_xpm, SELECTION_CONDITIONS::ShowAlways );;
viewMenu->AddItem( ID_ROTATE3D_Z_POS, _( "Rotate Z Counterclockwise\tZ" ), "",
rotate_pos_z_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddSeparator();
viewMenu->AddItem( ID_MOVE3D_LEFT, _( "Move Left\tLeft" ), "",
left_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_MOVE3D_RIGHT, _( "Move Right\tRight" ), "",
right_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_MOVE3D_UP, _( "Move Up\tUp" ), "",
up_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->AddItem( ID_MOVE3D_DOWN, _( "Move Down\tDown" ), "",
down_xpm, SELECTION_CONDITIONS::ShowAlways );
viewMenu->Resolve();
//-- Preferences menu -----------------------------------------------
//
CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, tool );
auto raytracingCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.RenderEngineGet() != RENDER_ENGINE_OPENGL_LEGACY;
};
auto NormalModeCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.MaterialModeGet() == MATERIAL_MODE_NORMAL;
};
auto DiffuseModeCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.MaterialModeGet() == MATERIAL_MODE_DIFFUSE_ONLY;
};
auto CADModeCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.MaterialModeGet() == MATERIAL_MODE_CAD_MODE;
};
auto copperThicknessCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS );
};
auto boundingBoxesCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX );
};
auto renderShadowsCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_RAYTRACING_SHADOWS );
};
auto proceduralTexturesCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES );
};
auto showFloorCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR );
};
auto useRefractionsCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_RAYTRACING_REFRACTIONS );
};
auto useReflectionsCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS );
};
auto antiAliasingCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING );
};
auto postProcessCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING );
};
auto showAxesCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GetFlag( FL_AXIS );
};
prefsMenu->AddItem( ID_TOOL_SET_VISIBLE_ITEMS, _( "Display Options" ), "",
read_setup_xpm, SELECTION_CONDITIONS::ShowAlways );
prefsMenu->AddCheckItem( ID_RENDER_CURRENT_VIEW, _( "Raytracing" ), "",
tools_xpm, raytracingCondition );
// Render options submenu
CONDITIONAL_MENU* optsSubmenu = new CONDITIONAL_MENU( false, tool );
optsSubmenu->SetTitle( _( "Render Options" ) );
optsSubmenu->SetIcon( options_3drender_xpm );
// Material properties submenu
CONDITIONAL_MENU* propsSubmenu = new CONDITIONAL_MENU( false, tool );
propsSubmenu->SetTitle( _( "Material Properties" ) );
propsSubmenu->SetIcon( color_materials_xpm );
propsSubmenu->AddCheckItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
_( "Use All Properties" ),
_( "Use all material properties from each 3D model file" ),
nullptr, NormalModeCondition );
propsSubmenu->AddCheckItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY,
_( "Use Diffuse Only" ),
_( "Use only the diffuse color property from model 3D model file" ),
nullptr, DiffuseModeCondition );
propsSubmenu->AddCheckItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
_( "CAD Color Style" ),
_( "Use a CAD color style based on the diffuse color of the material" ),
nullptr, CADModeCondition );
optsSubmenu->AddMenu( propsSubmenu, SELECTION_CONDITIONS::ShowAlways );
optsSubmenu->AddCheckItem( ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
_( "Show Copper Thickness" ),
_( "Shows the copper thickness on copper layers (slower loading)" ),
use_3D_copper_thickness_xpm, copperThicknessCondition );
optsSubmenu->AddCheckItem( ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
_( "Show Model Bounding Boxes" ), "",
ortho_xpm, boundingBoxesCondition );
// Raytracing submenu
CONDITIONAL_MENU* raySubmenu = new CONDITIONAL_MENU( false, tool );
raySubmenu->SetTitle( _( "Raytracing Options" ) );
raySubmenu->SetIcon( tools_xpm );
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
_( "Render Shadows" ), "",
green_xpm, renderShadowsCondition );
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
_( "Procedural Textures" ),
_( "Apply procedural textures to materials (slow)"),
green_xpm, proceduralTexturesCondition );
KiBitmap( green_xpm ), wxITEM_CHECK );
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
_( "Add Floor" ),
_( "Adds a floor plane below the board (slow)"),
green_xpm, showFloorCondition );
KiBitmap( green_xpm ), wxITEM_CHECK );
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
_( "Refractions" ),
_( "Render materials with refractions properties on final render (slow)"),
green_xpm, useRefractionsCondition );
KiBitmap( green_xpm ), wxITEM_CHECK );
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
_( "Reflections" ),
_( "Render materials with reflections properties on final render (slow)"),
green_xpm, useReflectionsCondition );
KiBitmap( green_xpm ), wxITEM_CHECK );
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
_( "Anti-aliasing" ),
_( "Render with improved quality on final render (slow)"),
green_xpm, antiAliasingCondition );
KiBitmap( green_xpm ), wxITEM_CHECK );
raySubmenu->AddCheckItem( ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
_( "Post-processing" ),
_( "Apply Screen Space Ambient Occlusion and Global Illumination reflections on final render (slow)"),
green_xpm, postProcessCondition );
KiBitmap( green_xpm ), wxITEM_CHECK );
optsSubmenu->AddMenu( raySubmenu, SELECTION_CONDITIONS::ShowAlways );
prefsMenu->AddMenu( optsSubmenu, SELECTION_CONDITIONS::ShowAlways );
prefsMenu->AppendSeparator();
prefsMenu->AddSeparator();
// Color submenu
CONDITIONAL_MENU* colorSubmenu = new CONDITIONAL_MENU( false, tool );
colorSubmenu->SetTitle( _( "Choose Colors" ) );
colorSubmenu->SetIcon( palette_xpm );
// Colors, axis and grid elements
// /////////////////////////////////////////////////////////////////////////
colorSubmenu->AddItem( ID_MENU3D_BGCOLOR_TOP, _( "Background Top Color..." ), "",
setcolor_3d_bg_xpm, SELECTION_CONDITIONS::ShowAlways );
// Add submenu set Colors
wxMenu * setColorMenu = new wxMenu;
AddMenuItem( prefsMenu, setColorMenu, ID_MENU3D_COLOR,
_( "Choose Colors" ), KiBitmap( palette_xpm ) );
colorSubmenu->AddItem( ID_MENU3D_BGCOLOR_BOTTOM, _( "Background Bottom Color..." ), "",
setcolor_3d_bg_xpm, SELECTION_CONDITIONS::ShowAlways );
wxMenu * setBgColorMenu = new wxMenu;
AddMenuItem( setColorMenu, setBgColorMenu, ID_MENU3D_BGCOLOR,
_( "Background Color" ), KiBitmap( palette_xpm ) );
colorSubmenu->AddItem( ID_MENU3D_SILKSCREEN_COLOR, _( "Silkscreen Color..." ), "",
setcolor_silkscreen_xpm, SELECTION_CONDITIONS::ShowAlways );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_TOP_SELECTION,
_( "Background Top Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
colorSubmenu->AddItem( ID_MENU3D_SOLDERMASK_COLOR, _( "Solder Mask Color..." ), "",
setcolor_soldermask_xpm, SELECTION_CONDITIONS::ShowAlways );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
_( "Background Bottom Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
colorSubmenu->AddItem( ID_MENU3D_SOLDERPASTE_COLOR, _( "Solder Paste Color..." ), "",
setcolor_solderpaste_xpm, SELECTION_CONDITIONS::ShowAlways );
AddMenuItem( setColorMenu, ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
_( "Silkscreen Color..." ), KiBitmap( setcolor_silkscreen_xpm ) );
colorSubmenu->AddItem( ID_MENU3D_COPPER_COLOR, _( "Copper/Surface Finish Color..." ), "",
setcolor_copper_xpm, SELECTION_CONDITIONS::ShowAlways );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
_( "Solder Mask Color..." ), KiBitmap( setcolor_soldermask_xpm ) );
colorSubmenu->AddItem( ID_MENU3D_PCB_BODY_COLOR, _( "Board Body Color..." ), "",
setcolor_board_body_xpm, SELECTION_CONDITIONS::ShowAlways );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
_( "Solder Paste Color..." ), KiBitmap( setcolor_solderpaste_xpm ) );
prefsMenu->AddMenu( colorSubmenu );
AddMenuItem( setColorMenu, ID_MENU3D_COPPER_COLOR_SELECTION,
_( "Copper/Surface Finish Color..." ), KiBitmap( setcolor_copper_xpm ) );
prefsMenu->AddCheckItem( ID_MENU3D_AXIS_ONOFF, _( "Show 3D &Axis" ), "",
axis3d_front_xpm, showAxesCondition );
AddMenuItem( setColorMenu, ID_MENU3D_PCB_BODY_COLOR_SELECTION,
_( "Board Body Color..." ), KiBitmap( setcolor_board_body_xpm ) );
// Grid submenu
CONDITIONAL_MENU* gridSubmenu = new CONDITIONAL_MENU( false, tool );
gridSubmenu->SetTitle( _( "3D Grid" ) );
gridSubmenu->SetIcon( grid_xpm );
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
auto noGridCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GridGet() == GRID3D_NONE;
};
auto grid10mmCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GridGet() == GRID3D_10MM;
};
auto grid5mmCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GridGet() == GRID3D_5MM;
};
auto grid2p5mmCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GridGet() == GRID3D_2P5MM;
};
auto grid_1mmCondition = [ this ] ( const SELECTION& aSel ) {
return m_settings.GridGet() == GRID3D_1MM;
};
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), "",
nullptr, noGridCondition );
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_10_MM, _( "3D Grid 10mm" ), "",
nullptr, grid10mmCondition );
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_5_MM, _( "3D Grid 5mm" ), "",
nullptr, grid5mmCondition );
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5mm" ), "",
nullptr, grid2p5mmCondition );
gridSubmenu->AddCheckItem( ID_MENU3D_GRID_1_MM, _( "3D Grid 1mm" ), "",
nullptr, grid_1mmCondition );
// Creates grid menu
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AddMenu( gridSubmenu, SELECTION_CONDITIONS::ShowAlways );
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 );
prefsMenu->AddSeparator();
prefsMenu->AddItem( ID_MENU3D_RESET_DEFAULTS, _( "Reset to Default Settings" ), "",
tools_xpm, SELECTION_CONDITIONS::ShowAlways );
// 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 );
#ifdef __APPLE__ // Note: will get moved to Apple menu by wxWidgets
prefsMenu->AddItem( wxID_PREFERENCES,
_( "Preferences...\tCTRL+," ),
_( "Show preferences for all open tools" ),
preference_xpm, SELECTION_CONDITIONS::ShowAlways );
#endif
// Reset options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
prefsMenu->Resolve();
AddMenuItem( prefsMenu, ID_MENU3D_RESET_DEFAULTS,
_( "Reset to Default Settings" ),
KiBitmap( tools_xpm ) );
//-- Menubar -------------------------------------------------------------
//
menuBar->Append( fileMenu, _( "&File" ) );
menuBar->Append( editMenu, _( "&Edit" ) );
menuBar->Append( viewMenu, _( "&View" ) );
menuBar->Append( prefsMenu, _( "&Preferences" ) );
AddStandardHelpMenu( menuBar );
// 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 );
}
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jul 11 2018)
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@@ -12,251 +12,252 @@
DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_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( wxDefaultSize, wxDefaultSize );
wxBoxSizer* bSizerMain;
bSizerMain = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizerUpper;
bSizerUpper = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizeLeft;
bSizeLeft = new wxBoxSizer( wxVERTICAL );
m_staticText3DRenderOpts = new wxStaticText( this, wxID_ANY, _("Render options:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3DRenderOpts->Wrap( -1 );
m_staticText3DRenderOpts->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
bSizeLeft->Add( m_staticText3DRenderOpts, 0, wxALL, 5 );
wxFlexGridSizer* fgSizerRenderOptions;
fgSizerRenderOptions = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerRenderOptions->SetFlexibleDirection( wxBOTH );
fgSizerRenderOptions->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
fgSizerRenderOptions->Add( 0, 0, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 10 );
m_bitmapRealisticMode = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_bitmapRealisticMode, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxRealisticMode = new wxCheckBox( this, wxID_ANY, _("Realistic mode"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_checkBoxRealisticMode, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerRenderOptions->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapBoardBody = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_bitmapBoardBody, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxBoardBody = new wxCheckBox( this, wxID_ANY, _("Show board body"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_checkBoxBoardBody, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerRenderOptions->Add( 0, 0, 1, wxEXPAND, 5 );
m_bitmapCuThickness = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_bitmapCuThickness, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxCuThickness = new wxCheckBox( this, wxID_ANY, _("Show copper thickness"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_checkBoxCuThickness, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerRenderOptions->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapBoundingBoxes = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_bitmapBoundingBoxes, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxBoundingBoxes = new wxCheckBox( this, wxID_ANY, _("Show model bounding boxes"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_checkBoxBoundingBoxes, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerRenderOptions->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapAreas = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_bitmapAreas, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxAreas = new wxCheckBox( this, wxID_ANY, _("Show filled areas in zones"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerRenderOptions->Add( m_checkBoxAreas, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
wxFlexGridSizer* fgSizer3;
fgSizer3 = new wxFlexGridSizer( 0, 2, 0, 0 );
fgSizer3->SetFlexibleDirection( wxBOTH );
fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
fgSizerRenderOptions->Add( fgSizer3, 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 );
m_staticText3DmodelVisibility->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
bSizeLeft->Add( m_staticText3DmodelVisibility, 0, wxALL, 5 );
wxFlexGridSizer* fgSizer3DVisibility;
fgSizer3DVisibility = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizer3DVisibility->SetFlexibleDirection( wxBOTH );
fgSizer3DVisibility->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
fgSizer3DVisibility->Add( 0, 0, 1, wxRIGHT|wxLEFT, 10 );
m_bitmap3DshapesTH = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3DVisibility->Add( m_bitmap3DshapesTH, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBox3DshapesTH = new wxCheckBox( this, wxID_ANY, _("Show 3D through hole models"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3DVisibility->Add( m_checkBox3DshapesTH, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizer3DVisibility->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmap3DshapesSMD = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3DVisibility->Add( m_bitmap3DshapesSMD, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBox3DshapesSMD = new wxCheckBox( this, wxID_ANY, _("Show 3D SMD models"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3DVisibility->Add( m_checkBox3DshapesSMD, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizer3DVisibility->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmap3DshapesVirtual = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3DVisibility->Add( m_bitmap3DshapesVirtual, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBox3DshapesVirtual = new wxCheckBox( this, wxID_ANY, _("Show 3D virtual models"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizer3DVisibility->Add( m_checkBox3DshapesVirtual, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLeft->Add( fgSizer3DVisibility, 0, 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 );
wxBoxSizer* bSizerRight;
bSizerRight = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizeLayer;
bSizeLayer = new wxBoxSizer( wxVERTICAL );
m_staticTextBoardLayers = new wxStaticText( this, wxID_ANY, _("Board layers:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextBoardLayers->Wrap( -1 );
m_staticTextBoardLayers->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
bSizeLayer->Add( m_staticTextBoardLayers, 0, wxALL, 5 );
wxFlexGridSizer* fgSizerShowBrdLayersOpts;
fgSizerShowBrdLayersOpts = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerShowBrdLayersOpts->SetFlexibleDirection( wxBOTH );
fgSizerShowBrdLayersOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapSilkscreen = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_bitmapSilkscreen, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxSilkscreen = new wxCheckBox( this, wxID_ANY, _("Show silkscreen layers"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_checkBoxSilkscreen, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapSolderMask = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_bitmapSolderMask, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxSolderMask = new wxCheckBox( this, wxID_ANY, _("Show solder mask layers"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_checkBoxSolderMask, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapSolderPaste = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_bitmapSolderPaste, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxSolderpaste = new wxCheckBox( this, wxID_ANY, _("Show solder paste layers"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_checkBoxSolderpaste, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerShowBrdLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapAdhesive = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_bitmapAdhesive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxAdhesive = new wxCheckBox( this, wxID_ANY, _("Show adhesive layers"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowBrdLayersOpts->Add( m_checkBoxAdhesive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLayer->Add( fgSizerShowBrdLayersOpts, 0, wxEXPAND, 5 );
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 ) );
bSizeLayer->Add( m_staticTextUserLayers, 0, wxALL, 5 );
wxFlexGridSizer* fgSizerShowUserLayersOpts;
fgSizerShowUserLayersOpts = new wxFlexGridSizer( 0, 3, 0, 0 );
fgSizerShowUserLayersOpts->SetFlexibleDirection( wxBOTH );
fgSizerShowUserLayersOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
fgSizerShowUserLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapComments = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowUserLayersOpts->Add( m_bitmapComments, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxComments = new wxCheckBox( this, wxID_ANY, _("Show comments and drawings layers"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowUserLayersOpts->Add( m_checkBoxComments, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerShowUserLayersOpts->Add( 0, 0, 0, wxRIGHT|wxLEFT, 10 );
m_bitmapECO = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowUserLayersOpts->Add( m_bitmapECO, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_checkBoxECO = new wxCheckBox( this, wxID_ANY, _("Show ECO layers"), wxDefaultPosition, wxDefaultSize, 0 );
fgSizerShowUserLayersOpts->Add( m_checkBoxECO, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLayer->Add( fgSizerShowUserLayersOpts, 0, wxEXPAND, 5 );
bSizerRight->Add( bSizeLayer, 1, wxEXPAND, 5 );
bSizerUpper->Add( bSizerRight, 1, wxEXPAND, 5 );
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
m_staticlineH = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizerMain->Add( m_staticlineH, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_sdbSizer = new wxStdDialogButtonSizer();
m_sdbSizerOK = new wxButton( this, wxID_OK );
m_sdbSizer->AddButton( m_sdbSizerOK );
m_sdbSizerCancel = new wxButton( this, wxID_CANCEL );
m_sdbSizer->AddButton( m_sdbSizerCancel );
m_sdbSizer->Realize();
bSizerMain->Add( m_sdbSizer, 0, wxALL|wxALIGN_RIGHT, 5 );
this->SetSizer( bSizerMain );
this->Layout();
bSizerMain->Fit( this );
this->Centre( wxBOTH );
// Connect Events
m_checkBoxRealisticMode->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_3D_VIEW_OPTIONS_BASE::OnCheckRealisticMode ), NULL, this );
}
@@ -265,5 +266,5 @@ DIALOG_3D_VIEW_OPTIONS_BASE::~DIALOG_3D_VIEW_OPTIONS_BASE()
{
// Disconnect Events
m_checkBoxRealisticMode->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_3D_VIEW_OPTIONS_BASE::OnCheckRealisticMode ), NULL, this );
}
File diff suppressed because it is too large Load Diff
@@ -1,12 +1,11 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Jul 11 2018)
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_3D_VIEW_OPTION_BASE_H__
#define __DIALOG_3D_VIEW_OPTION_BASE_H__
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
@@ -37,7 +36,7 @@
class DIALOG_3D_VIEW_OPTIONS_BASE : public DIALOG_SHIM
{
private:
protected:
wxStaticText* m_staticText3DRenderOpts;
wxStaticBitmap* m_bitmapRealisticMode;
@@ -76,16 +75,15 @@ class DIALOG_3D_VIEW_OPTIONS_BASE : public DIALOG_SHIM
wxStdDialogButtonSizer* m_sdbSizer;
wxButton* m_sdbSizerOK;
wxButton* m_sdbSizerCancel;
// Virtual event handlers, overide them in your derived class
virtual void OnCheckRealisticMode( wxCommandEvent& event ) { event.Skip(); }
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,372 ), 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( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_3D_VIEW_OPTIONS_BASE();
};
#endif //__DIALOG_3D_VIEW_OPTION_BASE_H__
+267 -120
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-2019 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2020 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
@@ -22,21 +22,28 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <wx/colordlg.h>
#include <wx/colour.h>
#include <wx/filename.h>
#include <wx/string.h>
#include <wx/wupdlock.h>
#include <wx/clipbrd.h>
#include "eda_3d_viewer.h"
#include "../3d_viewer_id.h"
#include "../common_ogl/cogl_att_list.h"
#include <3d_actions.h>
#include <bitmaps.h>
#include <dpi_scaling.h>
#include <gestfich.h>
#include <lru_cache.h>
#include <pgm_base.h>
#include <project.h>
#include <wildcards_and_files_ext.h>
#include <tool/tool_manager.h>
#include <tool/common_control.h>
#include <hotkeys_basic.h>
#include <wx/colordlg.h>
#include <wx/colourdata.h>
#include <wx/toolbar.h>
@@ -80,8 +87,11 @@ static const wxChar keyBoardBodyColor_Red[] = wxT( "BoardBodyColor_Red" );
static const wxChar keyBoardBodyColor_Green[] = wxT( "BoardBodyColor_Green" );
static const wxChar keyBoardBodyColor_Blue[] = wxT( "BoardBodyColor_Blue" );
static const wxChar keyMousewheelPanning[] = wxT( "MousewheelPAN3D" );
static const wxChar keyShowRealisticMode[] = wxT( "ShowRealisticMode" );
static const wxChar keyRenderEngine[] = wxT( "RenderEngine" );
//static const wxChar keyRenderTextures[] = wxT( "Render_Textures" );
static const wxChar keyRenderMaterial[] = wxT( "Render_Material" );
static const wxChar keyRenderOGL_ShowCopperTck[]= wxT( "Render_OGL_ShowCopperThickness" );
@@ -122,18 +132,27 @@ BEGIN_EVENT_TABLE( EDA_3D_VIEWER, EDA_BASE_FRAME )
EVT_TOOL( ID_TOOL_SET_VISIBLE_ITEMS, EDA_3D_VIEWER::Install3DViewOptionDialog )
EVT_MENU( wxID_CLOSE, EDA_3D_VIEWER::Exit3DFrame )
EVT_MENU( wxID_EXIT, EDA_3D_VIEWER::Exit3DFrame )
EVT_MENU( ID_RENDER_CURRENT_VIEW, EDA_3D_VIEWER::OnRenderEngineSelection )
EVT_MENU( ID_DISABLE_RAY_TRACING, EDA_3D_VIEWER::OnDisableRayTracing )
EVT_MENU_RANGE( ID_MENU3D_GRID, ID_MENU3D_GRID_END, EDA_3D_VIEWER::On3DGridSelection )
EVT_MENU( wxID_ABOUT, EDA_BASE_FRAME::GetKicadAbout )
EVT_CLOSE( EDA_3D_VIEWER::OnCloseWindow )
EVT_UPDATE_UI( ID_RENDER_CURRENT_VIEW, EDA_3D_VIEWER::OnUpdateUIEngine )
EVT_UPDATE_UI_RANGE( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
EDA_3D_VIEWER::OnUpdateUIMaterial )
EVT_UPDATE_UI_RANGE( ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
EDA_3D_VIEWER::OnUpdateUIOpenGL )
EVT_UPDATE_UI_RANGE( ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
EDA_3D_VIEWER::OnUpdateUIRayTracing )
EVT_CLOSE( EDA_3D_VIEWER::OnCloseWindow )
EVT_UPDATE_UI( ID_RENDER_CURRENT_VIEW, EDA_3D_VIEWER::OnUpdateUIEngine )
EVT_UPDATE_UI( ID_MENU3D_AXIS_ONOFF, EDA_3D_VIEWER::OnUpdateUIAxis )
END_EVENT_TABLE()
@@ -142,7 +161,7 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent,
KIWAY_PLAYER( aKiway, aParent,
FRAME_PCB_DISPLAY3D, aTitle,
wxDefaultPosition, wxDefaultSize,
style, QUALIFIED_VIEWER3D_FRAMENAME( aParent ) )
style, VIEWER3D_FRAMENAME )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::EDA_3D_VIEWER %s", aTitle );
@@ -177,15 +196,6 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent,
// Some settings need the canvas
loadCommonSettings();
// Create the manager
m_toolManager = new TOOL_MANAGER;
m_toolManager->SetEnvironment( nullptr, nullptr, nullptr, this );
// Register tools
m_toolManager->RegisterTool( new COMMON_CONTROL );
m_actions = new EDA_3D_ACTIONS();
m_toolManager->InitTools();
CreateMenuBar();
ReCreateMainToolbar();
@@ -216,7 +226,7 @@ EDA_3D_VIEWER::~EDA_3D_VIEWER()
// m_canvas delete will be called by wxWidget manager
//delete m_canvas;
//m_canvas = nullptr;
//m_canvas = 0;
}
@@ -256,12 +266,13 @@ void EDA_3D_VIEWER::OnCloseWindow( wxCloseEvent &event )
// m_canvas delete will be called by wxWidget manager
//delete m_canvas;
//m_canvas = nullptr;
//m_canvas = 0;
Destroy();
event.Skip( true );
}
#define ROT_ANGLE 10.0
void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
@@ -283,7 +294,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
break;
case ID_ROTATE3D_X_POS:
m_settings.CameraGet().RotateX( glm::radians(ROT_ANGLE) );
m_settings.CameraGet().RotateX( glm::radians( ROT_ANGLE ) );
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
m_canvas->Request_refresh();
@@ -293,7 +304,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
break;
case ID_ROTATE3D_X_NEG:
m_settings.CameraGet().RotateX( -glm::radians(ROT_ANGLE) );
m_settings.CameraGet().RotateX( -glm::radians( ROT_ANGLE ) );
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
m_canvas->Request_refresh();
@@ -360,7 +371,11 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
case ID_ORTHO:
m_settings.CameraGet().ToggleProjection();
m_canvas->Request_refresh();
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
m_canvas->Request_refresh();
else
m_canvas->RenderRaytracingRequest();
return;
case ID_TOOL_SCREENCOPY_TOCLIBBOARD:
@@ -369,7 +384,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
takeScreenshot( event );
return;
case ID_MENU3D_BGCOLOR_BOTTOM:
case ID_MENU3D_BGCOLOR_BOTTOM_SELECTION:
if( Set3DColorFromUser( m_settings.m_BgColorBot, _( "Background Color, Bottom" ),
nullptr ) )
{
@@ -380,7 +395,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
}
return;
case ID_MENU3D_BGCOLOR_TOP:
case ID_MENU3D_BGCOLOR_TOP_SELECTION:
if( Set3DColorFromUser( m_settings.m_BgColorTop, _( "Background Color, Top" ), nullptr ) )
{
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
@@ -390,23 +405,23 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
}
return;
case ID_MENU3D_SILKSCREEN_COLOR:
case ID_MENU3D_SILKSCREEN_COLOR_SELECTION:
Set3DSilkScreenColorFromUser();
return;
case ID_MENU3D_SOLDERMASK_COLOR:
case ID_MENU3D_SOLDERMASK_COLOR_SELECTION:
Set3DSolderMaskColorFromUser();
return;
case ID_MENU3D_SOLDERPASTE_COLOR:
case ID_MENU3D_SOLDERPASTE_COLOR_SELECTION:
Set3DSolderPasteColorFromUser();
return;
case ID_MENU3D_COPPER_COLOR:
case ID_MENU3D_COPPER_COLOR_SELECTION:
Set3DCopperColorFromUser();
break;
case ID_MENU3D_PCB_BODY_COLOR:
case ID_MENU3D_PCB_BODY_COLOR_SELECTION:
Set3DBoardBodyColorFromUser();
break;
@@ -549,6 +564,12 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
}
return;
case ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST:
{
DisplayHotKeys();
}
return;
default:
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::Process_Special_Functions()" );
return;
@@ -567,28 +588,29 @@ void EDA_3D_VIEWER::On3DGridSelection( wxCommandEvent &event )
switch( id )
{
case ID_MENU3D_GRID_NOGRID: m_settings.GridSet( GRID3D_NONE ); break;
case ID_MENU3D_GRID_10_MM: m_settings.GridSet( GRID3D_10MM ); break;
case ID_MENU3D_GRID_5_MM: m_settings.GridSet( GRID3D_5MM ); break;
case ID_MENU3D_GRID_2P5_MM: m_settings.GridSet( GRID3D_2P5MM ); break;
case ID_MENU3D_GRID_1_MM: m_settings.GridSet( GRID3D_1MM ); break;
case ID_MENU3D_GRID_NOGRID:
m_settings.GridSet( GRID3D_NONE );
break;
default: wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::On3DGridSelection()" );
}
case ID_MENU3D_GRID_10_MM:
m_settings.GridSet( GRID3D_10MM );
break;
int menu_ids[]
{
ID_MENU3D_GRID_NOGRID, ID_MENU3D_GRID_10_MM, ID_MENU3D_GRID_5_MM,
ID_MENU3D_GRID_2P5_MM, ID_MENU3D_GRID_1_MM
};
case ID_MENU3D_GRID_5_MM:
m_settings.GridSet( GRID3D_5MM );
break;
// Refresh checkmarks
wxMenuBar* menuBar = GetMenuBar();
case ID_MENU3D_GRID_2P5_MM:
m_settings.GridSet( GRID3D_2P5MM );
break;
for( int ii = 0; ii < 5; ii++ )
{
wxMenuItem* item = menuBar->FindItem( menu_ids[ii] );
item->Check( menu_ids[ii] == id );
case ID_MENU3D_GRID_1_MM:
m_settings.GridSet( GRID3D_1MM );
break;
default:
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::On3DGridSelection()" );
return;
}
if( m_canvas )
@@ -627,11 +649,25 @@ void EDA_3D_VIEWER::ProcessZoom( wxCommandEvent &event )
switch( id )
{
case ID_ZOOM_PAGE: m_canvas->SetView3D( WXK_HOME ); break;
case ID_ZOOM_IN: m_canvas->SetView3D( WXK_F1 ); break;
case ID_ZOOM_OUT: m_canvas->SetView3D( WXK_F2 ); break;
case ID_ZOOM_REDRAW: m_canvas->Request_refresh(); break;
default: wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::ProcessZoom()" );
case ID_ZOOM_PAGE:
m_canvas->SetView3D( WXK_HOME );
break;
case ID_ZOOM_IN:
m_canvas->SetView3D( WXK_F1 );
break;
case ID_ZOOM_OUT:
m_canvas->SetView3D( WXK_F2 );
break;
case ID_ZOOM_REDRAW:
m_canvas->Request_refresh();
break;
default:
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::ProcessZoom()" );
return;
}
m_canvas->DisplayStatus();
@@ -647,11 +683,11 @@ void EDA_3D_VIEWER::OnDisableRayTracing( wxCommandEvent& aEvent )
}
void EDA_3D_VIEWER::OnActivate( wxActivateEvent &event )
void EDA_3D_VIEWER::OnActivate( wxActivateEvent &aEvent )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnActivate" );
if( m_canvas )
if( aEvent.GetActive() && m_canvas )
{
// Reload data if 3D frame shows a board,
// because it can be changed since last frame activation
@@ -662,17 +698,17 @@ void EDA_3D_VIEWER::OnActivate( wxActivateEvent &event )
m_canvas->SetFocus();
}
event.Skip(); // required under wxMAC
aEvent.Skip(); // required under wxMAC
}
void EDA_3D_VIEWER::OnSetFocus(wxFocusEvent &event)
void EDA_3D_VIEWER::OnSetFocus( wxFocusEvent& aEvent )
{
// Activates again the focus of the canvas so it will catch mouse and key events
if( m_canvas )
m_canvas->SetFocus();
event.Skip();
aEvent.Skip();
}
@@ -874,12 +910,12 @@ void EDA_3D_VIEWER::SaveSettings( wxConfigBase *aCfg )
}
void EDA_3D_VIEWER::CommonSettingsChanged( bool aEnvVarsChanged )
void EDA_3D_VIEWER::CommonSettingsChanged()
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::CommonSettingsChanged" );
// Regen menu bars, etc
EDA_BASE_FRAME::CommonSettingsChanged( aEnvVarsChanged );
EDA_BASE_FRAME::CommonSettingsChanged();
// There is no base class that handles toolbars for this frame
ReCreateMainToolbar();
@@ -890,6 +926,20 @@ void EDA_3D_VIEWER::CommonSettingsChanged( bool aEnvVarsChanged )
}
void EDA_3D_VIEWER::OnLeftClick( wxDC *DC, const wxPoint &MousePos )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnLeftClick" );
// Do nothing
}
void EDA_3D_VIEWER::OnRightClick( const wxPoint &MousePos, wxMenu *PopMenu )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnRightClick" );
// Do nothing
}
void EDA_3D_VIEWER::OnKeyEvent( wxKeyEvent& event )
{
if( m_canvas )
@@ -899,6 +949,13 @@ void EDA_3D_VIEWER::OnKeyEvent( wxKeyEvent& event )
}
void EDA_3D_VIEWER::RedrawActiveWindow( wxDC *DC, bool EraseBg )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::RedrawActiveWindow" );
// Do nothing
}
void EDA_3D_VIEWER::takeScreenshot( wxCommandEvent& event )
{
wxString fullFileName;
@@ -934,6 +991,17 @@ void EDA_3D_VIEWER::takeScreenshot( wxCommandEvent& event )
fullFileName = m_defaultSaveScreenshotFileName.GetFullPath();
wxFileName fn = fullFileName;
if( !fn.IsDirWritable() )
{
wxString msg;
msg.Printf( _( "Insufficient permissions required to save file\n%s" ), fullFileName );
wxMessageBox( msg, _( "Error" ), wxOK | wxICON_ERROR, this );
return;
}
// Be sure the screen area destroyed by the file dialog is redrawn
// before making a screen copy.
// Without this call, under Linux the screen refresh is made to late.
@@ -1015,118 +1083,129 @@ bool EDA_3D_VIEWER::Set3DColorFromUser( SFVEC3D &aColor, const wxString& aTitle,
bool EDA_3D_VIEWER::Set3DSilkScreenColorFromUser()
{
CUSTOM_COLORS_LIST colors;
CUSTOM_COLORS_LIST definedColors;
definedColors.push_back( CUSTOM_COLOR_ITEM( 241.0/255.0, 241.0/255.0, 241.0/255.0, "White" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 4.0/255.0, 18.0/255.0, 21.0/255.0, "Dark" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 241.0/255.0, 241.0/255.0, 241.0/255.0, "White" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 4.0/255.0, 18.0/255.0, 21.0/255.0, "Dark" ) );
bool change = Set3DColorFromUser( m_settings.m_SilkScreenColor,
_( "Solder Mask Color" ), &definedColors );
if( Set3DColorFromUser( m_settings.m_SilkScreenColor, _( "Silkscreen Color" ), &colors ) )
{
if( change )
NewDisplay( true );
return true;
}
return false;
return change;
}
bool EDA_3D_VIEWER::Set3DSolderMaskColorFromUser()
{
CUSTOM_COLORS_LIST colors;
CUSTOM_COLORS_LIST definedColors;
colors.push_back( CUSTOM_COLOR_ITEM( 20/255.0, 51/255.0, 36/255.0, "Green" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 91/255.0, 168/255.0, 12/255.0, "Light Green" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 13/255.0, 104/255.0, 11/255.0, "Saturated Green" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 181/255.0, 19/255.0, 21/255.0, "Red" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 239/255.0, 53/255.0, 41/255.0, "Red Light Orange" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 210/255.0, 40/255.0, 14/255.0, "Red 2" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 2/255.0, 59/255.0, 162/255.0, "Blue" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 54/255.0, 79/255.0, 116/255.0, "Light blue 1" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 61/255.0, 85/255.0, 130/255.0, "Light blue 2" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 21/255.0, 70/255.0, 80/255.0, "Green blue (dark)" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 11/255.0, 11/255.0, 11/255.0, "Black" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 245/255.0, 245/255.0, 245/255.0, "White" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 119/255.0, 31/255.0, 91/255.0, "Purple" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 32/255.0, 2/255.0, 53/255.0, "Purple Dark" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 20/255.0, 51/255.0, 36/255.0, "Green" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 91/255.0, 168/255.0, 12/255.0, "Light Green" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 13/255.0, 104/255.0, 11/255.0,
"Saturated Green" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 181/255.0, 19/255.0, 21/255.0, "Red" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 239/255.0, 53/255.0, 41/255.0,
"Red Light Orange" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 210/255.0, 40/255.0, 14/255.0, "Red 2" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 2/255.0, 59/255.0, 162/255.0, "Blue" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 54/255.0, 79/255.0, 116/255.0, "Light blue 1" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 61/255.0, 85/255.0, 130/255.0, "Light blue 2" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 21/255.0, 70/255.0, 80/255.0,
"Green blue (dark)" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 11/255.0, 11/255.0, 11/255.0, "Black" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 245/255.0, 245/255.0, 245/255.0, "White" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 119/255.0, 31/255.0, 91/255.0, "Purple" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 32/255.0, 2/255.0, 53/255.0, "Purple Dark" ) );
if( Set3DColorFromUser( m_settings.m_SolderMaskColor, _( "Solder Mask Color" ), &colors ) )
{
bool change = Set3DColorFromUser( m_settings.m_SolderMaskColor,
_( "Solder Mask Color" ),
&definedColors );
if( change )
NewDisplay( true );
return true;
}
return false;
return change;
}
bool EDA_3D_VIEWER::Set3DCopperColorFromUser()
{
CUSTOM_COLORS_LIST colors;
CUSTOM_COLORS_LIST definedColors;
colors.push_back( CUSTOM_COLOR_ITEM( 184/255.0, 115/255.0, 50/255.0, "Copper" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 178/255.0, 156/255.0, 0.0, "Gold" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 160/255.0, 160/255.0, "Tin" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 184/255.0, 115/255.0, 50/255.0, "Copper" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 178/255.0, 156/255.0, 0.0, "Gold" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 160/255.0, 160/255.0, "Tin" ) );
if( Set3DColorFromUser( m_settings.m_CopperColor, _( "Copper Color" ), &colors ) )
{
bool change = Set3DColorFromUser( m_settings.m_CopperColor, _( "Copper Color" ),
&definedColors );
if( change )
NewDisplay( true );
return true;
}
return false;
return change;
}
bool EDA_3D_VIEWER::Set3DBoardBodyColorFromUser()
{
CUSTOM_COLORS_LIST colors;
CUSTOM_COLORS_LIST definedColors;
colors.push_back( CUSTOM_COLOR_ITEM( 51/255.0, 43/255.0, 22/255.0, "FR4 natural, dark" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 109/255.0, 116/255.0, 75/255.0, "FR4 natural" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 78/255.0, 14/255.0, 5/255.0, "brown/red" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 1" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 123/255.0, 54/255.0, "brown 2" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 3" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 63/255.0, 126/255.0, 71/255.0, "green 1" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 117/255.0, 122/255.0, 90/255.0, "green 2" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 51/255.0, 43/255.0, 22/255.0,
"FR4 natural, dark" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 109/255.0, 116/255.0, 75/255.0, "FR4 natural" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 78/255.0, 14/255.0, 5/255.0, "brown/red" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 1" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 160/255.0, 123/255.0, 54/255.0, "brown 2" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 146/255.0, 99/255.0, 47/255.0, "brown 3" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 63/255.0, 126/255.0, 71/255.0, "green 1" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 117/255.0, 122/255.0, 90/255.0, "green 2" ) );
if( Set3DColorFromUser( m_settings.m_BoardBodyColor, _( "Board Body Color" ), &colors ) )
{
bool change = Set3DColorFromUser( m_settings.m_BoardBodyColor, _( "Board Body Color" ),
&definedColors );
if( change )
NewDisplay( true );
return true;
}
return false;
return change;
}
bool EDA_3D_VIEWER::Set3DSolderPasteColorFromUser()
{
CUSTOM_COLORS_LIST colors;
CUSTOM_COLORS_LIST definedColors;
colors.push_back( CUSTOM_COLOR_ITEM( 128/255.0, 128/255.0, 128/255.0, "grey" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
colors.push_back( CUSTOM_COLOR_ITEM( 90/255.0, 90/255.0, 90/255.0, "grey 2" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 128/255.0, 128/255.0, 128/255.0, "grey" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 213/255.0, 213/255.0, 213/255.0, "Silver" ) );
definedColors.push_back( CUSTOM_COLOR_ITEM( 90/255.0, 90/255.0, 90/255.0, "grey 2" ) );
if( Set3DColorFromUser( m_settings.m_SolderPasteColor, _( "Solder Paste Color" ), &colors ) )
{
bool change = Set3DColorFromUser( m_settings.m_SolderPasteColor,
_( "Solder Paste Color" ), &definedColors );
if( change )
NewDisplay( true );
return true;
}
return false;
return change;
}
void EDA_3D_VIEWER::OnUpdateUIEngine( wxUpdateUIEvent& aEvent )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIEngine %s %s",
( !m_disable_ray_tracing ) ? "enable" : "disable",
( m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING ) ?
"Ray Trace" : "OpenGL Legacy" );
aEvent.Enable( !m_disable_ray_tracing );
aEvent.Check( m_settings.RenderEngineGet() != RENDER_ENGINE_OPENGL_LEGACY );
}
void EDA_3D_VIEWER::OnUpdateUIMaterial( wxUpdateUIEvent& aEvent )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIMaterial() id %d", aEvent.GetId() );
// Set the state of toggle menus according to the current display options
switch( aEvent.GetId() )
{
@@ -1148,6 +1227,74 @@ void EDA_3D_VIEWER::OnUpdateUIMaterial( wxUpdateUIEvent& aEvent )
}
void EDA_3D_VIEWER::OnUpdateUIOpenGL( wxUpdateUIEvent& aEvent )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIOpenGL() id %d", aEvent.GetId() );
// OpenGL
switch( aEvent.GetId() )
{
case ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS:
aEvent.Check( m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) );
break;
case ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX:
aEvent.Check( m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) );
break;
default:
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::OnUpdateUIOpenGL()" );
}
}
void EDA_3D_VIEWER::OnUpdateUIRayTracing( wxUpdateUIEvent& aEvent )
{
wxLogTrace( m_logTrace, "EDA_3D_VIEWER::OnUpdateUIRayTracing() id %d", aEvent.GetId() );
// Raytracing
switch( aEvent.GetId() )
{
case ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS:
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_SHADOWS ) );
break;
case ID_MENU3D_FL_RAYTRACING_BACKFLOOR:
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR ) );
break;
case ID_MENU3D_FL_RAYTRACING_REFRACTIONS:
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFRACTIONS ) );
break;
case ID_MENU3D_FL_RAYTRACING_REFLECTIONS:
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS ) );
break;
case ID_MENU3D_FL_RAYTRACING_POST_PROCESSING:
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING ) );
break;
case ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING:
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING ) );
break;
case ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES:
aEvent.Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) );
break;
default:
wxFAIL_MSG( "Invalid event in EDA_3D_VIEWER::OnUpdateUIMaterial()" );
}
}
void EDA_3D_VIEWER::OnUpdateUIAxis( wxUpdateUIEvent& aEvent )
{
aEvent.Check( m_settings.GetFlag( FL_AXIS ) );
}
void EDA_3D_VIEWER::loadCommonSettings()
{
wxCHECK_RET( m_canvas, "Cannot load settings to null canvas" );
+51 -16
View File
@@ -39,16 +39,9 @@
#include <../common/dialogs/dialog_color_picker.h> // for CUSTOM_COLORS_LIST definition
/// A variable name whose value holds the path of 3D shape files.
/// Currently an environment variable, eventually a project variable.
#define KISYS3DMOD wxT( "KISYS3DMOD" )
#define KICAD_DEFAULT_3D_DRAWFRAME_STYLE (wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS)
#define VIEWER3D_FRAMENAME wxT( "Viewer3DFrameName" )
#define QUALIFIED_VIEWER3D_FRAMENAME( parent ) \
( wxString( VIEWER3D_FRAMENAME ) + wxT( ":" ) + parent->GetName() )
/**
* Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard
@@ -90,11 +83,30 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
*/
void NewDisplay( bool aForceImmediateRedraw = false );
/**
* Set the default file name (eg: to be suggested to a screenshot)
* @param aFn = file name to assign
*/
void SetDefaultFileName( const wxString& aFn )
{
m_defaultSaveScreenshotFileName = aFn;
}
/**
* @return the default suggested file name
*/
const wxFileName& GetDefaultFileName() const { return m_defaultSaveScreenshotFileName; }
/**
* @return current settings
*/
CINFO3D_VISU &GetSettings() { return m_settings; }
/**
* 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
@@ -149,7 +161,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
* need to do this manually from the PCB frame because the 3D viewer isn't
* updated via the #KIWAY.
*/
void CommonSettingsChanged( bool aEnvVarsChanged ) override;
void CommonSettingsChanged() override;
private:
/// Called when user press the File->Exit
@@ -164,6 +176,12 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void OnRenderEngineSelection( wxCommandEvent &event );
void OnDisableRayTracing( wxCommandEvent& aEvent );
void OnUpdateUIEngine( wxUpdateUIEvent& aEvent );
void OnUpdateUIMaterial( wxUpdateUIEvent& aEvent );
void OnUpdateUIOpenGL( wxUpdateUIEvent& aEvent );
void OnUpdateUIRayTracing( wxUpdateUIEvent& aEvent );
void OnUpdateUIAxis( wxUpdateUIEvent& aEvent );
void ProcessZoom( wxCommandEvent &event );
void OnActivate( wxActivateEvent &event );
@@ -172,22 +190,30 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void Install3DViewOptionDialog( wxCommandEvent &event );
void OnUpdateUIEngine( wxUpdateUIEvent& aEvent );
void OnUpdateUIMaterial( wxUpdateUIEvent& aEvent );
void CreateMenuBar();
void DisplayHotKeys()
{
DisplayHotkeyList( this, GetHotkeyConfig() );
}
/**
* Equivalent of EDA_DRAW_FRAME::ReCreateHToolbar
*/
void ReCreateMainToolbar();
void SetToolbars();
void SaveSettings( wxConfigBase *aCfg ) override;
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 );
/**
* Create a Screenshot of the current 3D view.
* Output file format is png or jpeg, or image is copied to the clipboard
@@ -208,13 +234,22 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
*/
void loadCommonSettings();
wxFileName m_defaultSaveScreenshotFileName;
/**
* Filename to propose for save a screenshot
*/
wxFileName m_defaultSaveScreenshotFileName;
wxAuiToolBar* m_mainToolBar;
EDA_3D_CANVAS* m_canvas;
CINFO3D_VISU m_settings;
/**
* The canvas where the openGL context will be rendered
*/
EDA_3D_CANVAS *m_canvas;
bool m_disable_ray_tracing;
/**
* Store all the settings and options to be used by the renders
*/
CINFO3D_VISU m_settings;
bool m_disable_ray_tracing;
/**
* Trace mask used to enable or disable the trace output of this class.
+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;
}
+11 -7
View File
@@ -32,13 +32,13 @@ enum id_3dview_frm
ID_ORTHO,
ID_MENU3D_COLOR,
ID_MENU3D_BGCOLOR,
ID_MENU3D_BGCOLOR_BOTTOM,
ID_MENU3D_BGCOLOR_TOP,
ID_MENU3D_SILKSCREEN_COLOR,
ID_MENU3D_SOLDERMASK_COLOR,
ID_MENU3D_SOLDERPASTE_COLOR,
ID_MENU3D_PCB_BODY_COLOR,
ID_MENU3D_COPPER_COLOR,
ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
ID_MENU3D_BGCOLOR_TOP_SELECTION,
ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
ID_MENU3D_PCB_BODY_COLOR_SELECTION,
ID_MENU3D_COPPER_COLOR_SELECTION,
ID_MENU3D_AXIS_ONOFF,
ID_MENU3D_MODULE_ONOFF,
@@ -85,6 +85,8 @@ enum id_3dview_frm
ID_MENU3D_RESET_DEFAULTS,
// Help
ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST,
ID_MENU_COMMAND_END,
ID_RENDER_CURRENT_VIEW,
@@ -101,6 +103,8 @@ enum id_3dview_frm
ID_DISABLE_RAY_TRACING,
ID_CUSTOM_EVENT_1, // A id for a custom event (canvas refresh request)
ID_POPUP_3D_VIEW_START,
ID_POPUP_ZOOMIN,
ID_POPUP_ZOOMOUT,
+2 -1
View File
@@ -6,6 +6,7 @@ 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
3d_canvas
3d_cache
@@ -87,8 +88,8 @@ set(3D-VIEWER_SRCS
3d_rendering/cpostshader.cpp
3d_rendering/cpostshader_ssao.cpp
3d_rendering/ctrack_ball.cpp
3d_viewer/3d_actions.cpp
3d_viewer/3d_menubar.cpp
3d_viewer/hotkeys.cpp
3d_rendering/test_cases.cpp
3d_rendering/trackball.cpp
3d_viewer/3d_toolbar.cpp
+3 -2
View File
@@ -46,9 +46,10 @@ Russell Oliver <roliver8143[at]gmail-dot-com>
Seth Hillbrand <hillbrand[at]ucdavis-dot-edu>
Jeff Young <jeff[at]rokeby-dot-ie>
Kevin Cozens <kevin[at]ve3syb-dot-ca>
Ian McInerney <ian.s.mcinerney[at]ieee-dot-org>
See git repo on launchpad for contributors at
https://code.launchpad.net/~kicad-product-committers/kicad/+git/product-git/+ref/master.
See git repo on GitLab for contributors at
https://gitlab.com/kicad/code/kicad/-/graphs/master
== Document Writers
+74 -118
View File
@@ -21,14 +21,7 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
cmake_minimum_required( VERSION 3.0.2 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()
cmake_minimum_required( VERSION 3.2 FATAL_ERROR )
# Default to CMAKE_BUILD_TYPE = Release unless overridden on command line
# http://www.cmake.org/pipermail/cmake/2008-September/023808.html
@@ -60,6 +53,12 @@ option( BUILD_SMALL_DEBUG_FILES "In debug build: create smaller binaries." OFF )
# so that build option settings can be included in bug reports.
#
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 and GTK3 (default OFF)." )
option( KICAD_SCRIPTING
"Build the Python scripting support inside KiCad binaries (default ON)."
ON )
@@ -85,12 +84,12 @@ option( KICAD_SCRIPTING_ACTION_MENU
ON )
option( KICAD_USE_OCE
"Build tools and plugins related to OpenCascade Community Edition (default ON)"
ON )
"Build tools and plugins related to OpenCascade Community Edition (default OFF)"
OFF )
option( KICAD_USE_OCC
"Build tools and plugins related to OpenCascade Technology (overrides KICAD_USE_OCE, default OFF)"
OFF )
"Build tools and plugins related to OpenCascade Technology (overrides KICAD_USE_OCE, default ON)"
ON )
option( KICAD_INSTALL_DEMOS
"Install KiCad demos and examples (default ON)"
@@ -108,27 +107,6 @@ option( KICAD_SPICE
"Build KiCad with internal Spice simulator."
ON )
# Not supported by all platforms (for instance mingw)
option( KICAD_SANITIZE
"Build KiCad with sanitizer options. WARNING: Not compatible with gold linker"
OFF )
option( KICAD_STDLIB_DEBUG
"Build KiCad with libstdc++ debug flags enabled."
OFF )
option( KICAD_STDLIB_LIGHT_DEBUG
"Build KiCad with libstdc++ with -Wp,-D_GLIBCXX_ASSERTIONS flag enabled. Not as intrusive as KICAD_STDLIB_DEBUG"
OFF )
option( KICAD_BUILD_PARALLEL_CL_MP
"Build in parallel using the /MP compiler option (default OFF for safety reasons)"
OFF )
option( KICAD_USE_VALGRIND
"Build KiCad with valgrind stack tracking enabled."
OFF )
# 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 )
@@ -158,17 +136,15 @@ endif()
set( CMAKE_CXX_VISIBILITY_PRESET "hidden" )
set( CMAKE_VISIBILITY_INLINES_HIDDEN ON )
# Global setting: build everything position independent
set( CMAKE_POSITION_INDEPENDENT_CODE ON )
# Global setting: Use C++14
set(CMAKE_CXX_STANDARD 14)
# Global setting: Use C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Enable additional valgrind instrumentation for stack tracking in libcontext
if( KICAD_USE_VALGRIND )
add_definitions( -DKICAD_USE_VALGRIND )
endif()
# CMP0063: CMake < 3.3 does not handle hidden visibility for static libraries,
# and 3.3 is backwards compatible when the minimum version is smaller than 3.3.
@@ -192,9 +168,12 @@ endif()
# Add option to add user directories for linker, if any
LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} )
set( KICAD_CONFIG_DIR "kicad" CACHE STRING "Location of user specific KiCad config files" )
mark_as_advanced( KICAD_CONFIG_DIR )
add_definitions( -DKICAD_CONFIG_DIR=${KICAD_CONFIG_DIR} )
if( UNIX )
set( KICAD_USER_CONFIG_DIR $ENV{HOME} CACHE PATH "Location of user specific KiCad config files" )
elseif( MINGW )
set( KICAD_USER_CONFIG_DIR $ENV{APPDATA} CACHE PATH "Location of user specific KiCad config files" )
endif()
mark_as_advanced( KICAD_USER_CONFIG_DIR )
# Set default data file path to CMAKE_INSTALL_PREFIX if it wasn't specified during the
# CMake configuration. The value of DEFAULT_INSTALL_PATH is expanded in config.h and
@@ -214,24 +193,6 @@ include( PerformFeatureChecks )
perform_feature_checks()
# Workaround: CMake < 3.1 does not support CMAKE_CXX_STANDARD
if( NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 3.1 )
message( FATAL_ERROR "Remove compatibility code" )
endif()
if( CMAKE_VERSION VERSION_LESS 3.1 AND ( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" ) )
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=gnu++14" COMPILER_SUPPORTS_CXX14)
if(COMPILER_SUPPORTS_CXX14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++14 support. Please use a different C++ compiler.")
endif()
endif()
# Warn about missing override specifiers, if supported
if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
include(CheckCXXCompilerFlag)
@@ -270,10 +231,6 @@ if( WIN32 )
# define UNICODE and_UNICODE definition on Windows. KiCad uses unicode.
# Both definitions are required
add_definitions(-DUNICODE -D_UNICODE)
# In fully standards-compliant mode, M_PI et al. are defined only if
# _USE_MATH_DEFINES is set.
add_definitions( -D_USE_MATH_DEFINES )
endif()
@@ -343,21 +300,6 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
endif()
if( KICAD_SANITIZE )
add_definitions( -DKICAD_SANITIZE )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_SANITIZE_VECTOR -fsanitize=address -fno-optimize-sibling-calls -fsanitize-address-use-after-scope -fno-omit-frame-pointer" )
endif()
if( KICAD_STDLIB_DEBUG )
add_definitions( -DKICAD_STDLIB_DEBUG )
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_DEBUG" )
elseif( KICAD_STDLIB_LIGHT_DEBUG )
# useless if KICAD_STDLIB_DEBUG is ON.
# this option makes some controls to trap out of bound memory access.
add_definitions( -DKICAD_STDLIB_LIGHT_DEBUG )
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wp,-D_GLIBCXX_ASSERTIONS" )
endif()
if( MINGW )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
@@ -388,11 +330,17 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
elseif( NOT APPLE )
# Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it)
# temporarily disabled due to breaking ASAN-enabled builds - Tom
# set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
# set( CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined" )
set( CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined" )
set( CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined" )
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} -Wl,-Bsymbolic" )
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-Bsymbolic" )
endif()
if( APPLE )
@@ -401,36 +349,8 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
endif( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
if( MSVC )
# Disallow implicit linking for Boost
add_definitions( -DBOOST_ALL_NO_LIB )
# Disable MSVC's deprecation warnings
add_definitions( -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS )
# Hide Windows's min() and max() macros
add_definitions( -DNOMINMAX )
# source and execution charset are UTF-8
string( APPEND CMAKE_CXX_FLAGS " /utf-8" )
# C4290: throw() is interpreted as declspec(nothrow)
string( APPEND CMAKE_CXX_FLAGS " /wd4290" )
# C4800: non-bool is explicitly cast to bool, forcing value of 0 or 1
string( APPEND CMAKE_CXX_FLAGS " /wd4800" )
# /Zi: create PDB
string( APPEND CMAKE_CXX_FLAGS " /Zi" )
# /GF: enable string pooling
string( APPEND CMAKE_CXX_FLAGS_RELEASE " /GF" )
foreach( type EXE SHARED MODULE)
# /DEBUG: create PDB
string( APPEND CMAKE_${type}_LINKER_FLAGS " /DEBUG" )
# /OPT:REF: omit unreferenced code
string( APPEND CMAKE_${type}_LINKER_FLAGS_RELEASE " /OPT:REF" )
# /OPT:ICF: fold common data
string( APPEND CMAKE_${type}_LINKER_FLAGS_RELEASE " /OPT:ICF" )
endforeach()
# Let cl.exe parallelize builds
if( KICAD_BUILD_PARALLEL_CL_MP )
string( APPEND CMAKE_CXX_FLAGS " /MP" )
endif()
if( USE_WX_OVERLAY OR APPLE )
add_definitions( -DUSE_WX_OVERLAY )
endif()
if( KICAD_SCRIPTING )
@@ -468,13 +388,17 @@ endif()
if( KICAD_USE_OCC )
add_definitions( -DKICAD_USE_OCC )
remove_definitions( -DKICAD_USE_OCE )
unset( KICAD_USE_OCE )
unset( KICAD_USE_OCE CACHE )
endif()
if( KICAD_USE_CUSTOM_PADS )
add_definitions( -DKICAD_USE_CUSTOM_PADS )
endif()
if( USE_WX_GRAPHICS_CONTEXT OR APPLE )
add_definitions( -DUSE_WX_GRAPHICS_CONTEXT )
endif()
# KIFACE_SUFFIX is the file extension used for top level program modules which
# implement the KIFACE interface. A valid suffix starts with a period '.'.
@@ -636,6 +560,11 @@ 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 )
#
@@ -658,9 +587,16 @@ find_package( Boost 1.54.0 REQUIRED )
# Include MinGW resource compiler.
include( MinGWResourceCompiler )
# 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 )
# we need the gdiplus library for cairo printing on windows
set( GDI_PLUS_LIBRARIES gdiplus )
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
@@ -836,6 +772,11 @@ find_package( wxWidgets ${wxWidgets_REQ_VERSION} COMPONENTS gl aui adv html core
# 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} )
@@ -928,6 +869,16 @@ add_custom_target( uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" )
#################################################
# Generate platform metadata files
#################################################
if( APPLE )
include( ${CMAKE_MODULE_PATH}/WritePlatformMetadata_macos.cmake )
elseif( UNIX )
include( ${CMAKE_MODULE_PATH}/WritePlatformMetadata_linux.cmake )
endif()
#================================================
# Installation
#================================================
@@ -953,7 +904,7 @@ if( UNIX AND NOT APPLE )
set( UNIX_MIME_FILES ${UNIX_MIME_DIR}/mime )
set( UNIX_ICON_FILES ${UNIX_MIME_DIR}/icons )
set( UNIX_APPLICATIONS_FILES ${UNIX_MIME_DIR}/applications )
set( UNIX_APPDATA_FILES resources/linux/appdata )
set( UNIX_APPDATA_FILES ${PROJECT_BINARY_DIR}/resources/linux/appdata )
# Install Mime directory
install( DIRECTORY ${UNIX_ICON_FILES}
@@ -977,6 +928,9 @@ if( UNIX AND NOT APPLE )
install( DIRECTORY ${UNIX_APPDATA_FILES}
DESTINATION share
COMPONENT resources
FILES_MATCHING
PATTERN "*appdata.xml"
PATTERN "*.in" EXCLUDE
)
endif()
@@ -1006,7 +960,6 @@ endif()
# Binaries ( CMake targets )
add_subdirectory( bitmaps_png )
add_subdirectory( libs )
add_subdirectory( common )
add_subdirectory( 3d-viewer )
add_subdirectory( cvpcb )
@@ -1023,7 +976,10 @@ add_subdirectory( plugins ) # 3D plugins must be built before kicad
add_subdirectory( kicad ) # should follow pcbnew, eeschema
add_subdirectory( tools )
add_subdirectory( utils )
add_subdirectory( qa )
if( KICAD_BUILD_QA_TESTS )
add_subdirectory( qa )
endif()
# Resources
if ( KICAD_INSTALL_DEMOS )
@@ -27,6 +27,8 @@ macro( create_git_version_header _git_src_path )
find_package( Git )
if( GIT_FOUND )
message( STATUS "Using Git to determine build version string." )
set( _Git_SAVED_LC_ALL "$ENV{LC_ALL}" )
set( ENV{LC_ALL} C )
+342
View File
@@ -0,0 +1,342 @@
#.rst:
# FindOpenSSL
# -----------
#
# Try to find the OpenSSL encryption library
#
# Once done this will define
#
# ::
#
# OPENSSL_ROOT_DIR - Set this variable to the root installation of OpenSSL
#
#
#
# Read-Only variables:
#
# ::
#
# OPENSSL_FOUND - system has the OpenSSL library
# OPENSSL_INCLUDE_DIR - the OpenSSL include directory
# OPENSSL_LIBRARIES - The libraries needed to use OpenSSL
# OPENSSL_VERSION - This is set to $major.$minor.$revision$path (eg. 0.9.8s)
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
# Copyright 2006 Alexander Neundorf <neundorf@kde.org>
# Copyright 2009-2011 Mathieu Malaterre <mathieu.malaterre@gmail.com>
#
# 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.)
if (UNIX)
find_package(PkgConfig QUIET)
pkg_check_modules(_OPENSSL QUIET openssl)
endif ()
if (WIN32)
# http://www.slproweb.com/products/Win32OpenSSL.html
set(_OPENSSL_ROOT_HINTS
${OPENSSL_ROOT_DIR}
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;Inno Setup: App Path]"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;Inno Setup: App Path]"
ENV OPENSSL_ROOT_DIR
)
file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
set(_OPENSSL_ROOT_PATHS
"${_programfiles}/OpenSSL"
"${_programfiles}/OpenSSL-Win32"
"${_programfiles}/OpenSSL-Win64"
"C:/OpenSSL/"
"C:/OpenSSL-Win32/"
"C:/OpenSSL-Win64/"
)
unset(_programfiles)
else ()
set(_OPENSSL_ROOT_HINTS
${OPENSSL_ROOT_DIR}
ENV OPENSSL_ROOT_DIR
)
endif ()
set(_OPENSSL_ROOT_HINTS_AND_PATHS
HINTS ${_OPENSSL_ROOT_HINTS}
PATHS ${_OPENSSL_ROOT_PATHS}
)
find_path(OPENSSL_INCLUDE_DIR
NAMES
openssl/ssl.h
${_OPENSSL_ROOT_HINTS_AND_PATHS}
HINTS
${_OPENSSL_INCLUDEDIR}
PATH_SUFFIXES
include
)
if(WIN32 AND NOT CYGWIN)
if(MSVC)
# /MD and /MDd are the standard values - if someone wants to use
# others, the libnames have to change here too
# use also ssl and ssleay32 in debug as fallback for openssl < 0.9.8b
# TODO: handle /MT and static lib
# In Visual C++ naming convention each of these four kinds of Windows libraries has it's standard suffix:
# * MD for dynamic-release
# * MDd for dynamic-debug
# * MT for static-release
# * MTd for static-debug
# Implementation details:
# We are using the libraries located in the VC subdir instead of the parent directory eventhough :
# libeay32MD.lib is identical to ../libeay32.lib, and
# ssleay32MD.lib is identical to ../ssleay32.lib
find_library(LIB_EAY_DEBUG
NAMES
libeay32MDd
libeay32d
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
find_library(LIB_EAY_RELEASE
NAMES
libeay32MD
libeay32
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
find_library(SSL_EAY_DEBUG
NAMES
ssleay32MDd
ssleay32d
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
find_library(SSL_EAY_RELEASE
NAMES
ssleay32MD
ssleay32
ssl
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"VC"
"lib/VC"
)
set(LIB_EAY_LIBRARY_DEBUG "${LIB_EAY_DEBUG}")
set(LIB_EAY_LIBRARY_RELEASE "${LIB_EAY_RELEASE}")
set(SSL_EAY_LIBRARY_DEBUG "${SSL_EAY_DEBUG}")
set(SSL_EAY_LIBRARY_RELEASE "${SSL_EAY_RELEASE}")
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
select_library_configurations(LIB_EAY)
select_library_configurations(SSL_EAY)
mark_as_advanced(LIB_EAY_LIBRARY_DEBUG LIB_EAY_LIBRARY_RELEASE
SSL_EAY_LIBRARY_DEBUG SSL_EAY_LIBRARY_RELEASE)
set( OPENSSL_LIBRARIES ${SSL_EAY_LIBRARY} ${LIB_EAY_LIBRARY} )
elseif(MINGW)
message( STATUS "Searching for OpenSSL in MinGW." )
# same player, for MinGW
set(LIB_EAY_NAMES libeay32)
set(SSL_EAY_NAMES ssleay32)
list(APPEND LIB_EAY_NAMES crypto)
list(APPEND SSL_EAY_NAMES ssl)
find_library(LIB_EAY
NAMES
${LIB_EAY_NAMES}
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"lib/MinGW"
# Do not search system path. Otherwise the DLL will be found rather than the link library.
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_SYSTEM_PATH
)
find_library(SSL_EAY
NAMES
${SSL_EAY_NAMES}
${_OPENSSL_ROOT_HINTS_AND_PATHS}
PATH_SUFFIXES
"lib"
"lib/MinGW"
# Do not search system path. Otherwise the DLL will be found rather than the link library.
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_SYSTEM_PATH
)
mark_as_advanced(SSL_EAY LIB_EAY)
set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
unset(LIB_EAY_NAMES)
unset(SSL_EAY_NAMES)
else()
# Not sure what to pick for -say- intel, let's use the toplevel ones and hope someone report issues:
find_library(LIB_EAY
NAMES
libeay32
${_OPENSSL_ROOT_HINTS_AND_PATHS}
HINTS
${_OPENSSL_LIBDIR}
PATH_SUFFIXES
lib
)
find_library(SSL_EAY
NAMES
ssleay32
${_OPENSSL_ROOT_HINTS_AND_PATHS}
HINTS
${_OPENSSL_LIBDIR}
PATH_SUFFIXES
lib
)
mark_as_advanced(SSL_EAY LIB_EAY)
set( OPENSSL_LIBRARIES ${SSL_EAY} ${LIB_EAY} )
endif()
else()
find_library(OPENSSL_SSL_LIBRARY
NAMES
ssl
ssleay32
ssleay32MD
${_OPENSSL_ROOT_HINTS_AND_PATHS}
HINTS
${_OPENSSL_LIBDIR}
PATH_SUFFIXES
lib
)
find_library(OPENSSL_CRYPTO_LIBRARY
NAMES
crypto
${_OPENSSL_ROOT_HINTS_AND_PATHS}
HINTS
${_OPENSSL_LIBDIR}
PATH_SUFFIXES
lib
)
mark_as_advanced(OPENSSL_CRYPTO_LIBRARY OPENSSL_SSL_LIBRARY)
# compat defines
set(OPENSSL_SSL_LIBRARIES ${OPENSSL_SSL_LIBRARY})
set(OPENSSL_CRYPTO_LIBRARIES ${OPENSSL_CRYPTO_LIBRARY})
set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY})
endif()
function(from_hex HEX DEC)
string(TOUPPER "${HEX}" HEX)
set(_res 0)
string(LENGTH "${HEX}" _strlen)
while (_strlen GREATER 0)
math(EXPR _res "${_res} * 16")
string(SUBSTRING "${HEX}" 0 1 NIBBLE)
string(SUBSTRING "${HEX}" 1 -1 HEX)
if (NIBBLE STREQUAL "A")
math(EXPR _res "${_res} + 10")
elseif (NIBBLE STREQUAL "B")
math(EXPR _res "${_res} + 11")
elseif (NIBBLE STREQUAL "C")
math(EXPR _res "${_res} + 12")
elseif (NIBBLE STREQUAL "D")
math(EXPR _res "${_res} + 13")
elseif (NIBBLE STREQUAL "E")
math(EXPR _res "${_res} + 14")
elseif (NIBBLE STREQUAL "F")
math(EXPR _res "${_res} + 15")
else()
math(EXPR _res "${_res} + ${NIBBLE}")
endif()
string(LENGTH "${HEX}" _strlen)
endwhile()
set(${DEC} ${_res} PARENT_SCOPE)
endfunction()
if (OPENSSL_INCLUDE_DIR)
if (_OPENSSL_VERSION)
set(OPENSSL_VERSION "${_OPENSSL_VERSION}")
elseif(OPENSSL_INCLUDE_DIR AND EXISTS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h")
file(STRINGS "${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h" openssl_version_str
REGEX "^#[\t ]*define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
# The version number is encoded as 0xMNNFFPPS: major minor fix patch status
# The status gives if this is a developer or prerelease and is ignored here.
# Major, minor, and fix directly translate into the version numbers shown in
# the string. The patch field translates to the single character suffix that
# indicates the bug fix state, which 00 -> nothing, 01 -> a, 02 -> b and so
# on.
message(STATUS "OPENSSL_VERSION_STR=${openssl_version_str}")
string(REGEX REPLACE "^.*OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]).*$"
"\\1;\\2;\\3;\\4;\\5" OPENSSL_VERSION_LIST "${openssl_version_str}")
list(GET OPENSSL_VERSION_LIST 0 OPENSSL_VERSION_MAJOR)
list(GET OPENSSL_VERSION_LIST 1 OPENSSL_VERSION_MINOR)
from_hex("${OPENSSL_VERSION_MINOR}" OPENSSL_VERSION_MINOR)
list(GET OPENSSL_VERSION_LIST 2 OPENSSL_VERSION_FIX)
from_hex("${OPENSSL_VERSION_FIX}" OPENSSL_VERSION_FIX)
list(GET OPENSSL_VERSION_LIST 3 OPENSSL_VERSION_PATCH)
if (NOT OPENSSL_VERSION_PATCH STREQUAL "00")
from_hex("${OPENSSL_VERSION_PATCH}" _tmp)
# 96 is the ASCII code of 'a' minus 1
math(EXPR OPENSSL_VERSION_PATCH_ASCII "${_tmp} + 96")
unset(_tmp)
# Once anyone knows how OpenSSL would call the patch versions beyond 'z'
# this should be updated to handle that, too. This has not happened yet
# so it is simply ignored here for now.
string(ASCII "${OPENSSL_VERSION_PATCH_ASCII}" OPENSSL_VERSION_PATCH_STRING)
endif ()
set(OPENSSL_VERSION "${OPENSSL_VERSION_MAJOR}.${OPENSSL_VERSION_MINOR}.${OPENSSL_VERSION_FIX}${OPENSSL_VERSION_PATCH_STRING}")
endif ()
endif ()
include(FindPackageHandleStandardArgs)
if (OPENSSL_VERSION)
find_package_handle_standard_args(OpenSSL
REQUIRED_VARS
OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR
VERSION_VAR
OPENSSL_VERSION
FAIL_MESSAGE
"Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
)
else ()
find_package_handle_standard_args(OpenSSL "Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR"
OPENSSL_LIBRARIES
OPENSSL_INCLUDE_DIR
)
endif ()
mark_as_advanced(OPENSSL_INCLUDE_DIR OPENSSL_LIBRARIES)
+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.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
set(_PYTHON3_VERSIONS 3.10 3.9 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.8 3.7 3.6 3.5 3.4 3.3 3.2 3.1 3.0)
set(_PYTHON3_VERSIONS 3.10 3.9 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]+.*)?$")
+1 -1
View File
@@ -55,7 +55,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
find_program(SWIG_EXECUTABLE NAMES swig3.0 swig2.0 swig)
find_program(SWIG_EXECUTABLE NAMES swig4.0 swig3.0 swig2.0 swig)
if(SWIG_EXECUTABLE)
execute_process(COMMAND ${SWIG_EXECUTABLE} -swiglib
+97 -6
View File
@@ -1,6 +1,8 @@
# CMake script for finding libngspice
# Copyright (C) 2016 CERN
# Copyright (C) 2020 Kicad Developers, see AUTHORS.txt for contributors.
#
# Author: Maciej Suminski <maciej.suminski@cern.ch>
#
# This program is free software; you can redistribute it and/or
@@ -20,21 +22,108 @@
# or you may write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
# Usage:
#
# ngspice uses pkg-config to gather the configuration information so the pkg-config
# information is used to populate the CMake find_* commands. When pkg-config is not
# available, the fallback is the default platform search paths set up by CMake. The
# default search paths can be overridden by user. The order of precedence is as
# follows:
#
# User defined root path NGSPICE_ROOT_DIR on CMake command line.
# User defined root path environment variable NGSPICE_ROOT_DIR.
# Paths generated by pkg-config.
# The default system paths configured by CMake
#
# For a specific ngspice include path not defined above set NGSPICE_INCLUDE_PATH.
#
# For a specific ngspice library path not defined above set NGSPICE_LIBRARY_PATH.
# Use pkg-config if it's available.
find_package(PkgConfig)
if( PKG_CONFIG_FOUND )
pkg_check_modules( _NGSPICE ngspice )
if( _NGSPICE_FOUND )
set( NGSPICE_BUILD_VERSION "${_NGSPICE_VERSION}" CACHE STRING
"ngspice version returned by pkg-config" )
endif()
endif()
find_path( NGSPICE_INCLUDE_DIR ngspice/sharedspice.h
PATHS ${NGSPICE_ROOT_DIR} $ENV{NGSPICE_ROOT_DIR} ${NGSPICE_INCLUDE_PATH}
${NGSPICE_ROOT_DIR}/include
PATH_SUFFIXES src/include share/ngspice/include share/ngspice/include/ngspice
PATHS
${NGSPICE_ROOT_DIR}
$ENV{NGSPICE_ROOT_DIR}
${NGSPICE_INCLUDE_PATH}
${_NGSPICE_INCLUDE_DIRS}
PATH_SUFFIXES
include
src/include
share/ngspice/include
share/ngspice/include/ngspice
)
find_library( NGSPICE_LIBRARY ngspice
PATHS ${NGSPICE_ROOT_DIR} $ENV{NGSPICE_ROOT_DIR} ${NGSPICE_LIBRARY_PATH}
PATH_SUFFIXES src/.libs lib
if( UNIX )
set( NGSPICE_LIB_NAME libngspice.so.0 CACHE STRING "Optionally versioned name of the shared library" )
else()
set( NGSPICE_LIB_NAME ngspice CACHE STRING "Optionally versioned name of the shared library" )
endif()
find_library( NGSPICE_LIBRARY ${NGSPICE_LIB_NAME}
PATHS
${NGSPICE_ROOT_DIR}
$ENV{NGSPICE_ROOT_DIR}
${NGSPICE_LIBRARY_PATH}
${_NGSPICE_LIBRARY_DIRS}
PATH_SUFFIXES
src/.libs
lib
)
# If the ngspice version is not set by pkg-config, see if ngspice/config.h is available.
if( NOT NGSPICE_BUILD_VERSION )
find_file( NGSPICE_CONFIG_H ngspice/config.h
PATHS
${NGSPICE_ROOT_DIR}
$ENV{NGSPICE_ROOT_DIR}
${NGSPICE_INCLUDE_PATH}
${_NGSPICE_INCLUDE_DIRS}
PATH_SUFFIXES
include
src/include
share/ngspice/include
share/ngspice/include/ngspice
)
if( NOT NGSPICE_CONFIG_H-NOTFOUND )
message( STATUS "ngspice configuration file ${NGSPICE_CONFIG_H} found." )
set( NGSPICE_HAVE_CONFIG_H "1" CACHE STRING "ngspice/config.h header found." )
endif()
endif()
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 )
# Some msys versions do not find xxx.dll lib files, only xxx.dll.a files
# so try a find_file in exec paths
if( NGSPICE_DLL STREQUAL "NGSPICE_DLL-NOTFOUND" )
find_file( NGSPICE_DLL NAMES libngspice-0.dll libngspice-1.dll
PATHS
${NGSPICE_ROOT_DIR}
PATH_SUFFIXES
bin
lib
)
endif()
if( NGSPICE_DLL STREQUAL "NGSPICE_DLL-NOTFOUND" )
message( ERROR ":\n***** libngspice-x.dll not found in any executable path *****\n\n" )
else()
message( STATUS ": libngspice shared lib found: ${NGSPICE_DLL}\n" )
endif()
else()
set( NGSPICE_DLL "${NGSPICE_LIBRARY}" )
endif()
@@ -62,4 +151,6 @@ mark_as_advanced(
NGSPICE_INCLUDE_DIR
NGSPICE_LIBRARY
NGSPICE_DLL
NGSPICE_BUILD_VERSION
NGSPICE_HAVE_CONFIG_H
)
+17 -8
View File
@@ -33,24 +33,33 @@
function( make_lexer outputTarget inputFile outHeaderFile outCppFile enum )
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${outHeaderFile}
${CMAKE_CURRENT_BINARY_DIR}/${outCppFile}
OUTPUT ${outHeaderFile}
${outCppFile}
COMMAND ${CMAKE_COMMAND}
-Denum=${enum}
-DinputFile=${CMAKE_CURRENT_SOURCE_DIR}/${inputFile}
-DoutHeaderFile=${CMAKE_CURRENT_BINARY_DIR}/${outHeaderFile}
-DoutCppFile=${CMAKE_CURRENT_BINARY_DIR}/${outCppFile}
-DinputFile=${inputFile}
-DoutHeaderFile=${outHeaderFile}
-DoutCppFile=${outCppFile}
-P ${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake
COMMENT "TokenList2DsnLexer.cmake creating:
${outHeaderFile} and
${outCppFile} from
${inputFile}"
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${inputFile}
)
add_custom_target( ${outputTarget}
DEPENDS ${outHeaderFile} ${outCppFile}
${CMAKE_MODULE_PATH}/TokenList2DsnLexer.cmake
)
target_sources( ${outputTarget} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${outCppFile} )
target_include_directories( ${outputTarget} PUBLIC ${CMAKE_CURRENT_BINARY_DIR} )
# extra_args, if any, are treated as source files (typically headers) which
# are known to depend on the generated outHeader.
foreach( extra_arg ${ARGN} )
set_source_files_properties( ${extra_arg}
PROPERTIES OBJECT_DEPENDS ${outHeaderFile}
)
endforeach()
endfunction()
@@ -1,7 +1,8 @@
#
# This program source code file is part of KICAD, a free EDA CAD application.
#
# Copyright (C) 2019 Kicad Developers, see AUTHORS.txt for contributors.
# Copyright (C) 2019 Ian McInerney <Ian.S.McInerney@ieee.org>
# Copyright (C) 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
@@ -21,27 +22,19 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
# Build file for the S-Expression library
# This file will create the full KiCad version string. The base of this string
# will be either the git tag followed by the commit hash (if built inside a git
# repository), or the version from KiCadVersion.cmake. The user-provided
# KICAD_VERSION_EXTRA is then appended to the base version string.
set( SEXPR_LIB_FILES
sexpr.cpp
sexpr_parser.cpp
)
# Use git to determine the version string if it's available.
include( ${CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
create_git_version_header( ${SRC_PATH} )
add_library( sexpr STATIC
${SEXPR_LIB_FILES}
)
# $KICAD_VERSION is set in KiCadVersion.cmake or by git (if it is available).
set( KICAD_VERSION_FULL "${KICAD_VERSION}" )
target_include_directories( sexpr PUBLIC
include
)
# the s-exp parser has a dep on the wxFile methods
target_link_libraries( sexpr
${wxWidgets_LIBRARIES}
)
# TODO get deps from here out of common
target_include_directories( sexpr PRIVATE
${CMAKE_SOURCE_DIR}/include
)
# Optional user version information defined at configuration.
if( KICAD_VERSION_EXTRA )
set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_VERSION_EXTRA}" )
endif()
-100
View File
@@ -1,100 +0,0 @@
# This program source code file is part of KiCad, a free EDA CAD application.
#
# Copyright (C) 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
#
# Utility CMake functions and targets for marshalling the builds of QA
# tests and tools
#
# CI tools can use this to force tests to output machine-readable formats
# when possible
option( KICAD_TEST_XML_OUTPUT
"Cause unit tests to output xUnit results where possible for more granular CI reporting."
OFF
)
mark_as_advanced( KICAD_TEST_XML_OUTPUT ) # Only CI tools need this
# This is a "meta" target that is used to collect all tests
add_custom_target( qa_all_tests )
# This is a "meta" target used to collect all utility tools
add_custom_target( qa_all_tools )
# This "meta" target builds all QA tools, utils, etc
add_custom_target( qa_all
DEPENDS qa_all_tests qa_all_tools
)
# Add a target as a "QA test" executable:
# * Added as a CTest test with the given name
# * Excluded from ALL when KICAD_BUILD_QA_TESTS not set
# * Is a dependency of qa_all_tests
function( kicad_add_boost_test TEST_EXEC_TARGET TEST_NAME)
set(BOOST_TEST_PARAMS "")
if( KICAD_TEST_XML_OUTPUT )
# Provide Boost-test-y XML params if asked
# Due to Boost issue in 1.62, have to use the --logger parameter, rather than
# separate --log_format, --log_sink, etc parameter
# https://svn.boost.org/trac10/ticket/12507
set(BOOST_TEST_PARAMS --logger=XML,all,${TEST_NAME}.boost-results.xml --report_level=no --result_code=no)
endif()
# Add the test to the CTest registry
add_test( NAME ${TEST_NAME}
COMMAND $<TARGET_FILE:${TEST_EXEC_TARGET}> ${BOOST_TEST_PARAMS}
)
# Make the overall test meta-target depend on this test
add_dependencies( qa_all_tests ${TEST_EXEC_TARGET} )
# If tests are not enabled by default, remove from the ALL target
# They can still be built manually, or all together with the qa_all_test target
if( NOT KICAD_BUILD_QA_TESTS )
set_target_properties( ${TEST_EXEC_TARGET}
PROPERTIES EXCLUDE_FROM_ALL TRUE
)
endif()
endfunction()
# Add a target as a "QA tool" executable:
# * Excluded from ALL when KICAD_BUILD_QA_TESTS not set
# * Is a dependency of qa_all_tools
function( kicad_add_utils_executable TARGET)
# If tests are not enabled by default, remove from the ALL target
# They can still be built manually, or all together with the qa_all_tools
if( NOT KICAD_BUILD_QA_TESTS )
set_target_properties( ${TARGET}
PROPERTIES EXCLUDE_FROM_ALL TRUE
)
endif()
# Make the overall test meta-target depend on this test
add_dependencies( qa_all_tools ${TARGET} )
endfunction()
+38 -38
View File
@@ -1,38 +1,38 @@
#
# 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 - 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.99.0-unknown" )
#
# 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 - 2021 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.1.12-unknown" )
+2 -2
View File
@@ -150,7 +150,7 @@ set( sourceFileHeader
* your DSN lexer.
*/
#include <${outHeaderFile}>
#include <${result}_lexer.h>
using namespace ${enum};
@@ -268,7 +268,7 @@ public:
/**
* Constructor ( LINE_READER* )
* initializes a lexer and prepares to read from @a aLineReader which
* intializes a lexer and prepares to read from @a aLineReader which
* is assumed ready, and may be in use by other DSNLEXERs also. No ownership
* is taken of @a aLineReader. This enables it to be used by other lexers also.
* The transition between grammars in such a case, must happen on a text
@@ -1,7 +1,8 @@
#
# This program source code file is part of KICAD, a free EDA CAD application.
#
# Copyright (C) 2019 Kicad Developers, see AUTHORS.txt for contributors.
# Copyright (C) 2019 Ian McInerney <Ian.S.McInerney@ieee.org>
# Copyright (C) 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
@@ -21,6 +22,25 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
# Build file for generic re-useable libraries
# This file will configure the linux appdata.xml file to include the version
# and build date.
add_subdirectory( sexpr )
message( STATUS "Creating linux metadata" )
# Create the KiCad version strings
set( SRC_PATH ${PROJECT_SOURCE_DIR} )
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
include( ${CMAKE_MODULE_PATH}/KiCadFullVersion.cmake )
# Create the date of the configure
string( TIMESTAMP KICAD_CONFIG_TIMESTAMP "%Y-%m-%d" )
# Configure the KiCad appdata file
configure_file( ${PROJECT_SOURCE_DIR}/resources/linux/appdata/kicad.appdata.xml.in
${PROJECT_BINARY_DIR}/resources/linux/appdata/kicad.appdata.xml
@ONLY )
# Ensure the file was configured successfully
if( NOT EXISTS ${PROJECT_BINARY_DIR}/resources/linux/appdata/kicad.appdata.xml )
message( FATAL_ERROR "Configuration failed to write file kicad.appdata.xml." )
endif()
@@ -0,0 +1,63 @@
#
# This program source code file is part of KICAD, a free EDA CAD application.
#
# Copyright (C) 2019 Ian McInerney <Ian.S.McInerney@ieee.org>
# Copyright (C) 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
#
# This file will configure the MacOS info.plist files to include the version
# and build date.
message( STATUS "Creating MacOS metadata" )
# Create the KiCad version strings
set( SRC_PATH ${PROJECT_SOURCE_DIR} )
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
include( ${CMAKE_MODULE_PATH}/KiCadFullVersion.cmake )
# Configure each plist file from the respurces directory and store it in the build directory
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/bitmap2component.Info.plist.in
${PROJECT_BINARY_DIR}/bitmap2component/Info.plist
@ONLY )
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/eeschema.Info.plist.in
${PROJECT_BINARY_DIR}/eeschema/Info.plist
@ONLY )
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/gerbview.Info.plist.in
${PROJECT_BINARY_DIR}/gerbview/Info.plist
@ONLY )
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/kicad.Info.plist.in
${PROJECT_BINARY_DIR}/kicad/Info.plist
@ONLY )
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/pcb_calculator.Info.plist.in
${PROJECT_BINARY_DIR}/pcb_calculator/Info.plist
@ONLY )
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/pcbnew.Info.plist.in
${PROJECT_BINARY_DIR}/pcbnew/Info.plist
@ONLY )
configure_file( ${PROJECT_SOURCE_DIR}/resources/macos/plist/pleditor.Info.plist.in
${PROJECT_BINARY_DIR}/pagelayout_editor/Info.plist
@ONLY )
+2 -18
View File
@@ -22,25 +22,9 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
# Automagically create version header file if the version string was
# not defined during the build configuration. If CreateGitVersionHeader
# cannot determine the current repo version, a version.h file is still
# created with KICAD_VERSION set in KiCadVersion.cmake.
# Create the KiCad version strings
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
# Always use git if it's available to determine the version string.
message( STATUS "Using Git to determine build version string." )
include( ${CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
create_git_version_header( ${SRC_PATH} )
# $KICAD_VERSION will always be set to something. Even if it is the default
# value set in KiCadVersion.cmake
set( KICAD_VERSION_FULL "${KICAD_VERSION}" )
# Optional user version information defined at configuration.
if( KICAD_VERSION_EXTRA )
set( KICAD_VERSION_FULL "${KICAD_VERSION_FULL}-${KICAD_VERSION_EXTRA}" )
endif()
include( ${CMAKE_MODULE_PATH}/KiCadFullVersion.cmake )
set( _wvh_new_version_text
"/* Do not modify this file, it was automatically generated by CMake. */
+6
View File
@@ -75,4 +75,10 @@
/// Allows scripts install directory to be referenced by the program code.
#define PYTHON_DEST "@PYTHON_DEST@"
/// ngspice version string detected by pkg-config when available.
#cmakedefine NGSPICE_BUILD_VERSION "@NGSPICE_BUILD_VERSION@"
/// When pkg-config config is not available for ngspice, use ngspice/config.h for version.
#cmakedefine NGSPICE_HAVE_CONFIG_H
#endif // CONFIG_H_
+1 -1
View File
@@ -194,7 +194,7 @@ jp charras:
* Add item clarification context menu to EESchema when multiple unresolved
items are found at the current cross hair position.
* Add collector class EE_COLLECTOR for supporting multiple item hit testing.
* Add collector class SCH_COLLECTOR for supporting multiple item hit testing.
* Removed bit wise masked filtering from schematic item hit testing.
* Removed all old hit testing functions and methods scattered about the
EESchema source code.
@@ -50,7 +50,7 @@ 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 ## {#tools}
## 1.3 Tools
There are some tools that can help you format your code easily.
+19 -29
View File
@@ -125,7 +125,7 @@ section.
## Ngspice Library ## {#ngspice}
The [Ngspice Library][libngspice] is used to provide Spice simulation support in the schematic
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.
@@ -135,6 +135,17 @@ KiCad has many build options that can be configured to build different options d
the availability of support for each option on a given platform. This section documents
these options and their default values.
## Advanced Graphics Context ## {#graphics_context_opt}
The USE_WX_GRAPHICS_CONTEXT option replaces wxDC with wxGraphicsContext for graphics rendering.
This option is disabled by default. Warning: the is experimental and has not been maintained
so use at your own risk.
## Graphics Context Overlay ## {#overlay_opt}
The USE_WX_OVERLAY option is used to enable the optional wxOverlay class for graphics rendering
on macOS. This is enabled on macOS by default and disabled on all other platforms.
## Scripting Support ## {#scripting_opt}
The KICAD_SCRIPTING option is used to enable building the Python scripting support into Pcbnew.
@@ -201,26 +212,17 @@ whether install them or not with the KICAD_INSTALL_DEMOS option. You can also se
install them with the KICAD_DEMOS variable. On Linux the demos are installed in
$PREFIX/share/kicad/demos by default.
## Quality assurance (QA) unit tests ## {#quality_assurance_tests_opt}
## Python Scripting Action Menu Support ## {#python_action_menu_opt}
The KICAD_BUILD_QA_TESTS option allows building unit tests binaries for quality assurance as part
of the default build. This option is enabled by default.
If this option is disabled, the QA binaries can still be built by manually specifying the target.
For example, with `make`:
* Build all QA binaries: `make qa_all`
* Build a specific test: `make qa_pcbnew`
* Build all unit tests: `make qa_all_tests`
* Build all test tool binaries: `make qa_all_tools`
For more information about testing KiCad, see [this page](testing.md).
The KICAD_SCRIPTING_ACTION_MENU option allows Python scripts to be added directly to the Pcbnew
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.
## KiCad Build Version ## {#build_version_opt}
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,
KICAD_VERSION_EXTRA appended to the former. If the KICAD_VERSION_EXTRA variable is not defined,
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:
@@ -233,18 +235,6 @@ information as follows:
|
output of `git describe --dirty` if git is available.
## KiCad Config Directory ## {#config_dir_opt}
The default KiCad configuration directory is `kicad`. On Linux this is located at
`~/.config/kicad`, on MSW, this is `C:\Documents and Settings\username\Application Data\kicad` and
on MacOS, this is `~/Library/Preferences/kicad`. If the installation package would like to, it may
specify an alternate configuration name instead of `kicad`. This may be useful for versioning
the configuration parameters and allowing the use of, e.g. `kicad5` and `kicad6` concurrently without
losing configuration data.
This is set by specifying the KICAD_CONFIG_DIR string at compile time.
# Getting the KiCad Source Code ## {#getting_src}
There are several ways to get the KiCad source. If you want to build the stable version you
@@ -481,8 +471,8 @@ to download and [build Boost][] from source. If you are building Boost on windo
you will have to apply the Boost patches in the KiCad source [patches folder][].
[download]: http://kicad-pcb.org/download/
[KiCad website]: http://kicad-pcb.org/
[download]: http://kicad.org/download/
[KiCad website]: http://kicad.org/
[KiCad Launchpad]: https://launchpad.net/kicad
[GNU GCC]: https://gcc.gnu.org/
[Clang]: http://clang.llvm.org/
+10 -12
View File
@@ -19,13 +19,13 @@ interpreter installed on the system.
The Pcbnew Python API can be used stand-alone, i.e. no instance of Pcbnew is
running and the board project to be manipulated is loaded and saved from and to
file. This approach is shown with some examples in the [user's
documentation](http://docs.kicad-pcb.org/stable/en/pcbnew.html#_kicad_scripting_reference).
documentation](http://docs.kicad.org/stable/en/pcbnew.html#_kicad_scripting_reference).
Another documentation source is the auto-generated Doxygen reference of the
API. It can be found
[here](http://docs.kicad-pcb.org/doxygen-python/namespacepcbnew.html).
[here](http://docs.kicad.org/doxygen-python/namespacepcbnew.html).
# \`Action Plugin\` Support # {#ppi_action_pi}
# `Action Plugin` Support # {#ppi_action_pi}
Besides the stand-alone usage of the generated Python plugin interface,
additional support regarding online manipulation of board projects is available
for Pcbnew. Plugins using this feature are called `Action Plugins` and they are
@@ -44,23 +44,21 @@ In order for the discovery process to work, the following requirements must be m
* The plugin must be installed in the KiCad plugins search paths as documented
in `scripting/kicadplugins.i`. You can always discover the search path for your
setup by opening the scripting console and entering the command:
setup by opening the Scripting console and entering the command: `import pcbnew;
print pcbnew.PLUGIN_DIRECTORIES_SEARCH`.
`import pcbnew; print pcbnew.PLUGIN_DIRECTORIES_SEARCH`
Currently on a Linux Installation the plugins search path is
Currently on a Linux Installation the plugins search path is
* /usr/share/kicad/scripting/plugins/
* ~/.kicad/scripting/plugins
* ~/.kicad_plugins/
On Windows
On Windows
* \%KICAD_INSTALL_PATH%/share/kicad/scripting/plugins
* \%APPDATA%/Roaming/kicad/scripting/plugins
* \{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
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
+2 -2
View File
@@ -101,5 +101,5 @@ capabilities.
- In progress.
[kicad-website]:http://kicad-pcb.org/
[kicad-docs]:http://ci.kicad-pcb.org/job/kicad-doxygen/ws/Documentation/doxygen/html/index.html
[kicad-website]:http://kicad.org/
[kicad-docs]:http://ci.kicad.org/job/kicad-doxygen/ws/Documentation/doxygen/html/index.html
@@ -71,7 +71,7 @@ GitHub plugin.
To provide a convenient method for system packagers to build KiCad from known stable sources,
source archives in the most common formats along with the resulting md5sum checksum will be
added to either the KiCad developer's site on Launchpad or the main website at www.kicad-pcb.org.
added to either the KiCad developer's site on Launchpad or the main website at www.kicad.org.
# Stable Release Announcement # {#announcement}
-170
View File
@@ -1,170 +0,0 @@
# Technical To-Do List {#technical_todo}
Some work is blocked for technical reasons, and can only be done once
certain other criteria are met (e.g. library versions).
Because KiCad supports distributions with relatively long support cycles,
many of these workarounds will be required for some time, so they are easily
forgotten.
This section collects these so they can be dealt with when the project's
minimum version for that dependency is met. This kind of code should always be
documented in detail at the place of use, so that it's clear what action should
be taken in future.
[TOC]
# C++ Versions {#todo_cpp_version}
Newer C++ versions include features that make some of our current code unnecessary.
## C++11 {#todo_cpp_11}
This C++ standard version is already used by KiCad, but much code that pre-dates
the version switch exists and can be tidied.
* [`std::auto_ptr`](https://en.cppreference.com/w/cpp/memory/auto_ptr)
should be changed to [`std::unique_ptr`](https://en.cppreference.com/w/cpp/memory/unique_ptr).
`auto_ptr` is removed entirely in C++17.
## C++14 {#todo_cpp_14}
Compiler support:
* GCC: complete by GCC 5: [GCC C++14 support](https://gcc.gnu.org/projects/cxx-status.html#cxx14).
Provides:
* [`std::make_unique`](https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)
is available. The "polyfill" in `make_unique.h` is no longer required and can
be removed.
## C++17 {#todo_cpp_17}
Compiler support:
* GCC: from GCC 5 to 7: [GCC C++17 support](https://gcc.gnu.org/projects/cxx-status.html#cxx17).
Provides:
* `OPT<>` can be replaced with [`std::optional`](https://en.cppreference.com/w/cpp/utility/optional).
Header `core/optional.h` can be removed and replaced with the built-in `<optional>`.
Needs [GCC 7][].
* [`std::filesystem`](https://en.cppreference.com/w/cpp/filesystem)
can replace `boost::filesystem` and the Boost dependency can be dropped entirely
from the CMake files.
# Compilers {#compilers}
Some compilers have bugs or limitations to C++ standard support.
## GCC {#todo_gcc}
Current versions:
* Debian Stretch: [6.3.0](https://packages.debian.org/stretch/gcc)
* Debian Buster: [8.3.0](https://packages.debian.org/buster/gcc)
* Ubuntu 14.04: [4.8.2](https://packages.ubuntu.com/trusty/gcc)
* Ubuntu 16.04: [5.3.1](https://packages.ubuntu.com/xenial/gcc)
* Ubuntu 18.04: [7.3.0](https://packages.ubuntu.com/bionic/gcc)
### GCC 7 {#todo_gcc_7}
* Fixes [bug #56480](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480)
(Explicit specialization in a different namespace). This
means the `BOOST_TEST_PRINT_NAMESPACE_OPEN` macro is not required, a namespace
alias can be used instead.
# 3rd Party Libraries # {#todo_third_party}
There are several places in KiCad where workarounds exist for defects in 3rd
party library limitations or defects.
## Boost ## {#todo_boost}
Current versions:
* Debian Stretch: [1.62](https://packages.debian.org/stretch/libboost-dev)
* Ubuntu 14.04: [1.54](https://packages.ubuntu.com/trusty/libboost-dev)
* Ubuntu 16.04: [1.58](https://packages.ubuntu.com/xenial/libboost-dev)
* Ubuntu 18.04: [1.65](https://packages.ubuntu.com/bionic/libboost-dev)
### 1.59 {#boost_1_59}
* Boost 1.59 brings a major overhaul of the [Boost test][] library.
* Many "Polyfills" un `unit_test_utils.h` can be removed:
* `BOOST_TEST_CONTEXT` and `BOOST_TEST_INFO` are available, remove the
polyfill macros.
* `boost::unit_test::expected_failures` is available, so can remove the
`HAVE_EXPECTED_FAILURES` guard macro.
* `BOOST_TEST_PRINT_NAMESPACE_OPEN` doesn't need to switch the namespace
### 1.64 #### {#todo_boost_1_64}
* [Boost test][]
* Boost test print helper for `nullptr_t` exists, can remove our polyfill
* The [`boost_test_print_type`](https://www.boost.org/doc/libs/master/libs/test/doc/html/boost_test/test_output/test_tools_support_for_logging/testing_tool_output_disable.html)
customisation point exists and the old code using `BOOST_TEST_PRINT_NAMESPACE_OPEN`
can be converted to use that.
## CMake ### {#todo_cmake}
Current versions:
* Debian Stretch: [3.7.2](https://packages.debian.org/stretch/cmake)
* Ubuntu 14.04: [2.8.12](https://packages.ubuntu.com/trusty/cmake)
* Ubuntu 16.04: [3.5.1](https://packages.ubuntu.com/xenial/cmake)
* Ubuntu 18.04: [3.10.2](https://packages.ubuntu.com/bionic/cmake)
### 3.1 {#todo_cmake_3_1}
* Can remove [CMake policy CMP0025](https://cmake.org/cmake/help/v3.0/policy/CMP0025.html)
from root CMake
### 3.3 {#todo_cmake_3_3}
* Can remove check for [CMake policy CMP0063](https://cmake.org/cmake/help/git-stage/policy/CMP0063.html)
entirely (the policy exists as of v3.3 and the default is correct).
### 3.5 {#todo_cmake_3_5}
* Can use `target_link_libraries(foo Boost::boost)` for Boost header-only libraries,
rather than `${Boost_INCLUDE_DIRS}`.
C.f. [Github commit](https://github.com/Kitware/CMake/commit/3f9b081f6ee85e0691c36496d989edbe8382589d)
## OpenSSL {#todo_openssl}
Current versions:
* Debian Stretch: [1.0.1](https://packages.debian.org/stretch/openssl)
* Ubuntu 14.04: [1.0.1](https://packages.ubuntu.com/trusty/openssl)
* Ubuntu 16.04: [1.0.2](https://packages.ubuntu.com/xenial/openssl)
* Ubuntu 18.04: [1.1.0](https://packages.ubuntu.com/bionic/openssl)
### 1.1.0 {#todo_openssl_1_1_0}
* Can remove all locking code from `kicad_curl.cpp`. From v1.1.0, this is no
longer required. C.f. [OpenSSL issue 1260](https://github.com/openssl/openssl/issues/1260)
## wxWidgets {#todo_wx}
Current versions:
* Debian Stretch: [3.0.2](https://packages.debian.org/stretch/wx-common)
* Ubuntu 14.04: [3.0.0](https://packages.ubuntu.com/trusty/wx-common)
* Ubuntu 16.04: [3.0.2](https://packages.ubuntu.com/xenial/wx-common)
* Ubuntu 18.04: [3.0.4](https://packages.ubuntu.com/bionic/wx-common)
### 3.1 {#todo_wx_3_1}
This is a development release, but it brings its own set of features and fixes.
Most of these will not be available in general distributions until v3.2.
* DPI scaling on GTK+ available (also needs GTK+ 3.10).
C.f. [this commit](https://github.com/wxWidgets/wxWidgets/commit/f95fd11e08482697c3b0c0a9d2ccd661134480ee)
`dpi_scaling.cpp` should continue to work normally, but the config should
no longer be required and the scaling should auto-detect.
[Boost test]: https://github.com/boostorg/test
[GCC 7]: https://gcc.gnu.org/gcc-7/changes.html
+3 -28
View File
@@ -44,22 +44,6 @@ Common useful patterns:
You can rebuild just a specific test with CMake to avoid rebuilding
everything when working on a small area, e.g. `make qa_common`.
### Automated testing {#automated-testing}
The unit tests can be run on automated Continuous Integration (CI) systems.
By default, tests output human-readable results, which is useful when
developing or debugging, but not so useful for automated test reporting.
Systems that can parse XML test results can enable these by setting the
`KICAD_TEST_XML_OUTPUT` option to `ON`. The test results are then output
as files ending in `.xml` in the `qa` subdirectory.
Test results are written to the build directory as follows:
* Boost units tests: one XML file per test with the extension `.boost-results.xml`
* Python unit tests: one directory per test with the extension `.xunit-results.xml`.
These directories contain one `.xml` file per Python test case file.
## Writing Boost tests {#writing-boost-tests}
Boost unit tests are straightforward to write. Individual test cases can be
@@ -130,15 +114,6 @@ 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.
### Assertions {#test-assertions}
It is possible to check for assertions in unit tests. When running the unit
tests, `wxASSERT` calls are caught and re-thrown as exceptions. You can then use
the `CHECK_WX_ASSERT` macro to check this is called in Debug builds. In Release
builds, the check is not run, as `wxASSERT` is disabled in these builds.
You can use this to ensure that code rejects invalid input correctly.
## Python modules {#python-tests}
The Pcbnew Python modules have some test programs in the `qa` directory.
@@ -329,6 +304,6 @@ Issues are still welcome for defects discovered.
[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
[trace mask documentation]: http://docs.kicad.org/doxygen/group__trace__env__vars.html
[trace mask documentation]: http://docs.kicad.org/doxygen/group__trace__env__vars.html
[advanced config documentation]: http://docs.kicad.org/doxygen/namespaceAC__KEYS.html
+19 -4
View File
@@ -71,7 +71,8 @@ or not, has a `TOOL_ACTION` instance. This provides:
GAL tools inherit the `TOOL_BASE` class. A Pcbnew tool will generally
inherit from `PCB_TOOL`, which is a `TOOL_INTERACTIVE`, which is
a `TOOL_BASE`. Eeschema tools inherit directly from `TOOL_INTERACTIVE`.
a `TOOL_BASE`. In the future, Eeschema tools will be developed in a similar
manner.
The tool class for a tool can be fairly lightweight - much of the
functionality is inherited from the tool's base classes. These base
@@ -131,7 +132,7 @@ a cursor change and by setting a status string.
auto& frame = *getEditFrame<PCB_EDIT_FRAME>();
// set tool hint and cursor (actually looks like a crosshair)
frame.SetToolID( ID_LOCAL_RATSNEST_BUTT,
frame.SetToolID( ID_PCB_SHOW_1_RATSNEST_BUTT,
wxCURSOR_PENCIL, _( "Select item to move left" ) );
getViewControls()->ShowCursor( true );
@@ -545,8 +546,22 @@ Below you will find the contents of useless_tool.cpp:
The last step is to register the tool in the tool manager.
This is done in the frame's `setupTools()` function for whichever
`EDA_DRAW_FRAME` support that tool.
This is done by adding a new instance of the tool to the
`registerAllTools()` function in `pcbnew/tools/tools_common.cpp`.
// add your tool header
#include <tools/useless_tool.h>
void registerAllTools( TOOL_MANAGER *aToolManager )
{
....
aToolManager->RegisterTool( new USELESS_TOOL );
....
}
If your new tool applies in the module editor, you also need to do this
in `FOOTPRINT_EDIT_FRAME::setupTools()`. Generally, each kind of
`EDA_DRAW_FRAME` that can use GAL will have a place to do this.
## Build and run {#tutorial-summary}
+5 -11
View File
@@ -3,8 +3,6 @@ if( COMPILER_SUPPORTS_WSHADOW )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WSHADOW_FLAGS}")
endif()
add_definitions( -DBITMAP_2_CMP )
include_directories( BEFORE ${INC_BEFORE} )
include_directories(
../potrace
@@ -13,10 +11,9 @@ include_directories(
set( BITMAP2COMPONENT_SRCS
../common/single_top.cpp
bitmap2cmp_main.cpp
bitmap2component.cpp
bitmap2cmp_gui_base.cpp
bitmap2cmp_gui.cpp
bitmap2cmp_gui_base
bitmap2cmp_gui
)
set_source_files_properties( ../common/single_top.cpp PROPERTIES
@@ -40,7 +37,7 @@ if( APPLE )
MACOSX_PACKAGE_LOCATION Resources
)
set( MACOSX_BUNDLE_ICON_FILE bitmap2component.icns )
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-pcb.kicad )
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad.kicad )
set( MACOSX_BUNDLE_NAME bitmap2component )
endif()
@@ -57,11 +54,8 @@ target_link_libraries( bitmap2component
)
if( APPLE )
include( ${CMAKE_MODULE_PATH}/KiCadVersion.cmake )
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist @ONLY )
set_target_properties( bitmap2component PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
MACOSX_BUNDLE_INFO_PLIST ${PROJECT_BINARY_DIR}/bitmap2component/Info.plist
)
# put individual bundle outside of main bundle as a first step
@@ -92,6 +86,6 @@ endif()
if( false ) # linker map with cross reference
set_target_properties( bitmap2component PROPERTIES
LINK_FLAGS "-Wl,-cref,-Map=bitmap2component.map"
LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=bitmap2component.map"
)
endif()
-42
View File
@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDocumentTypes</key>
<array/>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>bitmap2component</string>
<key>CFBundleGetInfoString</key>
<string></string>
<key>CFBundleIconFile</key>
<string>bitmap2component.icns</string>
<key>CFBundleIdentifier</key>
<string>org.kicad-pcb.bitmap2component</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleLongVersionString</key>
<string>@KICAD_VERSION_FULL@</string>
<key>CFBundleName</key>
<string>Bitmap 2 Component</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>@KICAD_VERSION@</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>@KICAD_VERSION_FULL@</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSRequiresCarbon</key>
<true/>
<key>NSRequiresAquaSystemAppearance</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
<string>True</string>
</dict>
</plist>
+279 -427
View File
@@ -2,7 +2,7 @@
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2010 jean-pierre.charras
* Copyright (C) 1992-2019 Kicad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2019 Kicad Developers, see change_log.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
@@ -22,22 +22,23 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "bitmap2cmp_gui.h"
#include "bitmap2component.h"
#include <bitmap_io.h>
#include <bitmaps.h>
#include <build_version.h>
#include <confirm.h>
#include <fctsys.h>
#include <gestfich.h>
#include <kiface_i.h>
#include <kiway.h>
#include <macros.h>
#include <pgm_base.h>
#include <potracelib.h>
#include <confirm.h>
#include <gestfich.h>
#include <wildcards_and_files_ext.h>
#include <wx/clipbrd.h>
#include <bitmap_io.h>
#include <build_version.h>
#include <menus_helpers.h>
#include <kiway.h>
#include <kiface_i.h>
#include <wx/rawbmp.h>
#include <potracelib.h>
#include "bitmap2component.h"
#include "bitmap2cmp_gui_base.h"
@@ -52,137 +53,141 @@
#define KEYWORD_LAST_MODLAYER wxT( "Last_modlayer" )
#define KEYWORD_BINARY_THRESHOLD wxT( "Threshold" )
#define KEYWORD_BW_NEGATIVE wxT( "Negative_choice" )
#define KEYWORD_UNIT_SELECTION wxT( "Unit_selection" )
#define DEFAULT_DPI 300 // the image DPI used in formats that do not define a DPI
#define DEFAULT_DPI 300 // Default resolution in Bit per inches
IMAGE_SIZE::IMAGE_SIZE()
extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y,
BMP2CMP_MOD_LAYER aModLayer );
/**
* Class BM2CMP_FRAME_BASE
* is the main frame for this application
*/
class BM2CMP_FRAME : public BM2CMP_FRAME_BASE
{
m_outputSize = 0.0;
m_originalDPI = DEFAULT_DPI;
m_originalSizePixels = 0;
m_unit = MILLIMETRES;
}
private:
wxImage m_Pict_Image;
wxBitmap m_Pict_Bitmap;
wxImage m_Greyscale_Image;
wxBitmap m_Greyscale_Bitmap;
wxImage m_NB_Image;
wxBitmap m_BN_Bitmap;
wxSize m_imageDPI; // The initial image resolution. When unknown,
// set to DEFAULT_DPI x DEFAULT_DPI per Inch
bool m_Negative;
wxString m_BitmapFileName;
wxString m_ConvertedFileName;
wxSize m_frameSize;
wxPoint m_framePos;
std::unique_ptr<wxConfigBase> m_config;
public:
BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent );
~BM2CMP_FRAME();
void IMAGE_SIZE::SetOutputSizeFromInitialImageSize()
{
// Set the m_outputSize value from the m_originalSizePixels and the selected unit
if( m_unit == MILLIMETRES )
// overload KIWAY_PLAYER virtual
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl=0 ) override;
private:
// Event handlers
void OnPaintInit( wxPaintEvent& event ) override;
void OnPaintGreyscale( wxPaintEvent& event ) override;
void OnPaintBW( wxPaintEvent& event ) override;
void OnLoadFile( wxCommandEvent& event ) override;
void OnExport( wxCommandEvent& event ) override;
/**
* Generate a schematic library which contains one component:
* the logo
*/
void OnExportEeschema();
/**
* Generate a module in S expr format
*/
void OnExportPcbnew();
/**
* Generate a postscript file
*/
void OnExportPostScript();
/**
* Generate a file suitable to be copied into a page layout
* description file (.kicad_wks file
*/
void OnExportLogo();
void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)
void OnNegativeClicked( wxCommandEvent& event ) override;
void OnThresholdChange( wxScrollEvent& event ) override;
void OnResolutionChange( wxCommandEvent& event ) override;
// called when texts controls which handle the image resolution
// lose the focus, to ensure the right values are displayed
// because the m_imageDPI are clipped to acceptable values, and
// the text displayed could be differ during text editing
// We are using ChangeValue here to avoid generating a wxEVT_TEXT event.
void UpdateDPITextValueX( wxMouseEvent& event )
{
m_outputSize = (double)GetOriginalSizePixels() / m_originalDPI * 25.4;
}
else if( m_unit == INCHES )
{
m_outputSize = (double)GetOriginalSizePixels() / m_originalDPI;
}
else
{
m_outputSize = m_originalDPI;
m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) );
}
}
int IMAGE_SIZE::GetOutputDPI()
{
int outputDPI;
if( m_unit == MILLIMETRES )
void UpdateDPITextValueY( wxMouseEvent& event )
{
outputDPI = GetOriginalSizePixels() / ( m_outputSize / 25.4 );
}
else if( m_unit == INCHES )
{
outputDPI = GetOriginalSizePixels() / m_outputSize;
}
else
{
outputDPI = KiROUND( m_outputSize );
m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) );
}
return outputDPI;
}
void IMAGE_SIZE::SetUnit( EDA_UNITS_T aUnit )
{
// Set the unit used for m_outputSize, and convert the old m_outputSize value
// to the value in new unit
if( aUnit == m_unit )
return;
// Convert m_outputSize to mm:
double size_mm;
if( m_unit == MILLIMETRES )
{
size_mm = m_outputSize;
}
else if( m_unit == INCHES )
{
size_mm = m_outputSize * 25.4;
}
else
{
// m_outputSize is the DPI, not an image size
// the image size is m_originalSizePixels / m_outputSize (in inches)
if( m_outputSize )
size_mm = m_originalSizePixels / m_outputSize * 25.4;
else
size_mm = 0;
}
// Convert m_outputSize to new value:
if( aUnit == MILLIMETRES )
{
m_outputSize = size_mm;
}
else if( aUnit == INCHES )
{
m_outputSize = size_mm / 25.4;
}
else
{
if( size_mm )
m_outputSize = m_originalSizePixels / size_mm * 25.4;
else
m_outputSize = 0;
}
m_unit = aUnit;
}
void NegateGreyscaleImage( );
void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat );
void updateImageInfo();
void OnFormatChange( wxCommandEvent& event ) override;
};
BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
BM2CMP_FRAME_BASE( aParent )
{
SetKiway( this, aKiway );
int tmp;
m_config = GetNewConfig( Pgm().App().GetAppName() );
m_config->Read( KEYWORD_FRAME_POSX, & m_framePos.x, -1 );
m_config->Read( KEYWORD_FRAME_POSY, & m_framePos.y, -1 );
m_config->Read( KEYWORD_FRAME_SIZEX, & m_frameSize.x, -1 );
m_config->Read( KEYWORD_FRAME_SIZEY, & m_frameSize.y, -1 );
m_config->Read( KEYWORD_LAST_INPUT_FILE, &m_BitmapFileName );
m_config->Read( KEYWORD_LAST_OUTPUT_FILE, &m_ConvertedFileName );
wxString unitList[] =
if( m_config->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
m_sliderThreshold->SetValue( tmp );
m_config->Read( KEYWORD_BW_NEGATIVE, &tmp, 0 );
m_Negative = tmp != 0;
m_checkNegative->SetValue( m_Negative );
if( m_config->Read( KEYWORD_LAST_FORMAT, &tmp ) )
{
_("mm"), _("Inch"), _("DPI")
};
if( tmp < 0 || tmp > FINAL_FMT )
tmp = PCBNEW_KICAD_MOD;
for( int ii = 0; ii < 3; ii++ )
m_PixelUnit->Append( unitList[ii] );
m_radioBoxFormat->SetSelection( tmp );
}
LoadSettings( m_config.get() );
if( tmp == PCBNEW_KICAD_MOD )
m_radio_PCBLayer->Enable( true );
else
m_radio_PCBLayer->Enable( false );
m_outputSizeX.SetUnit( getUnitFromSelection() );
m_outputSizeY.SetUnit( getUnitFromSelection() );
m_outputSizeX.SetOutputSize( 0, getUnitFromSelection() );
m_outputSizeY.SetOutputSize( 0, getUnitFromSelection() );
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
//Set icon for aspect ratio
m_AspectRatioLocked = true;
m_AspectRatio = 1;
m_AspectRatioLockButton->SetBitmap( KiBitmap( locked_xpm ) );
if( m_config->Read( KEYWORD_LAST_MODLAYER, &tmp ) )
{
if( (unsigned) tmp > MOD_LYR_FINAL ) // Out of range
m_radio_PCBLayer->SetSelection( MOD_LYR_FSILKS );
else
m_radio_PCBLayer->SetSelection( tmp );
}
// Give an icon
wxIcon icon;
@@ -193,9 +198,9 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
m_buttonExportFile->Enable( false );
m_buttonExportClipboard->Enable( false );
m_buttonExport->Enable( false );
m_imageDPI.x = m_imageDPI.y = DEFAULT_DPI; // Default resolution in Bit per inches
if ( m_framePos == wxDefaultPosition )
Centre();
@@ -204,88 +209,27 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
BM2CMP_FRAME::~BM2CMP_FRAME()
{
SaveSettings( m_config.get() );
/*
* This needed for OSX: avoids further OnDraw processing after this
* destructor and before the native window is destroyed
*/
this->Freeze( );
}
void BM2CMP_FRAME::LoadSettings( wxConfigBase* aCfg )
{
int tmp;
aCfg->Read( KEYWORD_FRAME_POSX, & m_framePos.x, -1 );
aCfg->Read( KEYWORD_FRAME_POSY, & m_framePos.y, -1 );
aCfg->Read( KEYWORD_FRAME_SIZEX, & m_frameSize.x, -1 );
aCfg->Read( KEYWORD_FRAME_SIZEY, & m_frameSize.y, -1 );
aCfg->Read( KEYWORD_LAST_INPUT_FILE, &m_BitmapFileName );
aCfg->Read( KEYWORD_LAST_OUTPUT_FILE, &m_ConvertedFileName );
int u_select = 0;
aCfg->Read( KEYWORD_UNIT_SELECTION, &u_select, 0 );
if( u_select < 0 || u_select > 2 ) // Validity control
u_select = 0;
m_PixelUnit->SetSelection( u_select );
if( aCfg->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
m_sliderThreshold->SetValue( tmp );
aCfg->Read( KEYWORD_BW_NEGATIVE, &tmp, 0 );
m_Negative = tmp != 0;
m_checkNegative->SetValue( m_Negative );
m_exportToClipboard = false;
m_AspectRatioLocked = false;
if( aCfg->Read( KEYWORD_LAST_FORMAT, &tmp ) )
{
if( tmp < 0 || tmp > FINAL_FMT )
tmp = PCBNEW_KICAD_MOD;
m_rbOutputFormat->SetSelection( tmp );
}
if( tmp == PCBNEW_KICAD_MOD )
m_rbPCBLayer->Enable( true );
else
m_rbPCBLayer->Enable( false );
if( aCfg->Read( KEYWORD_LAST_MODLAYER, &tmp ) )
{
if( (unsigned) tmp > MOD_LYR_FINAL ) // Out of range
m_rbPCBLayer->SetSelection( MOD_LYR_FSILKS );
else
m_rbPCBLayer->SetSelection( tmp );
}
}
void BM2CMP_FRAME::SaveSettings( wxConfigBase* aCfg )
{
if( !aCfg )
if( !m_config || IsIconized() )
return;
m_frameSize = GetSize();
m_framePos = GetPosition();
if( !IsIconized() )
{
aCfg->Write( KEYWORD_FRAME_POSX, (long) m_framePos.x );
aCfg->Write( KEYWORD_FRAME_POSY, (long) m_framePos.y );
aCfg->Write( KEYWORD_FRAME_SIZEX, (long) m_frameSize.x );
aCfg->Write( KEYWORD_FRAME_SIZEY, (long) m_frameSize.y );
}
m_config->Write( KEYWORD_FRAME_POSX, (long) m_framePos.x );
m_config->Write( KEYWORD_FRAME_POSY, (long) m_framePos.y );
m_config->Write( KEYWORD_FRAME_SIZEX, (long) m_frameSize.x );
m_config->Write( KEYWORD_FRAME_SIZEY, (long) m_frameSize.y );
m_config->Write( KEYWORD_LAST_INPUT_FILE, m_BitmapFileName );
m_config->Write( KEYWORD_LAST_OUTPUT_FILE, m_ConvertedFileName );
m_config->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
m_config->Write( KEYWORD_BW_NEGATIVE, m_checkNegative->IsChecked() ? 1 : 0 );
m_config->Write( KEYWORD_LAST_FORMAT, m_radioBoxFormat->GetSelection() );
m_config->Write( KEYWORD_LAST_MODLAYER, m_radio_PCBLayer->GetSelection() );
aCfg->Write( KEYWORD_LAST_INPUT_FILE, m_BitmapFileName );
aCfg->Write( KEYWORD_LAST_OUTPUT_FILE, m_ConvertedFileName );
aCfg->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
aCfg->Write( KEYWORD_BW_NEGATIVE, m_checkNegative->IsChecked() ? 1 : 0 );
aCfg->Write( KEYWORD_LAST_FORMAT, m_rbOutputFormat->GetSelection() );
aCfg->Write( KEYWORD_LAST_MODLAYER, m_rbPCBLayer->GetSelection() );
aCfg->Write( KEYWORD_UNIT_SELECTION, m_PixelUnit->GetSelection() );
/* This needed for OSX: avoids further OnDraw processing after this
* destructor and before the native window is destroyed
*/
this->Freeze( );
}
@@ -387,41 +331,33 @@ bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int
m_Pict_Bitmap = wxBitmap( m_Pict_Image );
int h = m_Pict_Bitmap.GetHeight();
int w = m_Pict_Bitmap.GetWidth();
// Determine image resolution in DPI (does not existing in all formats).
// the resolution can be given in bit per inches or bit per cm in file
m_imageDPI.x = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONX );
m_imageDPI.y = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONY );
int imageDPIx = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONX );
int imageDPIy = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONY );
if( imageDPIx > 1 && imageDPIy > 1 )
if( m_imageDPI.x > 1 && m_imageDPI.y > 1 )
{
if( m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONUNIT ) == wxIMAGE_RESOLUTION_CM )
{
imageDPIx = KiROUND( imageDPIx * 2.54 );
imageDPIy = KiROUND( imageDPIy * 2.54 );
// When the initial resolution is given in bits per cm,
// experience shows adding 1.27 to the resolution converted in dpi
// before convert to int value reduce the conversion error
// but it is not perfect
m_imageDPI.x = m_imageDPI.x * 2.54 + 1.27;
m_imageDPI.y = m_imageDPI.y * 2.54 + 1.27;
}
}
else // fallback to a default value (DEFAULT_DPI)
{
imageDPIx = imageDPIy = DEFAULT_DPI;
}
m_InputXValueDPI->SetLabel( wxString::Format( wxT( "%d" ), imageDPIx ) );
m_InputYValueDPI->SetLabel( wxString::Format( wxT( "%d" ), imageDPIy ) );
int h = m_Pict_Bitmap.GetHeight();
int w = m_Pict_Bitmap.GetWidth();
m_AspectRatio = (double) w / h;
m_outputSizeX.SetOriginalDPI( imageDPIx );
m_outputSizeX.SetOriginalSizePixels( w );
m_outputSizeY.SetOriginalDPI( imageDPIy );
m_outputSizeY.SetOriginalSizePixels( h );
// Update display to keep aspect ratio
auto fakeEvent = wxCommandEvent();
OnSizeChangeX( fakeEvent );
else // fallback to the default value
m_imageDPI.x = m_imageDPI.y = DEFAULT_DPI;
// Display image info:
// We are using ChangeValue here to avoid generating a wxEVT_TEXT event.
m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) );
m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) );
updateImageInfo();
m_InitialPicturePanel->SetVirtualSize( w, h );
@@ -454,166 +390,51 @@ bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int
m_NB_Image = m_Greyscale_Image;
Binarize( (double) m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
m_buttonExportFile->Enable( true );
m_buttonExportClipboard->Enable( true );
m_outputSizeX.SetOutputSizeFromInitialImageSize();
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
m_outputSizeY.SetOutputSizeFromInitialImageSize();
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
m_buttonExport->Enable( true );
return true;
}
// return a string giving the output size, according to the selected unit
wxString BM2CMP_FRAME::FormatOutputSize( double aSize )
{
wxString text;
if( getUnitFromSelection() == MILLIMETRES )
{
text.Printf( "%.1f", aSize );
}
else if( getUnitFromSelection() == INCHES )
{
text.Printf( "%.2f", aSize );
}
else
{
text.Printf( "%d", KiROUND( aSize ) );
}
return text;
}
void BM2CMP_FRAME::updateImageInfo()
{
// Note: the image resolution text controls are not modified
// here, to avoid a race between text change when entered by user and
// a text change if it is modified here.
int h = m_Pict_Bitmap.GetHeight();
int w = m_Pict_Bitmap.GetWidth();
int nb = m_Pict_Bitmap.GetDepth();
if( m_Pict_Bitmap.IsOk() )
{
int h = m_Pict_Bitmap.GetHeight();
int w = m_Pict_Bitmap.GetWidth();
int nb = m_Pict_Bitmap.GetDepth();
m_SizeXValue->SetLabel( wxString::Format( wxT( "%d" ), w ) );
m_SizeYValue->SetLabel( wxString::Format( wxT( "%d" ), h ) );
m_BPPValue->SetLabel( wxString::Format( wxT( "%d" ), nb ) );
m_SizeXValue->SetLabel( wxString::Format( wxT( "%d" ), w ) );
m_SizeYValue->SetLabel( wxString::Format( wxT( "%d" ), h ) );
m_BPPValue->SetLabel( wxString::Format( wxT( "%d" ), nb ) );
}
m_SizeXValue_mm->SetLabel( wxString::Format( wxT( "%.1f" ),
(double) w / m_imageDPI.x * 25.4 ) );
m_SizeYValue_mm->SetLabel( wxString::Format( wxT( "%.1f" ),
(double) h / m_imageDPI.y * 25.4 ) );
}
EDA_UNITS_T BM2CMP_FRAME::getUnitFromSelection()
void BM2CMP_FRAME::OnResolutionChange( wxCommandEvent& event )
{
// return the EDA_UNITS_T from the m_PixelUnit choice
switch( m_PixelUnit->GetSelection() )
{
case 1:
return INCHES;
long tmp;
case 2:
return UNSCALED_UNITS;
if( m_DPIValueX->GetValue().ToLong( &tmp ) )
m_imageDPI.x = tmp;
case 0:
default:
break;
}
if( m_DPIValueY->GetValue().ToLong( &tmp ) )
m_imageDPI.y = tmp;
return MILLIMETRES;
}
if( m_imageDPI.x < 32 )
m_imageDPI.x = 32;
void BM2CMP_FRAME::OnSizeChangeX( wxCommandEvent& event )
{
double new_size;
if( m_UnitSizeX->GetValue().ToDouble( &new_size ) )
{
if( m_AspectRatioLocked )
{
double calculatedY = new_size / m_AspectRatio;
if( getUnitFromSelection() == UNSCALED_UNITS )
{
// for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked.
// just rescale the other dpi
double ratio = new_size / m_outputSizeX.GetOutputSize();
calculatedY = m_outputSizeY.GetOutputSize() * ratio;
}
m_outputSizeY.SetOutputSize( calculatedY, getUnitFromSelection() );
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
}
m_outputSizeX.SetOutputSize( new_size, getUnitFromSelection() );
}
if( m_imageDPI.y < 32 )
m_imageDPI.y = 32;
updateImageInfo();
}
void BM2CMP_FRAME::OnSizeChangeY( wxCommandEvent& event )
{
double new_size;
if( m_UnitSizeY->GetValue().ToDouble( &new_size ) )
{
if( m_AspectRatioLocked )
{
double calculatedX = new_size * m_AspectRatio;
if( getUnitFromSelection() == UNSCALED_UNITS )
{
// for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked.
// just rescale the other dpi
double ratio = new_size / m_outputSizeX.GetOutputSize();
calculatedX = m_outputSizeX.GetOutputSize() * ratio;
}
m_outputSizeX.SetOutputSize( calculatedX, getUnitFromSelection() );
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
}
m_outputSizeY.SetOutputSize( new_size, getUnitFromSelection() );
}
updateImageInfo();
}
void BM2CMP_FRAME::OnSizeUnitChange( wxCommandEvent& event )
{
m_outputSizeX.SetUnit( getUnitFromSelection() );
m_outputSizeY.SetUnit( getUnitFromSelection() );
updateImageInfo();
m_UnitSizeX->ChangeValue( FormatOutputSize( m_outputSizeX.GetOutputSize() ) );
m_UnitSizeY->ChangeValue( FormatOutputSize( m_outputSizeY.GetOutputSize() ) );
}
void BM2CMP_FRAME::ToggleAspectRatioLock( wxCommandEvent& event )
{
m_AspectRatioLocked = !m_AspectRatioLocked;
if( m_AspectRatioLocked )
{
m_AspectRatioLockButton->SetBitmap( KiBitmap( locked_xpm ) );
//Force display update when aspect ratio is locked
auto fakeEvent = wxCommandEvent();
OnSizeChangeX( fakeEvent );
}
else
{
m_AspectRatioLockButton->SetBitmap( KiBitmap( unlocked_xpm ) );
}
}
void BM2CMP_FRAME::Binarize( double aThreshold )
{
int h = m_Greyscale_Image.GetHeight();
@@ -681,53 +502,24 @@ void BM2CMP_FRAME::OnThresholdChange( wxScrollEvent& event )
}
void BM2CMP_FRAME::OnExportToFile( wxCommandEvent& event )
void BM2CMP_FRAME::OnExport( wxCommandEvent& event )
{
m_exportToClipboard = false;
// choices of m_rbOutputFormat are expected to be in same order as
// choices of m_radioBoxFormat are expected to be in same order as
// OUTPUT_FMT_ID. See bitmap2component.h
OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection();
exportBitmap( format );
}
OUTPUT_FMT_ID sel = (OUTPUT_FMT_ID) m_radioBoxFormat->GetSelection();
void BM2CMP_FRAME::OnExportToClipboard( wxCommandEvent& event )
{
m_exportToClipboard = true;
// choices of m_rbOutputFormat are expected to be in same order as
// OUTPUT_FMT_ID. See bitmap2component.h
OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection();
std::string buffer;
ExportToBuffer( buffer, format );
// Write buffer to the clipboard
if (wxTheClipboard->Open())
{
// This data objects are held by the clipboard,
// so do not delete them in the app.
wxTheClipboard->SetData( new wxTextDataObject( buffer.c_str() ) );
wxTheClipboard->Close();
}
else
wxMessageBox( _( "Unable to export to the Clipboard") );
}
void BM2CMP_FRAME::exportBitmap( OUTPUT_FMT_ID aFormat )
{
switch( aFormat )
switch( sel )
{
case EESCHEMA_FMT:
exportEeschemaFormat();
OnExportEeschema();
break;
case PCBNEW_KICAD_MOD:
exportPcbnewFormat();
OnExportPcbnew();
break;
case POSTSCRIPT_FMT:
exportPostScriptFormat();
OnExportPostScript();
break;
case KICAD_LOGO:
@@ -763,19 +555,17 @@ void BM2CMP_FRAME::OnExportLogo()
if( outfile == NULL )
{
wxString msg;
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
wxMessageBox( msg );
return;
}
std::string buffer;
ExportToBuffer( buffer, KICAD_LOGO );
fputs( buffer.c_str(), outfile );
ExportFile( outfile, KICAD_LOGO );
fclose( outfile );
}
void BM2CMP_FRAME::exportPostScriptFormat()
void BM2CMP_FRAME::OnExportPostScript()
{
wxFileName fn( m_ConvertedFileName );
wxString path = fn.GetPath();
@@ -803,19 +593,17 @@ void BM2CMP_FRAME::exportPostScriptFormat()
if( outfile == NULL )
{
wxString msg;
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
wxMessageBox( msg );
return;
}
std::string buffer;
ExportToBuffer( buffer, POSTSCRIPT_FMT );
fputs( buffer.c_str(), outfile );
ExportFile( outfile, POSTSCRIPT_FMT );
fclose( outfile );
}
void BM2CMP_FRAME::exportEeschemaFormat()
void BM2CMP_FRAME::OnExportEeschema()
{
wxFileName fn( m_ConvertedFileName );
wxString path = fn.GetPath();
@@ -842,19 +630,17 @@ void BM2CMP_FRAME::exportEeschemaFormat()
if( outfile == NULL )
{
wxString msg;
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
wxMessageBox( msg );
return;
}
std::string buffer;
ExportToBuffer( buffer, EESCHEMA_FMT );
fputs( buffer.c_str(), outfile );
ExportFile( outfile, EESCHEMA_FMT );
fclose( outfile );
}
void BM2CMP_FRAME::exportPcbnewFormat()
void BM2CMP_FRAME::OnExportPcbnew()
{
wxFileName fn( m_ConvertedFileName );
wxString path = fn.GetPath();
@@ -881,20 +667,18 @@ void BM2CMP_FRAME::exportPcbnewFormat()
if( outfile == NULL )
{
wxString msg;
msg.Printf( _( "File \"%s\" could not be created." ), m_ConvertedFileName );
msg.Printf( _( "File \"%s\" could not be created." ), GetChars( m_ConvertedFileName ) );
wxMessageBox( msg );
return;
}
std::string buffer;
ExportToBuffer( buffer, PCBNEW_KICAD_MOD );
fputs( buffer.c_str(), outfile );
ExportFile( outfile, PCBNEW_KICAD_MOD );
fclose( outfile );
m_mruPath = fn.GetPath();
}
void BM2CMP_FRAME::ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat )
void BM2CMP_FRAME::ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat )
{
// Create a potrace bitmap
int h = m_NB_Image.GetHeight();
@@ -919,26 +703,94 @@ void BM2CMP_FRAME::ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat )
}
}
// choices of m_rbPCBLayer are expected to be in same order as
// choices of m_radio_PCBLayer are expected to be in same order as
// BMP2CMP_MOD_LAYER. See bitmap2component.h
BMP2CMP_MOD_LAYER modLayer = MOD_LYR_FSILKS;
if( aFormat == PCBNEW_KICAD_MOD )
modLayer = (BMP2CMP_MOD_LAYER) m_rbPCBLayer->GetSelection();
modLayer = (BMP2CMP_MOD_LAYER) m_radio_PCBLayer->GetSelection();
BITMAPCONV_INFO converter( aOutput );
converter.ConvertBitmap( potrace_bitmap, aFormat, m_outputSizeX.GetOutputDPI(),
m_outputSizeY.GetOutputDPI(), modLayer );
if( !converter.GetErrorMessages().empty() )
wxMessageBox( converter.GetErrorMessages().c_str(), _( "Errors" ) );
bitmap2component( potrace_bitmap, aOutfile, aFormat, m_imageDPI.x, m_imageDPI.y, modLayer );
}
//-----<KIFACE>-----------------------------------------------------------------
namespace BMP2CMP {
static struct IFACE : public KIFACE_I
{
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override
{
return new BM2CMP_FRAME( aKiway, aParent );
}
/**
* Function IfaceOrAddress
* return a pointer to the requested object. The safest way to use this
* is to retrieve a pointer to a static instance of an interface, similar to
* how the KIFACE interface is exported. But if you know what you are doing
* use it to retrieve anything you want.
*
* @param aDataId identifies which object you want the address of.
*
* @return void* - and must be cast into the know type.
*/
void* IfaceOrAddress( int aDataId ) override
{
return NULL;
}
IFACE( const char* aDSOname, KIWAY::FACE_T aType ) :
KIFACE_I( aDSOname, aType )
{}
} kiface( "BMP2CMP", KIWAY::FACE_BMP2CMP );
} // namespace BMP2CMP
using namespace BMP2CMP;
static PGM_BASE* process;
KIFACE_I& Kiface()
{
return kiface;
}
// KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
// KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
KIFACE* KIFACE_GETTER( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram )
{
process = (PGM_BASE*) aProgram;
return &kiface;
}
#if defined(BUILD_KIWAY_DLLS)
PGM_BASE& Pgm()
{
wxASSERT( process ); // KIFACE_GETTER has already been called.
return *process;
}
#endif
bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
{
return start_common( aCtlBits );
}
void BM2CMP_FRAME::OnFormatChange( wxCommandEvent& event )
{
if( m_rbOutputFormat->GetSelection() == PCBNEW_KICAD_MOD )
m_rbPCBLayer->Enable( true );
if( m_radioBoxFormat->GetSelection() == PCBNEW_KICAD_MOD )
m_radio_PCBLayer->Enable( true );
else
m_rbPCBLayer->Enable( false );
m_radio_PCBLayer->Enable( false );
event.Skip();
}
-177
View File
@@ -1,177 +0,0 @@
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 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
*/
#ifndef BITMOP2CMP_GUI_H_
#define BITMOP2CMP_GUI_H_
#include "bitmap2component.h"
#include "bitmap2cmp_gui_base.h"
#include <potracelib.h>
#include <common.h> // for EDA_UNITS_T
class IMAGE_SIZE
{
public:
IMAGE_SIZE();
// Set the unit used for m_outputSize, and convert the old m_outputSize value
// to the value in new unit
void SetUnit( EDA_UNITS_T aUnit );
// Accessors:
void SetOriginalDPI( int aDPI )
{
m_originalDPI = aDPI;
}
void SetOriginalSizePixels( int aPixels )
{
m_originalSizePixels = aPixels;
}
double GetOutputSize()
{
return m_outputSize;
}
void SetOutputSize( double aSize, EDA_UNITS_T aUnit )
{
m_unit = aUnit;
m_outputSize = aSize;
}
int GetOriginalSizePixels()
{
return m_originalSizePixels;
}
// Set the m_outputSize value from the m_originalSizePixels and the selected unit
void SetOutputSizeFromInitialImageSize();
/** @return the pixels per inch value to build the output image.
* It is used by potrace to build the polygonal image
*/
int GetOutputDPI();
private:
EDA_UNITS_T m_unit; // The units for m_outputSize (mm, inch, dpi)
double m_outputSize; // The size in m_unit of the output image, depending on
// the user settings. Set to the initial image size
int m_originalDPI; // The image DPI if specified in file, or 0 if unknown
int m_originalSizePixels; // The original image size read from file, in pixels
};
class BM2CMP_FRAME : public BM2CMP_FRAME_BASE
{
public:
BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent );
~BM2CMP_FRAME();
// overload KIWAY_PLAYER virtual
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl = 0 ) override;
private:
// Event handlers
void OnPaintInit( wxPaintEvent& event ) override;
void OnPaintGreyscale( wxPaintEvent& event ) override;
void OnPaintBW( wxPaintEvent& event ) override;
void OnLoadFile( wxCommandEvent& event ) override;
void OnExportToFile( wxCommandEvent& event ) override;
void OnExportToClipboard( wxCommandEvent& event ) override;
///> @return the EDA_UNITS_T from the m_PixelUnit choice
EDA_UNITS_T getUnitFromSelection();
// return a string giving the output size, according to the selected unit
wxString FormatOutputSize( double aSize );
/**
* Generate a schematic library which contains one component:
* the logo
*/
void exportEeschemaFormat();
/**
* Generate a module in S expr format
*/
void exportPcbnewFormat();
/**
* Generate a postscript file
*/
void exportPostScriptFormat();
/**
* Generate a file suitable to be copied into a page layout
* description file (.kicad_wks file
*/
void OnExportLogo();
void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)
void OnNegativeClicked( wxCommandEvent& event ) override;
void OnThresholdChange( wxScrollEvent& event ) override;
void OnSizeChangeX( wxCommandEvent& event ) override;
void OnSizeChangeY( wxCommandEvent& event ) override;
void OnSizeUnitChange( wxCommandEvent& event ) override;
void ToggleAspectRatioLock( wxCommandEvent& event ) override;
void NegateGreyscaleImage();
/**
* generate a export data of the current bitmap.
* @param aOutput is a string buffer to fill with data
* @param aFormat is the format to generate
*/
void ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat );
void updateImageInfo();
void OnFormatChange( wxCommandEvent& event ) override;
void exportBitmap( OUTPUT_FMT_ID aFormat );
void LoadSettings( wxConfigBase* aCfg ) override;
void SaveSettings( wxConfigBase* aCfg ) override;
private:
wxImage m_Pict_Image;
wxBitmap m_Pict_Bitmap;
wxImage m_Greyscale_Image;
wxBitmap m_Greyscale_Bitmap;
wxImage m_NB_Image;
wxBitmap m_BN_Bitmap;
IMAGE_SIZE m_outputSizeX;
IMAGE_SIZE m_outputSizeY;
bool m_Negative;
wxString m_BitmapFileName;
wxString m_ConvertedFileName;
wxSize m_frameSize;
wxPoint m_framePos;
std::unique_ptr<wxConfigBase> m_config;
bool m_exportToClipboard;
bool m_AspectRatioLocked;
double m_AspectRatio;
};
#endif// BITMOP2CMP_GUI_H_
+68 -98
View File
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 1 2018)
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@@ -38,7 +38,7 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
brightSizer = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizerInfo;
sbSizerInfo = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Bitmap Info:") ), wxVERTICAL );
sbSizerInfo = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Bitmap Info") ), wxVERTICAL );
wxFlexGridSizer* fgSizerInfo;
fgSizerInfo = new wxFlexGridSizer( 0, 4, 0, 0 );
@@ -47,9 +47,9 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
fgSizerInfo->SetFlexibleDirection( wxBOTH );
fgSizerInfo->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticTextISize = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Bitmap size:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextISize->Wrap( -1 );
fgSizerInfo->Add( m_staticTextISize, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_staticTextSize = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextSize->Wrap( -1 );
fgSizerInfo->Add( m_staticTextSize, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_SizeXValue = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeXValue->Wrap( -1 );
@@ -63,25 +63,25 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
m_SizePixUnits->Wrap( -1 );
fgSizerInfo->Add( m_SizePixUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
m_staticTextDPI = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Bitmap PPI:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextDPI->Wrap( -1 );
fgSizerInfo->Add( m_staticTextDPI, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_staticTextSize1 = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextSize1->Wrap( -1 );
fgSizerInfo->Add( m_staticTextSize1, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_RIGHT, 5 );
m_InputXValueDPI = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_InputXValueDPI->Wrap( -1 );
fgSizerInfo->Add( m_InputXValueDPI, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_SizeXValue_mm = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeXValue_mm->Wrap( -1 );
fgSizerInfo->Add( m_SizeXValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
m_InputYValueDPI = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_InputYValueDPI->Wrap( -1 );
fgSizerInfo->Add( m_InputYValueDPI, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_SizeYValue_mm = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeYValue_mm->Wrap( -1 );
fgSizerInfo->Add( m_SizeYValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
m_DPIUnit = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("PPI"), wxDefaultPosition, wxDefaultSize, 0 );
m_DPIUnit->Wrap( -1 );
fgSizerInfo->Add( m_DPIUnit, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_Size_mmxUnits = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
m_Size_mmxUnits->Wrap( -1 );
fgSizerInfo->Add( m_Size_mmxUnits, 0, wxBOTTOM|wxRIGHT, 5 );
m_staticTextBPP = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("BPP:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextBPP->Wrap( -1 );
fgSizerInfo->Add( m_staticTextBPP, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
fgSizerInfo->Add( m_staticTextBPP, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_BPPValue = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_BPPValue->Wrap( -1 );
@@ -92,81 +92,52 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
fgSizerInfo->Add( m_BPPunits, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
fgSizerInfo->Add( 0, 0, 0, 0, 5 );
fgSizerInfo->Add( 0, 0, 1, wxEXPAND, 5 );
m_staticTextBPI = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("Resolution:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextBPI->Wrap( -1 );
fgSizerInfo->Add( m_staticTextBPI, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_DPIValueX = new wxTextCtrl( sbSizerInfo->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
m_DPIValueX->SetMinSize( wxSize( 45,-1 ) );
fgSizerInfo->Add( m_DPIValueX, 0, wxBOTTOM|wxRIGHT, 5 );
m_DPIValueY = new wxTextCtrl( sbSizerInfo->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
m_DPIValueY->SetMinSize( wxSize( 45,-1 ) );
fgSizerInfo->Add( m_DPIValueY, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
m_DPI_Units = new wxStaticText( sbSizerInfo->GetStaticBox(), wxID_ANY, _("DPI"), wxDefaultPosition, wxDefaultSize, 0 );
m_DPI_Units->Wrap( -1 );
fgSizerInfo->Add( m_DPI_Units, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
sbSizerInfo->Add( fgSizerInfo, 0, wxEXPAND, 5 );
sbSizerInfo->Add( fgSizerInfo, 0, wxEXPAND|wxBOTTOM, 5 );
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxALL, 5 );
wxStaticBoxSizer* sbSizerImgPrms;
sbSizerImgPrms = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Output Parameters:") ), wxVERTICAL );
wxBoxSizer* bSizerLock;
bSizerLock = new wxBoxSizer( wxHORIZONTAL );
m_textLock = new wxStaticText( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("Lock height/width ratio"), wxDefaultPosition, wxDefaultSize, 0 );
m_textLock->Wrap( -1 );
bSizerLock->Add( m_textLock, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
m_AspectRatioLockButton = new wxBitmapButton( sbSizerImgPrms->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
bSizerLock->Add( m_AspectRatioLockButton, 0, wxALL, 5 );
sbSizerImgPrms->Add( bSizerLock, 0, wxEXPAND, 5 );
wxBoxSizer* bSizerRes;
bSizerRes = new wxBoxSizer( wxHORIZONTAL );
m_staticTextOSize = new wxStaticText( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextOSize->Wrap( -1 );
bSizerRes->Add( m_staticTextOSize, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
m_UnitSizeX = new wxTextCtrl( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
m_UnitSizeX->SetMinSize( wxSize( 60,-1 ) );
bSizerRes->Add( m_UnitSizeX, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
m_UnitSizeY = new wxTextCtrl( sbSizerImgPrms->GetStaticBox(), wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
m_UnitSizeY->SetMinSize( wxSize( 60,-1 ) );
bSizerRes->Add( m_UnitSizeY, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
wxArrayString m_PixelUnitChoices;
m_PixelUnit = new wxChoice( sbSizerImgPrms->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_PixelUnitChoices, 0 );
m_PixelUnit->SetSelection( 0 );
m_PixelUnit->SetMinSize( wxSize( 80,-1 ) );
bSizerRes->Add( m_PixelUnit, 0, wxTOP|wxBOTTOM|wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );
sbSizerImgPrms->Add( bSizerRes, 0, wxEXPAND, 5 );
brightSizer->Add( sbSizerImgPrms, 0, wxEXPAND|wxALL, 5 );
m_buttonLoad = new wxButton( m_panelRight, wxID_ANY, _("Load Bitmap"), wxDefaultPosition, wxDefaultSize, 0 );
brightSizer->Add( m_buttonLoad, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_buttonExportFile = new wxButton( m_panelRight, wxID_ANY, _("Export to File"), wxDefaultPosition, wxDefaultSize, 0 );
brightSizer->Add( m_buttonExportFile, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_buttonExport = new wxButton( m_panelRight, wxID_ANY, _("Export"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonExport->SetToolTip( _("Create a library file for Eeschema\nThis library contains only one component: logo") );
m_buttonExportClipboard = new wxButton( m_panelRight, wxID_ANY, _("Export to Clipboard"), wxDefaultPosition, wxDefaultSize, 0 );
brightSizer->Add( m_buttonExportClipboard, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
brightSizer->Add( m_buttonExport, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
wxString m_rbOutputFormatChoices[] = { _("Eeschema (.lib file)"), _("Pcbnew (.kicad_mod file)"), _("Postscript (.ps file)"), _("Logo for title block (.kicad_wks file)") };
int m_rbOutputFormatNChoices = sizeof( m_rbOutputFormatChoices ) / sizeof( wxString );
m_rbOutputFormat = new wxRadioBox( m_panelRight, wxID_ANY, _("Format:"), wxDefaultPosition, wxDefaultSize, m_rbOutputFormatNChoices, m_rbOutputFormatChoices, 1, wxRA_SPECIFY_COLS );
m_rbOutputFormat->SetSelection( 1 );
brightSizer->Add( m_rbOutputFormat, 0, wxEXPAND|wxALL, 5 );
wxString m_radioBoxFormatChoices[] = { _("Eeschema (.lib file)"), _("Pcbnew (.kicad_mod file)"), _("Postscript (.ps file)"), _("Logo for title block (.kicad_wks file)") };
int m_radioBoxFormatNChoices = sizeof( m_radioBoxFormatChoices ) / sizeof( wxString );
m_radioBoxFormat = new wxRadioBox( m_panelRight, wxID_ANY, _("Format"), wxDefaultPosition, wxDefaultSize, m_radioBoxFormatNChoices, m_radioBoxFormatChoices, 1, wxRA_SPECIFY_COLS );
m_radioBoxFormat->SetSelection( 1 );
brightSizer->Add( m_radioBoxFormat, 0, wxEXPAND|wxALL, 5 );
wxStaticBoxSizer* sbSizer2;
sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Image Options:") ), wxVERTICAL );
sbSizer2 = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Image Options") ), wxVERTICAL );
m_ThresholdText = new wxStaticText( sbSizer2->GetStaticBox(), wxID_ANY, _("Black / White Threshold:"), wxDefaultPosition, wxDefaultSize, 0 );
m_ThresholdText->Wrap( -1 );
sbSizer2->Add( m_ThresholdText, 0, wxTOP|wxLEFT, 5 );
sbSizer2->Add( m_ThresholdText, 0, 0, 5 );
m_sliderThreshold = new wxSlider( sbSizer2->GetStaticBox(), wxID_ANY, 50, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS );
m_sliderThreshold->SetToolTip( _("Adjust the level to convert the greyscale picture to a black and white picture.") );
@@ -174,18 +145,18 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
sbSizer2->Add( m_sliderThreshold, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_checkNegative = new wxCheckBox( sbSizer2->GetStaticBox(), wxID_ANY, _("Negative"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizer2->Add( m_checkNegative, 0, wxTOP|wxBOTTOM, 10 );
sbSizer2->Add( m_checkNegative, 0, wxBOTTOM|wxTOP, 10 );
brightSizer->Add( sbSizer2, 0, wxALL|wxEXPAND, 5 );
wxString m_rbPCBLayerChoices[] = { _("Front silk screen"), _("Front solder mask"), _("User layer Eco1"), _("User layer Eco2") };
int m_rbPCBLayerNChoices = sizeof( m_rbPCBLayerChoices ) / sizeof( wxString );
m_rbPCBLayer = new wxRadioBox( m_panelRight, wxID_ANY, _("Board Layer for Outline:"), wxDefaultPosition, wxDefaultSize, m_rbPCBLayerNChoices, m_rbPCBLayerChoices, 1, wxRA_SPECIFY_COLS );
m_rbPCBLayer->SetSelection( 0 );
m_rbPCBLayer->SetToolTip( _("Choose the board layer to place the outline.\nThe 2 invisible fields reference and value are always placed on the silk screen layer.") );
wxString m_radio_PCBLayerChoices[] = { _("Front silk screen"), _("Front solder mask"), _("User layer Eco1"), _("User layer Eco2") };
int m_radio_PCBLayerNChoices = sizeof( m_radio_PCBLayerChoices ) / sizeof( wxString );
m_radio_PCBLayer = new wxRadioBox( m_panelRight, wxID_ANY, _("Board Layer for Outline"), wxDefaultPosition, wxDefaultSize, m_radio_PCBLayerNChoices, m_radio_PCBLayerChoices, 1, wxRA_SPECIFY_COLS );
m_radio_PCBLayer->SetSelection( 3 );
m_radio_PCBLayer->SetToolTip( _("Choose the board layer to place the outline.\nThe 2 invisible fields reference and value are always placed on the silk screen layer.") );
brightSizer->Add( m_rbPCBLayer, 0, wxALL|wxEXPAND, 5 );
brightSizer->Add( m_radio_PCBLayer, 0, wxALL|wxEXPAND, 5 );
m_panelRight->SetSizer( brightSizer );
@@ -196,20 +167,20 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
this->SetSizer( bMainSizer );
this->Layout();
bMainSizer->Fit( this );
m_statusBar = this->CreateStatusBar( 1, wxSTB_SIZEGRIP, wxID_ANY );
// Connect Events
m_InitialPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintInit ), NULL, this );
m_GreyscalePicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintGreyscale ), NULL, this );
m_BNPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintBW ), NULL, this );
m_AspectRatioLockButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::ToggleAspectRatioLock ), NULL, this );
m_UnitSizeX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeX ), NULL, this );
m_UnitSizeY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeY ), NULL, this );
m_PixelUnit->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeUnitChange ), NULL, this );
m_DPIValueX->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueX ), NULL, this );
m_DPIValueX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
m_DPIValueY->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueY ), NULL, this );
m_DPIValueY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
m_buttonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this );
m_buttonExportFile->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToFile ), NULL, this );
m_buttonExportClipboard->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToClipboard ), NULL, this );
m_rbOutputFormat->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
m_buttonExport->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
m_radioBoxFormat->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
m_sliderThreshold->Connect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( BM2CMP_FRAME_BASE::OnThresholdChange ), NULL, this );
m_checkNegative->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnNegativeClicked ), NULL, this );
}
@@ -220,14 +191,13 @@ BM2CMP_FRAME_BASE::~BM2CMP_FRAME_BASE()
m_InitialPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintInit ), NULL, this );
m_GreyscalePicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintGreyscale ), NULL, this );
m_BNPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaintBW ), NULL, this );
m_AspectRatioLockButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::ToggleAspectRatioLock ), NULL, this );
m_UnitSizeX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeX ), NULL, this );
m_UnitSizeY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeChangeY ), NULL, this );
m_PixelUnit->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnSizeUnitChange ), NULL, this );
m_DPIValueX->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueX ), NULL, this );
m_DPIValueX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
m_DPIValueY->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueY ), NULL, this );
m_DPIValueY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
m_buttonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this );
m_buttonExportFile->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToFile ), NULL, this );
m_buttonExportClipboard->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExportToClipboard ), NULL, this );
m_rbOutputFormat->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
m_buttonExport->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
m_radioBoxFormat->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this );
m_sliderThreshold->Disconnect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( BM2CMP_FRAME_BASE::OnThresholdChange ), NULL, this );
m_checkNegative->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnNegativeClicked ), NULL, this );
File diff suppressed because it is too large Load Diff
+19 -27
View File
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 1 2018)
// C++ code generated with wxFormBuilder (version 3.9.0 Nov 1 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@@ -22,13 +22,10 @@
#include <wx/icon.h>
#include <wx/notebook.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/bmpbuttn.h>
#include <wx/button.h>
#include <wx/textctrl.h>
#include <wx/valtext.h>
#include <wx/choice.h>
#include <wx/radiobox.h>
#include <wx/slider.h>
#include <wx/checkbox.h>
@@ -52,44 +49,39 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
wxScrolledWindow* m_GreyscalePicturePanel;
wxScrolledWindow* m_BNPicturePanel;
wxPanel* m_panelRight;
wxStaticText* m_staticTextISize;
wxStaticText* m_staticTextSize;
wxStaticText* m_SizeXValue;
wxStaticText* m_SizeYValue;
wxStaticText* m_SizePixUnits;
wxStaticText* m_staticTextDPI;
wxStaticText* m_InputXValueDPI;
wxStaticText* m_InputYValueDPI;
wxStaticText* m_DPIUnit;
wxStaticText* m_staticTextSize1;
wxStaticText* m_SizeXValue_mm;
wxStaticText* m_SizeYValue_mm;
wxStaticText* m_Size_mmxUnits;
wxStaticText* m_staticTextBPP;
wxStaticText* m_BPPValue;
wxStaticText* m_BPPunits;
wxStaticText* m_textLock;
wxBitmapButton* m_AspectRatioLockButton;
wxStaticText* m_staticTextOSize;
wxTextCtrl* m_UnitSizeX;
wxTextCtrl* m_UnitSizeY;
wxChoice* m_PixelUnit;
wxStaticText* m_staticTextBPI;
wxTextCtrl* m_DPIValueX;
wxTextCtrl* m_DPIValueY;
wxStaticText* m_DPI_Units;
wxButton* m_buttonLoad;
wxButton* m_buttonExportFile;
wxButton* m_buttonExportClipboard;
wxRadioBox* m_rbOutputFormat;
wxButton* m_buttonExport;
wxRadioBox* m_radioBoxFormat;
wxStaticText* m_ThresholdText;
wxSlider* m_sliderThreshold;
wxCheckBox* m_checkNegative;
wxRadioBox* m_rbPCBLayer;
wxRadioBox* m_radio_PCBLayer;
wxStatusBar* m_statusBar;
// Virtual event handlers, overide them in your derived class
virtual void OnPaintInit( wxPaintEvent& event ) { event.Skip(); }
virtual void OnPaintGreyscale( wxPaintEvent& event ) { event.Skip(); }
virtual void OnPaintBW( wxPaintEvent& event ) { event.Skip(); }
virtual void ToggleAspectRatioLock( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSizeChangeX( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSizeChangeY( wxCommandEvent& event ) { event.Skip(); }
virtual void OnSizeUnitChange( wxCommandEvent& event ) { event.Skip(); }
virtual void UpdatePPITextValueX( wxMouseEvent& event ) { event.Skip(); }
virtual void OnResolutionChange( wxCommandEvent& event ) { event.Skip(); }
virtual void UpdatePPITextValueY( wxMouseEvent& event ) { event.Skip(); }
virtual void OnLoadFile( wxCommandEvent& event ) { event.Skip(); }
virtual void OnExportToFile( wxCommandEvent& event ) { event.Skip(); }
virtual void OnExportToClipboard( wxCommandEvent& event ) { event.Skip(); }
virtual void OnExport( wxCommandEvent& event ) { event.Skip(); }
virtual void OnFormatChange( wxCommandEvent& event ) { event.Skip(); }
virtual void OnThresholdChange( wxScrollEvent& event ) { event.Skip(); }
virtual void OnNegativeClicked( wxCommandEvent& event ) { event.Skip(); }
@@ -97,7 +89,7 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
public:
BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bitmap to Component Converter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 746,684 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );
BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bitmap to Component Converter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );
~BM2CMP_FRAME_BASE();
-99
View File
@@ -1,99 +0,0 @@
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2010 jean-pierre.charras
* 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
*/
#include "bitmap2cmp_gui.h"
#include <kiface_i.h>
#include <kiway.h>
#include <pgm_base.h>
//-----<KIFACE>-----------------------------------------------------------------
namespace BMP2CMP {
static struct IFACE : public KIFACE_I
{
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override
{
return new BM2CMP_FRAME( aKiway, aParent );
}
/**
* Function IfaceOrAddress
* return a pointer to the requested object. The safest way to use this
* is to retrieve a pointer to a static instance of an interface, similar to
* how the KIFACE interface is exported. But if you know what you are doing
* use it to retrieve anything you want.
*
* @param aDataId identifies which object you want the address of.
*
* @return void* - and must be cast into the know type.
*/
void* IfaceOrAddress( int aDataId ) override
{
return NULL;
}
IFACE( const char* aDSOname, KIWAY::FACE_T aType ) :
KIFACE_I( aDSOname, aType )
{}
} kiface( "BMP2CMP", KIWAY::FACE_BMP2CMP );
} // namespace BMP2CMP
using namespace BMP2CMP;
static PGM_BASE* process;
KIFACE_I& Kiface()
{
return kiface;
}
// KIFACE_GETTER's actual spelling is a substitution macro found in kiway.h.
// KIFACE_GETTER will not have name mangling due to declaration in kiway.h.
KIFACE* KIFACE_GETTER( int* aKIFACEversion, int aKIWAYversion, PGM_BASE* aProgram )
{
process = (PGM_BASE*) aProgram;
return &kiface;
}
#if defined(BUILD_KIWAY_DLLS)
PGM_BASE& Pgm()
{
wxASSERT( process ); // KIFACE_GETTER has already been called.
return *process;
}
#endif
bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
{
return start_common( aCtlBits );
}
+151 -136
View File
@@ -1,8 +1,8 @@
/*
* This program source code file is part of KICAD, a free EDA CAD application.
*
* Copyright (C) 1992-2019 jean-pierre.charras
* Copyright (C) 1992-2019 Kicad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 1992-2013 jean-pierre.charras
* Copyright (C) 1992-2019 Kicad Developers, see change_log.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
@@ -24,7 +24,6 @@
#include <algorithm> // std::max
#include <cmath>
#include <string>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -32,15 +31,13 @@
#include <vector>
#include <common.h>
#include <geometry/shape_poly_set.h>
#include <layers_id_colors_and_visibility.h>
#include <potracelib.h>
#include "bitmap2component.h"
// Unit conversion. Coord unit from potrace is mm
#define MM2MICRON 1e3 // For pl_editor
#define MM2NANOMETER 1e6 // For pcbew
/* free a potrace bitmap */
static void bm_free( potrace_bitmap_t* bm )
@@ -53,6 +50,61 @@ static void bm_free( potrace_bitmap_t* bm )
}
/* Helper class to handle useful info to convert a bitmap image to
* a polygonal object description
*/
class BITMAPCONV_INFO
{
public:
enum OUTPUT_FMT_ID m_Format; // File format
int m_PixmapWidth;
int m_PixmapHeight; // the bitmap size in pixels
double m_ScaleX;
double m_ScaleY; // the conversion scale
potrace_path_t* m_Paths; // the list of paths, from potrace (list of lines and bezier curves)
FILE* m_Outfile; // File to create
const char * m_CmpName; // The string used as cmp/footprint name
public:
BITMAPCONV_INFO();
/**
* Function CreateOutputFile
* Creates the output file specified by m_Outfile,
* depending on file format given by m_Format
*/
void CreateOutputFile( BMP2CMP_MOD_LAYER aModLayer = (BMP2CMP_MOD_LAYER) 0 );
private:
/**
* Function OuputFileHeader
* write to file the header depending on file format
*/
void OuputFileHeader( const char * aBrdLayerName );
/**
* Function OuputFileEnd
* write to file the last strings depending on file format
*/
void OuputFileEnd();
/**
* @return the board layer name depending on the board layer selected
* @param aChoice = the choice (MOD_LYR_FSILKS to MOD_LYR_FINAL)
*/
const char * getBrdLayerName( BMP2CMP_MOD_LAYER aChoice );
/**
* Function OuputOnePolygon
* write one polygon to output file.
* Polygon coordinates are expected scaled by the polugon extraction function
*/
void OuputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName );
};
static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer,
potrace_dpoint_t p1,
potrace_dpoint_t p2,
@@ -60,8 +112,7 @@ static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer,
potrace_dpoint_t p4 );
BITMAPCONV_INFO::BITMAPCONV_INFO( std::string& aData ):
m_Data( aData )
BITMAPCONV_INFO::BITMAPCONV_INFO()
{
m_Format = POSTSCRIPT_FMT;
m_PixmapWidth = 0;
@@ -69,11 +120,12 @@ BITMAPCONV_INFO::BITMAPCONV_INFO( std::string& aData ):
m_ScaleX = 1.0;
m_ScaleY = 1.0;
m_Paths = NULL;
m_Outfile = NULL;
m_CmpName = "LOGO";
}
int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y,
BMP2CMP_MOD_LAYER aModLayer )
{
@@ -82,23 +134,15 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
// set tracing parameters, starting from defaults
param = potrace_param_default();
if( !param )
{
char msg[256];
sprintf( msg, "Error allocating parameters: %s\n", strerror( errno ) );
m_errors += msg;
fprintf( stderr, "Error allocating parameters: %s\n", strerror( errno ) );
return 1;
}
// For parameters: see http://potrace.sourceforge.net/potracelib.pdf
param->turdsize = 0; // area (in pixels) of largest path to be ignored.
// Potrace default is 2
param->opttolerance = 0.2; // curve optimization tolerance. Potrace default is 0.2
param->turdsize = 0;
/* convert the bitmap to curves */
st = potrace_trace( param, aPotrace_bitmap );
if( !st || st->status != POTRACE_STATUS_OK )
{
if( st )
@@ -107,45 +151,45 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
}
potrace_param_free( param );
char msg[256];
sprintf( msg, "Error tracing bitmap: %s\n", strerror( errno ) );
m_errors += msg;
fprintf( stderr, "Error tracing bitmap: %s\n", strerror( errno ) );
return 1;
}
m_PixmapWidth = aPotrace_bitmap->w;
m_PixmapHeight = aPotrace_bitmap->h; // the bitmap size in pixels
m_Paths = st->plist;
BITMAPCONV_INFO info;
info.m_PixmapWidth = aPotrace_bitmap->w;
info.m_PixmapHeight = aPotrace_bitmap->h; // the bitmap size in pixels
info.m_Paths = st->plist;
info.m_Outfile = aOutfile;
switch( aFormat )
{
case KICAD_LOGO:
m_Format = KICAD_LOGO;
m_ScaleX = MM2MICRON * 25.4 / aDpi_X; // the conversion scale from PPI to micron
m_ScaleY = MM2MICRON * 25.4 / aDpi_Y; // Y axis is top to bottom
createOutputData();
info.m_Format = KICAD_LOGO;
info.m_ScaleX = 1e3 * 25.4 / aDpi_X; // the conversion scale from PPI to micro
info.m_ScaleY = 1e3 * 25.4 / aDpi_Y; // Y axis is top to bottom
info.CreateOutputFile();
break;
case POSTSCRIPT_FMT:
m_Format = POSTSCRIPT_FMT;
m_ScaleX = 1.0; // the conversion scale
m_ScaleY = m_ScaleX;
info.m_Format = POSTSCRIPT_FMT;
info.m_ScaleX = 1.0; // the conversion scale
info.m_ScaleY = info.m_ScaleX;
// output vector data, e.g. as a rudimentary EPS file (mainly for tests)
createOutputData();
info.CreateOutputFile();
break;
case EESCHEMA_FMT:
m_Format = EESCHEMA_FMT;
m_ScaleX = 1000.0 / aDpi_X; // the conversion scale from PPI to UI (mil)
m_ScaleY = -1000.0 / aDpi_Y; // Y axis is bottom to Top for components in libs
createOutputData();
info.m_Format = EESCHEMA_FMT;
info.m_ScaleX = 1000.0 / aDpi_X; // the conversion scale from PPI to UI
info.m_ScaleY = -1000.0 / aDpi_Y; // Y axis is bottom to Top for components in libs
info.CreateOutputFile();
break;
case PCBNEW_KICAD_MOD:
m_Format = PCBNEW_KICAD_MOD;
m_ScaleX = MM2NANOMETER * 25.4 / aDpi_X; // the conversion scale from PPI to UI
m_ScaleY = MM2NANOMETER * 25.4 / aDpi_Y; // Y axis is top to bottom in modedit
createOutputData( aModLayer );
info.m_Format = PCBNEW_KICAD_MOD;
info.m_ScaleX = 1e6 * 25.4 / aDpi_X; // the conversion scale from PPI to UI
info.m_ScaleY = 1e6 * 25.4 / aDpi_Y; // Y axis is top to bottom in modedit
info.CreateOutputFile( aModLayer );
break;
default:
@@ -160,8 +204,7 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
return 0;
}
const char* BITMAPCONV_INFO::getBoardLayerName( BMP2CMP_MOD_LAYER aChoice )
const char* BITMAPCONV_INFO::getBrdLayerName( BMP2CMP_MOD_LAYER aChoice )
{
const char * layerName = "F.SilkS";
@@ -187,96 +230,87 @@ const char* BITMAPCONV_INFO::getBoardLayerName( BMP2CMP_MOD_LAYER aChoice )
return layerName;
}
void BITMAPCONV_INFO::outputDataHeader( const char * aBrdLayerName )
void BITMAPCONV_INFO::OuputFileHeader( const char * aBrdLayerName )
{
int Ypos = (int) ( m_PixmapHeight / 2 * m_ScaleY );
int fieldSize; // fields text size = 60 mils
char strbuf[1024];
switch( m_Format )
{
case POSTSCRIPT_FMT:
/* output vector data, e.g. as a rudimentary EPS file */
m_Data += "%%!PS-Adobe-3.0 EPSF-3.0\n";
sprintf( strbuf, "%%%%BoundingBox: 0 0 %d %d\n", m_PixmapWidth, m_PixmapHeight );
m_Data += strbuf;
m_Data += "gsave\n";
fprintf( m_Outfile, "%%!PS-Adobe-3.0 EPSF-3.0\n" );
fprintf( m_Outfile, "%%%%BoundingBox: 0 0 %d %d\n",
m_PixmapWidth, m_PixmapHeight );
fprintf( m_Outfile, "gsave\n" );
break;
case PCBNEW_KICAD_MOD:
// fields text size = 1.5 mm
// fields text thickness = 1.5 / 5 = 0.3mm
sprintf( strbuf, "(module %s (layer F.Cu)\n (at 0 0)\n", m_CmpName.c_str() );
m_Data += strbuf;
sprintf( strbuf, " (fp_text reference \"G***\" (at 0 0) (layer %s)\n"
fprintf( m_Outfile, "(module %s (layer F.Cu)\n (at 0 0)\n",
m_CmpName );
fprintf( m_Outfile, " (fp_text reference \"G***\" (at 0 0) (layer %s) hide\n"
" (effects (font (thickness 0.3)))\n )\n", aBrdLayerName );
m_Data += strbuf;
sprintf( strbuf, " (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n"
" (effects (font (thickness 0.3)))\n )\n", m_CmpName.c_str(), aBrdLayerName );
m_Data += strbuf;
fprintf( m_Outfile, " (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n"
" (effects (font (thickness 0.3)))\n )\n", m_CmpName, aBrdLayerName );
break;
case KICAD_LOGO:
m_Data += "(polygon (pos 0 0 rbcorner) (rotate 0) (linewidth 0.01)\n";
fprintf( m_Outfile, "(polygon (pos 0 0 rbcorner) (rotate 0) (linewidth 0.01)\n" );
break;
case EESCHEMA_FMT:
sprintf( strbuf, "EESchema-LIBRARY Version 2.3\n" );
m_Data += strbuf;
sprintf( strbuf, "#\n# %s\n", m_CmpName.c_str() );
m_Data += strbuf;
sprintf( strbuf, "# pixmap size w = %d, h = %d\n#\n",
fprintf( m_Outfile, "EESchema-LIBRARY Version 2.3\n" );
fprintf( m_Outfile, "#\n# %s\n", m_CmpName );
fprintf( m_Outfile, "# pixmap size w = %d, h = %d\n#\n",
m_PixmapWidth, m_PixmapHeight );
m_Data += strbuf;
// print reference and value
fieldSize = 50; // fields text size = 50 mils
fieldSize = 60; // fields text size = 60 mils
Ypos += fieldSize / 2;
sprintf( strbuf, "DEF %s G 0 40 Y Y 1 F N\n", m_CmpName.c_str() );
m_Data += strbuf;
sprintf( strbuf, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize );
m_Data += strbuf;
sprintf( strbuf, "F1 \"%s\" 0 %d %d H I C CNN\n", m_CmpName.c_str(), -Ypos, fieldSize );
m_Data += strbuf;
m_Data += "DRAW\n";
fprintf( m_Outfile, "DEF %s G 0 40 Y Y 1 F N\n", m_CmpName );
fprintf( m_Outfile, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize );
fprintf( m_Outfile, "F1 \"%s\" 0 %d %d H I C CNN\n", m_CmpName, -Ypos, fieldSize );
fprintf( m_Outfile, "DRAW\n" );
break;
}
}
void BITMAPCONV_INFO::outputDataEnd()
void BITMAPCONV_INFO::OuputFileEnd()
{
switch( m_Format )
{
case POSTSCRIPT_FMT:
m_Data += "grestore\n";
m_Data += "%%EOF\n";
fprintf( m_Outfile, "grestore\n" );
fprintf( m_Outfile, "%%EOF\n" );
break;
case PCBNEW_KICAD_MOD:
m_Data += ")\n";
fprintf( m_Outfile, ")\n" );
break;
case KICAD_LOGO:
m_Data += ")\n";
fprintf( m_Outfile, ")\n" );
break;
case EESCHEMA_FMT:
m_Data += "ENDDRAW\n";
m_Data += "ENDDEF\n";
fprintf( m_Outfile, "ENDDRAW\n" );
fprintf( m_Outfile, "ENDDEF\n" );
break;
}
}
void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName )
/**
* Function OuputOnePolygon
* write one polygon to output file.
* Polygon coordinates are expected scaled by the polygon extraction function
*/
void BITMAPCONV_INFO::OuputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName )
{
// write one polygon to output file.
// coordinates are expected in target unit.
int ii, jj;
VECTOR2I currpoint;
char strbuf[1024];
int offsetX = (int)( m_PixmapWidth / 2 * m_ScaleX );
int offsetY = (int)( m_PixmapHeight / 2 * m_ScaleY );
@@ -287,106 +321,95 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
{
case POSTSCRIPT_FMT:
offsetY = (int)( m_PixmapHeight * m_ScaleY );
sprintf( strbuf, "newpath\n%d %d moveto\n",
fprintf( m_Outfile, "newpath\n%d %d moveto\n",
startpoint.x, offsetY - startpoint.y );
m_Data += strbuf;
jj = 0;
for( ii = 1; ii < aPolygon.PointCount(); ii++ )
{
currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " %d %d lineto",
fprintf( m_Outfile, " %d %d lineto",
currpoint.x, offsetY - currpoint.y );
m_Data += strbuf;
if( jj++ > 6 )
{
jj = 0;
m_Data += "\n";
fprintf( m_Outfile, ("\n") );
}
}
m_Data += "\nclosepath fill\n";
fprintf( m_Outfile, "\nclosepath fill\n" );
break;
case PCBNEW_KICAD_MOD:
{
double width = 0.0; // outline thickness in mm: no thickness
m_Data += " (fp_poly (pts";
double width = 0.01; // outline thickness in mm
fprintf( m_Outfile, " (fp_poly (pts" );
jj = 0;
for( ii = 0; ii < aPolygon.PointCount(); ii++ )
{
currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " (xy %f %f)",
( currpoint.x - offsetX ) / MM2NANOMETER,
( currpoint.y - offsetY ) / MM2NANOMETER );
m_Data += strbuf;
fprintf( m_Outfile, " (xy %f %f)",
( currpoint.x - offsetX ) / 1e6,
( currpoint.y - offsetY ) / 1e6 );
if( jj++ > 6 )
{
jj = 0;
m_Data += "\n ";
fprintf( m_Outfile, ("\n ") );
}
}
// No need to close polygon
m_Data += " )";
sprintf( strbuf, "(layer %s) (width %f)\n )\n", aBrdLayerName, width );
m_Data += strbuf;
// Close polygon
fprintf( m_Outfile, " (xy %f %f) )",
( startpoint.x - offsetX ) / 1e6, ( startpoint.y - offsetY ) / 1e6 );
fprintf( m_Outfile, "(layer %s) (width %f)\n )\n", aBrdLayerName, width );
}
break;
case KICAD_LOGO:
m_Data += " (pts";
fprintf( m_Outfile, " (pts" );
// Internal units = micron, file unit = mm
jj = 0;
for( ii = 0; ii < aPolygon.PointCount(); ii++ )
{
currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " (xy %.3f %.3f)",
( currpoint.x - offsetX ) / MM2MICRON,
( currpoint.y - offsetY ) / MM2MICRON );
m_Data += strbuf;
fprintf( m_Outfile, " (xy %.3f %.3f)",
( currpoint.x - offsetX ) / 1e3,
( currpoint.y - offsetY ) / 1e3 );
if( jj++ > 4 )
{
jj = 0;
m_Data += "\n ";
fprintf( m_Outfile, ("\n ") );
}
}
// Close polygon
sprintf( strbuf, " (xy %.3f %.3f) )\n",
( startpoint.x - offsetX ) / MM2MICRON,
( startpoint.y - offsetY ) / MM2MICRON );
m_Data += strbuf;
fprintf( m_Outfile, " (xy %.3f %.3f) )\n",
( startpoint.x - offsetX ) / 1e3, ( startpoint.y - offsetY ) / 1e3 );
break;
case EESCHEMA_FMT:
// The polygon outline thickness is fixed here to 1 mil, the minimal
// value in Eeschema (0 means use default thickness for graphics)
#define EE_LINE_THICKNESS 1
sprintf( strbuf, "P %d 0 0 %d",
(int) aPolygon.PointCount() + 1, EE_LINE_THICKNESS );
m_Data += strbuf;
fprintf( m_Outfile, "P %d 0 0 1", (int) aPolygon.PointCount() + 1 );
for( ii = 0; ii < aPolygon.PointCount(); ii++ )
{
currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " %d %d",
fprintf( m_Outfile, " %d %d",
currpoint.x - offsetX, currpoint.y - offsetY );
m_Data += strbuf;
}
// Close polygon
sprintf( strbuf, " %d %d",
fprintf( m_Outfile, " %d %d",
startpoint.x - offsetX, startpoint.y - offsetY );
m_Data += strbuf;
m_Data += " F\n";
fprintf( m_Outfile, " F\n" );
break;
}
}
void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
void BITMAPCONV_INFO::CreateOutputFile( BMP2CMP_MOD_LAYER aModLayer )
{
std::vector <potrace_dpoint_t> cornersBuffer;
@@ -403,7 +426,7 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
// The layer name has meaning only for .kicad_mod files.
// For these files the header creates 2 invisible texts: value and ref
// (needed but not usefull) on silk screen layer
outputDataHeader( getBoardLayerName( MOD_LYR_FSILKS ) );
OuputFileHeader( getBrdLayerName( MOD_LYR_FSILKS ) );
bool main_outline = true;
@@ -411,12 +434,8 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
* Bezier curves are approximated by a polyline
*/
potrace_path_t* paths = m_Paths; // the list of paths
if(!m_Paths)
{
m_errors += "No path in black and white image: no outline created\n";
}
printf("NULL Paths!\n");
while( paths != NULL )
{
int cnt = paths->curve.n;
@@ -470,21 +489,17 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
*/
if( paths->next == NULL || paths->next->sign == '+' )
{
// Substract holes to main polygon:
polyset_areas.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
polyset_holes.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
polyset_areas.BooleanSubtract( polyset_holes, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
// Ensure there are no self intersecting polygons
polyset_areas.NormalizeAreaOutlines();
// Convert polygon with holes to a unique polygon
polyset_areas.Fracture( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
// Output current resulting polygon(s)
for( int ii = 0; ii < polyset_areas.OutlineCount(); ii++ )
{
SHAPE_LINE_CHAIN& poly = polyset_areas.Outline( ii );
outputOnePolygon( poly, getBoardLayerName( aModLayer ));
OuputOnePolygon(poly, getBrdLayerName( aModLayer ) );
}
polyset_areas.RemoveAllContours();
@@ -494,7 +509,7 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
paths = paths->next;
}
outputDataEnd();
OuputFileEnd();
}
// a helper function to calculate a square value
-66
View File
@@ -24,9 +24,6 @@
#ifndef BITMAP2COMPONENT_H
#define BITMAP2COMPONENT_H
#include <geometry/shape_poly_set.h>
#include <potracelib.h>
// for consistency this enum should conform to the
// indices in m_radioBoxFormat from bitmap2cmp_gui.cpp
enum OUTPUT_FMT_ID
@@ -47,67 +44,4 @@ enum BMP2CMP_MOD_LAYER
MOD_LYR_FINAL = MOD_LYR_ECO2
};
/* Helper class to handle useful info to convert a bitmap image to
* a polygonal object description
*/
class BITMAPCONV_INFO
{
private:
enum OUTPUT_FMT_ID m_Format; // File format
int m_PixmapWidth;
int m_PixmapHeight; // the bitmap size in pixels
double m_ScaleX;
double m_ScaleY; // the conversion scale
potrace_path_t* m_Paths; // the list of paths, from potrace (list of lines and bezier curves)
std::string m_CmpName; // The string used as cmp/footprint name
std::string& m_Data; // the buffer containing the conversion
std::string m_errors; // a buffer to return error messages
public:
BITMAPCONV_INFO( std::string& aData );
/**
* Run the conversion of the bitmap
*/
int ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y,
BMP2CMP_MOD_LAYER aModLayer );
std::string& GetErrorMessages() {return m_errors; }
private:
/**
* Creates the data specified by m_Format
*/
void createOutputData( BMP2CMP_MOD_LAYER aModLayer = (BMP2CMP_MOD_LAYER) 0 );
/**
* Function outputDataHeader
* write to file the header depending on file format
*/
void outputDataHeader( const char * aBrdLayerName );
/**
* Function outputDataEnd
* write to file the last strings depending on file format
*/
void outputDataEnd();
/**
* @return the board layer name depending on the board layer selected
* @param aChoice = the choice (MOD_LYR_FSILKS to MOD_LYR_FINAL)
*/
const char * getBoardLayerName( BMP2CMP_MOD_LAYER aChoice );
/**
* Function outputOnePolygon
* write one polygon to output file.
* Polygon coordinates are expected scaled by the polygon extraction function
*/
void outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName );
};
#endif // BITMAP2COMPONENT_H
+74 -3
View File
@@ -131,6 +131,7 @@ set( BMAPS_MID
add_line_label
add_line
add_pcb_target
add_polygon
add_power
add_rectangle
add_tracks
@@ -163,15 +164,14 @@ set( BMAPS_MID
axis3d
bitmap2component
bom
book
break_bus
break_line
browse_files
bus_definition_tool
calculator
cancel
change_entry_orient
contrast_mode
curved_ratsnest
create_cmp_file
checked_ok
color_materials
@@ -186,10 +186,25 @@ set( BMAPS_MID
custom_pad_to_primitives
cut
cvpcb
dashline
datasheet
delete_association
delete_bus
delete_circle
delete_connection
delete_dimension
delete_field
delete_gerber
delete_glabel
delete_line
delete_module
delete_net
delete_node
delete_pad
delete_polygon
delete_rectangle
delete_sheet
delete_track
delete
directory
directory_browser
@@ -198,10 +213,13 @@ set( BMAPS_MID
distribute_vertical
down
drag
drag_outline_segment
drag_pad
drag_segment_withslope
drc_off
drc
duplicate
edges_sketch
edit_comp_footprint
edit_comp_ref
edit_comp_value
@@ -245,6 +263,9 @@ set( BMAPS_MID
gerbview_clear_layers
general_deletions
general_ratsnest
glabel2label
glabel2text
gl_change
go_down
go_up
green
@@ -257,6 +278,8 @@ set( BMAPS_MID
hierarchy_nav
highlight_remove
hotkeys
hotkeys_import
hotkeys_export
html
icon
icon_cvpcb_small
@@ -270,12 +293,14 @@ set( BMAPS_MID
import_module
import_part
import_project
import_vector
import_setup
import
info
insert_module_board
invisible_text
kicad_icon_small
label2glabel
label2text
label
lang_ca
lang_bg
@@ -315,6 +340,7 @@ set( BMAPS_MID
list_nets
load_gerber
load_module_board
load_module_lib
local_ratsnest
lock_unlock
locked
@@ -325,6 +351,7 @@ set( BMAPS_MID
mirror_v
mode_module
mode_track
modratsnest
module_check
module_editor
module_wizard
@@ -334,11 +361,18 @@ set( BMAPS_MID
module_pin_filtered_list
module_library_list
module_name_filtered_list
module_ratsnest
module
modview_icon
morgan1
morgan2
move_glabel
move_exactly
move_pad
move_polygon
move_rectangle
move_sheet
move_target
move
move_relative
mw_add_gap
@@ -365,15 +399,34 @@ set( BMAPS_MID
noconn
normal
online_help
open_brd_file
open_library
open_page_layout
open_project
open_document
options_3drender
options_all_tracks_and_vias
options_all_tracks
options_all_vias
options_arc
options_board
options_circle
options_generic
options_module
options_pad
options_pinsheet
options_pin
options_rectangle
options_segment
options_tracks
options_track
options_vias
opt_show_polygon
orient
ortho
pad_sketch
pad
pad_dimensions
pad_enumerate
pads_mask_layers
path
@@ -387,11 +440,18 @@ set( BMAPS_MID
pcbcalculator
pcb_offset
pin2pin
pin_name_to
pin_number_to
pin_size_to
pin_show_etype
pin_table
pin_to
pin
plot
plot_dxf
plot_hpg
plot_pdf
plot_ps
plot_svg
plus
polar_coord
@@ -438,6 +498,10 @@ set( BMAPS_MID
rotate_pos_z
save_as
save_fp_to_board
save_gerber
save_library
save_project
save_setup
save
select_grid
select_layer_pair
@@ -481,6 +545,7 @@ set( BMAPS_MID
track_locked
track_sketch
track_unlocked
transistor
undelete
undo
unit_inch
@@ -490,6 +555,7 @@ set( BMAPS_MID
unzip
up
update_fields
update_module_board
update_pcb_from_sch
use_3D_copper_thickness
via
@@ -497,9 +563,14 @@ set( BMAPS_MID
via_microvia
via_sketch
warning
web_support
width_net
width_segment
width_track_via
width_track
width_vias
wizard_add_fplib_small
zip_tool
zip
zone_duplicate
zone_unfill
+13 -7
View File
@@ -8,13 +8,19 @@
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
0x61, 0x00, 0x00, 0x00, 0x52, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x60, 0x18, 0x2c, 0xa0,
0x0d, 0x88, 0xf7, 0x02, 0xf1, 0x7f, 0x20, 0x7e, 0x0b, 0xc4, 0xa7, 0x81, 0x58, 0x82, 0x14, 0x03,
0x0e, 0x01, 0x31, 0x1f, 0x12, 0xbf, 0x0a, 0x88, 0x57, 0x90, 0x62, 0xc0, 0x7f, 0x12, 0x31, 0xc8,
0xb5, 0x2d, 0xe8, 0x06, 0x90, 0x02, 0xf8, 0x81, 0xf8, 0x00, 0x25, 0x06, 0x60, 0xe8, 0x19, 0x35,
0x80, 0x0a, 0x06, 0xec, 0x82, 0x26, 0x24, 0x46, 0x22, 0xb1, 0x00, 0x10, 0xef, 0x40, 0x4f, 0xca,
0x7b, 0x28, 0x49, 0x48, 0x03, 0x07, 0x00, 0x53, 0x4f, 0x2f, 0x0f, 0x29, 0x5f, 0x3d, 0xf7, 0x00,
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0x61, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0e, 0xc4, 0x00, 0x00, 0x0e,
0xc4, 0x01, 0x95, 0x2b, 0x0e, 0x1b, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x69, 0x49,
0x44, 0x41, 0x54, 0x38, 0x8d, 0xed, 0xd2, 0x31, 0x0e, 0x82, 0x40, 0x14, 0x06, 0xe1, 0x4f, 0x0e,
0x20, 0x94, 0x9c, 0xd5, 0xda, 0x78, 0x16, 0x1a, 0xe8, 0x0d, 0xd9, 0xc4, 0xd8, 0xca, 0x55, 0xb8,
0x82, 0x6b, 0x01, 0x41, 0xb4, 0xda, 0xd5, 0x86, 0x82, 0x49, 0xfe, 0xe2, 0x15, 0x33, 0xd5, 0x63,
0x2b, 0x5c, 0x10, 0x10, 0x31, 0xe2, 0x81, 0x3a, 0x27, 0x70, 0xc7, 0x71, 0x75, 0x9f, 0xd0, 0xe4,
0x04, 0x62, 0xe6, 0x02, 0xce, 0xdf, 0x81, 0x1c, 0x4a, 0xdc, 0xfe, 0x09, 0x2c, 0x4e, 0xf1, 0x83,
0xf8, 0xc1, 0x1e, 0x78, 0x07, 0x7a, 0xd3, 0x23, 0x1d, 0x12, 0x57, 0xe1, 0xba, 0x0e, 0x0c, 0xe8,
0xf0, 0x4c, 0x5c, 0x3b, 0x3b, 0x1b, 0xe0, 0x05, 0x48, 0x07, 0x25, 0x8f, 0x26, 0x9b, 0x81, 0x8e,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE folder_xpm[1] = {{ png, sizeof( png ), "folder_xpm" }};
+14 -8
View File
@@ -8,14 +8,20 @@
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
0x61, 0x00, 0x00, 0x00, 0x60, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x90, 0x92, 0x92, 0xfa,
0x0f, 0xc2, 0x0c, 0xe4, 0x02, 0xaa, 0x19, 0x20, 0x2e, 0x2e, 0x2e, 0x46, 0x91, 0x01, 0xd2, 0xd2,
0xd2, 0x97, 0xc9, 0x32, 0x04, 0x66, 0x00, 0x14, 0x5f, 0x97, 0x97, 0x97, 0x97, 0x24, 0xd7, 0x80,
0x4b, 0x64, 0x19, 0x02, 0x33, 0x40, 0x42, 0x42, 0x42, 0x94, 0x2c, 0x43, 0x90, 0x63, 0x01, 0x14,
0x06, 0xa0, 0xb0, 0x40, 0xf3, 0x16, 0x5e, 0x4c, 0x3d, 0x03, 0xd0, 0xbd, 0x20, 0x2a, 0x2a, 0x2a,
0x41, 0x76, 0x20, 0x12, 0xad, 0x19, 0x5b, 0x34, 0x92, 0xa4, 0x99, 0xaa, 0x09, 0x89, 0xe2, 0xa4,
0x3c, 0x60, 0xb9, 0x11, 0x00, 0xd8, 0xbd, 0x63, 0x3e, 0x86, 0xe5, 0x97, 0x0f, 0x00, 0x00, 0x00,
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0x61, 0x00, 0x00, 0x00, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0x60, 0x40, 0x03, 0x52,
0x52, 0x52, 0xff, 0x41, 0x98, 0x01, 0x0b, 0x10, 0x11, 0x11, 0xe1, 0x95, 0x94, 0x94, 0xdc, 0xca,
0x80, 0x0f, 0xe0, 0x32, 0x40, 0x5a, 0x5a, 0x5a, 0x06, 0x28, 0x7e, 0x1e, 0x97, 0xe1, 0x70, 0x1b,
0xb0, 0x19, 0x20, 0x23, 0x23, 0x63, 0x06, 0x14, 0x7b, 0x81, 0xcf, 0x75, 0x20, 0xc0, 0x08, 0xb4,
0x65, 0x2d, 0xba, 0x22, 0xa0, 0x93, 0x83, 0x80, 0xfc, 0xaf, 0x30, 0x71, 0x9c, 0x06, 0x00, 0x35,
0xd7, 0xa0, 0x2b, 0x02, 0xd2, 0x65, 0x40, 0xfc, 0x17, 0x2a, 0x36, 0x0b, 0xa7, 0x01, 0x40, 0x41,
0x37, 0x20, 0xfe, 0x83, 0xa4, 0x18, 0x84, 0xa7, 0x42, 0xe9, 0x7f, 0x40, 0xdc, 0x80, 0x33, 0x7c,
0x80, 0xfe, 0x53, 0x05, 0x0a, 0xbe, 0x07, 0x49, 0x00, 0x9d, 0x5b, 0x85, 0xec, 0x0a, 0x20, 0xfe,
0x0e, 0xc4, 0x11, 0x78, 0x03, 0x18, 0x28, 0x70, 0x05, 0x24, 0x08, 0xf2, 0x3f, 0x28, 0x1c, 0xd0,
0x0c, 0x20, 0x88, 0x29, 0x37, 0x40, 0x5c, 0x5c, 0x5c, 0x11, 0xc8, 0x78, 0x03, 0x35, 0xa4, 0x9a,
0x50, 0x54, 0xe1, 0x4a, 0x3c, 0xae, 0xe8, 0x81, 0xc8, 0x40, 0x2a, 0x40, 0xb6, 0x9d, 0x2c, 0x03,
0x70, 0x25, 0x24, 0x92, 0x00, 0xae, 0xa4, 0x4c, 0x6a, 0x78, 0xd0, 0xd7, 0x00, 0x00, 0xe0, 0x1c,
0x80, 0xeb, 0x37, 0x41, 0x6c, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
};
const BITMAP_OPAQUE pinshape_clock_fall_xpm[1] = {{ png, sizeof( png ), "pinshape_clock_fall_xpm" }};
+51
View File
@@ -0,0 +1,51 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x02, 0x1d, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0x60, 0xa0, 0x27, 0xc8,
0xcd, 0xcd, 0x65, 0x4f, 0xc9, 0x4e, 0x9d, 0x94, 0x92, 0x95, 0xf2, 0x01, 0x84, 0x93, 0x73, 0x52,
0x27, 0x80, 0xc4, 0xa8, 0x6e, 0x11, 0xc8, 0x92, 0xb0, 0xba, 0xa8, 0x6f, 0x86, 0x3b, 0x1c, 0xff,
0x1b, 0xec, 0x70, 0xf8, 0x1f, 0x56, 0x17, 0xf3, 0x15, 0x64, 0x19, 0x31, 0x7a, 0x53, 0x53, 0x53,
0xdd, 0xd3, 0xd2, 0xd2, 0x0a, 0x81, 0xd8, 0x8d, 0xb0, 0x45, 0x40, 0x5f, 0x80, 0x2c, 0xd0, 0x3a,
0x64, 0x03, 0xc6, 0x20, 0x0b, 0xe3, 0xd3, 0x32, 0x7f, 0x33, 0x30, 0x9c, 0x98, 0xc7, 0xc0, 0x70,
0xbc, 0x01, 0x88, 0x53, 0x80, 0xd8, 0x93, 0x81, 0xe1, 0x94, 0x36, 0x03, 0xc3, 0x19, 0x7e, 0x98,
0xbe, 0xa4, 0xec, 0x94, 0xcd, 0xb1, 0x25, 0x09, 0x9f, 0xbc, 0xfb, 0x82, 0x7f, 0xc5, 0x16, 0xc7,
0x7f, 0x4a, 0xca, 0x4e, 0xda, 0x48, 0xb2, 0x45, 0x71, 0x29, 0xd9, 0xff, 0x81, 0x16, 0xe1, 0xc2,
0x9f, 0x15, 0x14, 0x56, 0x3c, 0x8c, 0x2c, 0x48, 0xf9, 0xad, 0x7d, 0xd0, 0x16, 0xac, 0x47, 0xfb,
0x80, 0xed, 0xff, 0x38, 0xa0, 0xa5, 0xe9, 0xe9, 0xe9, 0xae, 0x38, 0x2d, 0x02, 0x05, 0x53, 0x78,
0x6d, 0xf4, 0x37, 0x90, 0x65, 0x20, 0x4b, 0xc2, 0x6a, 0x62, 0xbe, 0x07, 0x84, 0x95, 0xad, 0x87,
0xfa, 0xa4, 0x01, 0xe2, 0xb3, 0x13, 0x3b, 0x81, 0xf8, 0x2a, 0xc8, 0x12, 0x90, 0x65, 0x7a, 0x7a,
0x73, 0xfe, 0x7b, 0x75, 0x87, 0xc1, 0x1d, 0x07, 0xc2, 0x3e, 0xbd, 0xc1, 0x3f, 0x81, 0x16, 0x15,
0xe1, 0x4d, 0x0c, 0x20, 0xcb, 0x52, 0xb2, 0x53, 0xde, 0x83, 0x70, 0x72, 0x56, 0x6a, 0x5f, 0x68,
0x68, 0x28, 0x1b, 0xee, 0x30, 0x38, 0xc3, 0xef, 0xee, 0xde, 0x96, 0x1a, 0x5d, 0x98, 0xf0, 0x0d,
0xe4, 0x13, 0x64, 0x1f, 0x01, 0xe3, 0xcc, 0x85, 0xea, 0x89, 0x08, 0x14, 0x27, 0x20, 0xc3, 0xbd,
0x7b, 0xc2, 0xfe, 0x45, 0xe6, 0xa5, 0xfd, 0x8f, 0x88, 0xcf, 0x3f, 0x46, 0xb3, 0xac, 0x01, 0x4a,
0x6d, 0xf6, 0xf6, 0xdd, 0xdb, 0xa4, 0xa5, 0xd7, 0x81, 0xe2, 0x6e, 0x31, 0x8d, 0x73, 0xe2, 0x51,
0x79, 0xa0, 0x25, 0xff, 0x80, 0xf8, 0x0b, 0x03, 0xc3, 0x7e, 0x1e, 0x1a, 0x5b, 0x76, 0xe2, 0x30,
0x34, 0x45, 0xc6, 0xd2, 0xd8, 0xa2, 0x93, 0x19, 0x50, 0x8b, 0x76, 0xd0, 0xd8, 0xa2, 0xc3, 0x82,
0x40, 0xcb, 0x7e, 0x00, 0x2d, 0xfa, 0x03, 0xcc, 0xd8, 0x12, 0xb4, 0x0e, 0xbe, 0xf5, 0x10, 0x5f,
0x9d, 0x2c, 0xa4, 0xb5, 0x45, 0xc1, 0xd0, 0xe0, 0x3b, 0x43, 0x53, 0x6b, 0xac, 0xad, 0xe7, 0xf2,
0x5a, 0xdb, 0xf7, 0x7e, 0x8f, 0x4b, 0xc9, 0xfa, 0x9f, 0x9c, 0x99, 0xfa, 0x99, 0xa6, 0xb5, 0x40,
0x48, 0x4d, 0xec, 0x6f, 0x72, 0x6a, 0x01, 0x22, 0xc1, 0x45, 0x6e, 0x06, 0x86, 0x63, 0xf6, 0x89,
0xe9, 0xe9, 0xdf, 0xd1, 0x0b, 0x67, 0x50, 0x91, 0x46, 0x49, 0x06, 0x55, 0x06, 0xc6, 0x43, 0x0c,
0x10, 0x4f, 0x01, 0xe2, 0xb3, 0x40, 0x0c, 0xaa, 0x52, 0xfe, 0x83, 0x82, 0x0c, 0xaf, 0x45, 0xf8,
0x6b, 0xd8, 0x33, 0x5c, 0x40, 0x43, 0x6c, 0x80, 0x38, 0x1f, 0x88, 0x57, 0x01, 0xf1, 0x0b, 0x2c,
0xd5, 0xc6, 0x1f, 0x50, 0xc9, 0xee, 0xe4, 0xd1, 0x7a, 0x3d, 0xac, 0x26, 0xf6, 0x27, 0xbc, 0x16,
0xa8, 0x05, 0x06, 0x1d, 0xb0, 0x80, 0xc6, 0x59, 0xc3, 0x86, 0xd6, 0xc4, 0xfe, 0x70, 0xf5, 0x6e,
0x3e, 0x0f, 0xd4, 0x7c, 0x04, 0x9a, 0x37, 0xd0, 0x0d, 0xfe, 0x00, 0xc4, 0xbb, 0xa1, 0x95, 0xa2,
0x2f, 0x03, 0xc3, 0x79, 0x01, 0xa2, 0x6a, 0x01, 0x02, 0x15, 0xdf, 0x6f, 0x68, 0xf0, 0x4c, 0x81,
0x04, 0x17, 0x28, 0xd8, 0xc8, 0x4d, 0x2d, 0x58, 0x2c, 0x02, 0x45, 0x2c, 0x28, 0x82, 0x21, 0x11,
0x4d, 0x25, 0x80, 0x51, 0xc3, 0xa2, 0x87, 0x2d, 0x35, 0x9b, 0x5b, 0xa4, 0xd5, 0xb0, 0x83, 0x18,
0x00, 0x00, 0x06, 0xd3, 0x8e, 0xf0, 0xd7, 0x9a, 0xbb, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE add_polygon_xpm[1] = {{ png, sizeof( png ), "add_polygon_xpm" }};
//EOF
+46 -61
View File
@@ -8,67 +8,52 @@
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0e, 0xc4, 0x00, 0x00, 0x0e,
0xc4, 0x01, 0x95, 0x2b, 0x0e, 0x1b, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x03, 0x6a, 0x49,
0x44, 0x41, 0x54, 0x48, 0x89, 0xb5, 0xd5, 0x5d, 0x88, 0xd6, 0x45, 0x14, 0x06, 0xf0, 0xdf, 0xbc,
0xbb, 0xb4, 0x9b, 0xa2, 0x52, 0x62, 0x9f, 0x62, 0x6a, 0xa9, 0xb9, 0x57, 0x19, 0xe9, 0x8d, 0x8a,
0x41, 0xa5, 0x45, 0xc6, 0xde, 0x44, 0x4a, 0x46, 0x84, 0x94, 0xd1, 0x5d, 0x88, 0xd5, 0x4a, 0xda,
0x7b, 0x16, 0x57, 0xcd, 0x0a, 0x2a, 0x6f, 0x02, 0xa1, 0x0b, 0x31, 0x2f, 0x0a, 0xca, 0xa0, 0x2e,
0x44, 0xa5, 0x04, 0xc3, 0xec, 0x1b, 0x0c, 0xda, 0x4a, 0x5c, 0x25, 0x71, 0x55, 0x6a, 0x57, 0x2a,
0x65, 0x5d, 0x7d, 0x77, 0xa7, 0x8b, 0xf7, 0xdd, 0xdd, 0xb7, 0xfd, 0x08, 0xcc, 0x75, 0xe0, 0xcf,
0x7f, 0x66, 0xce, 0xcc, 0x3c, 0x33, 0xcf, 0x79, 0xce, 0x39, 0x49, 0x38, 0x87, 0xdf, 0x5d, 0xdd,
0x36, 0xa9, 0x16, 0x67, 0x70, 0xe0, 0x2a, 0x03, 0x2d, 0x2c, 0x8c, 0xc2, 0x21, 0xf5, 0xb8, 0x16,
0xe9, 0xbf, 0x16, 0xd5, 0xfe, 0xaf, 0xa3, 0x93, 0x9b, 0x64, 0x33, 0x71, 0x0b, 0xea, 0x2a, 0xb3,
0x97, 0xd0, 0x8e, 0x5f, 0x70, 0xea, 0x4a, 0x81, 0x6a, 0x30, 0x4f, 0x36, 0x03, 0xfb, 0xf0, 0x8a,
0x82, 0x23, 0x28, 0xe9, 0x35, 0x0b, 0xcb, 0xb1, 0x54, 0xd2, 0x26, 0x3b, 0x84, 0xd2, 0xe5, 0x03,
0x65, 0x49, 0xb2, 0x48, 0x32, 0x06, 0xf7, 0x29, 0xda, 0x1f, 0x11, 0x73, 0xf4, 0xba, 0xa7, 0xb2,
0xe2, 0xdb, 0x88, 0x68, 0x14, 0xe6, 0xe3, 0x23, 0x2c, 0xc2, 0x67, 0xc8, 0x90, 0x84, 0xa3, 0x86,
0x8a, 0xe1, 0x36, 0x4c, 0x1d, 0x04, 0x54, 0x2f, 0x99, 0xa0, 0x60, 0x6e, 0xf4, 0xc6, 0xdf, 0x78,
0x17, 0xf7, 0x0f, 0xda, 0xb7, 0x17, 0x4f, 0x47, 0x4d, 0x8c, 0x55, 0xf2, 0xb5, 0xe4, 0x08, 0x0e,
0x1b, 0x41, 0x0c, 0x35, 0x98, 0xab, 0xcc, 0xf3, 0x37, 0xfd, 0x5f, 0x72, 0x40, 0xb2, 0x2c, 0x7a,
0xe3, 0x98, 0x32, 0x6d, 0x83, 0x41, 0xe0, 0x01, 0xec, 0x8f, 0x9e, 0x38, 0xa1, 0x60, 0x1d, 0x1a,
0x70, 0x0d, 0xc3, 0x51, 0x97, 0xdd, 0x21, 0x49, 0x58, 0x2a, 0x74, 0x0e, 0xb1, 0x87, 0x4d, 0x98,
0x51, 0x19, 0x75, 0xe3, 0x3d, 0x65, 0xc5, 0xad, 0x50, 0x16, 0xc6, 0x34, 0xac, 0x95, 0x6d, 0xc4,
0x16, 0xd9, 0xad, 0xd2, 0x50, 0xa0, 0x24, 0x99, 0x85, 0x6d, 0x42, 0x67, 0x44, 0x7c, 0x8c, 0xc6,
0x61, 0x6e, 0x5e, 0x5e, 0x9c, 0xd2, 0x8a, 0x62, 0xb1, 0xf8, 0x21, 0x34, 0x37, 0x37, 0xef, 0xce,
0x39, 0x7f, 0x50, 0x31, 0x2d, 0x16, 0x5e, 0x16, 0xbe, 0x97, 0x4c, 0x84, 0xc1, 0xd4, 0x4d, 0xc1,
0x38, 0xbc, 0xb9, 0x61, 0xc3, 0x86, 0xd9, 0x78, 0x64, 0x24, 0x10, 0xa8, 0xaf, 0xaf, 0xdf, 0x53,
0xd5, 0xdf, 0x5d, 0x65, 0x9a, 0x55, 0xf9, 0x9f, 0xaa, 0xbc, 0x72, 0x08, 0xd0, 0x6c, 0xc9, 0xfb,
0xc2, 0x6f, 0x3d, 0x3d, 0x3d, 0x6b, 0x86, 0xb1, 0xff, 0xab, 0x75, 0x75, 0x75, 0x2d, 0xa9, 0xea,
0x3f, 0x54, 0x65, 0xfa, 0xb9, 0xf2, 0xbf, 0x59, 0x99, 0xde, 0x2a, 0xd5, 0x95, 0x83, 0x70, 0x31,
0xee, 0x6a, 0xa9, 0x6d, 0xe9, 0x28, 0x95, 0x4a, 0x6d, 0x2a, 0x8e, 0xc4, 0xfc, 0x88, 0x38, 0x08,
0x11, 0xb1, 0x09, 0x6b, 0x2b, 0xf3, 0xdd, 0xd8, 0xa9, 0xec, 0xa3, 0xc7, 0x0d, 0x04, 0xef, 0xc6,
0x18, 0x1b, 0x9b, 0x9d, 0xd7, 0x21, 0xfb, 0x4a, 0x32, 0x79, 0xc0, 0x47, 0x59, 0x03, 0xf6, 0x09,
0x87, 0x4b, 0x51, 0x7a, 0xad, 0x0a, 0xe4, 0x8b, 0x88, 0x38, 0xa8, 0xd9, 0x0a, 0x5c, 0x90, 0xb5,
0xe0, 0x51, 0x65, 0x41, 0xd4, 0x61, 0xe5, 0xa0, 0x87, 0xb6, 0xe1, 0x55, 0xe7, 0x3d, 0xa3, 0x1c,
0x7d, 0x27, 0x31, 0xb9, 0x8f, 0x9a, 0xeb, 0x30, 0x59, 0xb2, 0x39, 0x22, 0xc6, 0x63, 0x55, 0xd5,
0xc6, 0xd7, 0x85, 0x7a, 0xd9, 0x5b, 0xb2, 0x1d, 0x21, 0xa6, 0x2b, 0x4b, 0x7b, 0xef, 0x30, 0x6c,
0xee, 0xa9, 0xad, 0xad, 0xbd, 0x37, 0xc4, 0x14, 0xb4, 0xa0, 0x15, 0x17, 0x19, 0xf0, 0x41, 0x03,
0x7e, 0x50, 0xf4, 0x79, 0x4a, 0xe9, 0x39, 0x4c, 0xa8, 0xe2, 0xfa, 0x53, 0x3c, 0x29, 0x1b, 0x8f,
0x4e, 0xc9, 0xfe, 0x48, 0x71, 0x7b, 0x44, 0x2c, 0xc1, 0x9c, 0x94, 0xd2, 0xaa, 0x94, 0xd2, 0xaa,
0x42, 0xa1, 0x70, 0x77, 0x44, 0x3c, 0xb8, 0xae, 0xb4, 0x6e, 0x9a, 0x64, 0xbf, 0xec, 0x2c, 0x7e,
0xec, 0xbb, 0x41, 0x12, 0xce, 0x60, 0x22, 0x96, 0x6f, 0xbd, 0x7e, 0xeb, 0x27, 0x9d, 0x9d, 0x9d,
0x6d, 0xca, 0xc9, 0x52, 0x4a, 0x69, 0x65, 0x31, 0x17, 0xb7, 0xe3, 0x08, 0xba, 0x65, 0xdf, 0x49,
0xe6, 0x55, 0x68, 0xdb, 0x27, 0xd9, 0x21, 0xf9, 0x55, 0xaf, 0x1e, 0xdc, 0x89, 0x65, 0x78, 0x58,
0x76, 0x54, 0x72, 0x08, 0x3d, 0x15, 0x9c, 0x85, 0xb5, 0xb8, 0x01, 0xc7, 0x35, 0xd8, 0x75, 0xb6,
0xf5, 0xec, 0x53, 0x7d, 0x20, 0x38, 0x99, 0x73, 0xde, 0x29, 0x69, 0x94, 0x4d, 0xc5, 0x2e, 0x49,
0x0f, 0xbe, 0x94, 0x1c, 0xc3, 0x4c, 0xd9, 0x36, 0x59, 0x7d, 0x65, 0xfd, 0x45, 0xb4, 0xcb, 0xf6,
0x4a, 0x23, 0x67, 0xef, 0x2d, 0x1e, 0xd3, 0x9b, 0x23, 0xaf, 0xee, 0x7f, 0x6a, 0x4a, 0x6f, 0x17,
0x8b, 0xc5, 0x8b, 0x42, 0x13, 0x8e, 0xe1, 0x5c, 0xff, 0xae, 0xec, 0x34, 0x4e, 0x57, 0x46, 0xf5,
0x48, 0xb2, 0x0b, 0x92, 0x3c, 0x52, 0x55, 0x2a, 0x48, 0x3a, 0x8c, 0xb7, 0x3d, 0x22, 0x1a, 0x2b,
0xbe, 0x82, 0xbf, 0xea, 0xea, 0xea, 0xb6, 0x09, 0x0b, 0x30, 0x4f, 0xf2, 0xd3, 0xf0, 0xdb, 0xc1,
0x05, 0x74, 0x49, 0xe5, 0x2c, 0x3d, 0x52, 0x2b, 0xe0, 0x59, 0xab, 0x75, 0xe1, 0x85, 0xaa, 0xf9,
0x77, 0x9a, 0x9a, 0x9a, 0xfe, 0xc4, 0x4b, 0x92, 0x13, 0xf2, 0x30, 0x39, 0xef, 0x32, 0x5b, 0x82,
0x88, 0x58, 0x60, 0xa0, 0x54, 0x74, 0x63, 0x7a, 0xd4, 0xc4, 0x38, 0x3d, 0x5a, 0x95, 0x33, 0x75,
0xfb, 0x15, 0xe2, 0xf4, 0x97, 0x89, 0x35, 0x55, 0x93, 0x3b, 0x23, 0xa2, 0x5d, 0xc9, 0x8b, 0x92,
0x3f, 0x46, 0x01, 0x04, 0x03, 0x71, 0xd4, 0x57, 0x5b, 0x7a, 0x6b, 0x6a, 0x6a, 0xde, 0xb0, 0xd1,
0x8d, 0x92, 0x27, 0xe4, 0xfe, 0x9c, 0x35, 0x6a, 0x40, 0x5b, 0x95, 0x9d, 0xba, 0x65, 0xfd, 0xfa,
0xf5, 0xad, 0x2e, 0x79, 0xbe, 0x32, 0x3e, 0x3e, 0x5a, 0x40, 0x43, 0xc5, 0x18, 0xc6, 0xc8, 0x4e,
0x29, 0x48, 0xb2, 0x8e, 0x51, 0xc2, 0x99, 0xf4, 0x0f, 0x91, 0x83, 0x1f, 0x42, 0x3f, 0x13, 0xec,
0x28, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x02, 0xbb, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x4d, 0x68, 0x15,
0x67, 0x14, 0x86, 0x9f, 0x58, 0x0a, 0x1a, 0x6b, 0x29, 0xae, 0xda, 0x85, 0x59, 0x9b, 0xd2, 0x96,
0x1a, 0x0a, 0x81, 0xfe, 0x2c, 0xb4, 0x6b, 0x91, 0x62, 0xdc, 0xa8, 0xdd, 0x08, 0x4a, 0x17, 0xa5,
0x4b, 0xb7, 0xf3, 0x9c, 0xb9, 0xd7, 0xc0, 0x25, 0x60, 0xd7, 0x01, 0x23, 0x4d, 0x15, 0xdb, 0x4a,
0x0b, 0x55, 0x37, 0x7a, 0x15, 0x04, 0xf1, 0x8f, 0xd2, 0xd2, 0x8d, 0x94, 0xb6, 0x1a, 0xab, 0xa6,
0xa0, 0x69, 0xb5, 0xad, 0x69, 0x24, 0x31, 0x36, 0xde, 0x2e, 0xfc, 0x26, 0x4c, 0x6e, 0x6e, 0x12,
0x91, 0x9b, 0x81, 0x03, 0xc3, 0xfc, 0x9c, 0x67, 0xde, 0xef, 0x9c, 0xf3, 0x7e, 0x03, 0x32, 0x81,
0xfc, 0xb6, 0xcc, 0x31, 0x01, 0x32, 0x82, 0x7c, 0xb6, 0xcc, 0x31, 0xb2, 0x14, 0x68, 0x18, 0xf9,
0x0a, 0xf9, 0x72, 0xb9, 0x40, 0x75, 0x82, 0x1b, 0xc8, 0x34, 0xd2, 0x48, 0x31, 0x49, 0x70, 0x1d,
0x39, 0xd9, 0x0e, 0xd0, 0x61, 0x32, 0x46, 0x90, 0xc7, 0xc8, 0x31, 0x64, 0x3b, 0xd2, 0x43, 0x4e,
0x2f, 0xb2, 0x93, 0x8c, 0xd3, 0xe9, 0xde, 0x2f, 0x64, 0x1c, 0x7a, 0x56, 0xd0, 0xe7, 0xc8, 0x28,
0x32, 0x86, 0xbc, 0x0d, 0x74, 0xa8, 0x3d, 0xea, 0x9e, 0x14, 0x3d, 0x40, 0x07, 0xb2, 0x89, 0xe0,
0x2e, 0x72, 0x93, 0x8c, 0xe1, 0x67, 0x01, 0xfd, 0x88, 0x8c, 0x23, 0xeb, 0xd5, 0x2e, 0xf5, 0xb4,
0xda, 0x68, 0x8a, 0xba, 0xda, 0x85, 0xbc, 0x86, 0x4c, 0x92, 0x71, 0xbb, 0x45, 0x87, 0x9d, 0x5d,
0x0c, 0x74, 0x84, 0x60, 0x0a, 0xf9, 0x58, 0xed, 0x54, 0x7f, 0x6d, 0x01, 0x29, 0xe2, 0xba, 0xfa,
0x02, 0xc1, 0x66, 0xe4, 0x68, 0x53, 0x5c, 0x4c, 0xe3, 0x72, 0x68, 0x21, 0xd0, 0x39, 0x64, 0x92,
0xfd, 0xac, 0x52, 0xfb, 0x4b, 0x49, 0xa7, 0xd4, 0x03, 0xea, 0x50, 0x3a, 0x2f, 0xae, 0x57, 0x69,
0x75, 0xc8, 0x5a, 0xe4, 0x01, 0x19, 0x97, 0x16, 0x02, 0x5d, 0x41, 0xce, 0x03, 0xa8, 0xdf, 0x17,
0x09, 0x23, 0x62, 0xeb, 0x6c, 0x0e, 0xed, 0x5b, 0x44, 0x65, 0x43, 0xfd, 0x36, 0xc1, 0x3e, 0x45,
0xfe, 0x4a, 0xa3, 0x31, 0x0f, 0x74, 0x15, 0xf9, 0x26, 0x25, 0x1c, 0x2f, 0x5e, 0xae, 0xd5, 0x6a,
0x6b, 0x0a, 0x50, 0xad, 0x56, 0x5b, 0xb3, 0x04, 0x68, 0xa6, 0x52, 0xa9, 0x74, 0x23, 0x5d, 0xc8,
0xa3, 0xa6, 0x5a, 0xcd, 0x51, 0x74, 0xa1, 0x59, 0x91, 0xda, 0x57, 0x80, 0x22, 0x62, 0xdb, 0x12,
0xa0, 0x86, 0x3a, 0xf4, 0xe4, 0x61, 0x0e, 0x23, 0x77, 0x16, 0xae, 0x91, 0x74, 0xb6, 0xa8, 0xd1,
0xc1, 0x14, 0x0f, 0x5b, 0xd5, 0x28, 0xcf, 0xf3, 0xde, 0xd2, 0xf5, 0xe9, 0x6a, 0xb5, 0xba, 0x0e,
0x79, 0x03, 0x79, 0x4c, 0xcc, 0x0e, 0x77, 0xa9, 0xeb, 0x64, 0x0a, 0xf9, 0xe4, 0x29, 0xba, 0x6e,
0x64, 0x60, 0x60, 0x60, 0x35, 0xc1, 0x56, 0x82, 0x1d, 0x69, 0x15, 0xce, 0x97, 0xee, 0xd7, 0x52,
0xad, 0xea, 0xc8, 0xad, 0xd6, 0x73, 0x94, 0xf1, 0x2f, 0x15, 0xba, 0xd3, 0x1c, 0xd5, 0x5b, 0x40,
0x4e, 0x55, 0xab, 0xd5, 0x75, 0xe4, 0xbc, 0x9e, 0x56, 0xe0, 0x4f, 0x64, 0x65, 0x44, 0x6c, 0x29,
0x3d, 0x73, 0x5f, 0x7d, 0x89, 0x60, 0x63, 0xc9, 0x61, 0xe6, 0x80, 0x86, 0x91, 0x51, 0x82, 0x3f,
0xc8, 0x79, 0x0f, 0xe8, 0xc8, 0xf3, 0x7c, 0x43, 0x44, 0xec, 0x8e, 0x88, 0xdd, 0xea, 0x9b, 0x40,
0x07, 0xc1, 0xfb, 0xc8, 0x3d, 0xe4, 0x77, 0x32, 0x1e, 0x22, 0x7b, 0x92, 0x8b, 0x5c, 0x29, 0xc1,
0xf6, 0x26, 0x55, 0x3f, 0xa4, 0x46, 0x6b, 0xe1, 0x75, 0x72, 0x2d, 0x7d, 0xc9, 0x09, 0x82, 0x1d,
0xc8, 0x5b, 0xe4, 0xf4, 0x12, 0x7c, 0x88, 0x9c, 0x69, 0xf2, 0xba, 0x9f, 0xd2, 0xfb, 0x2b, 0xd4,
0x5d, 0x25, 0xd0, 0x6d, 0x75, 0x25, 0xd2, 0x87, 0xfc, 0x87, 0x8c, 0x2d, 0xe4, 0xde, 0xa7, 0x92,
0x9d, 0xcc, 0x75, 0x6f, 0xe7, 0xb9, 0xf7, 0xd7, 0xc8, 0x0c, 0xc1, 0x07, 0x83, 0x83, 0x83, 0xcf,
0xab, 0xb7, 0x4a, 0xb0, 0x5d, 0x1c, 0xe5, 0xb9, 0x94, 0xa7, 0xb1, 0xf8, 0x7e, 0x94, 0xcd, 0xee,
0x47, 0x5f, 0x2c, 0x62, 0x98, 0xd7, 0x90, 0xef, 0x52, 0x53, 0xec, 0x2d, 0x81, 0x7e, 0x56, 0x57,
0x20, 0x1f, 0x2d, 0x0d, 0x7a, 0x9a, 0x08, 0x8e, 0x27, 0xc5, 0xef, 0xaa, 0x2f, 0xaa, 0x7f, 0x97,
0x9c, 0x65, 0x0b, 0xfb, 0x59, 0x45, 0x70, 0xb7, 0x5d, 0x5b, 0xf9, 0x28, 0x72, 0x22, 0xa9, 0xaa,
0x95, 0x54, 0x5d, 0x4e, 0x4d, 0xd1, 0xd7, 0x2e, 0x50, 0x3d, 0x35, 0xc9, 0xab, 0xea, 0xcb, 0xea,
0x64, 0x01, 0xcb, 0xf3, 0xfc, 0x9d, 0xc2, 0x71, 0xdb, 0xf5, 0x73, 0x32, 0x46, 0x70, 0x20, 0xa9,
0x1a, 0x9a, 0x67, 0xb6, 0x6d, 0x04, 0x9d, 0x43, 0xa6, 0xd9, 0xc7, 0x2b, 0x95, 0x4a, 0xa5, 0x5b,
0x9d, 0x49, 0xa0, 0x89, 0x76, 0x83, 0x86, 0x91, 0x7f, 0x90, 0xfe, 0xa4, 0xaa, 0x3f, 0x2d, 0x61,
0x7f, 0x01, 0x6a, 0xdf, 0x0f, 0x64, 0x30, 0x4e, 0xc6, 0x7d, 0xa4, 0xb3, 0x79, 0x4f, 0xfc, 0x1f,
0xf5, 0x11, 0xa2, 0x95, 0x85, 0x61, 0xe4, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE add_zone_xpm[1] = {{ png, sizeof( png ), "add_zone_xpm" }};
+95
View File
@@ -0,0 +1,95 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0xd9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x7f, 0x6c, 0x53,
0x55, 0x14, 0xc7, 0xbf, 0xef, 0x47, 0xfb, 0x5e, 0xdb, 0xad, 0xdb, 0xba, 0x75, 0x1d, 0xb0, 0x4e,
0xd8, 0x90, 0x6d, 0x20, 0x22, 0x24, 0x6a, 0x20, 0x81, 0x48, 0x86, 0xa8, 0x51, 0xb3, 0x04, 0x21,
0xfe, 0xc2, 0x84, 0xc5, 0x3f, 0xd4, 0x18, 0x8d, 0x21, 0xd1, 0x68, 0x62, 0x22, 0x09, 0x89, 0x21,
0x18, 0x94, 0x18, 0x31, 0xf1, 0x2f, 0x71, 0x89, 0x9a, 0x18, 0x83, 0x81, 0x04, 0x54, 0x02, 0xba,
0xc0, 0x94, 0x00, 0x93, 0x0d, 0x68, 0xe7, 0x7e, 0x65, 0x8e, 0x76, 0x2b, 0x8c, 0xb1, 0xad, 0xdd,
0xd6, 0xf6, 0xf5, 0xfd, 0xf4, 0xdc, 0x36, 0x65, 0xab, 0x1b, 0x5b, 0x63, 0x08, 0x2f, 0x39, 0xbd,
0xbf, 0x9a, 0xf3, 0xb9, 0xe7, 0x9e, 0x73, 0xcf, 0xb9, 0x1c, 0xee, 0xd1, 0xc7, 0xe5, 0xf3, 0xa7,
0x3d, 0x7b, 0x2c, 0x1e, 0x8e, 0xf6, 0x8a, 0x29, 0x23, 0xe5, 0xd7, 0x14, 0xb3, 0x72, 0x62, 0x42,
0x5b, 0x91, 0x50, 0xf5, 0x3a, 0x4d, 0x37, 0xfc, 0x86, 0xce, 0x69, 0x4a, 0xd2, 0xdc, 0xfd, 0xeb,
0xf7, 0x4f, 0x06, 0xf3, 0x02, 0xfd, 0xd1, 0x36, 0xbc, 0x35, 0x1a, 0x53, 0x7c, 0xa1, 0xeb, 0xf1,
0x45, 0xc3, 0x37, 0xe3, 0x75, 0xd1, 0x09, 0x7d, 0x99, 0xaa, 0x6a, 0x55, 0xa2, 0x20, 0xfa, 0x64,
0x59, 0x70, 0x88, 0x22, 0xcf, 0xdb, 0x45, 0x0e, 0xbc, 0x20, 0x40, 0x14, 0x2c, 0x98, 0x16, 0x07,
0xd3, 0x34, 0xa1, 0xa4, 0x4c, 0x74, 0x76, 0x8d, 0x8d, 0x46, 0xff, 0x89, 0x54, 0xb6, 0xb4, 0x34,
0x29, 0xf3, 0x82, 0x7e, 0xf8, 0xb6, 0xe7, 0xa1, 0x1b, 0x53, 0xda, 0x25, 0x95, 0xd3, 0x39, 0xff,
0xa2, 0x02, 0x08, 0x3c, 0x07, 0x8e, 0x56, 0x74, 0xdd, 0x82, 0xaa, 0x99, 0xd0, 0x34, 0x23, 0xdd,
0x66, 0xfa, 0xac, 0xcd, 0x1d, 0x4f, 0xc5, 0x55, 0xb4, 0x5d, 0x1e, 0xf9, 0xec, 0xc2, 0xf1, 0x6d,
0xbb, 0xe7, 0x05, 0x7d, 0xb8, 0xb7, 0xed, 0xf7, 0x2d, 0x5b, 0x96, 0x3c, 0x76, 0xaa, 0x75, 0x10,
0x0f, 0xaf, 0xf1, 0xe6, 0x2a, 0x54, 0xb3, 0xfd, 0xcc, 0x78, 0xba, 0x9f, 0xbb, 0x81, 0x5b, 0x63,
0x8a, 0xd5, 0xde, 0x31, 0x5a, 0xd7, 0x7f, 0xe1, 0x85, 0x9e, 0x39, 0x41, 0x47, 0x9a, 0xfb, 0xca,
0xaf, 0x4d, 0x26, 0x03, 0x64, 0x83, 0x57, 0x72, 0xf3, 0x64, 0x0d, 0xb9, 0x43, 0xe6, 0x6f, 0x2b,
0x48, 0x2b, 0x54, 0xe7, 0xb6, 0x68, 0xe6, 0x06, 0x92, 0x8a, 0x81, 0xde, 0x81, 0x58, 0xb0, 0xe3,
0x97, 0x6d, 0xab, 0x49, 0xad, 0x35, 0x0b, 0x74, 0xe0, 0xe0, 0xd5, 0x1f, 0x57, 0xd4, 0xb9, 0x9f,
0xeb, 0xea, 0x8b, 0xa1, 0xa8, 0xc0, 0x8e, 0xcb, 0xbd, 0x23, 0x58, 0x53, 0x5f, 0x0a, 0x35, 0x7d,
0x6c, 0xd3, 0x16, 0xa4, 0x08, 0x96, 0x4c, 0x1a, 0xe9, 0x96, 0xcd, 0xeb, 0x86, 0x05, 0x9d, 0xad,
0xe9, 0xb4, 0x96, 0xca, 0xcc, 0xb3, 0x4d, 0x9e, 0xbd, 0x18, 0x69, 0x8a, 0x06, 0x9b, 0x0e, 0xcf,
0x02, 0x7d, 0xf5, 0xcd, 0xdf, 0x01, 0x25, 0x69, 0xac, 0xf2, 0x79, 0x65, 0x5c, 0x1b, 0x8a, 0xa3,
0xd0, 0x2d, 0x62, 0x70, 0x38, 0x8e, 0x92, 0x22, 0x29, 0xc7, 0x02, 0x25, 0x95, 0x39, 0xc6, 0xb9,
0xac, 0xc9, 0xf6, 0x19, 0x3c, 0x9e, 0xd0, 0x13, 0x17, 0x03, 0xe3, 0x4b, 0x30, 0xd0, 0x14, 0xcd,
0x01, 0x1d, 0xfe, 0xa9, 0xb7, 0x46, 0x04, 0x7a, 0xfa, 0x7b, 0x26, 0xf9, 0x9a, 0xe5, 0x85, 0xe8,
0xea, 0x8d, 0xe1, 0x66, 0x34, 0x81, 0xc5, 0x3e, 0x17, 0x34, 0x7d, 0x5a, 0xe1, 0x9d, 0x8e, 0x2c,
0xd7, 0x67, 0x26, 0x1c, 0x0e, 0x01, 0x5d, 0xdd, 0xd1, 0xef, 0x22, 0xed, 0x3b, 0x5f, 0x9e, 0x15,
0x0c, 0x5f, 0x36, 0x07, 0x8f, 0x09, 0x16, 0xff, 0x6c, 0x78, 0x28, 0x81, 0x2a, 0xbf, 0x13, 0x43,
0x91, 0x38, 0x06, 0x6e, 0x4c, 0xc1, 0xeb, 0x91, 0x33, 0x0a, 0x74, 0x03, 0x86, 0x61, 0x2d, 0x08,
0xc9, 0xce, 0x79, 0x4b, 0x9d, 0x38, 0x7d, 0xf6, 0xfa, 0x06, 0x0c, 0xbd, 0x7a, 0x2e, 0x07, 0xf4,
0xf9, 0x89, 0x5e, 0x49, 0x0f, 0x27, 0xc7, 0xa7, 0x62, 0xba, 0x83, 0x59, 0x21, 0xb9, 0x04, 0x84,
0x22, 0x93, 0xa0, 0x28, 0x87, 0x61, 0x52, 0x98, 0xd3, 0x8f, 0x45, 0xee, 0xcd, 0x07, 0xc2, 0xc6,
0x82, 0xc0, 0x93, 0x56, 0x33, 0x1c, 0x3c, 0xdd, 0x59, 0x4d, 0xd7, 0x5d, 0xcf, 0xb9, 0xb0, 0x7b,
0x0f, 0xfe, 0xf5, 0xae, 0x2c, 0x89, 0xfb, 0x23, 0x83, 0x09, 0x94, 0xf9, 0x64, 0x8a, 0x22, 0x1d,
0x57, 0xba, 0xc7, 0xe0, 0x76, 0xd9, 0x08, 0x66, 0x11, 0x94, 0xcb, 0x0b, 0x92, 0x8d, 0xd2, 0xfb,
0xfc, 0x85, 0x08, 0x76, 0x8f, 0x7e, 0x30, 0x1e, 0x6c, 0xda, 0xf7, 0xdf, 0x14, 0x64, 0x7f, 0xff,
0xe3, 0xf3, 0x61, 0xc9, 0x2e, 0x96, 0xd3, 0xfe, 0xd3, 0x91, 0x34, 0x3c, 0x12, 0xc7, 0x64, 0x5c,
0xa7, 0x2c, 0x00, 0xd8, 0x44, 0x7e, 0x61, 0x88, 0x3a, 0x7d, 0xb7, 0xd8, 0x51, 0xd7, 0xd5, 0x14,
0xeb, 0xad, 0x6d, 0x43, 0x4b, 0x31, 0xf8, 0xc6, 0x50, 0x16, 0x64, 0x23, 0x71, 0x35, 0xbe, 0xf8,
0xe9, 0xc6, 0x65, 0xb5, 0xeb, 0x8f, 0xda, 0x6d, 0x3c, 0xc7, 0xc2, 0x95, 0x49, 0x77, 0xff, 0x04,
0x68, 0x0c, 0x59, 0xe2, 0xf3, 0x86, 0x64, 0xd7, 0x99, 0x8f, 0x29, 0x75, 0x9d, 0xea, 0x6d, 0x7d,
0xfe, 0xf1, 0x2c, 0x48, 0x26, 0x29, 0x64, 0xb0, 0x57, 0xde, 0x3e, 0x79, 0xbc, 0xc8, 0xed, 0x5a,
0xa9, 0xeb, 0x99, 0xbb, 0x13, 0x9b, 0xd4, 0x30, 0x16, 0x55, 0xe8, 0x12, 0x8b, 0xe9, 0x28, 0x9c,
0xef, 0xb8, 0xe6, 0xba, 0xd4, 0x9b, 0x1e, 0x5d, 0x84, 0xf3, 0x97, 0xae, 0x37, 0x72, 0x33, 0x82,
0xa2, 0x8c, 0xa4, 0xd8, 0x53, 0x5e, 0xe7, 0xdd, 0xba, 0xfd, 0x8b, 0x33, 0xb2, 0x2c, 0x0a, 0x99,
0x8b, 0x68, 0x22, 0x1c, 0x99, 0x42, 0x49, 0xb1, 0x3d, 0x9d, 0x40, 0xf3, 0xb1, 0x24, 0x0b, 0x61,
0x1f, 0xdb, 0xe0, 0xea, 0xda, 0xe2, 0xb1, 0x99, 0x3e, 0x12, 0x48, 0xaa, 0x19, 0xac, 0x61, 0xfb,
0xd7, 0x1f, 0x15, 0x7b, 0x2a, 0x9f, 0xb6, 0x28, 0xd4, 0x18, 0x28, 0x41, 0x81, 0x31, 0x11, 0x53,
0x21, 0xc9, 0x42, 0xda, 0xca, 0x7c, 0x20, 0xcc, 0xa7, 0xa5, 0x25, 0x12, 0xca, 0x4a, 0x1d, 0x58,
0xba, 0xa4, 0x70, 0x56, 0x3d, 0x92, 0x48, 0x1e, 0x64, 0xb0, 0xcd, 0x3b, 0x8e, 0x1d, 0x93, 0x1d,
0x36, 0x39, 0x9d, 0x0d, 0x48, 0xf9, 0xc8, 0xa8, 0x02, 0x2f, 0x65, 0x8f, 0x18, 0x01, 0x67, 0x1e,
0x97, 0x46, 0x4e, 0x97, 0xed, 0x02, 0x0a, 0x9c, 0x22, 0x9c, 0x0e, 0x91, 0xc2, 0x88, 0x23, 0xbf,
0x58, 0x70, 0x4a, 0x06, 0xfc, 0xe5, 0x6a, 0x74, 0xdd, 0xfd, 0xe3, 0x72, 0x91, 0x4b, 0x39, 0x32,
0x57, 0xe1, 0x63, 0xbe, 0x5a, 0x5f, 0xbd, 0xee, 0xad, 0xa7, 0x2a, 0xaa, 0xb6, 0xbc, 0xc3, 0xc2,
0x3a, 0x1b, 0x18, 0xe3, 0xd1, 0x54, 0x3a, 0x6c, 0xd9, 0xce, 0x59, 0x2d, 0x32, 0x0c, 0x03, 0x92,
0x4d, 0x85, 0xd7, 0x9d, 0xc0, 0xaa, 0x9a, 0x24, 0x36, 0xae, 0x05, 0xea, 0x97, 0x4b, 0x94, 0x33,
0x1d, 0x60, 0x75, 0x46, 0x57, 0x86, 0xa1, 0xc6, 0x43, 0xba, 0xd3, 0x5a, 0x5c, 0x76, 0xa7, 0x0a,
0xeb, 0x25, 0x69, 0x58, 0xb9, 0xb9, 0xf9, 0x90, 0xd3, 0x51, 0xe8, 0x61, 0xc7, 0xc1, 0x40, 0x4f,
0xac, 0x07, 0x7c, 0xf2, 0x79, 0xd4, 0x54, 0x6a, 0x58, 0x59, 0xad, 0xc3, 0x53, 0x6c, 0xa3, 0x42,
0xe8, 0x48, 0x0b, 0x27, 0xc8, 0xb7, 0x5b, 0x2a, 0x8f, 0x94, 0x70, 0xa3, 0xd0, 0x12, 0x61, 0x74,
0x74, 0x19, 0xea, 0x33, 0x2f, 0x1d, 0x72, 0xcc, 0x57, 0xca, 0xab, 0x0a, 0x3c, 0x6b, 0x77, 0x95,
0xd7, 0xbf, 0xb7, 0x47, 0xa4, 0x4a, 0x58, 0x5e, 0x2a, 0x60, 0xdb, 0x86, 0x20, 0x49, 0xe0, 0xb6,
0xd2, 0x99, 0x00, 0x66, 0x81, 0x65, 0xa4, 0x60, 0x1a, 0xc9, 0xb4, 0xa4, 0x34, 0x89, 0x72, 0xa6,
0x13, 0x6f, 0x7e, 0xe2, 0xbf, 0xd5, 0xfe, 0x5b, 0x59, 0xc5, 0x42, 0x6f, 0x86, 0xd5, 0xde, 0x55,
0x07, 0x8e, 0xda, 0xe5, 0x8a, 0x65, 0x8f, 0x3c, 0xa0, 0x60, 0xdf, 0xae, 0xa3, 0x90, 0x24, 0x09,
0x1c, 0xcf, 0x20, 0x04, 0x10, 0x0b, 0x30, 0xa1, 0xb8, 0xa0, 0x28, 0x3c, 0x22, 0xb7, 0x04, 0x2a,
0x31, 0x32, 0xce, 0x5d, 0x95, 0x53, 0x2d, 0x17, 0xe5, 0xc0, 0x64, 0xd2, 0xba, 0x42, 0xe9, 0xa4,
0x93, 0x52, 0xd1, 0x05, 0x84, 0x5f, 0x3f, 0xb3, 0xf0, 0xe3, 0x44, 0x2c, 0x6d, 0x70, 0xd7, 0xec,
0x3f, 0xd9, 0xb8, 0x69, 0x84, 0xdf, 0xb1, 0x31, 0x88, 0xbe, 0x48, 0x09, 0xba, 0x42, 0x1e, 0x0c,
0x8e, 0x38, 0xad, 0x40, 0x1f, 0x37, 0x1c, 0xba, 0x81, 0x0e, 0xf0, 0xee, 0xb3, 0xa4, 0x94, 0x4c,
0x15, 0x03, 0x08, 0x85, 0x06, 0x28, 0xbf, 0x99, 0xff, 0xeb, 0x15, 0x24, 0x57, 0xbc, 0xb6, 0xcf,
0x92, 0x6a, 0x77, 0xa6, 0xe2, 0xe1, 0x0e, 0x58, 0xea, 0x9f, 0x90, 0x7c, 0x3f, 0x23, 0x62, 0x5e,
0xcd, 0x26, 0xcc, 0xbb, 0xf6, 0xdc, 0xba, 0x67, 0xef, 0xba, 0xbb, 0xf1, 0xfd, 0x0b, 0x51, 0x82,
0xd2, 0x46, 0x06, 0xab, 0x0f, 0xee, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
};
const BITMAP_OPAQUE book_xpm[1] = {{ png, sizeof( png ), "book_xpm" }};
//EOF
@@ -1,87 +0,0 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0x58, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x6b, 0x48, 0xa4,
0x55, 0x18, 0xc7, 0x4f, 0x52, 0xb1, 0x49, 0xd4, 0xba, 0x50, 0x51, 0x81, 0x0b, 0xed, 0x87, 0xed,
0x02, 0xa2, 0x89, 0x8a, 0xe6, 0xad, 0x56, 0x51, 0x51, 0xd1, 0xe6, 0x83, 0x09, 0x86, 0xa0, 0x48,
0xa9, 0x69, 0x48, 0x5e, 0xc2, 0xdb, 0xec, 0x5c, 0xb6, 0x12, 0x9c, 0x34, 0x42, 0x74, 0x57, 0x45,
0x68, 0x26, 0xbf, 0x2c, 0x53, 0xe8, 0x8a, 0x69, 0xea, 0x07, 0xef, 0x97, 0x41, 0x4a, 0x44, 0x2b,
0x16, 0x46, 0x28, 0x5d, 0xc6, 0x51, 0xca, 0x0f, 0x66, 0x9a, 0x33, 0xce, 0xd3, 0xff, 0x39, 0x3b,
0xef, 0xf0, 0x2a, 0xe6, 0x8e, 0xd1, 0x1e, 0xf8, 0x31, 0x73, 0xce, 0x9c, 0xf7, 0xf9, 0x9f, 0xf3,
0x3c, 0xff, 0x73, 0xde, 0x11, 0xe2, 0xd4, 0xb6, 0xf8, 0xb4, 0x10, 0xf3, 0xcb, 0x42, 0x2c, 0x7c,
0x7e, 0x6c, 0xd8, 0x28, 0xde, 0x12, 0x06, 0xf1, 0xde, 0xb9, 0xb9, 0x21, 0xde, 0x3e, 0x5d, 0x47,
0xcc, 0x87, 0x03, 0x02, 0xbf, 0xf8, 0x86, 0x0c, 0xe2, 0x5d, 0x08, 0xdd, 0xc3, 0x43, 0xb7, 0xce,
0x8d, 0x41, 0x34, 0xfb, 0x27, 0x74, 0x43, 0xbc, 0x23, 0x45, 0x0c, 0xe2, 0x35, 0xf1, 0xff, 0x36,
0x95, 0xd0, 0xc3, 0x13, 0x51, 0x09, 0x5d, 0x18, 0xbb, 0xf7, 0x10, 0x45, 0x54, 0x42, 0x97, 0xac,
0x2e, 0x08, 0xbd, 0xe2, 0x1b, 0xd6, 0x89, 0x40, 0xf0, 0xd2, 0x7f, 0xe0, 0x85, 0xb3, 0x85, 0x02,
0xa6, 0xec, 0xbe, 0xa1, 0xcf, 0x44, 0x10, 0x44, 0x17, 0xc1, 0xaf, 0x48, 0xa7, 0xfd, 0x5c, 0x18,
0xc5, 0x5d, 0x25, 0x4c, 0x1d, 0x78, 0x11, 0x58, 0xc0, 0x6d, 0x21, 0xcc, 0xb1, 0xc7, 0xcc, 0xa0,
0x13, 0x17, 0x31, 0xd9, 0x86, 0x14, 0xfa, 0xec, 0x4e, 0x44, 0x17, 0xc0, 0x07, 0x40, 0x07, 0xc2,
0xfc, 0xc9, 0x13, 0x56, 0x2f, 0x66, 0x41, 0x21, 0xb8, 0x03, 0x3a, 0x84, 0x08, 0xd3, 0xfb, 0x84,
0x4e, 0x11, 0xf1, 0x0a, 0xfd, 0xb4, 0xb2, 0xb2, 0x42, 0x63, 0x63, 0x63, 0x74, 0x78, 0x78, 0xe8,
0x41, 0xff, 0xe5, 0x07, 0x09, 0x25, 0x82, 0x56, 0x60, 0x05, 0x1a, 0x50, 0x21, 0xc4, 0xab, 0xcd,
0x52, 0xe8, 0x91, 0xd9, 0xbb, 0x8a, 0x08, 0x02, 0xbd, 0x0f, 0x4c, 0xe0, 0x71, 0xaf, 0xd0, 0x51,
0x6c, 0x6c, 0x2c, 0x65, 0x67, 0x67, 0xd3, 0xd0, 0xd0, 0x10, 0xba, 0xd4, 0xec, 0x1d, 0xd7, 0x80,
0x9b, 0xe0, 0xe2, 0x49, 0xa1, 0x40, 0x2e, 0x0a, 0xb0, 0x01, 0x2e, 0xbc, 0x43, 0x88, 0xaa, 0x4c,
0x29, 0x14, 0xf4, 0xed, 0x3e, 0x1f, 0x36, 0x3c, 0x74, 0x6b, 0x6b, 0x6b, 0x8b, 0xe6, 0xe6, 0xe6,
0x38, 0xe0, 0x9f, 0xe0, 0x9b, 0xed, 0xed, 0x6d, 0xd2, 0x68, 0x34, 0x64, 0x36, 0x9b, 0x49, 0xab,
0xd5, 0xf2, 0xf8, 0x26, 0x98, 0xdf, 0xd9, 0xd9, 0xa1, 0xc9, 0xc9, 0x49, 0xee, 0xff, 0x0e, 0x2e,
0xa9, 0x85, 0x1e, 0x05, 0x01, 0xde, 0xef, 0x8f, 0x81, 0x27, 0x7c, 0x66, 0x08, 0xfc, 0xde, 0x89,
0xc9, 0x97, 0xf7, 0xf7, 0xf7, 0x29, 0x2e, 0x2e, 0x8e, 0x72, 0x73, 0x73, 0xa9, 0xb8, 0xb8, 0x98,
0x26, 0x26, 0x26, 0x28, 0x2b, 0x2b, 0x8b, 0x0c, 0x06, 0x03, 0x4d, 0x4d, 0x4d, 0x51, 0x68, 0x68,
0x28, 0x75, 0x74, 0x74, 0x90, 0xd5, 0x6a, 0xa5, 0xf8, 0xf8, 0x78, 0x4a, 0x4d, 0x4d, 0xa5, 0xc1,
0xc1, 0x41, 0x16, 0x1b, 0x50, 0x0b, 0x45, 0x83, 0x3f, 0x78, 0xd7, 0xc0, 0x03, 0x56, 0x84, 0xd0,
0xa7, 0x28, 0x35, 0xc2, 0xe4, 0x27, 0x3d, 0x1e, 0x8f, 0x3b, 0x3d, 0x3d, 0x5d, 0x3e, 0xdc, 0xd5,
0xd5, 0x45, 0x45, 0x45, 0x45, 0xd4, 0xd7, 0xd7, 0x27, 0x45, 0x98, 0xf1, 0xf1, 0x71, 0xd2, 0xeb,
0xf5, 0x54, 0x51, 0x51, 0x21, 0x77, 0xcd, 0x8b, 0x58, 0x5e, 0x5e, 0x66, 0x21, 0xd3, 0x59, 0x35,
0xd3, 0x0a, 0x11, 0xf2, 0x89, 0xda, 0x75, 0x78, 0xe0, 0xd3, 0xb5, 0xb5, 0x35, 0xb9, 0xd2, 0xd9,
0xd9, 0x59, 0x19, 0x7c, 0x66, 0x66, 0x46, 0x7e, 0x57, 0x98, 0x9e, 0x9e, 0x96, 0x63, 0x2d, 0x2d,
0x2d, 0xd4, 0xd0, 0xd0, 0xc0, 0x22, 0xdb, 0x27, 0x03, 0x73, 0xea, 0x82, 0xbc, 0x3c, 0x0f, 0x6e,
0xc2, 0x88, 0x5a, 0xd5, 0x8e, 0xae, 0x01, 0x8b, 0xd3, 0xe9, 0x94, 0x42, 0x2c, 0xc2, 0x81, 0xb9,
0x36, 0x19, 0x19, 0x19, 0x72, 0xac, 0xba, 0xba, 0x5a, 0x8a, 0xb0, 0x98, 0xc9, 0x64, 0xa2, 0xa6,
0xa6, 0x26, 0x16, 0x72, 0x80, 0x62, 0xb5, 0x29, 0xa2, 0xc0, 0x96, 0x37, 0x7d, 0xbf, 0x81, 0xef,
0x84, 0xe8, 0x8e, 0x67, 0xa1, 0x2b, 0x57, 0x7e, 0x3c, 0x74, 0x38, 0x1c, 0xd4, 0xdf, 0xdf, 0x4f,
0x39, 0x39, 0x39, 0x32, 0x08, 0x07, 0xe4, 0xb4, 0xa5, 0xa4, 0xa4, 0x10, 0x17, 0x1e, 0xcd, 0xd3,
0xd6, 0xd6, 0x46, 0x65, 0x65, 0x65, 0x72, 0x01, 0x6c, 0x84, 0xa8, 0xa8, 0x28, 0xea, 0xec, 0xec,
0xa4, 0xa5, 0xa5, 0x25, 0x3a, 0x3a, 0x3a, 0x62, 0xeb, 0xbf, 0x79, 0x72, 0x77, 0xcf, 0x80, 0x60,
0xc5, 0x0c, 0x57, 0xaf, 0x2e, 0x51, 0x48, 0x48, 0x08, 0xe9, 0x74, 0x3a, 0xea, 0xed, 0xed, 0x95,
0x22, 0x4c, 0x55, 0x55, 0x95, 0xac, 0x0b, 0xda, 0x17, 0xe0, 0x59, 0xe0, 0x4e, 0x4b, 0x4b, 0x93,
0xf5, 0xe1, 0x1d, 0xb3, 0xdd, 0x39, 0x85, 0x5c, 0x2b, 0x8b, 0xc5, 0xc2, 0xf3, 0xbe, 0xe2, 0xe0,
0x4f, 0x01, 0xbe, 0x22, 0x86, 0x01, 0xd7, 0xc4, 0x29, 0x44, 0xa9, 0x46, 0x11, 0x8a, 0x88, 0x88,
0xa0, 0xfc, 0xfc, 0x7c, 0x32, 0x1a, 0x8d, 0x32, 0x38, 0x0b, 0xd5, 0xd5, 0xd5, 0xd1, 0xc0, 0xc0,
0x00, 0x07, 0x18, 0x01, 0x59, 0xbc, 0xea, 0xe4, 0xe4, 0x64, 0x9f, 0x50, 0x4f, 0x4f, 0x0f, 0x95,
0x97, 0x97, 0x53, 0x4c, 0x4c, 0x8c, 0xcc, 0x06, 0x5a, 0x17, 0x0b, 0xc5, 0x81, 0x2f, 0xef, 0x9b,
0x00, 0x6f, 0x43, 0x1c, 0x22, 0x64, 0xb3, 0x96, 0x85, 0x82, 0x83, 0x7f, 0xd8, 0xe3, 0x59, 0x76,
0xbb, 0x9d, 0x6a, 0x6b, 0x6b, 0xa5, 0xb3, 0xb8, 0x0e, 0xa3, 0xa3, 0xa3, 0xd2, 0xee, 0x9c, 0xaa,
0xf5, 0xf5, 0x75, 0x69, 0x79, 0x5e, 0x08, 0xf7, 0x79, 0x31, 0xca, 0x6f, 0x7c, 0x2c, 0xd0, 0x76,
0x95, 0x5b, 0xe3, 0x9a, 0x57, 0x48, 0x07, 0x3e, 0x04, 0xd7, 0x85, 0x88, 0x68, 0x54, 0x99, 0x81,
0xef, 0xb4, 0xd2, 0xdd, 0xdd, 0x5d, 0x79, 0x46, 0x14, 0xc7, 0x0d, 0x0f, 0x0f, 0x53, 0x49, 0x49,
0x09, 0xe5, 0xe5, 0xe5, 0x51, 0x7b, 0x7b, 0xbb, 0xcf, 0x79, 0x8d, 0x8d, 0x8d, 0xb2, 0x3e, 0x7c,
0x45, 0xf1, 0x19, 0x54, 0xd7, 0xe5, 0x0d, 0x60, 0x3f, 0x4e, 0xc2, 0x47, 0x27, 0xec, 0x7d, 0x7b,
0x61, 0x61, 0x41, 0x1a, 0x42, 0x49, 0x8f, 0xda, 0xde, 0x8a, 0xe3, 0xf8, 0x93, 0xd3, 0x56, 0x50,
0x50, 0xc0, 0x42, 0x7f, 0x81, 0x40, 0xbf, 0xdf, 0xb0, 0x5c, 0x6c, 0x97, 0xcb, 0xe5, 0x49, 0x4c,
0x4c, 0x94, 0x37, 0x42, 0x7d, 0x7d, 0x3d, 0x25, 0x25, 0x25, 0x51, 0x6b, 0x6b, 0xab, 0x74, 0x18,
0x0b, 0xf0, 0x8d, 0xc0, 0xc1, 0xf9, 0xde, 0x1b, 0x19, 0x19, 0xa1, 0xc2, 0xc2, 0x42, 0x79, 0xd9,
0xa2, 0x7d, 0x7d, 0x6e, 0x21, 0x76, 0x50, 0x42, 0x42, 0x02, 0xb1, 0x95, 0xf9, 0xde, 0xab, 0xa9,
0xa9, 0xa1, 0xca, 0xca, 0x4a, 0x59, 0x93, 0xf0, 0xf0, 0x70, 0xb9, 0xb3, 0xd5, 0xd5, 0x55, 0x62,
0x53, 0x44, 0x47, 0x47, 0x93, 0xcd, 0x66, 0x63, 0x21, 0xb3, 0xff, 0xff, 0x19, 0xee, 0xa7, 0xae,
0xf4, 0xe0, 0xe0, 0xc0, 0xb3, 0xb9, 0xb9, 0x29, 0xbd, 0x01, 0x2a, 0xb9, 0x66, 0x99, 0x99, 0x99,
0xd4, 0xdd, 0xdd, 0xad, 0x1c, 0xd0, 0x55, 0xbe, 0xb5, 0xdd, 0x6e, 0xb7, 0x67, 0x63, 0x63, 0x43,
0xe9, 0x07, 0x3c, 0x40, 0x68, 0xee, 0x75, 0xaf, 0xd0, 0xcf, 0xaa, 0xf7, 0x4f, 0x18, 0xc8, 0x56,
0xf5, 0x5d, 0xec, 0xae, 0xc8, 0xc8, 0x48, 0x59, 0x33, 0xb4, 0xeb, 0xde, 0xf1, 0xcb, 0xa0, 0xc0,
0xcf, 0xff, 0x0c, 0x8b, 0x28, 0xe2, 0xfc, 0x20, 0x04, 0x3f, 0xfe, 0xb7, 0x19, 0x08, 0x36, 0xba,
0xb7, 0xb7, 0x47, 0x7c, 0x73, 0xa0, 0xfd, 0x0d, 0x9e, 0x3b, 0x2b, 0xe2, 0x3f, 0x64, 0x1d, 0xf5,
0x90, 0x43, 0x37, 0x56, 0xad, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
0x82,
};
const BITMAP_OPAQUE bus_definition_tool_xpm[1] = {{ png, sizeof( png ), "bus_definition_tool_xpm" }};
//EOF
-45
View File
@@ -1,45 +0,0 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x04, 0x00, 0x00, 0x00, 0x03, 0x43, 0x84,
0x45, 0x00, 0x00, 0x01, 0xc7, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x95, 0x94, 0xbb, 0x4f, 0xc2,
0x50, 0x14, 0xc6, 0xbf, 0x2a, 0x21, 0x91, 0xd5, 0x8d, 0x38, 0x34, 0xba, 0xa1, 0xb8, 0xd0, 0xc1,
0x41, 0x01, 0x11, 0x16, 0xf1, 0x1f, 0x70, 0x70, 0xd1, 0x89, 0x38, 0xaa, 0x69, 0xe2, 0xa4, 0x4e,
0x1a, 0x07, 0x56, 0xcb, 0x66, 0x34, 0xf2, 0x1a, 0x1c, 0xd4, 0xc1, 0x18, 0x12, 0x17, 0x9c, 0x40,
0x37, 0x95, 0x89, 0xc6, 0xc4, 0x26, 0xb2, 0xc0, 0x40, 0x4c, 0x0c, 0x31, 0xf5, 0xf6, 0x45, 0xef,
0x6d, 0x0b, 0xea, 0x39, 0xcb, 0xbd, 0x3d, 0xfd, 0xf5, 0x9e, 0x47, 0xbf, 0x0b, 0xfc, 0xd3, 0x4e,
0x42, 0xf4, 0x6e, 0x04, 0xdc, 0xd0, 0xb7, 0xf5, 0xb8, 0x94, 0x95, 0x54, 0x29, 0xac, 0xef, 0x83,
0x81, 0x48, 0x29, 0x29, 0x27, 0xe5, 0x48, 0x31, 0x18, 0x20, 0x5b, 0x1e, 0xeb, 0xc8, 0xe1, 0x8a,
0x78, 0x8e, 0xac, 0x78, 0x3b, 0x2e, 0x36, 0x08, 0x92, 0x35, 0x3f, 0x12, 0x29, 0x96, 0x7b, 0x8a,
0xaa, 0xa8, 0xe5, 0xde, 0x74, 0x0d, 0x55, 0xb4, 0x70, 0x86, 0x0c, 0x56, 0x88, 0x67, 0xc8, 0xaa,
0x85, 0x6a, 0xa8, 0xae, 0xc5, 0x2b, 0xaa, 0xa4, 0x8a, 0xaf, 0xd6, 0xc1, 0xdc, 0x92, 0xac, 0x21,
0x9a, 0x2f, 0x74, 0x91, 0x86, 0x8f, 0x49, 0xcb, 0x87, 0x74, 0xb4, 0x6b, 0x20, 0x77, 0x6a, 0xa2,
0x69, 0x15, 0xc1, 0x25, 0xfa, 0xd0, 0xe2, 0x9b, 0x47, 0x65, 0x24, 0xae, 0x21, 0x47, 0x24, 0x6e,
0x43, 0x10, 0x0a, 0x25, 0x3d, 0xbd, 0xc2, 0xf7, 0xd4, 0x17, 0x44, 0x8c, 0x3a, 0xa9, 0x9d, 0x67,
0x0d, 0xd9, 0x52, 0x4b, 0x3d, 0xe1, 0xa2, 0xff, 0x30, 0x18, 0x08, 0xd5, 0x63, 0xdd, 0x54, 0x53,
0xc8, 0xfb, 0x67, 0x70, 0x8b, 0x27, 0xcc, 0xd1, 0x48, 0xee, 0x90, 0xd4, 0xd2, 0xe0, 0xdb, 0x7c,
0x5b, 0xc8, 0x4f, 0x8c, 0xd1, 0x91, 0x07, 0x2c, 0x9b, 0x07, 0x73, 0x58, 0x83, 0x82, 0x63, 0xf8,
0x6d, 0x44, 0xef, 0xd8, 0x1e, 0x71, 0xc6, 0x78, 0x7c, 0x30, 0xe5, 0x8f, 0xe3, 0x12, 0x35, 0x4c,
0x52, 0x88, 0x07, 0xb4, 0x81, 0x73, 0x57, 0xf9, 0x9b, 0x78, 0x3f, 0x38, 0xa5, 0xe6, 0xe2, 0x82,
0x24, 0x32, 0x11, 0x97, 0xed, 0x96, 0x29, 0xc4, 0x03, 0xba, 0x21, 0xd3, 0x71, 0x18, 0x95, 0xd8,
0x00, 0xe8, 0x9a, 0x4c, 0xdf, 0x85, 0xac, 0x7e, 0x22, 0x3e, 0x0c, 0x72, 0xa4, 0x67, 0x9e, 0x32,
0x4f, 0xda, 0x93, 0x18, 0x0c, 0x31, 0x8d, 0xa0, 0x12, 0xa3, 0xb1, 0x61, 0x2d, 0x77, 0xd4, 0x62,
0x63, 0x2e, 0xa8, 0x3f, 0x5c, 0x57, 0xf9, 0x36, 0xb6, 0xef, 0x80, 0xc8, 0x6f, 0xf4, 0x18, 0xeb,
0x26, 0xe5, 0xed, 0x17, 0x17, 0xa2, 0x63, 0x5c, 0x2b, 0x7c, 0x1f, 0xef, 0xc4, 0x3b, 0xa6, 0xde,
0x68, 0x3d, 0xb1, 0x7a, 0xa1, 0x6d, 0xb6, 0x52, 0x50, 0x0d, 0xbd, 0x09, 0x79, 0x46, 0x4f, 0x86,
0x5e, 0xa2, 0x6d, 0x3d, 0x77, 0x87, 0xc7, 0xda, 0x96, 0x74, 0x18, 0x3d, 0x19, 0x88, 0x32, 0x00,
0x8a, 0x7a, 0x40, 0xba, 0x5e, 0x34, 0x84, 0xd1, 0x0b, 0x65, 0x96, 0xde, 0xa8, 0xb8, 0x76, 0xc3,
0x88, 0x8d, 0x54, 0x53, 0xd3, 0x13, 0xab, 0x17, 0xbb, 0x51, 0x42, 0x81, 0x89, 0x4b, 0x61, 0xb3,
0x63, 0xdc, 0x2f, 0x57, 0x18, 0x1b, 0x67, 0xaf, 0xbf, 0xbf, 0xd8, 0x0f, 0x3c, 0x1e, 0x28, 0x8f,
0xaa, 0xd6, 0xe8, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE curved_ratsnest_xpm[1] = {{ png, sizeof( png ), "curved_ratsnest_xpm" }};
//EOF
+40
View File
@@ -0,0 +1,40 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x01, 0x75, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xc5, 0x96, 0xbf, 0x4b, 0xc3,
0x40, 0x14, 0x80, 0x2f, 0xbd, 0xa4, 0x22, 0x38, 0x14, 0x1d, 0x3a, 0x28, 0x8a, 0x20, 0x3a, 0x3b,
0xf9, 0x0b, 0xc5, 0x7f, 0xc0, 0xa9, 0x28, 0xb8, 0x08, 0x0e, 0xfe, 0xc0, 0x45, 0x14, 0x6c, 0xdd,
0x04, 0x27, 0x1d, 0x1c, 0x1c, 0x9c, 0x1d, 0x5d, 0x04, 0x87, 0x0a, 0x8e, 0x2e, 0x96, 0x82, 0x93,
0x93, 0x8b, 0x60, 0x0b, 0x82, 0x9b, 0x83, 0x83, 0x5a, 0x29, 0xf6, 0xfc, 0x72, 0x3e, 0xdb, 0x0c,
0x1d, 0xef, 0x34, 0xf0, 0x91, 0xdc, 0x05, 0xde, 0x97, 0x97, 0x77, 0xf7, 0x12, 0xa5, 0xfe, 0xeb,
0x30, 0x4a, 0xf5, 0x43, 0x01, 0xf2, 0xb0, 0x2a, 0x2c, 0xc3, 0xbc, 0xd0, 0xeb, 0x4a, 0xd4, 0x05,
0x1f, 0x60, 0x4c, 0x10, 0x18, 0x7b, 0x6e, 0x71, 0x0d, 0x69, 0x97, 0x59, 0x5d, 0x5a, 0x89, 0xd6,
0xc6, 0xa4, 0x52, 0xbf, 0x92, 0x7b, 0xc8, 0xb8, 0x7e, 0x7d, 0x2b, 0x36, 0x78, 0x2c, 0x89, 0x65,
0x5a, 0x37, 0xb8, 0xde, 0xf0, 0x51, 0xa7, 0x2c, 0x7c, 0x89, 0xac, 0xde, 0x94, 0x85, 0xe1, 0x01,
0x73, 0xda, 0xb5, 0xac, 0x04, 0x0d, 0x58, 0x44, 0xb2, 0x04, 0xef, 0x22, 0x8c, 0xeb, 0x94, 0x75,
0x29, 0x8a, 0x57, 0x5d, 0xbe, 0x39, 0x8e, 0xa2, 0x51, 0x24, 0x8f, 0x22, 0x7b, 0x62, 0x3c, 0xee,
0x6c, 0xf5, 0xb5, 0x99, 0xeb, 0x41, 0x72, 0x25, 0xb2, 0x1a, 0xaf, 0x75, 0xd3, 0xe7, 0x3e, 0x4b,
0x51, 0xab, 0x7d, 0x5b, 0xb3, 0x1f, 0xe1, 0x29, 0x73, 0x9d, 0xee, 0x45, 0x61, 0x38, 0x4b, 0xf0,
0x62, 0x42, 0xf4, 0x49, 0x66, 0x5b, 0xee, 0xb2, 0xd0, 0x7a, 0x0e, 0xca, 0x12, 0x3c, 0xe6, 0x15,
0xe9, 0x31, 0xf7, 0xfa, 0xdc, 0x74, 0x09, 0xea, 0x40, 0xd0, 0x6a, 0x42, 0x50, 0x61, 0xae, 0xe0,
0x6c, 0xf3, 0x12, 0xec, 0xc4, 0x3e, 0x75, 0x4b, 0x70, 0x0b, 0x0b, 0x4e, 0xf7, 0x11, 0xc1, 0x86,
0xa1, 0x2e, 0xfd, 0xee, 0x01, 0x41, 0xce, 0xd7, 0xca, 0x1a, 0x80, 0xf3, 0x44, 0x33, 0x3d, 0xf3,
0xfd, 0xc9, 0x98, 0x82, 0x32, 0x4c, 0xc8, 0x78, 0x1d, 0x26, 0x7d, 0x4b, 0x07, 0xa1, 0x26, 0x19,
0x16, 0x61, 0xc8, 0x97, 0x28, 0x0d, 0xdb, 0xf0, 0x22, 0xb2, 0x92, 0xef, 0xcc, 0xba, 0xe1, 0x08,
0x66, 0x64, 0xbc, 0x0b, 0x3b, 0xd0, 0xe1, 0x5b, 0xfa, 0x26, 0x19, 0x56, 0x6c, 0xa7, 0x57, 0x2a,
0xf0, 0x25, 0x1b, 0x83, 0x1b, 0x91, 0xdd, 0xd9, 0x2e, 0xe2, 0x4b, 0x26, 0xc2, 0x1c, 0x4c, 0xcb,
0xf5, 0x1e, 0x5c, 0xc0, 0x88, 0x4f, 0x61, 0x04, 0x55, 0xc9, 0xf0, 0xd9, 0xe9, 0xcf, 0x4c, 0x1b,
0x59, 0x06, 0x0e, 0x61, 0xed, 0xcf, 0xff, 0x17, 0xbf, 0x01, 0x98, 0x8d, 0xef, 0xd2, 0xf8, 0x39,
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE dashline_xpm[1] = {{ png, sizeof( png ), "dashline_xpm" }};
//EOF
+65
View File
@@ -0,0 +1,65 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x07, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x95, 0x4b, 0x4c, 0x13,
0x61, 0x10, 0xc7, 0xa1, 0x85, 0x10, 0x81, 0xbe, 0x78, 0x97, 0x57, 0xd3, 0x96, 0x47, 0x36, 0x2d,
0xa1, 0x5c, 0x84, 0xa0, 0x10, 0xb8, 0x20, 0x44, 0x0e, 0x1a, 0x09, 0x48, 0x44, 0xe4, 0x00, 0x9a,
0x18, 0x13, 0x0f, 0xc6, 0x8b, 0x47, 0x6f, 0x1c, 0x0c, 0x89, 0xc6, 0x9b, 0x77, 0x93, 0x56, 0x8f,
0x6a, 0xb8, 0x1a, 0x8b, 0xe2, 0x41, 0xe3, 0x05, 0x0d, 0x6d, 0xda, 0xc4, 0xd4, 0x22, 0x84, 0x94,
0xdd, 0x2e, 0xef, 0x06, 0xc6, 0xff, 0xd4, 0x5d, 0x5c, 0x2a, 0x52, 0xdb, 0x70, 0xf0, 0xe0, 0x97,
0xfc, 0xd2, 0xed, 0x63, 0xe7, 0xb7, 0x33, 0xdf, 0x7c, 0xd3, 0x9c, 0x9c, 0x2c, 0x16, 0x11, 0x59,
0x24, 0x49, 0x7a, 0x1d, 0x08, 0x04, 0x56, 0x70, 0xdd, 0x95, 0xf2, 0x9d, 0x63, 0x69, 0x69, 0xe9,
0x73, 0x24, 0x12, 0x09, 0xe2, 0xba, 0x29, 0x27, 0xdb, 0xc5, 0x92, 0x58, 0x2c, 0xf6, 0xb1, 0xa3,
0xad, 0x8d, 0x8c, 0x85, 0x85, 0xe4, 0xf7, 0xfb, 0x37, 0x55, 0x19, 0x4b, 0x42, 0xa1, 0xd0, 0x37,
0x47, 0x4d, 0x0d, 0xd5, 0x57, 0x56, 0xd2, 0xe2, 0xe2, 0xe2, 0xf7, 0xac, 0x64, 0x5a, 0x49, 0x5f,
0x49, 0x09, 0x4d, 0x57, 0x54, 0x90, 0xe9, 0x97, 0xec, 0xaa, 0x2a, 0x99, 0x2a, 0x2b, 0xa3, 0x5b,
0xe5, 0xe5, 0xd9, 0xcb, 0x76, 0x76, 0x76, 0x7c, 0xaa, 0x24, 0xd6, 0xd4, 0x44, 0x1b, 0x8d, 0x8d,
0x34, 0x83, 0xa0, 0x2c, 0xf3, 0x7a, 0xbd, 0xc4, 0x92, 0x49, 0x8b, 0x85, 0x64, 0xbb, 0x9d, 0xd6,
0x1b, 0x1a, 0x0e, 0x64, 0x5c, 0xc6, 0x8c, 0x44, 0xbb, 0xbb, 0xbb, 0x4f, 0xbb, 0xdb, 0xdb, 0xa9,
0x17, 0xc1, 0x56, 0x11, 0x68, 0x1d, 0x01, 0xe5, 0xba, 0x3a, 0x7a, 0x60, 0x36, 0x53, 0x6e, 0x6e,
0x2e, 0x4d, 0x9a, 0x4c, 0x24, 0x41, 0x26, 0xd7, 0xd7, 0x93, 0xec, 0x70, 0x24, 0x33, 0x63, 0x79,
0x34, 0x1a, 0xfd, 0x92, 0x69, 0xe9, 0x8c, 0xa2, 0x28, 0xbe, 0xef, 0x82, 0xac, 0x07, 0xb2, 0x95,
0xda, 0x5a, 0x8a, 0x5b, 0xad, 0x24, 0xa1, 0x84, 0x73, 0x90, 0x89, 0x08, 0x1c, 0x47, 0x06, 0x92,
0x92, 0x19, 0x4b, 0xb8, 0x9c, 0xbc, 0x77, 0x87, 0x02, 0xb9, 0xdd, 0x74, 0xbe, 0xa5, 0x85, 0x26,
0xfe, 0x84, 0xcb, 0x45, 0x97, 0x58, 0x16, 0x8f, 0xc7, 0xe7, 0x7b, 0x3b, 0x3b, 0xe9, 0x8c, 0xd1,
0x48, 0x51, 0x94, 0x47, 0x44, 0x29, 0x45, 0x64, 0x23, 0x22, 0xb8, 0x88, 0xf7, 0xd7, 0x71, 0x6d,
0xab, 0xaa, 0xe2, 0xfd, 0xf9, 0x4d, 0xa2, 0x63, 0xdc, 0xee, 0xfd, 0x79, 0xc8, 0xe8, 0x18, 0x42,
0x4a, 0x66, 0x9e, 0x85, 0x85, 0x85, 0x7d, 0xbd, 0x4e, 0x47, 0x4f, 0x20, 0x13, 0x91, 0xcd, 0x5a,
0x71, 0x71, 0xf2, 0x75, 0x0e, 0x32, 0x2e, 0xa3, 0xcf, 0xe7, 0xc3, 0xcf, 0x68, 0x4c, 0x2b, 0xd1,
0x03, 0x13, 0xb0, 0xba, 0x5c, 0xdb, 0x1f, 0xd2, 0x89, 0xf8, 0x09, 0xc3, 0xe1, 0x70, 0xc4, 0x89,
0xb2, 0x4d, 0xe0, 0xc9, 0xd7, 0x50, 0x36, 0x89, 0x33, 0x82, 0x40, 0xe2, 0xd2, 0x21, 0x93, 0x47,
0x78, 0x6f, 0x4e, 0x69, 0x7d, 0x5e, 0x85, 0xa0, 0x0d, 0x5c, 0x10, 0x84, 0xe5, 0xc0, 0x71, 0xa2,
0xc1, 0x41, 0xfa, 0x7a, 0xd0, 0xc2, 0x08, 0x16, 0x57, 0xf6, 0x48, 0xc4, 0xbe, 0x70, 0x66, 0xcb,
0x78, 0x95, 0xb9, 0x19, 0x6c, 0x36, 0x9a, 0x39, 0xdc, 0xfa, 0x49, 0x59, 0x11, 0x38, 0x0d, 0x46,
0xf5, 0xfa, 0x92, 0xa9, 0xfc, 0x7c, 0xeb, 0x0d, 0x15, 0x93, 0x69, 0xe8, 0x9e, 0x56, 0xe4, 0xf7,
0x6f, 0x6f, 0x3a, 0x10, 0x7c, 0xbc, 0xb4, 0x94, 0x64, 0xa7, 0x33, 0x19, 0x30, 0x8e, 0xae, 0x9b,
0x44, 0xc9, 0xb8, 0x8c, 0x3d, 0xc8, 0x70, 0x05, 0x9f, 0xad, 0xe3, 0xbb, 0x8d, 0xe6, 0x66, 0x9a,
0x86, 0x98, 0x0f, 0x75, 0x30, 0x18, 0x5c, 0xd6, 0x66, 0x74, 0x11, 0x5c, 0x56, 0x18, 0x05, 0xd7,
0x0c, 0x86, 0xbe, 0xbb, 0x5a, 0x91, 0xd7, 0xbb, 0x2f, 0x5d, 0x19, 0x1e, 0x26, 0x01, 0x4f, 0x1f,
0x66, 0x11, 0x48, 0x76, 0x57, 0x75, 0x35, 0xf1, 0x9e, 0xa9, 0xdd, 0xb8, 0x8a, 0x33, 0xc6, 0xe7,
0xac, 0x0f, 0xd7, 0x1d, 0x1e, 0x0f, 0xf1, 0xb8, 0x52, 0xf7, 0xc8, 0x02, 0xea, 0x80, 0x4d, 0x41,
0xe0, 0x52, 0x1a, 0x0c, 0xe7, 0xee, 0x68, 0x45, 0xad, 0xad, 0x14, 0x4e, 0x24, 0x12, 0xcf, 0x54,
0xd9, 0x38, 0xca, 0xa7, 0x69, 0x61, 0x8f, 0xda, 0xfa, 0xbd, 0xf8, 0x5c, 0x95, 0xf0, 0x24, 0xe1,
0x89, 0xa2, 0xed, 0x3a, 0xbd, 0x86, 0x52, 0x30, 0x90, 0x2a, 0x52, 0x9a, 0x21, 0x8f, 0x65, 0x63,
0x23, 0x23, 0xc4, 0x65, 0xd4, 0x9e, 0x13, 0xf5, 0x9c, 0xf1, 0xa1, 0xe6, 0x09, 0x92, 0x2a, 0x39,
0x6a, 0x99, 0x41, 0xff, 0x51, 0x22, 0x25, 0x60, 0xde, 0xde, 0xde, 0xde, 0xc3, 0xad, 0xad, 0xad,
0x59, 0x5c, 0xdb, 0x53, 0x0f, 0x35, 0x4f, 0x10, 0x1e, 0x57, 0xe9, 0x24, 0x69, 0x45, 0x27, 0xb9,
0xfe, 0x8b, 0x4e, 0x5c, 0x94, 0x00, 0xc1, 0x0c, 0xb9, 0x9d, 0x8d, 0x28, 0x63, 0x30, 0xf1, 0xef,
0xff, 0x3b, 0xa2, 0x82, 0x02, 0xe1, 0xa6, 0xdd, 0xfe, 0x66, 0xf6, 0x27, 0x73, 0xaf, 0x1c, 0x8e,
0xb7, 0x2f, 0xff, 0x8e, 0x77, 0x2f, 0x9c, 0xce, 0x4f, 0xcf, 0x05, 0x41, 0x7e, 0x0c, 0x51, 0x7f,
0x5a, 0x11, 0x18, 0x07, 0x13, 0x59, 0xc0, 0xf7, 0x0d, 0x28, 0x71, 0x8e, 0x5d, 0x06, 0x70, 0x96,
0xe7, 0x9d, 0x32, 0x6c, 0x33, 0x85, 0xef, 0xeb, 0x06, 0xc6, 0x74, 0x22, 0x9e, 0x7d, 0xa7, 0x94,
0xbf, 0x90, 0xe2, 0x2c, 0x28, 0x52, 0xee, 0xd7, 0xa9, 0x01, 0x7f, 0x00, 0x7c, 0x97, 0x16, 0x4f,
0xe9, 0xb8, 0xa5, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_bus_xpm[1] = {{ png, sizeof( png ), "delete_bus_xpm" }};
//EOF
+95
View File
@@ -0,0 +1,95 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0xda, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x55, 0x0b, 0x48, 0x9b,
0x57, 0x14, 0x36, 0x69, 0x12, 0x5f, 0x69, 0xa2, 0xc6, 0x47, 0xac, 0x9a, 0x97, 0x69, 0xf2, 0x27,
0xd1, 0xa9, 0xc8, 0x86, 0x1b, 0xcc, 0xad, 0x3e, 0x46, 0x71, 0x74, 0x63, 0xb0, 0x55, 0x86, 0x0a,
0xb5, 0x9d, 0x1d, 0x6b, 0x19, 0xed, 0xba, 0x87, 0xa8, 0xdd, 0x74, 0x30, 0xc6, 0x60, 0x2b, 0x0c,
0x69, 0x18, 0x5b, 0xa5, 0x1d, 0x14, 0x1c, 0x1b, 0x05, 0x57, 0xd1, 0xb5, 0x63, 0xe0, 0x60, 0x14,
0x6c, 0xa8, 0xce, 0x4d, 0xa4, 0x65, 0x32, 0xdb, 0xd4, 0xb4, 0xf8, 0xa2, 0x9b, 0x51, 0xd3, 0xa8,
0x31, 0xff, 0xd9, 0x77, 0xb3, 0xff, 0xd7, 0xdf, 0x36, 0xea, 0xea, 0x2e, 0x7c, 0x78, 0xff, 0x9b,
0x73, 0xcf, 0x77, 0xcf, 0x39, 0xdf, 0x39, 0xc6, 0xc4, 0x6c, 0x73, 0x11, 0x51, 0xc5, 0xd8, 0xd8,
0xd8, 0x9f, 0xa1, 0x50, 0xe8, 0x14, 0xf6, 0x32, 0xc9, 0xb9, 0x2a, 0x18, 0x0c, 0x9e, 0xf7, 0x7a,
0xbd, 0xd7, 0xb1, 0x2f, 0x8a, 0xf9, 0x3f, 0x0b, 0x0e, 0x2a, 0x7b, 0x7b, 0x7b, 0x97, 0xe2, 0x94,
0x4a, 0x3a, 0x58, 0x57, 0x47, 0x2b, 0x2b, 0x2b, 0x5f, 0x31, 0x32, 0x46, 0x12, 0x08, 0x04, 0x7a,
0xaa, 0xca, 0xcb, 0x29, 0x59, 0xad, 0x26, 0x8f, 0xc7, 0xe3, 0xdf, 0x36, 0x99, 0x48, 0x92, 0x14,
0x1f, 0x4f, 0x5f, 0xef, 0xda, 0x45, 0x05, 0x5a, 0x2d, 0x1d, 0xac, 0xad, 0x65, 0x64, 0x67, 0x44,
0x92, 0xf2, 0x94, 0x14, 0x6a, 0xd7, 0xeb, 0x49, 0xb7, 0x5d, 0x32, 0x5c, 0x48, 0xe8, 0xef, 0xef,
0x0f, 0xa8, 0x63, 0x63, 0xe9, 0x62, 0x76, 0x36, 0x05, 0x6c, 0x36, 0xf2, 0x99, 0xcd, 0xab, 0x64,
0x55, 0x65, 0x65, 0x54, 0x96, 0x94, 0x44, 0x33, 0x46, 0x23, 0x2d, 0xe4, 0xe6, 0xd2, 0x97, 0x78,
0x08, 0x8b, 0x6c, 0x74, 0x74, 0x74, 0xfc, 0x91, 0x88, 0x06, 0x06, 0x06, 0x94, 0x37, 0xb1, 0x8c,
0x78, 0x6d, 0x4b, 0x46, 0x46, 0xc4, 0xd9, 0xbc, 0xc1, 0x40, 0xb7, 0x33, 0x33, 0xa9, 0x60, 0xe7,
0x4e, 0x2a, 0x07, 0xe1, 0x14, 0xf6, 0xf3, 0x39, 0x39, 0x34, 0x87, 0x07, 0x1c, 0x48, 0x4d, 0xa5,
0x42, 0x8e, 0xa3, 0xe9, 0xe9, 0xe9, 0x2b, 0x9b, 0xbd, 0x5f, 0xe6, 0x72, 0x51, 0x99, 0xcb, 0x15,
0x3e, 0xe5, 0x72, 0xf1, 0x57, 0xf3, 0xf2, 0xf8, 0x71, 0xe0, 0xef, 0xbd, 0x7b, 0xc3, 0xe3, 0xd7,
0xae, 0x8d, 0x2d, 0x31, 0xb2, 0x66, 0x9d, 0x8e, 0xe6, 0xb2, 0xb2, 0xc8, 0x9f, 0x9e, 0x4e, 0x33,
0xd8, 0xff, 0x05, 0xb0, 0xfd, 0x2c, 0x22, 0xa9, 0x4f, 0x4e, 0xa6, 0x42, 0xbb, 0x9d, 0x26, 0x27,
0x27, 0x7f, 0x47, 0x26, 0x92, 0xa3, 0x52, 0x80, 0x60, 0x1f, 0x9c, 0x0e, 0xe7, 0xe5, 0x11, 0x45,
0x43, 0x65, 0x25, 0x51, 0x7f, 0xff, 0x2d, 0x32, 0x22, 0xaa, 0x93, 0x48, 0x95, 0x1f, 0x04, 0xb3,
0x1a, 0x0d, 0xcd, 0x22, 0x22, 0x3f, 0xa2, 0x38, 0x84, 0xb3, 0xc7, 0x90, 0x56, 0x81, 0x24, 0x25,
0x1a, 0x81, 0x0a, 0x8e, 0xdc, 0x0f, 0x3b, 0x0f, 0xaf, 0x38, 0x9d, 0xfe, 0x29, 0x8e, 0x9b, 0xf4,
0x3a, 0x9d, 0x73, 0xf7, 0x8a, 0x8a, 0x78, 0xbe, 0xaf, 0x6f, 0x91, 0x2a, 0x4b, 0x4b, 0xe9, 0x79,
0xe6, 0x1c, 0xc5, 0x8f, 0x10, 0x31, 0xd2, 0xb4, 0x34, 0x2a, 0xc6, 0xbe, 0xae, 0xba, 0x9a, 0x09,
0xe4, 0x9c, 0x54, 0xfa, 0x62, 0xaa, 0xe4, 0x70, 0xfa, 0xad, 0x94, 0x80, 0xe3, 0xa6, 0xc6, 0x32,
0x33, 0x3f, 0xed, 0x50, 0x28, 0xb2, 0xdf, 0x85, 0xc1, 0x1b, 0xc0, 0x6b, 0x5a, 0xad, 0xb6, 0x61,
0x78, 0xf8, 0x8f, 0x91, 0x7d, 0x08, 0x8b, 0x15, 0x7e, 0x0a, 0x29, 0x64, 0xce, 0x59, 0x54, 0x2c,
0x9a, 0x39, 0x7c, 0xdf, 0x41, 0xea, 0x8a, 0xf1, 0x5b, 0x7d, 0x4d, 0xcd, 0xaa, 0xf4, 0xa5, 0xd1,
0x7c, 0xb8, 0x46, 0xc2, 0xf3, 0x06, 0x43, 0xd7, 0x85, 0x98, 0x18, 0xf9, 0x71, 0xfc, 0x74, 0x18,
0x78, 0x05, 0xd8, 0x03, 0x14, 0xfb, 0x7c, 0xbe, 0x3e, 0x26, 0xe1, 0x32, 0xd4, 0x60, 0x1a, 0x42,
0x98, 0x87, 0xfa, 0x66, 0x21, 0x80, 0x23, 0xf8, 0x6e, 0x05, 0xd8, 0xf7, 0xbc, 0xc9, 0xf4, 0xaf,
0x1a, 0x41, 0x26, 0x48, 0xbf, 0x5d, 0x24, 0xb1, 0x82, 0x60, 0x51, 0x24, 0xca, 0xca, 0x3a, 0xff,
0x0d, 0x8e, 0x8f, 0x01, 0x75, 0x40, 0x29, 0x60, 0x01, 0x74, 0x6e, 0xb7, 0x5b, 0xdf, 0xdd, 0xdd,
0xcd, 0x2b, 0xe4, 0x72, 0xfa, 0x0d, 0xce, 0x16, 0x2c, 0x16, 0xf2, 0xe3, 0xef, 0x01, 0xa4, 0xae,
0x00, 0x85, 0x67, 0x35, 0x6b, 0x46, 0x54, 0x0b, 0x56, 0x2b, 0x05, 0xf0, 0x7d, 0x19, 0xea, 0x93,
0xc9, 0x64, 0x34, 0x38, 0x38, 0xe8, 0x8f, 0x10, 0xc1, 0xf9, 0xe7, 0x22, 0x89, 0xcd, 0xe6, 0x1d,
0xc1, 0xd1, 0x71, 0x81, 0xe4, 0x71, 0x20, 0x0d, 0x50, 0x01, 0x72, 0x80, 0x75, 0xff, 0x07, 0xef,
0x37, 0x35, 0x91, 0x01, 0xfd, 0x31, 0x82, 0x57, 0x37, 0x20, 0x6d, 0x05, 0x28, 0xbc, 0xc7, 0x33,
0xb5, 0xe4, 0xf1, 0xdc, 0x26, 0x0b, 0xd2, 0xc6, 0xa4, 0xff, 0x2b, 0x7e, 0xd3, 0x27, 0x26, 0xd2,
0xe9, 0xf6, 0x76, 0x1e, 0x77, 0xea, 0x45, 0xa2, 0x3b, 0x22, 0x91, 0x4e, 0x77, 0xe2, 0xb4, 0x90,
0xae, 0xa7, 0x81, 0x54, 0x40, 0x11, 0xa5, 0x71, 0xdb, 0x5a, 0x1a, 0x1b, 0x29, 0x41, 0xa1, 0x88,
0xf4, 0xc9, 0xc4, 0xc4, 0xc4, 0x70, 0x45, 0xc5, 0xdd, 0xd6, 0x55, 0x35, 0xa2, 0x4e, 0x89, 0x18,
0x4f, 0x5f, 0xb8, 0xdd, 0xfc, 0xf2, 0xf2, 0xf2, 0xe1, 0xc8, 0xa5, 0xe2, 0x62, 0xd2, 0xae, 0xd5,
0x66, 0x65, 0x59, 0x2e, 0x8f, 0x3d, 0x21, 0xd4, 0xc4, 0x22, 0x44, 0xb2, 0xd1, 0x94, 0x68, 0xed,
0xec, 0xec, 0xe4, 0x21, 0xe1, 0x21, 0xd6, 0x27, 0x36, 0xdb, 0x30, 0x27, 0x4a, 0xdf, 0xe3, 0xf1,
0x86, 0xbb, 0xba, 0xba, 0xc2, 0x43, 0x43, 0x43, 0x2d, 0x30, 0x8d, 0x15, 0xa2, 0x59, 0x72, 0x88,
0x44, 0x90, 0xf0, 0x3d, 0x1c, 0x1d, 0x05, 0x2a, 0x84, 0x68, 0xe4, 0x5b, 0x8c, 0xa4, 0x1c, 0x40,
0xc9, 0xf6, 0x56, 0xeb, 0x0f, 0xb1, 0xa2, 0x1f, 0x3c, 0x9e, 0x2f, 0x29, 0xd9, 0xf3, 0x1e, 0x8b,
0x03, 0x50, 0xb3, 0x94, 0x43, 0x08, 0x0b, 0x7a, 0xd1, 0xc0, 0xe5, 0x5a, 0xba, 0x8f, 0xc3, 0xd7,
0x81, 0xa7, 0x00, 0x6d, 0xc4, 0xe0, 0x3f, 0xae, 0xf5, 0x7e, 0x96, 0x83, 0x51, 0xfc, 0x7c, 0xb7,
0x03, 0x72, 0x5e, 0x10, 0x8d, 0x34, 0x9a, 0x97, 0xdb, 0xb6, 0x43, 0x84, 0xb4, 0xbf, 0x24, 0xe9,
0x3f, 0x5f, 0xb4, 0x07, 0x63, 0xa6, 0x2d, 0x5e, 0x10, 0x8d, 0xcc, 0xe6, 0x5f, 0x7e, 0x16, 0x52,
0xa7, 0xdb, 0x2a, 0x75, 0xeb, 0x89, 0xf8, 0xcb, 0xa2, 0x0f, 0xa3, 0xb1, 0xe7, 0x12, 0x6b, 0xee,
0x75, 0xa9, 0x63, 0xcb, 0xe1, 0x98, 0xa8, 0x92, 0x8e, 0x1b, 0x9d, 0xee, 0xed, 0x66, 0x1c, 0x9b,
0x37, 0x13, 0xc3, 0x03, 0xa3, 0xeb, 0x55, 0xc9, 0xfd, 0x90, 0x5a, 0x5d, 0xf1, 0x91, 0xd0, 0x1e,
0xf6, 0x55, 0x31, 0x08, 0x4b, 0x81, 0x19, 0x76, 0x69, 0x2d, 0xc7, 0xc1, 0xf9, 0x8c, 0x8c, 0x8f,
0x1b, 0x36, 0x92, 0xb7, 0x74, 0xe5, 0xe7, 0xd3, 0x8b, 0xb8, 0x13, 0x14, 0xef, 0x9a, 0x4c, 0x3f,
0xfd, 0x88, 0xe3, 0x37, 0x81, 0x2a, 0x40, 0x0f, 0xec, 0x90, 0xda, 0xcb, 0x0c, 0x86, 0xb3, 0x16,
0xa7, 0xf3, 0xbe, 0x57, 0xfa, 0xb2, 0xdd, 0xbb, 0x6f, 0x9c, 0x4d, 0x4d, 0x6d, 0xb3, 0x49, 0x1b,
0x56, 0xbc, 0xc0, 0x71, 0x41, 0x13, 0x6c, 0x3a, 0x60, 0xcb, 0x8b, 0x77, 0xec, 0x76, 0xdf, 0x0d,
0xb9, 0x3c, 0xe5, 0x1d, 0x21, 0x9a, 0x02, 0x20, 0x31, 0x5a, 0x9d, 0x15, 0x7a, 0x7d, 0xfb, 0x13,
0x0e, 0x87, 0xff, 0xd6, 0xfa, 0xc9, 0xcd, 0x87, 0x9c, 0xce, 0xc0, 0x55, 0x97, 0x6b, 0xae, 0x03,
0x0f, 0xf9, 0x0c, 0x8a, 0x3a, 0x03, 0x82, 0x41, 0xfc, 0x16, 0x96, 0xda, 0xd9, 0xed, 0xe3, 0xd7,
0x55, 0x2a, 0x53, 0x23, 0xfc, 0xb0, 0x4c, 0x3c, 0x0b, 0xa4, 0x3f, 0x18, 0x8d, 0x74, 0xc5, 0xa9,
0xd5, 0x25, 0x0e, 0xab, 0x75, 0xe4, 0x22, 0x8b, 0x68, 0xa3, 0xff, 0x47, 0x52, 0xb8, 0x5c, 0xa1,
0xa0, 0xc1, 0xd0, 0xfd, 0x3d, 0x1a, 0xfd, 0x2d, 0x41, 0x00, 0x4c, 0x48, 0x39, 0x5b, 0xd5, 0x97,
0x85, 0x19, 0x0f, 0x18, 0xb4, 0xda, 0xda, 0xfd, 0x16, 0xcb, 0x95, 0x1e, 0x8e, 0x9b, 0xb9, 0xfb,
0x30, 0x01, 0xcf, 0x73, 0xdc, 0xc4, 0x4d, 0x10, 0x74, 0xab, 0x54, 0x5c, 0x13, 0xec, 0x8f, 0x00,
0x35, 0xc2, 0x00, 0xce, 0x16, 0x04, 0xb0, 0x65, 0x6b, 0xc8, 0x84, 0xd7, 0xb0, 0x61, 0x9a, 0x0f,
0x3c, 0x17, 0x17, 0xe7, 0x38, 0xa4, 0xd1, 0xec, 0x3f, 0xa9, 0xd3, 0x1d, 0xfd, 0x44, 0xa3, 0x79,
0xa1, 0x55, 0xa9, 0xcc, 0x3c, 0x26, 0xcc, 0x43, 0x36, 0x2c, 0xab, 0x81, 0x72, 0xc0, 0x29, 0x88,
0x47, 0xf5, 0x28, 0xfd, 0x17, 0x23, 0xe4, 0x37, 0x41, 0x20, 0xcc, 0x05, 0x0a, 0x85, 0x06, 0x64,
0xf9, 0x7f, 0x06, 0x78, 0x52, 0x28, 0xb8, 0x59, 0x20, 0x88, 0xdf, 0xac, 0x26, 0xff, 0x00, 0x8c,
0xdc, 0x04, 0xd3, 0xa5, 0xbd, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_circle_xpm[1] = {{ png, sizeof( png ), "delete_circle_xpm" }};
//EOF
+92
View File
@@ -0,0 +1,92 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0xab, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x9d, 0x95, 0x7f, 0x4c, 0xd4,
0x75, 0x18, 0xc7, 0x3f, 0x1c, 0x27, 0xf1, 0x4b, 0x0e, 0x0f, 0x10, 0xb9, 0xe3, 0x44, 0x18, 0xa0,
0x34, 0xc1, 0xc2, 0x1f, 0x07, 0x5b, 0x42, 0x34, 0x17, 0x96, 0xcd, 0x5d, 0xea, 0x40, 0x6d, 0x81,
0x59, 0x03, 0x93, 0x54, 0x9a, 0x22, 0x05, 0x69, 0x1b, 0x6b, 0xe0, 0x68, 0x91, 0xb6, 0xdd, 0xdd,
0xa2, 0xc9, 0x1f, 0xb2, 0x43, 0xcb, 0x89, 0x7f, 0x34, 0x21, 0x62, 0x25, 0x8c, 0x46, 0x8c, 0x5a,
0x80, 0xb2, 0xa8, 0xd9, 0x0a, 0x72, 0xa3, 0x36, 0x60, 0x1c, 0x07, 0x14, 0x52, 0xe7, 0xbb, 0xf7,
0xe7, 0xcb, 0x41, 0x88, 0x07, 0x02, 0x9f, 0xed, 0xbd, 0xbb, 0xef, 0x7d, 0xee, 0xfb, 0xbc, 0x3e,
0xcf, 0xf3, 0xbc, 0x9f, 0xef, 0x57, 0x88, 0x25, 0x2e, 0x00, 0x61, 0xd4, 0x75, 0xaa, 0x8a, 0xf2,
0x73, 0xb3, 0x7f, 0x8a, 0x6a, 0xa2, 0xb6, 0x8b, 0xe5, 0x2e, 0xde, 0xac, 0x1b, 0x1e, 0x1e, 0xbe,
0xb3, 0xdd, 0x68, 0xc4, 0xc1, 0x8c, 0x0c, 0x4c, 0x4e, 0x4e, 0x36, 0xcf, 0x86, 0xf1, 0x7b, 0x99,
0xd5, 0x6a, 0x45, 0xf8, 0x9a, 0x35, 0xe8, 0xea, 0xea, 0xfa, 0x9b, 0xd7, 0xcf, 0x2c, 0x1b, 0x92,
0xbc, 0x79, 0x33, 0x12, 0x56, 0xae, 0x84, 0xde, 0xd7, 0x17, 0x99, 0x7b, 0xf7, 0xce, 0xc0, 0x24,
0xc4, 0x62, 0xb1, 0xc0, 0xcb, 0xd3, 0x13, 0x3b, 0xb8, 0x1f, 0x12, 0x18, 0xb8, 0x74, 0x18, 0xff,
0xac, 0x75, 0x38, 0x1c, 0x77, 0x52, 0x92, 0x92, 0x14, 0xc8, 0xdd, 0xe8, 0x68, 0xfc, 0x18, 0x19,
0x89, 0x08, 0x3f, 0x3f, 0xec, 0x33, 0x99, 0x24, 0xec, 0xf7, 0xca, 0xca, 0x4a, 0x3c, 0xa6, 0x56,
0xa3, 0x26, 0x34, 0x14, 0x63, 0x31, 0x31, 0xc8, 0x09, 0x0a, 0x9a, 0x0d, 0x4b, 0x5e, 0x2c, 0xe8,
0x60, 0x71, 0x71, 0x31, 0xbc, 0x54, 0x2a, 0xf4, 0x44, 0x45, 0x61, 0x3c, 0x36, 0x16, 0x63, 0xfc,
0xec, 0xd2, 0xeb, 0xa1, 0xf7, 0xf1, 0xc1, 0x56, 0x66, 0x29, 0x33, 0xa9, 0x09, 0x0e, 0xc6, 0x68,
0x44, 0x84, 0xb2, 0x37, 0x4a, 0xd8, 0xe3, 0xdc, 0x4b, 0xde, 0xb6, 0x0d, 0xb2, 0x9f, 0x8b, 0x05,
0x85, 0x0c, 0x0c, 0x0c, 0xf4, 0x25, 0x6e, 0xdc, 0x08, 0x63, 0x40, 0x00, 0xfe, 0x60, 0x36, 0x32,
0xa0, 0x83, 0xa0, 0xce, 0x90, 0x10, 0x24, 0x30, 0xa0, 0x8d, 0xa7, 0x77, 0x84, 0x85, 0x61, 0x34,
0x3c, 0x5c, 0xd9, 0xcb, 0xd3, 0x6a, 0x11, 0xe8, 0xef, 0x8f, 0xf6, 0xf6, 0xf6, 0x7b, 0xbc, 0xff,
0xe9, 0xa5, 0x94, 0x6f, 0xdd, 0xd0, 0xd0, 0x50, 0xdf, 0xd6, 0x4d, 0x9b, 0x60, 0x64, 0xf9, 0xfa,
0x75, 0x3a, 0x38, 0xd8, 0xf4, 0x11, 0x66, 0x31, 0xc2, 0xa0, 0x23, 0x2c, 0xd5, 0xc8, 0xea, 0xd5,
0x70, 0xf0, 0xf7, 0x37, 0x09, 0xd5, 0xb0, 0xac, 0x6d, 0x6d, 0x6d, 0x12, 0xb2, 0x6b, 0x39, 0x86,
0x58, 0xa7, 0x64, 0x16, 0x1f, 0x0f, 0x23, 0x4f, 0xdb, 0x4f, 0x88, 0x7d, 0xd5, 0x2a, 0xd8, 0x99,
0xa5, 0x9d, 0xc1, 0x25, 0x34, 0x8f, 0x87, 0x98, 0x95, 0xc9, 0x22, 0x20, 0x67, 0x44, 0x2a, 0x55,
0x4d, 0xe5, 0xf0, 0x4a, 0x4d, 0xa9, 0x5c, 0x30, 0x73, 0x79, 0x79, 0x39, 0x56, 0xb0, 0x5f, 0xad,
0x0c, 0x2e, 0x01, 0xc3, 0x0c, 0xae, 0x7c, 0xb2, 0x8c, 0xe1, 0xde, 0xde, 0x78, 0x3e, 0x3d, 0x5d,
0x1a, 0xa4, 0xc3, 0xdd, 0x9c, 0xb9, 0x03, 0xbd, 0x46, 0x41, 0x9c, 0x16, 0x57, 0x78, 0x15, 0x4f,
0x85, 0x39, 0x9d, 0xce, 0x73, 0xd3, 0xee, 0xb2, 0x31, 0x13, 0x59, 0x2a, 0x59, 0x32, 0xbb, 0x2c,
0x1d, 0xb3, 0x71, 0xd0, 0x71, 0xdd, 0x2c, 0x67, 0x04, 0xad, 0xef, 0x72, 0x63, 0xf3, 0xa3, 0x61,
0xd3, 0xa0, 0x23, 0xe2, 0x26, 0xaf, 0xac, 0xad, 0xad, 0xad, 0xb5, 0xd3, 0x73, 0x52, 0xc3, 0x93,
0x8f, 0xd2, 0x08, 0x4a, 0x8f, 0x18, 0xbc, 0x8a, 0xa5, 0xeb, 0xe7, 0xa7, 0x34, 0xc7, 0xe8, 0xda,
0xb5, 0xb8, 0x65, 0x30, 0x3c, 0x34, 0x67, 0x8f, 0x06, 0xe5, 0x88, 0x96, 0xac, 0xac, 0xac, 0xaf,
0x6d, 0x36, 0x9b, 0x02, 0xb9, 0x4c, 0x67, 0x8d, 0x49, 0xd7, 0x31, 0xa0, 0x74, 0xd8, 0x51, 0x42,
0x64, 0x45, 0x95, 0x9e, 0x11, 0x20, 0xad, 0x3d, 0x4e, 0x6b, 0xdf, 0xe2, 0x7f, 0x74, 0x74, 0xe3,
0xab, 0xd9, 0xd9, 0xd2, 0xde, 0xe5, 0x8b, 0x02, 0x99, 0x4c, 0xa6, 0xc6, 0xba, 0xba, 0xba, 0xfb,
0x5e, 0x2c, 0xd9, 0x79, 0x39, 0x90, 0x1c, 0x58, 0x19, 0x30, 0x8f, 0x7d, 0x91, 0x8d, 0x6f, 0x68,
0x68, 0x80, 0x62, 0x10, 0x42, 0xff, 0xe4, 0xde, 0xf8, 0xfa, 0xf5, 0x68, 0xa1, 0xc5, 0x03, 0xbd,
0xbc, 0xf0, 0x56, 0x41, 0x81, 0x04, 0x9d, 0x75, 0x87, 0x88, 0xa5, 0x2e, 0x08, 0x5f, 0x71, 0x97,
0x82, 0xf0, 0x17, 0x7f, 0xf1, 0xfa, 0x37, 0xb3, 0xd9, 0xdc, 0x50, 0x5b, 0x5b, 0x3b, 0x03, 0x7b,
0xe3, 0xc1, 0x39, 0xc9, 0x99, 0x71, 0xa3, 0x46, 0x83, 0x3a, 0x66, 0x26, 0x21, 0xf9, 0xc7, 0x8e,
0x49, 0xc8, 0x55, 0x4a, 0x3d, 0x17, 0x72, 0x98, 0x9a, 0x88, 0x8c, 0x30, 0xe0, 0xf5, 0x43, 0x99,
0x78, 0xbf, 0x28, 0x0f, 0x27, 0x5f, 0xd9, 0x83, 0xf8, 0x18, 0x83, 0x52, 0x9e, 0xb2, 0xb2, 0xb2,
0xef, 0x25, 0x6c, 0x05, 0x4b, 0x38, 0xd7, 0xc2, 0x33, 0xd6, 0xe7, 0x50, 0xcb, 0xcb, 0xfc, 0xe3,
0xc7, 0xe7, 0x85, 0xa4, 0x52, 0xce, 0x13, 0xb9, 0xd9, 0x98, 0xec, 0x6d, 0x03, 0x7e, 0xf9, 0x0a,
0xe8, 0xbe, 0x06, 0x7c, 0x57, 0x05, 0x67, 0xf3, 0x07, 0xf8, 0x38, 0xff, 0x05, 0xa8, 0x3d, 0x55,
0x28, 0x29, 0x29, 0xe9, 0x6e, 0x6a, 0x6a, 0x72, 0x76, 0x76, 0x76, 0x4e, 0xcc, 0x9d, 0x13, 0x09,
0x1b, 0x1c, 0x1c, 0xec, 0xad, 0xae, 0xae, 0x96, 0x90, 0x4f, 0xdd, 0x41, 0xe4, 0x6a, 0x4c, 0x4d,
0xde, 0x02, 0xf4, 0x7e, 0x03, 0xfc, 0x74, 0x03, 0xe8, 0xb0, 0x01, 0xdf, 0x5a, 0x80, 0x9b, 0xa5,
0x40, 0x7d, 0x21, 0xdf, 0x40, 0x47, 0x50, 0xb8, 0x3b, 0x4e, 0x9e, 0x76, 0x32, 0x2d, 0x2d, 0xed,
0x52, 0x51, 0x51, 0x51, 0x1a, 0xbf, 0x7b, 0xba, 0x19, 0xea, 0x00, 0x2a, 0x89, 0x52, 0x3d, 0xb8,
0xf3, 0x8e, 0x38, 0x2f, 0xde, 0x66, 0x4f, 0x3c, 0x84, 0xb3, 0xea, 0x1c, 0xdf, 0x59, 0xb7, 0x65,
0x16, 0x17, 0x81, 0x96, 0x0a, 0xa0, 0xf1, 0x5d, 0xe0, 0xf3, 0x13, 0x2c, 0xc0, 0x21, 0xa0, 0xda,
0x84, 0x9e, 0x12, 0xa3, 0x52, 0x16, 0x91, 0xc2, 0xfe, 0xbd, 0x4c, 0xdb, 0x17, 0x0a, 0x8b, 0x72,
0x7f, 0x91, 0x52, 0x72, 0x19, 0xd8, 0x63, 0x21, 0x77, 0x41, 0x14, 0x08, 0x25, 0x40, 0xbd, 0xf9,
0xf4, 0x9c, 0x2c, 0x72, 0x81, 0xcb, 0xfb, 0xf9, 0xec, 0x7d, 0x0e, 0xb0, 0x24, 0x63, 0xa4, 0x74,
0xc3, 0x14, 0xe8, 0x00, 0x75, 0x66, 0x96, 0x4e, 0x89, 0x2f, 0xf8, 0x7b, 0x34, 0x15, 0x3c, 0xfd,
0x04, 0x79, 0x78, 0xed, 0x14, 0xed, 0x22, 0x5d, 0xfc, 0xc0, 0x6d, 0xa7, 0xf5, 0xe4, 0x3e, 0x66,
0x71, 0xd6, 0x95, 0x05, 0xfd, 0x7f, 0xc9, 0x04, 0x54, 0xa6, 0x01, 0x1f, 0x3d, 0xc9, 0x49, 0x88,
0x42, 0xe7, 0x51, 0xcd, 0x14, 0x68, 0x8b, 0xe8, 0x15, 0x3b, 0x44, 0x8f, 0x78, 0x56, 0x74, 0x28,
0xf7, 0x26, 0x8a, 0x26, 0xfe, 0x7e, 0x91, 0x3a, 0x40, 0xf9, 0xcc, 0x97, 0xd3, 0x87, 0x94, 0x59,
0x5a, 0x38, 0x31, 0x3a, 0x14, 0xff, 0x5e, 0xcb, 0x01, 0x6a, 0x64, 0x16, 0x3b, 0x95, 0x2c, 0x50,
0x11, 0x07, 0x94, 0xea, 0x38, 0x09, 0x7e, 0xc8, 0x7d, 0x42, 0xc9, 0x7c, 0x82, 0xfa, 0x92, 0xba,
0x41, 0x7d, 0xe2, 0xba, 0x57, 0xaa, 0x82, 0x7a, 0x71, 0x21, 0x90, 0x96, 0x0a, 0xa2, 0xe4, 0x3b,
0xe3, 0x5e, 0xa6, 0x51, 0x0f, 0xfb, 0x85, 0xa7, 0x66, 0xb2, 0x40, 0x89, 0x16, 0xff, 0x14, 0x7a,
0xe2, 0xbd, 0x14, 0x01, 0x0f, 0xa1, 0x80, 0x6e, 0x53, 0xf5, 0xf2, 0xb1, 0xe4, 0x2a, 0x57, 0x90,
0x4b, 0x32, 0x8e, 0xef, 0xc2, 0x7d, 0xfa, 0x7f, 0xed, 0xa1, 0xc6, 0x34, 0xde, 0x2a, 0xec, 0x8e,
0xf3, 0x46, 0xbe, 0x51, 0x8d, 0x8c, 0x0d, 0x02, 0x86, 0x00, 0x05, 0x70, 0x9f, 0xfa, 0x99, 0x92,
0xfd, 0xb8, 0x4a, 0x65, 0xb9, 0x02, 0x2f, 0x6b, 0xc9, 0xd3, 0x24, 0x50, 0x0d, 0x42, 0x23, 0xec,
0x22, 0x8c, 0x80, 0x10, 0xa5, 0x54, 0xbf, 0x52, 0x2d, 0xae, 0x4c, 0x3e, 0xa3, 0x8a, 0x29, 0xdd,
0x62, 0x4f, 0x3f, 0xdf, 0x92, 0xb3, 0xa1, 0x17, 0x26, 0x36, 0x57, 0x3a, 0x6a, 0xbf, 0xe8, 0x73,
0x01, 0xae, 0xbb, 0x7a, 0xf1, 0x92, 0x7c, 0x65, 0xb8, 0x9b, 0xa1, 0xe5, 0x65, 0x56, 0x20, 0xf2,
0x14, 0xd0, 0x61, 0xba, 0x72, 0x2a, 0x8b, 0x7c, 0xca, 0xb0, 0x94, 0x3e, 0xcc, 0x5e, 0xff, 0x01,
0x29, 0x35, 0x2e, 0xb3, 0x3a, 0xac, 0xcc, 0x57, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_connection_xpm[1] = {{ png, sizeof( png ), "delete_connection_xpm" }};
//EOF
+74
View File
@@ -0,0 +1,74 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x8a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x94, 0x4b, 0x48, 0x94,
0x51, 0x18, 0x86, 0xff, 0xc9, 0xeb, 0x98, 0xcd, 0x78, 0xbf, 0xdf, 0x66, 0x98, 0xd4, 0xca, 0xc0,
0x4d, 0x21, 0x64, 0x9b, 0xb2, 0x4d, 0x45, 0x66, 0xd0, 0x22, 0xcd, 0x34, 0x17, 0x2d, 0x22, 0x83,
0x0a, 0x42, 0x02, 0xa1, 0x56, 0x49, 0x5a, 0x4a, 0xb4, 0x28, 0xa3, 0x50, 0x43, 0x17, 0x82, 0xda,
0xa2, 0x20, 0x53, 0xcb, 0x91, 0x1c, 0xcc, 0x8d, 0x82, 0x31, 0xc4, 0x78, 0xc3, 0x48, 0x62, 0xb2,
0x9c, 0x9b, 0x46, 0x5e, 0xbf, 0xde, 0x6f, 0x3c, 0x3f, 0x4d, 0xe3, 0x8c, 0x9a, 0xb5, 0x09, 0x3a,
0xf0, 0xf2, 0xff, 0xe7, 0xf6, 0x3d, 0xe7, 0x7c, 0xe7, 0x3d, 0x47, 0x92, 0x36, 0x51, 0x88, 0x28,
0x6b, 0x7c, 0x7c, 0xfc, 0xcb, 0xe4, 0xe4, 0xe4, 0x07, 0xfc, 0xa7, 0xb9, 0xf5, 0xed, 0xfa, 0x88,
0x32, 0x36, 0x36, 0x36, 0x85, 0xff, 0x3d, 0xd2, 0x66, 0x0b, 0x43, 0x06, 0x07, 0x07, 0x1d, 0x91,
0x21, 0x21, 0xa4, 0x4d, 0x48, 0x20, 0x04, 0x34, 0xcb, 0x30, 0x86, 0x8c, 0x8c, 0x8c, 0x4c, 0x25,
0xc7, 0xc6, 0x52, 0x74, 0x68, 0x28, 0x0d, 0x0d, 0x0d, 0xd9, 0x37, 0x05, 0x73, 0x85, 0x5c, 0x8e,
0x8c, 0xa4, 0xfc, 0xb0, 0x30, 0xd2, 0xc6, 0xc7, 0xcb, 0xb0, 0xbc, 0xe1, 0xe1, 0x61, 0x27, 0xa4,
0x38, 0x3c, 0x9c, 0x2e, 0x46, 0x44, 0x6c, 0x0e, 0x86, 0xc1, 0x6a, 0xa3, 0xd1, 0x68, 0x63, 0xc8,
0x15, 0x40, 0x66, 0xd3, 0xd2, 0xc8, 0xae, 0xd3, 0x51, 0x3e, 0xef, 0x0c, 0x30, 0xbd, 0x5e, 0x4f,
0x0c, 0x29, 0x42, 0xdd, 0xae, 0xd1, 0xd0, 0x0c, 0xfa, 0x64, 0x98, 0xc9, 0x64, 0xb2, 0xfc, 0x0e,
0x28, 0xb2, 0xbf, 0xbf, 0x7f, 0x2e, 0x28, 0x20, 0x80, 0x6a, 0x62, 0x62, 0x9c, 0x81, 0x66, 0x52,
0x52, 0xc8, 0x96, 0x98, 0x48, 0xf9, 0x2a, 0x15, 0xf1, 0x90, 0x33, 0xf8, 0x5a, 0x01, 0x75, 0x24,
0x25, 0xd1, 0x8c, 0x56, 0x4b, 0x95, 0xd1, 0xd1, 0xb4, 0x15, 0xe3, 0x07, 0x06, 0x06, 0xbe, 0x7b,
0x8a, 0x79, 0x0f, 0x1a, 0x81, 0xf2, 0x5c, 0xda, 0x0c, 0x50, 0x2d, 0x60, 0xb9, 0x9d, 0x9d, 0x9d,
0x0b, 0x3c, 0xb9, 0x06, 0xbb, 0x72, 0x00, 0x62, 0xc7, 0x2e, 0x2c, 0x51, 0x51, 0xd4, 0x0c, 0x88,
0x05, 0x6d, 0x76, 0x2c, 0xc2, 0x01, 0xd8, 0x2d, 0xa4, 0x2f, 0x38, 0x30, 0x90, 0xba, 0xbb, 0xbb,
0xe7, 0x31, 0xef, 0xa8, 0x27, 0x50, 0x33, 0xb4, 0x0c, 0x2d, 0x42, 0x25, 0xa2, 0x6d, 0x12, 0x7a,
0x0b, 0x6d, 0x67, 0x18, 0xd2, 0x34, 0xbf, 0x4d, 0xa9, 0xa4, 0x2a, 0xa4, 0xc9, 0x06, 0x88, 0x15,
0x67, 0x65, 0x55, 0xab, 0x9d, 0x5f, 0xae, 0xd7, 0xa0, 0x9d, 0x21, 0x5d, 0x5d, 0x5d, 0x5e, 0x21,
0x32, 0xc8, 0x01, 0x3d, 0x13, 0xc0, 0xab, 0x02, 0xf4, 0x0e, 0xca, 0x12, 0x69, 0xbc, 0x54, 0x57,
0x57, 0x47, 0x0a, 0xfc, 0x1a, 0x10, 0x94, 0x21, 0x96, 0xe0, 0x60, 0xb2, 0xe2, 0x3c, 0xf4, 0x90,
0x42, 0xa1, 0xa0, 0xc6, 0xc6, 0x46, 0x0c, 0xa3, 0xd2, 0xb5, 0x8e, 0x43, 0x06, 0xe5, 0x43, 0x4f,
0x5c, 0x76, 0xe7, 0x04, 0x61, 0xf2, 0x4e, 0xbe, 0x23, 0x9a, 0xb8, 0x38, 0x2a, 0x14, 0xe9, 0x62,
0x80, 0x95, 0x77, 0x87, 0x74, 0x59, 0x71, 0x2e, 0x05, 0x68, 0x4f, 0x46, 0x0a, 0xe1, 0x42, 0x76,
0x63, 0xfa, 0x7a, 0xa0, 0x13, 0x50, 0x00, 0x74, 0x1f, 0x5a, 0x62, 0x50, 0x59, 0x59, 0xd9, 0x29,
0xd9, 0xc2, 0xec, 0x2e, 0x3e, 0x78, 0x3b, 0x02, 0xdb, 0x00, 0x1b, 0x06, 0x84, 0xff, 0xed, 0x58,
0x80, 0x0d, 0x66, 0x28, 0x10, 0x6e, 0xc4, 0xa2, 0x3e, 0x7b, 0x83, 0xb9, 0x82, 0xb8, 0xf8, 0x41,
0x5f, 0x55, 0x2a, 0x95, 0x11, 0x90, 0x69, 0x27, 0x04, 0x67, 0xc1, 0x16, 0x66, 0x77, 0xd9, 0xf9,
0xe0, 0x11, 0x74, 0x0b, 0xd2, 0x55, 0x8d, 0x9d, 0xc9, 0x8e, 0x73, 0xa4, 0xa6, 0xd2, 0x69, 0xc0,
0x35, 0xe8, 0x9f, 0x98, 0x98, 0xf8, 0xe4, 0x09, 0x14, 0x0d, 0x95, 0xb9, 0x80, 0xb8, 0xec, 0xc8,
0xc8, 0xc8, 0xa8, 0xea, 0xe9, 0xe9, 0x59, 0xf2, 0xf3, 0xf1, 0xa1, 0x7a, 0xac, 0xda, 0x69, 0x6f,
0xc0, 0x64, 0x77, 0x55, 0x56, 0x56, 0x92, 0xec, 0xc6, 0x59, 0x40, 0xf8, 0x9e, 0x3d, 0xc2, 0xa2,
0xfc, 0x7d, 0x7d, 0xc9, 0x60, 0x30, 0x2c, 0x78, 0x4b, 0x9f, 0x16, 0x8a, 0x77, 0xa9, 0xfb, 0x42,
0xa9, 0x78, 0xdb, 0x4a, 0x5b, 0x5a, 0x5a, 0x96, 0x03, 0xfd, 0xfc, 0xe8, 0x31, 0x82, 0xdc, 0x45,
0xaa, 0x5c, 0xdc, 0x75, 0x53, 0x76, 0xe3, 0x6d, 0x9c, 0x4f, 0x03, 0x16, 0x13, 0xe4, 0xef, 0x4f,
0xad, 0xad, 0xad, 0x4b, 0xe8, 0x2b, 0xe4, 0xeb, 0x71, 0x0c, 0x32, 0x4a, 0xd2, 0x85, 0x03, 0xa8,
0x6c, 0xd9, 0xc0, 0xc5, 0x2d, 0x91, 0x61, 0x0c, 0xe1, 0xe0, 0x68, 0x3b, 0x22, 0xfa, 0x8e, 0x03,
0xea, 0xbc, 0x67, 0x4a, 0xf4, 0xb7, 0xb5, 0x3d, 0xa5, 0x8a, 0x8a, 0x37, 0xad, 0xe8, 0x52, 0x32,
0xa8, 0x58, 0x92, 0x1e, 0xe2, 0x66, 0xef, 0xaf, 0x46, 0x25, 0xd8, 0x2d, 0x6e, 0x92, 0x90, 0x3b,
0xec, 0x6c, 0x7b, 0x7b, 0xfb, 0x52, 0x5f, 0x5f, 0xdf, 0x9c, 0xd9, 0x6c, 0xe6, 0x14, 0x67, 0x43,
0x0a, 0xd1, 0x97, 0xdb, 0xdb, 0xdb, 0x3b, 0xdf, 0xd1, 0xd1, 0xb1, 0x58, 0x58, 0xf8, 0x1a, 0x71,
0xcf, 0xbf, 0x14, 0xd9, 0x59, 0x05, 0x62, 0x15, 0x41, 0x5d, 0x90, 0xd9, 0x03, 0x5c, 0x86, 0xa5,
0x43, 0x1a, 0x51, 0x7d, 0x01, 0x8d, 0x42, 0x37, 0x20, 0x1d, 0xda, 0xb5, 0x4d, 0x4d, 0xa3, 0xd9,
0x2b, 0x71, 0x57, 0x81, 0x32, 0x9f, 0xa3, 0xf2, 0x0a, 0xfa, 0xc6, 0x71, 0x84, 0xfa, 0xa1, 0x93,
0x1b, 0x50, 0x83, 0xcb, 0x1c, 0x5a, 0x81, 0xc6, 0xd6, 0x7a, 0x01, 0xe9, 0x2c, 0x6e, 0x83, 0x59,
0xb3, 0xe2, 0x55, 0x30, 0x41, 0xef, 0xd7, 0xd0, 0xd4, 0xea, 0xb9, 0x21, 0x8e, 0x95, 0xb8, 0xe7,
0xf4, 0x6e, 0xa0, 0xbd, 0xf5, 0xa8, 0x5c, 0x83, 0x3a, 0xa0, 0x69, 0x31, 0x81, 0x21, 0xe5, 0xe2,
0x81, 0xcd, 0x81, 0x0e, 0x7a, 0x50, 0x8e, 0x48, 0x1d, 0x89, 0xfb, 0xd7, 0xbb, 0xf2, 0x30, 0x27,
0x97, 0x7b, 0x01, 0xfd, 0x62, 0x06, 0x85, 0x38, 0x60, 0x6c, 0x5f, 0xda, 0xbd, 0x8e, 0x11, 0x95,
0xe2, 0xf5, 0x38, 0x0c, 0xf9, 0xfc, 0x6c, 0x7e, 0x10, 0xeb, 0x25, 0x75, 0x1e, 0x5d, 0xf7, 0x07,
0xe5, 0x3f, 0xe8, 0x1f, 0x04, 0xdd, 0x81, 0x6b, 0xb2, 0xf6, 0x49, 0x92, 0x3f, 0x5b, 0x38, 0xf0,
0xef, 0x81, 0xae, 0xe3, 0xdd, 0x3c, 0x94, 0x29, 0x49, 0x11, 0xfc, 0x0e, 0xaa, 0x7f, 0x00, 0x16,
0xeb, 0x70, 0x69, 0xbf, 0x1f, 0x42, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_dimension_xpm[1] = {{ png, sizeof( png ), "delete_dimension_xpm" }};
//EOF
+71
View File
@@ -0,0 +1,71 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x5e, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xd5, 0x94, 0x59, 0x48, 0x54,
0x61, 0x14, 0xc7, 0xdd, 0x18, 0x9b, 0xdc, 0x77, 0x67, 0xdc, 0x37, 0x94, 0x08, 0x35, 0xd2, 0x97,
0x7c, 0x8a, 0x82, 0x16, 0x7d, 0xb2, 0x14, 0xd1, 0x54, 0x88, 0x32, 0x49, 0x2d, 0x24, 0x0a, 0xa4,
0xa4, 0x1e, 0x0a, 0xa2, 0x87, 0x1e, 0x2a, 0x8c, 0xe8, 0xa9, 0x90, 0xd2, 0x0a, 0x53, 0x06, 0xea,
0x35, 0x0a, 0x69, 0x1b, 0x88, 0x74, 0xc4, 0x10, 0x1a, 0x17, 0x94, 0x12, 0x5a, 0x66, 0x51, 0x1a,
0xab, 0xe9, 0xf4, 0x3f, 0xb7, 0x73, 0xe3, 0x7a, 0x99, 0xd1, 0x1c, 0x9f, 0xfa, 0xe0, 0xcf, 0x5c,
0xce, 0x77, 0xbf, 0xf3, 0xbb, 0xe7, 0x9c, 0xff, 0x37, 0x41, 0x41, 0x01, 0x2c, 0x22, 0x32, 0x2c,
0x2d, 0x2d, 0xdd, 0x1d, 0x1d, 0x1d, 0x75, 0xe1, 0xb9, 0x56, 0xb7, 0x67, 0x9e, 0x9f, 0x9f, 0x7f,
0x3b, 0x39, 0x39, 0x39, 0x8d, 0xe7, 0xcd, 0x41, 0x81, 0x2e, 0x86, 0x78, 0x3c, 0x1e, 0x4b, 0x75,
0x55, 0x15, 0x85, 0x85, 0x86, 0x52, 0x7f, 0x7f, 0xbf, 0x17, 0xb1, 0x3a, 0x15, 0x32, 0x33, 0x33,
0x63, 0x2f, 0xca, 0xc9, 0xa1, 0x94, 0xb8, 0x38, 0x1a, 0x19, 0x19, 0xf9, 0x1c, 0x10, 0x4c, 0x0b,
0xd9, 0x12, 0x13, 0x43, 0xb7, 0xcc, 0x66, 0x8a, 0x34, 0x18, 0x54, 0x58, 0x87, 0x0a, 0x69, 0x4e,
0x4c, 0xa4, 0x33, 0xc9, 0xc9, 0x81, 0xc3, 0x70, 0xa0, 0xbb, 0xa1, 0xa6, 0x86, 0x4a, 0x01, 0x99,
0xcb, 0xcf, 0xa7, 0xc5, 0x82, 0x02, 0x1a, 0x34, 0x99, 0x14, 0x58, 0x4f, 0x4f, 0x0f, 0x15, 0x65,
0x67, 0x53, 0x13, 0x92, 0xbb, 0x00, 0x5b, 0xc0, 0xbe, 0x0a, 0x9b, 0x9a, 0x9a, 0x9a, 0x5e, 0x2b,
0xa8, 0xe3, 0x64, 0x67, 0x27, 0x65, 0x45, 0x46, 0xd2, 0x38, 0x92, 0x2e, 0x20, 0xa1, 0x3b, 0x23,
0x83, 0x1e, 0x26, 0x24, 0xd0, 0x06, 0xb4, 0xb1, 0x11, 0x1f, 0xe0, 0x40, 0x95, 0x1c, 0x63, 0x58,
0x33, 0xe2, 0x5c, 0x21, 0xcf, 0x6c, 0xad, 0xa0, 0x60, 0xaf, 0xd7, 0x7b, 0xed, 0x78, 0x7b, 0xbb,
0x02, 0x1b, 0x43, 0x52, 0x17, 0x2a, 0x72, 0xe2, 0xcb, 0xc7, 0xf1, 0xe5, 0x0e, 0xb4, 0xcc, 0x95,
0x92, 0x42, 0x8e, 0xb4, 0x34, 0xa5, 0x32, 0xae, 0x90, 0xdb, 0xc9, 0xb3, 0x0b, 0x64, 0x4e, 0x7f,
0x60, 0x6d, 0x6d, 0x94, 0x15, 0x11, 0x41, 0x36, 0x24, 0x77, 0xc4, 0xc7, 0x93, 0x23, 0x3a, 0x9a,
0x1c, 0xb1, 0xb1, 0xf4, 0x35, 0x29, 0x49, 0xa9, 0x6c, 0x5d, 0x10, 0x0d, 0x2c, 0x6d, 0x6e, 0x6e,
0xce, 0x15, 0x8b, 0xaa, 0xce, 0x43, 0x0a, 0x20, 0x2a, 0x4a, 0xf9, 0x1d, 0x97, 0x36, 0xf2, 0xcc,
0xb8, 0xd5, 0xeb, 0x81, 0x98, 0x67, 0x67, 0x67, 0xdf, 0x6f, 0xca, 0xcb, 0xa3, 0x46, 0x06, 0xa0,
0x55, 0x4e, 0x24, 0xe7, 0xaa, 0x9c, 0xdc, 0xba, 0xd4, 0x54, 0x1a, 0xc4, 0x2f, 0x1b, 0xa4, 0xb7,
0xb7, 0xf7, 0xaf, 0xf5, 0xf5, 0x2b, 0x0a, 0xda, 0xaa, 0xd3, 0x46, 0x0d, 0xc4, 0xa4, 0x5a, 0xb8,
0x89, 0x13, 0xf3, 0xd0, 0x31, 0x27, 0x07, 0x60, 0x17, 0x50, 0xd1, 0x18, 0x66, 0xe5, 0x4e, 0x4f,
0x27, 0x77, 0x56, 0x16, 0x0d, 0x2e, 0xb7, 0xfe, 0xb2, 0x4b, 0xcd, 0xbd, 0x5c, 0xe2, 0x7c, 0x3a,
0x1d, 0xd2, 0x80, 0x2e, 0x6f, 0x2b, 0x2b, 0xa3, 0xdd, 0x98, 0x81, 0x0b, 0xf6, 0x5d, 0xc0, 0x1c,
0x9c, 0x99, 0x99, 0xd4, 0x84, 0xca, 0x62, 0xd0, 0x42, 0x9e, 0xd9, 0x18, 0x40, 0x0b, 0xa8, 0x76,
0xb1, 0xb0, 0x50, 0xb9, 0x67, 0x61, 0x21, 0x21, 0x64, 0xb3, 0xd9, 0x9c, 0x5a, 0x90, 0x09, 0xf2,
0xf8, 0x00, 0x3d, 0xd6, 0x80, 0xf6, 0xf6, 0xf5, 0xf5, 0x79, 0x23, 0xc3, 0xc3, 0xc9, 0x82, 0x84,
0x0c, 0xe3, 0xca, 0x78, 0xf0, 0x13, 0x13, 0x13, 0xa4, 0x18, 0x84, 0xad, 0x9f, 0x9b, 0xab, 0xdc,
0x33, 0xbe, 0xd4, 0xd5, 0x95, 0x95, 0xc4, 0x7f, 0x57, 0xfa, 0xd6, 0x99, 0xa4, 0x5d, 0x33, 0x1a,
0x10, 0x57, 0x19, 0xab, 0x81, 0xd5, 0xab, 0xb0, 0x5d, 0xec, 0x2e, 0xb4, 0x71, 0x78, 0x78, 0x98,
0x4a, 0x4a, 0x4a, 0xae, 0xda, 0xed, 0xf6, 0x7e, 0xd5, 0xfa, 0xa5, 0x70, 0x21, 0x43, 0xac, 0x56,
0xeb, 0x04, 0xff, 0xa3, 0xf8, 0x9a, 0x53, 0x81, 0x00, 0x3e, 0x42, 0xcf, 0xe4, 0xb9, 0x49, 0x67,
0x08, 0x05, 0x56, 0x51, 0x5e, 0x4e, 0xf8, 0x63, 0xfd, 0x62, 0x46, 0x8b, 0x10, 0x6e, 0x55, 0xad,
0xcf, 0x97, 0xfa, 0x40, 0x6d, 0x2d, 0x0d, 0x0c, 0x0c, 0x90, 0xd1, 0x68, 0x1c, 0xf2, 0x67, 0xac,
0x2e, 0x49, 0x7e, 0x1d, 0x3a, 0x26, 0xcf, 0x43, 0x3e, 0xdc, 0xb7, 0x87, 0x67, 0x56, 0x5c, 0x5c,
0x7c, 0x49, 0xde, 0x69, 0x55, 0xef, 0x19, 0xdb, 0xda, 0x62, 0xb1, 0x0c, 0x19, 0x60, 0x06, 0x84,
0x6e, 0xfb, 0x03, 0xbd, 0x92, 0x83, 0x3b, 0xa1, 0x34, 0xe8, 0x97, 0xcc, 0x2e, 0xda, 0xcf, 0xfb,
0xdd, 0xf2, 0x7e, 0x2f, 0xd4, 0x02, 0xb5, 0x41, 0x37, 0xa0, 0x6f, 0xd0, 0x4f, 0xa8, 0xc2, 0xd7,
0xa1, 0x74, 0x49, 0xfc, 0x09, 0x0a, 0x93, 0xd8, 0x4b, 0x49, 0x54, 0xb7, 0x0a, 0xc8, 0x97, 0x5e,
0x68, 0xf2, 0x2c, 0x5b, 0x1d, 0xf2, 0xc2, 0x1b, 0xf9, 0xba, 0x16, 0x71, 0x1d, 0xc7, 0xee, 0x07,
0x00, 0x62, 0x3d, 0x80, 0x82, 0xf5, 0x87, 0x9e, 0xac, 0x70, 0x60, 0x11, 0x8a, 0x58, 0x01, 0xd4,
0xaa, 0xbb, 0xf8, 0xf5, 0x90, 0x5b, 0xf6, 0x76, 0x68, 0x0f, 0x24, 0x42, 0x3f, 0x56, 0xf9, 0xba,
0x7d, 0xff, 0x08, 0x52, 0xd7, 0x69, 0xd9, 0x3b, 0xab, 0x0d, 0x1e, 0x96, 0xe0, 0x3d, 0x1f, 0x07,
0xce, 0xc9, 0xde, 0x9d, 0x35, 0x82, 0x54, 0x07, 0x9f, 0x52, 0x03, 0x0d, 0xd0, 0x3b, 0x09, 0x3e,
0x87, 0x8e, 0x6a, 0x5e, 0xde, 0x0f, 0x3d, 0x92, 0x3d, 0xb7, 0x24, 0x0e, 0x95, 0xbd, 0x83, 0xd0,
0x6b, 0xd9, 0x7b, 0x2a, 0x6e, 0x63, 0xdd, 0x94, 0xd9, 0x7e, 0x97, 0xbd, 0xed, 0x6a, 0xb2, 0x0f,
0x3e, 0xda, 0xa4, 0xce, 0x63, 0xd2, 0xc7, 0x5e, 0xa9, 0x0c, 0x78, 0xb5, 0x56, 0xb3, 0x06, 0xb4,
0x66, 0xe8, 0x12, 0x2b, 0x5a, 0xe5, 0x1e, 0x5d, 0xd1, 0x54, 0x74, 0x42, 0xaa, 0xb4, 0x8a, 0xb8,
0x7d, 0x46, 0xd9, 0xbb, 0x28, 0xf6, 0xb7, 0xea, 0xc4, 0x39, 0xfa, 0xa0, 0x23, 0xfe, 0xec, 0xfd,
0xff, 0xaf, 0xdf, 0x05, 0xe7, 0x4a, 0x51, 0xc1, 0x6d, 0x5e, 0xec, 0x00, 0x00, 0x00, 0x00, 0x49,
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_field_xpm[1] = {{ png, sizeof( png ), "delete_field_xpm" }};
//EOF
+101
View File
@@ -0,0 +1,101 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x05, 0x38, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x8d, 0x95, 0x6d, 0x50, 0x54,
0x75, 0x14, 0xc6, 0x17, 0x16, 0x45, 0x90, 0x78, 0x11, 0x71, 0x44, 0x40, 0x91, 0x5d, 0x61, 0x18,
0xd8, 0x25, 0xf4, 0x03, 0xa9, 0x35, 0x18, 0x4d, 0xdf, 0xc2, 0x20, 0x35, 0xb3, 0x1c, 0x3f, 0x94,
0x4e, 0x33, 0xd9, 0xd4, 0x34, 0x8d, 0x43, 0x46, 0x4e, 0x6f, 0x4e, 0x63, 0x4e, 0x4d, 0x36, 0x35,
0x69, 0x9a, 0x68, 0x35, 0x59, 0x41, 0x96, 0xf9, 0x81, 0x58, 0xc5, 0x77, 0xe5, 0x45, 0x79, 0x87,
0x5d, 0x96, 0x17, 0x59, 0x75, 0x05, 0xd4, 0x15, 0xd8, 0x65, 0x41, 0x42, 0x83, 0xa7, 0xe7, 0xac,
0x77, 0xed, 0xb6, 0x2e, 0xe2, 0x7f, 0xe6, 0x37, 0xfc, 0xef, 0xbd, 0xdc, 0xf3, 0xdc, 0x73, 0xce,
0x73, 0xfe, 0xab, 0xd1, 0xfc, 0xb7, 0x36, 0x90, 0x6f, 0x7d, 0xd0, 0x6b, 0x26, 0x58, 0x00, 0xd6,
0xd6, 0xd5, 0xd5, 0xb9, 0x6f, 0xdf, 0xbe, 0x5d, 0xc4, 0xbd, 0x56, 0x75, 0xff, 0x91, 0x81, 0x81,
0x81, 0xa3, 0x66, 0xb3, 0xf9, 0x26, 0xf7, 0xd9, 0xbe, 0xef, 0x05, 0x92, 0x7f, 0xe4, 0xff, 0x7c,
0xd8, 0x3a, 0x81, 0xc8, 0xba, 0x7d, 0x45, 0x45, 0xe3, 0x81, 0x01, 0x01, 0x58, 0x9d, 0x9f, 0x8f,
0xd1, 0xd1, 0xd1, 0x9f, 0x45, 0x4c, 0x44, 0xfa, 0xfb, 0xfb, 0x2b, 0x97, 0x2c, 0x5c, 0x88, 0xd0,
0xa9, 0x53, 0x51, 0x5e, 0x5e, 0x3e, 0xc2, 0x7b, 0xcb, 0x7c, 0xdf, 0x7f, 0x81, 0x6c, 0x23, 0x36,
0x95, 0x50, 0x27, 0x09, 0xf0, 0x27, 0x32, 0x23, 0x24, 0x04, 0x7f, 0x25, 0x24, 0xe0, 0x89, 0x19,
0x33, 0xb0, 0x32, 0x37, 0x57, 0xc4, 0x7e, 0x71, 0xb9, 0x5c, 0x95, 0xd9, 0x59, 0x59, 0xc8, 0x8f,
0x8e, 0x46, 0x71, 0x5c, 0x1c, 0xa2, 0x42, 0x43, 0x71, 0xe4, 0xc8, 0x91, 0x11, 0x7f, 0x99, 0x85,
0x90, 0x41, 0x32, 0x4c, 0xda, 0x14, 0xb1, 0x2c, 0x95, 0xc8, 0xcc, 0xb2, 0xb2, 0xb2, 0x3b, 0xa1,
0x53, 0xa6, 0xe0, 0xec, 0xbc, 0x79, 0x18, 0x4e, 0x4e, 0x46, 0x6f, 0x62, 0x22, 0xb2, 0x22, 0x22,
0x3c, 0x99, 0x49, 0x26, 0xcf, 0x45, 0x45, 0x61, 0x80, 0xcf, 0x86, 0x74, 0x3a, 0x1c, 0x98, 0x33,
0xc7, 0x93, 0x19, 0xcb, 0xe8, 0xf0, 0x15, 0x5a, 0xa9, 0x04, 0xff, 0x95, 0xbc, 0xa7, 0xec, 0xbf,
0x50, 0x09, 0x05, 0xdb, 0x6c, 0xb6, 0x4e, 0x1d, 0xbf, 0x76, 0xd3, 0xac, 0x59, 0x18, 0x4a, 0x4a,
0x82, 0x7b, 0xee, 0x5c, 0x74, 0xc7, 0xc6, 0x22, 0x2b, 0x3c, 0x1c, 0x2b, 0x28, 0xd8, 0xcf, 0xbd,
0x3b, 0x3e, 0x1e, 0x4e, 0x8a, 0xad, 0x60, 0x66, 0x22, 0xee, 0x74, 0x3a, 0x8f, 0xfa, 0x0a, 0x95,
0x28, 0xc1, 0xf3, 0x88, 0x8e, 0x8c, 0x93, 0x1e, 0xa2, 0x6e, 0x76, 0x7c, 0x57, 0x57, 0x97, 0x4d,
0xc7, 0x60, 0x9b, 0x66, 0xce, 0xc4, 0x20, 0xbf, 0xda, 0x45, 0x51, 0x17, 0x83, 0x7a, 0xe0, 0xbe,
0x9f, 0xf7, 0x24, 0xb3, 0x25, 0x99, 0x99, 0x90, 0x9e, 0x49, 0xef, 0xd4, 0x22, 0x72, 0x71, 0x8b,
0xb8, 0xc8, 0x34, 0xe5, 0xde, 0x05, 0x45, 0x38, 0xc7, 0xa7, 0x4f, 0x1e, 0xb1, 0x24, 0x66, 0x56,
0xc8, 0x80, 0x22, 0xe0, 0x64, 0x46, 0x4e, 0x66, 0xe4, 0xa2, 0xb8, 0x64, 0x36, 0x91, 0x88, 0xac,
0x17, 0x95, 0xa0, 0x76, 0x95, 0xbd, 0x9b, 0x94, 0x7b, 0xbb, 0x7d, 0x84, 0xc4, 0x5d, 0x55, 0x8b,
0x19, 0x6c, 0x6d, 0x64, 0x24, 0x5c, 0x34, 0x84, 0x47, 0x88, 0x7b, 0x67, 0x4c, 0x8c, 0xa7, 0x67,
0xcf, 0xe7, 0xe5, 0x79, 0x0c, 0xa2, 0xb6, 0xbe, 0x77, 0x1d, 0xf6, 0x63, 0x6f, 0x2f, 0xfd, 0x24,
0xd8, 0x2b, 0xe2, 0x75, 0x57, 0x1e, 0xb3, 0x91, 0x9e, 0xb8, 0x18, 0xdc, 0x53, 0x36, 0xfe, 0x1d,
0x9c, 0x3d, 0x1b, 0xd7, 0x99, 0xe9, 0xe3, 0x7c, 0xb6, 0x6a, 0xf9, 0xf2, 0x7b, 0xd6, 0xf7, 0x8a,
0x44, 0x92, 0xbf, 0x95, 0x80, 0xdb, 0x7c, 0xb0, 0x2a, 0x62, 0xb9, 0xf2, 0x02, 0x33, 0x39, 0x2b,
0x0d, 0x96, 0x46, 0x8b, 0xbb, 0xa4, 0xf1, 0x22, 0x26, 0x99, 0xbd, 0xcb, 0xe0, 0x72, 0x3d, 0x44,
0x27, 0xf6, 0xd2, 0x28, 0x59, 0xbc, 0x16, 0x37, 0xca, 0x50, 0x7b, 0x87, 0xf5, 0x0d, 0x25, 0x58,
0x29, 0x89, 0x56, 0x65, 0x39, 0x95, 0x7c, 0xae, 0x3c, 0xfb, 0xbd, 0xb8, 0xb8, 0x58, 0x4f, 0xc6,
0xa7, 0x05, 0x05, 0xc1, 0x3c, 0x7f, 0xbe, 0xc7, 0x75, 0x22, 0x26, 0x8d, 0x97, 0x32, 0x26, 0xd1,
0x04, 0x62, 0x90, 0x21, 0xbd, 0x1e, 0xc3, 0x29, 0x29, 0x9e, 0x39, 0x93, 0xa1, 0xae, 0xad, 0xad,
0x95, 0x91, 0xd1, 0xec, 0xf1, 0x29, 0x93, 0x9b, 0x84, 0x2b, 0x42, 0x16, 0x9f, 0x67, 0x97, 0x99,
0xd5, 0x87, 0x5b, 0x36, 0x6f, 0xc6, 0xdc, 0xb0, 0x30, 0x34, 0x51, 0x6c, 0x35, 0x03, 0x4b, 0xe3,
0xfb, 0xfa, 0xfa, 0xaa, 0xc4, 0x20, 0x7a, 0x06, 0x7f, 0x93, 0xce, 0xab, 0x60, 0x56, 0x31, 0x1c,
0xd8, 0xfd, 0x1c, 0x6e, 0x39, 0xae, 0x24, 0x58, 0x81, 0x52, 0x36, 0x6f, 0xb0, 0x46, 0x95, 0xeb,
0xfe, 0x50, 0x1d, 0x4d, 0x63, 0xa4, 0x5c, 0xe9, 0xd3, 0x47, 0x85, 0x05, 0x05, 0x08, 0xd6, 0x6a,
0x3d, 0x73, 0xe2, 0x75, 0xd7, 0x3d, 0xeb, 0xb3, 0x47, 0x21, 0x1c, 0xea, 0x7d, 0x77, 0x45, 0xd6,
0xdd, 0x77, 0x86, 0x75, 0xe8, 0xf5, 0xc1, 0x4d, 0x06, 0x43, 0xd4, 0x44, 0xc8, 0x73, 0x95, 0xf3,
0x3e, 0x28, 0x29, 0x29, 0x19, 0x97, 0x9e, 0xa9, 0x2d, 0x2c, 0x62, 0x32, 0xd4, 0x72, 0x82, 0xf8,
0x15, 0xf1, 0xd4, 0xc9, 0x68, 0x7c, 0xa5, 0xd5, 0x68, 0xc4, 0x83, 0xb0, 0x18, 0x0c, 0x37, 0x5b,
0x0c, 0x86, 0xe2, 0x13, 0xa9, 0xa9, 0x8f, 0x39, 0x1c, 0x8e, 0x39, 0xfe, 0xec, 0x2b, 0x27, 0x88,
0x1c, 0x57, 0x13, 0x9d, 0xfc, 0x9a, 0x16, 0xa3, 0x71, 0x7d, 0x7b, 0x76, 0x36, 0x46, 0x2e, 0xd9,
0xe1, 0xee, 0xb4, 0xc3, 0xd9, 0x66, 0x47, 0x9f, 0xc5, 0x8e, 0x1b, 0xcd, 0x76, 0xf4, 0xd4, 0xdb,
0x71, 0xe5, 0xb4, 0x15, 0x5d, 0x3f, 0x99, 0xd0, 0xf6, 0xf2, 0xeb, 0x22, 0x38, 0x56, 0x9a, 0x92,
0xb2, 0x45, 0xb1, 0x7d, 0x80, 0x66, 0xb2, 0x65, 0x59, 0xb4, 0x28, 0xb6, 0xd5, 0x60, 0x28, 0xe2,
0x57, 0xee, 0x37, 0x1b, 0x0c, 0x15, 0x1d, 0x39, 0x39, 0xb8, 0x75, 0x0b, 0x70, 0xbb, 0x81, 0x81,
0x01, 0xc0, 0xe1, 0x00, 0x7a, 0x7b, 0x81, 0xab, 0x57, 0x81, 0x4b, 0x97, 0x80, 0xce, 0x4e, 0xc0,
0x6a, 0x05, 0xcc, 0xdb, 0x7f, 0x00, 0x2b, 0x30, 0xfe, 0x4e, 0x5c, 0xdc, 0xdb, 0xca, 0x61, 0xfc,
0xe0, 0x65, 0x4e, 0x4b, 0x9b, 0xcd, 0x4c, 0xf6, 0x1c, 0x4f, 0x4d, 0x3d, 0x58, 0x91, 0x96, 0xd6,
0xd8, 0xfe, 0x64, 0x0e, 0x06, 0x07, 0xc1, 0x06, 0x03, 0x37, 0x6e, 0x00, 0x3d, 0x3d, 0x80, 0xdd,
0x0e, 0xd8, 0x6c, 0x40, 0x47, 0x07, 0xd0, 0xda, 0x0a, 0x34, 0x37, 0x03, 0x0d, 0x0d, 0x40, 0xcb,
0x9a, 0x57, 0x71, 0x38, 0x39, 0xb9, 0x9b, 0x61, 0x16, 0x93, 0x20, 0xcd, 0x43, 0x2c, 0x49, 0xff,
0xa5, 0xc2, 0xb8, 0xb8, 0xdf, 0x44, 0xa8, 0xaf, 0x0f, 0xb8, 0x7e, 0x1d, 0xe8, 0xee, 0x06, 0xae,
0x5c, 0x01, 0xba, 0xba, 0x80, 0xf6, 0x76, 0xc0, 0x62, 0x01, 0x9a, 0x9a, 0x80, 0xfa, 0x7a, 0xe0,
0xc2, 0x05, 0xa0, 0xee, 0x93, 0x03, 0x52, 0xc2, 0xf1, 0x67, 0x22, 0x22, 0xf6, 0x1c, 0xd2, 0xe9,
0x96, 0xb4, 0x66, 0x64, 0x24, 0x4f, 0x26, 0x24, 0x35, 0x0e, 0x61, 0x46, 0x1b, 0xdb, 0x96, 0xe5,
0xe0, 0xda, 0xb5, 0xbb, 0xa5, 0xba, 0xcc, 0xa9, 0xb9, 0x78, 0x11, 0x68, 0x6b, 0x63, 0xa9, 0xcc,
0x40, 0x63, 0x23, 0x83, 0xd7, 0x01, 0xe7, 0xcf, 0x03, 0x15, 0x15, 0x40, 0xd5, 0xce, 0xd3, 0xff,
0x33, 0x0a, 0xcb, 0x6f, 0x56, 0x0e, 0x67, 0xed, 0x03, 0xd5, 0x68, 0xe1, 0x0d, 0x22, 0x24, 0xa5,
0x52, 0xf7, 0xa3, 0xa5, 0xe5, 0x6e, 0xa9, 0x6a, 0x6b, 0x81, 0xea, 0x6a, 0xe0, 0xdc, 0x39, 0xe0,
0xd4, 0x29, 0xee, 0xdf, 0xff, 0x11, 0xcd, 0x34, 0x45, 0x4c, 0x50, 0xd0, 0xc1, 0x70, 0xad, 0x76,
0xe7, 0xf4, 0xc0, 0xc0, 0x1d, 0x0c, 0xf3, 0x31, 0x49, 0x54, 0x4e, 0x9c, 0x89, 0x85, 0xac, 0xd9,
0x39, 0x7e, 0xfb, 0x51, 0x53, 0xc3, 0x0c, 0xaa, 0x80, 0xb3, 0x9c, 0x9a, 0x93, 0x27, 0x81, 0xe3,
0xe5, 0x63, 0x68, 0xcc, 0x5d, 0x8b, 0xe2, 0x05, 0x0b, 0xe4, 0xf7, 0xea, 0x7b, 0xf2, 0x2c, 0x59,
0x48, 0x8c, 0x64, 0xfa, 0x7d, 0x4e, 0xec, 0xc8, 0xcc, 0x8c, 0xb1, 0x66, 0x64, 0x6c, 0xb3, 0x64,
0x64, 0x7c, 0x6a, 0x36, 0x1a, 0xcb, 0x44, 0xc8, 0x5f, 0x3f, 0x2a, 0x39, 0xfb, 0x67, 0xce, 0x00,
0x27, 0x4e, 0x00, 0xc7, 0x8e, 0x8e, 0xe1, 0xfc, 0xc6, 0xed, 0x52, 0xaa, 0xb1, 0xa5, 0x61, 0x61,
0x26, 0x86, 0xf9, 0x92, 0xc4, 0x28, 0x86, 0xd0, 0xfa, 0xb5, 0x7b, 0x87, 0xd1, 0x18, 0x4f, 0x81,
0x3f, 0xab, 0xd2, 0xd2, 0x8e, 0xd5, 0xa4, 0xa7, 0xb7, 0x5b, 0x17, 0x2f, 0x85, 0x65, 0xaf, 0x09,
0xcd, 0xbb, 0x4d, 0x68, 0xdc, 0x65, 0x42, 0xfd, 0x37, 0x26, 0xd4, 0x7c, 0x65, 0x42, 0xf5, 0x0e,
0x13, 0x2a, 0x3f, 0x2b, 0x45, 0x75, 0xc1, 0x6e, 0x34, 0x3d, 0x9d, 0x8f, 0x06, 0x83, 0xe1, 0xce,
0x9a, 0xe8, 0xe8, 0x73, 0x0c, 0x21, 0x27, 0xf3, 0x2a, 0xef, 0xcf, 0xc8, 0x64, 0x4b, 0xe6, 0x60,
0xfd, 0x5b, 0xb1, 0xb1, 0x87, 0x1a, 0xd2, 0xd3, 0x47, 0xea, 0xd2, 0xd3, 0x47, 0xfd, 0x41, 0xb3,
0x0c, 0xd3, 0xce, 0x8e, 0xad, 0x09, 0x09, 0xe6, 0x79, 0xc1, 0xc1, 0x72, 0x0e, 0xee, 0x25, 0xaf,
0x91, 0xa8, 0x87, 0x1a, 0x5a, 0xaf, 0xeb, 0x48, 0x04, 0x79, 0x94, 0x7c, 0xad, 0x04, 0xf1, 0xc7,
0x77, 0x64, 0x17, 0x29, 0x24, 0x4f, 0x29, 0x27, 0xfd, 0xa4, 0x22, 0xff, 0x02, 0x58, 0x70, 0xe4,
0x4e, 0x94, 0xa5, 0x11, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
0x82,
};
const BITMAP_OPAQUE delete_glabel_xpm[1] = {{ png, sizeof( png ), "delete_glabel_xpm" }};
//EOF
+74
View File
@@ -0,0 +1,74 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x96, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0x5b, 0x48, 0x54,
0x61, 0x10, 0xc7, 0x67, 0x75, 0x4b, 0xcd, 0xfb, 0x7a, 0xab, 0x34, 0xef, 0xe2, 0x43, 0x59, 0x14,
0x04, 0x05, 0x11, 0xf5, 0xd0, 0x53, 0x45, 0x42, 0x05, 0x11, 0x6d, 0x0f, 0x51, 0x78, 0xe9, 0xa2,
0x8f, 0x99, 0x52, 0x92, 0x3e, 0x54, 0xae, 0x19, 0xbd, 0x48, 0x11, 0x85, 0x42, 0x08, 0x0b, 0x42,
0x62, 0x94, 0x26, 0xf8, 0xd0, 0xcb, 0xaa, 0x98, 0x4b, 0x22, 0x11, 0x78, 0xa1, 0x82, 0x96, 0x42,
0xdb, 0xf6, 0x66, 0x5e, 0xd2, 0x9d, 0xfe, 0x73, 0x3c, 0xa7, 0x0e, 0xb6, 0x5b, 0x69, 0xec, 0x07,
0xb3, 0xe7, 0x3b, 0xfb, 0x9d, 0x33, 0xbf, 0xf9, 0xcf, 0x37, 0xf3, 0x1d, 0xa2, 0x55, 0x0c, 0x66,
0xde, 0x06, 0xcb, 0x0f, 0xb2, 0x66, 0x84, 0xed, 0x85, 0x99, 0xe8, 0x7f, 0x06, 0x1c, 0x54, 0xf5,
0xf6, 0xf6, 0xfa, 0xed, 0x76, 0xfb, 0x3c, 0xe6, 0xc7, 0x97, 0xad, 0x45, 0xfa, 0xfd, 0xfe, 0xe7,
0xad, 0xad, 0xad, 0x3c, 0x35, 0x35, 0xf5, 0x11, 0xf7, 0x05, 0xab, 0x85, 0x54, 0x5b, 0xad, 0x56,
0x36, 0x86, 0x87, 0x73, 0x7c, 0x74, 0x34, 0xf7, 0xf5, 0xf5, 0x2d, 0x68, 0x30, 0x15, 0xd2, 0x55,
0x5e, 0x5a, 0xca, 0x72, 0xbb, 0x7d, 0xcb, 0x16, 0x9e, 0x9c, 0x9c, 0x74, 0xac, 0x18, 0xa6, 0x87,
0x5c, 0x4f, 0x49, 0x61, 0x73, 0x62, 0xa2, 0x1e, 0x66, 0xd6, 0x20, 0x31, 0x6b, 0xd6, 0x70, 0xdb,
0xc6, 0x8d, 0xbc, 0x19, 0x6b, 0x3b, 0x8a, 0x8a, 0x56, 0x06, 0xc3, 0x83, 0x27, 0xda, 0xdb, 0xdb,
0x15, 0x48, 0x1d, 0x20, 0xd3, 0x85, 0x85, 0xec, 0x2d, 0x28, 0x60, 0x73, 0x7c, 0xbc, 0x06, 0x63,
0x0d, 0xf2, 0x62, 0xfd, 0x7a, 0xf6, 0xe5, 0xe5, 0xf1, 0x7b, 0x98, 0x06, 0x73, 0x3a, 0x9d, 0x1f,
0x96, 0x3c, 0x35, 0xd0, 0x11, 0xb2, 0xd0, 0x45, 0xaa, 0x25, 0x63, 0x10, 0x50, 0x6d, 0x79, 0x59,
0x19, 0xc7, 0xc1, 0xd1, 0x50, 0x4e, 0x0e, 0xfb, 0x00, 0xf1, 0xe1, 0xea, 0xce, 0xcc, 0xe4, 0x53,
0xb1, 0xb1, 0x4a, 0x00, 0x02, 0xe9, 0x42, 0x10, 0xde, 0x4d, 0x9b, 0xd8, 0x9b, 0x9d, 0xad, 0xc0,
0x2a, 0x92, 0x92, 0x78, 0xad, 0xd1, 0xc8, 0x23, 0x23, 0x23, 0x8b, 0x44, 0xb7, 0xc9, 0x04, 0xc8,
0x02, 0x8c, 0xa9, 0x91, 0x1e, 0x93, 0x95, 0xc2, 0x03, 0x80, 0x12, 0x67, 0x67, 0x67, 0xed, 0x47,
0x0e, 0x1d, 0xe2, 0xb4, 0xa8, 0x28, 0x7e, 0x25, 0xce, 0x00, 0xf1, 0x20, 0x45, 0xae, 0xb4, 0x34,
0xbe, 0x82, 0xc8, 0xbb, 0x91, 0x4a, 0x0f, 0xe6, 0xf2, 0x9f, 0xac, 0x55, 0xe1, 0x5e, 0x20, 0x9d,
0x9d, 0x9d, 0x78, 0x9d, 0x2b, 0x48, 0x71, 0x6c, 0x21, 0x9b, 0x02, 0x5a, 0xb2, 0x87, 0xf8, 0x35,
0x04, 0x80, 0x99, 0xe6, 0xe6, 0xe6, 0xec, 0xc5, 0x87, 0x0f, 0x73, 0x4a, 0x64, 0x24, 0xf7, 0xa5,
0xa6, 0x2a, 0x8e, 0xdd, 0xc9, 0xc9, 0xec, 0x82, 0x53, 0x97, 0xc9, 0xa4, 0xcc, 0x3d, 0x48, 0xdd,
0xe5, 0xb8, 0x38, 0x05, 0xd2, 0xd1, 0xd1, 0x21, 0x90, 0xca, 0x5f, 0x5e, 0x9a, 0x28, 0x01, 0x80,
0xc1, 0x9f, 0xb0, 0x46, 0x7a, 0x10, 0x0c, 0x06, 0x65, 0x43, 0xa2, 0x2c, 0x35, 0x22, 0x82, 0x87,
0xe1, 0x5c, 0x20, 0x5f, 0x91, 0x3e, 0x17, 0xf6, 0xcb, 0x8d, 0x54, 0x5d, 0xc3, 0x5c, 0xa7, 0xa4,
0xf2, 0xf7, 0x8d, 0xb8, 0x4b, 0x29, 0x80, 0x8c, 0xe8, 0x94, 0xdd, 0x09, 0x00, 0x92, 0x12, 0xee,
0x2e, 0x2b, 0x29, 0x51, 0xf6, 0xc4, 0x26, 0x4a, 0x12, 0x12, 0xd8, 0x05, 0x05, 0x72, 0x15, 0x45,
0x65, 0x00, 0x49, 0x81, 0x0c, 0x0c, 0x0c, 0x2c, 0xe2, 0xf9, 0x63, 0x81, 0xcb, 0xab, 0x81, 0x52,
0x61, 0x6f, 0x74, 0x30, 0xcb, 0x32, 0x48, 0xd7, 0x85, 0xf3, 0xe7, 0x79, 0x1d, 0x22, 0x7e, 0x8a,
0xe8, 0xdd, 0x48, 0x9f, 0xa8, 0x70, 0x6b, 0x69, 0x93, 0x54, 0xa6, 0xa7, 0xf3, 0x19, 0xb5, 0x1a,
0x6d, 0x36, 0xdb, 0x42, 0x70, 0xd8, 0x4d, 0xca, 0x80, 0xfb, 0x71, 0x1d, 0xac, 0x46, 0xdf, 0x8c,
0xa2, 0xa4, 0x1b, 0xfb, 0xe0, 0xcd, 0xc8, 0x60, 0xcf, 0x86, 0x0d, 0x8a, 0xf3, 0x66, 0x28, 0x7a,
0x25, 0x20, 0xb5, 0x10, 0x3c, 0xa8, 0xc8, 0x53, 0x50, 0x98, 0x10, 0x13, 0xc3, 0xfd, 0xfd, 0xfd,
0x7f, 0x80, 0xdd, 0xa0, 0x4c, 0x00, 0xde, 0x69, 0xb0, 0xb6, 0xb7, 0x6d, 0xcf, 0x6a, 0xaa, 0xab,
0x39, 0x5a, 0xfa, 0x04, 0x00, 0x29, 0x6d, 0x6f, 0x56, 0x96, 0x02, 0x93, 0x8d, 0x17, 0xc1, 0xb2,
0x67, 0x83, 0x00, 0xcb, 0x9a, 0x2f, 0x3f, 0x9f, 0xbd, 0xe8, 0xb5, 0x93, 0x48, 0xad, 0xc0, 0xc6,
0xc6, 0xc6, 0x66, 0x82, 0x77, 0xe9, 0x2d, 0x2a, 0x00, 0xc4, 0x21, 0xa0, 0xd2, 0x9e, 0x52, 0x6e,
0x6e, 0x6e, 0x66, 0x63, 0x58, 0x18, 0x3f, 0x12, 0x67, 0x70, 0xe4, 0xcb, 0xcd, 0xe5, 0x2a, 0x44,
0x2d, 0x1b, 0x2f, 0xcd, 0xac, 0x14, 0x08, 0xaa, 0x71, 0x08, 0x01, 0x48, 0x43, 0x4f, 0xa2, 0xd7,
0xf6, 0x21, 0x88, 0x6c, 0xa4, 0xd2, 0xe1, 0x70, 0x38, 0xff, 0x7c, 0x24, 0xdc, 0xa4, 0x42, 0x80,
0x3e, 0x19, 0x2c, 0x06, 0xbe, 0xf7, 0xfa, 0x1e, 0x37, 0x35, 0x35, 0x71, 0x38, 0x60, 0x0f, 0x00,
0xab, 0x52, 0x9b, 0x51, 0x2d, 0xe1, 0x1a, 0x94, 0xfe, 0x90, 0x56, 0xfa, 0x2f, 0x01, 0xdb, 0x0f,
0x48, 0x26, 0x9e, 0x1b, 0x1d, 0x1d, 0xf5, 0x62, 0x7d, 0xd7, 0xdf, 0xcf, 0x9f, 0x06, 0xda, 0x0a,
0xd8, 0x17, 0x81, 0xdd, 0x1f, 0xbe, 0xef, 0x17, 0x58, 0x98, 0xc1, 0xf0, 0x5b, 0x09, 0xeb, 0x4b,
0x1f, 0x7d, 0xa1, 0x28, 0x19, 0x1f, 0x1f, 0xff, 0x47, 0x88, 0x36, 0x1a, 0x69, 0x3b, 0x60, 0x4e,
0x55, 0x99, 0xbf, 0xa5, 0xa5, 0x85, 0x7b, 0x7a, 0x7a, 0xfc, 0xcb, 0xfb, 0x44, 0x83, 0xd5, 0xd5,
0xd5, 0xf1, 0xc4, 0xc4, 0x84, 0x67, 0x65, 0x90, 0x5f, 0xca, 0x76, 0x03, 0xe6, 0x15, 0x58, 0xf1,
0x93, 0xe2, 0x85, 0x7a, 0x5b, 0xfd, 0x95, 0x20, 0xe7, 0x62, 0x2c, 0xec, 0x34, 0x2c, 0x6f, 0xf5,
0x5f, 0x3d, 0x0b, 0xed, 0x81, 0xf9, 0xd4, 0x6a, 0x9c, 0x03, 0xfc, 0x20, 0x85, 0x6c, 0x58, 0xe8,
0x00, 0x6c, 0x46, 0x85, 0x7d, 0x43, 0x5a, 0xf7, 0x87, 0x0e, 0xb6, 0xf4, 0x59, 0x99, 0x57, 0xcf,
0xc5, 0x69, 0x5c, 0xf7, 0x86, 0x0e, 0xd6, 0x48, 0x47, 0x01, 0xf8, 0xae, 0x2a, 0x73, 0xc3, 0x76,
0x86, 0x32, 0x8d, 0x66, 0xd8, 0xa2, 0x0a, 0xfb, 0x8a, 0x26, 0xdf, 0x11, 0xca, 0x34, 0x9e, 0x03,
0xc4, 0xaf, 0xc2, 0x3e, 0xe3, 0x43, 0x9a, 0x1f, 0x4a, 0xd8, 0x25, 0xdd, 0x21, 0x7c, 0x95, 0x42,
0x3a, 0x2c, 0x74, 0x16, 0x66, 0x85, 0x65, 0x05, 0x5a, 0xfe, 0x01, 0x70, 0xc0, 0xa2, 0x23, 0x6c,
0x9d, 0x3b, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_line_xpm[1] = {{ png, sizeof( png ), "delete_line_xpm" }};
//EOF
+82
View File
@@ -0,0 +1,82 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0x14, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0x96, 0x6d, 0x4c, 0x53,
0x67, 0x14, 0xc7, 0xbb, 0x2d, 0x59, 0xd4, 0x28, 0x82, 0x28, 0xc8, 0x14, 0x04, 0x14, 0x89, 0xcb,
0x36, 0x8d, 0x46, 0xb2, 0x19, 0xa3, 0x41, 0xb7, 0xf9, 0x36, 0x67, 0xdb, 0x5b, 0x6c, 0xa9, 0xa5,
0xbc, 0x88, 0x2e, 0x6c, 0x85, 0xd1, 0x25, 0x53, 0x63, 0x82, 0x12, 0x3f, 0x38, 0x70, 0xdf, 0xbb,
0xe0, 0x07, 0x12, 0x48, 0x96, 0x18, 0x20, 0x8b, 0x2c, 0xe1, 0x23, 0x0e, 0x4a, 0x20, 0x34, 0x71,
0x69, 0xa5, 0x05, 0x16, 0x02, 0x99, 0x6c, 0xbc, 0x24, 0x83, 0xb6, 0xf4, 0xcd, 0x25, 0x2c, 0xe1,
0xec, 0xfc, 0x1f, 0xb9, 0xf5, 0x82, 0xb6, 0x10, 0x4d, 0xfc, 0xe0, 0x4d, 0xfe, 0xe9, 0xed, 0x39,
0xcf, 0x3d, 0xbf, 0xfb, 0x9c, 0x97, 0x7b, 0xaf, 0x4a, 0xf5, 0x12, 0x07, 0x11, 0x7d, 0x34, 0x31,
0x31, 0xf1, 0xd7, 0xcc, 0xcc, 0x8c, 0x87, 0xcf, 0x33, 0x96, 0xf9, 0xf6, 0xb2, 0xef, 0xef, 0xd9,
0xd9, 0x59, 0x37, 0x9f, 0xa7, 0xab, 0x5e, 0xf6, 0x00, 0x64, 0x68, 0x68, 0xc8, 0xf7, 0xde, 0xe6,
0xcd, 0xb4, 0x27, 0x3b, 0x9b, 0x26, 0x27, 0x27, 0x1f, 0xcb, 0x30, 0x40, 0x06, 0x07, 0x07, 0xfd,
0x69, 0xc9, 0xc9, 0xf4, 0xfe, 0xce, 0x9d, 0xf0, 0xfd, 0x19, 0x13, 0xa6, 0x56, 0xab, 0x13, 0x25,
0x49, 0xfa, 0x54, 0x96, 0x56, 0xab, 0xfd, 0x18, 0xf6, 0x92, 0x92, 0x92, 0x35, 0xcd, 0xcd, 0xcd,
0x97, 0x38, 0x50, 0x10, 0x90, 0x6f, 0x58, 0xd2, 0xa6, 0x4d, 0x02, 0x36, 0x3e, 0x3e, 0x3e, 0xe5,
0x70, 0x38, 0xac, 0x1e, 0x8f, 0x27, 0x08, 0x48, 0x25, 0x4b, 0x93, 0x94, 0x14, 0x1f, 0xa6, 0xd3,
0xeb, 0x2a, 0x8f, 0x5b, 0x4e, 0x47, 0xf2, 0x6a, 0xf2, 0x7d, 0x90, 0xc6, 0xa0, 0x8d, 0x14, 0x14,
0x14, 0xbc, 0x53, 0x51, 0x51, 0x71, 0xca, 0xe5, 0x7e, 0xb4, 0x00, 0x88, 0x65, 0xcb, 0x16, 0x8a,
0xe4, 0xe6, 0xd2, 0x1c, 0x07, 0x92, 0x12, 0x13, 0x69, 0x4f, 0x56, 0x16, 0x75, 0x77, 0x77, 0x93,
0x80, 0x30, 0x20, 0xcc, 0xf0, 0xc0, 0xae, 0x5d, 0x51, 0x18, 0xd2, 0xf8, 0x1c, 0x48, 0x2a, 0x90,
0xbe, 0xcd, 0xbe, 0x9b, 0x47, 0x2a, 0x47, 0x96, 0xd0, 0x99, 0xb2, 0x73, 0xb3, 0x00, 0x59, 0xad,
0xd6, 0xb3, 0x0f, 0x9d, 0xbf, 0x2f, 0x6c, 0x58, 0xbb, 0x96, 0xee, 0xa4, 0xa6, 0x52, 0x98, 0x03,
0x85, 0x33, 0x33, 0xc9, 0x9f, 0x9e, 0x4e, 0xda, 0x84, 0x04, 0x42, 0xe6, 0x2c, 0xfc, 0x1b, 0xda,
0xb6, 0x8d, 0x42, 0x19, 0x19, 0x02, 0x56, 0xc9, 0x37, 0x05, 0x38, 0xea, 0xb9, 0x6a, 0x90, 0x4e,
0xa7, 0x3b, 0x6e, 0xf9, 0xf9, 0x4a, 0xa8, 0xd3, 0xfe, 0x80, 0x12, 0x18, 0xf6, 0x23, 0x07, 0x09,
0x31, 0x24, 0x98, 0x96, 0x46, 0xde, 0x94, 0x14, 0x6a, 0x63, 0x48, 0x80, 0x77, 0x1a, 0xdc, 0xba,
0x95, 0x42, 0xdb, 0xb7, 0x8b, 0x9d, 0x01, 0x82, 0x9a, 0xa1, 0x76, 0x51, 0x40, 0x71, 0x71, 0xf1,
0xe5, 0xf2, 0xf2, 0xf2, 0x6e, 0x53, 0x91, 0x69, 0x54, 0x09, 0x3a, 0x7b, 0x51, 0x3d, 0xcf, 0x76,
0x3b, 0xfb, 0x1f, 0x1d, 0xac, 0xcd, 0xff, 0xef, 0xb3, 0x3f, 0x8a, 0xe8, 0x41, 0xcf, 0x6f, 0x02,
0x56, 0xcf, 0x69, 0x0b, 0x30, 0x64, 0x8e, 0x83, 0xce, 0x6d, 0xdc, 0x48, 0x73, 0x5c, 0x33, 0xfc,
0xff, 0x8e, 0xcf, 0x53, 0xd9, 0xe6, 0x74, 0x3a, 0x9f, 0x2c, 0x81, 0xe0, 0x28, 0x2b, 0x2b, 0xfb,
0xa5, 0xb5, 0xb5, 0x95, 0x6c, 0x3f, 0xd9, 0x48, 0x09, 0xd2, 0x7d, 0xad, 0xa7, 0xfe, 0xfe, 0x7e,
0x6a, 0x69, 0x69, 0xa1, 0xc3, 0xb7, 0x4f, 0x0a, 0x9b, 0xe5, 0xf1, 0x4d, 0x6a, 0x6a, 0x6a, 0xa2,
0xb7, 0x38, 0x5d, 0x8e, 0x45, 0x88, 0x7f, 0xfd, 0x7a, 0x01, 0x6c, 0x63, 0x38, 0xd2, 0x88, 0x9a,
0x35, 0x36, 0x36, 0xf6, 0x3d, 0x97, 0x32, 0x80, 0xba, 0xba, 0xba, 0xe8, 0x7e, 0xfb, 0x7d, 0xd2,
0x7f, 0x65, 0x24, 0x43, 0xd5, 0x05, 0xa1, 0xa2, 0x4b, 0x66, 0x74, 0x8e, 0x80, 0x15, 0x96, 0x5f,
0xa0, 0x6b, 0xf5, 0xd7, 0xc9, 0xe9, 0x72, 0x92, 0xe8, 0xbc, 0xc5, 0x74, 0x89, 0x1d, 0xb1, 0x02,
0x6c, 0xf3, 0x73, 0xea, 0xf4, 0x0c, 0xce, 0xe5, 0xfa, 0x0d, 0x0f, 0x0f, 0x47, 0x96, 0xcf, 0x59,
0x14, 0x34, 0x35, 0x35, 0x15, 0x53, 0x3c, 0xa0, 0xc4, 0x33, 0x14, 0xed, 0xae, 0x20, 0x17, 0x1e,
0x35, 0x01, 0xcc, 0xc1, 0x69, 0xc3, 0x39, 0x6c, 0xfe, 0x1d, 0x3b, 0x48, 0x62, 0xff, 0xf2, 0x39,
0x53, 0x2d, 0xce, 0x49, 0x1b, 0xcf, 0xc9, 0x42, 0x2c, 0xc8, 0xf4, 0xf4, 0x34, 0x8d, 0x8e, 0x8e,
0x0a, 0x48, 0x15, 0xdf, 0x79, 0x98, 0x5b, 0x1a, 0xdd, 0x85, 0x2e, 0xb3, 0xf0, 0x0e, 0x90, 0xc6,
0x3b, 0x1c, 0x3c, 0xc4, 0x90, 0x30, 0xb7, 0x74, 0x20, 0x27, 0x27, 0x3a, 0x67, 0xdc, 0xde, 0x9e,
0x67, 0xdd, 0x26, 0x49, 0x39, 0x66, 0xb3, 0xb9, 0x93, 0x61, 0xff, 0xc6, 0x02, 0x0d, 0x0c, 0x0c,
0x50, 0xc2, 0xba, 0x75, 0x54, 0x2f, 0xb7, 0x37, 0x5a, 0x78, 0xb1, 0xbb, 0x50, 0x33, 0xd1, 0x8d,
0x98, 0xb1, 0xdd, 0xbb, 0xc5, 0x9c, 0x61, 0xa8, 0x91, 0x62, 0xde, 0xd5, 0xf8, 0x92, 0xf4, 0x19,
0x0c, 0x86, 0xcc, 0xea, 0xea, 0xea, 0x99, 0x58, 0xbb, 0xf2, 0x7a, 0xbd, 0xd4, 0xdb, 0xdb, 0xfb,
0x14, 0xc6, 0x69, 0xaa, 0x62, 0x00, 0x20, 0x48, 0x67, 0x20, 0x10, 0xa0, 0x9e, 0x9e, 0x1e, 0x01,
0xc3, 0x9c, 0x59, 0x00, 0x79, 0xea, 0xf3, 0xe1, 0xb1, 0x15, 0x85, 0x68, 0x34, 0x9a, 0x14, 0xde,
0xd1, 0xbd, 0x86, 0x86, 0x86, 0x48, 0xbc, 0x3a, 0x29, 0x61, 0x32, 0x04, 0xb5, 0x93, 0x7d, 0x80,
0x61, 0xa8, 0xb1, 0x13, 0x97, 0xcb, 0x35, 0xbf, 0x04, 0x82, 0xa3, 0xb4, 0xb4, 0xf4, 0x9e, 0xcd,
0x66, 0x9b, 0xe7, 0x29, 0x8e, 0xdb, 0x10, 0x72, 0x40, 0xb7, 0xdb, 0x4d, 0x63, 0x63, 0x63, 0x51,
0x88, 0xd2, 0x87, 0x14, 0x8f, 0x8c, 0x8c, 0x50, 0x5d, 0x5d, 0x5d, 0x67, 0xcc, 0xf6, 0x5e, 0x09,
0xa2, 0xac, 0x19, 0x14, 0xcb, 0x67, 0xb7, 0xdb, 0x09, 0x31, 0x5f, 0x19, 0xb4, 0x92, 0x10, 0x2b,
0x2e, 0xe8, 0xd9, 0xc0, 0x9a, 0x84, 0xe4, 0x81, 0xed, 0xeb, 0xeb, 0xa3, 0xf3, 0x26, 0x3d, 0x9d,
0xbf, 0x5c, 0x28, 0xa4, 0x37, 0x19, 0x44, 0x8a, 0xe0, 0xc3, 0x9a, 0x42, 0x5e, 0x0b, 0x19, 0xf8,
0xda, 0xf6, 0x5f, 0xdb, 0xe3, 0x83, 0x56, 0xfb, 0x08, 0x82, 0x4e, 0xd4, 0xa8, 0xa9, 0xa3, 0xa3,
0x43, 0xf8, 0xb0, 0x46, 0xb6, 0xe3, 0x5a, 0xc4, 0x40, 0xac, 0x17, 0x82, 0x56, 0xfb, 0x50, 0x95,
0xed, 0x47, 0xbe, 0x3f, 0x31, 0xcf, 0x81, 0x1e, 0xc2, 0x87, 0x35, 0x4a, 0x10, 0x62, 0x20, 0x16,
0x62, 0xc6, 0x7c, 0x55, 0xc7, 0x7b, 0x4d, 0xec, 0xbf, 0x75, 0xd4, 0x27, 0xdb, 0x0f, 0x5f, 0xfd,
0xfc, 0x1f, 0xb6, 0x7f, 0x08, 0x1f, 0xd6, 0x28, 0x41, 0x88, 0xb1, 0xe2, 0x37, 0xc1, 0x6b, 0x03,
0xc9, 0xaf, 0xf2, 0x83, 0x37, 0xf2, 0xfd, 0x90, 0xa6, 0x50, 0xfb, 0x04, 0xc1, 0x58, 0xc7, 0x4e,
0x5f, 0xfc, 0x32, 0x98, 0x57, 0x73, 0xcc, 0x0b, 0x7d, 0x61, 0x3e, 0x17, 0xe4, 0x21, 0xff, 0x00,
0x3e, 0xb5, 0x51, 0x1b, 0xde, 0xf7, 0xc3, 0x11, 0x1f, 0x74, 0xd4, 0x7a, 0x32, 0x82, 0x18, 0x2b,
0x82, 0x8c, 0x46, 0x63, 0x92, 0xf2, 0xe3, 0x84, 0x03, 0x7d, 0x02, 0x3b, 0xff, 0xbe, 0xcb, 0x3a,
0x20, 0x8b, 0x3f, 0x5a, 0xf6, 0xd7, 0xd6, 0xd6, 0xbe, 0x2d, 0x6e, 0x4e, 0xa7, 0x3b, 0xa4, 0xbc,
0x86, 0x6f, 0x20, 0x59, 0xf5, 0xc6, 0x1f, 0xff, 0x03, 0x5a, 0x5d, 0x9a, 0xeb, 0x46, 0xcc, 0x01,
0x08, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_module_xpm[1] = {{ png, sizeof( png ), "delete_module_xpm" }};
//EOF
+68
View File
@@ -0,0 +1,68 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x33, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xe5, 0x96, 0xbb, 0x4f, 0x93,
0x61, 0x14, 0xc6, 0x8b, 0x01, 0x0a, 0x02, 0xa5, 0xdc, 0xef, 0xd0, 0x42, 0x29, 0x43, 0xd3, 0xc5,
0xbf, 0x81, 0x81, 0x85, 0xa0, 0xc4, 0x26, 0x46, 0x07, 0x9d, 0x5c, 0x74, 0x71, 0x60, 0x04, 0xdb,
0x26, 0x54, 0xd8, 0x28, 0x8d, 0x2c, 0x2c, 0xcc, 0x0c, 0x48, 0x25, 0x26, 0x2d, 0x96, 0xd6, 0x10,
0x12, 0x47, 0x42, 0x70, 0x20, 0x20, 0x21, 0x2c, 0x9d, 0x54, 0x7a, 0x23, 0x85, 0x80, 0x1e, 0x9f,
0xe7, 0xf5, 0x2b, 0x96, 0x0a, 0x94, 0x1a, 0xc3, 0xe2, 0x9b, 0x9c, 0xbc, 0x97, 0xaf, 0x3d, 0xbf,
0xef, 0x9c, 0xe7, 0x9c, 0xb7, 0xd5, 0xe9, 0x0a, 0x1c, 0x22, 0x72, 0x0b, 0x36, 0xb5, 0xbb, 0xbb,
0x9b, 0xc6, 0xec, 0xbc, 0xe0, 0xf9, 0xf0, 0xfe, 0xfe, 0x7e, 0xe2, 0xe8, 0xe8, 0x28, 0x88, 0xb5,
0x21, 0xaf, 0xc3, 0xa8, 0x4e, 0xe7, 0x81, 0xa5, 0x39, 0xe7, 0x40, 0x66, 0x5f, 0x8e, 0x8d, 0x49,
0x51, 0x51, 0x91, 0x4c, 0x7b, 0xbd, 0xd8, 0xca, 0x84, 0xd3, 0xe9, 0xf4, 0xc0, 0xd2, 0x91, 0x48,
0x64, 0x21, 0x1c, 0x0e, 0x9f, 0x56, 0x94, 0x95, 0xc9, 0xe0, 0xc0, 0x80, 0xa4, 0xd3, 0xe9, 0x8f,
0x79, 0x61, 0x00, 0x1c, 0xc3, 0x84, 0x73, 0x2e, 0xc4, 0x50, 0x5a, 0x2a, 0xe3, 0x0d, 0x0d, 0x52,
0x5e, 0x5c, 0xac, 0x60, 0x6b, 0x6b, 0x6b, 0xa7, 0xf3, 0xf3, 0xf3, 0xb2, 0xb2, 0xb2, 0x22, 0x15,
0x7a, 0xbd, 0x8c, 0xd4, 0xd5, 0x89, 0xb5, 0xb2, 0xf2, 0x7a, 0x30, 0x0d, 0xa2, 0x4c, 0x03, 0xb9,
0x33, 0x90, 0x70, 0x67, 0xa7, 0x1c, 0xf6, 0xf5, 0xc9, 0x62, 0x6b, 0xeb, 0x19, 0x0c, 0x91, 0x28,
0x88, 0xbb, 0xb6, 0x56, 0x52, 0x3d, 0x3d, 0xf2, 0xb9, 0xbb, 0xfb, 0x0c, 0x86, 0x34, 0xbe, 0xbf,
0x10, 0x62, 0xb1, 0x58, 0xf4, 0xd3, 0x46, 0xa3, 0xbc, 0x30, 0x99, 0xc4, 0x87, 0x99, 0x7b, 0x80,
0xde, 0x59, 0xcd, 0x66, 0xe9, 0x37, 0x18, 0x24, 0x6e, 0xb5, 0x2a, 0x67, 0x49, 0x3c, 0x7f, 0xa3,
0x45, 0x56, 0x56, 0x52, 0x22, 0xae, 0xea, 0x6a, 0x49, 0x76, 0x74, 0xa8, 0x73, 0x3e, 0x1f, 0xa9,
0xaf, 0x17, 0xa6, 0x11, 0x9a, 0x1d, 0x5c, 0x08, 0xb1, 0xdb, 0xed, 0x9f, 0x26, 0xdd, 0x6e, 0x09,
0x04, 0x02, 0xc2, 0x19, 0xfb, 0xcd, 0x68, 0x34, 0x7a, 0x67, 0x6f, 0x6f, 0xef, 0x8b, 0xb9, 0xbd,
0x5d, 0x86, 0x6b, 0x6a, 0xe4, 0xa0, 0xab, 0x4b, 0x92, 0x58, 0x27, 0x9a, 0x9b, 0x65, 0x09, 0x2f,
0xe3, 0xab, 0xaa, 0x92, 0x78, 0x53, 0x93, 0x24, 0x5a, 0x5a, 0x14, 0x8c, 0x91, 0x31, 0x42, 0x6a,
0x86, 0x97, 0xbc, 0xff, 0xcb, 0xfb, 0x1c, 0x04, 0x9f, 0xd3, 0x9d, 0xc0, 0xc4, 0xf8, 0xdc, 0x28,
0xee, 0x57, 0x6e, 0x81, 0xe3, 0x33, 0x73, 0x79, 0x5c, 0x52, 0xfd, 0xac, 0x5a, 0xec, 0x7e, 0xbb,
0xac, 0xef, 0xac, 0x4b, 0x0f, 0x1c, 0x0d, 0xe1, 0xed, 0xbf, 0xc2, 0x69, 0x1c, 0x11, 0xc5, 0xe0,
0x34, 0x06, 0x78, 0x1c, 0xda, 0x24, 0x00, 0x1b, 0x07, 0xf8, 0x36, 0x52, 0xbc, 0x1c, 0x5a, 0x96,
0xd1, 0xf5, 0xd1, 0x85, 0xdf, 0x61, 0xcc, 0xe9, 0x52, 0x84, 0xd0, 0x4c, 0x0f, 0x4c, 0x12, 0x0c,
0x06, 0xcf, 0x81, 0xb8, 0xe7, 0x39, 0x9f, 0x13, 0xb6, 0xb1, 0xb3, 0x21, 0x9d, 0x88, 0xe4, 0x31,
0xa3, 0x20, 0x04, 0xe9, 0x8c, 0x69, 0x6b, 0x1f, 0xd6, 0x4c, 0x63, 0x38, 0x12, 0x16, 0xc7, 0x07,
0x87, 0x28, 0xdf, 0x59, 0xa0, 0x2b, 0x23, 0x72, 0x8e, 0x3b, 0x55, 0x44, 0x7c, 0xce, 0x2f, 0x87,
0xc2, 0x21, 0x95, 0x16, 0x0f, 0xf5, 0x22, 0x08, 0xd1, 0xc5, 0x10, 0x45, 0x1c, 0x9a, 0x2c, 0x61,
0x9f, 0x29, 0x90, 0xc9, 0xcd, 0xc9, 0xef, 0xca, 0xf7, 0x65, 0x85, 0x40, 0x4d, 0x26, 0x5c, 0x2e,
0xa5, 0x11, 0x9a, 0x44, 0x69, 0x64, 0xb3, 0xd9, 0x4a, 0x91, 0x6b, 0xc7, 0xea, 0xea, 0xea, 0x69,
0x25, 0x04, 0x1e, 0x83, 0x63, 0xea, 0xc3, 0xd4, 0x31, 0x65, 0x84, 0x30, 0x6d, 0x89, 0xb6, 0x36,
0x59, 0x6c, 0x6c, 0x54, 0x30, 0xef, 0xd4, 0x94, 0xea, 0xb3, 0x4b, 0x4b, 0x9b, 0x30, 0x1f, 0xde,
0x52, 0x55, 0x1d, 0x66, 0x0d, 0x32, 0xa8, 0x9a, 0x91, 0x25, 0x0c, 0xc7, 0x49, 0x94, 0x38, 0x9d,
0x52, 0x7c, 0x46, 0xf6, 0x04, 0xf6, 0x0d, 0x7b, 0x9e, 0xa7, 0x50, 0xda, 0x7e, 0xac, 0xcb, 0x91,
0x42, 0xad, 0xa9, 0x5d, 0x85, 0xf4, 0x51, 0xa8, 0x11, 0x80, 0xbb, 0xd0, 0x22, 0x65, 0xb1, 0x48,
0x0a, 0xa5, 0x9e, 0x44, 0xe5, 0xb9, 0x51, 0x04, 0x84, 0x53, 0xb3, 0x7b, 0x4c, 0x21, 0xce, 0x0f,
0x7b, 0x7b, 0x55, 0x9f, 0xb1, 0xa9, 0x79, 0x83, 0xe0, 0xba, 0x3a, 0x2c, 0x04, 0xf4, 0xc8, 0xef,
0xf7, 0xff, 0xd0, 0x23, 0x25, 0xaf, 0xe1, 0x94, 0xce, 0x18, 0x19, 0x21, 0xbc, 0x11, 0xb6, 0xb7,
0xb7, 0xc5, 0x8c, 0x28, 0x86, 0xa1, 0x11, 0xfb, 0x8c, 0x4d, 0xcd, 0xe6, 0x66, 0x93, 0x63, 0x78,
0xaf, 0x0d, 0xd2, 0x60, 0x4f, 0x33, 0xb0, 0x21, 0x44, 0x96, 0xe9, 0x13, 0x5e, 0x3f, 0x33, 0x33,
0x33, 0xb2, 0xb5, 0xb5, 0x25, 0xec, 0xb3, 0x7e, 0x44, 0x96, 0x05, 0x99, 0xe5, 0xf5, 0x55, 0x10,
0x28, 0x1b, 0xd6, 0x04, 0xf1, 0xb5, 0x66, 0x74, 0xe0, 0x42, 0x15, 0x1a, 0x61, 0x6c, 0x6a, 0xde,
0x20, 0xce, 0xeb, 0x40, 0xae, 0x02, 0x69, 0xb0, 0x87, 0xb0, 0x00, 0x0b, 0x84, 0xfb, 0x0c, 0x88,
0x86, 0x61, 0x83, 0xbd, 0xe5, 0x4f, 0x48, 0x5e, 0x48, 0x3e, 0x50, 0xee, 0xc8, 0x06, 0xe5, 0xfb,
0x20, 0x7f, 0x4f, 0x4e, 0xb2, 0xbf, 0x90, 0x0d, 0xca, 0x3e, 0x2f, 0xd0, 0xe8, 0xd3, 0x93, 0x0d,
0x4a, 0xe5, 0x7e, 0xe8, 0x1f, 0x81, 0x68, 0xa9, 0x9b, 0x8f, 0xe8, 0xc6, 0x34, 0xfa, 0x6f, 0x40,
0xe7, 0xfe, 0x9c, 0xe4, 0x01, 0x1d, 0x6b, 0xa0, 0xe3, 0xbf, 0x01, 0xfd, 0xf1, 0x77, 0x2b, 0x4f,
0x7b, 0xa4, 0xf3, 0x0a, 0x7f, 0x13, 0xe3, 0x27, 0xd1, 0x9a, 0x9b, 0x57, 0x27, 0xbf, 0x8f, 0x11,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_net_xpm[1] = {{ png, sizeof( png ), "delete_net_xpm" }};
//EOF
+66
View File
@@ -0,0 +1,66 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x09, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x94, 0x5d, 0x48, 0x93,
0x61, 0x14, 0xc7, 0x9f, 0xa5, 0x85, 0xdf, 0xba, 0xf9, 0x3d, 0xa7, 0xce, 0xf9, 0x95, 0xe1, 0x45,
0x20, 0x41, 0x17, 0x62, 0x4e, 0xcc, 0x51, 0x22, 0x81, 0x90, 0x8b, 0xba, 0x0a, 0x4a, 0xba, 0x0e,
0xba, 0xe8, 0x6e, 0x53, 0x21, 0xd2, 0x44, 0xbb, 0xd5, 0x9b, 0xb1, 0x9b, 0x2e, 0xc2, 0x76, 0xe5,
0x95, 0xe0, 0x85, 0x46, 0xdd, 0xe9, 0xb0, 0x6c, 0x6d, 0xcc, 0x46, 0x30, 0xb1, 0x12, 0x74, 0xaf,
0xbe, 0x9b, 0xeb, 0xf3, 0xf4, 0x3f, 0x73, 0xaf, 0xcd, 0x35, 0xbf, 0x86, 0x79, 0xd5, 0x81, 0x3f,
0x7b, 0x5e, 0x9e, 0x3d, 0xe7, 0xf7, 0x9e, 0x73, 0xfe, 0xcf, 0x2b, 0x44, 0x12, 0x41, 0x44, 0x0f,
0x16, 0x16, 0x16, 0x7e, 0x84, 0xc3, 0xe1, 0x29, 0xac, 0xb3, 0xe2, 0xf6, 0x9a, 0x96, 0x97, 0x97,
0x3f, 0xf9, 0xfd, 0xfe, 0xcf, 0x58, 0x5f, 0x10, 0xc9, 0x06, 0x0e, 0x3f, 0xb4, 0xd9, 0x6c, 0x74,
0x4a, 0xa5, 0xa2, 0xee, 0xae, 0x2e, 0x02, 0x6c, 0x56, 0x81, 0x31, 0xc4, 0xe3, 0xf1, 0x04, 0x74,
0xc5, 0xc5, 0x54, 0x56, 0x58, 0x48, 0x6e, 0xb7, 0x5b, 0x4a, 0x0a, 0xa6, 0x40, 0xce, 0xa4, 0xa4,
0xd0, 0x60, 0x51, 0x11, 0xe9, 0x33, 0x32, 0x62, 0x61, 0x97, 0x14, 0x88, 0x59, 0xad, 0xa6, 0x1b,
0x50, 0x52, 0x30, 0xfc, 0xf9, 0xa6, 0xdd, 0x6e, 0x8f, 0x40, 0xec, 0x5a, 0x2d, 0x05, 0xeb, 0xeb,
0xc9, 0xa5, 0xd7, 0xef, 0xc0, 0x5c, 0x2e, 0x17, 0xe9, 0x00, 0xef, 0xc9, 0xcd, 0x25, 0xc9, 0x60,
0xa0, 0x8d, 0xda, 0xda, 0x1d, 0x98, 0xd7, 0xeb, 0x95, 0x8e, 0x02, 0x1a, 0xb8, 0x65, 0x36, 0x53,
0x65, 0x7a, 0x3a, 0xf9, 0xaa, 0xab, 0x49, 0xae, 0xa9, 0x21, 0x19, 0xa0, 0x77, 0x80, 0x32, 0xec,
0x74, 0x6a, 0x2a, 0xf5, 0x64, 0x67, 0x53, 0x40, 0xa7, 0xa3, 0xcd, 0xca, 0x4a, 0x92, 0x01, 0x9b,
0x28, 0x2b, 0x23, 0x15, 0x5a, 0xec, 0x70, 0x38, 0x68, 0xff, 0xec, 0x7d, 0xa2, 0x57, 0xf4, 0x8b,
0x31, 0x61, 0x15, 0x16, 0x80, 0xd4, 0xb2, 0x2c, 0xcf, 0x5f, 0x6e, 0x6d, 0xa5, 0x86, 0xac, 0x2c,
0xfa, 0x50, 0x51, 0x41, 0x9b, 0xe5, 0xe5, 0xb4, 0x51, 0x5a, 0x4a, 0x8b, 0xf9, 0xf9, 0x64, 0xcd,
0xcc, 0xa4, 0x35, 0x54, 0xc4, 0xcf, 0x9b, 0x80, 0x39, 0xd0, 0xc2, 0x34, 0xc0, 0x47, 0x47, 0x46,
0x70, 0x94, 0x06, 0x0f, 0x02, 0x3d, 0x87, 0x08, 0x5a, 0x8c, 0x56, 0xa5, 0x0e, 0x85, 0x42, 0x73,
0x9d, 0x1d, 0x1d, 0x54, 0x8b, 0xc4, 0x1e, 0x24, 0x93, 0xd0, 0x9a, 0x80, 0x46, 0x43, 0x01, 0xb4,
0x49, 0x02, 0x50, 0x02, 0xcc, 0x81, 0xdf, 0xf4, 0x43, 0x43, 0x12, 0x80, 0x14, 0x18, 0x2a, 0x7b,
0x63, 0x6c, 0x6e, 0xa6, 0x06, 0xb4, 0x6c, 0x1d, 0x49, 0x03, 0x98, 0xcb, 0x3a, 0xaa, 0x64, 0xd8,
0x0c, 0xa0, 0x5c, 0xc9, 0x93, 0xa1, 0x21, 0x86, 0x8c, 0x1c, 0x6e, 0x30, 0x89, 0x41, 0xdb, 0x16,
0xc6, 0x9b, 0x9b, 0x31, 0x13, 0xae, 0x22, 0x90, 0x97, 0x17, 0x81, 0xf1, 0xda, 0x8d, 0x0a, 0xf5,
0x98, 0x63, 0xbc, 0xf5, 0x8f, 0xda, 0xba, 0xa6, 0xa5, 0xa5, 0xa5, 0x80, 0x1e, 0x06, 0xe8, 0xce,
0xc9, 0xa1, 0x35, 0xcc, 0x83, 0x5b, 0x25, 0x15, 0x14, 0x6c, 0x8b, 0x67, 0x84, 0x3d, 0x17, 0x4c,
0x60, 0x40, 0xb5, 0x9d, 0x26, 0x13, 0xa1, 0xd5, 0x2f, 0x0f, 0x86, 0xc5, 0x80, 0xf0, 0xe7, 0x46,
0xe5, 0x9e, 0xf4, 0x70, 0x05, 0x70, 0x16, 0x0f, 0x9d, 0x87, 0x3f, 0x81, 0x96, 0x19, 0x91, 0xd8,
0x5b, 0x52, 0x12, 0x31, 0x88, 0x5c, 0x55, 0x45, 0xef, 0x21, 0x3d, 0xe6, 0xa8, 0x54, 0x76, 0x14,
0xd0, 0xb0, 0xa9, 0xbd, 0x9d, 0xaa, 0xd3, 0xd2, 0x48, 0x62, 0x6b, 0xc3, 0xbe, 0x6c, 0xe3, 0x09,
0xb4, 0x8a, 0x67, 0xd2, 0x50, 0x57, 0x47, 0xf5, 0x48, 0xcc, 0x6e, 0x64, 0xeb, 0xf3, 0x3d, 0x9b,
0xc1, 0x3e, 0x37, 0x62, 0x7c, 0x7c, 0x7c, 0x1f, 0x7b, 0x93, 0x50, 0x01, 0x30, 0x15, 0x05, 0xf9,
0xa4, 0x6f, 0xd2, 0x45, 0xa7, 0xd3, 0x19, 0x2a, 0x44, 0x35, 0x77, 0x31, 0x0b, 0x19, 0x17, 0xf2,
0x05, 0xaa, 0x61, 0xc8, 0xd3, 0xd1, 0x51, 0x6e, 0xd1, 0x97, 0x0e, 0xa3, 0x91, 0xce, 0xc2, 0x14,
0x7c, 0xcf, 0x58, 0xe7, 0xb0, 0x6e, 0x6f, 0x69, 0x21, 0xbe, 0x16, 0x89, 0x21, 0x16, 0xd1, 0x88,
0xe4, 0xce, 0x28, 0x44, 0xd1, 0xc7, 0xe1, 0xd7, 0xc3, 0xf7, 0x15, 0xd8, 0x55, 0xcc, 0x48, 0x81,
0x20, 0x1e, 0xb3, 0x1b, 0x83, 0xc1, 0xe0, 0x9c, 0x02, 0x8b, 0x81, 0x38, 0xb1, 0xa7, 0x49, 0x04,
0xd1, 0x21, 0xe9, 0x6a, 0x1c, 0x44, 0x51, 0x78, 0x6c, 0x6e, 0xec, 0x1e, 0xc3, 0xb4, 0x18, 0xbc,
0x02, 0x89, 0xb5, 0x3e, 0xc3, 0xae, 0xa0, 0xc5, 0xa6, 0xb6, 0xb6, 0x48, 0x25, 0x7f, 0x20, 0x16,
0xa1, 0xdd, 0x25, 0xab, 0xb0, 0xed, 0x01, 0xd9, 0x96, 0x55, 0xcc, 0x4e, 0xfb, 0xa6, 0xaf, 0x6d,
0x7d, 0xdf, 0x7a, 0xe5, 0x97, 0xfc, 0x03, 0xf1, 0xe7, 0x27, 0x7d, 0x93, 0x25, 0x48, 0xfe, 0x2c,
0x2a, 0x4d, 0xec, 0xc0, 0xe9, 0x58, 0x65, 0x15, 0xd7, 0xf7, 0x72, 0xd6, 0x89, 0x81, 0x7a, 0x77,
0xc9, 0x2a, 0xe6, 0x0f, 0x48, 0xb6, 0xf2, 0xd7, 0x99, 0x58, 0xf5, 0x8b, 0xaa, 0xc3, 0x7d, 0x76,
0x06, 0x44, 0x33, 0x0e, 0xfc, 0xdc, 0xe7, 0x8d, 0x6f, 0x8b, 0x63, 0x8b, 0x3e, 0x71, 0x07, 0xfa,
0x1a, 0x07, 0xf9, 0x05, 0x3d, 0x12, 0xc7, 0x1e, 0x16, 0x61, 0x40, 0xe2, 0xb7, 0x51, 0xc8, 0x2a,
0x9e, 0xcf, 0x8b, 0x7f, 0x16, 0x09, 0xbe, 0xde, 0xff, 0x41, 0x27, 0x0e, 0xfa, 0x0d, 0x13, 0x53,
0xbd, 0xcc, 0xf6, 0x5b, 0xb0, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
};
const BITMAP_OPAQUE delete_node_xpm[1] = {{ png, sizeof( png ), "delete_node_xpm" }};
//EOF
+85
View File
@@ -0,0 +1,85 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0x41, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xa5, 0x95, 0x6d, 0x4c, 0x5b,
0x65, 0x14, 0xc7, 0x5b, 0x29, 0x65, 0x94, 0xbe, 0xdc, 0x5b, 0xda, 0x5b, 0x18, 0x2f, 0x61, 0x85,
0x51, 0x12, 0x9d, 0x62, 0x8c, 0xd9, 0x17, 0x63, 0x7c, 0xd9, 0xb2, 0x4d, 0x43, 0xcc, 0xec, 0x36,
0xdd, 0x82, 0x73, 0xc9, 0x12, 0xfd, 0x00, 0x62, 0x16, 0x31, 0x4b, 0x16, 0x60, 0xf8, 0xc1, 0x49,
0x32, 0x35, 0x0e, 0xb6, 0x00, 0x3a, 0x0b, 0x24, 0x26, 0x23, 0xda, 0x80, 0x8e, 0x97, 0x62, 0x3b,
0xda, 0x88, 0x64, 0x1f, 0xdc, 0x26, 0x62, 0x42, 0x44, 0xd8, 0xa2, 0xd1, 0x69, 0x44, 0x1d, 0x2b,
0xd0, 0x66, 0xb4, 0x85, 0x1e, 0xff, 0xcf, 0xf5, 0xde, 0xad, 0xad, 0x60, 0xa1, 0x9c, 0xe4, 0x9f,
0xfb, 0xf6, 0x3c, 0xe7, 0x77, 0x9f, 0x73, 0xfe, 0xcf, 0xbd, 0x0a, 0x45, 0x8a, 0x41, 0x44, 0x8d,
0xe3, 0xe3, 0xe3, 0x01, 0x1c, 0x4f, 0x26, 0xdc, 0x57, 0x87, 0x42, 0xa1, 0xee, 0x89, 0x89, 0x09,
0x3f, 0xce, 0x0f, 0x28, 0x36, 0x12, 0x48, 0xf0, 0xce, 0xc9, 0xfa, 0x7a, 0x62, 0xa7, 0x6f, 0x35,
0x34, 0xe0, 0x92, 0x4e, 0xc9, 0x90, 0xc5, 0xc5, 0xc5, 0x7e, 0x7b, 0x45, 0x05, 0xa5, 0xa7, 0xa5,
0x91, 0xd3, 0xe9, 0x5c, 0xc6, 0xbd, 0x17, 0x37, 0x04, 0xb1, 0x68, 0x34, 0xd4, 0x9d, 0x97, 0x27,
0x1e, 0x25, 0x58, 0x93, 0x0c, 0x29, 0x37, 0x18, 0xa8, 0x23, 0x37, 0x97, 0xb4, 0x6a, 0x75, 0x6a,
0x30, 0x4c, 0xd8, 0x7b, 0xba, 0xa9, 0x49, 0x4c, 0x3e, 0xb6, 0x65, 0x0b, 0x05, 0x4b, 0x4b, 0xe9,
0x5a, 0x41, 0x81, 0x78, 0xdd, 0x50, 0x57, 0x47, 0x22, 0x44, 0xaf, 0xa7, 0x9b, 0x85, 0x85, 0x14,
0x28, 0x2e, 0xa6, 0x9e, 0xfc, 0x7c, 0xd2, 0x66, 0x64, 0xd0, 0xd0, 0xd0, 0xd0, 0xd2, 0x7a, 0x41,
0xbb, 0x3f, 0x6c, 0x6f, 0x27, 0x7e, 0xd3, 0x26, 0xfa, 0x9a, 0x25, 0xb3, 0x5a, 0x69, 0x01, 0xc7,
0x2b, 0x16, 0x0b, 0x59, 0x32, 0x33, 0xa9, 0x5c, 0xa7, 0xa3, 0x5f, 0x72, 0x72, 0x68, 0x01, 0xf0,
0x40, 0x51, 0x11, 0x39, 0x70, 0x5f, 0x87, 0xb1, 0x23, 0x23, 0x23, 0xa1, 0x54, 0x4a, 0x57, 0xdb,
0x7c, 0xe6, 0x8c, 0x08, 0xfb, 0x0a, 0xe5, 0x99, 0xdf, 0xbc, 0x99, 0xe6, 0x90, 0xf0, 0xba, 0xd1,
0x48, 0xbf, 0x65, 0x67, 0xd3, 0x9c, 0x20, 0x88, 0xf7, 0x1c, 0x26, 0x93, 0x08, 0x71, 0xbb, 0xdd,
0x21, 0xf6, 0x82, 0xa9, 0xf6, 0xa9, 0xb6, 0xbd, 0xad, 0x8d, 0x38, 0x24, 0xf2, 0xb1, 0xe4, 0x90,
0x1f, 0x7d, 0xf1, 0x73, 0x1c, 0xcd, 0x01, 0xd0, 0xc9, 0xf3, 0xa4, 0xbf, 0x07, 0xd9, 0xb3, 0x11,
0xd7, 0x31, 0x0b, 0x4f, 0x3c, 0xbc, 0x6d, 0x1b, 0xd9, 0xb5, 0x5a, 0xf2, 0x23, 0xf1, 0x6d, 0x94,
0x8d, 0xc1, 0x18, 0xa8, 0x18, 0x3d, 0x3b, 0x72, 0xf8, 0x30, 0x33, 0xc8, 0x85, 0xf5, 0xe4, 0x55,
0xc6, 0x6a, 0x7a, 0x7a, 0x3a, 0x23, 0x12, 0x89, 0xf4, 0x1d, 0xb4, 0xdb, 0xe9, 0x41, 0x24, 0xff,
0xd9, 0x6c, 0xfe, 0x77, 0x45, 0x80, 0xb1, 0x23, 0x2b, 0xe3, 0x35, 0x28, 0x17, 0xb0, 0x46, 0xb8,
0x13, 0xf1, 0xf6, 0xaa, 0x99, 0x4d, 0x2e, 0x93, 0x4d, 0xf0, 0x72, 0x0d, 0x66, 0x2f, 0xdf, 0x2f,
0x0c, 0xf3, 0x97, 0x05, 0x37, 0xe7, 0x36, 0xf5, 0x73, 0xef, 0x5b, 0xcf, 0x17, 0x3e, 0x1d, 0x0c,
0x06, 0x07, 0x65, 0x77, 0xfd, 0x0a, 0x57, 0xb1, 0x7e, 0xcc, 0x23, 0xb1, 0x13, 0x65, 0x1b, 0x05,
0x68, 0x1e, 0x96, 0x67, 0x06, 0x61, 0x6e, 0x14, 0x60, 0x10, 0xc9, 0xfa, 0xf1, 0x30, 0xd3, 0xa8,
0x49, 0x67, 0xf1, 0x1a, 0x1d, 0x82, 0x97, 0x5f, 0x16, 0x7c, 0x3c, 0x25, 0xaa, 0xe6, 0x87, 0x2a,
0xaa, 0xa9, 0xaa, 0xa2, 0x92, 0xac, 0x2c, 0xba, 0x09, 0xc7, 0x05, 0x60, 0x71, 0x96, 0xd4, 0x01,
0x23, 0x68, 0xb0, 0x67, 0x38, 0x58, 0x99, 0x19, 0x84, 0xb9, 0x91, 0x59, 0xff, 0x5b, 0x3c, 0xd7,
0xa8, 0x54, 0xd4, 0xd5, 0xd5, 0x45, 0xf1, 0x10, 0x9f, 0xf1, 0xca, 0x4a, 0x00, 0x59, 0x3b, 0xae,
0x3e, 0x41, 0x43, 0x1e, 0x97, 0xe8, 0x26, 0xb6, 0x21, 0x03, 0x25, 0x25, 0xd4, 0x01, 0x97, 0xb1,
0x6b, 0x8f, 0xc7, 0x13, 0x69, 0x69, 0x6e, 0xbe, 0x6b, 0xfd, 0xa0, 0xcd, 0x46, 0x6f, 0xa0, 0xac,
0xf9, 0xd0, 0xd4, 0xd4, 0xd4, 0xcc, 0x5d, 0x90, 0xe0, 0x33, 0x76, 0xfc, 0x1f, 0x44, 0xd6, 0xa1,
0xef, 0x0f, 0x90, 0xcb, 0x3d, 0x28, 0x26, 0x7f, 0x05, 0xe5, 0x92, 0x20, 0xe1, 0xa5, 0xa5, 0xa5,
0x67, 0x98, 0x1b, 0x65, 0x58, 0x25, 0x7a, 0xc6, 0x20, 0x93, 0x93, 0x93, 0x7f, 0xe2, 0x7e, 0x99,
0x08, 0xc9, 0xf6, 0x65, 0x97, 0xfd, 0xa7, 0x5c, 0x5e, 0x3e, 0xba, 0xfb, 0xb3, 0x9d, 0xb3, 0x27,
0xfa, 0x8e, 0xff, 0x65, 0x77, 0xee, 0xbd, 0x65, 0xbe, 0x74, 0xef, 0xf9, 0xc1, 0xf1, 0xfd, 0xe2,
0xca, 0x72, 0xe0, 0x30, 0x58, 0x38, 0x32, 0x36, 0x36, 0x76, 0x08, 0x69, 0xd2, 0x64, 0xeb, 0x9f,
0x6d, 0x69, 0x21, 0x2b, 0x7a, 0x14, 0x07, 0x61, 0x61, 0x19, 0xe6, 0xea, 0x12, 0xdf, 0xbc, 0x75,
0xe0, 0xdc, 0x1f, 0x14, 0x13, 0xae, 0xcb, 0x83, 0x7f, 0xc3, 0x18, 0x51, 0xf9, 0xf9, 0xf3, 0xdf,
0x3d, 0x47, 0x5f, 0xde, 0x18, 0x0a, 0x54, 0x57, 0x57, 0x9f, 0x47, 0x8a, 0x72, 0x28, 0x53, 0x72,
0x26, 0x83, 0x1d, 0x85, 0xba, 0xa1, 0xd2, 0x38, 0x13, 0x98, 0x87, 0xf9, 0x0b, 0xb1, 0x90, 0xfb,
0x2f, 0xda, 0x02, 0xd1, 0x68, 0x94, 0x12, 0xe3, 0xd9, 0x9e, 0x5d, 0xb7, 0x63, 0xc7, 0x19, 0xbb,
0xf4, 0xb3, 0x98, 0xde, 0x0c, 0xb1, 0x4d, 0x69, 0x94, 0x41, 0xab, 0x06, 0xca, 0xe4, 0x8a, 0x4d,
0xb0, 0xe7, 0xf3, 0x5d, 0x7e, 0x5a, 0x21, 0x5e, 0xeb, 0xab, 0xba, 0x15, 0x3b, 0xce, 0xf4, 0xa9,
0x21, 0x80, 0xe9, 0x6c, 0x45, 0x95, 0x50, 0x1e, 0x74, 0x5f, 0x32, 0xd0, 0x27, 0xb1, 0x09, 0x4a,
0xfa, 0x8b, 0xee, 0x60, 0x53, 0x2e, 0x27, 0x82, 0x9e, 0xec, 0x7d, 0xdc, 0x1f, 0xb7, 0x22, 0x87,
0xb8, 0xa2, 0x4e, 0xe8, 0x28, 0x54, 0x28, 0xf7, 0x69, 0xd5, 0xb0, 0x78, 0xb8, 0x63, 0x89, 0x3d,
0x3a, 0xee, 0x7c, 0x73, 0x26, 0x1c, 0x0e, 0x8b, 0x30, 0x94, 0x31, 0x7a, 0x6e, 0xe0, 0xec, 0x4c,
0xe2, 0x18, 0x43, 0x7d, 0xd6, 0x4f, 0x98, 0xde, 0x01, 0x1d, 0x81, 0x0a, 0x92, 0x82, 0xb8, 0x5e,
0xae, 0xc8, 0xec, 0xe3, 0xc3, 0x89, 0x89, 0x1e, 0xf8, 0xa2, 0x2c, 0xf8, 0x42, 0xcf, 0xbe, 0xd9,
0x47, 0x7a, 0x1f, 0x5a, 0x58, 0xc9, 0xea, 0x19, 0xdb, 0xd3, 0x47, 0x31, 0xbd, 0x15, 0xb2, 0xb3,
0xc2, 0x24, 0x2d, 0x1d, 0x6b, 0xa2, 0x79, 0x90, 0xfb, 0x60, 0x2d, 0xfb, 0x48, 0x16, 0xff, 0x9e,
0xf6, 0x77, 0xcc, 0xeb, 0x81, 0xd8, 0x6f, 0xfc, 0x31, 0x48, 0x97, 0xd4, 0x0c, 0xe2, 0x80, 0x0a,
0x85, 0x06, 0xdf, 0xb3, 0x4b, 0x6b, 0x81, 0x18, 0x3b, 0xf5, 0x7e, 0xa5, 0x5e, 0x39, 0x80, 0x79,
0x1f, 0x49, 0xfd, 0xb1, 0x42, 0xe9, 0x6b, 0xff, 0x4a, 0xe7, 0x2b, 0x8c, 0x7c, 0x9b, 0xbe, 0x55,
0x70, 0xf3, 0x77, 0x56, 0x02, 0x98, 0xdd, 0xdc, 0xb2, 0xfe, 0x84, 0xe6, 0x86, 0x52, 0xa3, 0xbc,
0x28, 0xb9, 0xed, 0x18, 0xf4, 0xe8, 0x5a, 0x57, 0x13, 0x1b, 0x2a, 0xf6, 0xd9, 0x53, 0x6d, 0x55,
0xed, 0xd4, 0x55, 0x6b, 0x1c, 0x86, 0x53, 0xba, 0xab, 0xdc, 0xbb, 0xba, 0xeb, 0x86, 0x46, 0xed,
0x8f, 0x9a, 0xca, 0xcc, 0x6f, 0xd2, 0x2c, 0x4a, 0x56, 0xaa, 0x8f, 0xa1, 0xd3, 0xd0, 0xab, 0xd0,
0x76, 0x88, 0x4f, 0x6a, 0x82, 0x55, 0xfe, 0x3d, 0x0c, 0x66, 0x80, 0x6c, 0xd0, 0x0e, 0xe8, 0x65,
0xe8, 0x75, 0xa8, 0x16, 0xaa, 0x81, 0x5e, 0x82, 0x9e, 0x82, 0xb6, 0x42, 0x7a, 0x09, 0xa2, 0x4c,
0xf5, 0x27, 0xca, 0x26, 0xaa, 0x99, 0x21, 0xa5, 0x8d, 0x58, 0x0c, 0x95, 0x4a, 0xbd, 0xc8, 0x93,
0x5e, 0x44, 0xbd, 0x1e, 0xc0, 0x3f, 0xbb, 0xd3, 0x23, 0x93, 0xd3, 0xc7, 0x4e, 0x68, 0x00, 0x00,
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_pad_xpm[1] = {{ png, sizeof( png ), "delete_pad_xpm" }};
//EOF
+93
View File
@@ -0,0 +1,93 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x95, 0x7b, 0x48, 0x9b,
0x57, 0x18, 0xc6, 0x93, 0x98, 0x18, 0x35, 0xda, 0x68, 0x92, 0x1a, 0x73, 0xf3, 0x92, 0x8b, 0xd1,
0x1a, 0x45, 0xbb, 0xae, 0x8c, 0x55, 0xa9, 0xbd, 0x28, 0x1b, 0x5d, 0x11, 0x5d, 0xa5, 0x88, 0x45,
0x36, 0x59, 0xa9, 0x76, 0xdd, 0xac, 0xb0, 0xee, 0xd6, 0xb2, 0x8e, 0xb5, 0x95, 0xb2, 0xfd, 0x51,
0xe8, 0xdc, 0x06, 0xa3, 0x60, 0xe9, 0xee, 0xa5, 0x74, 0x20, 0x9d, 0xd2, 0xd1, 0x21, 0xcc, 0x4d,
0xe6, 0x3a, 0x9b, 0x9a, 0x56, 0xd4, 0x6c, 0xde, 0xf0, 0x12, 0xaf, 0xd3, 0x44, 0x5b, 0xd4, 0x39,
0xdf, 0x3d, 0x27, 0x3b, 0x9f, 0x0d, 0xce, 0x32, 0x15, 0x0f, 0x3c, 0x7c, 0xdf, 0x77, 0x4e, 0x3c,
0xbf, 0xf3, 0xbe, 0xe7, 0x79, 0x5f, 0x45, 0xa2, 0x75, 0x0c, 0x22, 0x8a, 0x1d, 0x1b, 0x1b, 0xbb,
0xdf, 0xdf, 0xdf, 0xdf, 0x8b, 0xf7, 0xd4, 0x65, 0x6b, 0xc9, 0x43, 0x43, 0x43, 0x5d, 0x1e, 0x8f,
0xa7, 0x03, 0xef, 0x66, 0xd1, 0x7a, 0x07, 0x83, 0x00, 0xd0, 0x97, 0x94, 0x90, 0x40, 0x7a, 0x8d,
0x86, 0xda, 0xda, 0xda, 0x26, 0x04, 0x18, 0x83, 0xb8, 0xdd, 0xee, 0x51, 0x93, 0x56, 0x4b, 0x16,
0xa3, 0x91, 0x7a, 0x7b, 0x7b, 0x07, 0xd7, 0x05, 0x0b, 0x84, 0x14, 0xa9, 0xd5, 0x54, 0x01, 0x90,
0x1e, 0x4f, 0x0e, 0x3b, 0x20, 0x40, 0xca, 0x31, 0x5f, 0xa2, 0x52, 0xad, 0x1f, 0x86, 0x74, 0x39,
0x05, 0x88, 0xcf, 0x6e, 0xa7, 0x19, 0x9b, 0x8d, 0x8e, 0x47, 0x45, 0xf9, 0x61, 0x75, 0x75, 0x75,
0xc4, 0x20, 0x65, 0x00, 0x4c, 0xe3, 0x37, 0x3e, 0xab, 0x75, 0x09, 0x36, 0x3c, 0x3c, 0xdc, 0xbe,
0x26, 0x10, 0xfe, 0xa0, 0x2d, 0x41, 0xaf, 0xa7, 0x52, 0x9c, 0x78, 0x1a, 0x90, 0x19, 0x6c, 0x38,
0x6d, 0x32, 0x51, 0x85, 0x52, 0x49, 0x2c, 0xe0, 0x32, 0x3c, 0xbd, 0x06, 0x03, 0x4d, 0xc7, 0xc6,
0xd2, 0xb4, 0xd9, 0xec, 0x8f, 0x8c, 0xc1, 0x07, 0x06, 0x06, 0xba, 0xd6, 0x9a, 0x3a, 0x6b, 0x77,
0x77, 0xb7, 0x27, 0x01, 0x9b, 0x95, 0xe2, 0xb4, 0x3e, 0x40, 0x7c, 0x3a, 0x1d, 0x79, 0xa3, 0xa3,
0xe9, 0x26, 0x20, 0x53, 0x9b, 0x37, 0x93, 0x2f, 0x26, 0x86, 0x7c, 0x88, 0x82, 0x45, 0x66, 0xc2,
0x3c, 0x4b, 0x27, 0xbb, 0xbb, 0xe5, 0x7b, 0x89, 0x03, 0xb4, 0xe2, 0xda, 0xec, 0xec, 0xac, 0xad,
0xa7, 0xa7, 0xc7, 0xc3, 0x52, 0x52, 0x82, 0xcd, 0x27, 0xb1, 0xd9, 0x14, 0x36, 0x9d, 0x62, 0x20,
0xa4, 0x71, 0x0a, 0xdf, 0xe5, 0x78, 0x67, 0x90, 0xce, 0xce, 0xce, 0xff, 0x40, 0x0a, 0x65, 0x32,
0xd9, 0xed, 0x10, 0xb9, 0xfc, 0x1e, 0xde, 0xdf, 0x84, 0x42, 0x21, 0x19, 0x24, 0x81, 0xd4, 0xd0,
0x95, 0x70, 0x85, 0xc2, 0x8d, 0xe7, 0x0d, 0x28, 0x6d, 0x72, 0x72, 0x32, 0xbf, 0xa1, 0xa1, 0xc1,
0x9f, 0xae, 0x5a, 0x06, 0x60, 0xc0, 0xf0, 0x70, 0x3f, 0xe8, 0x26, 0xc4, 0xe6, 0xeb, 0xeb, 0xeb,
0x89, 0x19, 0x24, 0x10, 0x62, 0xb6, 0xdb, 0x2c, 0x0b, 0x63, 0xbf, 0x7c, 0x43, 0x0f, 0xbf, 0x3f,
0x47, 0xcf, 0xa6, 0x1b, 0xc8, 0x68, 0xfc, 0xa2, 0x2f, 0x25, 0x65, 0xd6, 0x95, 0x92, 0x32, 0x7f,
0x57, 0xa9, 0x2c, 0x1c, 0xbf, 0x78, 0xe6, 0x04, 0x51, 0xcb, 0x65, 0x6a, 0x38, 0x7f, 0x90, 0x32,
0x32, 0x32, 0xfe, 0x40, 0x3a, 0x26, 0xe2, 0x91, 0xb2, 0x52, 0x9e, 0x2e, 0x7f, 0x44, 0x00, 0x78,
0x71, 0x27, 0x2c, 0x75, 0xaf, 0x45, 0x46, 0x92, 0x16, 0xdf, 0x2e, 0x97, 0x6b, 0x22, 0xb0, 0xce,
0xb2, 0x0f, 0xe6, 0x6c, 0x27, 0xba, 0x51, 0x49, 0x74, 0x69, 0x2f, 0x9d, 0xd9, 0x1b, 0x4e, 0x7a,
0x7d, 0x35, 0x39, 0x1c, 0xe4, 0x97, 0x42, 0xb1, 0x9b, 0xda, 0x2e, 0x63, 0xed, 0xeb, 0x62, 0xfa,
0xab, 0x26, 0x8f, 0x9a, 0x9b, 0x9b, 0x97, 0xdc, 0xc5, 0xee, 0x82, 0x6d, 0xcc, 0xd2, 0x55, 0x8b,
0xcd, 0xbd, 0xec, 0x7e, 0x98, 0x19, 0xe2, 0xe2, 0xe8, 0x38, 0x9c, 0x18, 0x60, 0x7d, 0x3f, 0x4c,
0x21, 0x93, 0x4a, 0xdb, 0xdf, 0xd8, 0xa3, 0xa1, 0x73, 0x3b, 0x45, 0xa4, 0x0a, 0x95, 0xcf, 0xa9,
0x54, 0x47, 0x6e, 0x45, 0x47, 0xbf, 0x73, 0x4d, 0xab, 0x3d, 0xfb, 0x79, 0x44, 0xc4, 0x33, 0x8d,
0x4f, 0xc4, 0x6d, 0x5a, 0xbc, 0xb8, 0x2f, 0x9c, 0x9c, 0xcd, 0x8d, 0x24, 0xd4, 0x09, 0x73, 0x15,
0xdb, 0xd0, 0x7f, 0xf1, 0xdc, 0x75, 0xa5, 0x80, 0xf9, 0x30, 0x37, 0x63, 0xb1, 0xd0, 0x03, 0xd8,
0xbf, 0x02, 0xd1, 0xb2, 0xa2, 0x86, 0xeb, 0x7a, 0x45, 0xfc, 0x1e, 0x74, 0xd0, 0x69, 0xe8, 0x4b,
0xe8, 0x43, 0xe8, 0x3c, 0xf4, 0x16, 0x74, 0x0c, 0x2a, 0x83, 0xaa, 0xc4, 0xe2, 0xa0, 0xeb, 0x4d,
0x4d, 0x5d, 0x73, 0x0e, 0xd8, 0xba, 0x00, 0x27, 0xf5, 0xa2, 0x4e, 0x18, 0x4c, 0x70, 0x17, 0xbb,
0x33, 0xbf, 0xf5, 0xb1, 0x36, 0x03, 0x08, 0xab, 0x33, 0x56, 0x6f, 0xac, 0xee, 0x46, 0x47, 0x47,
0xef, 0x09, 0x6e, 0x0a, 0x81, 0xac, 0xd0, 0x73, 0x50, 0x29, 0x54, 0x0c, 0xed, 0x82, 0x1c, 0x90,
0x1d, 0x62, 0xa1, 0xef, 0xc9, 0xca, 0x3a, 0xf0, 0xba, 0xd3, 0xe9, 0x59, 0x10, 0x60, 0x42, 0x9d,
0x74, 0x74, 0x74, 0x8c, 0xc3, 0x20, 0x05, 0x4b, 0xd6, 0xc7, 0xbc, 0x00, 0x61, 0x9d, 0x84, 0x75,
0x14, 0xe1, 0x9e, 0x24, 0xdc, 0x69, 0x31, 0x50, 0x02, 0xc4, 0x16, 0xa2, 0xf8, 0x01, 0x64, 0xfc,
0xa9, 0x62, 0x6b, 0x99, 0x99, 0xc7, 0x4e, 0x3b, 0xef, 0xdc, 0x21, 0x06, 0x63, 0x90, 0xbb, 0x2d,
0xb7, 0x29, 0x37, 0x37, 0xf7, 0x23, 0xac, 0xc5, 0xb5, 0xb6, 0xb6, 0x3a, 0xfc, 0x30, 0x44, 0xb6,
0x12, 0x24, 0xb0, 0x4e, 0x18, 0x50, 0x0a, 0x05, 0xf1, 0x77, 0xf1, 0x0a, 0x6b, 0x39, 0x25, 0x79,
0xbb, 0xc9, 0xdb, 0xe7, 0xa2, 0x31, 0x77, 0x0b, 0x5d, 0x38, 0x94, 0xc6, 0xee, 0xe7, 0x1a, 0xcf,
0x86, 0x0e, 0x6d, 0xca, 0x3e, 0x32, 0x32, 0x72, 0x9f, 0xb5, 0xab, 0x95, 0x20, 0xab, 0x1d, 0xfe,
0x34, 0x07, 0x05, 0x85, 0x35, 0xe6, 0x3b, 0xc2, 0xe8, 0x85, 0x54, 0x11, 0x85, 0xc8, 0x94, 0x5e,
0xcc, 0x55, 0x43, 0x87, 0x21, 0x1b, 0xcf, 0xc0, 0x86, 0x0c, 0x89, 0xd1, 0x58, 0x93, 0x6a, 0xb5,
0xba, 0xc8, 0x62, 0xf9, 0x95, 0xd4, 0xea, 0xa3, 0xb5, 0xdc, 0x3c, 0x87, 0x58, 0xfa, 0x78, 0xd4,
0x1b, 0x32, 0xc4, 0x56, 0xeb, 0x6f, 0x16, 0xa1, 0xce, 0x34, 0x9a, 0xca, 0xab, 0xbc, 0x9b, 0xec,
0xe4, 0xf7, 0x2a, 0xd9, 0x28, 0x90, 0x28, 0x29, 0xa9, 0x27, 0xfe, 0x11, 0xe8, 0xc4, 0x67, 0xbc,
0x0c, 0x52, 0x20, 0xf9, 0x63, 0xfa, 0xe4, 0xfa, 0x46, 0x70, 0xb0, 0xa9, 0xca, 0x68, 0x48, 0x24,
0x5b, 0x82, 0x85, 0x82, 0x83, 0x2d, 0x9d, 0x98, 0x7a, 0x99, 0xf1, 0xd7, 0x7a, 0x3f, 0xe2, 0xe5,
0x5d, 0xdc, 0x6a, 0xfd, 0x5d, 0x9e, 0x9c, 0x3c, 0xff, 0x94, 0xc3, 0xf1, 0x77, 0x45, 0x7c, 0xfc,
0x8f, 0xdf, 0x6d, 0x4b, 0x77, 0xd0, 0xbc, 0xf3, 0x2a, 0xd1, 0xad, 0x77, 0xa9, 0x24, 0x33, 0x8e,
0xb9, 0x8e, 0x45, 0xb5, 0x8d, 0x75, 0x99, 0xd5, 0x44, 0x74, 0x52, 0xa3, 0x51, 0x0f, 0xaa, 0x22,
0x23, 0x06, 0xa4, 0x52, 0x43, 0x95, 0xdd, 0xee, 0x29, 0xdc, 0xb2, 0x65, 0xee, 0x03, 0x87, 0x63,
0xf1, 0x67, 0xa4, 0xe8, 0xa1, 0x90, 0x2a, 0xb3, 0xb9, 0x89, 0xf6, 0x67, 0xa6, 0x12, 0x7d, 0x7b,
0x84, 0xe8, 0x93, 0xa7, 0xe9, 0x64, 0x96, 0x9c, 0x78, 0x57, 0x2f, 0x80, 0x0c, 0xbc, 0x34, 0x1e,
0x3b, 0x76, 0xe5, 0x64, 0xef, 0xf0, 0x9f, 0x72, 0xb6, 0xfe, 0x14, 0x65, 0xda, 0x35, 0x70, 0x54,
0xf3, 0x52, 0x63, 0x7d, 0xa4, 0xc5, 0x85, 0xa4, 0xa4, 0xf1, 0xc1, 0xb0, 0xb0, 0x27, 0xbd, 0xcf,
0xa7, 0x2a, 0xe8, 0xc5, 0x34, 0x11, 0x85, 0x4a, 0x83, 0xfe, 0x5c, 0x8b, 0xbd, 0x8b, 0x5e, 0x2d,
0xcc, 0x26, 0xba, 0xfe, 0xef, 0x29, 0x5f, 0xda, 0x2a, 0x23, 0x93, 0xe9, 0xab, 0x07, 0x89, 0x89,
0xdd, 0xed, 0x66, 0xf3, 0x4f, 0x3f, 0xe8, 0x74, 0xd5, 0x57, 0x22, 0x23, 0x8b, 0x2f, 0x48, 0xa5,
0xea, 0x53, 0xf8, 0xed, 0xdb, 0x10, 0x7b, 0x7e, 0x0c, 0xd5, 0x40, 0xef, 0xf3, 0x3e, 0x59, 0xb4,
0x1a, 0x7b, 0x47, 0x85, 0xc8, 0x24, 0xee, 0x57, 0x76, 0x6c, 0xa2, 0xa3, 0x5b, 0x45, 0x24, 0x93,
0x48, 0x46, 0xf9, 0x29, 0xcf, 0x72, 0xeb, 0x56, 0x72, 0x67, 0x1d, 0xe6, 0x7d, 0x30, 0x1f, 0xda,
0xcf, 0xfe, 0x61, 0xf2, 0xef, 0x3c, 0x28, 0x1d, 0x52, 0xfe, 0x9f, 0xbd, 0x25, 0x3c, 0xbf, 0x6c,
0xd3, 0x4f, 0xf9, 0x29, 0xdf, 0x83, 0xca, 0xa1, 0x7d, 0xd0, 0x76, 0xde, 0x60, 0x6d, 0xbc, 0x0f,
0xb2, 0x6e, 0xaf, 0xe5, 0x7f, 0x23, 0x7c, 0x47, 0xf0, 0x68, 0x56, 0x34, 0xc3, 0x3f, 0x3f, 0x19,
0xa2, 0x7e, 0x5d, 0xaa, 0x4a, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
};
const BITMAP_OPAQUE delete_polygon_xpm[1] = {{ png, sizeof( png ), "delete_polygon_xpm" }};
//EOF
+87
View File
@@ -0,0 +1,87 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x04, 0x66, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x95, 0x6b, 0x4c, 0x5b,
0x65, 0x18, 0xc7, 0x5b, 0x3c, 0xb4, 0x3d, 0x5c, 0x4a, 0x0b, 0x74, 0x30, 0xe8, 0x85, 0x6b, 0x61,
0x3d, 0xfd, 0x30, 0xc1, 0x65, 0xce, 0x64, 0x90, 0x99, 0xe0, 0xa6, 0x0b, 0x62, 0x54, 0xdc, 0x26,
0xd3, 0x8c, 0xa8, 0xd9, 0xb2, 0xc5, 0xc0, 0x36, 0x85, 0xa9, 0x8b, 0x51, 0x67, 0x02, 0xcb, 0xbe,
0x80, 0xc6, 0xdb, 0x58, 0x66, 0xb2, 0x04, 0xb3, 0x60, 0x34, 0xeb, 0x07, 0x22, 0xc9, 0xc4, 0x4c,
0x67, 0xa0, 0x50, 0x59, 0xa6, 0x59, 0x66, 0xc6, 0xc5, 0x98, 0xe0, 0x48, 0x58, 0x32, 0xa0, 0x2d,
0x30, 0x5a, 0x0a, 0x8f, 0xff, 0xe7, 0x78, 0xce, 0x04, 0xa4, 0x64, 0xe5, 0xb3, 0x27, 0xf9, 0xa5,
0x87, 0x43, 0xdf, 0xf7, 0x77, 0x9e, 0xcb, 0xfb, 0x54, 0xa3, 0x59, 0xc7, 0x45, 0x44, 0x7b, 0x46,
0x46, 0x46, 0x82, 0xa1, 0x50, 0xe8, 0x12, 0xee, 0xc5, 0x15, 0xff, 0x2b, 0x1b, 0x1d, 0x1d, 0xbd,
0xe3, 0xf7, 0xfb, 0x7b, 0x71, 0x6f, 0xd1, 0xac, 0xf7, 0xc2, 0xe2, 0x7d, 0x9d, 0x9d, 0x9d, 0x0b,
0xfa, 0xf8, 0x78, 0x7a, 0xb6, 0xb2, 0x92, 0xe6, 0xe6, 0xe6, 0xba, 0x55, 0x19, 0x3e, 0xcb, 0x7d,
0x3e, 0xdf, 0x6c, 0x6a, 0x72, 0x32, 0x6d, 0x2b, 0x2d, 0xa5, 0x89, 0x89, 0x89, 0x1b, 0xeb, 0x92,
0xa9, 0x12, 0x51, 0xa7, 0xa3, 0x0f, 0x2d, 0x16, 0x72, 0x26, 0x25, 0x2d, 0x95, 0xed, 0x52, 0x25,
0x47, 0xd3, 0xd2, 0xe8, 0xb1, 0x94, 0x14, 0xda, 0x56, 0x52, 0x12, 0xbb, 0x0c, 0x5f, 0xde, 0xda,
0xd5, 0xd5, 0x25, 0x4b, 0x3e, 0xcd, 0xcc, 0xa4, 0x99, 0xa2, 0x22, 0x1a, 0xce, 0xc9, 0x21, 0x67,
0x62, 0xa2, 0x2c, 0xeb, 0xeb, 0xeb, 0x23, 0x96, 0x34, 0xa4, 0xa6, 0xd2, 0x74, 0x5e, 0x1e, 0x8d,
0xe7, 0xe7, 0xdf, 0x97, 0x05, 0x02, 0x01, 0x6f, 0x2c, 0xa2, 0xea, 0xe6, 0xa6, 0x26, 0x32, 0x41,
0xe4, 0x83, 0x60, 0xba, 0xa0, 0x80, 0x82, 0xf8, 0x1c, 0xca, 0xca, 0xa2, 0x42, 0xc8, 0xe2, 0xb4,
0x5a, 0x6a, 0xc0, 0xc6, 0x41, 0xab, 0x95, 0x82, 0x0e, 0x07, 0x4d, 0x43, 0xc4, 0x91, 0xb1, 0x1c,
0x35, 0x1b, 0x8f, 0x45, 0x14, 0x07, 0xbe, 0x3c, 0x56, 0x5f, 0x4f, 0x16, 0x51, 0xa4, 0xfe, 0xec,
0x6c, 0x79, 0xd3, 0xc0, 0xc6, 0x8d, 0x74, 0x2b, 0x3d, 0x9d, 0xce, 0x19, 0x8d, 0xe4, 0xdf, 0xb0,
0x41, 0xfe, 0x9b, 0x9f, 0x37, 0x22, 0x32, 0x96, 0x70, 0x3a, 0xb9, 0x76, 0xea, 0x3e, 0x4e, 0x50,
0x0f, 0x5e, 0x03, 0x29, 0x40, 0xbb, 0x96, 0xec, 0xad, 0xc6, 0x46, 0x4a, 0x37, 0x18, 0xa8, 0x17,
0x75, 0xf2, 0x83, 0x29, 0xb3, 0x99, 0xa6, 0x4c, 0x26, 0xf2, 0x63, 0x73, 0x7f, 0x46, 0x06, 0x35,
0x22, 0x32, 0x13, 0xa2, 0xf4, 0x7a, 0xbd, 0xcb, 0x24, 0xdb, 0x6d, 0x56, 0xeb, 0x7c, 0xeb, 0xfb,
0xc7, 0xe9, 0x9d, 0x57, 0x2a, 0x49, 0x1f, 0x6f, 0xbc, 0x93, 0x9f, 0xdf, 0x73, 0x50, 0x92, 0x66,
0xf7, 0xba, 0xdd, 0x91, 0x17, 0x56, 0x52, 0x52, 0x12, 0xd9, 0x73, 0xfb, 0x36, 0x0d, 0xbc, 0x54,
0x53, 0x43, 0x16, 0xa4, 0xf1, 0x2e, 0xd2, 0x33, 0x85, 0x68, 0x26, 0xf1, 0xf6, 0x2c, 0x6c, 0xc3,
0x3d, 0xa7, 0x91, 0x6b, 0xc6, 0x0d, 0xb2, 0xf4, 0x45, 0xcf, 0xb6, 0x9f, 0x79, 0x83, 0xe8, 0xca,
0x69, 0xa2, 0x8e, 0x97, 0xa9, 0x66, 0x4b, 0x1a, 0xd9, 0xed, 0xdf, 0x92, 0xdb, 0x4d, 0xab, 0x72,
0xe0, 0x00, 0x51, 0x4f, 0xcf, 0xc0, 0x3f, 0x85, 0xe7, 0x74, 0x21, 0x6d, 0x1c, 0x8d, 0x1c, 0x11,
0xa4, 0x83, 0x48, 0x5f, 0xa1, 0xd2, 0x20, 0x4b, 0x5b, 0x9f, 0xaf, 0x0f, 0x1a, 0x9e, 0xdb, 0x42,
0x74, 0x7e, 0x27, 0xdd, 0x3b, 0x65, 0xa5, 0x92, 0x4c, 0x0d, 0xe5, 0xe6, 0xfe, 0x10, 0x92, 0xa4,
0x7b, 0xb3, 0x92, 0x14, 0x9a, 0x96, 0xa4, 0x70, 0x50, 0xa5, 0xb6, 0x76, 0x7e, 0xb6, 0xb7, 0x77,
0x60, 0x51, 0x96, 0xe0, 0xed, 0x03, 0x68, 0x04, 0xae, 0x0b, 0xcb, 0xee, 0x22, 0x85, 0x01, 0xa4,
0x2d, 0x80, 0xda, 0x0d, 0xa1, 0x46, 0x2b, 0x5a, 0x5f, 0x96, 0x19, 0x75, 0xba, 0xc2, 0x9b, 0xce,
0x34, 0x81, 0x32, 0x92, 0x12, 0x48, 0x10, 0xd2, 0x7e, 0xc3, 0xb3, 0x36, 0xf0, 0x09, 0x38, 0x03,
0x9a, 0x98, 0x8a, 0x8a, 0x8a, 0x36, 0xe4, 0x7c, 0x9e, 0x25, 0x8d, 0x78, 0x73, 0xee, 0xb8, 0xa0,
0xcd, 0x26, 0xcb, 0xb8, 0xdb, 0x38, 0x8d, 0x7d, 0x10, 0x05, 0xed, 0x76, 0xb9, 0xbd, 0x47, 0x80,
0x2a, 0xc3, 0x04, 0xf1, 0xb0, 0x48, 0x5b, 0x5c, 0x3c, 0x7e, 0x5c, 0x92, 0xe6, 0x90, 0x9a, 0x05,
0x32, 0x18, 0x36, 0x7f, 0x85, 0x67, 0x9f, 0x2b, 0x82, 0x37, 0xc1, 0x51, 0xa6, 0xa5, 0xa5, 0xa5,
0xfd, 0x04, 0x9a, 0xc0, 0x8c, 0x0d, 0x87, 0xb1, 0x09, 0xb7, 0xef, 0x34, 0x64, 0x1c, 0x19, 0xcb,
0xe5, 0x9a, 0xa1, 0x41, 0xfa, 0x21, 0x9f, 0x71, 0x3a, 0xe5, 0x73, 0xc6, 0x87, 0x9a, 0x27, 0x08,
0xc6, 0xd5, 0x94, 0x9c, 0x3b, 0x97, 0x6b, 0xf6, 0x75, 0xb5, 0x06, 0x06, 0xc3, 0xc3, 0x17, 0xf0,
0xa8, 0x19, 0x3c, 0x09, 0xf2, 0x40, 0x36, 0xc8, 0x2a, 0x2b, 0x2b, 0xcb, 0xc5, 0xc1, 0xfb, 0xe9,
0xc5, 0xea, 0x6a, 0x2a, 0xc0, 0x9b, 0x0e, 0x41, 0x76, 0x02, 0x91, 0x71, 0x77, 0x5d, 0xbd, 0xda,
0x4f, 0xd7, 0xae, 0xfd, 0xfa, 0xa7, 0xdc, 0x8d, 0xdc, 0xfa, 0x78, 0x81, 0xcf, 0x70, 0xa8, 0x0d,
0x90, 0x78, 0x3c, 0x9e, 0x05, 0xa4, 0x6e, 0xaf, 0x2c, 0x92, 0xa4, 0x85, 0xc3, 0xff, 0x8a, 0x4a,
0x39, 0x6d, 0xef, 0x82, 0x22, 0x20, 0x28, 0xad, 0x2e, 0x33, 0x36, 0x36, 0x96, 0x10, 0x0e, 0x87,
0x2f, 0x3f, 0x5f, 0x55, 0x25, 0x47, 0xc6, 0x91, 0x70, 0x63, 0x70, 0x83, 0xe8, 0xf5, 0x59, 0x1f,
0x21, 0xb5, 0x3e, 0x3e, 0x67, 0x26, 0xbd, 0x9e, 0x44, 0x48, 0x78, 0x5c, 0xf1, 0xd8, 0xba, 0xdf,
0x76, 0xcb, 0x45, 0x8f, 0x7c, 0x81, 0x47, 0x27, 0x41, 0xce, 0x6a, 0xe7, 0x89, 0x0b, 0xcb, 0x32,
0x4e, 0x63, 0x7f, 0xff, 0x40, 0x98, 0x25, 0xbc, 0x4e, 0x10, 0x32, 0x5a, 0x05, 0x41, 0x68, 0x98,
0x9c, 0x9c, 0xec, 0x38, 0xdd, 0xdc, 0x4c, 0x3c, 0xae, 0x96, 0x49, 0x62, 0x15, 0x29, 0x32, 0x3d,
0xd8, 0x7f, 0xe8, 0xd0, 0x42, 0xab, 0xba, 0x8e, 0x45, 0x5c, 0x53, 0x51, 0x14, 0xed, 0x91, 0x48,
0xa4, 0x9a, 0x67, 0xe3, 0x7f, 0x16, 0xc6, 0x2a, 0x5a, 0xb2, 0xee, 0xe4, 0x4a, 0x11, 0xb0, 0x45,
0x5d, 0xf7, 0xbf, 0x48, 0xb9, 0x0c, 0x89, 0x89, 0x8f, 0x7b, 0x13, 0x12, 0x36, 0x91, 0x28, 0x6e,
0x25, 0xad, 0x36, 0xd9, 0x13, 0x93, 0xc8, 0xe9, 0x1c, 0xfc, 0xab, 0xb0, 0xf0, 0xd6, 0xb0, 0xcb,
0x15, 0xfc, 0x59, 0x92, 0x16, 0xbf, 0xc7, 0xb3, 0xcb, 0xab, 0x61, 0x36, 0x1f, 0xfc, 0xe3, 0x70,
0xed, 0x3e, 0x0a, 0x5f, 0xef, 0xa0, 0xc1, 0x0b, 0x75, 0x94, 0x69, 0x32, 0x44, 0x94, 0x43, 0x9e,
0x0f, 0x1e, 0x5a, 0x55, 0xe4, 0x72, 0xcd, 0x6f, 0x77, 0xbb, 0x17, 0xe7, 0xa2, 0x0d, 0xd2, 0xd5,
0x30, 0x1a, 0xab, 0xa8, 0xfb, 0xe3, 0x3a, 0x22, 0xcf, 0x11, 0xa2, 0xb3, 0x3b, 0xe8, 0xe9, 0x62,
0x3d, 0x61, 0xab, 0x76, 0xb0, 0x03, 0x24, 0x47, 0x8b, 0x4a, 0x5b, 0x50, 0x70, 0x63, 0x67, 0x5e,
0x9e, 0xef, 0x6b, 0x9b, 0xed, 0x1b, 0xaf, 0xcd, 0xd6, 0xf1, 0x8b, 0xc3, 0xd1, 0x79, 0xc5, 0xe1,
0xf8, 0xae, 0x3b, 0x1a, 0x66, 0x73, 0xed, 0xef, 0xe5, 0x9b, 0x2c, 0xf4, 0xe3, 0x91, 0x1c, 0x3a,
0xff, 0x94, 0x86, 0x44, 0x41, 0x33, 0x83, 0x7d, 0xce, 0x81, 0x3a, 0xe0, 0x00, 0x71, 0xd1, 0x72,
0xce, 0x13, 0xb6, 0x14, 0x1c, 0x53, 0x46, 0x50, 0xb3, 0x3a, 0x50, 0xd7, 0xe0, 0x12, 0xb8, 0x09,
0xae, 0x83, 0x8b, 0x80, 0xeb, 0xfb, 0xb6, 0xf2, 0x43, 0x2a, 0x44, 0x13, 0xc5, 0x29, 0xbf, 0xae,
0x9b, 0xc1, 0x13, 0x60, 0xf7, 0x03, 0xf0, 0x0c, 0x78, 0x15, 0xbc, 0xa7, 0x4c, 0xfa, 0x53, 0x60,
0x3f, 0xc8, 0x5c, 0x2b, 0x22, 0x55, 0xa6, 0x57, 0x72, 0x9c, 0xf2, 0x00, 0x98, 0x81, 0x15, 0x3c,
0xaa, 0x0c, 0xe1, 0x72, 0x25, 0x6d, 0xba, 0x95, 0x1b, 0xff, 0x0d, 0x5b, 0x77, 0x23, 0x60, 0x96,
0x80, 0x07, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE delete_rectangle_xpm[1] = {{ png, sizeof( png ), "delete_rectangle_xpm" }};
//EOF
+74
View File
@@ -0,0 +1,74 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x03, 0x88, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x5d, 0x48, 0x53,
0x61, 0x18, 0xc7, 0xdf, 0x72, 0x33, 0x9d, 0x4b, 0x5d, 0x5a, 0x6e, 0x5a, 0x3a, 0x3f, 0x72, 0x12,
0x5e, 0x44, 0x65, 0x14, 0x04, 0xc5, 0xf2, 0xa2, 0x24, 0x2a, 0x33, 0xba, 0x2c, 0xba, 0x30, 0xbc,
0x88, 0x8a, 0xb4, 0x60, 0x69, 0xb0, 0x45, 0x73, 0x10, 0xda, 0x37, 0x44, 0x37, 0x7d, 0x17, 0x15,
0xe8, 0xc2, 0x02, 0x29, 0x58, 0x17, 0x12, 0x25, 0x2c, 0xba, 0xe8, 0xc3, 0x84, 0x58, 0x45, 0x60,
0xab, 0x2e, 0xda, 0xdc, 0x96, 0x82, 0x64, 0x4f, 0xff, 0xe7, 0xe8, 0xa9, 0xb7, 0xe3, 0x94, 0x0d,
0xda, 0x03, 0x7f, 0x76, 0xde, 0x9d, 0x73, 0x9e, 0xdf, 0x79, 0xbe, 0xde, 0x73, 0x84, 0x48, 0xd2,
0x88, 0x68, 0x0d, 0xf4, 0x04, 0x3a, 0x05, 0xe9, 0x34, 0xe7, 0x66, 0x41, 0xc7, 0xa0, 0x67, 0x50,
0xdd, 0xd4, 0xbb, 0x9d, 0xa2, 0x1d, 0x1a, 0x55, 0x7e, 0x67, 0x86, 0xac, 0x1b, 0x18, 0x18, 0x18,
0x29, 0x2a, 0x28, 0xa0, 0xb6, 0xd6, 0x56, 0x2c, 0xe9, 0xb6, 0x0a, 0x9b, 0x84, 0x5c, 0x38, 0xd9,
0xd9, 0x49, 0xf9, 0x26, 0x13, 0xf9, 0xfd, 0xfe, 0x31, 0xac, 0x37, 0x6b, 0x41, 0x31, 0x88, 0xa0,
0x71, 0x68, 0xc9, 0x4c, 0x10, 0x4b, 0x7e, 0x3e, 0xad, 0x9d, 0x3b, 0x97, 0x32, 0x75, 0x3a, 0x3a,
0xe2, 0x70, 0xa8, 0x30, 0xbd, 0x0a, 0xd1, 0xa7, 0xa5, 0x91, 0xdd, 0x68, 0x24, 0x13, 0xae, 0x99,
0x0a, 0x73, 0x0a, 0xef, 0x24, 0x88, 0x75, 0x35, 0x0e, 0x64, 0xf5, 0xe0, 0xe0, 0xe0, 0x48, 0xe1,
0xfc, 0xf9, 0xb4, 0x35, 0x37, 0x97, 0xc2, 0x95, 0x95, 0xf4, 0x70, 0xd1, 0x22, 0x32, 0xea, 0xf5,
0x74, 0xa8, 0xa5, 0x85, 0x61, 0x01, 0x86, 0xe8, 0x66, 0xcf, 0xa6, 0xcb, 0x0b, 0x16, 0x50, 0x6c,
0xf1, 0x62, 0xda, 0x33, 0x6f, 0x1e, 0xe5, 0x64, 0x65, 0x51, 0x7f, 0x7f, 0x3f, 0xc3, 0x36, 0x4c,
0x78, 0x3a, 0x26, 0x6a, 0x24, 0xd0, 0x18, 0x64, 0xd5, 0x80, 0x6e, 0xd5, 0x2c, 0x5b, 0x46, 0x95,
0x19, 0x19, 0x0a, 0xe4, 0x07, 0x1c, 0xc5, 0xca, 0xca, 0xa8, 0x07, 0x29, 0xe4, 0xc8, 0xd6, 0xdb,
0xed, 0xa4, 0x07, 0xe4, 0x06, 0xa2, 0x8d, 0x96, 0x94, 0x28, 0xe7, 0xa2, 0xb8, 0x66, 0xa5, 0xc1,
0x40, 0x65, 0x58, 0xc3, 0x1e, 0xc9, 0x51, 0xf9, 0x24, 0xd8, 0x39, 0x0d, 0x68, 0x9b, 0xcf, 0xe7,
0xfb, 0x65, 0x98, 0x33, 0x87, 0x5a, 0xf2, 0xf2, 0x26, 0x1c, 0x15, 0x17, 0x53, 0xa4, 0xa8, 0x88,
0x7a, 0xf0, 0xe4, 0xe6, 0xf4, 0x74, 0xba, 0x8e, 0x48, 0x23, 0x16, 0x0b, 0x45, 0x17, 0x2e, 0x54,
0x60, 0xed, 0x80, 0x72, 0x1a, 0xbb, 0xbb, 0xbb, 0x19, 0xd4, 0x28, 0x83, 0x6a, 0x25, 0xd0, 0xa8,
0x70, 0x0b, 0x8b, 0x06, 0xb6, 0xbb, 0xaf, 0xaf, 0x6f, 0xdc, 0x98, 0x99, 0x49, 0xfb, 0xd9, 0x29,
0x20, 0x11, 0x44, 0x34, 0x0c, 0x87, 0xc3, 0x80, 0x2b, 0x42, 0xda, 0x22, 0x85, 0x85, 0xe4, 0x41,
0x33, 0xa4, 0x23, 0xd2, 0x49, 0x48, 0x73, 0xbc, 0xee, 0x7b, 0x2a, 0xc1, 0xda, 0xe3, 0xd4, 0x6a,
0xb7, 0x1a, 0x59, 0x73, 0x76, 0x36, 0x0d, 0xa3, 0x66, 0x61, 0x38, 0x0d, 0xe3, 0x38, 0x0c, 0x38,
0x43, 0xdd, 0x38, 0xe6, 0x48, 0xba, 0xba, 0xba, 0xa6, 0x81, 0xb0, 0xb9, 0x44, 0xbd, 0x04, 0x1a,
0x86, 0x72, 0xe3, 0xcc, 0x89, 0xaf, 0xa9, 0xa9, 0x49, 0xa9, 0x49, 0x00, 0x69, 0x0b, 0xe7, 0xe4,
0x50, 0x08, 0x5d, 0xc6, 0xa0, 0x6f, 0x00, 0x19, 0x00, 0xd9, 0xde, 0xd0, 0xc0, 0x90, 0x17, 0xda,
0x39, 0x93, 0x6d, 0x16, 0x9c, 0xbf, 0xfe, 0x03, 0x73, 0x09, 0x87, 0x06, 0x72, 0x41, 0xed, 0xae,
0x4b, 0x1c, 0x01, 0x47, 0xc4, 0x30, 0x44, 0xc5, 0xa9, 0xe3, 0x54, 0xf6, 0x02, 0x96, 0xf5, 0xb7,
0x1b, 0x6f, 0x4f, 0x0f, 0x73, 0x89, 0x5d, 0x52, 0x54, 0x5f, 0xc5, 0x49, 0x91, 0xa9, 0x42, 0x3a,
0x3b, 0x3a, 0x94, 0xb4, 0x70, 0x77, 0x71, 0x2d, 0x94, 0x1a, 0xa1, 0x2e, 0xaf, 0x00, 0xe3, 0x63,
0xfe, 0x8f, 0x9b, 0xe4, 0x3e, 0x9a, 0x42, 0x33, 0x67, 0x71, 0x60, 0x17, 0x85, 0x1e, 0x80, 0x0f,
0x12, 0x6c, 0x2f, 0x2e, 0x3c, 0x7c, 0xe6, 0xf4, 0x69, 0x05, 0x72, 0xd3, 0x6c, 0xa6, 0x98, 0xd5,
0x4a, 0x51, 0xcc, 0x11, 0x37, 0x84, 0x1b, 0xa9, 0xe3, 0x80, 0x0f, 0xa2, 0x36, 0x0c, 0x89, 0x95,
0x96, 0x52, 0xac, 0xa2, 0x82, 0x1e, 0xe0, 0x3c, 0xc3, 0x8e, 0xb6, 0xb5, 0x31, 0xec, 0x44, 0xfc,
0xa8, 0xe0, 0x5c, 0x02, 0x7d, 0xfa, 0x39, 0xfe, 0xf3, 0xca, 0x86, 0xda, 0x5a, 0x2a, 0x45, 0xc7,
0x7d, 0x2c, 0x2f, 0xa7, 0x18, 0x0b, 0x0e, 0xdd, 0x88, 0x84, 0xe1, 0x6d, 0x70, 0xa6, 0x34, 0x08,
0x52, 0xc8, 0xc3, 0xfa, 0xc3, 0x66, 0xa3, 0x2f, 0xf8, 0xad, 0xc6, 0xc0, 0xd6, 0x2c, 0x5d, 0xca,
0xa0, 0x9e, 0xe9, 0x40, 0x19, 0xd0, 0x67, 0x15, 0x66, 0xbf, 0x66, 0x3f, 0x10, 0x0a, 0x85, 0x3e,
0xac, 0x5a, 0xb1, 0x82, 0x6c, 0x28, 0x7c, 0x00, 0x73, 0xe4, 0x41, 0xfa, 0xa4, 0x16, 0xbe, 0xa3,
0xb6, 0xfe, 0x3e, 0xd4, 0x2a, 0xc8, 0xc3, 0x8a, 0x2d, 0xa8, 0x0a, 0x0f, 0x34, 0x34, 0x34, 0xf4,
0x15, 0xe7, 0x6d, 0xd3, 0xef, 0xa0, 0xdc, 0x08, 0x7f, 0xa3, 0x7a, 0x1b, 0x1a, 0x0d, 0x59, 0x55,
0x98, 0x19, 0x4f, 0x2f, 0x0d, 0x63, 0xb3, 0xb6, 0xf5, 0x79, 0x80, 0xab, 0xb1, 0x83, 0x04, 0x83,
0x41, 0x86, 0x54, 0xcd, 0xfc, 0x3e, 0x70, 0x8a, 0x6c, 0x28, 0x24, 0x75, 0x60, 0x3d, 0x6e, 0x2a,
0x66, 0xd8, 0xf6, 0xfa, 0x7a, 0xf2, 0x7a, 0xbd, 0x53, 0xe6, 0x44, 0x85, 0x6d, 0xaa, 0xab, 0x4b,
0x10, 0xf2, 0xef, 0xeb, 0x43, 0x8d, 0xca, 0x8f, 0x3d, 0x71, 0xf9, 0x4e, 0xef, 0xce, 0x8d, 0x81,
0xef, 0x81, 0x9b, 0xbd, 0xef, 0x7a, 0x1d, 0xbc, 0xd6, 0xea, 0x7d, 0xf8, 0xfd, 0x0e, 0x00, 0xce,
0x42, 0x15, 0x89, 0xbf, 0xe5, 0xdc, 0xa2, 0x00, 0x80, 0x11, 0x09, 0x96, 0x88, 0x1e, 0x8b, 0xbb,
0x22, 0x4d, 0x24, 0x6d, 0x4e, 0x71, 0x3e, 0x49, 0x10, 0xcb, 0x93, 0x3c, 0xe8, 0xb8, 0x28, 0xc1,
0x8d, 0xcf, 0x13, 0xd0, 0x1b, 0x09, 0xf4, 0x0b, 0x35, 0xdd, 0x22, 0x52, 0x64, 0xbc, 0x7d, 0xdd,
0x93, 0x60, 0x11, 0xa8, 0x2a, 0x35, 0x28, 0x8f, 0x30, 0xc1, 0x79, 0x40, 0x82, 0xbd, 0x84, 0x0c,
0xa9, 0x81, 0x71, 0xf7, 0x4d, 0x7c, 0xe8, 0xa8, 0xb0, 0x8b, 0x22, 0x65, 0xe6, 0x12, 0x8d, 0x12,
0x28, 0x26, 0x52, 0x6a, 0x4e, 0xd1, 0x91, 0xc8, 0x27, 0xdc, 0x7f, 0xb7, 0xdf, 0xec, 0x55, 0xe0,
0x28, 0x5e, 0x44, 0x1a, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
0x82,
};
const BITMAP_OPAQUE delete_track_xpm[1] = {{ png, sizeof( png ), "delete_track_xpm" }};
//EOF
@@ -0,0 +1,63 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x02, 0xd8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x95, 0x4b, 0x48, 0x54,
0x61, 0x14, 0xc7, 0xbf, 0x3b, 0x73, 0x9d, 0xb9, 0xef, 0x3b, 0x8a, 0x44, 0xa2, 0xe0, 0x66, 0x28,
0x72, 0x11, 0x44, 0x14, 0xd8, 0x42, 0x2a, 0x23, 0x12, 0x1f, 0xb9, 0x68, 0xd7, 0x2e, 0x02, 0xc3,
0x1e, 0x08, 0x2e, 0x4a, 0x2b, 0x88, 0x5e, 0x36, 0x88, 0x56, 0x1b, 0x45, 0x69, 0x51, 0x63, 0x42,
0x05, 0x39, 0x6a, 0xe5, 0xa3, 0x07, 0x4c, 0xab, 0x20, 0xa7, 0xb4, 0x14, 0x1c, 0xa1, 0x0c, 0x33,
0x47, 0xed, 0xe5, 0x4c, 0x92, 0x95, 0x0e, 0xf3, 0xef, 0xdc, 0xdb, 0x20, 0x04, 0xa6, 0x33, 0x8e,
0xab, 0xf0, 0xc2, 0x61, 0xbe, 0xfb, 0xf1, 0xcd, 0xf9, 0xf1, 0xfd, 0xcf, 0xf9, 0x9f, 0xcb, 0x58,
0xa2, 0x0f, 0xcf, 0xef, 0xe1, 0x44, 0x71, 0x8c, 0x56, 0xe9, 0x8b, 0x1f, 0x3c, 0xc3, 0x76, 0xc5,
0x1d, 0x67, 0xd9, 0x96, 0xe8, 0xbf, 0xb3, 0x38, 0x87, 0x23, 0x28, 0x54, 0x9c, 0x0c, 0x73, 0xba,
0x3e, 0x44, 0xef, 0xd2, 0x62, 0x20, 0x2c, 0x2b, 0xf6, 0xb3, 0xdd, 0x9c, 0xa6, 0x05, 0xa4, 0xbb,
0x9e, 0x88, 0xf6, 0x79, 0x0a, 0xb6, 0x63, 0x65, 0x33, 0x5c, 0x72, 0x72, 0x17, 0x65, 0xe4, 0x16,
0xe4, 0xd4, 0x75, 0xd5, 0x21, 0x9e, 0x28, 0xbb, 0x53, 0x06, 0x76, 0x9a, 0x81, 0x5b, 0xa3, 0xf9,
0x85, 0x0b, 0x55, 0xbf, 0xb4, 0xf1, 0x8f, 0x50, 0xc7, 0x27, 0xa1, 0x05, 0x26, 0xc1, 0xe7, 0xe5,
0x4d, 0x33, 0x87, 0xa3, 0x66, 0x41, 0x90, 0xcf, 0xe7, 0x43, 0x3c, 0x51, 0xdf, 0x51, 0x0f, 0xb6,
0x89, 0x07, 0x13, 0x84, 0x30, 0xbf, 0x33, 0x37, 0x28, 0x3f, 0x7c, 0x0c, 0xf5, 0xfd, 0x07, 0x08,
0x57, 0xae, 0xce, 0x5a, 0xb3, 0xb3, 0x83, 0x94, 0x12, 0x14, 0x07, 0x12, 0x02, 0x79, 0xbd, 0x5e,
0x38, 0xb7, 0x6e, 0x04, 0x89, 0x03, 0xb6, 0x99, 0x95, 0x33, 0x59, 0xee, 0x24, 0x00, 0x94, 0x37,
0xc3, 0xe0, 0x0b, 0x8b, 0xa6, 0x28, 0xdd, 0x29, 0x8a, 0x72, 0x52, 0x0f, 0x74, 0xb3, 0xda, 0xbf,
0x64, 0x8c, 0x15, 0xd2, 0xda, 0xda, 0x8a, 0xb5, 0x4e, 0x27, 0xa4, 0xca, 0x4a, 0x30, 0x5d, 0x02,
0xcb, 0xa2, 0x4a, 0x89, 0xe2, 0x13, 0x7b, 0x4d, 0x0d, 0xe4, 0x41, 0x3f, 0xac, 0x05, 0x05, 0x06,
0xe8, 0x92, 0x51, 0x75, 0x6b, 0xf6, 0xb6, 0x29, 0xba, 0xed, 0x74, 0xb4, 0x66, 0x52, 0xcc, 0xa0,
0xc6, 0xc6, 0x46, 0xe8, 0xe9, 0x19, 0x90, 0xae, 0xbb, 0x4d, 0x99, 0x92, 0x0e, 0x97, 0x80, 0x2f,
0xde, 0xfb, 0x9d, 0x2f, 0x2e, 0x9e, 0x16, 0xda, 0xda, 0x20, 0xbd, 0x7a, 0x0d, 0x7b, 0xed, 0xe5,
0x30, 0x5f, 0x54, 0x14, 0xa2, 0xbd, 0x90, 0x21, 0xa3, 0x3a, 0x32, 0x0a, 0xdb, 0x91, 0xa3, 0x33,
0x9c, 0xa6, 0xfb, 0xcd, 0xd6, 0x5f, 0x0a, 0xd2, 0xd2, 0xd2, 0x02, 0xde, 0x6e, 0x87, 0x7c, 0xff,
0x01, 0xd4, 0xb1, 0x09, 0x18, 0x09, 0x0c, 0xa9, 0x64, 0xff, 0x10, 0xa4, 0xfe, 0x01, 0x48, 0xbd,
0xbd, 0x10, 0xe9, 0x9c, 0xd4, 0xdb, 0x07, 0x69, 0x60, 0xc0, 0xdc, 0x57, 0xde, 0x0e, 0x9b, 0xe7,
0xd4, 0xc0, 0x04, 0xec, 0xc7, 0x4f, 0x84, 0x4d, 0x9f, 0x2d, 0x05, 0xea, 0xe9, 0xe9, 0xc1, 0xc1,
0xd2, 0x52, 0xa8, 0x1b, 0xb2, 0x20, 0x3f, 0xf7, 0x99, 0x09, 0x44, 0xf7, 0x4d, 0xd8, 0xa9, 0x36,
0x86, 0x6c, 0xa2, 0xf7, 0x29, 0xa4, 0x17, 0x2f, 0x21, 0x78, 0x3c, 0xf4, 0x5e, 0x6b, 0xee, 0x4b,
0x1d, 0x9d, 0x7f, 0xce, 0xdd, 0xba, 0x1d, 0x21, 0xf9, 0x82, 0x86, 0xa9, 0x63, 0xae, 0x51, 0x95,
0xcb, 0x05, 0x25, 0x83, 0xe4, 0xf3, 0xb4, 0x81, 0xd3, 0x65, 0xb0, 0xf5, 0xa9, 0xed, 0x9c, 0xa2,
0x0c, 0xda, 0xab, 0xab, 0xe9, 0x66, 0xfd, 0xb0, 0xe6, 0xe7, 0x87, 0x98, 0xaa, 0x76, 0x92, 0xb7,
0xda, 0xad, 0xb9, 0xb9, 0x41, 0xe1, 0xfc, 0xc5, 0x59, 0x4e, 0x55, 0x03, 0x86, 0xa9, 0xe3, 0xee,
0x3a, 0xb7, 0x9b, 0x6a, 0x94, 0x9e, 0x06, 0x96, 0x64, 0x35, 0x4c, 0xbb, 0x9d, 0x3a, 0xeb, 0x9a,
0x71, 0x0b, 0x43, 0xae, 0x68, 0x33, 0x14, 0x52, 0xec, 0xa0, 0xd6, 0x9f, 0xa3, 0x89, 0xd1, 0x47,
0xeb, 0xd4, 0x65, 0xfb, 0xc8, 0xd5, 0xec, 0x02, 0x4b, 0x23, 0x1f, 0x59, 0x2c, 0x11, 0xea, 0xba,
0x9f, 0xa2, 0xbb, 0x09, 0xca, 0xf0, 0x3b, 0x24, 0x95, 0x1c, 0x9a, 0x21, 0xc0, 0x0f, 0xd3, 0x47,
0x36, 0x5b, 0x33, 0xfd, 0xda, 0x12, 0x32, 0x6c, 0x43, 0x77, 0x03, 0xc8, 0x29, 0xe0, 0x1c, 0xda,
0x57, 0xa9, 0xfd, 0x1e, 0xd4, 0xd1, 0xb1, 0xf9, 0xb0, 0x55, 0x54, 0xce, 0x52, 0x4d, 0x9e, 0x19,
0xa3, 0x36, 0xe1, 0xc9, 0x60, 0x82, 0x8c, 0x59, 0x97, 0xc3, 0x4a, 0xb8, 0x94, 0x94, 0x90, 0x42,
0x8d, 0xa0, 0x4d, 0x7c, 0x82, 0x74, 0xa3, 0x29, 0x42, 0xf5, 0x19, 0xa1, 0x94, 0xfa, 0x8a, 0x8c,
0xa0, 0x79, 0x90, 0x51, 0x23, 0x9b, 0x6d, 0x9f, 0x25, 0x33, 0xf3, 0x9b, 0xd2, 0xfd, 0x88, 0x1a,
0x44, 0xff, 0x42, 0xe9, 0x9c, 0xff, 0x1c, 0xde, 0x09, 0x81, 0xe8, 0xb1, 0x68, 0xda, 0x39, 0x6a,
0xdf, 0x39, 0x5a, 0xe6, 0x2c, 0xfa, 0x39, 0x4a, 0x14, 0x14, 0x9d, 0x67, 0xeb, 0x96, 0xfc, 0x40,
0xae, 0x00, 0x28, 0xb6, 0x67, 0x15, 0xb4, 0x0a, 0xfa, 0x7f, 0x41, 0xbf, 0x01, 0xba, 0x28, 0xea,
0x15, 0x41, 0x75, 0x1d, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
0x82,
};
const BITMAP_OPAQUE drag_outline_segment_xpm[1] = {{ png, sizeof( png ), "drag_outline_segment_xpm" }};
//EOF

Some files were not shown because too many files have changed in this diff Show More