Compare commits

...

1268 Commits

Author SHA1 Message Date
jean-pierre charras 24ab8141ae Gerber output: fix a potential minor issue in a G04 line comment.
In gbr files only ASCII7 chars are allowed.
However, in a comment line a UTF8 string is used. It should not create issues, but it is incorrect.
2019-01-27 10:11:03 +01:00
jean-pierre charras 7848c3acf3 Fix cross-probing issue (not working) when a net name or a pin name contains a space. 2019-01-24 16:59:34 +01:00
jean-pierre charras 752cc43fb8 Fix 2 minor wxWidgets alerts. 2019-01-21 19:53:40 +01:00
jean-pierre charras cf5d3ae43f Pcbnew: fix missing initialization in PCB_PAINTER::draw( const TRACK* aTrack, int aLayer )
the stroke mode was always activated, even in fill mode. creating incorrect size shape for null length track segments.
2019-01-20 10:10:18 +01:00
jean-pierre charras e22113ccef * Toolbars with wxChoice: Fix incorrect ReCreate Toolbar methods: they recreated these wxChoice without deleting the previously created.
This issue created memory leak and not working wxChoice (for instance after modifying the language selection).
Now, they are created only once, never recreated.
2019-01-20 10:07:23 +01:00
joel-bertrand-JKB 35dc387fc6 Fix duplicate directives in Spice netlist inside .control ... .endc
Fixes: lp:1812082
https://bugs.launchpad.net/kicad/+bug/1812082
2019-01-16 19:54:55 +01:00
Wayne Stambaugh 025578fee7 Do not set wxSetAssertHandler on non-debug builds.
Fixes lp:1809622

https://bugs.launchpad.net/kicad/+bug/1809622
2019-01-15 09:34:32 -05:00
Wayne Stambaugh 45a3d86d36 Eeschema: fix schematic symbol parsing bug.
Schematic symbol library link names are unquoted strings that can
contain non-ascii characters which breaks the parser.  Converting
the line to uft-8 before breaking the string into tokens resolves
the issue.

(cherry picked from commit b8de4e73bf)
2019-01-08 12:26:21 -05:00
Wayne Stambaugh 9f1b6680a2 Eeschema: fix library symbol pin definition parsing bug.
Pin names are unquoted strings that can contain non-ascii characters
which breaks the parser.  Converting the line to uft-8 before breaking
the string into tokens resolves the issue.

(cherry picked from commit 742961119d)
2019-01-08 12:25:24 -05:00
Wayne Stambaugh 385eb49cb2 Fix schematic append clear annotation bug.
Clear the annotation of only the appended schematic and any sheets in it's
hierarchy.  Do not clear the annotation of the symbols in the target sheet.

Fixes lp:1805695

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

(cherry picked from commit 07ebc4df14)
2019-01-08 11:55:05 -05:00
Wayne Stambaugh 61b94c8c2c Eeschema: fix UTF8 character handling bug in legacy parser.
Iterating over unquoted strings as ASCII8 fails when ' ' character is
not the LSB of a UTF8 string with wide characters.  Change parsing method
for unquoted strings to convert the entire line as UTF8 and then use
wxStringTokenizer to break the line into tokens at the ' ' characters.

Fixes lp:1806206

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

(cherry picked from commit a61a51f26e)
2019-01-08 11:54:48 -05:00
Seth Hillbrand 4aeef1e09e pcbnew: Check for valid pointer before deref
In legacy toolkit, we do not keep the corner pointers, so dereferencing
causes crashes.

Fixes: lp:1808852
* https://bugs.launchpad.net/kicad/+bug/1808852
2018-12-19 16:53:40 -08:00
jean-pierre charras 93caff0ac1 Remove overzealous assert. 2018-12-16 09:30:30 +01:00
jean-pierre charras 4e3fe6c55d Make DRC markers always selectable.
Fixes: lp:1808181
https://bugs.launchpad.net/kicad/+bug/1808181
2018-12-16 09:30:29 +01:00
Jeff Young 9240a54f4a Allow marker selection in high-contrast mode.
Fixes: lp:1793357
* https://bugs.launchpad.net/kicad/+bug/1793357

(cherry picked from commit 04534c83e0)
2018-12-12 12:15:25 -08:00
jean-pierre charras 4e04468e47 Eagle(.lbr) footprints not listed in Library Browser
Fixes: lp:1807629
https://bugs.launchpad.net/kicad/+bug/1807629
2018-12-11 16:07:26 +01:00
jean-pierre charras 857d038b5d Gerber viewer: Ensure arc interpolation is used only after a arc command. Remove also non existing G command codes. 2018-12-09 18:21:54 +01:00
jean-pierre charras ec1eaf5d2d Gerbview small fix to speed up opengl canvas switch 2018-12-09 18:21:27 +01:00
jean-pierre charras 7134b1c83f Gerber plotter: remove a G01 useless command, and ensure this command exists in plot polygon. 2018-12-09 18:17:47 +01:00
jean-pierre charras bc8739f930 Eeschema: fix incorrect parsing of line color (r v b values). Only the R and V were read, the parsing was stopping before reading the B value. 2018-12-09 18:16:50 +01:00
Maciej Suminski 805bb3160f Fix for dark mode on macOS Mojave
Thanks to Scott Rapson and Justace Clutter for the solution.

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

(cherry picked from commit 766156ed87)
2018-12-07 14:29:22 +01:00
Jeff Young 187d7729ff Don't go to '-' numbering till the range reaches 3.
(cherry picked from commit c4ff17d3ec)
2018-12-03 18:49:03 +00:00
Jeff Young 940b08ab85 Sort references before removing duplicates.
std::unique only works within consecutive blocks, so the list must
be sorted first.  (We need it sorted in the end anyway, so no
big deal.)

(cherry picked from commit 90df7a8b22)
2018-12-03 18:48:37 +00:00
Jeff Young e8c8bf8d11 Fix range-based reference formatter.
Fixes: lp:1792483
* https://bugs.launchpad.net/kicad/+bug/1792483

(cherry picked from commit 243b05b2c3)
2018-12-03 18:48:06 +00:00
Wayne Stambaugh 5d8c3e5033 Start release version 5.0.3 development. 2018-11-26 18:09:49 -05:00
Wayne Stambaugh ec5ed68af8 Tag release version 5.0.2. 2018-11-26 17:59:28 -05:00
jean-pierre charras f66ccfb64f 3D viewer: Fix hanging when a board is displayed in non realistic mode and the body is not shown. 2018-11-26 15:59:54 +01:00
jean-pierre charras 7eac7dcdcb dialog_3D_view_option_base.cpp: fix a minor wxWidgets alert. 2018-11-26 15:59:54 +01:00
Maciej Suminski 1b1a3763d2 PNS: validate SHAPE_LINE_CHAIN before accessing its segments
(cherry picked from commit 4d73cfb8a1)
2018-11-26 08:27:27 +01:00
Seth Hillbrand 50eedcf0b3 MSW Ratsnest: Force marking ratsnest dirty
When updating the status of the ratsnest, we mark its target layer as
dirty to ensure the revised data are used to draw/clear the ratsnest

Fixes: lp:1800301
* https://bugs.launchpad.net/kicad/+bug/1800301
2018-11-23 11:44:33 -08:00
Seth Hillbrand 62561292e9 clipboard: re-add limited LOCALE_IO to SaveSelection
JP notes that there is an issue with comma-based decimal locales and the
SaveSelection that is addressed by having a LOCALE_IO call in a limited
block.

This changed the copy timing of the clipboard and the interaction with
KDE Klipper again.  To address this, we isolate the clipboard open call
to the end of the routine and force a round-trip of the clipboard data
before exiting.

(cherry picked from commit 36a69a7d5d)
2018-11-22 08:17:38 -08:00
Jeff Young 03132cabee Make sure original part record always has the write library nickname.
Fixes: lp:1804293
* https://bugs.launchpad.net/kicad/+bug/1804293

(cherry picked from commit 023a445e9f)
2018-11-21 23:24:13 +00:00
Seth Hillbrand 82c9e54735 pcbnew: Set clipboard locale to avoid Klipper crash
Klipper seems to poll at odd times.  When we copy to wxTheClipboard
in one locale and Klipper extracts data in a different locale, it throws
an XError.  We don't need the extra LOCALE_IO calls as Format() uses its
own LOCALE_IO setting.

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

(cherry picked from commit 964d6ebc06)
2018-11-21 12:03:11 -08:00
Seth Hillbrand c0d9b9ab81 ratsnest: Fix state issue switching in local tool
The ratsnest layer needs to be always enabled in GAL rather than taken
from the board settings.  This also adds a finalize handler to the
picker tool that allows a picker-caller to perform a specific action
when the picker tool exits.  In this case, we use it to clear the local
ratsnest selections back to the default.

Fixes: lp:1800301
* https://bugs.launchpad.net/kicad/+bug/1800301
2018-11-20 20:13:15 -08:00
Jeff Young daf4985a60 Don't trim entire wires.
Fixes: lp:1804297
* https://bugs.launchpad.net/kicad/+bug/1804297

(cherry picked from commit ae6989f3a1)
2018-11-20 22:03:04 +00:00
Seth Hillbrand b1805dd254 Ratsnest: Force update after modifying visible nets
After adjusting the ratsnest, we force the view update to re-draw the
ratsnest to the screen.  This is not required for Linux but seems to
have no ill effects and may help MSW show local ratsnest changes.

Possibly related to lp:1800301
2018-11-19 21:12:47 -08:00
Jeff Young 66b0aca696 Don't leave a selection with a deleted item in it.
Fixes: lp:1803730
* https://bugs.launchpad.net/kicad/+bug/1803730

(cherry picked from commit 5bb5aea936)
2018-11-19 16:07:41 +00:00
Seth Hillbrand 22fbf30f22 Ratsnest: Improve show heuristics
When the local ratsnest tool is used, it should toggle the state based
on the global ratsnest visibility.  After changing state, the layer
cache is marked as well.

Possibly related to lp:1800301
2018-11-18 19:57:37 -08:00
Mario Luzeiro f3d1f31e1d Fixes 3D Viewer: Raytracing line artifact, lp:1680530 2018-11-14 09:53:39 -05:00
jean-pierre charras 9610f8f208 NC drill (Excellon) exporter: remove useless M71 / M72 lines. They are probably incorrect in V2 format, and the format is already specified. 2018-11-11 20:29:48 +01:00
jean-pierre charras 76adf7dbe8 Gerbview: NC drill file reader: add support for routing mode, used by latest Kicad version.
From master branch commit 4136aca221
2018-11-10 10:28:37 +01:00
jean-pierre charras 3f32f0be9e Gerbview: minor fixes from master branch. 2018-11-10 09:29:21 +01:00
Seth Hillbrand a77caa6baa pcbnew: Connectivity threads update
This is a melded cherry-pick of the following commits from 5.1

59fb6d8851
ed1c8eee9e
4a730e6c54

This implements the std::async connecitivty and locking for the 5.0
branch
2018-11-07 12:33:30 -08:00
Seth Hillbrand 0b5ca1a883 ratsnest: Move ratsnest connectivity to async
This a partial pick of 59fb6d8851 but
revised for the 5.0.x branch.
2018-11-07 12:21:26 -08:00
jean-pierre charras 839ade2c05 Gerber job file: fix incorrect GUID.
Fixes: lp:1801696
https://bugs.launchpad.net/kicad/+bug/1801696
2018-11-06 08:17:22 +01:00
jean-pierre charras 922ce89643 3D viewer: ensure 0 sized circles (that crash the viewer) are skipped. 2018-11-05 08:39:00 +01:00
Seth Hillbrand 78f7ba10ef pcbnew: Prevent degenerate values in Eagle import
Importing Eagle files allowed for invalid zone values for clearance and
minimum width that triggered asserts in the 3d-viewer.

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

(cherry picked from commit df562b7ec0)
2018-11-04 11:03:00 -08:00
Maciej Suminski dd39599903 Link eeschema with ngspice DLL
Adds a link-time dependency for libngspice, so that other tools may
detect ngspice as a KiCad dependency.

The library is still loaded with dlopen() as it gives a way to reload it
in case of problems. The DLL name is recognized during CMake
configuration and used to load the library at runtime.
2018-10-30 08:40:29 +01:00
jean-pierre charras dba32717b1 DIALOG_PLOT_BASE: Fix a minor wxWidgets alert. 2018-10-29 20:46:00 +01:00
jean-pierre charras 57800b934e Kicad, Windows specific: disable a overzealous wxWidgets assert when reading a file.
When reading (and writing) a file, we must switch the current locale to "C" for LC_NUMERIC.
Unfortunately, on Windows, a wxWidgets assert was shown when reading some items (bitmaps images).
This wxWidgets assert (related to decimal separator) is overzealous and is now hidden only when reading/writing files.
2018-10-29 20:34:48 +01:00
jean-pierre charras 4daaaa373c Pcbnew, Gerber output: fix incorrect UUID format in %TF.ProjectId attribute.
Fixes: lp:1800459
https://bugs.launchpad.net/kicad/+bug/1800459
2018-10-29 18:57:39 +01:00
Stefan Brüns 36bb92f844 Use fixed version for libngspice.so.0
CanonicalizeName only adds the lib prefix and .so suffix, so loading
libngspice.so fails until the development package is installed.
MAC/Windows code paths lookup soversion 0 of ngspice as well, as this
is the only compatible version.
2018-10-27 10:57:08 +02:00
Wayne Stambaugh d95ab28db9 Update appdata license fields to reflect the latest license changes. 2018-10-24 11:06:01 -04:00
Wayne Stambaugh 09616fff7a Update license to AGPL due to TTL license.
The decision to include the TTL library make KiCad a derivative work
under the terms of the AGPL version 3 or later license.

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

Fixes lp:1797095

https://bugs.launchpad.net/kicad/+bug/1797095
2018-10-24 10:00:10 -04:00
Jeff Young f87a22fefb Add missing radio button to group.
Fixes: lp:1799654
* https://bugs.launchpad.net/kicad/+bug/1799654
2018-10-24 13:35:55 +01:00
Seth Hillbrand 2701bdbbac Prevent excess precision errors on 32-bit builds
The compile flag -ffloat-store requires floating point values to be
stored in memory rather than in registers to prevent errors when two
numbers are compared that were stored in different locations.

(cherry picked from commit 40c70dd008)
2018-10-23 19:25:50 -07:00
Michael Kavanagh 49753d9dad Update Eeschema BOM dialog html help text
Now links to relevant section in stable eeschema docs.

Fixes: lp:1798248
https://bugs.launchpad.net/kicad/+bug/1798248
2018-10-22 13:21:38 -04:00
jean-pierre charras 272b477e91 Opengl: avoid useless wxASSERT when a char is not found in font used to display netnames/padnames
They are replaced by '?'
It happens for some esoteric unicode chars.
2018-10-20 18:50:15 +02:00
jean-pierre charras e453b5b87b Page layout bitmap size wrong in modern/GAL canvases.
The image scale set by pl_editor was not taken in account when drawing the page layout.
2018-10-20 18:31:19 +02:00
jean-pierre charras c08d3baf8c Gerber file generation: remove a optional info in .FileFunction: the layer type. TF.FileFunction,Copper,L1,Top,Signal is now TF.FileFunction,Copper,L1,Top
This param is not useful, and probably never correctly set by users, because is is not used by Pcbnew.
(It is used only for dsn export)
2018-10-19 18:47:23 +02:00
Maciej Suminski 3d9e6867cf Spice netlist exporter: handle multiline directives
Fixes: lp:1797937
* https://bugs.launchpad.net/kicad/+bug/1797937

(cherry-picked from 9757107b)
2018-10-19 17:34:14 +02:00
jean-pierre charras bd1b15ded7 Eeschema, spice netlist exporter: fix an issue that converted spice string commands to lowercase.
Therefore, it can breaks some commands, especially filenames.

Partial fix of bug 1797937.

(cherry-picked from 8f9b0f02)
2018-10-19 17:00:11 +02:00
jean-pierre charras 8f87aae99e Page layout editor: fix a bug in GUI: the PPi setting was not displayed for bitmap items 2018-10-19 13:51:41 +02:00
Seth Hillbrand 43987cc50c UTF8: Fix MSVC builds
MSVC does not support variable length arrays.  Substitute a std::vector
instead.

(cherry picked from commit 6d8a759c75)
2018-10-18 11:50:04 -07:00
Seth Hillbrand 6106210c87 UTF8: Correct MSW issue with previous commit
Linux does not handle the resize command with wide-character extended
table UTF-8.  The solution did not work for W7-32bit.  This is a
compromise, attempting first the preferred, previous solution and
falling back to the secondary solution.
2018-10-17 12:12:49 -07:00
Seth Hillbrand b37bc69476 UTF8: Utilize the safe conversion from wchar
Invalid wchar characters would throw an exception.  We need a defined
output from the += operator, even for unknown character.

Fixes: lp:1798144
* https://bugs.launchpad.net/kicad/+bug/1798144
2018-10-16 16:36:42 -07:00
Seth Hillbrand cccf4cf20b pcbnew: Fix crash when removing polygon corners
GetSelectedRows() returns -1 when no rows are selected.

Fixes: lp:1798095
* https://bugs.launchpad.net/kicad/+bug/1798095
2018-10-16 09:08:03 -07:00
John Beard 99549f816f QA: Remove obsolete fillet refactor tests
These tests are fundamentally broken as they test two fillet
implementations against each other, but the two implementations
no longer have the same interface or meaning (one has a fixed
segment count, one has a fixed error).

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

Fixes: 1785377
https://bugs.launchpad.net/kicad/+bug/1785377
2018-10-16 09:40:06 -04:00
Seth Hillbrand e34dc4abb1 Revert "pcbnew: Fix memory leak in Eagle importer"
This reverts commit a5bdee747a.
2018-10-14 06:47:20 -07:00
jean-pierre charras 82b37a5cbe Fix an issue (items inside FOOTPRINT_WIZARD_FRAME not displayed) when a more recent Kicad version was run.
This is due to use  of LoadPerspective() that creates many issues when a frame structure changes.
The call to this useless method is just removed.
2018-10-13 10:10:15 +02:00
jean-pierre charras 561dc052ff Update FootprintWizardBase.py according to recent changes in API 2018-10-13 09:39:49 +02:00
jean-pierre charras 553b529fd4 Gerbview: fix a overzealous wxASSERT
Fixes: lp:1796744
https://bugs.launchpad.net/kicad/+bug/1796744
2018-10-09 08:47:16 +02:00
Wayne Stambaugh 7573c6a4e4 Start release version 5.0.2 development 2018-10-08 17:45:02 -04:00
Wayne Stambaugh c000d70a51 Tag release version 5.0.1 2018-10-08 17:14:38 -04:00
Seth Hillbrand 234b01905d eeschema: fix mistaken wire removal bug
The wire between two points should not be trimmed if it starts or ends
on one of the component's connection points.

(cherry picked from commit d2906f7975)
2018-10-08 11:35:12 -07:00
Seth Hillbrand a5bdee747a pcbnew: Fix memory leak in Eagle importer
unqiue_ptr release creates a memory leak unless the returned pointer is
freed.

(cherry picked from commit 45d438cd13)
2018-10-08 11:35:05 -07:00
Seth Hillbrand 9977d0d737 pcbnew: fix pad distance calc in gateways
The pad distance was fixed to 0, making the gateway priority set
artificially to 1

(cherry picked from commit 77eeda4191)
2018-10-08 11:34:46 -07:00
Seth Hillbrand 46f7011463 pcbnew: Zone selection heuristic continuity for edge
If the user is carefully selecting the zone edge, we do not filter the
zone preemptively from our disambiguation list in the same manner as we
do for selecting on zone copper.

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

(cherry picked from commit f11cb736e5)
2018-10-08 11:34:38 -07:00
Wayne Stambaugh 876232aa7a Fix LIB_ID illegal character tests.
The '/' and ':' are reserved and cannot be used in symbol or footprint
names.  They will cause the LIB_ID parser and formatter to fail.  While
it seems like they should be legal in symbol alias names, they will
trigger a symbol rescue the next time the schematic is loaded.

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

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

Fixes lp:1795600

https://bugs.launchpad.net/kicad/+bug/1795600
2018-10-07 15:35:16 -04:00
jean-pierre charras 39c38fb386 Fix a side effect of our LOCALE_IO by using setlocale( LC_NUMERIC, "C" ) instead of setlocale( LC_ALL, "C" ) LC_NUMERIC is the right option to use in LOCALE_IO because only the floating point separator must be modified When using LC_ALL, the Env var expansion wxGetEnv() was not working when the env var contains non ascii7 codes after a call to LOCALE_IO. When using setlocale( LC_NUMERIC, "C" ) in LOCALE_IO, wxGetEnv() works fine.
Fixes: lp:1795990
https://bugs.launchpad.net/kicad/+bug/1795990
2018-10-07 16:27:47 +02:00
jean-pierre charras 99f25b0895 Opengl fix: bitmaps having a width not multiple of 4 were incorrectly drawn.
This fix draws a "sub bitmap" having a width multiple of 4.
(The loss of 1 to 3 pixels in horizontal size should be not really noticeable)

(cherry picked from commit 3a02e54411)
2018-10-06 07:22:38 -07:00
Tomasz Wlostowski a43ec3e3f0 OPENGL_GAL: optimized JP's bitmap drawing function to use textures
(cherry picked from commit 516cf47946)
2018-10-06 07:22:38 -07:00
jean-pierre charras 7b596f0365 GAL canvases: add DrawBitmap(), using a basic brute force algo for OpenGL, and a optimized code for Cairo. In this fix the brute force means draw each pixel as a rectangle. It works fine, but could be optimized.
(cherry picked from commit fefc7b8172)
2018-10-06 07:22:38 -07:00
Seth Hillbrand dd22c73666 pcbnew: Allow deselection when clicking on zone
Deselection by clicking on a zone makes working with plane zones easier
by allowing the selected item to de-selected by clicking on a zone.
Once the selection is cleared, the zone may be re-selected as normal.
Clicking on non-zone items while a separate item is selected will still
select the new non-zone item without requiring a second click.
2018-10-06 07:22:35 -07:00
Seth Hillbrand d15b34988d pcbnew: Adjust selection behavior in highlight net
Prefer non-zones in highlight net in the same way we do for the
selection tool.  Highlight net just has separate logic and was missed
previously.
2018-10-05 19:58:25 -07:00
Seth Hillbrand 5e0ef36719 pcbnew: Improve zone/polygon selection
Allows selection of polygons and zones by their visible area.  Will only
select polygons/filled areas when they are unobstructed by other
elements in the footprint/pcb.  Also adds a "skip heuristics" modifier
key for clicking (ALT) that allows the full disambiguation list to be
displayed without removing less-likely elements.  This dovetails the
zone/polygon selection as it allows selecting even when areas a fully
overlapped.

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

(cherry picked from commit 6a6d580a1c)
2018-10-03 07:22:16 -07:00
jean-pierre charras 6994291997 Re activate Zone Unfill All command, accidentally removed by a previous commit.
Fixes: lp:1795293
https://bugs.launchpad.net/kicad/+bug/1795293
2018-10-01 09:05:08 +02:00
Seth Hillbrand 9837d1624f pcbnew: Force at least one connectivity thread
We want to keep at most 1 thread per 2 connectivity updates but we need
to force that floor to be at least 1 for when there is only 1
connectivity update.

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

(cherry picked from commit 89a3d2b451)
2018-09-30 12:14:26 -07:00
Jeff Young 13a41f11eb Don't deselected items that have been deleted.
De-referencing freed memory is never a good idea.

Fixes: lp:1795195
* https://bugs.launchpad.net/kicad/+bug/1795195
2018-09-30 15:46:58 +01:00
Seth Hillbrand 59723ce3ab pcbnew: Handle SEGZONE in GAL
SEGZONEs are no longer created by pcbnew but may exist in older boards.
This allows deleting the old fills in a manner similar to the deletion
in Legacy canvas.

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

(cherry picked from commit ef6f7e96f3)
2018-09-29 15:12:24 -07:00
Seth Hillbrand 79d19d9055 pcbnew: Rename PCB_ZONE_T and remove from connectivity
SEGZONE types were confusingly named PCB_ZONE_T.  Zones in pcbnew are
now _only_ PCB_ZONE_AREA_T, so we name segzone types PCB_SEGZONE_T to be
clear.

This also removes processing of the SEGZONEs from connectivity
calculations.

(cherry picked from commit b3a5e08c2f)
2018-09-29 15:12:21 -07:00
Seth Hillbrand 115f318976 pcbnew: Avoid double-separators in context menu
(cherry picked from commit a81e3c2b13)
2018-09-29 15:10:10 -07:00
jean-pierre charras 51a74b53cb Pcbnew: Crash after running external plugin Happens only in Opengl mode. So enforce controls in 3 group function: DrawGroup, ChangeGroupColor, ChangeGroupDepth.
Fixes: lp:1795044
https://bugs.launchpad.net/kicad/+bug/1795044
2018-09-29 14:19:07 +02:00
John Beard f591f8741a Prevent segfault when undoing or resetting non-hotkey rows
This is caused by:

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

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

This is a ported version of commit 704615721 on the master branch.

Fixes: lp:1794756
* https://bugs.launchpad.net/kicad/+bug/1794756
2018-09-28 10:20:53 -04:00
Jeff Young f56ea6bf3c Don't assume GetFlags() != 0 means it's being edited.
It could just mean it's selected, highlighted or brightened.

Fixes: lp:1794624
* https://bugs.launchpad.net/kicad/+bug/1794624
2018-09-27 22:17:32 +01:00
Seth Hillbrand e3f12ec0d9 pcbnew: Do not allow drag to violate DRC without permission
m_dragstatus is set to true when a valid route is created given the
user's constraints.  We need to check this before committing the route
to the board.

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

(cherry picked from commit 317ca8e64d)
2018-09-27 13:09:40 -07:00
Seth Hillbrand c26311918e pcbnew: Deselect all items in a delete commit at once
Deselecting each individually had the side-effect of possibly re-drawing
the view in between actions, leading to visible artifacts in the router
(where invisible items are set visible before committing a change)

(cherry-picked from commit 491098af35)
(cherry picked from commit 65678b223a)
2018-09-26 09:06:48 -07:00
Jeff Young 1f19903e7e Backport text nanny limits by hand (as other commit was mixed up).
Fixes: lp:1794345
* https://bugs.launchpad.net/kicad/+bug/1794345
2018-09-25 21:13:13 +01:00
Jeff Young 1e223b9027 Don't use nullprt for a dialog's parent.
Fixes: lp:1791561
* https://bugs.launchpad.net/kicad/+bug/1791561

(cherry picked from commit 3f23e9ac46)
2018-09-25 04:41:42 -07:00
Seth Hillbrand 036288d18f pcbnew: Fixup for edde02481 to enable aux axis
Correcting edde02481 which had side effects to
efdbc91e42 while dragging a line but not a
zone.

(cherry picked from commit ee465fb23c)
2018-09-24 14:33:28 -07:00
Seth Hillbrand 8efdcbfaf1 pcbnew: Fix alignment with off-grid drag
Commit efdbc91e42 broken the primary
alignment mechanism for maintaining the current point as an auxilliary
grid reference.  This reverts that commit and fixes both the initial
issue and the associated bug by applying the primary constraint after
the secondary.  In this way, we consider the secondary constraint as an
additive rather than alternative constraint.

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

(cherry picked from commit edde02481e)
2018-09-24 14:08:49 -07:00
Wayne Stambaugh 6c3b4e5824 Pcbnew: change step export dialog action button text.
Change "OK" to "Export" so user is not surprised by the fact that the
dialog does not close after the step file is created..

Fixes lp:1784260

https://bugs.launchpad.net/kicad/+bug/1784260
2018-09-24 14:58:24 -04:00
Seth Hillbrand 9831a14ef3 eeschema: Re-add auto-wire removal
Somewhere during v5 rc cycle, the trimming of wires laid over simple
components was removed.  The wires were still removed as soon as the
user moved the component again.  This corrects the first behavior to
intended action for simple components.

Fixes: lp:1794019
* https://bugs.launchpad.net/kicad/+bug/1794019
2018-09-24 06:38:52 -07:00
Seth Hillbrand f3400e03c6 pcbnew: fix temp var type 2018-09-24 06:38:52 -07:00
Jeff Young 04e699f789 Show pads when parent footprint is selected.
Fixes: lp:1670090
* https://bugs.launchpad.net/kicad/+bug/1670090

(cherry picked from commit 66848b9334)
2018-09-24 06:38:52 -07:00
Seth Hillbrand 9e61ebfb0b pcbnew: Standardize zone fills threading
This is a boyscouting commit to standardize the threading of zone fills.
We do not need to join threads after their completion, instead we simply
allow them to clean up their memory without blocking the user.  This
also sets the maximum number of threads that may be created to the
number of zones being filled.  More than this will only leave un-used
threads being created and immediately killed.

We also include the connectivity search as a phase in the fill progress
reporter.  This was the case before but did not utilize the correct
maxsize, leading to stalled progress bar.

(cherry picked from commit 969e85daa3)
2018-09-24 06:38:52 -07:00
Seth Hillbrand 9e355c29f1 Removing OpenMP
This commit finishes the removal of OpenMP from the KiCad codebase.
Removed in this commit are the OpenMP calls in 3d-viewer and
qa/polygon_triangulation as well as all references in CMakeLists.txt

std::thread is used instead for multithreaded computation
(cherry picked from commit f8784f30a8)
2018-09-24 06:38:52 -07:00
Seth Hillbrand 5ce0c2065c pcbnew: Cancel highlight with ESC
When editing the pcb, Ctrl-Click will highlight a net.  This allows
de-highlight with the ESC/cancel action from the selection tool.  Inside
the highlight tool, ESC reverts to the selection tool while keeping the
net highlighted.

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

(cherry picked from commit 518b53f78c)
2018-09-24 06:38:52 -07:00
Wayne Stambaugh 3f58dce1de Eeschema: fix yet another lock file issues.
Reset lock file when saving a schematic sheet to a different file name.
This prevents a file is already open error from being displayed when
opening the original file.

Fixes lp:1788507

https://bugs.launchpad.net/kicad/+bug/1788507
2018-09-24 09:00:11 -04:00
Seth Hillbrand c5c89fd216 pcbnew: Prevent redo while moving items
Fixes: lp:1793948
* https://bugs.launchpad.net/kicad/+bug/1793948
2018-09-23 06:02:50 -07:00
Jeff Young 1820e81f5e Don't allow drawing to a zero-height or zero-width GAL canvas.
Fixes: lp:1793913
* https://bugs.launchpad.net/kicad/+bug/1793913

(cherry picked from commit 0309228276)
2018-09-22 22:10:49 +01:00
Maciej Suminski 4fcd80eda1 Spice simulator: change gain units to dBV
(cherry-picked from commit 85ef0584)
2018-09-22 20:08:13 +02:00
Seth Hillbrand e7a9643b37 kicad2step: Provide floats separated
Clang++ seems to be in left-field here as it processes a stringstream
1.0X1.0 >> double as a hexadecimal floating point ('X' character) and
throws an error rather than converting 1.0 and stopping when it reaches
a non-numeric character.  This causes errors when exporting step on Mac,
which uses clang++ by default.

Adding spaces to the string is more explicit and doesn't break gcc.  It
will be sufficient until we get rid of kicad2step as an external
utility.

Fixes: lp:1778564
* https://bugs.launchpad.net/kicad/+bug/1778564
2018-09-22 08:52:05 -07:00
Wayne Stambaugh 3e28ac9c7c Pcbnew: fix lock file bug.
The lock file code would reset the lock file every other time the same
board file was opened in Pcbnew in the stand alone mode.  This created
the perfect toggle switch causing the board to be reloaded every other
time the same board was selected.

Fixes lp:1777599

https://bugs.launchpad.net/kicad/+bug/1777599
2018-09-22 09:12:16 -04:00
Seth Hillbrand 4c37defd35 pcbnew: Remove OpenMP
OpenMP is not available for macos, so moving to a std::threads
implementation brings platforms into shared code.

This also reduces the OpenMP overhead when computing connectivity and
ratsnests.

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

(cherry picked from commit c0f067bf90)
2018-09-20 16:48:08 -07:00
Seth Hillbrand a4564db082 Removing some unused code
(cherry picked from commit 47fac8a259)
2018-09-20 16:47:59 -07:00
Martin Aberg dd3c24faf8 Generate PYTHONPATH from CMake information
The CMake scripts calculate the install path for python scripts by
  distutils.sysconfig.get_python_lib(
    plat_specific=0,
    standard_lib=0,
    prefix=''
  )
which generates a string in line with
  lib/python2.7/site-packages

This string ends up in the CMake variable PYTHON_DEST and is used by the
install step as destination directory for pcbnew.py.

There has been a hard-coded assumption on the content of that string in
PcbNew which is not compatible with FreeBSD 11.1.

This commit eliminates the hard-coded assumption in PcbNew and reuses
the install path as known by CMake.

Fixes: lp:1777921
* https://bugs.launchpad.net/kicad/+bug/1777921
2018-09-20 12:03:25 -07:00
Seth Hillbrand 0a9aedda8b 3d-viewer: Require simplified polygons
3d viewer requires simplified polygons not just for triangulation but
also for its own internal routines.

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

(cherry picked from commit 8999f4604f)
2018-09-20 10:12:30 -07:00
Seth Hillbrand 48b4a897af pcbnew: Limit zone simplification
Commit 73c229714 was a bit of a sledgehammer for the associated problem
of degenerate points.  This commit replaces that one by only performing
additional simplification of the zone polygons on those polygons that
fail our initial triangulation attempt.

(cherry picked from commit 3ebba6cbe1)
2018-09-20 10:12:30 -07:00
Seth Hillbrand 4c409fbac9 triangulation: Fracture/Simplify all polygons
Calls the simplify/fracture polygon code on any polygon prior to
tesselation.  This avoids issues with degenerate polygons where the
degenerate points are not sequential.

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

(cherry picked from commit 73c2297144)
2018-09-20 10:12:30 -07:00
Seth Hillbrand b4fc7575a5 pcbnew: Parallelize initial board triangulation
Triangulation of zones can be time consuming for large boards.  This
adds a std::thread implementation of parallel zone loading to speed this
process on multi-core machines.

(cherry picked from commit a04ef37d67)
2018-09-20 10:12:30 -07:00
Seth Hillbrand 4560d4ef69 Replacing Tesselation
Replaces Poly2Tri with updated code to process polygons faster and more
robustly.  Notably, we can now handle overlapping holes in the polygons,
allowing us to cache the triangulation of complex boards

(cherry picked from commit a6325aab29)
2018-09-20 10:12:30 -07:00
Jeff Young 3a03c79255 Double opening speed of PCBs with ground and/or power planes.
(Or any other boards with complicated zones.)

(cherry picked from commit 7c04d8be1c)
2018-09-20 09:49:48 -07:00
Seth Hillbrand fca0785754 pcbnew: remove duplicate rebuild in GAL
When running GAL, the connectivity is built when the board loads, so the
extra call to rebuild connectivity is not needed.

(cherry picked from commit 13b96799ea)
2018-09-20 09:32:15 -07:00
Seth Hillbrand 30d398b108 pcbnew: Unify connected lists between items/zones
Keep the zoneitems in the same list as the rest of the items.

(cherry picked from commit 284c39acac)
2018-09-20 09:32:14 -07:00
Seth Hillbrand dd7ce9f00a pcbnew: Ensure connectivity layers are respected
This prevents non-copper layers from being included in the connectivity
search.  It also limits the layer search in the connectivity RTree to
just the copper layer range.

(cherry picked from commit f87cb64d65)
2018-09-20 09:32:14 -07:00
Seth Hillbrand 4f2f8e7f67 rtree: Updating to use functional
(cherry picked from commit 2cf38f68fe)
2018-09-20 09:32:14 -07:00
Seth Hillbrand c7e511c919 Remove connectivity debug statements
(cherry picked from commit 589e5b9ad7)
2018-09-20 09:32:14 -07:00
Seth Hillbrand d769d1649a pcbnew: Split Layers in connectivity
Splits the connectivity search RTree by layers to avoid large penalty on
zone searches.

(cherry picked from commit dc1736eb87)
2018-09-20 09:32:14 -07:00
Seth Hillbrand 2ae8f6337d 3d-viewer: corrected rrect zero-length radius
Previous commit mistakenly included the full clearance for the rounded
rectangle circle.  The CFILLEDCIRCLE2d takes the radius rather than the
diameter.

( cherry-picked from d139a4969 )
2018-09-20 08:54:33 -07:00
Seth Hillbrand 97c5e0a835 3d-viewer: Approximate 0-length element is rrect
Apply same logic of using a filled circle to represent a zero-length
element as a filled circle with radius of the line.

(cherry-picked from 8efcf81cf)

Fixes: lp:1785823
* https://bugs.launchpad.net/kicad/+bug/1785823
2018-09-19 21:38:13 -07:00
Wayne Stambaugh c722ea7a0c Eeschema: fix minor bug in block handler.
Under certain conditions, it was possible for the block handler to be
entered with no mouse capture callback which would raise a rather
cryptic error message to the user.  This should have always been an
assertion so users will not see this issue in release builds.

Fixes lp:1791839

https://bugs.launchpad.net/kicad/+bug/1791839
2018-09-19 15:34:34 -04:00
Jeff Young 5c600e992a Don't allow SELECTED flag to make us think item is already edited.
Fixes: lp:1793289
* https://bugs.launchpad.net/kicad/+bug/1793289
2018-09-19 19:37:28 +01:00
Wayne Stambaugh a055916f92 Pcbnew: fix minor bug in find dialog.
Repeating find with the same search string would result in a not found
error for absolute search strings.  Don't clear the found item if the
search string did not change from the previous search..

Fix another minor bug where the do not warp mouse pointer option was
always checked when the find dialog was called from one of the gal
canvases.

Fixes lp:1793300

https://bugs.launchpad.net/kicad/+bug/1793300
2018-09-19 12:44:25 -04:00
Jeff Young e3d5734f76 Don't use diff-pair gap as a clearance.
Fixes: lp:1789690
* https://bugs.launchpad.net/kicad/+bug/1789690

(cherry picked from commit 9f068d66a8)
2018-09-18 20:40:44 +01:00
Seth Hillbrand 3d0915a33e pcbnew: Don't merge zones with different params
Zones can be explicitly merged even if they do not have the same
parameters.  Automatic merging should only occur when all of the zone
parameters are exactly identical to allow for area-specific zone
parameters.

Fixes: lp:1695761
* https://bugs.launchpad.net/kicad/+bug/1695761
2018-09-17 12:15:48 -07:00
Seth Hillbrand a67bfa6207 pcbnew: prevent different keepout zones from merging
Keepout zones can have different layer sets and different restrictions
that should not be combined unless they are identical.

Fixes: lp:1789062
* https://bugs.launchpad.net/kicad/+bug/1789062
2018-09-17 11:53:12 -07:00
Seth Hillbrand a454adb3ba rename lang_chinese -> lang_zh
This is a 5.0 fix only.  Can't cherry pick from 5.1 as this was part of a
larger commit to unify preferences dialog
(7841f8a466)
2018-09-17 10:39:38 -07:00
John Beard 5019fd0aab Update CA and ZH source svg filename
These were updated in 7841f8a466, but the source
files seem to have not been changed.

(cherry-picked from c0615c5ef8 )
2018-09-17 10:39:38 -07:00
Seth Hillbrand 2c6d0ffe27 pcbnew: retain selection between edits
We had been deselecting items after calling edits to be safe in case the
item was deleted/exchanged by the edit.  The item pointer itself remains
valid even when deleting as it is assigned to the undo stack.  But it
should not remain visible or selected on the schematic if it is removed.

This tests for removed items by checking whether it (in the case of
first-level BOARD_ITEMS) or its parent (in the case of footprint item
components) remain in the view list after editing.  If they are still in
the view list, then we re-select them.

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

Fixes: lp:1775946
* https://bugs.launchpad.net/kicad/+bug/1775946
2018-09-17 10:39:31 -07:00
Wayne Stambaugh 0ff84865ca Update translators list to include simplified Chinese translator. 2018-09-17 11:53:55 -04:00
jean-pierre charras 36746a0941 Grid settings do not accept "." and "," as decimal separator unlike many other dialogs.
Fixes: lp:1792871
https://bugs.launchpad.net/kicad/+bug/1792871
2018-09-17 17:04:42 +02:00
Seth Hillbrand 22df4e301b pcbnew: Allow removing corners from graphical polygons
Fixes: lp:1792712
* https://bugs.launchpad.net/kicad/+bug/1792712
2018-09-16 10:26:00 -07:00
jean-pierre charras ac0c7441b4 pcb_parser.cpp: allows 0 width line thickness for circles in custom shaped pads.
the commit 1100ccb032 broke DRAWSEGMENT filled circles (line width = 0) used only in custom pads.

Fixes: lp:1792791
https://bugs.launchpad.net/kicad/+bug/1792791
2018-09-16 15:22:59 +02:00
Seth Hillbrand 2196959539 pcbnew: Fix dragging snap to items
Snapping while dragging depends on the current net being assigned during
dragging.  This initializes the placer to hold the current net while
performing inline dragging.  The placer is reset along with the dragger
in StopRouting().  This fixes the difference in snap between drag and
create new route.
2018-09-15 20:21:38 -07:00
Seth Hillbrand 06ac172c27 pcbnew: Add corners in polygons
Allow corner adding to polygons in both module editor and board editor.
The board editor was already allowed but only through special types.
The module editor is now sychronized to the same process and both
recognize standard context menus

Fixes: lp:1782966
* https://bugs.launchpad.net/kicad/+bug/1782966
2018-09-15 09:53:31 -07:00
Seth Hillbrand e7c51a6a6c pcbnew: snap final points to grid
When constraining moves, the cursor snaps to grid but does not
represent the position of the final edited point.  The point is rotated
to the nearest snap angle, while the vector length remains unchanged
resulting in a line longer than intended and off-grid.

This adds a grid-snap after the constraint is applied.

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

Fixes lp:1791805

https://bugs.launchpad.net/kicad/+bug/1791805
2018-09-14 17:43:22 -04:00
jean-pierre charras 8cbe5c2184 3D viewer: Better axis rotation when selecting "Bottom view" It allows keeping texts on bottom side readable (rotation similar to the Flip board view in board editor) 2018-09-14 08:05:45 +02:00
Jeff Young a7d7ab32c6 Fix 5.0 regression on typing units into some dialog fields.
Fixes: lp:1792066
* https://bugs.launchpad.net/kicad/+bug/1792066
2018-09-13 19:14:32 +01:00
Seth Hillbrand 61715a8df5 pcbnew: Control cursor capture in microwave tool
Turns off cursor capture when the microwave tool is not actively drawing
a new inductor.

Fixes: lp:1792128
* https://bugs.launchpad.net/kicad/+bug/1792128
2018-09-12 09:10:58 -07:00
Maciej Suminski a149960faa Eagle SCH importer: fix slash characters when fixing symbol names
Even though slash is a valid character in symbol names, it is a revision
separator, but is not the case with Eagle symbol names.

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

(cherry-picked from commit 2c217499)
2018-09-12 10:54:58 +02:00
Maciej Suminski 650ff5e5fe kicad2step: Implement overwrite protection, handle 'force overwrite' flag
Fixes: lp:1791826
* https://bugs.launchpad.net/kicad/+bug/1791826

(cherry-picked from commit c120ae9e)
2018-09-11 09:26:55 +02:00
Maciej Suminski 0c42d988f7 kicad2step: Set correct file extension if no output file is specified
(cherry-picked from commit 7037e422)
2018-09-11 09:25:09 +02:00
Alexey Chernov a84de7cccf Adding OpenSSL include directory explicitly
Fixes: lp:1791164
* https://bugs.launchpad.net/kicad/+bug/1791164

( cherry-picked from 3ad1cd8d5 )
2018-09-10 07:18:18 -07:00
Maciej Suminski e9b1552b16 Spice netlist exporter: make directives case insensitive, extra comments
(cherry-picked from commit 4a57541b)
2018-09-10 14:21:27 +02:00
Joël Bertrand 27b88be61f Spice netlist exporter: handle .control .. .endc blocks
Spice may include a list of directives that are wrapped with
.control and .endc. Such directives do not have a dot prefix, so
they need to be handled in a special way.

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

(cherry-picked from commit 36f2eb11)
2018-09-10 14:21:27 +02:00
Maciej Suminski 280573e9af Relax selection discard rules for footprints with area larger than the viewport
Normally working at a zoom level when a footprint is not fully displayed
indicates that the user modifies other components. Selection Tool used
to discard footprints that had area larger than the viewport area, but
it may make sense to select them if there are no other candidates.

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

(cherry-picked from commit 5993b330)
2018-09-10 14:21:27 +02:00
Maciej Suminski 14e42fec7e Changed the OpenGL CMake preference to LEGACY
Certain distribution does not handle GLVND well, as the result the
accelerated canvas is not enabled. For the time being it is better to
keep using the legacy preference.

Thanks to Aurelio Lucchesi for investigating the cause.

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

(cherry-picked from commit 01925fd6)
2018-09-10 14:21:27 +02:00
jean-pierre charras 7e8c5b9574 Eeschema: fix incorrect/incomplete annotation clearing in duplicate and paste block (happens in complex hierarchy) 2018-09-09 09:19:22 +02:00
jean-pierre charras 500abd0ac4 Eeschema: fix incorrect references clearing for shared sheet paths.
Previously, when creating a new instance of a sheet, the full set of references
was cleared.
Moreover, if this sheet has sub-sheets, the annotation was incorrectly handled

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

Fixes: lp:1789048
https://bugs.launchpad.net/kicad/+bug/1789048
2018-09-09 09:19:22 +02:00
Seth Hillbrand e29e7ff95d pcbnew: Fix Eagle import hole offset
Unplated holes in Ealge can either be free floating or part of a larger
footprint.  We handle both in the same packageHole routine by either
offsetting the hole in a centered footprint or offsetting the footprint
in a centered hole.

Fixes: lp:1791287
* https://bugs.launchpad.net/kicad/+bug/1791287
2018-09-08 20:41:53 -07:00
Seth Hillbrand fb580d3694 pcbnew: center the zone fill confirmation dialog
The zone fill confirmation should follow the parent dialog.  In the case
of plotting, this is the plot window.
2018-09-08 20:18:14 -07:00
Seth Hillbrand b987126b7d pcbnew: Keep Yes/No dialogs above the windows
Modal yes/no questions should not be allowed to fall behind other
windows.  They need to be answered before the program continues and
clicking outside of the dialog should not hide dialog itself.

Fixes: lp:1790640
* https://bugs.launchpad.net/kicad/+bug/1790640
2018-09-08 20:18:02 -07:00
Seth Hillbrand 3919345003 pcbnew: Allow selection of back pads
Pads should be selectable when the respective copper layer is enabled.

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

Fixes: lp:1791284
* https://bugs.launchpad.net/kicad/+bug/1791284
2018-09-08 06:59:36 -07:00
Seth Hillbrand 4d094da2fa Correct previous (2c5154c63) default value 0.1->0.051 2018-09-08 06:45:23 -07:00
Seth Hillbrand 2c5154c630 pcbnew: adjust default soldermask/dam clearance
The previous clearance values were equivalent to the default copper
clearance, which could cause issues for users who didn't adjust the
values and had alignment errors at the board house.  New values default
to typical dry film minimums.
2018-09-08 06:33:07 -07:00
Tomasz Wlostowski f85dc57642 POLY_GRID_PARTITION: fixed incorrect point-in-polygon test in some corner cases
Fixes: lp:1787236
* https://bugs.launchpad.net/kicad/+bug/1787236
2018-09-06 20:55:40 -07:00
Seth Hillbrand 3da86dc24b kicad2step: limit small segment add/remove
The addition of very small segments in OCE triggers sliver
removal/cleanup in the BREP generation that can get stuck in a very long
loop during STEP export of boards.  These were introduced to ensure
closure of boards with small gaps that were too big for OCE to consider
joined.

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

Fixes: lp:1784626
* https://bugs.launchpad.net/kicad/+bug/1784626
2018-09-06 18:43:26 -07:00
Seth Hillbrand 5e9b4dd6a5 eeschema: Set images to draw first in eeschema
Bitmaps in eeschema are mainly used for referencing and data.  Having
them between functional items obscures the elements.  This places the
images in the background for eeschema as a partial fix for lp:1787404

This commit should not be picked into 5.1 as the canvas changes.
2018-09-06 14:10:11 -07:00
Seth Hillbrand 1f60d8fdbf eeschema: Only allow dragging of draggable items
When expanding the drag item to allow corners, we accidentally picked up
other items in the list.  This limits the items that can be dragged to
only those that are explicitly in the draggable list.

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

Fixes: lp:1787966
* https://bugs.launchpad.net/kicad/+bug/1787966
2018-09-06 13:42:01 -07:00
Seth Hillbrand 7012226284 pcbnew: Set soldermask on NPTH imported from Eagle
Fixes: lp:1773253
* https://bugs.launchpad.net/kicad/+bug/1773253
2018-09-06 08:57:40 -07:00
Seth Hillbrand 48bbde65b3 pcbnew: Set default line width for invalids
Invalid graphical items that cannot be created in pcbnew may still be
created by external tools.  This synchronizes the pcbnew view display
with the gerber output and 3d viewer line widths for these types of
lines.  Only filled polygons are permitted 0-width lines.

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

Fixes: lp:1785719
* https://bugs.launchpad.net/kicad/+bug/1785719
2018-09-05 08:12:54 -04:00
jean-pierre charras b7b125d83c Eeschema: Fix incorrect parsing of old schematic files (version 2) for HLabels and GLabels 2018-09-03 19:52:22 +02:00
Seth Hillbrand 9eec296b0a pcbnew: Select copper through THT connections
This allows full copper connections even when THT changes a trace layer.
It avoides selecting the actual pad to prevent actions on the copper
connections from affecting the footprints as well.

Fixes: lp:1789807
* https://bugs.launchpad.net/kicad/+bug/1789807
2018-09-03 07:43:59 -07:00
Seth Hillbrand ec81f3267f pcbnew: Only regenerate BBox if the item is valid
Items removed from the connectivity list will not have valid parents, so
we cannot update the BBox, thus we will only use the cached value.

Fixes: lp:1785605
* https://bugs.launchpad.net/kicad/+bug/1785605
2018-08-31 18:45:26 -07:00
qu1ck f0e9e3b9d5 Extend swig definitions to contain SHAPE_LINE_CHAIN and VECTOR2I 2018-08-31 13:16:13 -04:00
Seth Hillbrand ee12fe6eff modview: Re-instate the try/catch block when loading
Setting up the footprint viewer will attempt to load the current
footprint.  If the library does not exist, the loader will throw an
IO_ERROR that needs to be caught.

Fixes: lp:1789626
* https://bugs.launchpad.net/kicad/+bug/1789626
2018-08-31 08:45:34 -07:00
Seth Hillbrand d6b95236a4 gal: correct layer ordering
Net labels need to be rendered under the selected item.

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

Fixes: lp:1789311
* https://bugs.launchpad.net/kicad/+bug/1789311
2018-08-30 13:07:33 -07:00
Seth Hillbrand 25b6604fc5 pcbnew: Swap all types of zones when swapping layers
This is a 5.0-only commit to implement correct layer swapping.

Fixes: lp:1789390
* https://bugs.launchpad.net/kicad/+bug/1789390
2018-08-30 09:45:39 -07:00
Ronnie Gaensli fbd6654f9a pcbnew: fix pan while moving mouse after cancelling selection box
Fixes: lp:1776648
* https://bugs.launchpad.net/kicad/+bug/1776648
2018-08-29 16:48:55 -07:00
Seth Hillbrand b8ae4e0195 pcbnew: Only dp clearance matrix when routing dp
Fixes: lp:1787766
* https://bugs.launchpad.net/kicad/+bug/1787766
2018-08-29 10:25:51 -07:00
Seth Hillbrand 9527034e0f cvpcb: don't show board-level soldermask
Only show soldermask in cvpcb if it was defined in the footprint or pad,
not the board defaults.
2018-08-28 17:00:27 -07:00
Seth Hillbrand 6754aa8a74 eeschema: Close ERC before placing components
We have a dialog shim that raises the ERC dialog in front of the
schematic frame, which is useful for keeping the ERC dialog visible
during debugging.  But mouse move events do not pass through to the
schematic, resulting in a captured mouse pointer but no drawing updates.

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

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

Fixes: lp:1789505
* https://bugs.launchpad.net/kicad/+bug/1789505
2018-08-28 14:58:37 -07:00
Seth Hillbrand 0c94b3239d pcbnew: keep selected zone highlighted when moding
When adding a cutout to a zone, it helps to have the zone highlighted so
that you can see when zone you are operating on.
2018-08-28 14:49:48 -07:00
Seth Hillbrand d8e276bc4f pcbnew: Adding some missing TypeOf() functions
Missing types were handled by the superclass (in the case of zones)
PCB_CONNECTED_ITEM, which incorrectly returned "true" when testing lines
against zones.

Fixes: lp:1789195
* https://bugs.launchpad.net/kicad/+bug/1789195
2018-08-28 13:16:34 -07:00
Seth Hillbrand b7a321d143 modedit: clear the pcb when closing the window
Before closing the window in the footprint editor, we clear the existing
pcb, undo/redo stack and associated memory to prevent callbacks
double-freeing on destruction.

Fixes: lp:1784504
* https://bugs.launchpad.net/kicad/+bug/1784504
2018-08-28 12:35:17 -07:00
Seth Hillbrand f6d9c3a733 pcbnew: set default soldermask clearance for footprint viewer
The default board soldermask clearance should not be used in the
footprint viewer.  Setting the board's solder mask margin to 0 will
leave the footprint displayed with only the soldermask defined by
the pads or the footprint.

Thanks to Fabian Inostroza for pointing out the missing line.

Fixes: lp:1779979
* https://bugs.launchpad.net/kicad/+bug/1779979
2018-08-28 10:03:25 -07:00
jean-pierre charras 7ed07cae70 Pcbnew, Plot: fix incorrect plot of custom shapes, when the shape has holes (missing holes).
Fixes: lp:1789404
https://bugs.launchpad.net/kicad/+bug/1789404
2018-08-28 17:51:52 +02:00
Wayne Stambaugh 8bb0fabcba Fix build error with Boost 1.68.
The Boost folks kindly decided to move the sha1.hpp header file location
so check the Boost version to include the proper header path.

Clean up debug trace code.
2018-08-28 10:30:49 -04:00
jean-pierre charras da4d9ee392 Footprint viewer: ensure all panes are always visible, regardless m_auimgr.LoadPerspective() has read.
Perspective is overzealous: it stores everything, so we need to be sure these panes are not hidden,
regardless what the perspective has stored.

Fixes: lp:1789254
https://bugs.launchpad.net/kicad/+bug/1789254
2018-08-27 20:32:45 +02:00
jean-pierre charras a4ddbff321 Kicad archive project: add missing file extensions (.kicad_mod, .gbrjob) in files to archive filter.
From master.
2018-08-27 15:53:16 +02:00
Jeff Young 3c87ab94a2 Fix fast grid switching for OSX and Footprint Editor.
Fixes: lp:1787066
* https://bugs.launchpad.net/kicad/+bug/1787066
2018-08-26 19:01:40 +01:00
Jeff Young e424f29bbb Don't inadvertantly strip hotkey off Save All Libraries.
Fixes: lp:1786066
* https://bugs.launchpad.net/kicad/+bug/1786066
2018-08-26 00:32:38 +01:00
Jeff Young 3587789ae2 Update canvas after changing netclass settings.
Fixes: lp:1786937
* https://bugs.launchpad.net/kicad/+bug/1786937
2018-08-25 23:20:46 +01:00
Jeff Young 8cb389d95c Use actual parent for dialogs; don't pass nullptr.
Fixes: lp:1788962
* https://bugs.launchpad.net/kicad/+bug/1788962
2018-08-25 11:12:58 +01:00
jean-pierre charras 0f78fe5a5a Fix a minor wxWidget alert. 2018-08-25 10:38:13 +02:00
jean-pierre charras 333ba4b9a2 Eeschema: fix an assert ( "meOwner" failed in DeleteAll() ) when appending a sheet from an other project to the schematic.
It was only a overzealous (in this case) assert, with no issue.
The fix avoid calling DeleteAll() when there is nothing to delete.

Fixes: lp:1787810
https://bugs.launchpad.net/kicad/+bug/1787810
2018-08-25 10:38:13 +02:00
Jeff Young 7e2e39ce30 Handle separate parsing rules for ID_SCH and ID_PCB.
This removes the existing constructors so that all parsing must
be explicit and callers are made aware that they need to think
about illegal characters, malformed ids, etc.

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

Fixes: lp:1786819
* https://bugs.launchpad.net/kicad/+bug/1786819
2018-08-24 23:57:19 +01:00
Wayne Stambaugh b167c41d1b Pcbnew: enable scripting action menu build option by default.
Fixes lp:1783690

https://bugs.launchpad.net/kicad/+bug/1783690
2018-08-21 13:06:27 -04:00
jean-pierre charras dc022dcdae key event in draw_panel.cpp: fix incorrect behavior for the escape key (the key was handled but the evnent was skipped). This create an incorrect behavior because the event key was resend because the primary event was seen as not handled by the drawpanel. 2018-08-21 18:49:08 +02:00
jean-pierre charras e2c6422838 Better fix for accelerator menus using "Back" (previously named "BkSp") key
Use the wxWidgets official accelerator key string for WXK_BACK (this is "Back") in menuitems instead of "BkSp"
Also when reading the hotkey config file, avoid to set a hotkey to unassigned when its name is not found in list.
The default value is used.
Unassigned hotkey use <unassigned> as key name (and 0 as key code) in file.
2018-08-21 18:49:08 +02:00
Ronnie Gaensli 182b8a32df eeschema: fix dangling pin marker after adding NoConnect
Fixes: lp:1787858
* https://bugs.launchpad.net/kicad/+bug/1787858
2018-08-19 19:47:21 -07:00
jean-pierre charras 831978293f Fix ASCII code used in accelerator menus for BkSp key (Linux only)
On Linux (GTK?) the accelerator key BkSp, when used in menus must be coded as "\t\b" and not "\tBkSp".
However, On Windows, it must be "\tBkSp".
Joys of multi-platform development.
2018-08-15 21:19:41 +02:00
John Beard 64f46448ea Fix -Wcatch-value in kicad2step.cpp 2018-08-15 12:51:36 -04:00
Maciej Suminski ca1f50a023 Spice simulator: search each line of a text field for a Spice directive
Fixes: lp:1786119
* https://bugs.launchpad.net/kicad/+bug/1786119

(cherry-picked from commit d5ee3296)
2018-08-14 10:27:07 +02:00
Maciej Suminski 626f5ac45a Spice simulator: prevent double quoting library file names
Fixes: lp:1786559
* https://bugs.launchpad.net/kicad/+bug/1786559

(cherry-picked from commit f82b839d)
2018-08-14 09:47:24 +02:00
Jeff Young a45a8e8797 Warn before replacing edited footprint in footprint editor.
Fixes: lp:1786570
* https://bugs.launchpad.net/kicad/+bug/1786570
2018-08-11 20:36:51 +01:00
jean-pierre charras c7d39d22db FOOTPRINT_WIZARD_FRAME: ensure the draw panel is always visible, even if the config file is incorrect. 2018-08-10 13:44:21 +02:00
jean-pierre charras b764bb1d6d Fix a minor wxWidgets alert 2018-08-10 13:43:12 +02:00
jean-pierre charras 64eaaa4f58 Fix incorrect parent of a separator in a toolbar 2018-08-10 11:53:49 +02:00
Seth Hillbrand 0e946dad1a Eagle: Fix NULL-dereference on malformed Eagle files
Eagle files that are edited may be missing required data.  While we do
not need to handle these files, we do need to prevent segfaults in KiCad
when reading them.
2018-08-09 14:57:50 -07:00
Seth Hillbrand 1c2f06106d PCBNEW: Re-add missing SWIG zone filler
Zone filler was factored out into a separate header.  To allow python
access to zone filling, we need to include the revised signatures.
2018-08-08 12:23:32 -07:00
Seth Hillbrand edbf34c2b2 Adjust RTree default floating point to use double
This reverts the previous work-around 7d62f14dd for the RTree splitting
degeneracy that was placed prior to v5.  It appears not to have worked
for all systems.  In its place, we use doubles instead of floats to
calculate the bounding box when filling the RTree.  This keeps maximum
volume items from overlapping with the system boundary in test cases.

(cherry-picked from 539ca5aa3)
2018-08-06 17:01:59 -07:00
Jeff Young 26cbdbf103 Add Edit context menu item for EEschema graphic lines.
Fixes: lp:1779554
* https://bugs.launchpad.net/kicad/+bug/1779554

(cherry picked from commit 02b29ba)

(cherry picked from commit 7dcc8e346f)
2018-08-06 13:56:56 +01:00
Jeff Young f163d9ff2a Fix bug with duplicate columns in Edit Symbol Fields.
(cherry picked from commit 01c5bdf)
2018-08-06 13:55:59 +01:00
Jeff Young 9230189f62 Fix thread-safety issue with some global wxStrings.
These cause intermittent crashes in footprint loading.  See
comments in code.

(cherry picked from commit 5e8e2570ba)
2018-08-06 13:52:23 +01:00
Ronnie Gaensli 9d241ba812 Cancel Add dimension leaves auto panning on
Fixes: lp:178551
* https://bugs.launchpad.net/kicad/+bug/178551

(cherry picked from commit 3ca84dca)
2018-08-06 11:27:56 +02:00
jean-pierre charras 57c3e98f8c Fix a wxWidgets minor alert 2018-08-03 09:28:30 +02:00
jean-pierre charras 349d1562af fix a few wxWidgets alerts, to avoid useless bug reports when kicad is compiled in Debug mode 2018-08-02 16:58:30 +02:00
jean-pierre charras d81bcee10d CMakeLists.txt: add a option (BUILD_SMALL_DEBUG_FILES, default off) to create smaller binaries in debug mode. It forces link option -g1 instead og -g3 which allows basic debug.
This is especially useful on Mingw because binaries in debug build are very large:
_pcbnew.kiface: 1.25 Gb, small file option: 65Mb
2018-08-02 16:58:30 +02:00
Seth Hillbrand 016c02a42d modedit: Store single copy of the footprint in undo
When changing elements in the module editor, each element shares the
same parent.  Undo commits store a copy of the parent as it existed
before the change.  For footprints with many elements, this creates
large, slow undo commits as a copy of the full footprint is stored for
each element being edited.

This keeps a single copy of the footprint in the undo stack per edit.

Fixes: lp:1780526
* https://bugs.launchpad.net/kicad/+bug/1780526
2018-08-01 11:00:49 -07:00
Jeff Young 80e7a83fb0 Generalize OSX &Cancel fix to work for other languages.
Fixes: lp:1784350
* https://bugs.launchpad.net/kicad/+bug/1784350

(cherry picked from commit 98849bde96)
2018-08-01 11:50:04 +01:00
jean-pierre charras d2aa976017 Fix many wxWidgets alerts, to avoid useless bug reports when kicad is compiled in Debug mode 2018-07-31 11:41:47 +02:00
John Beard 9476b53533 Use M_PI for Pi, not constexpr calculation
Constexpr evaluation breaks Clang compilation.

Use math.h M_PI, as elsewhere.
2018-07-30 12:46:27 -04:00
jean-pierre charras 5e19ed29b8 Fix D_PAD::BuildPadShapePolygon() incorrect calculation for custom pad shapes.
Fixes: lp:1784340
https://bugs.launchpad.net/kicad/+bug/1784340
2018-07-30 16:58:20 +02:00
John Beard aa340e6b85 QA Geometry: New test suite for generic geometric tests
This is the first test for a generic test suite for geometric functions.

The tests run are for fillet corners of SHAPE_POLY_SETS.

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

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

Rename it make this clearer, and also to make way for generic geometry tests.
2018-07-27 14:41:11 -04:00
John Beard df1fa37fd8 QA: Add python test as a Ctest test rather than build target 2018-07-27 14:41:04 -04:00
John Beard 370a412f49 Enable CTest tests and add qa_geometry as a test
This allows the use of `make test` or `ctest` to run all registered
tests.

The ChamferFillet/Fillet test is disabled for now as it fails.
2018-07-27 14:40:57 -04:00
Maciej Suminski d63c1a2118 Use quoted file name when opening a PDF file
Fixes: lp:1783667
* https://bugs.launchpad.net/kicad/+bug/1783667

(cherry-picked from bbfc1eb1)
2018-07-26 12:07:46 +02:00
Maciej Suminski 35576adb73 Converted PNS Length Tuning dialog to use TransferData{From,To}Window()
Fixes: lp:1783694
* https://bugs.launchpad.net/kicad/+bug/1783694

(cherry-picked from commit dbf4bcdb)
2018-07-26 10:36:21 +02:00
Maciej Suminski 4ff426275f Fixed KIDIALOG freeze
wxDialog calls Show(false) when the dialog is about to be closed, but
KIDIALOG::Show() implementation did not forward the show parameter to
wxRichMessageDialog::Show() invocation. As the parameter was not
specified, the mentioned Show() call always used 'true' as the default
parameter, preventing the dialog from being closed.

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

(cherry-picked from commit 39d8d143)
2018-07-25 12:10:54 +02:00
John Beard 7dc9f99165 Fix -Wcatch-value in sexpr.cpp
This is fixed by catching bty const-ref, rather than by value.

Also a few trailing space deletions.
2018-07-23 14:57:52 -04:00
Maciej Suminski 30da1a3b02 pcbnew: Disabled UI update for pcbnew console menu item
UI update event handler updates toolbar button state for the scripting
console, but for the associated menu item it displays an assert saying that
the menu item that cannot be checked. To avoid that, the UI update event
handler returns early if event does not come from the toolbar.

(cherry picked from commit 45c1742a)
2018-07-22 19:52:55 +02:00
Wayne Stambaugh 3dcf04fdb8 Apply footprint editor options when dialog OK button is clicked.
Fixes lp:1781977

https://bugs.launchpad.net/kicad/+bug/1781977
2018-07-18 08:45:43 -04:00
jean-pierre charras 6fbc7bb4ce Gerbview, read Excellon files: fix a few issues.
The main issue is the fact Excellon files have no coordinate fine format definition.
Only the units are defined.
Units are floating point numbers or integer numbers.
Integer numbers can be defined as 3.3 or 2.4 numbers (mm/inches)
However some files (altium drill files for instance) use an other notation.
This fix is a workaround to accept 2.x (inch) or 3.x (mm) notations.

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

Fixes: lp:1782053
https://bugs.launchpad.net/kicad/+bug/1782053
2018-07-17 17:41:33 +02:00
jean-pierre charras 3af2026061 Revert "Perform coordinate format detection on Excellon drill files"
This reverts commit 3e033aee0c.
2018-07-17 17:41:32 +02:00
Maciej Suminski 6bd8cb9b8f eeschema: fix alias names in .dcm files
Fixes: lp:1781761
* https://bugs.launchpad.net/kicad/+bug/1781761
2018-07-17 14:27:25 +02:00
Wayne Stambaugh b23b48b9a7 Tag version 5.0.1-dev. 2018-07-13 16:33:17 -04:00
Wayne Stambaugh 84427f463c Tag release 5.0.0. 2018-07-13 15:53:52 -04:00
Wayne Stambaugh bded0cfc19 KiCad: make initial minimum main frame width show all icons.
Fixes lp:1780300

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

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

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

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

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

Fixes lp:1778426

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

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

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

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

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

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

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

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

This standardizes all schematic illegal character routines into LIB_ID

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

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

The patch changes the initial path values to make them relative to
the executable and follow the current Windows installer scheme.

Fixes: lp:1775796
* https://bugs.launchpad.net/kicad/+bug/1775796
2018-06-27 11:02:48 +02:00
Martin Aberg 9d1b5698e9 Standardize "assign footprints" terminology.
ref: 611d5a0dc4
2018-06-26 13:20:02 -06:00
Tomasz Wlostowski 01c2d93a81 pcbnew: don't rebuild dynamic ratsnest when moving items without a net (e.g. board outlines)
Fixes: lp:1778321
* https://bugs.launchpad.net/kicad/+bug/1778321
2018-06-25 16:30:16 +02:00
John Beard 847f4f50b1 Pcbnew python plugins: fix some pad arrays
Fixes some pad array init functions that were not calling the
class hierarchy's init functions correctly.
2018-06-25 09:34:32 -04:00
John Beard 930f3dd74f Documentation: add logo to Doxygen pages
This adds a small KiCad logo in the top left of the Doxygen pages.

54px used as 55px is maximum recommended height for Doxygen logos.

For the main docs and the dev docs, this is easily done in the Doxyfile,
for the Python docs, as that is run from the binary dir, the source dir
is passed as an Environment variable.
2018-06-25 08:23:17 -04:00
jean-pierre charras ef38a198d1 GerbView: incorrect handling of polygon primitive: broken parameters rotation and drill size.
Fixes: lp:1778459
https://bugs.launchpad.net/kicad/+bug/1778459
2018-06-25 11:00:53 +02:00
Andrzej Wolski 1f6f76beb9 Fix overbar drawing for non-italic text
Overbar was always indented inward, regardless if text was italic or not.
2018-06-24 12:01:10 -04:00
jean-pierre charras f785d27498 Eeschema, label editor dialog: fix a very minor cosmetic issue when resizing the dialog. 2018-06-23 17:53:29 +02:00
jean-pierre charras b8bbb15aa1 Eeschema: fix a bug in sheet properties dialog that break the annotation of the symbols inside this sheet (Windows only)
For the path separator in full filename, the sheet filename from the dialog uses the Unix notation,
and the "old" sheet filename uses the default notation (it is the actual filename).

Therefore, on Windows, after closing the dialog, the filename was always seen as modified,
and the hierarchy was incorrectly modified (annotation cleared).
2018-06-23 16:58:00 +02:00
Martin Aberg 47a4099e64 Disable logging at exit on FreeBSD.
This commit fixes a crash on KiCad exit for FreeBSD.

Usage of the wxLog functions in destructors on program generates an
infinite recursive call loop and segfault on this platform.

The workaround is inpired by:
  https://people.freebsd.org/~wpaul/kicad/kicad_instructions.txt

Fixes: lp:1778334
* https://bugs.launchpad.net/kicad/+bug/1778334
2018-06-23 15:11:32 +02:00
Maciej Suminski 73a8d2a9d5 OPENGL GAL: Fixed the iteration condition when drawing triangulated polyset
The loop used an incorrect variable size as the loop limit,
occasionally causing out of bounds accesses.

Fixes: lp:1778288
* https://bugs.launchpad.net/kicad/+bug/1778288
2018-06-23 02:05:21 +02:00
Maciej Suminski 1751e4631c Code formatting 2018-06-23 01:59:49 +02:00
Andrzej Wolski a7cd62ad12 Save through hole pads color to config file
TH Pads color is now user settable, so should be saved in config file.
2018-06-22 11:34:56 -04:00
Seth Hillbrand dd436b658a pcbnew: Thread safety for connections
Moving the mutex to the class from a local variable protects the
connectivity list against corruption from multiple threads computing the
ratsnest.
2018-06-21 09:34:56 -07:00
Seth Hillbrand e2122db587 pcbnew: Clear unused code 2018-06-21 09:20:48 -07:00
Seth Hillbrand cf04d341ec pcbnew: standardize itemlist/zonelist connectivity
The itemlist and zonelist in connectivity can both contain many items,
so both use the same OpenMP routine.  However, we can only clear the
dirty flag when we conduct a full search, including zones.  Otherwise we
missing connections to zones when propogating changed items that are
then marked as not dirty.

Fixes: lp:1777993
* https://bugs.launchpad.net/kicad/+bug/1777993
2018-06-21 09:19:26 -07:00
jean-pierre charras f634b75652 Pcbnew, plot parameters: fix an issue for the "outputdirectory" parameter.
When the outputdirectory string was similar to a number, the .kicad_pcb file was no longer loadable.

Fixes: lp:1777957
https://bugs.launchpad.net/kicad/+bug/1777957
2018-06-21 12:33:51 +02:00
Seth Hillbrand a552b4ccca box2: fix bug in SetMaximum()
When setting the maximum represented box, std::numerical_limits::min
returns the most negative number only for integers.  For floating point,
it returns the smallest positive number.  std::numerical_limits::lowest
is the same as min for integers but returns the most negative number for
floating point as well.
2018-06-20 20:21:03 -07:00
Seth Hillbrand a1ef441dd9 origin viewitem needs to account for size zoom
The origin item doesn't have a fixed size.  It is constant on the screen but
changes the effective BBox size based on the zoom level.
But we can't simply set it to the maximum size as this causes a splitting degeneracy
when compiling for Debian i386.  By modestly adjusting the bbox, we avoid the degeneracy
while keeping the origin visible at all zoom levels

Fixes: lp:1777379
* https://bugs.launchpad.net/kicad/+bug/1777379
2018-06-20 12:08:57 -07:00
Wayne Stambaugh 8394e2b71e Fix broken LIB_ID library nickname illegal character tests.
During the symbol library table implementation, the legal character
tests for the footprint library table were changed and the forward
slash '/' character became illegal.  This change broke editing some
users footprint library tables that already had '/' in library table
nicknames.  This change split the library nickname and library item
name illegal character tests.
2018-06-20 14:36:40 -04:00
Jeff Young 79e0bb08d0 Architecturally-simpler fix for grid context menu unit changes.
Fixes: lp:1777519
* https://bugs.launchpad.net/kicad/+bug/1777519
2018-06-20 16:54:24 +01:00
Wayne Stambaugh 77217b2089 Fix resizing issues of global track and via properties dialog. 2018-06-20 11:39:11 -04:00
Maciej Suminski 44337dec56 pcbnew GAL: Fix bouncing zoom on mouse wheel scroll in Windows
Handling wxEVT_SCROLLWIN_LINE{UP,DOWN} executes the scroll event handler
too many times causing zoom bounces.

Fixes: lp:1562173
* https://bugs.launchpad.net/kicad/+bug/1562173
2018-06-20 16:55:14 +02:00
Seth Hillbrand 147c1e6088 pcbnew: Allow clearing local ratsnest
The local ratsnest needs to be able to hide as well as show visibility.
Clicking a module will toggle the visibility while clicking off all
modules clears the local ratsnest display.

Fixes: lp:1531332
* https://bugs.launchpad.net/kicad/+bug/1531332
2018-06-19 15:12:20 -07:00
Seth Hillbrand 6990824597 pcbnew: Hide routing options that are not available
Options that do not have code implementing them are now hidden from the
user so that they are not searching for ways to enable the greyed out
options.  Similarly, when selecting a routing option that disables
free-mode, we show the effect of disabling the mode in the dialog.
2018-06-19 11:11:18 -07:00
jean-pierre charras f52763f22b Legacy canvas: fix issue when zooming in/out using mousewheel: slightly shifts screen up/down.
It happens only when the 'warp and center cursor on zoom' option is disabled.

Was created after modifying the code in EDA_DRAW_FRAME::AdjustScrollBars(),
making EDA_DRAW_FRAME::RedrawScreen2() not working very well.

(partial fix of bug 1562173)
2018-06-19 19:53:00 +02:00
Tomasz Wlostowski f6f726acab router: allow placing tracks/diff pairs without continuing routing by Shift+L-Click
Fixes: lp:1777688
* https://bugs.launchpad.net/kicad/+bug/1777688
2018-06-19 19:30:03 +02:00
Seth Hillbrand 462549fc84 modedit: Add hotkey to switch arc posture
Allows switching arc clockwise/counterclockwise orientation while
drawing in module editor.

Fixes: lp:1777524
* https://bugs.launchpad.net/kicad/+bug/1777524
2018-06-19 09:42:04 -07:00
Jeff Young 3c7b91b96a Always create grid menu so units are up-to-date.
Fixes: lp:1777519
* https://bugs.launchpad.net/kicad/+bug/1777519
2018-06-19 10:52:36 +01:00
Maciej Suminski 81a5c0e3bf GAL: Show ratsnest lines when dragging
GAL is strict regarding which layers are rendered, therefore to show
ratsnest lines when an item is dragged - the ratsnest layer must be kept
enabled. Ratsnest line visibility is enabled per item and this is the
way to show/hide the lines.

Fixes: lp:1666473
* https://bugs.launchpad.net/kicad/+bug/1666473
2018-06-19 11:29:36 +02:00
Maciej Suminski a08c0ac08c kicad2step: Added minimum distance parameter 2018-06-19 10:37:07 +02:00
Maciej Suminski 7ef97e0bca kicad2step: Simplified unit conversion
Instead of using 'm_inch' flag, dimensions are converted in place.
2018-06-19 10:37:07 +02:00
Maciej Suminski 04a462e48f kicad2step: Converted #defines to constexprs 2018-06-19 10:37:07 +02:00
Maciej Suminski f0b3cf8077 STEP export: Stricter contiguity check
Stricter contiguity check points the user to gaps in the outline.

Fixes: lp:1774351
* https://bugs.launchpad.net/kicad/+bug/1774351
2018-06-19 10:36:21 +02:00
Maciej Suminski 1541cbdf04 kicad2step: Add short segments to fix outline contiguity for arcs
STEP exporter keeps outline contiguous by storing the last point
coordinates and using them as the starting point for the next segment. It
might create a problem for arcs, as one of the arc end points may become
translated (changed to the last outline point), while the remaining
points (center and the other endpoint) are kept original. For large
deltas it renders an arc invalid, as it cannot pass through a modified
endpoint anymore.

To fix this, short segments are added to link the last outline point
with an arc endpoint, but only if the distance between the two is below
a certain threshold. This way the outline is kept contiguous and the arc
end point is unmodified, warranting its correctness.

Fixes: lp:1774351
* https://bugs.launchpad.net/kicad/+bug/1774351
2018-06-19 10:29:18 +02:00
Seth Hillbrand 44c1f5785b pcbnew: Set dp clearance based on netclass
Minimum differential pair clearance should be limited to the netclass
differential pair spacing.  This also cleans up some unused code that
was left over from previous work on differential pair clearances.

Fixes: lp:1673632
* https://bugs.launchpad.net/kicad/+bug/1673632
2018-06-18 14:23:25 -07:00
Jeff Young feebb3a36c Don't double-move module text when parent is also selected.
Fixes: lp:1776871
* https://bugs.launchpad.net/kicad/+bug/1776871
2018-06-18 22:03:39 +01:00
Wayne Stambaugh 11c248a463 Fix a typo made in commit 52734058. 2018-06-18 14:57:01 -04:00
Wayne Stambaugh 52734058a7 Remove string translation wrappers used in commit 94891b75.
Translating internal file name and path strings will almost certainly
result in a bug on MacOS.
2018-06-18 12:14:48 -04:00
Maciej Suminski ba3f2b30ee kicad2step: More diagnostic messages to determine export issues 2018-06-18 17:51:22 +02:00
jean-pierre charras 03fa645743 pic_programmer demo: fix a typo in a symbol name. 2018-06-18 08:12:17 +02:00
Adam Wolf 94891b75f9 Handle STEP export properly on MacOS when launched from standalone pcbnew. 2018-06-17 13:09:33 -04:00
Andrzej Wolski a99eeb44d3 Do not allow setting zero Y size for oval holes 2018-06-17 16:30:14 +02:00
Andrzej Wolski 834d9335dd Do not plot zero width oval holes in Gerber X2 drill files
In case there are zero width oval holes on the PCB,
it is safer to not plot them at all, rather than plotting
with width arbitrarily increased to 10 mils.
This also makes Gerber outputs consistent with Excellon outputs.
2018-06-17 16:26:23 +02:00
jean-pierre charras ae02039ed4 Update pic_programmer demo 2018-06-17 09:28:36 +02:00
Seth Hillbrand 4959f91dac pcbnew: Ensure Connectivity RTree gets updated
When removing items, we perform a two-pass removal, checking first
for the cached rectangle collision.  Then, if we do not find the item
being removed, we perform a second, more expensive pass over the full
tree.  This second pass is required as we cannot be certain that an
item's bbox has not been modified between insertion and deletion.  In
which case, keeping stale pointers in the tree will lead to segfaults.

Fixes: lp:1777246
* https://bugs.launchpad.net/kicad/+bug/1777246
2018-06-16 21:45:55 -07:00
Maciej Suminski 7b7355772e Do not display Interactive Routing Settings dialog twice
The dialog was displayed due to a global TOOL_ACTION and a hotkey
assigned to a top menubar entry. Removing the hotkey from the menubar entry
is not ideal, but less irritating than a dialog showing up twice.
2018-06-15 17:32:00 +02:00
Maciej Suminski 583a9c08c0 Remove duplicated PNS TOOL_ACTIONs to display routing settings 2018-06-15 17:12:15 +02:00
Maciej Suminski 94b6f848bb pcbnew_control.cpp: change C-style asserts to wxCHECK/wxFAIL 2018-06-15 17:11:32 +02:00
Maciej Suminski eb97634bdf Enable 'Delete Item' toolbar icon in the Footprint Editor when the tool is active 2018-06-15 17:10:12 +02:00
Maciej Suminski 7d66dc0cc3 Fixed an assert on pasting items in the Footprint Library Editor
The assert in the title line verifies that an item does not belong to
any DLIST when it is being added to one. Items in clipboard are already
owned by DLISTs, therefore they need to be removed from the original
DLISTs before being added to new ones.
2018-06-15 14:35:55 +02:00
Andrzej Wolski 316ff2898d Fix footprint selection
Commit 72b49acc changed behavior of MODULE::ViewBBox(),
which now includes text fields area. This caused problems
with selecting footprints with relatively large text fields.
This patch fixes this problem by using MODULE::GetBoundingBox instead.

Fixes: lp:1776942
* https://bugs.launchpad.net/kicad/+bug/1776942
2018-06-14 19:32:09 -07:00
Wayne Stambaugh b82bf7c449 Fix minor layout issue in keepout area properties dialog. 2018-06-14 11:12:34 -04:00
Jeff Young b37969f584 Reset tools before switching footprints.
Fixes: lp:1776777
* https://bugs.launchpad.net/kicad/+bug/1776777
2018-06-14 09:55:29 +01:00
jean-pierre charras 0d4d24ed22 Update demos. 2018-06-14 09:52:23 +02:00
Seth Hillbrand 11ab8f6dc1 pcbnew: Fix a couple of duplicate hotkeys 2018-06-13 22:53:06 -07:00
Alexis Lockwood 860a95ca30 Correct my name in AUTHORS.txt and About dialog 2018-06-13 23:10:27 -06:00
Seth Hillbrand f6bd6b1360 3d: Replace glFinish with glFlush
glFinish is meant to ensure every aspect of the screen is fully-drawn
before continuing.  This causes issues with certain chipsets (Intel
4-8k)

glFlush is more of a suggestion that CPU work is complete and the GPU
should complete its work in a "timely" fashion.

We add an additional glFinish call before getting a screenshot as this
will copy the actual data from the card buffer.

Fixes: lp:1775976
* https://bugs.launchpad.net/kicad/+bug/1775976
2018-06-13 15:32:18 -07:00
Seth Hillbrand 4dd2de9057 pcbnew: Prevent mouse capture after actions
After an action is completed that required the screen to pan when the
cursor reaches the edge of the screen, we should release the cursor to
allow the user to move their mouse without panning.

Fixes: lp:1763860
* https://bugs.launchpad.net/kicad/+bug/1763860
2018-06-13 14:05:32 -07:00
John Beard 34c6393b71 Pcbnew Python docs: remove obsolete Doxygen parameters
These two parameters were unused and were producing warings:

* XML_SCHEMA
* XML_DTD
2018-06-13 11:12:24 -04:00
John Beard 41d6fc648d Pcbnew Python: use python super for inherited classes 2018-06-13 11:12:15 -04:00
John Beard 1f04b5fc7d Pcbnew Python: Add PadArray module documentation 2018-06-13 11:12:08 -04:00
John Beard 468d26d9d1 Pcbnew Python: Add plugin documentation
This adds the Python plugin helper classes to the generated
documentation.
2018-06-13 11:12:02 -04:00
John Beard 939450856a Pcbnew FP wizard: add rounded and chamfered box aids
These functions are fairly common drawing operations that otherwise
require fairly complex calculations, which would be better not to
have to repeat.
2018-06-13 11:11:55 -04:00
John Beard 5001b056ac Pcbnew FP wizard: add docstring for parameters
Adds more verbose and complete explanations of the
FootprintWizardBase and FootprintWizardDrawingAids functions.
2018-06-13 11:11:49 -04:00
John Beard 137799165d Pcbnew FP wizard: minor style fixes
This contains only a few minor style fixes according to PEP8
for FootprintWizardBase.py, and some spelling fixes
2018-06-13 11:11:42 -04:00
jean-pierre charras 9302bbce59 Pcbnew: fix a duplicate hotkey (E for edit properties) 2018-06-13 09:46:22 +02:00
jean-pierre charras 5411b951ae Minor compil warning (signed/unsigned compare) fix 2018-06-13 08:05:10 +02:00
Seth Hillbrand bc7bd107d9 Fix a number of untranslated strings. 2018-06-12 17:05:25 -07:00
Seth Hillbrand fb1aa56b77 modedit: Don't activate measure tool without a footprint
There's no risk in measuring an empty footprint but there's no benefit
either.  This matches the measure tool to the other, deactivated
footprint tools.
2018-06-12 16:48:59 -07:00
Seth Hillbrand 04706d9d02 pcbnew: Add placement hotkeys
Assigns configurable hotkeys to the placement commands.

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

Fixes: lp:1167895
* https://bugs.launchpad.net/kicad/+bug/1167895
2018-06-12 16:08:06 -07:00
Seth Hillbrand 47106b6861 pcbnew: Adding meander hotkeys to assignment
Allows increase/decrease spacing/amplitude hotkeys to be
assigned/changed.

Fixes: lp:94fb13aec
* https://bugs.launchpad.net/kicad/+bug/94fb13aec
2018-06-12 16:08:01 -07:00
Seth Hillbrand aae30cc7c1 pcbnew: Hotkey minor fixes
- Ordering of Hotkey list by function
- Use Hotkey assignment instead of hard-coded hotkey for length tuning
- Adjust default Length Tuning settings hotkey to CTRL-L so that we
don't overlap with "Lock" (overlaps are not editable)
2018-06-12 14:22:46 -07:00
Seth Hillbrand 70506cc31d pcbnew: Standardize HK display in Routing
Routing menu should display assigned hotkeys for all items, not just
route track.
2018-06-12 14:22:32 -07:00
Seth Hillbrand e95d06e811 OCC: Fix issues for OpenCascade 7.3
OpenCascade 7.3 deprecates some TK libraries that were not required by
KiCad, therefore we should not include them in the compile.

Also correct missing compiles for STEP import/export induced by 584409b2e when using OCCT.  There is no effect on OCE to this change.
2018-06-12 10:03:13 -07:00
jean-pierre charras cee313da8c Pcbnew: legacy canvas: make trace len display working while creating the trace.
Previously, the full trace length was always displayed as 0 during track creation in the info canvas.
2018-06-12 18:21:46 +02:00
Seth Hillbrand 5de246c5be Add handlers for scrollbar events
Fixes: lp:1776120
* https://bugs.launchpad.net/kicad/+bug/1776120
2018-06-12 08:53:50 -07:00
Maciej Suminski 72b49acccf Commit supplementing 9605dd8e
Once SELECTION_TOOL has been changed to use EDA_ITEM::GetBoundingBox(),
selection area had to cover the footprint and its ref/value texts,
even hidden ones. To fix this, ref/val strings are taken into account
only in the ViewBBox().
2018-06-12 17:40:56 +02:00
jean-pierre charras e624bbae8a fix test_002_board_class.py according to changes (fixes) in bounding box track calculations 2018-06-12 17:21:03 +02:00
Wayne Stambaugh ade3c2b129 Minor Python scripting documentation fixes.
Change the Doxyfile project name from KiCAD to KiCad.  It doesn't look
very good when we don't get the project name capitalization correct.

Clean up trailing whitespace in some of the helper scripts and Doxyfile.
2018-06-12 10:24:59 -04:00
Jeff Young 660aed71b4 Make sure initially loaded footprint is rendered.
Also sets the initial footprint to the current footprint when
doing a Choose Footprint from the Eeschema Edit Property
dialog.

Fixes: lp:1776126
* https://bugs.launchpad.net/kicad/+bug/1776126
2018-06-12 13:41:53 +01:00
John Beard 16411c8c1e Fix -Wparentheses in track_cleaner.cpp
Changes "wxBusyCursor( dummy );" to just "wxBusyCursor dummy;"

Fixes warning: ../pcbnew/tracks_cleaner.cpp:155:17:
warning: unnecessary parentheses in declaration of ‘dummy’ [-Wparentheses]
     wxBusyCursor( dummy )
2018-06-12 14:23:59 +02:00
Maciej Suminski 9605dd8e1d Fix selection clearance for via and tracks
- fixed via bounding box calculation in TRACK::GetBoundingBox()
- moved clearance to TRACK::ViewBBox()
- modified the Selection Tool to use EDA_ITEM::GetBoundingBox() rather
than VIEW_ITEM::ViewBBox() to determine selection

Fixes: lp:1776314
* https://bugs.launchpad.net/kicad/+bug/1776314
2018-06-12 10:59:30 +02:00
jean-pierre charras 5d276a43f6 PCB_EDIT_FRAME::EraseRedundantTrack() Fix incorrect detection of the new trace boundaries in a specific case.
It happens if the first segment of the new trace is inside a pad: the other segments are not found.
And the erased trace is not the right trace.

However this fix is more a workaround than a fix: currently the detection of the trace boundaries (BOARD::MarkTrace())
does not work very well for segments inside a pad.

Fixes: lp:1776121
https://bugs.launchpad.net/kicad/+bug/1776121
2018-06-12 10:05:12 +02:00
Seth Hillbrand 4186626069 Fix overzealous checking in 2798035f8
Checking for NULL fields prevents a useful dialog from being displayed
now that the exception is handled.
2018-06-11 20:49:13 -07:00
Seth Hillbrand 2798035f85 eeschema: Catch parameter errors in SPICE sim
Any errors in the dialog should be handled and, at worst, allowed to
redo.  SPICE_VALUE throws KI_PARAM_ERROR, so we catch that explicitly.

Fixes: lp:1776051
* https://bugs.launchpad.net/kicad/+bug/1776051
2018-06-11 18:02:20 -07:00
Seth Hillbrand 61c3bc4af4 pcbnew: Don't stage undo commits on new items
New items just being placed on the board are still temporary.  Although
we can modify their orientations/positions, we can't stage these changes
for undo/redo without corrupting the undo stack.

Fixes: lp:1776312
* https://bugs.launchpad.net/kicad/+bug/1776312
2018-06-11 16:43:30 -07:00
John Beard 896ad3774d "Select Connection" menus enablement
Previously, the "Select Connection" sub-items were greyed out when the
selection contained both tracks and vias. This meant that you couldn't
access "Select Copper Connection" when the selection contained both
tracks and vias (though the keyboard shortcuts did work).

Change to use SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks
) to allow any combination of track elements to be selected.

Fixes: lp:1772249
* https://bugs.launchpad.net/kicad/+bug/1772249
2018-06-11 10:58:26 -07:00
John Beard 0555bbc656 Pass PCB display settings to PNS router tool
This allows the tool to set display options like the clearance.

Fixes: lp:1766836
* https://bugs.launchpad.net/kicad/+bug/1766836
2018-06-11 10:48:05 -07:00
Jeff Young 8a2639325d Update footprint value when doing a Save As to library.
Fixes: lp:1570120
* https://bugs.launchpad.net/kicad/+bug/1570120
2018-06-11 14:43:32 +01:00
Jeff Young 5c65881fde Allow Global Fields Editor to Cancel with no changes. 2018-06-11 12:10:19 +01:00
Ben Gamari da61285a29 field editor: Save checkbox states
This refactors the symbol field editor's checkbox state-saving code to
deal with multiple projects with disjoint field sets more consistently.

For instance, imagine I have a two projects

 * Proj1 has fields A, B, C
 * Proj2 has fields A, B, D

Under the old scheme, when I switch from one project to the other the
state of fields C and D will be forgotten. With the new approach,
however, they are retained.

Not to mention, the implementation is considerably simpler.  Fixes
2018-06-11 12:08:59 +01:00
Jeff Young de7791cc8b Add context menu to footprint viewer for zoom & grid.
Fixes: lp:1776126
* https://bugs.launchpad.net/kicad/+bug/1776126
2018-06-11 11:37:48 +01:00
Maciej Suminski 813c1a2ba2 Dealing with inconsistent wxGLCanvas::IsDisplaySupported()
wxGLCanvas::IsDisplaySupported() handles wxGL_{MINOR,MAJOR}_VERSION
attributes only in 3.0.4. Since 3.1.0 the attributes are apparently not
supported, so instead wxGLContext::IsOK() is used (introduced in 3.1.0).

Fixes: lp:1775995
* https://bugs.launchpad.net/kicad/+bug/1775995
2018-06-11 12:26:59 +02:00
Ben Gamari 3f783d2318 field editor: Find components when reference field is clicked
This makes it significantly easier to find a particular component when
using the field editor, as I often do for part selection.

Fixes: lp:1772169
* https://bugs.launchpad.net/kicad/+bug/1772169
2018-06-11 10:27:49 +02:00
Maciej Suminski 850aac5ec5 Set OpenGL_GL_PREFERENCE for CMake 3.11+ 2018-06-11 10:27:49 +02:00
Jeff Young 9edfd25b95 Select best-matching component when filtering.
This also fixes the old bug of scrolling to the selected best
match.

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

Fixes: lp:1744703
* https://bugs.launchpad.net/kicad/+bug/1744703
2018-06-10 23:21:05 +01:00
Damien Espitallier 0e3be5776c Add library name pseudo-hash in fp_list_table GenerateTimestamp output 2018-06-09 16:18:40 +01:00
Simon Richter 8444b1b617 Add missing header 2018-06-08 17:15:17 -07:00
Jeff Young b9874da3a6 Remove background fp loading from Choose Symbol dlg.
There are a bunch of problems with event processing and closing
documents, etc., when enabled.  See the bug report for more
info.

Fixes: lp:1774777
* https://bugs.launchpad.net/kicad/+bug/1774777
2018-06-09 00:51:39 +01:00
Jeff Young 5098c5796a Prevent another case of "fall behind" dialogs. 2018-06-09 00:51:39 +01:00
Seth Hillbrand c5c52c3dfd pcbnew Check for valid nodes before drawing ratsnest
We can invalidate a node by rotating.  Make sure that our endpoints for
the ratsnest are valid before attempting to draw.

Fixes: lp:1775727
* https://bugs.launchpad.net/kicad/+bug/1775727
2018-06-08 16:34:37 -07:00
Seth Hillbrand fb9ccd855d eeschema: Check for dangling ends when switching sheets
When you search for an item that exists on a separate sheet in the
schematic, the newly loaded schematic sheet needs to have the dangling
flags set so that we don't have a mess of non-connected "o" markers.
2018-06-08 12:51:54 -07:00
Seth Hillbrand 72238e260a Fix overload compile warning 2018-06-08 11:25:27 -07:00
Seth Hillbrand 7558c71aca When clearing annotations, keep units
Clearing annotations should only clear the settings that can be set by
the matching annotate function.  Even in components where the units are
functionally the same, the unit choice should be retained as there are
often other considerations when chosing the unit.

Fixes: lp:1769457
* https://bugs.launchpad.net/kicad/+bug/1769457
2018-06-08 10:51:56 -07:00
Seth Hillbrand 68f6e3ad44 pcbnew: Differential pairs obey netclass settings
PNS routing options allow trace width to be chosen by the assigned
netclass.  This extends that to differential pair width/gap settings as
well.

Fixes: lp:1672126
* https://bugs.launchpad.net/kicad/+bug/1672126
2018-06-07 08:58:12 -07:00
jean-pierre charras 6d77e594b5 Python binding: fix pcbnew.Refresh() to make a better re-initialization.
Minor fixes in comments.

Fixes: lp:1775003
https://bugs.launchpad.net/kicad/+bug/1775003
2018-06-07 10:04:29 +02:00
Seth Hillbrand a5b92a1fe4 Constrain dimension tool while creating
The dimension tool is optionally constrained (MD_CTRL) while editing the
dimension.  This ensures same behavior for the creation step.
2018-06-06 17:04:28 -07:00
Seth Hillbrand 40d2535625 Recalculate ratsnest when moving footprint in legacy
Legacy shows the local ratsnest when moving a footprint.  Therefore we
need to recalculate it when the move ends.

Fixes: lp:1775473
* https://bugs.launchpad.net/kicad/+bug/1775473
2018-06-06 15:40:58 -07:00
Seth Hillbrand abd8927d71 Dimension Edit window passes default action
Processing enter from within the dimension editor window is only set to
the default action for top-level items.  Within the sizer, enter is
handled by the first registered button (Cancel) unless explicitly set.

Fixes: lp:1774035
* https://bugs.launchpad.net/kicad/+bug/1774035
2018-06-06 12:31:48 -07:00
Seth Hillbrand a5c213c23d Set footprint splitter window canvas to transient
The splitter window can not be the parent to any additional windows.
If it acquires a child that persists past the lifetime of the splitter
window, we get a segfault.
2018-06-06 10:03:00 -07:00
Maciej Suminski 64e98c8e54 Fixed Symbol Library editor crash on start
Added a null pointer check missing in 51c7381f

Fixes: lp:1775414
* https://bugs.launchpad.net/kicad/+bug/1775414
2018-06-06 17:01:06 +02:00
Maciej Suminski 228881f552 Eagle SCH import: validate package (footprint) names 2018-06-06 10:12:04 +02:00
Maciej Suminski 51c7381fd5 Fix Choose Symbol dialog freezes in eeschema
Scrollbars are always enabled to prevent an infinite event loop caused
by alternating CreateLayout() and OnSize event handler.
More details: http://trac.wxwidgets.org/ticket/18141

Fixes: lp:1767848
* https://bugs.launchpad.net/kicad/+bug/1767848
2018-06-06 09:11:15 +02:00
Jeff Young 9552e02727 Handle description when reading netlist. 2018-06-06 01:59:56 +01:00
Jeff Young 271826f8f3 Fix crash when deleting from library with nothing selected.
Fixes: lp:1775289
* https://bugs.launchpad.net/kicad/+bug/1775289
2018-06-06 00:01:47 +01:00
Damien Espitallier 5263558eaa Fix crash when delete button of footprint filter is clicked and no footprint is selected
Fixes: lp:1775296
* https://bugs.launchpad.net/kicad/+bug/1775296
2018-06-06 00:01:47 +01:00
Jeff Young a300006956 Fix dialog layout of Add 3D Shape.
Fixes: lp:1747652
* https://bugs.launchpad.net/kicad/+bug/1747652
2018-06-06 00:01:47 +01:00
Jeff Young e0c881b639 Output descriptions to components in generic netlist.
Also hooks up the Python netlist reader to the descriptions so
that they appear correctly in BOMs.  (The BOM generators used
to always get the root component's description rather than the
alias's description.)

Fixes: lp:1774358
* https://bugs.launchpad.net/kicad/+bug/1774358
2018-06-06 00:01:47 +01:00
Jeff Young aaf47bbe71 Replace "unsaved changes" dialog to Global Fields Editor. 2018-06-06 00:01:47 +01:00
Seth Hillbrand 7d62f14dd0 Set ViewBBox to viewitem size
Limit the bbox size of origin view item to item size.  This prevents
excessive redraw.

This also side-steps a degeneracy in the RTree calculation under certain
conditions in i386 where multiple, maximum-sized items are degenerate.

Fixes: lp:1774316
* https://bugs.launchpad.net/kicad/+bug/1774316
2018-06-05 15:35:58 -07:00
Seth Hillbrand 9e4511eb11 Update netclasses when loading footprint
When clearing the pcb in footprint editor, we need to transfer the
netclass settings to ensure we have the correct defaults for the new
footprint.

Fixes: lp:1751583
* https://bugs.launchpad.net/kicad/+bug/1751583
2018-06-05 12:44:43 -07:00
jean-pierre charras 9354372a0c Fix bug: Pcbnew crash on invoking footprint browser when already open (happens only in some distros)
Fixes: lp:1775178
https://bugs.launchpad.net/kicad/+bug/1775178
2018-06-05 20:05:56 +02:00
jean-pierre charras da392728d4 spice_value.cpp: replace std::invalid_argument by KI_PARAM_ERROR (replacement forgotten in commit a288d6199)
see commit a288d6199 for the reasons of this replacement.
2018-06-05 16:07:47 +02:00
jean-pierre charras a288d6199e Add KI_PARAM_ERROR, similar to std::invalid_argument but using wxString instead of std::string to throw errors.
std::invalid_argument does not work fine with translated strings as argument for message.
(the translated message is incorrectly or not displayed if it contains non ascii8 chars, at least on Windows).
KI_PARAM_ERROR can be throw-ed with a translatable/translated string (a wxString)
2018-06-05 13:29:51 +02:00
John Beard 58814e838d Common: Fix -Wcatch-value warnings (catching exceptions by value)
This fixes some warnings on GCC 8.1:

warning: catching polymorphic type ‘class std::out_of_range’ by value [-Wcatch-value=]
         catch( std::out_of_range )
                     ^~~~~~~~~~~~

This fix is along the same lines as:

* ff1802d7a "Fix Coverity "Big parameter passed by value" warnings"
2018-06-05 11:46:17 +02:00
Seth Hillbrand f95b77b61a Fix overflow on 32-bit machine
Bitmap hash incorrectly shifted by 60 bits on 32 bit machines while only
shifting 28 bits on 64 bit machines.
2018-06-04 16:41:16 -07:00
Seth Hillbrand ee34aab07a Async hardening
There are three related changes here to harden our handling of threads
in the footprint async loader.

1) Footprint async loader explicitly aborts any remaining loader threads
on exit.

2) We protect the thread join by a mutex

3) We do not pause during no-wait routines
2018-06-04 15:08:40 -07:00
Seth Hillbrand 39ac5e0af8 Pcbnew: List nets fix calculation speed
Similar to 6e5726613, we need to find net node count quickly without
iterating over all items in the board.
2018-06-04 11:08:54 -07:00
Wayne Stambaugh 7343e78347 Fix some Coverity uninitialized field warnings.
Fixes Coverity CIDs:

- 175824
- 169337
- 163191
- 175827
- 175440
- 175438
- 157136
2018-06-04 13:48:57 -04:00
Seth Hillbrand 5dbfa6a9c1 Correct node/pad count in pcbnew
Pads count all pads/pins on the board including unconnected and NPTH.
Nodes count only the pads that can connect to a net and are therefore
routable.  These were being calculated as the same number (displayed in
the info bar at the bottom of the screen)
2018-06-04 10:26:40 -07:00
Wayne Stambaugh ff1802d7a1 Fix Coverity "Big parameter passed by value" warnings.
Fixes Coverity CIDs:

- 175846
- 175841
- 175840
- 175837
- 175836
- 175834
- 102524
2018-06-04 12:30:00 -04:00
Seth Hillbrand 63a952d239 Adjust connectivity to use RTree
Connectivity searches were slow for large, complex boards.  This was
partly due to the need to search all lists for possible connections
between anchors.

We remove this requirement by creating an RTree based on items' bounding
boxes similar to the PNS router.  Then we get both the colliding items
and search forward/backward to see if there are connections between the
anchors and the other item.

Because we use RTree, we no longer need the maintenance overhead of multiple
item lists and an anchor list in the connectivity class.

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

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

Fixes: lp:1761989
* https://bugs.launchpad.net/kicad/+bug/1761989
2018-06-04 08:30:07 -07:00
Wayne Stambaugh 6f65f835f4 Fix assert in CvPcb when opening footprint equate file dialog.
Fixes lp:1774726

https://bugs.launchpad.net/kicad/+bug/1774726
2018-06-04 10:09:06 -04:00
Maciej Suminski e4a6f2e523 Switch canvas to Cairo if OpenGL is not supported on the first run 2018-06-04 12:17:58 +02:00
Maciej Suminski 6bd708621b Early check of supported OpenGL version 2018-06-04 12:17:58 +02:00
jean-pierre charras 0b8cf93888 Pcbnew, On line DRC in legacy canvas: Fix broken Drc test during track and zone creation or edition.
It was broken by commit c78171d01f.
During creation, the Drc must only display a error message, and do not create markers.
Markers are created only during a full board DRC test.
commit c78171d01f replaced this behavior by a incorrect one (create markers and do not show error messages)
2018-06-04 11:20:11 +02:00
Maciej Suminski 27c9c6ceed Enable the accelerated canvas on the first gerbview run if requested
Commit 8910894f applied to gerbview.
2018-06-04 10:47:44 +02:00
Maciej Suminski 8910894fab Enable the accelerated canvas on the first pcbnew run if requested
Fixes: lp:1769143
* https://bugs.launchpad.net/kicad/+bug/1769143
2018-06-04 10:41:34 +02:00
jean-pierre charras d3c41dd247 Remove dead code. 2018-06-03 19:55:03 +02:00
Seth Hillbrand 0a91f0bc9c Add 45º constraints to lines when moving with CTRL
Fixes: lp:1774750
* https://bugs.launchpad.net/kicad/+bug/1774750
2018-06-02 15:52:18 -07:00
Seth Hillbrand 975e777149 Fix threaded race condition in footprints
The progress reporter should not be cleared in the footprint
implementation to prevent dereferencing a NULL.

When cancelling the load, we should only allow setting of cancellation
to true to prevent a condition where the progress reporter resets
the cancellation.

Fixes: lp:1774777
* https://bugs.launchpad.net/kicad/+bug/1774777
2018-06-02 15:05:36 -07:00
jean-pierre charras 6e57266136 Pcbnew: optimize BOARD::SortedNetnamesList() for a must faster calculation time.
It is mainly used in copper zones dialog editor,
and previously created a noticeable delay to show this dialog with large boards (more than 900 nets)
2018-06-02 18:14:34 +02:00
Jean-Samuel Reynaud d4393b2813 Fix incorrect Eeschema BOM plugins install path on Linux.
Fixes lp:1697041

https://bugs.launchpad.net/kicad/+bug/1697041
2018-06-01 14:09:08 -04:00
jean-pierre charras 8f984c2899 OpenGL, DrawGrid(): use grid and axis alpha color value setting, instead of the fixed 1.0
In Cairo mode, this function uses already the alpha color value setting.
Now for low alpha values (usually they are low, as said in many GAL comments),
Cairo mode and OpenGL mode should have a similar look.
2018-06-01 18:29:04 +02:00
Seth Hillbrand 3cf9009f73 Delete GL context in GL destructor not program
Also lock the DeleteAll call with mutext to protect threaded access.

The OpenGL contexts are removed when OPENGL_GAL class is destroyed.
Explicitly deleting all contexts prior to destroying the OPENGL_GAL
class causes an assert when the destructor tries to lock its context
prior to cleaning up OpenGL memory.  In most cases, an unhandled assert
in a destructor-called function will simply exit the destructor.

Python thread cleanup will also attempt to close the context.  This can
cause a race condition with multiple threads accessing/deleting the
canvas.

Fixes: lp:1774096
* https://bugs.launchpad.net/kicad/+bug/1774096
2018-06-01 09:14:36 -07:00
jean-pierre charras bfa89039c4 Gerbview, GAL mode: fix "Zoom to fit" area size calculation when nothing is loaded.
Also ensure the worksheet is displayed after clearing the gerber layers.
2018-06-01 11:39:08 +02:00
jean-pierre charras 9a228d8ec9 Gerbview: GAL mode: shows the page worksheet, similar to legacy mode. 2018-06-01 09:11:43 +02:00
jean-pierre charras fc71fc6474 Gerbview: Fit to page: use the page size when nothing is loaded.
Previously, due to a minor bug, a very small default size was used (therefore a high zoom value), that was not a good choice.
2018-05-31 11:22:33 +02:00
Maciej Suminski 7c49bcd3a6 Clear selection before deleting DRC markers
Pcbnew crashes when a selected DRC marker is deleted. This a possible
fix to lp:#1773863.
2018-05-31 09:32:43 +02:00
Maciej Suminski f51f30fb1e eeschema: Disabled an assert checking if project path is empty
Empty project path is a valid case when eeschema is executed in
standalone mode without any file loaded.

There were no observed harmful consequences of running eeschema without
the project path set, but to stay safe the project specific
sym-lib-table load code is executed only when the project path is set.
2018-05-31 09:09:01 +02:00
Maciej Suminski c5cde53dff Symbol Editor: fixed a crash when modifying a symbol
In the scenario described in the bug report, the SCH_SCREEN current item
pointer stores an address of a stale object that had been deleted when
the symbol was reloaded. To prevent the crash, the current item pointer
is reset whenever a symbol is loaded.

Fixes: lp:1774296
* https://bugs.launchpad.net/kicad/+bug/1774296
2018-05-31 09:01:59 +02:00
Seth Hillbrand 3ce8a4856a Remove ToLayer_ID calls from color checks
Colors are assigned to virtual layers while the ToLayer_ID returns a
physical layer enum.  The GetLayerColor/SetLayerColor take LAYER_NUM
(int) values that can be larger than the physical layer count.
2018-05-30 13:51:20 -07:00
Jeff Young d90d4ff682 Fix bugs in Export to SVG.
We were trying to handle aOnlyOneFile at two different levels
which was preventing the Silk layer from going through the
right routine (and preventing board outlines from getting
drawn if selected).

We were also overwriting the references color local variable
before using it, meaning the reference was always rendered in
the value's color.

Fixes: lp:1774171
* https://bugs.launchpad.net/kicad/+bug/1774171
2018-05-30 20:49:05 +01:00
Seth Hillbrand fe1f837d0c Limit zoom out
We limit the minimum zoom to Z=0.3.  Minimum preset zoom level is 0.31,
so 0.3 is only reachable using the mouse wheel.  Smaller than 0.18, GAL
does not display properly.

Fixes: lp:1773215
* https://bugs.launchpad.net/kicad/+bug/1773215
2018-05-30 11:24:35 -07:00
Seth Hillbrand eeb273faa0 Partial revert of 3804f6 to correct assert change
ToLayerID function converts to PCB_LAYER_ID and needs to check against
that enum instead of GAL_LAYER_ID.
2018-05-30 09:17:51 -07:00
Baranovskiy Konstantin 36504b3071 SymLibEditor: synced state of search tree tool button with its panel
Button "Toggle the search tree" from left toolbar of Symbol Library
Editor does not show actual state of visibility of the search tree
panel. State of this button (checked or unchecked) changes on clicking
only. Toggling panel visibility from menu does not make effect on tool
state.

Applied changes makes tool state (checkd/unchecked) synced with panel
state (shown/hidden).
2018-05-30 16:55:55 +02:00
Jeff Young d03e92a3a2 Field Name Template (aka Default Fields) fixes.
Move from a "default" fields model to a "seed" fields model.  See
discussion on devlist:
https://lists.launchpad.net/kicad-developers/msg35823.html.
2018-05-30 09:46:52 +01:00
Maciej Suminski 8c63dac0c3 Component Chooser: do not create FP list when the FP preview is disabled 2018-05-30 09:53:58 +02:00
jean-pierre charras 52fceb3243 Eeschema: sheet filename renaming: fix a old issue that can set incorrect filenames in sheets inside a complex hierarchy.
Fixes: lp:1773500
https://bugs.launchpad.net/kicad/+bug/1773500
2018-05-29 19:57:18 +02:00
jean-pierre charras ce9cc4ea38 plot board: fix a stupid bug created by commit dfa91752 2018-05-29 19:51:50 +02:00
Maciej Suminski c5f56ef573 Eagle PCB import: made warning strings translatable 2018-05-29 15:02:26 +02:00
Maciej Suminski d2436e7478 Corrected "Add footprint library" dialog file filters
Fixes: lp:1773969
* https://bugs.launchpad.net/kicad/+bug/1773969
2018-05-29 15:02:26 +02:00
jean-pierre charras dfa9175209 Fix incorrect mask size for rectangular and trapezoid pads.
Fixes: lp:1773926
https://bugs.launchpad.net/kicad/+bug/1773926

Fixes: lp:1773961
https://bugs.launchpad.net/kicad/+bug/1773961
2018-05-29 13:45:45 +02:00
jean-pierre charras 71e64de3a4 gerber plot: fix incorrect string attribute for BGA pads on copper layer 2018-05-29 12:30:52 +02:00
Maciej Suminski 94f161b8c2 Eagle SCH import: validate imported symbol names
Fixes: lp:1753189
* https://bugs.launchpad.net/kicad/+bug/1753189
2018-05-29 09:29:22 +02:00
Maciej Suminski e789523632 Eagle SCH import: do not crash if nothing was imported 2018-05-29 09:29:21 +02:00
Jeff Young a12b9db584 Map Eagle values to fab layers.
Fixes: lp:1773256
* https://bugs.launchpad.net/kicad/+bug/1773256
2018-05-28 20:37:52 +01:00
Jeff Young f914558e7b Remove overly-strict assert.
Fixes: lp:1773807
* https://bugs.launchpad.net/kicad/+bug/1773807
2018-05-28 20:37:14 +01:00
Maciej Suminski a8db21319f Spice Simulator: set correct scale for constant plots
Fixes: lp:1772278
* https://bugs.launchpad.net/kicad/+bug/1772278
2018-05-28 16:42:15 +02:00
Marco Ciampa 2cb65f9c19 Make the Simulator error strings translatable 2018-05-28 14:51:10 +02:00
jean-pierre charras da66005254 Pcbnew, plot dialog: avoid slightly change in hpgl pen diameter (due to inch/mm conversion error) when the hpgl format is not selected 2018-05-26 17:36:07 +02:00
jean-pierre charras 7db88126c5 hpgl plot parameters: use double instead of int to store the pen diameter to avoid truncation.
This parameter, always in mm in a hpgl file, is for historical reasons stored in mils,
and using a int to store it created annoying rounding errors.
2018-05-26 09:37:42 +02:00
Seth Hillbrand da061718e5 Remove constraint on circle
Allows circle radius to snap to arbitrary points while editing

Fixes: lp:1773436
* https://bugs.launchpad.net/kicad/+bug/1773436
2018-05-25 12:30:47 -07:00
jean-pierre charras c614f73c50 HPGL plotter fix incorrect scaling factor
A 0.4% scale error in hpgl plots was previously existing since a long time.

Fixes: lp:1772828
https://bugs.launchpad.net/kicad/+bug/1772828
2018-05-25 20:50:00 +02:00
jean-pierre charras 250d958ebb Plot dialog: fix broken dialog management.
Previously, the dialog was created only once, with the current board setup and the current units selection.
Therefore, after changes in board or units, the dialog was really broken.

Now, the dialog is recreated when the plot command is run.
2018-05-25 19:48:07 +02:00
Jeff Young cd5f727880 Fix off-by-1 errors in zoom menus & use zoom steps in GAL canvas.
Also bumps the maximums a bit (at user request).

Fixes: lp:1773215
* https://bugs.launchpad.net/kicad/+bug/1773215
2018-05-25 13:01:58 +01:00
Jeff Young b89f6d4af3 Decrease allowed coverage ration when zones are involved.
A perfect solution would create holes in the coverage map
for the zone edges and handles, but that's a lot more
work.

Fixes: lp:1773204
* https://bugs.launchpad.net/kicad/+bug/1773204
2018-05-25 13:01:58 +01:00
Maciej Suminski 61597db12d Make the Simulator dialog strings translatable 2018-05-25 11:24:25 +02:00
Maciej Suminski 32f599654f Fixed normalizeAbsolutePaths() condition
normalizeAbsolutePath() used an invalid condition to
verify that the tested paths are on the same volume.
2018-05-25 11:07:51 +02:00
Maciej Suminski 145835661b Replaced footprint library wizard with a common file browser
As of v5 footprint library reorganization (one repo per library concept
is replaced with a common repo for all libraries), the Footprint Library
Wizard may handle only the old libraries. It has been replaced with
a file browser to select only local files.

Fixes: lp:1772209
* https://bugs.launchpad.net/kicad/+bug/1772209
2018-05-25 08:51:46 +02:00
Maciej Suminski adc61024d3 DIALOG_FILE_DIR_PICKER: dialog to select both files and directories
wxWidgets offers two dialog types: wxFileDialog and wxDirDialog, one
to select files, the other to select directories, but neither of them
handles both. DIALOG_FILE_DIR_PICKER fills that gap.
2018-05-25 08:51:45 +02:00
Jeff Young 81af2db614 Even out the Gerbveiw zoom steps and increase the max.
Fixes: lp:1773215
* https://bugs.launchpad.net/kicad/+bug/1773215
2018-05-24 19:04:10 +01:00
Jeff Young cb925a6646 Output defined default fields to netlists & BOMs.
Fixes: lp:1746814
* https://bugs.launchpad.net/kicad/+bug/1746814
2018-05-24 18:24:59 +01:00
jean-pierre charras 6090f9001e netinfo.i: fix incorrect position of a declaration, that was not taken in account.
Fixes: lp:1544750
https://bugs.launchpad.net/kicad/+bug/1544750
2018-05-24 09:43:04 +02:00
Jeff Young 8f5cb32598 Don't write empty fields from Global Edit Fields dialog. 2018-05-23 21:35:23 +01:00
Seth Hillbrand cf2a07559d Safely release thread memory
When starting async processes, we need to have a way to stop the process
before releasing memory.  Descoping FOOTPRINT_ASYNC_LOADER while the
threads were still running could cause crashes depending on the memory
structure.  To avoid this we define clear procedures for exiting a
running async processes and call these when exiting.

Fixes: lp:1772909
* https://bugs.launchpad.net/kicad/+bug/1772909
2018-05-23 08:55:55 -07:00
Maciej Suminski 190d4d6f55 Eagle PCB import: disable copper pour for imported *Restrict layer polygons
Fixes: lp:1772245
* https://bugs.launchpad.net/kicad/+bug/1772245
2018-05-23 17:51:49 +02:00
jean-pierre charras 3893c43eb0 Fix compil issues. 2018-05-23 11:31:13 +02:00
jean-pierre charras ca548809da Fix a qa test issue related to pad hit test. 2018-05-23 09:17:35 +02:00
Seth Hillbrand 8506cdf3ae Avoid numerical dereference of selections
The SELECTION is a std::set.  Numerical dereference of item n is O(n) as
the iterator is not random access.  Therefore, a for loop using
numerical dereference is O(n!) and quickly slows.

We avoid this by storing items to remove separately while iterating and
then removing the items after we complete.

Fixes: lp:1692081
* https://bugs.launchpad.net/kicad/+bug/1692081
2018-05-22 16:37:45 -07:00
Seth Hillbrand 8d52dc9451 Avoid re-checking items already selected
If you select a track with many segments (e.g. a length-tuned track) and
then select all connected items again ('U' -> 'U'), we would iterate
over all items in the selection and mark connections for each of the n
segments n separate times.

We avoid this by using the marked flag to show when the segment has
already been visited by the routine.  This means that if the segment has
been checked for connections because it was connected to the previous
item, it won't be checked for connections again.  However, a selection
that interleaves items from multiple connection segments will still
(potentially) be multiply checked as the BUSY flag is cleared each time
there is one not-BUSY track in the selection.
2018-05-22 16:26:52 -07:00
Seth Hillbrand b625d29151 Only search pads when the position hits module
On large boards with high pad-count modules, searching each pad for hits
becomes expensive.  We eliminate many of the pad searches by first
checking the module's bounding box before iterating over pads to look
for hits.
2018-05-22 15:37:24 -07:00
Seth Hillbrand 8c5037a48b Optionally sort reporter messages
It can be useful to have similar class messages grouped together so that
error messages in a larger report don't get lost among the
warning/info/action messages.

This patch allows sorting of messages for dialogs that benefit from
organization.  Default behavior of reporter messages remains
unchanged by this patch.

Fixes: lp:1772090
* https://bugs.launchpad.net/kicad/+bug/1772090
2018-05-22 13:55:02 -07:00
Seth Hillbrand b8f960ea09 Correct message panel sizing
Message panel in update PCB needs size hints from the dialog to
correctly choose the size.
2018-05-22 13:54:48 -07:00
Jeff Young c4b447f3f9 Initialize field visibility checkboxes in Fields Editor. 2018-05-22 19:24:37 +01:00
jean-pierre charras 6f249e5eb6 Add missing icons in lock/unlock context submenu 2018-05-22 14:36:35 +02:00
Jeff Young e3c4a96f5c Default field bug fixes.
1) Commit in-progress edits before closing preferences.
2) Handle default fields in Symbol Fields Editor.
3) Save state of checkboxes in Symbol Fields Editor.
2018-05-22 12:55:39 +01:00
Seth Hillbrand 2d812c2827 Remove FreeRouting icon and menu option
Freerouting-specialized menus are removed as FreeRouting is not
maintained or packaged for most OSes.  Users can still import/export
SPECCTRA files in KiCad allowing them to interface with a custom
FreeRouting installation.
2018-05-21 10:44:32 -07:00
Seth Hillbrand 5d8dd38664 Standardize graphical edit window
The graphical editor window for pcbnew and modedit have slight
differences, so different classes.  But they should appear the same to
the user.  This merges the differences into a dialog that looks the same
to the user.

Fixes: lp:1772389
* https://bugs.launchpad.net/kicad/+bug/1772389
2018-05-21 09:37:04 -07:00
Jeff Young 6a2dc8d4eb Roll back last 2 commits meant for the other resolver only.
Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-21 16:25:44 +01:00
Jeff Young cdde4c4b40 Fix a bug in how we check for differential pair tuning.
Fixes: lp:1545856
* https://bugs.launchpad.net/kicad/+bug/1545856
2018-05-21 13:49:40 +01:00
Jeff Young 0fd0e84162 Keep OK/Cancel buttons at bottom of Track/Via Properties.
Fixes: lp:1772260
* https://bugs.launchpad.net/kicad/+bug/1772260
2018-05-21 13:18:41 +01:00
Jeff Young 2b22cbe94d Release mouse before closing HTML_MESSAGE_BOX.
Fixes: lp:1772275
* https://bugs.launchpad.net/kicad/+bug/1772275
2018-05-21 13:18:41 +01:00
Jeff Young 10ec39a107 Move 3D file error messages to tracePathsAndFiles key.
Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-21 13:18:41 +01:00
Wayne Stambaugh c49a4398a1 Set KiCad version to 5.0.0-rc2-unknown for next development cycle. 2018-05-20 21:24:18 -04:00
Wayne Stambaugh b4f9b5359d Set KiCad version to 5.0.0-rc2. 2018-05-20 21:20:28 -04:00
Seth Hillbrand 0c2f9b1827 Keep circles controlled by radius
Circles are defined by center and a point on their edge.  This requires
the user to do extra math to figure out the size of the circle.  The
patch allows the user to edit and draw circles using radial coordinates.
2018-05-20 17:16:44 -07:00
Jeff Young 3a8a718e43 A pesky bug, this one is. (Said in best Yoda impression.)
There were two examples of the somewhat annoying error message.
This gets the second one.

Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-21 00:19:55 +01:00
Wayne Stambaugh 5678a166ee Fix template path bugs.
Remove KICAD_PTEMPLATE environment variable as it's purpose was not
clear and was often poorly defined as the path to the KiCad installed
templates.

Add a new KICAD_TEMPLATE_DIR environment variable which clearly should
be the path of the KiCad installed templates.  Make this environment
variable available in the user settings in case the default is wrong
which has been the case in some instances.  Use the standard search
stack to set the default system template path which has a much greater
chance of being correct.

Add a new KICAD_USER_TEMPLATE_DIR environment variable which clearly
should be the path of the user defined templates.  Users most likely
were not even aware of the old default user path unless they read the
fine manual.

Set template path search stack priority as follows:

* KICAD_USER_TEMPLATE_DIR
* KICAD_TEMPLATE_DIR
* Search stack template paths

Reverse template selection dialog and project path dialog for improved
user experience.

Fixes lp:1543443

https://bugs.launchpad.net/kicad/+bug/1543443
2018-05-20 18:56:11 -04:00
Jeff Young 8badfea17a Fix the build messages fall-behind problem...
... by getting rid of the separate window.  It makes more sense
to put the messages into the wizard anyway.

Fixes: lp:1492836
* https://bugs.launchpad.net/kicad/+bug/1492836
2018-05-20 23:48:29 +01:00
Jeff Young e27d31d51d Fix minor dialog layout issue. 2018-05-20 23:48:29 +01:00
Jeff Young c48e5b6423 Remove unhelpful warning message.
It appears far too often with the new libraries.

Fixes: lp:1772255
* https://bugs.launchpad.net/kicad/+bug/1772255
2018-05-20 23:48:29 +01:00
Jeff Young 052ca08546 Switch footprint-locked-can't-remove msg to warning.
Fixes: lp:1689898
* https://bugs.launchpad.net/kicad/+bug/1689898
2018-05-20 23:48:29 +01:00
Jeff Young 62a5ee8c21 Layout Track / Via Properties dialog.
It's sizing is dependent on the selection.

Fixes: lp:1772260
* https://bugs.launchpad.net/kicad/+bug/1772260
2018-05-20 23:48:29 +01:00
Jeff Young 63c9e11aae Bug fixes in Length Tuning UI.
1) hide the status popup when the dialog is brought up
2) forward events from the popup to the canvas so hotkeys work
3) make sure diff pair radius is always 100%
4) fix greyed-out Miter style label
5) make L a hotkey so it works before you start dragging

Fixes: lp:1545856
* https://bugs.launchpad.net/kicad/+bug/1545856
2018-05-20 23:48:29 +01:00
Maciej Suminski 8f6ae70400 Deterministic algorithm for picking field values in multiunit components
The original algorithm picked the value from the last component having
non empty value for a given field, but the processing order was
dependent on the layout of the components in the memory. It means that
for each component, the field values could have been taken from any
unit, randomly.

The patch improves the algorithm, trying to get all values from the unit
with the lowest number and resorts to other units only when there are
field values left empty.
2018-05-19 18:43:23 +02:00
Maciej Suminski dcf60f8e6f Eagle PCB import: handle keepout zones
Fixes: lp:1755886
* https://bugs.launchpad.net/kicad/+bug/1755886
2018-05-19 18:43:04 +02:00
Jeff Young 2bd0a027a2 Improved error messages for diff-pair routing.
Fixes: lp:1542592
* https://bugs.launchpad.net/kicad/+bug/1542592
2018-05-19 01:52:22 +01:00
Seth Hillbrand 6b1df2e992 Remove extraneous PROFILE
Accidentally committed in b2d063137
2018-05-18 17:08:52 -07:00
Seth Hillbrand 0c1172b17d Garbage collection optimization
We only need to iterate over the anchors when there are items that are
marked invalid.  We check once in the item list and only if there are
invalid items to remove do we trim the anchor lists.

However, the connected items might still need to be trimmed, so we leave
this final step outside of the conditional.
2018-05-18 16:59:36 -07:00
Seth Hillbrand b2d0631370 Split anchor vectors by layer
This is a speed commit for large boards.  Tracks and pads cannot connect
to elements that are not on the same layer.  Rather than checking for
this at the last step, this commit splits the anchor vectors by layer,
limiting the initial search space.
2018-05-18 16:59:36 -07:00
Seth Hillbrand 019ada0a92 Move some connectivity search to std::algs
Previously, binary search was hand-coded.  This moves the search to a
std::algorithm variant.  Also searches bbox by limits rather than
directly iterating.
2018-05-18 16:59:36 -07:00
Jeff Young 0bcfb2c7df Don't write library name to footprint files.
Fixes: lp:1772095
* https://bugs.launchpad.net/kicad/+bug/1772095
2018-05-19 00:57:15 +01:00
Jeff Young c5696738d2 Use diff-pair-via clearance when checking against vias.
Fixes: lp:1742275
* https://bugs.launchpad.net/kicad/+bug/1742275
2018-05-18 23:42:38 +01:00
Seth Hillbrand d62b4f36a6 Save hotkeys to combined app-based file
Unifies the different sections of hotkeys so that we are not storing two
[eeschema] or [pcbnew] sections in two different files.

Previous hotkey definitions are loaded at start if they exist but are
overwritten by the new format, if it exists.  Changes to hotkeys save
only in the combined format.

Hotkey editor for each application only shows the hotkeys relevant to
that application.

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

Fixes: lp:1668799
* https://bugs.launchpad.net/kicad/+bug/1668799
2018-05-18 12:57:38 -07:00
Seth Hillbrand d22fceca7c Revert hotkey save format
This reverts the hotkeys file format to a human readable and VCS
compatible listing by splitting individual hotkey assignments onto
separate lines instead of the single key. This unifies the hotkey format
between the application configuration and export Hotkey routines.

Both hotkey formats remain readable by the same routines.
2018-05-18 12:53:45 -07:00
jean-pierre charras bbc01e0c2b Add a tooltip in DIALOG_POSITION_RELATIVE. 2018-05-18 20:42:24 +02:00
Jeff Young 149f4f68c9 Leave decorations on LAYER_GP_OVERLAY.
In particular, don't reset them to 0, which happens to be F_Cu.

Fixes: lp:1658775
* https://bugs.launchpad.net/kicad/+bug/1658775
2018-05-18 18:18:40 +01:00
jean-pierre charras 45dad4ded5 DIALOG_POSITION_RELATIVE: make dialog more understandable.
Better texts, and add a helper comment.
2018-05-18 13:53:31 +02:00
Jeff Young 5010a461e1 Make polar coordinates consistent.
Use theta instead of phi (which normally describes the azimuth
angle).

Fixes: lp:1545107
* https://bugs.launchpad.net/kicad/+bug/1545107
2018-05-18 12:22:14 +01:00
jean-pierre charras 2363f36033 Fix compil issue in dialog_select_net_from_list.cpp with wxWidgets 3.1 2018-05-18 10:16:30 +02:00
jean-pierre charras ec98bbba11 Fix issue: HPGL (plot mode sketch) : polygons are not closed.
Fixes: lp:1771531
https://bugs.launchpad.net/kicad/+bug/1771531
2018-05-18 10:13:46 +02:00
jean-pierre charras 689db4f038 Pcbnew, D_PAD::buildCustomPadPolygon(): use PM_STRICTLY_SIMPLE instead of PM_FAST in polygon calculation.
It is slightly slower, but avoid any issue in polygon generation.
2018-05-18 08:38:03 +02:00
Seth Hillbrand d09445cf34 Fixing signed/unsigned warning 2018-05-17 16:47:51 -07:00
Seth Hillbrand 85921535b3 Cleaning SelectNet window display
Select net has two columns, so we should limit the column width to the
size of the grid.  The size should adjust with the window, so we take
the size of the first column as fixed and assign the rest of the grid
width to the second column.
2018-05-17 16:44:30 -07:00
Jeff Young 5e30e4d475 Don't allow replace on Power Symbol value fields.
Fixes: lp:1771398
* https://bugs.launchpad.net/kicad/+bug/1771398
2018-05-18 00:43:40 +01:00
Jeff Young 8cb68a3585 Wire up return in combobox to accept dialog.
(I've fixed a few of these now.  If memory serves, it's an OSX-
specific problem.)

Fixes: lp:1771515
* https://bugs.launchpad.net/kicad/+bug/1771515
2018-05-17 23:58:49 +01:00
Jeff Young df495b1d65 Fix typo in loading of preferences Reference ID Notation menu.
Fixes: lp:1771898
* https://bugs.launchpad.net/kicad/+bug/1771898
2018-05-17 23:46:32 +01:00
jean-pierre charras 1ebee39973 Gerber X1 format: add more structured comments in file. 2018-05-17 17:32:35 +02:00
jean-pierre charras d1cab6ec62 Gerber X1 plot files: prepare adding more structured comments (aperture and object attributes)
structured comments are lines starting by "G04 #@!" and are therefore Gerber X1 comments.
But these comments contain X2 attributes.
2018-05-17 17:32:35 +02:00
Maciej Suminski dfcdfe91fa Fixed the TOOL_STATE::idle field setting condition
The tools were being set as idle, whenever an event handler execution
finished (via TOOL_MANAGER::finishTool()). Such approach does not take
into account cases when a tool is active and receives an event causing
another event handler of the same tool to run. When this happend, the
tool has been incorrectly set as idle when the second handler finished
its execution.

In a particular case, invoking the router settings dialog caused the PNS
router to be incorrectly detected as inactive in
EDIT_TOOL::invokeInlineRouter(). Due to that, ROUTER_TOOL::CanInlineDrag()
requested a selection that required disambiguation menu for items
that were modified by the router, but not yet committed. After the drag
tool had finished, the disambiguation menu was eventually shown
with items existing only in the undo buffer. Removing such item lead to
track DLIST corruption, effectively erasing all tracks.

Fixes: lp:1767826
* https://bugs.launchpad.net/kicad/+bug/1767826
2018-05-17 16:24:13 +02:00
jean-pierre charras 7c52af2d50 Gerbview: cosmetic enhancement: add icons in Clarify menu. 2018-05-17 10:24:09 +02:00
jean-pierre charras 93e75af388 Rename plot_auxiliary_data.h file to gbr_metadata.h, according to the class names defined by this file 2018-05-17 08:07:29 +02:00
jean-pierre charras 144549ebca Pcbnew, plot: Fix: masks derived from custom pad shape have incorrect margin.
Fixes: lp:1771526
https://bugs.launchpad.net/kicad/+bug/1771526
2018-05-16 18:26:43 +02:00
jean-pierre charras afc28ef5db fix a minor compil warning 2018-05-16 18:14:06 +02:00
jean-pierre charras 828faecce9 Modify the priority of OCC/OCE include paths.
This is because on my msys2/32bits the OCE config.h file replaced our kicad config.h, due to include paths priorities
2018-05-16 17:30:37 +02:00
jean-pierre charras 904eb82368 Fix a DRC crash on some installs.
It looks like D_GLIBCXX_ASSERTIONS=ON activated on some Linux versions creates too zealous tests at run time.
This patch just calculate the same pointer value using a slightly different formula.

Fix also a hard-to-understand comment

Fixes: lp:1770414
https://bugs.launchpad.net/kicad/+bug/1770414
2018-05-16 09:20:04 +02:00
Seth Hillbrand 584409b2ef Make OpenCascade more secondary
The opencascade patch intrusively checked against libraries but broke
some build scripts.  This restores the default cmake OCE behavior that was
changed by 2bab30d9a and makes the OpenCascade search truly secondary.
2018-05-15 06:40:25 -07:00
Maciej Suminski 538ab0eb3f kicad_netlist_reader.py: Handle gracefully the case when a library symbol is not available for a component 2018-05-14 17:58:24 +02:00
Maciej Suminski 161b4a56fc kicad2step: Handle escaped quotes in sexpr parser 2018-05-14 17:58:24 +02:00
jean-pierre charras 509793a5b4 Symbol editor: Inversion sign ("~") incorectly ùmanaged in graphic texts.
It was always replaced with space in a graphic text, but it should happens
only in non quoted texts
Now graphic texts containing ' ' or '~' or '"' are always quoted
(work fine with 4.0 version)

Fixes: lp:1771105
https://bugs.launchpad.net/kicad/+bug/1771105
2018-05-14 17:49:30 +02:00
Maciej Suminski 23a9fcd91d Fixed a typo in the STEP generator message 2018-05-14 10:59:48 +02:00
jean-pierre charras 86d6ed5abf Demo update to used V5 libs 2018-05-14 09:33:45 +02:00
jean-pierre charras d8687e4eaf Gerbview: minor code cleanup 2018-05-14 09:05:11 +02:00
jean-pierre charras 8da242c593 Gerbview: accept any structured comment as X2 attribute.
A structured comment is a comment line starting by "G04 #@! " and in fact containing
a X2 attribute. It is used to create Gerber files contianing X2 metadata, but compatible
with X1 file format
2018-05-14 09:05:09 +02:00
Jeff Young 1a6e8d4713 Fix typo. 2018-05-13 21:48:13 +01:00
jean-pierre charras 2832f997c5 PcbNew; fix crash on copy/paste
Due to a bug introduced by commit ba1e0efda that tried to fix an other bug.

Fixes: lp:1771003
https://bugs.launchpad.net/kicad/+bug/1771003
2018-05-13 21:50:59 +02:00
Jeff Young a9dc417319 Fix bug in pruning of selection.
Fixes: lp:1770939
* https://bugs.launchpad.net/kicad/+bug/1770939
2018-05-13 15:23:41 +01:00
Jeff Young c30dd24cc1 Fixup sorting for expanded component groups.
Also adds shorthand notation for groups with adjacent components.
2018-05-13 12:21:55 +01:00
jean-pierre charras b94e0a2031 Fix forgotten change (m_Zone to m_SegZoneDeprecated) 2018-05-13 09:19:44 +02:00
jean-pierre charras 54766bac40 fix minor compil warning (signed/unsigned compar) 2018-05-13 08:56:17 +02:00
jean-pierre charras e57cd291ff class BOARD: rename m_Zone to m_SegZoneDeprecated to avoid mistakes in code.
m_Zone is a fully deprecated list of SEG_ZONE items (similar to TRACK), used to fill copper zones in *very old* boards.
it is even unlikely there are still boards that use them.
So it should be removed one day.
2018-05-13 08:39:36 +02:00
Jeff Young 9311393016 Add expand/collapse to grouped rows in Fields Editor.
Fixes: lp:1767746
* https://bugs.launchpad.net/kicad/+bug/1767746
2018-05-12 23:05:04 +01:00
jean-pierre charras ba1e0efdad Pcbnew, GAL mode: Fix incorrect management of zones in append board and copy from Paste from clipboard.
Fixes: lp:1770855
https://bugs.launchpad.net/kicad/+bug/1770855
2018-05-12 20:48:50 +02:00
jean-pierre charras 9704891c8f Cvpcb, fo viewer frame: fix a bug (close frame widget not active) due to a too zealous cleanup. 2018-05-12 11:32:06 +02:00
jean-pierre charras 6e5131be5a Minor fix in fp editor and fp viewer: display the fp info instead of the useless board info.
board info makes sense only in board editor, not in fp editor and fp viewer.
2018-05-12 10:44:31 +02:00
Seth Hillbrand 2bab30d9ac Allow Kicad to use OpenCascade
Adds the option of using OpenCascade not just the community edition.

Fixes: lp:1628950
* https://bugs.launchpad.net/kicad/+bug/1628950
2018-05-11 17:04:32 -07:00
Seth Hillbrand da5f2874c5 Adding white outline to zoom icons
All-black icons disappear when using a dark menu theme.  Adding a small
white outline allows them to be visible.

Fixes: lp:1760098
* https://bugs.launchpad.net/kicad/+bug/1760098
2018-05-11 16:45:05 -07:00
Seth Hillbrand 6a726ca299 Unify polygon point checks
Mutliple checks are made for point in polygons/closed line chains.  This
unifies the checks to a single (hopefully) place for improved debugging.
2018-05-11 15:42:41 -07:00
Seth Hillbrand f2aea97807 Calculate inside polygon using points
Minor improvement in polygon calculation to use consecutive points
rather than casting to a full segment.  Avoids division except when it
will not create a denormal.
2018-05-11 15:42:41 -07:00
Seth Hillbrand d67821d771 Add a clearance check for closed shape line chains
Also improves speed of multiple point checks by first eliminating points
outside of the BBox.
2018-05-11 15:42:41 -07:00
Jeff Young 108dc20fba Keep first segment of wire attached to sheet pin horizontal.
If allowed to go vertical it's very hard to see on top of the
sheet boundary and liable to short out other pins.

Fixes: lp:1685508
* https://bugs.launchpad.net/kicad/+bug/1685508
2018-05-11 21:50:43 +01:00
Jeff Young 62d6750ced Use default for attribute "display" if not found.
Fixes: lp:1767447
* https://bugs.launchpad.net/kicad/+bug/1767447
2018-05-11 16:11:38 +01:00
Jeff Young 09622a4c9f Replace messageBox with assert for non-fatal error.
Fixes: lp:1770505
* https://bugs.launchpad.net/kicad/+bug/1770505
2018-05-11 13:02:02 +01:00
Jeff Young e91e88bfa1 Make sure read-only attr sticks when grid table rebuilt. 2018-05-11 12:33:53 +01:00
Jeff Young 6e83f99c72 Relax fully-annotated constraint for BOM editor.
Also fixes a bug where unannotated components would get references
of the form R-1 (because their reference number was -1).

Fixes: lp:1768814
* https://bugs.launchpad.net/kicad/+bug/1768814
2018-05-11 12:33:44 +01:00
Maciej Suminski f73b9a55a7 Fixed an assert in DHEAD::append()
The previous one incorrectly expected the appended items to belong to
the target list, instead of the source list.
2018-05-11 10:23:40 +02:00
jean-pierre charras 2ed24a46b2 Try to fix Jenkins build error (link error). 2018-05-10 15:14:08 +02:00
jean-pierre charras daa7abec70 Update demo to use V5 libs 2018-05-10 14:22:38 +02:00
Jeff Young dffdf04cd9 Update footprint value when it's a proxy for FPID.
Fixes: lp:1769207
* https://bugs.launchpad.net/kicad/+bug/1769207
2018-05-10 12:16:00 +01:00
Jeff Young a65088419e More forgiving keyword search.
In particular, allow comma separators in footprint filters without
making users type them in when searching.

Fixes: lp:1391533
* https://bugs.launchpad.net/kicad/+bug/1391533
2018-05-10 12:16:00 +01:00
Jeff Young 933ff189ad Remember the last directory in FPLib Wizard.
Fixes: lp:1577965
* https://bugs.launchpad.net/kicad/+bug/1577965
2018-05-10 12:16:00 +01:00
jean-pierre charras e339007d22 3D viewer: fix some issues when opened from a frame and changes are made in a other frame:
* Refresh the view only when changes are made in the caller frame.
* Allows recreate a new instances when try to open the 3D view from a frame taht is not the initial caller
* Remove duplicate code in kicad frames.
2018-05-10 12:49:20 +02:00
Wayne Stambaugh d41e64b0ff Fix dialog grid sizer padding issue on GTK builds. 2018-05-09 17:38:06 -04:00
Wayne Stambaugh 7bd9fc9235 Fix footprint editor options dialog layout.
Add padding to standard dialog button sizer.  On windows, the buttons are
slammed against the bottom of the dialog with no border which looks awful.

Fix alignment and padding in grid sizers.
2018-05-09 14:12:26 -04:00
Wayne Stambaugh 7b887c4844 Fix static text iss in board editor footprint properties dialog.
Replace degree symbol with the word degrees.  On windows, this does not
translate to the degree symbol.
2018-05-09 14:01:50 -04:00
Wayne Stambaugh b67bab2f98 Fix layout issues in footprint editor footprint properties dialog.
Add padding to standard dialog button sizer.  On windows, the buttons are
slammed against the bottom of the dialog with no border which looks awful.

Replace degree symbol with the word degrees.  On windows, this does not
translate to the degree symbol.
2018-05-09 13:52:04 -04:00
Wayne Stambaugh 1f898b1e80 Fix control padding in choose footprint dialog. 2018-05-09 13:23:45 -04:00
Wayne Stambaugh 03b85c7544 Fix control alignment and padding in footprint properties dialog. 2018-05-09 13:11:36 -04:00
jean-pierre charras b9808da0a8 Use wxStdDialogButtonSizer in dialog.
Use .step instead of .stp as step file extension.
2018-05-09 18:14:49 +02:00
Wayne Stambaugh 787ee62db3 Fix inconsistent padding in Pcbnew plot dialog. 2018-05-09 11:33:26 -04:00
Maciej Suminski 194c57133c SCH_LEGACY_PLUGIN::loadHierarchy() uses a stack to maintain sheet paths
Path keeping stack copes well with paths pointing outside the project
directory (e.g. "../path"). The so far used wxFileName::GetDirCount() and
wxFileName::RemoveLastDir() remove too many directories, as ".." is also
counted as a directory.

Fixes: lp:1769746
* https://bugs.launchpad.net/kicad/+bug/1769746
2018-05-09 11:30:23 +02:00
jean-pierre charras 6866c0c8a5 Update demo to use V5 libs 2018-05-09 09:06:31 +02:00
Jeff Young 31b026c70f Another attempt to fix the initial button layout on GTK. 2018-05-08 20:01:29 +01:00
Jeff Young e5374981aa Improve spacing of Plot button on GTK. 2018-05-08 18:48:23 +01:00
Jeff Young 36850a539b Make layers manager terminology consistent.
Fixes: lp:1769788
* https://bugs.launchpad.net/kicad/+bug/1769788
2018-05-08 18:48:23 +01:00
Seth Hillbrand b90f70e230 Update footprint filter type-in to be implicit *
Footprint filter provides two Regex filtering options.  One for keywords
and one for footprint keywords.  The footprint keywords (contained in
the symbol files) need explicit '*' at the beginning and end of the
filters to allow matching start/end.  Type-in filters should search
implicitly matching any wildcard substring.

Fixes: lp:1769931
* https://bugs.launchpad.net/kicad/+bug/1769931
2018-05-08 10:44:14 -07:00
Jeff Young a997aad144 Fix issue on re-titling sdbSizer button on GTK.
While "fixes" isn't quite the right word, we do want this commit
associated with the following bug, and "fixes" is the easiest
way to do that:

Fixes: lp:1712579
* https://bugs.launchpad.net/kicad/+bug/1712579
2018-05-08 17:11:48 +01:00
jean-pierre charras 4cc62ce038 3D viewer: minor enhancement: display the name of the 3D shape being loaded. 2018-05-08 16:07:09 +02:00
jean-pierre charras 8a70acb821 Update demos to use V5 libraries. 2018-05-08 15:29:21 +02:00
Tomasz Włostowski dcf4d7caa7 router: allow placing via without track in shove mode
Fixes: lp:1769782
* https://bugs.launchpad.net/kicad/+bug/1769782
2018-05-08 15:18:10 +02:00
Maciej Suminski c8f4e1051b Eagle SCH import: keep multi-unit parts not interchangeable
Eagle supports more sophisticated unit swapping information,
so the safest choice is to prevent any unit manipulation.
2018-05-08 12:17:46 +02:00
Maciej Suminski 2b46bda2f2 PNS router: apply the last stable state after dragging
Previously, dragging changes were applied only if the last cursor move
finished with a successful drag operation. It made items squeezing
difficult, as it required accurate cursor movement to apply the changes.
2018-05-08 11:50:37 +02:00
Maciej Suminski 471e3de5a7 Fixed board append function, broken in 046e73ec
The previous implementation cleared all DLISTs, but has not added
everything back on append.
2018-05-08 11:21:55 +02:00
Maciej Suminski 8cb3aa79f2 pcbnew_control.cpp code formatting 2018-05-08 10:40:33 +02:00
Maciej Suminski 046e73ecac Clear the source DLIST when pasting items to a BOARD
Fixes the assert triggering when items already belonging to a list are
added to another one.
2018-05-08 10:40:33 +02:00
jean-pierre charras 44bf92ae64 Annotate schematic: fix annotation bug with multi-unit parts when these parts have a duplicate reference.
It happens only with option "Reset, but keep order of multi-unit parts, because the algo tried
to propagate the new reference to parts having the same old reference,
without testing if this old reference was duplicated.

Fixes: lp:1769250
https://bugs.launchpad.net/kicad/+bug/1769250
2018-05-08 09:46:25 +02:00
Jeff Young ad6956b05d Move zone fill check for plot to a checkbox option.
Fixes: lp:1712579
* https://bugs.launchpad.net/kicad/+bug/1712579
2018-05-08 00:22:45 +01:00
Wayne Stambaugh 5c5b74b29e Fix user configuration path bug on Linux.
Recent versions of wxWidgets wxStandardPaths::GetUserConfigDir() correctly
append ".config" on Linux build which was incorrect as the current code
already appended it to the path.  Add a check to see if ".config" is the
last path and append as required.

Check for XDG_CONFIG_HOME environment variable on all platforms not just
Linux.

Fixes lp:1769145

https://bugs.launchpad.net/kicad/+bug/1769145
2018-05-07 18:23:41 -04:00
Seth Hillbrand dbc2eea3db Optimize itemset
When counting items, many cases exist where we want to count all items
without checking flags.  This short-circuits the loop to provide the
immediate count.
2018-05-07 13:59:12 -07:00
Seth Hillbrand 4c7f5f2a2f Allow disabling snap-to when placing vias
This allows the user to selectively disable the snap-to behavior when
placing stand-alone vias.  Full solution will require an update to the
segment distance calculation that takes into account the rounded line
caps.

Fixes: lp:1769523
* https://bugs.launchpad.net/kicad/+bug/1769523
2018-05-07 13:58:26 -07:00
Maciej Suminski ffe194567a DLIST: extra checks 2018-05-07 17:12:03 +02:00
Maciej Suminski d2d5657aff DLIST: replace wxASSERT with wxCHECK for checks that would lead to a crash
wxASSERT only shows a dialog saying that things went wrong (in debug mode),
whereas wxCHECK will also terminate the function (also in release builds).
2018-05-07 16:52:34 +02:00
Maciej Suminski ef698384a7 Eagle PCB importer: changed m_Track.Insert() to m_Track.PushBack()
The latter better reflects the intention.
2018-05-07 16:51:06 +02:00
jean-pierre charras a3770bf6e1 Gerbview: fix a crash when Gerbview starts by loading a gerber job file (run from a command line) 2018-05-07 12:47:11 +02:00
jean-pierre charras d35a6f1e6d Gerber job file, update to the latest file specification: add a change forgotten in the first commit. 2018-05-07 08:50:17 +02:00
Jeff Young 07e7340a96 Make sure doc gets refreshed when zone check results in refill. 2018-05-06 14:05:50 +01:00
jean-pierre charras db8c57dbc6 fix a minor compil warning 2018-05-06 12:49:35 +02:00
jean-pierre charras b29550de5d Gerber job file: minor update to the latest file specification. 2018-05-06 12:03:46 +02:00
jean-pierre charras 90951ac1d1 Update demo to use V5 libraries. 2018-05-06 11:53:08 +02:00
Jeff Young 5a90858a46 Convert unit indicies to reference letters for annotation messages.
Fixes: lp:1769244
* https://bugs.launchpad.net/kicad/+bug/1769244
2018-05-06 00:23:04 +01:00
Jeff Young aa7da5dfcd Treat ${...} and $(...) envvar references uniformly.
Fixes: lp:1769282
* https://bugs.launchpad.net/kicad/+bug/1769282
2018-05-05 23:40:40 +01:00
Jeff Young a31017bc9c Check zone fills before plotting.
Also adds a "Draft Plot" button for those who wish to sidestep
zone checking (which can be slow).

Fixes: lp:1712579
* https://bugs.launchpad.net/kicad/+bug/1712579
2018-05-05 23:40:40 +01:00
Thomas Pointhuber cad2d0656c Remove Items from Menubar of 3D Viewer which are available over dialog 2018-05-05 12:33:04 -04:00
Thomas Pointhuber 32af04c6a6 Adjust Menubar of 3D Viewer to common style 2018-05-05 12:28:09 -04:00
Jeff Young 1f5b575eaf Pretty-up new pad clearance UI. 2018-05-04 23:55:03 +01:00
Jeff Young c23b263e39 Fix display issues in Layers list in Keepout Zone Properties. 2018-05-04 23:55:03 +01:00
Seth Hillbrand bfe636d327 Query user to create library on save
Revising 5ca6864a4, this prompts the user to create the missing library
directory when attempting to save to a non-existent library.
2018-05-04 09:59:35 -07:00
Seth Hillbrand 5ca6864a40 Improve error message granularity
When saving a library, check and report on libraries that do not exist
as well as those that exist but are read-only.

Fixes: lp:1769190
* https://bugs.launchpad.net/kicad/+bug/1769190
2018-05-04 09:12:08 -07:00
Steven A. Falco e0ca5bab11 Fix comment typo.
Comment has XDG_CONFIG_HOME, but it should be KICAD_CONFIG_HOME.
2018-05-04 08:28:48 -07:00
Seth Hillbrand 9648584827 Adjusting the breakout optimizer for custom pads
Rather than using the center of the bounding box, we keep the start
track on the custom pad's connection pad when optimizing the breakout.
2018-05-04 08:23:20 -07:00
Seth Hillbrand b2c4519c2c Setting custom pad shape to be outline for PNS
Changes SHAPE_CONVEX to SHAPE_SIMPLE to better reflect the limitations.
Changes SHAPE_LINE_CHAIN::PointInside calculation to allow points
strictly inside a line chain

Fixes: lp:1768862
* https://bugs.launchpad.net/kicad/+bug/1768862
2018-05-04 08:23:20 -07:00
jean-pierre charras 93c7f65d96 mask clearance parameters: use clearances only for pads on copper layers, and never for pads on technical layers only. 2018-05-04 14:55:38 +02:00
Maciej Suminski 684f085ac5 Coverity fixes
CIDs:
dereference before null check:
175439 @ drc.cpp

uninitalized field:
175435 @ point_editor.cpp
174162 @ zone_filler.cpp
163188 @ footprint_info_impl.cpp

logically dead code:
155146 @ pcb_editor_control.cpp
2018-05-04 14:06:08 +02:00
Seth Hillbrand 1ac905d3ee Allow PNS to select nearest pad when two overlap
Usually pads do not overlap.  However custom pads are represented as
their convex hull, so they may enclose other pads.  This change allows the
router to select the closest pad to the cursor position.
2018-05-03 09:48:15 -07:00
Seth Hillbrand 296ada95a3 Remove unused private vars 2018-05-03 09:48:15 -07:00
jean-pierre charras 5b44e80355 Fix incorrect gerber job file syntax, when a board has inner layers. 2018-05-03 18:27:02 +02:00
Wayne Stambaugh 0f5eb421b3 Fix duplicate menu shortcuts in Eeschema View menu.
Both "Leave Sheet" and "Library Browser" menu entries were mapped to the
'L' key.  Mapped the "Library Browser" entry to the 'B' key.

Fix "Show hidden pins" menu entry capitalization.

Map "Show Hidden Pins" to 'P' key and "Full Window Crosshair" to 'W' key.

Fixes lp:1768671

https://bugs.launchpad.net/kicad/+bug/1768671
2018-05-03 10:49:44 -04:00
Wayne Stambaugh 7c7a6ea979 Fix board file formatting bug.
The roundrect_rratio token was missing a leading space which made the
file formatting different from all other formatting when using rounded
rectangle pads.

Fixes lp:1768355

https://bugs.launchpad.net/kicad/+bug/1768355
2018-05-03 10:21:40 -04:00
Jeff Young a2448cf4a5 Add missing settings to ModEdit's preferences.
Fixes: lp:1768477
* https://bugs.launchpad.net/kicad/+bug/1768477
2018-05-03 15:07:24 +01:00
Jeff Young d0d9bb25c0 Menu consistence (add Config Paths to LibEdit). 2018-05-03 15:07:24 +01:00
Maciej Suminski 8411ef04d0 Size fields list correctly in symbol properties editor
This patch prevents fields with long text values from unreasonable
dialog resizing. It is basically commit f4eb63f8 applied to a
corresponding field editor dialog in the Symbol Editor.
2018-05-03 12:20:40 +02:00
Maciej Suminski 70cd27314b Autocompletion for Spice model selector 2018-05-03 11:58:13 +02:00
Maciej Suminski 72a70d61d8 Fixed the default value generated for Spice_Node_Sequence field
Values generated by NETLIST_EXPORTER_PSPICE::GetSpiceFieldDefVal()
and the actual value that was stored in a netlist differed when a
component has multiple units.

Due to that, the Spice model editor dialog incorrectly recognized
"alternate node sequence" value as the default one and cleared it
when the dialog was closed.
2018-05-03 11:29:34 +02:00
Jeff Young bf135b0690 Change Libedit save icon from Save Library to Save All Libraries.
Also changes Save Library and Save Library As to work off the
visible selection if there is one.

Also implements enablement for Save All Libraries.

Fixes: lp:1764081
* https://bugs.launchpad.net/kicad/+bug/1764081
2018-05-02 23:41:00 +01:00
Tomasz Włostowski 2eddf1d8db router: prevent a very unlikely infinite loop in PNS::LINE::Walkaround() causing an OOM&segfault
Fixes: lp:1767587
* https://bugs.launchpad.net/kicad/+bug/1767587
2018-05-02 15:06:08 -07:00
Jeff Young af739f5b00 Check for duplicates when adding libraries.
This is particularly important when bulk adding (by director, etc.)
as otherwise the user might end up having to click OK to many
many error dialogs.

Fixes: lp:1764057
* https://bugs.launchpad.net/kicad/+bug/1764057
2018-05-02 21:49:57 +01:00
Jeff Young c842ddfb97 Fix message mismatch in YesNoCancelDialog. 2018-05-02 21:49:57 +01:00
Jeff Young 106dd60e45 Only adjust LAYER_WIDGET font size if larger than indicator.
Also moves adjustment into LAYER_WIDGET so all the callers don't
have to deal with it individually.

Fixes: lp:1767965
* https://bugs.launchpad.net/kicad/+bug/1767965
2018-05-02 21:49:57 +01:00
Jeff Young 2f157f9b23 Enable magnetic pads in Modedit.
Also fixes a bug where a FOOTPRINT_EDIT_FRAME was being passed
in to a PCB_EDIT_FRAME.

Also tidies up Modedit settings handling for settings which can't
be edited in Modedit's preferences dialog.  They're now copied
from Pcbnew.

Fixes: lp:1768477
* https://bugs.launchpad.net/kicad/+bug/1768477
2018-05-02 21:49:57 +01:00
jean-pierre charras 037f7a1698 Cosmetic enhancement: Add missing icons in GAL Select submenu (context submenu). 2018-05-02 21:42:41 +02:00
Seth Hillbrand 6b973f42eb Re-enabling lock/unlock context menus in legacy
This partially reverts 36d36de and 3bac100, moving the legacy footprint
lock/unlock code from the autorouter (which remains disabled) to
pcb_edit_frame.
2018-05-02 09:06:10 -07:00
Seth Hillbrand 76d3b6f04a Adding locking to the context menu for modules
Locking submenu was activated only for tracks and via but it makes sense
(and is probably expected) when right-clicking on modules as well.
2018-05-02 08:35:53 -07:00
Maciej Suminski 73eab29802 Removed 2 unused variables from PNS::LINE::Walkaround() 2018-05-02 17:06:13 +02:00
Maciej Suminski 439cc6a967 Remove redundant window scroll event handlers in WX_VIEW_CONTROLS
The only required scroll event handler is wxEVT_SCROLLWIN_THUMBTRACK,
which is responsible for dragging the scrolling sliders. One of the
remaining ones is also called when mousewheel is scrolled (MSW only) and
due to that overrides the new view setting with view settings computed
from the sliders position.

Fixes: lp:1767604
* https://bugs.launchpad.net/kicad/+bug/1767604
2018-05-02 15:39:36 +02:00
Jeff Young 69a31242b9 Change status bar Unconnected to Unrouted.
This should help make it clear that this is not the same as the
more authoratative DRC unconnected count.
2018-05-02 10:34:33 +01:00
Seth Hillbrand 62522ee450 Prevent implicit * from wildcard match in footprint
Footprint filters need to be able to match the start and end of strings.
The standard wildcard filter implictly adds "*" to the start and end of
match strings, so we create a derived class that requires an explicit
"*" or "?" to match wildcards.

Fixes: lp:1751565
* https://bugs.launchpad.net/kicad/+bug/1751565
2018-05-01 16:49:20 -07:00
Seth Hillbrand 2836d36de8 Removing legacy autorouter menu options
The autorouter was removed in 3bac100 but a few items were left in
place but mostly unconnected to functions.

Fixes: lp:1768357
* https://bugs.launchpad.net/kicad/+bug/1768357
2018-05-01 16:36:43 -07:00
Jeff Young aec490e3ac Handle single- and double-click in Place Footprint history list.
Old code failed to set the wxEventType during acceptance, and
failed to set the default button during initialization.

Fixes: lp:1768253
* https://bugs.launchpad.net/kicad/+bug/1768253
2018-05-01 23:28:01 +01:00
Jeff Young 8f2fee8bb8 Fix accidental revert. 2018-05-01 21:57:00 +01:00
Jeff Young 75e91f4cfd Make sure Cvpcb doesn't use its own FP_LIB_TABLE.
It's just a vestige of when Cvpcb was a separate app.

Fixes: lp:1768251
* https://bugs.launchpad.net/kicad/+bug/1768251
2018-05-01 21:49:03 +01:00
Shivpratap Chauhan 26197c333e At very first launch, old settings/config does not exist
KiCad read incorrect value for window position and it's size at very
first launch, which results in invisble/inaccessible window on Mac OSX.
Set correct default values for these settings fixes this issue.
And fix a typo in comment.
2018-05-01 09:19:27 -04:00
Jeff Young 295941c14d Don't leave Zones with "dead" nets.
When reading netlist or updating board from schematic, if the
changes leave a zone with a net with no pads then change the
zone's net to the new net of one of it's connections.

Also improves update-board-from-schematic's dry run reporting
to include zone nets and single-pad nets.

Fixes: lp:1609401
* https://bugs.launchpad.net/kicad/+bug/1609401
2018-05-01 13:54:31 +01:00
Jeff Young 6b3410974d Fix "same layers" test when duplicating zones. 2018-05-01 13:54:31 +01:00
Wayne Stambaugh 5d71153eab Fix macos build bug caused by commit 2f5fdcf3. 2018-04-30 15:47:50 -04:00
Wayne Stambaugh 6850e23fe0 Replace printf debugging output in common/project.cpp with wxLogTrace. 2018-04-30 15:18:09 -04:00
Seth Hillbrand b2b70ed7e3 Fix minor signed/unsigned comparison 2018-04-30 11:15:29 -07:00
Seth Hillbrand 12487e14ab Reduce extra loop comparison 2018-04-30 09:14:23 -07:00
Simon Richter 2f5fdcf329 Don't reference CMAKE_INSTALL_PREFIX in installation paths
This is substituted at configuration time, creating an absolute path, which
breaks overriding CMAKE_INSTALL_PREFIX at installation time, breaking the
workflow for installation using GNU stow.
2018-04-30 10:32:15 -04:00
Andrzej Wolski 5ac4dbe641 Fix window/crossed selection mode recognition in flipped view
Fixes: lp:1767233
2018-04-30 14:57:38 +02:00
jean-pierre charras 7395949ae0 LIB_ID: fix incorrect detection of illegal chars, when values are not ASCII values.
Fixes: lp:1764055
https://bugs.launchpad.net/kicad/+bug/1764055
2018-04-30 11:46:24 +02:00
jean-pierre charras b636aaddf6 Eeschema: fix incorrect UI messages in dialogs due to using UTF8 strings instead of wxStrings (unicode) to build them.
(Added a explicit to build a Unicode string in UI messages to avoid mistakes)
2018-04-30 11:46:23 +02:00
Jeff Young c8a784058e Allow duplicating a zone onto the same layer in a GAL canvas.
Duplicate already works, so there's little reason to disallow
using the zone dialog to do it.

The legacy canvas can't be fixed because we'll immediately
union the two zones, resulting in a no-op.

Fixes: lp:1464677
* https://bugs.launchpad.net/kicad/+bug/1464677
2018-04-29 20:28:45 +01:00
Jeff Young ae711d9994 Separate clearance axes when plotting pads to DXF (among other things). 2018-04-29 18:51:18 +01:00
Jeff Young 7b734551d3 Make sure pin-caches are up-to-date before testing dangling ends.
Fixes: lp:1767745
* https://bugs.launchpad.net/kicad/+bug/1767745
2018-04-29 16:55:24 +01:00
Jeff Young 21ceb786ac Clear annotations *after* rebuilding symbol links.
We need to symbol links to determine whether or not units are
locked (ie: non-interchangeable).

Fixes: lp:1767744
* https://bugs.launchpad.net/kicad/+bug/1767744
2018-04-29 15:09:28 +01:00
Jeff Young 41b92b6d0f Don't discard footprint's library ID when saving.
Fixes: lp:1767736
* https://bugs.launchpad.net/kicad/+bug/1767736
2018-04-29 09:45:05 +01:00
jean-pierre charras ccb668c105 3D viewer: fix polygon contours of pads solder paste when solder paste ratio was not null.
(the oval and round rect pads 3D contours were incorrect)

Fixes: lp:1767209
https://bugs.launchpad.net/kicad/+bug/1767209
2018-04-28 20:31:50 +02:00
Seth Hillbrand 2a87117edc Speed load/unload of complex boards
Corrects an error in polyline estimation

Syncs graphics to world PNS by whole layer set rather than
individual layer at a time.

Prevents reloading of full pns TOOL_BASE during reset of tools unless
the tool is being activated.

Fixes: lp:1766626
* https://bugs.launchpad.net/kicad/+bug/1766626
2018-04-28 16:11:07 +02:00
jean-pierre charras 458f9f5c97 3D viewer: fix incorrect calculation of pad shapes with clearance (i.e. pad shapes on solder paste and solder mask layers)
Fixes: lp:1767209
https://bugs.launchpad.net/kicad/+bug/1767209
2018-04-28 12:41:43 +02:00
Jeff Young 91cfecaa12 Don't allow wxDataViewCtrl updates during model update.
Also checks to make sure libraries are activated before adding
them to the component tree.

Fixes: lp:1765286
* https://bugs.launchpad.net/kicad/+bug/1765286
2018-04-28 10:45:32 +01:00
Maciej Suminski 5a051358b7 Removed an obsolete comment 2018-04-28 01:19:42 +02:00
Maciej Suminski 9960416e32 Spice simulator: plot currents in DC sweep simulation
Fixes: lp:1767457
* https://bugs.launchpad.net/kicad/+bug/1767457
2018-04-28 01:14:00 +02:00
Maciej Suminski 4d6947b56a Spice simulator: do not display V(0) in the signals list 2018-04-28 01:14:00 +02:00
Maciej Suminski 539d12b08f Spice simulator: more elegant approach to generating Spice device names
Code fixing Spice device names (prefixing reference with a character
corresponding to the assigned device model type) that was duplicated in
a few places has been moved to a function (NETLIST_EXPORTER_PSPICE::GetSpiceDevice()).
2018-04-28 01:14:00 +02:00
Maciej Suminski 095112a902 Spice simulator: add device prefix only when necessary for DC sweep (missing in bc67d1ad) 2018-04-27 23:09:58 +02:00
jean-pierre charras 502bed083d Fix a minimal size for the spice simulator frame.
For an obscure reason, the minimal frame size fixed in EDA_BASE_FRAME was not working.
2018-04-27 20:35:23 +02:00
jean-pierre charras a9dd5b5335 Sim spice fix: the frame size was not the last stored size (like for other frames) but a default fixed value.
The frame size (and its subframes) is now the last used.
2018-04-27 18:33:13 +02:00
Jeff Young cfd2f1d001 Missed some menu items in the earlier clean-up. 2018-04-27 15:26:00 +01:00
Jeff Young 942d4e7658 Check footprint history list for validity.
Fixes: lp:1767108
* https://bugs.launchpad.net/kicad/+bug/1767108
2018-04-27 15:26:00 +01:00
jean-pierre charras ccce376e33 Refinements for commit 986b904
(Add comments and a minor fix)
2018-04-27 16:01:59 +02:00
Maciej Suminski bc67d1ad8c Spice simulator: prefix reference with device type only when necesary
Fixes: lp:1767271
* https://bugs.launchpad.net/kicad/+bug/1767271

Fixes: lp:1700853
* https://bugs.launchpad.net/kicad/+bug/1700853
2018-04-27 14:18:53 +02:00
jean-pierre charras 986b90424b Fix an issue in LoadPlugins(bundlepath=None) python method (Windows specific).
For some obscure (for me) reason, the path separators in bundlepath are seen as escape seq, and the path can be incorrectly handled
(when \n or \r are found in this string).
it happens only for this path, not for other paths in LoadPlugins.
For bundlepath parameter, unix separator is now used.

Fixes: lp:1766879
https://bugs.launchpad.net/kicad/+bug/1766879
2018-04-27 14:04:24 +02:00
Maciej Suminski 7d9dea7897 Remove an excessive assert for Cairo canvas size
It is a C-style assert causing application termination when triggered.
Certain systems display pcbnew window shrinked so much, that the canvas
size is 0x0 pixels. The only problem with that is the window needs to be
resized.

Fixes: lp:1767031
* https://bugs.launchpad.net/kicad/+bug/1767031
2018-04-27 10:06:36 +02:00
Jeff Young 5e5e80d392 Don't allow panel to overwrite values set in Spice Model editor.
Fixes: lp:1766920
* https://bugs.launchpad.net/kicad/+bug/1766920
2018-04-26 19:13:19 +01:00
Jeff Young 6ccc8577ad Hand-code calculation of field names column width.
Fixes: lp:1737361
* https://bugs.launchpad.net/kicad/+bug/1737361
2018-04-26 19:13:19 +01:00
jean-pierre charras 641c8bb548 PCBNew: Fix crash while routing in Legacy canvas
it was due to a incorrect behavior of TRACK::GetBestInsertPoint( BOARD* aPcb )
Also: update comment for this method.

Fixes: lp:1767061
https://bugs.launchpad.net/kicad/+bug/1767061
2018-04-26 19:42:55 +02:00
jean-pierre charras 7a923ab969 vrml export: fix line min width to 0.05mm (instead of 0.12mm) 2018-04-26 19:42:54 +02:00
Jeff Young 888c434776 Treat Mac as special case rather than GTK.
(Windows also needs the padding we use for GTK.)
2018-04-26 15:51:34 +01:00
Wayne Stambaugh a7528df198 Allow for multiple user configurations.
Use KICAD_CONFIG_HOME environment variable on all platforms so users can
maintain multiple configurations of KiCad.
2018-04-26 08:29:37 -04:00
Jeff Young dcf02f5f67 Use a single calc-column-width-impl for Fields Editor.
Also adds calculation of the initial splitter position based on
the widths of the fields in the list.

Fixes: lp:1737361
* https://bugs.launchpad.net/kicad/+bug/1737361
2018-04-26 11:10:58 +01:00
Jeff Young 5342aacf97 Implement magnetic pads & tracks for measurement tool.
This really needs to get put into the VIEW_CONTROLS for all the
tools, but that's probably a bit too risky for 5.0 at this
point.

Fixes: lp:1766547
* https://bugs.launchpad.net/kicad/+bug/1766547
2018-04-25 23:36:17 +01:00
Jeff Young ac778bc5b4 Only draw hidden pins if requested or in LibEdit.
Fixes: lp:1742485
* https://bugs.launchpad.net/kicad/+bug/1742485
2018-04-25 20:07:22 +01:00
Jeff Young 09a6bada03 Delegation of keyEvents from 3D toolbar to 3D canvas.
Fixes: lp:1759803
* https://bugs.launchpad.net/kicad/+bug/1759803
2018-04-25 14:19:32 +01:00
jean-pierre charras 68e69fe95d eeschema: context menu pops up on 2nd click after ESC key was pressed twice
other very minor fixes

Fixes: lp:1766830
https://bugs.launchpad.net/kicad/+bug/1766830
2018-04-25 14:28:41 +02:00
jean-pierre charras 528a67b27c Fix incorrect sizing of 2 columns in dialog, on GTK (issue perhaps depending on GTK/wxWidget version) 2018-04-25 12:07:43 +02:00
jean-pierre charras 91209e194c Remove useless tests after operator new 2018-04-25 12:07:43 +02:00
Jeff Young 7a7da560bc Keep unknown nets at 0 while routing.
Previous algorithm used a static variable which it decremented
for each new unconnected track, but this resulted in the router
marking earlier fixed segments as collisions (because they
would get set to netcode = 0 when "fixed").

Fixes: lp:1762043
* https://bugs.launchpad.net/kicad/+bug/1762043
2018-04-25 10:54:32 +01:00
Maciej Suminski 26ee673a6b Validate symbol alias names read from .dcm files
Fixes: lp:1766551
* https://bugs.launchpad.net/kicad/+bug/1766551
2018-04-25 10:15:44 +02:00
Jeff Young 4b3772cf07 Update value field when changing power symbol reference.
Fixes: lp:1765932
* https://bugs.launchpad.net/kicad/+bug/1765932
2018-04-25 00:36:08 +01:00
Jeff Young 7e29ff0bc4 Conditional compilation for global fields editor listbox. 2018-04-24 23:45:44 +01:00
Seth Hillbrand 8d017c9261 Re-enabling global spread and place
This had been removed along with autorouter but its functionality is
still desired.  If/when the autorouter is resurrected, these IDs will
need to be deconflicted.

Fixes: lp:1766550
* https://bugs.launchpad.net/kicad/+bug/1766550
2018-04-24 11:44:08 -07:00
Seth Hillbrand d0ffff3b88 Prevent deletion while actively routing
Fixes: lp:1766280
* https://bugs.launchpad.net/kicad/+bug/1766280
2018-04-24 10:44:49 -07:00
Seth Hillbrand 345f7d0732 Fix VRML export bugs
Corrected polygon export missing vertex.

Set pads to export on copper layer when not masked, keeping visual
output similar to physical.

Fixes: lp:1766634
* https://bugs.launchpad.net/kicad/+bug/1766634
2018-04-24 09:20:40 -07:00
jean-pierre charras bfc70c8208 Fix an issue in footprint editor, "Create Pad from Selected Shapes" command.
If the initial pad was a custom pad converted in a usual pad + graphic items by the command:
"Explode Pad to Graphic Shapes"
the "old" primitives were not cleaned, and the new created pad contained these old primitives, regardless the new selected shapes.
(Usual case when a user want to edit a custom shape)
2018-04-24 17:00:29 +02:00
jean-pierre charras 319908b7f4 fix a compil issue. 2018-04-24 15:20:35 +02:00
Maciej Suminski 143d580596 Fixed relative coordinates reset when a tool forces the cursor position
Fixes: lp:1759044
* https://bugs.launchpad.net/kicad/+bug/1759044
2018-04-24 12:56:19 +02:00
Seth Hillbrand 482fd866b3 Correct minor error in SPECTRA rounded-rect 2018-04-23 16:43:13 -07:00
Seth Hillbrand bd5eee50f4 Unify correction factor calculations 2018-04-23 16:43:13 -07:00
Seth Hillbrand dbfa9093ab Adding seg-polyset collision support 2018-04-23 16:43:13 -07:00
Seth Hillbrand b618da1fac Fixing bounding box calc for arcs 2018-04-23 16:43:13 -07:00
Seth Hillbrand 96b5dee48f Remove extra sizer label from pcb_calc attentuators 2018-04-23 16:33:53 -07:00
Seth Hillbrand 1a617dd66b Standardizing colon usage in pcb calculator 2018-04-23 16:27:43 -07:00
Seth Hillbrand e6bb917ebf Standardize colon in regulator data dialog 2018-04-23 16:03:43 -07:00
Seth Hillbrand ef1d1f80e5 Standardize colon in page layout and cleanup
Aligned text boxes and placed units beside input where applicable.
2018-04-23 16:00:19 -07:00
Seth Hillbrand 802a96299a Standardize colons in new page layout 2018-04-23 13:33:53 -07:00
Seth Hillbrand 3d76fcaa3b Standardize colons in kicad template dialog 2018-04-23 13:15:02 -07:00
Seth Hillbrand f911ef5186 Standardize print scale label for gerbview 2018-04-23 13:14:06 -07:00
Seth Hillbrand ca06e67ffc Standardize colons in gerbview display options dialog 2018-04-23 13:11:53 -07:00
Seth Hillbrand aa0d67bdde Standardize colons in gerbview print dialog 2018-04-23 13:10:53 -07:00
Seth Hillbrand f2f1ce232d Standardize colons in bitmap2component dialog 2018-04-23 13:09:22 -07:00
Seth Hillbrand 48910f3efc Standardize colons in cvpcb display options dialog 2018-04-23 13:08:21 -07:00
Seth Hillbrand 2694a76785 Standardize colons in symbol library dialog 2018-04-23 12:33:21 -07:00
Seth Hillbrand 3e652f2d40 Standardize colons and units in spice model dialog 2018-04-23 12:31:23 -07:00
Seth Hillbrand 2baca1d650 Standardize colons and units in spice sim settings dialog 2018-04-23 12:31:17 -07:00
Seth Hillbrand 445c0e66fb Align search field 2018-04-23 11:55:28 -07:00
Seth Hillbrand 722886c9c7 Standardize colons in schematic plot dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 805c38ffc5 Standardize colons in new component dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 60abff1c02 Standardize colons in library text dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 424fe8acd4 Standardize colons in libedit pin dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 2c1f14fce5 Standardize colons in draw item dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand c55cb8c557 Standardize colons in ERC dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand f451ffb877 Standardize colons in schematic editor options dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 83319f74c3 Standardize colons in line style dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 2da575d539 Standardize wording and colons in libentry fields dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 617d9288ab Standardize colons in edit label dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 32bb6064d7 Standardize colons in edit schematic component dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 07281d78ad Standardize colons in edit component dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 8c2a7138d1 Standardize colons in BOM dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 4640a656a2 Standardize colons in annotate dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 3693e3b1e0 Standardize colons in track-via properties dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand b2a9df33ea Standardize colons in set grid dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 6f6b65821a Standardize colons in select pretty lib dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 0cbc611135 Standardize colons in select net dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 938f8b1a9a Standardize colons in Print using printer dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 006bfabbdf Standardize colon and remove abbr. in Print dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 0e79538601 Standardize caps in position relative dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand e219ff0c2f Standardize colons pns settings dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 3d2e103374 Standardize colons pns length tune dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 3c00b2a2a8 Standardize colons plot dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand fbb8ccb9ad Standardize colons in pad properties dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 30d1db6b1f Standardize colons non-copper zones dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand 9b9345abba Standardize colons and wording in netlist dialog 2018-04-23 11:53:18 -07:00
Seth Hillbrand d562a7b26d Standardize colons modedit_options_base 2018-04-23 11:53:18 -07:00
Seth Hillbrand b834031425 Standardize colons layers_setup_base 2018-04-23 11:53:18 -07:00
Seth Hillbrand 9956ea20e7 Standardize colons layer_selection 2018-04-23 11:53:17 -07:00
Seth Hillbrand bc7ccab642 Standardize colons global footprint edit 2018-04-23 11:53:17 -07:00
Seth Hillbrand 0ed6751ebe Standardize colons global deletion 2018-04-23 11:53:17 -07:00
Seth Hillbrand 38dae061ce Standardize colon board editor options 2018-04-23 11:53:17 -07:00
Seth Hillbrand f96328afef Standardize colon gendrill_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 0b07f2ba9e Standardize colon and file/table in footprint lib dialog 2018-04-23 11:53:17 -07:00
Seth Hillbrand 65c3046fc9 Standardize colons for edit_footprint_text_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand f977d210ad Standardize colons for edit_footprint_for_fp_editor 2018-04-23 11:53:17 -07:00
Seth Hillbrand b9adcbdbe3 Standardize colons edit_footprint 2018-04-23 11:53:17 -07:00
Seth Hillbrand 8234cf721c Standardize colon drc_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 340b9fc2a5 Standardize colon display_options_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand a73cbe221a Standardize colong dimension editor base 2018-04-23 11:53:17 -07:00
Seth Hillbrand f55ad77da6 Standardize colon design_ruls_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 202e81eaa5 Standardize colon create_array_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 34fed2075a Standardize colon copper zones base 2018-04-23 11:53:17 -07:00
Seth Hillbrand 87f18665fc Standardize colon block_options_base 2018-04-23 11:53:17 -07:00
Seth Hillbrand c8d1e056f3 Standardize colon SVG_print_base 2018-04-23 11:53:17 -07:00
Jeff Young aa71d41a59 Calculate column widths based on actual text & fontsize.
Fixes: lp:1737361
* https://bugs.launchpad.net/kicad/+bug/1737361
2018-04-23 18:24:10 +01:00
Maciej Suminski 50588dcd1e Fix disabled 'save library' button in the symbol editor
With uninitialized COMPONENT_TREE::m_menuActive there were cases when
application logic erroneously decided to fetch the current library name
from the right click menu selection, even though there was no menu
opened, so an empty string was returned. Empty library name is
equivalent to no library loaded, therefore the save button appeared
disabled.

Fixes: lp:1765937
* https://bugs.launchpad.net/kicad/+bug/1765937
2018-04-23 15:29:26 +02:00
jean-pierre charras 2925b93571 Gerbview: Remove dead code that handled a experimental .gbrjob file, now no longer existing. 2018-04-23 13:04:21 +02:00
Maciej Suminski cfa9916836 Prevent issuing a print command before the previous one is finished
Fixes: lp:1765965
* https://bugs.launchpad.net/kicad/+bug/1765965
2018-04-23 11:25:28 +02:00
Maciej Suminski 3cc0554e33 Code formatting 2018-04-23 11:18:51 +02:00
Wayne Stambaugh 648803dcf7 Eeschema: fix missing part in part list bug in netlist exporter.
Use LIB_ID for LIB_PART_LESS_THAN comparison.  This prevents parts with
library name clashes from being dropped from the part list.
2018-04-22 16:33:34 -04:00
Wayne Stambaugh 41c1657eb6 Eeschema: fix bug in sheet path loading logic.
When a relative sheet path was not in the project path or a subfolder
within the project path, the schematic path would be empty.  Set the
base path to the project path when the schematic path is no within
the project path hierarchy.
2018-04-22 09:47:54 -04:00
jean-pierre charras 4202bb6af6 DIALOG_EDIT_COMPONENTS_LIBID: fix the minimal size (previous code to fix this size was not working) 2018-04-21 17:53:54 +02:00
jean-pierre charras e75762b1e3 Better wording 2018-04-21 16:31:41 +02:00
Wayne Stambaugh d776eaca83 Fix button sizer padding on symbol field edit dialog. 2018-04-20 19:19:13 -04:00
Maciej Suminski a93da4aba6 Restored wxPD_APP_MODAL flag for progress dialogs
The flag is required on Linux, otherwise applications hang right after a
progress dialog disappears.
2018-04-20 22:55:39 +02:00
Jeff Young 4302394990 Consistency between dialog titles and menu items.
... and between eeschema and pcbnew.

Also moved the Symbol & Footprint library table tabs to the top
so it's more clear what "by Scope" means.

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

Fixes: lp:1765516
* https://bugs.launchpad.net/kicad/+bug/1765516
2018-04-20 15:33:46 +01:00
Wayne Stambaugh fc8b852c41 Derive 3D model selection dialog from DIALOG_SHIM. 2018-04-20 10:15:05 -04:00
Maciej Suminski 5fb7f5a615 Fixed an assert in 3D shape download wizard 2018-04-20 14:23:53 +02:00
Maciej Suminski 86906b05e0 Fix 3D shape & footprint download wizards freeze on OSX
Fixes: lp:1758095
* https://bugs.launchpad.net/kicad/+bug/1758095
2018-04-20 12:36:34 +02:00
Maciej Suminski 554cb54a4f Eagle SCH import: save project file after the full path is set
Fixes: lp:1765297
* https://bugs.launchpad.net/kicad/+bug/1765297
2018-04-20 10:04:41 +02:00
Maciej Suminski 536529e48f Fixed unused captured variable warning 2018-04-20 08:44:41 +02:00
Jeff Young 5506efaee5 Add a SaveAndContinue button to the Fields Editor. 2018-04-19 23:13:19 +01:00
Jeff Young b9239d8728 Add defensive coding for column widths in Fields Editor. 2018-04-19 21:39:25 +01:00
Jeff Young 9201417c06 Handle new fields in global field editor.
Fixes: lp:1765443
* https://bugs.launchpad.net/kicad/+bug/1765443
2018-04-19 20:33:03 +01:00
Maciej Suminski f81c77cd4e Edit Tool: update the reference point for in-place modification
Fixes: lp:1765027
* https://bugs.launchpad.net/kicad/+bug/1765027
2018-04-19 17:10:06 +02:00
Maciej Suminski 1a5139b91f eeschema: renamed 'Symbol Table' to 'Fields Editor'
Fixes: lp:1765360
* https://bugs.launchpad.net/kicad/+bug/1765360
2018-04-19 16:26:17 +02:00
Maciej Suminski 0a58de0c46 Selection Tool: reset is-hover flag
Fixes: lp:1765034
* https://bugs.launchpad.net/kicad/+bug/1765034
2018-04-19 16:17:54 +02:00
Maciej Suminski dce0743ddb Removed nagging dialog in the delete tool. 2018-04-19 15:35:10 +02:00
Maciej Suminski e3a06dca70 Fallback to system ngspice library when libngspice is not found in other paths on macOS 2018-04-19 14:48:31 +02:00
Maciej Suminski 2865084ce8 Library Field editor: validate alias name before changing it
When LIB_ALIAS is renamed, it validates the new name. In case the name
typed in the field edit dialog is invalid, there was a discrepancy
between the name used further in the code and the actual alias name.

Fixes: lp:1765375
* https://bugs.launchpad.net/kicad/+bug/1765375
2018-04-19 14:47:34 +02:00
Maciej Suminski a695c995c7 pcbnew: fixed a warning regarding unused captured variables 2018-04-19 14:42:53 +02:00
Maciej Suminski 4526f40fe1 ngspice: add extra paths to search for libngspice
The main purpose of the patch is to load libngspice from macOS bundle.
There are also some additional paths that could make Windows developers
easier.

Fixes: lp:1630675
* https://bugs.launchpad.net/kicad/+bug/1630675
2018-04-19 11:43:29 +02:00
Maciej Suminski a8ef222517 ngspice: keep the ngspice DLL handle as an automatic variable 2018-04-19 11:44:48 +02:00
Maciej Suminski d3f23a62ec Bundle libngspice, code models and init scripts for macOS 2018-04-19 11:44:48 +02:00
Maciej Suminski c960d671cd Changed negative recursion level argument to positive
BEZIER_POLY::recursiveBezier() was called with negated 'level'
variable as an argument which is incorrect for an unsigned type.
2018-04-19 08:39:46 +02:00
Jeff Young e4feb315d5 Clean up some spacing issue with the Save button.
Also went back to using a smaller font for the status lines,
although this time using more system settings.
2018-04-18 22:26:18 +01:00
Jeff Young 442d1169a8 Adjust min sizes of Global Fields editor for Windows.
Also gets rid of a slew of unnecessary sizers in the dialog.
2018-04-18 20:37:20 +01:00
Simon Richter 7e47ef7471 Fix warnings for unreferenced local variables 2018-04-18 15:08:37 -04:00
jean-pierre charras 3179e40b57 Fix compil warning (perhaps 32 bit build specific) 2018-04-18 20:41:18 +02:00
Seth Hillbrand f68268c8ca Only update msgpanel when dimension started
Fixes: lp:1765118
* https://bugs.launchpad.net/kicad/+bug/1765118
2018-04-18 10:06:23 -07:00
Seth Hillbrand 7b3dc9c28d Fix tabs->spaces 2018-04-18 08:22:52 -07:00
Maciej Suminski 41ac458e79 Fixed SCH_LEGACY_PLUGIN_CACHE::saveBezier() 2018-04-18 09:36:22 +02:00
jean-pierre charras 90741a9d76 Cvpcb: allows more room to display messages to avoid long strings to overlap buttons 2018-04-18 09:25:33 +02:00
Jean-Samuel Reynaud ad0deb16a2 Fix pcbnew: refresh canvas on opening a file only after mouse move
Fixes: lp:1760819
* https://bugs.launchpad.net/kicad/+bug/1760819
2018-04-18 09:01:13 +02:00
Seth Hillbrand 794e8d8a04 Moving IsOk dialogs to correct parents 2018-04-17 17:27:15 -07:00
Seth Hillbrand 626c8a71f7 Reworking sheet duplication messages and annotation
The messages on sheet duplication are changed to reflect the action
perceived by the user when accepting/rejecting the change.

Annotation is also reset for duplicating sheets where maintaining
existing annotation would conflict with existing sheets.
2018-04-17 17:12:51 -07:00
Seth Hillbrand fdd3f52e2d Move debug msg to relevant section 2018-04-17 17:12:29 -07:00
Jeff Young db2cda7271 Fix some merge issues. 2018-04-17 20:26:50 +01:00
Seth Hillbrand 2d5da8b04f Fix assert when removing CurPart
Fixes: lp:1762099
* https://bugs.launchpad.net/kicad/+bug/1762099
2018-04-17 12:20:01 -07:00
Seth Hillbrand 853f73e6b7 Prevent duplicate sheetnames when using mouse copy 2018-04-17 12:01:03 -07:00
Seth Hillbrand ca544eb138 Adding radius info to panel for arcs/circles 2018-04-17 11:21:34 -07:00
Seth Hillbrand 6d855cbccb Remove extraneous assert
Fixes: lp:1764619
* https://bugs.launchpad.net/kicad/+bug/1764619
2018-04-17 10:53:27 -07:00
jean-pierre charras 854cb70052 Fix compil issue with gcc 4.8 on Ubuntu 2018-04-17 19:35:26 +02:00
Jeff Young 3be876c388 Cleanup of trace logs from Simon Richter. 2018-04-17 17:27:18 +01:00
Seth Hillbrand 45d1c19eb7 Add tooltip text to drag options. 2018-04-17 08:59:52 -07:00
jean-pierre charras 0294e41cbc fix minor compil warnings (about signed/unsigned comparison) 2018-04-17 16:08:12 +02:00
Jeff Young e84e5606c9 Fix compiler warning. 2018-04-17 15:06:38 +01:00
Jeff Young 000457db7c Move Fields Editor to wxGrid.
Makes in-place editing much easier and fixes some other issues
(see bug reports).

Fixed sorting bugs in References and added better sorting for
Values.

Removed Description column as it wasn't editable and caused more
confusion than value.

Removed auto-column-width after initial render.

Re-implemented undo/redo.

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

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

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

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

Fixes: lp:1761378
* https://bugs.launchpad.net/kicad/+bug/1761378
2018-04-17 11:39:44 +01:00
jean-pierre charras 268aeeb18f Pcbnew: More explicit tool tip in right vertical toolbar (place auxiliary axis origin tool). 2018-04-17 10:06:11 +02:00
jean-pierre charras 9865fcd929 3D viewer: fix hotkeys in 3D preview panel, and incorrect icons in context menu. 2018-04-17 09:59:21 +02:00
Seth Hillbrand b46fc7fe9c Adding option for Cmake-based DISTCC/CCACHE 2018-04-16 16:28:15 -07:00
Jeff Young 12ec56bc15 Prevent reentrancy in footprint loading.
Also removes parallel implementation in favour of using the
normal one (with a new wxGauge-backed PROGRESS_REPORTER).

Fixes: lp:1764196
* https://bugs.launchpad.net/kicad/+bug/1764196
2018-04-16 23:19:08 +01:00
jean-pierre charras 2974a2c10a Eeschema: fix broken generation of the project library cache.
Because the cache is broken, the rescue library was never created after missing library or change in lib.

This was due to the fact the symbol name inside the cache is broken, since commit a5844c9,
because all illegal chars in symbol name are replaced by '_'.
Unfortunately, in library cache, the ':' (illegal in usual libraries) is used to build the cached symbol name.
so in lib cache, symbol names were broken, making this lib useless.

this fix allows the ':' char in symbol name in lib.

Fixes: lp:1764166
https://bugs.launchpad.net/kicad/+bug/1764166
2018-04-16 10:58:28 +02:00
jean-pierre charras d2cf2fe61c Eeschema, fix issue when rotating a hierarchical sheet: depending on the sheet size, the rotation center was not always on grid.
Therefore, in this case, pin sheets were no longer on grid.

Fixes: lp:1764270
https://bugs.launchpad.net/kicad/+bug/1764270
2018-04-16 10:39:34 +02:00
jean-pierre charras 8fcdc4f6c3 3D viewer: fixes about hotkeys and menubar.
Move code to specific files 3d_menubar.cpp and hotkeys.cpp like in other tools.
2018-04-15 14:07:33 +02:00
jean-pierre charras 3e64c9de38 Fix incorrect behavior of ReplaceIllegalFileNameChars( wxString& aName, int aReplaceChar ) for non ASCII8 chars.
(this function was using a comparison using chars to test wide chars)

Fixes: lp:1764055
https://bugs.launchpad.net/kicad/+bug/1764055
2018-04-15 10:06:53 +02:00
jean-pierre charras 9203e397fe List hotkeys: Use the new Ctrl+F1 key in page layout editor, like in other editors 2018-04-14 19:05:24 +02:00
jean-pierre charras 07dc12fdd3 Fix incorrect UI management of Zoom to Selection, created by fix 2a419156 2018-04-14 17:44:17 +02:00
jean-pierre charras e9ef555c6a Use Ctrl+F1 to display hotkey list also in Gerbview and Kicad manager 2018-04-14 17:12:28 +02:00
jean-pierre charras 4a254ee7f3 Eeschema, schematic file save issue: fix missing switch to C locale before saving files
The scale factor of bitmap images was incorrectly saved in countries using a comma as floating point separator

Fixes: lp:1763726
https://bugs.launchpad.net/kicad/+bug/1763726
2018-04-14 16:59:17 +02:00
Wayne Stambaugh 9b5bbd7c77 Fix wxFileDialog assertion when worksheet file has absolute path.
Fixes lp: 1763887

https://bugs.launchpad.net/kicad/+bug/1763887
2018-04-14 10:51:15 -04:00
Wayne Stambaugh a1acec5f13 Revert broken hotkey fix.
The hotkey fix committed in 53b1ec81 broke non-us keyboards.  Change the
hotkey help hotkey from '?' to Ctrl+F1 to prevent the hotkey list dialog
from being shown when placing a bus wire junction in Eeschema and when
changing the track posture in Pcbnew.  This is still broken in the GAL
framework.
2018-04-14 08:24:25 -04:00
Jeff Young 2a419156e0 Don't try to check uncheckable menu items.
When updating toolbars make sure the events are coming from the
toolbar in question (and not the menus which share the same ID).

Fixes: lp:1763563
* https://bugs.launchpad.net/kicad/+bug/1763563
2018-04-13 21:42:31 +01:00
Wayne Stambaugh 81843c37a4 Organize trace debugging code for ease of maintenance. 2018-04-13 09:59:01 -04:00
Ievgenii Meshcheriakov 89bf02adb7 Define GLM_FORCE_CTOR_INIT during build
This ensures that GLM objects are still initialized correctly when new
version of this library are used (after 0.9.9-a2).

This also fixes display corruption in 3D-viewer with Raytracer.

Fixes: lp:1762379
* https://bugs.launchpad.net/kicad/+bug/1762379
2018-04-13 14:45:16 +02:00
Maciej Suminski 0e151687e3 Fixed a typo 2018-04-13 14:24:57 +02:00
Maciej Suminski a41b2d6803 Fix names of added aliases 2018-04-13 14:24:57 +02:00
Maciej Suminski b907fb856d Fix names of libraries added to symbol/footprint library tables 2018-04-13 14:24:57 +02:00
Maciej Suminski 3f734eb1b5 Improved validation of library and entry names
Symbol/footprint library and entry have the same set of forbidden
characters with a single exception, space character. To accommodate for
this difference, LIB_ID validation and fix methods have been extended to
specify the LIB_ID type that is checked (schematic/board).

LIB_ID::HasIllegalChars() and LIB_ID::FixIllegalChars() had two different
sets of characters treated as invalid in LIB_IDs. The set has been
factored out to another function to avoid duplication.
2018-04-13 14:24:57 +02:00
Maciej Suminski 862fb430e7 eeschema: Fixed setting unit condition in the component properties dialog 2018-04-13 14:24:57 +02:00
jean-pierre charras e57435c0fc Fix compil issue (created by commit "Added std::less specialization for wxPoint") with wxWidgets 3.1.1 2018-04-13 11:06:46 +02:00
Seth Hillbrand 1663627135 Update msg panel on create/modify graphic items
This clears the msg panel when not editing an item and updates the
position information when moving
2018-04-12 10:07:24 -07:00
Seth Hillbrand 0f3fc4b6eb Avoid doubling-up std namespace 2018-04-12 09:38:45 -07:00
Tomasz Włostowski 4e99b0d0e7 pcbnew: refresh message panel while drawing & editing graphical lines, arcs, circles and texts
Fixes: lp:1763052
* https://bugs.launchpad.net/kicad/+bug/1763052
2018-04-12 18:23:33 +02:00
Maciej Suminski 58c27398cb Eagle SCH import: improved implicit connections resolution
Nets assigned by power pins are weak, meaning they are valid
as long as there is nothing else attached to such pins. This patch
checks whether there are other wires or pins attached to a power pin
before placing a global net label.

Fixes: lp:1755191
* https://bugs.launchpad.net/kicad/+bug/1755191
2018-04-12 18:12:22 +02:00
Maciej Suminski b766dbc7a4 Added std::less specialization for wxPoint
Requried to use wxPoint as key type in maps
2018-04-12 18:09:18 +02:00
Maciej Suminski f42ca89bb4 cvpcb: Overridden SetStatusText() to use m_statusLine{1,2}
Fixes: lp:1763267
* https://bugs.launchpad.net/kicad/+bug/1763267
2018-04-12 13:02:46 +02:00
Maciej Suminski df8bc93e4b gerbview: Removed duplicate zoom-to-selection handler, made the toolbar button checkable
Fixes: lp:1763270
* https://bugs.launchpad.net/kicad/+bug/1763270
2018-04-12 11:52:08 +02:00
jean-pierre charras c421840a9e Cvpcb: avoid crash on start if _pcbnew.kiface (needed by cvpcb) is not found. 2018-04-12 11:07:43 +02:00
Maciej Suminski 0d8692da20 Changed ACTION_MANAGER assert() calls to wxASSERT()
wxASSERT(), contrary to assert() does not terminate the program when
triggered. As assertions in ACTION_MANAGER are not critical and should be
treated as warnings - there is no need to close the program.
2018-04-12 08:47:09 +02:00
Seth Hillbrand 86f744a1fd Adding initialization to GLM vectors 2018-04-11 10:59:28 -07:00
Ievgenii Meshcheriakov 18b0b78397 Correctly initialize module matrices in raytracer
Initialize module matrices to identity matrices instead of default zero
matrices while creating scenes for raytracer. This fixes disappearing
modules in raytracer view.

Fixes: lp:1763026
* https://bugs.launchpad.net/kicad/+bug/1763026
2018-04-11 10:06:36 -07:00
jean-pierre charras c1ae2fd0a8 Typo 2018-04-10 20:27:54 +02:00
jean-pierre charras 4f3b77347a DIALOG_ENV_VAR_CONFIG: allows using lowercase chars when typing an env var name. these lowercase chars are converted to uppercase on the fly.
Previously, lowercase chars were not accepted, and nothing was displayed when trying to type a name in lowercase chars.
2018-04-10 20:23:49 +02:00
jean-pierre charras 9ea360f168 Pcbnew: avoid useless validation dialog about modifications when closing pcbnew or opening a file, when the initial board is empty.
Some changes (enable/disable a layer) set the dirty bit even for empty boards.
So when closing pcbnew, the dialog asking for saving the board was shown, even when no board loaded.
2018-04-10 20:17:47 +02:00
Jeff Young 5ef715f3d3 Scan all items when looking for the weak reference.
... not just those directly in the draw list.

Fixes: lp:1747037
* https://bugs.launchpad.net/kicad/+bug/1747037
2018-04-09 21:19:11 +01:00
Jeff Young 84151990cd Don't set dirty bit when adding MARKERs.
They're not saved in the file, so they shouldn't dirty it.

Fixes: lp:1762497
* https://bugs.launchpad.net/kicad/+bug/1762497
2018-04-09 21:19:11 +01:00
jean-pierre charras cb134fd065 Update demos 2018-04-09 19:37:17 +02:00
jean-pierre charras 20c30a4425 3D viewer: Cosmetic enhancement in DIALOG_3D_VIEW_OPTIONS. 2018-04-09 19:37:17 +02:00
Jeff Young f83ebb316e Don't refill if zone fills aren't out-of-date. 2018-04-09 17:04:51 +01:00
Jeff Young 05dae96275 Move zone out-of-date check to the right place.
Fixes: lp:1760097
* https://bugs.launchpad.net/kicad/+bug/1760097
2018-04-09 15:09:47 +01:00
Maciej Suminski 4b0d477c76 Symbol Editor: handle delete hotkey in block edit mode 2018-04-09 14:04:06 +02:00
Maciej Suminski 9bd6d5e97c Fix mirror X/Y hotkeys in the Symbol Editor
Fixes: lp:1762136
* https://bugs.launchpad.net/kicad/+bug/1762136
2018-04-09 13:40:42 +02:00
Jeff Young 900bf0c7a6 Allow connections to no-net items in Highlight Collisions mode.
If the track being routed is unconnected, or the end-point
clicked on is unconnected, allow the connection by changing
the unconnected item to the net of the connected one.

Fixes: lp:1548129
* https://bugs.launchpad.net/kicad/+bug/1548129
2018-04-09 11:05:14 +01:00
Jeff Young a597ebc85e Break a track when placing a via on it.
Fixes: lp:1737349
* https://bugs.launchpad.net/kicad/+bug/1737349
2018-04-09 11:05:14 +01:00
Jeff Young d54a252eaa Check zone fills for being out-of-date during DRC. 2018-04-09 11:05:14 +01:00
jean-pierre charras 9f5316e38f Remove code related to Gerber job file old format writer, as this format does not exist now.
This old format is now officially replaced by a JSON syntax.
2018-04-09 09:26:01 +02:00
Carsten Schoenert a11714b1a4 fix misspelled 'an other' -> 'another' 2018-04-08 13:24:37 -04:00
Carsten Schoenert 77b3a662fc fix misspelled 'Allows to' -> 'Allows one to' 2018-04-08 13:24:30 -04:00
Carsten Schoenert 1f32f7c55b fix misspelled 'allows to' -> 'allows one to' 2018-04-08 13:24:18 -04:00
Mario Hros efa2a13eaa Don't install Python shell when wxPython support is disabled.
Fixes lp:1760200

https://bugs.launchpad.net/kicad/+bug/1760200
2018-04-08 13:20:49 -04:00
Maciej Suminski cb2c447c23 Spice Simulator: add close buttons to plot tabs
Fixes: lp:1761902
* https://bugs.launchpad.net/kicad/+bug/1761902
2018-04-07 22:53:50 +02:00
jean-pierre charras 7f6e26e55a DrawGraphicText: remove a static variable, and replace it (when needed) by a new parameter in argument list.
It make this function thread-safe (as far as wxString is thread-safe)
2018-04-07 19:57:26 +02:00
Jeff Young baef22df9a Fix memory leak and push menu change to other apps.
Fixes: lp:1761848
* https://bugs.launchpad.net/kicad/+bug/1761848
2018-04-07 14:14:55 +01:00
Jeff Young 0bd5cc4470 Borrow LTSpice's unconnected net nomenclature.
Using an unqualified "?" results in all the unconnected pins
being connected to each other.

Fixes: lp:1720619
* https://bugs.launchpad.net/kicad/+bug/1720619
2018-04-07 11:01:56 +01:00
Jeff Young be4d7987d3 Rebuild apple menu along with others when language changes.
Fixes: lp:1761848
* https://bugs.launchpad.net/kicad/+bug/1761848
2018-04-07 11:01:56 +01:00
jean-pierre charras 2bfbff104e Very minor fix: remove a trailing space in string. Mainly to help translations. 2018-04-06 20:12:33 +02:00
jean-pierre charras b9b8d14eb9 Update tools_to_build_newstroke-font files to V5 2018-04-06 20:09:32 +02:00
Jeff Young 0dc719ca1a Update 3D view immediately when user changes parameters.
The ray-tracer runs in the background so you can still change
other settings while it's redrawing.

Fixes: lp:1612419
* https://bugs.launchpad.net/kicad/+bug/1612419
2018-04-06 17:03:00 +01:00
Maciej Suminski e7ed415930 Eagle SCH import: handle implicit connections
Each named power input pin in Eagle creates an implicit connection to a
net with the name of the pin (e.g. GND, VCC). It is also done for the
units (gates in Eagle nomenclature) that have not been instantiated in
the schematics.

To emulate this behaviour in KiCad:
- Placed components are checked for power input pins, so they will have
global net labels attached to create the described implicit connections.
- As the components are placed, the remaining units of the symbol are
checked for power inputs to see if they need to be instantiated together
with global net labels.

Fixes: lp:1755191
* https://bugs.launchpad.net/kicad/+bug/1755191
2018-04-06 16:20:59 +02:00
Maciej Suminski 78c9b34b5d Eagle SCH import: moved sheet bbox calculation to a function 2018-04-06 16:02:58 +02:00
Maciej Suminski 9ee698bbcd Eagle SCH import: save the imported library file once the library section is processed
It is required to access symbol data in later import stages.
2018-04-06 16:02:18 +02:00
Kristoffer Ödmark fdb6bbab7b Footprint Wizard now also handles custom Env paths 2018-04-06 14:51:09 +01:00
Jeff Young 591a303777 Make ERC options dialog clearer.
Fixes: lp:1667600
* https://bugs.launchpad.net/kicad/+bug/1667600
2018-04-06 14:51:09 +01:00
Tomasz Włostowski 15c64ee92d pcbnew: CONNECTIVITY_ALGO should always mark newly added nets as dirty
Fixes: lp:1761698
* https://bugs.launchpad.net/kicad/+bug/1761698
2018-04-06 14:57:27 +02:00
Jeff Young 24b8768f43 Fix missing include. 2018-04-06 11:39:35 +01:00
Jeff Young db73daa09c Workaround for wxString's lack of thread safety. 2018-04-06 11:26:59 +01:00
Jeff Young 611d5a0dc4 Standardize "assign footprints" terminology.
Fixes: lp:1760867
* https://bugs.launchpad.net/kicad/+bug/1760867
2018-04-06 11:26:59 +01:00
Maciej Suminski 94dbcc7199 Fixed crash after multiple 'cut' commands in the footprint editor
When multiple cut commands were issued, the cut command handler would
restart multiple times and keep running until the handler that was
invoked first finishes. As all handlers kept a selection copy, they
would try to save the deleted items to the clipboard resulting in a
crash.

Fixes: lp:1761221
* https://bugs.launchpad.net/kicad/+bug/1761221
2018-04-05 00:26:57 +02:00
Seth Hillbrand 6fb47faebd Workaround for IGES import bug in OCE-0.18
This changes the IGES import parameter precision to be file-defined
instead of hard-coded in KiCad.  OCE-0.18 does not handle faces with
a set of points whose approximation creates a single point.

By allowing the file to set the precision level, we leave it to the
generating program to create a file with non-degenerate faces.

Fixes: lp:1738872
* https://bugs.launchpad.net/kicad/+bug/1738872
2018-04-04 13:03:34 -07:00
Seth Hillbrand d1af5210e0 Libedit: Fix a few places where item could be NULL
Fixes: lp:1761058
* https://bugs.launchpad.net/kicad/+bug/1761058
2018-04-04 10:20:15 -07:00
Seth Hillbrand bbb513e2e5 Ensure that we are drawing holes and outlines
Set hole colors in output to non-transparent values.
Ensure holes are traced when drawing drill marks.

Fixes: lp:1646482
* https://bugs.launchpad.net/kicad/+bug/1646482
2018-04-04 10:20:15 -07:00
jean-pierre charras 906b389fab fp editor: minor cosmetic fix in main menu. 2018-04-04 17:40:42 +02:00
Wayne Stambaugh 696ff81dc7 Load correct schematic page layout description file in stand alone mode.
Fixes lp:1678849

https://bugs.launchpad.net/kicad/+bug/1678849
2018-04-04 10:18:12 -04:00
Jeff Young df43f071e1 Keep track of open sockets and dispose of them in d'tor.
Fixes: lp:1760936
* https://bugs.launchpad.net/kicad/+bug/1760936
2018-04-04 12:02:40 +01:00
Jeff Young 5e36fe8df7 Move timestamp setting where it will alwasy get set.
Also update the rest of the symbol-chooser usage to current
specs, including examining the timestamp to see if the list
needs loading at all.

Partial fix to: lp:1760936
* https://bugs.launchpad.net/kicad/+bug/1760936
2018-04-04 12:02:40 +01:00
jean-pierre charras 70988271c1 WX_TEXT_ENTRY_DIALOG: fix a wxASSERT ( very minor issue in debug mode) 2018-04-04 10:40:27 +02:00
Maciej Suminski 8b21a0a53d Changed PCB_BASE_FRAME::CreateNewModule() to stop adding modules to the board
When a new footprint is created, CreateNewModule() added it to a dummy
board in the footprint editor. If a footprint was indeed created (the
action has not been aborted) then the dummy board was cleared,
destroying the just created footprint. Also, the new footprint is later
added with AddModuleToBoard() call.

Fixes: lp:1761052
* https://bugs.launchpad.net/kicad/+bug/1761052
2018-04-04 09:34:12 +02:00
Jeff Young 2e4f50f206 Make sure segments read from file are in correct order.
Fixes: lp:1752033
* https://bugs.launchpad.net/kicad/+bug/1752033
2018-04-03 22:01:34 +01:00
Maciej Suminski 7943372e8b Refill zones only when required
Previous implementation refilled zones every time they have been
unselected. This patch adds a flag that tracks whether the
zone has been actually modified, so it will be refilled only when
necessary.

Fixes: lp:1760903
* https://bugs.launchpad.net/kicad/+bug/1760903
2018-04-03 22:28:05 +02:00
jean-pierre charras a2f118d2fa Gerbview: fix not working menu item "Zoom to Selection" in main menu. This also fixes a wxASSERT for this menu item 2018-04-03 16:30:16 +02:00
Maciej Suminski 71bf488507 Eagle SCH importer: fixed open-collector pin type, simplified pin direction matching 2018-04-03 14:26:15 +02:00
Maciej Suminski 6d06ed3579 Eagle SCH importer: minor fixes
- set correct reference for components
- handle "pwr" direction for pins
- discarded a redundant variable
2018-04-03 14:26:15 +02:00
jean-pierre charras f8a3ec4974 Add a method to facilitate Tools handling in main frame toolbars.
Fix also a bug in gerbview_frame.cpp, about a broken toolbar accessor (fortunately not used in current code)
2018-04-03 13:00:20 +02:00
jean-pierre charras c867de53b8 Page layout editor: fix a wxASSERT when trying to open view menu from the main menubar.
This is due to the fact the same ID was used for a menuitem in menubar, and a tool in toolbars.
2018-04-03 09:31:52 +02:00
Wayne Stambaugh 747e14f9e1 Fix broken link in compiling.md. 2018-04-02 18:27:37 -04:00
Wayne Stambaugh 4b2ced341e Fix button sizer padding in WX_TEXT_ENTRY_DIALOG. 2018-04-02 18:05:37 -04:00
Wayne Stambaugh 53b1ec8146 Fix track posture hotkey bug on windows.
The change track posture hotkey '/' was getting interpreted as the show
hotkey list shortcut '?' on windows.  This fix is temporary hack to fix
the problem which much more involved than the simple #ifdef/#endif used
to fix this issue.

Add key code tracing to help analyze key codes for future development.
2018-04-02 18:05:37 -04:00
Jeff Young d391489596 Don't clear old footprint till after user has hit OK.
Fixes: lp:1759190
* https://bugs.launchpad.net/kicad/+bug/1759190
2018-04-02 22:32:09 +01:00
Jeff Young f4c972db5e Name the Get and Move Footprint dialog to match the command.
Fixes: lp:1760635
* https://bugs.launchpad.net/kicad/+bug/1760635
2018-04-02 20:16:26 +01:00
Russell Oliver 89381e1103 Eagle Import: Correct layer set based on cream setting and rotate rectangles
Fixes: lp:1758747
* https://bugs.launchpad.net/kicad/+bug/1758747
2018-04-02 10:59:54 -07:00
Seth Hillbrand ee05b1c92e Add polygon arc support to Eagle import 2018-04-02 10:49:43 -07:00
Seth Hillbrand 532bf09817 Don't save broken polygon
If a polygon has fewer than 3 points, it is invalid.  We need to
register this as failure, otherwise we save the formatting/closing
s-expr for the polygon without the actual polygon points. This breaks
the footprint and board.
2018-04-02 10:18:10 -07:00
Maciej Suminski dd56f16776 Fix symbol editor crash when modifying fields while a field is selected
Field Editor dialog calls LIB_EDIT::SetFields() that deletes the old
LIB_FIELD objects and creates new ones. If any of the old LIB_FIELD
objects had been selected before invoking the dialog, then one of the
update UI event handlers will crash trying to access the object.
2018-04-02 17:51:11 +02:00
jean-pierre charras 0171547154 Context menu: use same message for Zoom and Grid in Legacy mode and GAL mode.
a minor cosmetic other fix in Eeschema, edit submenu.
2018-04-01 21:09:52 +02:00
jean-pierre charras e750417fa0 Eeschema: fix many wxASSERT when trying to open menus from the main menubar.
This is due to the fact the same ID was used for menuitems in menubar,
and tools in toobars.
Especially, some items were not compatible due to different attributes.

Windows does not accept the same ID for 2 items inside the same frame.
It creates issues (items not shown, Asserts, ...)
2018-04-01 20:58:27 +02:00
jean-pierre charras 54f14b08ca commit forgotten change in my previous commit 2018-03-31 18:46:29 +02:00
jean-pierre charras fa39acfc2f Gerbview, export to pcbnew : export polygons as new DRAWSEGMENT polygonal shape.
It can creates issues on copper layers, but the only one other alternative is to ignore polygons in export,
and this is worst.
2018-03-31 18:43:12 +02:00
jean-pierre charras 5b8c35f64d Gerbview: minor fix: do not report error if in header INCH ot METRIC command has no parameter (,LZ or ,TZ format)
I am not sure it should be reported, because LZ or TZ format has no meaning in decimal format, and can be omitted.
2018-03-31 18:40:29 +02:00
jean-pierre charras 62c5a706d5 DIALOG_GRAPHIC_ITEM_PROPERTIES: fix a not very understandable error message (especially when Dwgs.User layer is disabled).
Rename the method PCB_LAYER_BOX_SELECTOR::SetLayerSet to the better name SetNotAllowedLayerSet
2018-03-31 10:46:52 +02:00
Jon Evans b813eac254 Omit unnecessary scripts directory from MacOS build output 2018-03-30 22:56:51 -04:00
Jon Evans e3d9a23867 Properly escape urls passed to wxLaunchDefaultBrowser() 2018-03-30 22:02:13 -04:00
Seth Hillbrand 62fe78f08c Eeschema: Simplify GetItem
Avoids calling HitTest on each item when it is not needed
2018-03-30 17:26:34 -07:00
Seth Hillbrand 8bb9084ea9 Revise TestSegmentHit to catch missing hits
Fixes issue where TestSegmentHit falsely skips segments that are
slightly off 45°. Improves speed of function by exiting on non-hits
more quickly. Simplifies function and removes magic numbers.
2018-03-30 17:26:34 -07:00
Seth Hillbrand 7d3d9f7188 Wrapping left-over debug printf() in DBG() 2018-03-30 16:17:29 -07:00
Seth Hillbrand 2e0b75c058 Remove internal CheckCXXSymbolExists
Since Cmake 2.8.6, Cmake provides this macro.  Our use references
internal Cmake variables that have changes in Cmake 3.11.
2018-03-30 14:47:16 -07:00
Maciej Suminski 7483a73a5f Set OK button as the default one in WX_TEXT_ENTRY_DIALOG
Enables accepting the input by pressing the Return key.
2018-03-30 15:29:48 +02:00
Jon Evans b8c282fa6f Don't complain about perfectly-closed polygons as self-intersecting 2018-03-29 22:20:00 -04:00
Jon Evans 081c77f6bd OPENGL_GAL::DrawSegment(): Enforce nonzero width to match Cairo
Fixes: lp:1759958
* https://bugs.launchpad.net/kicad/+bug/1759958
2018-03-29 22:13:46 -04:00
Jon Evans 1ec217d70e Fix hit testing for zero-width gerber items 2018-03-29 22:04:51 -04:00
Seth Hillbrand 7c70e969db Prevent warning when renaming sheet name
Renaming a subsheet but keeping the filename should not present a
warning to the user.  The was triggered due to comparing a
fully-qualified filename to a relative filename.

Fixes: lp:1744475
* https://bugs.launchpad.net/kicad/+bug/1744475
2018-03-29 13:51:02 -07:00
Seth Hillbrand 4917540069 Clarify timestamp type for wxDateTime 2018-03-29 09:29:05 -07:00
Maciej Suminski eb9099238a Eagle SCH import: Improved net label placement algorithm
Eagle support net labels that are naming wires not directly connected to
the labels. In KiCad it is not possible, therefore such detached net
labels need to be moved, so they touch the corresponding wire.

The initial algorithm did not take into account that a moved net label
might be placed on a wire crossing, effectively shorting two nets. This
commit improves the placement algorithm by avoiding the wire crossing
points when placing a label.

Fixes: lp:1748502
* https://bugs.launchpad.net/kicad/+bug/1748502
2018-03-29 12:16:11 +02:00
Maciej Suminski 88915f7940 SCH_EAGLE_PLUGIN::addBusEntries(): prevent operating on deleted objects 2018-03-29 12:11:36 +02:00
Maciej Suminski 168112cf84 SEG: added Center() method 2018-03-29 12:11:35 +02:00
Maciej Suminski 99e79c077a Eagle SCH import: Code formatting 2018-03-29 12:11:35 +02:00
jean-pierre charras 0f0d9afa66 Pcbnew, legacy mode: fix ratsnest display artifacts when finishing or removing a track 2018-03-29 09:28:41 +02:00
Seth Hillbrand d1ab62fb4d pcbnew: Save only edited footprint when saving
Don't re-save all files in a library when editing a single footprint.
This creates issues with formatting in version control systems where
unmodified files are re-written without being explicitly changed by the
user.

Fixes: lp:1752991
* https://bugs.launchpad.net/kicad/+bug/1752991
2018-03-28 14:42:32 -07:00
Jon Evans ed99251f0b Add explicit file:// URI scheme for html help files
This fixes the help location on MacOS
2018-03-28 17:18:15 -04:00
jean-pierre charras 6740a37632 move and swap layers: make changes undoable.
minor code cleanup.
2018-03-28 15:30:11 +02:00
jean-pierre charras 6a4d14bade Fix cosmetic issues in dialog. Use move instead of swap in dialog, to avoid mistakes, as the dialog allows moving objects between layers, and do not really swap layers. 2018-03-28 12:45:54 +02:00
Seth Hillbrand 952aa7a1a6 Removing the last of time_t and fixing downcast corner bug in collector 2018-03-27 16:52:06 -07:00
jean-pierre charras ffa454d6f9 class MODULE: use timestamp_t instead of time_t in SetLastEditTime and GetLastEditTime, like in all other methods using a time stamp. 2018-03-27 20:43:52 +02:00
jean-pierre charras 2edc675eaf DIALOG_LAYERS_SETUP: force 4 non copper layers to be always in use.
edge cut, courtyard and margin layers are (or can be) used in DRC.
So they are seen as mandatory, and the dialog always force them active.
2018-03-27 20:26:48 +02:00
Seth Hillbrand 545e6bbd0c Defining time_t for Python
Fixes: lp:1732738
* https://bugs.launchpad.net/kicad/+bug/1732738
2018-03-27 09:43:23 -07:00
jean-pierre charras 78161b5922 Layers setup management: Warn user if some removed layers are in use in footprints loaded on the board.
Fix also memory leak and missing connectivity rebuild.
2018-03-27 13:44:59 +02:00
jean-pierre charras 602d9e1972 Fix a missing init in gerber plot script demo.
Fixes: lp:1759071
https://bugs.launchpad.net/kicad/+bug/1759071
2018-03-27 13:42:51 +02:00
Jon Evans 0ded476f9d Add a hotkey to control net highlighting
Fixes: lp:1757446
* https://bugs.launchpad.net/kicad/+bug/1757446
2018-03-26 23:09:44 -04:00
Seth Hillbrand 9472444b41 Fix minor rounding error in curved wire import 2018-03-26 15:18:47 -07:00
Seth Hillbrand ced0fcee1e Updating Eagle Importer to take curved zones
Fixes: lp:1755879
* https://bugs.launchpad.net/kicad/+bug/1755879
2018-03-26 15:09:56 -07:00
Maciej Suminski 886dc48cc4 Point Editor: reset the pointer to the modified point as it becomes invalid
Fixes: lp:1759024
* https://bugs.launchpad.net/kicad/+bug/1759024
2018-03-27 00:03:48 +02:00
Jeff Young 8b94606fb5 Promote selection up context menu hierarchy.
This is so that tools checking for a selected item won't think
the menu has been cancelled if the selection was in a submenu.

Fixes: lp:1758372
* https://bugs.launchpad.net/kicad/+bug/1758372
2018-03-26 20:35:49 +01:00
Jeff Young 778a3a4777 Count pins instead of using netcount as a proxy.
Fixes: lp:1703155
* https://bugs.launchpad.net/kicad/+bug/1703155
2018-03-26 19:57:08 +01:00
Tomasz Włostowski ca4e4aead4 router: don't push vias if push force is zero
Fixes: lp:1758540
* https://bugs.launchpad.net/kicad/+bug/1758540
2018-03-26 20:13:32 +02:00
Seth Hillbrand 347f6daddc Eagle Converter: Adjust arcs to use error-based alg
Implements the revised, difference-error based algorithm in the Eagle
arc import rather than using the hard-coded 32-segments/360°
2018-03-26 10:39:23 -07:00
Jon Evans 1dd4af2972 Sort VIEW_GROUP drawing by layer order
Fixes: lp:1757146
* https://bugs.launchpad.net/kicad/+bug/1757146
2018-03-26 10:18:50 -04:00
jean-pierre charras 1cd64778d6 fix a minor compil warning. 2018-03-26 08:24:09 +02:00
Jon Evans a8b1c2a8f2 Change dimension style to improve display and be more standard 2018-03-25 21:50:57 -04:00
Jeff Young b3e3964787 Fix Linux crash opening CvPcb. 2018-03-26 00:52:02 +01:00
Jeff Young ba49bd0386 Allow XLS netlist exporters to specify a file extension.
Fixes: lp:1591779
* https://bugs.launchpad.net/kicad/+bug/1591779
2018-03-26 00:51:54 +01:00
Wayne Stambaugh c8c5b5da07 Fix zoom to selection in bug in gal canvas. 2018-03-25 16:12:56 -04:00
Jeff Young a763435b59 Change zone segment count to high/low res. 2018-03-25 20:20:51 +01:00
Jeff Young f4ce8766e3 Implement shared FOOTPRINT_LIST.
While we already cache the loaded footprint files, parsing said files
into the list is also time-intensive.  Since the FOOTPRINT_LIST is
already hash-stamped against the current timestamps of the files that
make up the list, sharing a single copy of the list is quite
straight-forward.
2018-03-25 19:21:28 +01:00
Jeff Young b24b0d5dfe Dialog-ize CvPcb and implement proper Save.
Save now goes to disk (instead of just the in-memory schemaitc),
and the UI attempts to make this clear.
2018-03-25 19:21:27 +01:00
Wayne Stambaugh 8d8c422a19 Add zoom to selection menu entry to all editors.
Fixes lp:1753339

https://bugs.launchpad.net/kicad/+bug/1753339
2018-03-25 12:34:19 -04:00
jean-pierre charras 33f795be4f Make call to Inkscape (to convert .svg files to .png files) compatible with OSX version of Inkscape 2018-03-25 16:38:45 +02:00
Jon Evans c6e6134ebd Set appropriate parent for new directory checkbox
Fixes: lp:1754731
* https://bugs.launchpad.net/kicad/+bug/1754731
2018-03-25 10:25:40 -04:00
Jon Evans bfe9eff878 Don't use wxTE_RICH in label editing dialog
Fixes: lp:1742296
* https://bugs.launchpad.net/kicad/+bug/1742296
2018-03-24 22:31:34 -04:00
Jon Evans 6b51cc33da Set appropriate parent for 3D library downloader progress dialog
Fixes: lp:1758095
* https://bugs.launchpad.net/kicad/+bug/1758095
2018-03-24 21:08:35 -04:00
Maciej Suminski 4b5ca0ec14 Drawing tool: prevent creating zero-length lines
Fixes: lp:1758570
* https://bugs.launchpad.net/kicad/+bug/1758570
2018-03-24 23:57:06 +01:00
Marco Ciampa 4594fedc2c Small typo in menubar 2018-03-24 10:36:40 -04:00
Jeff Young 97fffe875f Notify clients when GRID_TRICKS toggles checkboxes. 2018-03-24 13:13:57 +00:00
Seth Hillbrand f317b10adf Ensure that the current copper zone is not first
The zeroth index is reserved especially for the <no net> tag, so we need
to keep the current net at 1 or greater to keep it connected.

Fixes: lp:1758488
* https://bugs.launchpad.net/kicad/+bug/1758488
2018-03-23 20:38:47 -07:00
Seth Hillbrand fb882633b2 Save layers regardless of view
We do not modify the underlying board when saving.  Previously only the
visible layers were saved.  This created a discrepancy between the board
that the user was editing and the board that was saved to disk.

Fixes: lp:1754049
* https://bugs.launchpad.net/kicad/+bug/1754049
2018-03-23 09:32:56 -07:00
jean-pierre charras 6940f92469 Fix compil issue and warning on Windows/msys2 2018-03-23 15:07:38 +01:00
Jeff Young 5957bc7dba Make sure checkboxes refresh on Linux. 2018-03-23 13:33:17 +00:00
Jeff Young 7df943af9c Play nice with JetBrains CLion 2018-03-23 12:46:17 +00:00
Jeff Young cd0cd242d1 Move 3D polygon approximation to absolute-error algorithm.
Also inflates via and pad hole polygons to bisect their circles.

Fixes: lp:1758137
* https://bugs.launchpad.net/kicad/+bug/1758137
2018-03-23 12:46:17 +00:00
Jeff Young fbf10e941b Switch zone fillets to absolute-error algorithm.
And some general cleanup to related constants, etc.
2018-03-23 12:46:17 +00:00
Jeff Young d2d0660647 Open viewer even when FPID is invalid.
Just show an empty viewer.
2018-03-23 12:46:17 +00:00
Jeff Young a0364a1137 Don't make user click twice to toggle checkbox in wxGrid. 2018-03-23 12:46:17 +00:00
jean-pierre charras 29ebca4053 Very minor fix: make a menu string more easily translatable 2018-03-22 21:00:41 +01:00
Maciej Suminski 434b385a95 Eagle SCH importer: prepend # to references of symbols without assigned footprints
With hash character starting the reference value, schematic components
are considered as virtual and therefore netlist updater do not warn about
an unsigned footprint anymore. This approach is useful to handle logos,
frames or other virtual Eagle components.

Fixes: lp:1756281
* https://bugs.launchpad.net/kicad/+bug/1756281
2018-03-22 18:20:02 +01:00
Maciej Suminski e9537953cd Eagle SCH importer: reduced code duplication for importing labels 2018-03-22 18:20:02 +01:00
Maciej Suminski 97f8a3361e Renamed ERC rule: "Test unique global labels" to "Test single instances of global labels" 2018-03-22 18:20:02 +01:00
Maciej Suminski 6331f94544 OpenGL GAL: safer error handling
Replaced assert() with wxCHECK(), so in case of problems methods return
instead of continuing with invalid state/data, wherever possible.
2018-03-22 18:20:02 +01:00
Maciej Suminski 058f2bffd0 Spice simulator: safety check 2018-03-22 18:20:02 +01:00
Jon Evans 5b653c0c1e Update MacOS icons
Fixes: lp:1750284
* https://bugs.launchpad.net/kicad/+bug/1750284
2018-03-22 11:45:42 -04:00
Jon Evans 9bc97a9316 Add MacOS icon generator script 2018-03-22 11:45:41 -04:00
jean-pierre charras 94c780975e Very minor cosmetic fix. 2018-03-22 12:01:06 +01:00
Maciej Suminski e1c8822b9e Component Properties dialog: catch IO_ERRORs when showing footprint viewer 2018-03-22 11:44:13 +01:00
Maciej Suminski 62fd734007 Footprint Viewer: do not try to preselect an empty footprint
Empty string is treated as an invalid LIB_ID, so it ends up with an
exception.
2018-03-22 11:38:10 +01:00
Maciej Suminski 351fc0c343 eeschema: preserve unit number after pasting a component
Fixes: lp:1757373
* https://bugs.launchpad.net/kicad/+bug/1757373
2018-03-22 10:55:50 +01:00
Jon Evans a931ac436a Add some safety checks to Excellon number format detection
Fixes: lp:1754121
* https://bugs.launchpad.net/kicad/+bug/1754121
2018-03-21 22:29:43 -04:00
Andrzej Wolski 4152069504 Make vias selectable even if top and bottom layer are hidden 2018-03-21 22:15:17 -04:00
Jeff Young 79fe134495 Init Footprint Viewer with current FPID.
Fixes: lp:1757421
* https://bugs.launchpad.net/kicad/+bug/1757421
2018-03-21 23:11:55 +00:00
Jeff Young 99e659ff54 Coverity fixes. 2018-03-21 23:11:55 +00:00
Andrzej Wolski ff3f229871 Decouple vias from tracks in selection filter 2018-03-21 17:21:08 -04:00
Andrzej Wolski ea3f8743fd Fixes in GAL selection filter:
- vias were always left selected, include vias in tracks filter - as in legacy
- make text filtering work
- cleanup drawings filtering code
- hide checkbox "Include items on invisible layers" because it does not work in GAL
2018-03-21 17:21:01 -04:00
Jon Evans 8cdb82df42 Update Windows MSYS2 build instructions; remove "easy way" for now 2018-03-21 14:33:44 -04:00
Maciej Suminski bad462a228 Spice simulator: reload ngSpice dll on error
ngSpice frequently ends up a simulation with an error:
"Error: ngspice.dll cannot recover and awaits to be detached"
The only way forward is to reload the shared library and
reinitialize ngSpice.

Fixes: lp:1753101
* https://bugs.launchpad.net/kicad/+bug/1753101
2018-03-21 18:01:38 +01:00
Maciej Suminski 61e42ba392 Spice simulator: changed NGSPICE instance type to shared_ptr
It was yet another time when I tried to free a singleton pointer.
Let's make clear it is not meant to be freed manually.
2018-03-21 18:01:38 +01:00
Maciej Suminski 50053e7f27 Spice simulator: code formatting 2018-03-21 18:01:38 +01:00
Maciej Suminski 33620ecc85 Revert "libngspice is linked at compile time"
This reverts commit 75f8b20493.
In case of problems, ngspice demands to be detached which is not
possible when it is linked at compile time.
2018-03-21 18:01:38 +01:00
Maciej Suminski dfd2a8fc48 NumericEvaluator: return false for invalid expressions
Clearing bClError flag in NumericEvaluator::parseOk() made the
expression look valid, even if the flag has been set for a previous
token. Now it is cleared before an expression is parsed and verified
after parser finishes.

Fixes: lp:1756995
* https://bugs.launchpad.net/kicad/+bug/1756995
2018-03-21 17:11:35 +01:00
jean-pierre charras 7b4a8d7eb5 Gerber job file: update file format due to a recent change.
Please: note the gerber JSON file format is currently a moving target, although most of the format is now fixed.
Most, but not all.
2018-03-21 12:40:10 +01:00
Jon Evans 477b4c5447 Update Linux application and mimetype icons 2018-03-20 22:42:32 -04:00
Jon Evans 31081269d3 Update application icons 2018-03-20 22:26:59 -04:00
Jon Evans 285bf79370 Fix strings for save/load project menu options; standardize on "Load"
Fixes: lp:1753659
* https://bugs.launchpad.net/kicad/+bug/1753659
2018-03-20 22:20:54 -04:00
Jon Evans b9ce203487 Fix pad selection requirements in footprint editor
Fixes: lp:1757295
* https://bugs.launchpad.net/kicad/+bug/1757295
2018-03-20 21:15:05 -04:00
Jon Evans b53ed148f3 Optimization to track DRC and some formatting cleanup 2018-03-20 20:37:35 -04:00
Jon Evans c78171d01f DRC: Add an optional mode to report all track errors
Fixes: lp:1754442
* https://bugs.launchpad.net/kicad/+bug/1754442
2018-03-20 19:54:06 -04:00
Seth Hillbrand 73408f3f21 Correct DRC calculation on segments
If objects are at the clearance limit, they qualify as passing DRC.
Therefore, all comparison functions that indicate failure should be
strictly greater than or less than while all comparison functions that
indicate success (in the DRC) should be greater/equal or less/equal.

This also corrects a rounding error at the nm scale and handles
scaling zero-length and large segments correctly.

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

Fixes: lp:1593373
* https://bugs.launchpad.net/kicad/+bug/1593373
2018-03-20 15:35:53 -07:00
Jeff Young 683be7155e Mirror-image coordinate system on back of board for PNP.
Also converts any delimiters in tokens to underscores.

Fixes: lp:1679205
* https://bugs.launchpad.net/kicad/+bug/1679205
2018-03-20 16:57:42 +00:00
jean-pierre charras b5f1fdd981 Add icon to Get and Move context menu item in GAL mode.
Windows does not like mixing menu items with and without icons (sizing error).

Fixes: lp:1756263
https://bugs.launchpad.net/kicad/+bug/1756263
2018-03-20 08:30:02 +01:00
Jon Evans 3103e3dc4c DRC: Center zoom on marker location, not DRC item start location
For some DRC checks, the location of the marker is not the location
of the first item in the resulting DRC_ITEM, so centering the screen
on PointA of the DRC_ITEM can be confusing.
2018-03-19 22:25:55 -04:00
Maciej Suminski b40bf4c0ea Center DIALOG_SHIM position if it would have appeared off the screen
DIALOG_SHIM stores the dialog position, so every time it is shown, it is
displayed in the same location. This caused problems on multidisplay
setups, as dialogs could show up off the screen if the original display
has been detached in the meantime, effectively making them inaccesible
to the user.

Fixes: lp:1756623
* https://bugs.launchpad.net/kicad/+bug/1756623
2018-03-20 00:02:22 +01:00
Wayne Stambaugh 620c2af356 KiCad: fix template folder load bug.
Add a check to see if the folder selected by the user contains a
project template meta data folder and use that folder instead of
assuming that it is a folder containing sub-folders with project
templates.  The normal behavior is preserved when no meta data
folder is detected.

Fixes lp:1751465

https://bugs.launchpad.net/kicad/+bug/1751465
2018-03-19 12:49:57 -04:00
Maciej Suminski 33dcc080ea STEP exporter: check board outline continuity 2018-03-19 17:34:11 +01:00
Maciej Suminski a42aed3305 Added "Copy" to right click menu in WX_HTML_REPORT_PANEL 2018-03-19 17:15:07 +01:00
Maciej Suminski 17d63dbc1f Fixed text alignment in WX_HTML_REPORT_PANEL 2018-03-19 17:04:38 +01:00
Maciej Suminski 5ba3e43d31 Converted STEP exporter dialog to use WX_HTML_REPORT_PANEL 2018-03-19 17:04:38 +01:00
Maciej Suminski eebabf165b kicad2step: Report lack of model definition rather than empty file names 2018-03-19 17:04:38 +01:00
Maciej Suminski 47e4798423 kicad2step: Report function name and line number only in debug builds 2018-03-19 17:04:38 +01:00
jean-pierre charras 2ff74cb3fc Add support for .gbrjob new file format (JSON format) in Gerbview
Add experimental code to generate .gbrjob files in the new JSON file format
2018-03-19 15:14:20 +01:00
Jeff Young 1a845bc4ad Safer way to commit in-progress changes in wxGrid.
In some cases the wxGrid would attempt to close the editor in
the middle of the d'tor, resulting in segfaults.
2018-03-19 12:13:28 +00:00
jean-pierre charras 5e34563f52 Fix a long calculation time that happens with some gerber files when closing Gerbview in legacy display mode. 2018-03-19 10:58:27 +01:00
Maciej Suminski ce610f33a2 Coverity fixes
resource leak: #172233
negative array index write: #102363
uninitialized scalar field: #174540 #174539
structurally dead code: #169334 #169331
2018-03-19 10:02:05 +01:00
Jon Evans 4e76a18d5d Add checks against missing D-Codes in flashed Gerber items
Fixes: lp:1756710
* https://bugs.launchpad.net/kicad/+bug/1756710
2018-03-18 21:55:27 -04:00
Jeff Young aa0ae48dda Update status bar and toolbars on language change.
Fixes: lp:1392582
* https://bugs.launchpad.net/kicad/+bug/1392582

Fixes: lp:1748428
* https://bugs.launchpad.net/kicad/+bug/1748428
2018-03-18 22:17:27 +00:00
Jeff Young 89ebab5df2 Comments for SELECTION_TOOL::guessSelectionCandidates(). 2018-03-18 22:17:27 +00:00
Jeff Young df924a5e68 Follow standard FBP naming conventions. 2018-03-18 22:17:27 +00:00
Carsten Schoenert bc1b10bc92 AboutDialog_main.cpp: update the link to the libraries
The KiCad official libraries have now a own dedicated website.
2018-03-18 11:21:24 -04:00
Carsten Schoenert 4723aae18c AboutDialog_main.cpp: re-adding i18n macros
Some strings in the About Kicad dialog are not displayed as translated
strings due the strings not marked as i18n based strings.
2018-03-18 11:21:24 -04:00
jean-pierre charras 827b818b5d Very minor fixes in Gerbview and Kicad:
Gerbview: fix X2 z order display of Adhesive (Glue) layers.
Kicad: very minor cosmetic enhancement in Create Project dialog.
2018-03-18 16:04:23 +01:00
Jeff Young e0e0687cd7 Revert "Allow 5.0 to read 6.0 files with hole-to-hole clearance settings."
This reverts commit 0a4c04530a.
2018-03-16 22:22:15 +00:00
Jeff Young 1684fc735a Defensive coding to attempt to prevent wxWidgets crash.
Fixes: lp:1756255
* https://bugs.launchpad.net/kicad/+bug/1756255
2018-03-16 19:02:25 +00:00
Jeff Young b8fd2f3c79 Revert "Don't be pedantic about the file format."
This reverts commit 1537cbc59c.
2018-03-16 18:11:36 +00:00
Jeff Young d3e7efcd66 Ignore pads when selecting drag candidates in router tool.
Fixes: lp:1747156
* https://bugs.launchpad.net/kicad/+bug/1747156
2018-03-16 18:01:40 +00:00
Jeff Young b335ef0531 Don't involve user in implementation details.
Fixes: lp:1756299
* https://bugs.launchpad.net/kicad/+bug/1756299
2018-03-16 16:57:38 +00:00
Jeff Young 1537cbc59c Don't be pedantic about the file format.
It's just another form of nagging.
2018-03-16 16:57:38 +00:00
Marco Ciampa 9e8bcbea04 Gerbview: fix typo in tooltip string. 2018-03-16 09:41:53 -04:00
Wayne Stambaugh 3f52e87224 Standardize terminology for automatic zoom to "Zoom to Fit".
Fixes lp:1753336

https://bugs.launchpad.net/kicad/+bug/1753336
2018-03-16 08:38:36 -04:00
jean-pierre charras 819056df9d Eeschema: Add footprint field to Cadstar netlist file.
Fixes: lp:1755996
https://bugs.launchpad.net/kicad/+bug/1755996
2018-03-16 13:20:00 +01:00
Jeff Young 3b0a758f97 Ensure router layer is visible.
Fixes: lp:1663556
* https://bugs.launchpad.net/kicad/+bug/1663556
2018-03-16 02:43:17 +00:00
Jeff Young 0a4c04530a Allow 5.0 to read 6.0 files with hole-to-hole clearance settings. 2018-03-16 00:48:35 +00:00
Jeff Young a1a4275e8b Cancel interactive tools when entering DRC.
Fixes: lp:1541526
* https://bugs.launchpad.net/kicad/+bug/1541526
2018-03-16 00:28:02 +00:00
Jeff Young fb31bc1ca7 Add separators to kicad window.
Fixes: lp:1750409
* https://bugs.launchpad.net/kicad/+bug/1750409
2018-03-15 19:14:49 +00:00
Wayne Stambaugh 5ae9ac566f Page layout editor: standardize zoom in and zoom out menu accelerators.
Fixes: lp:1753338

https://bugs.launchpad.net/kicad/+bug/1753338
2018-03-15 15:07:58 -04:00
Alessandro Gatti 86603125ac Scripting: Preemptively reset footprint wizard state.
Fixes: lp:1754992
* https://bugs.launchpad.net/kicad/+bug/1754992
2018-03-15 12:30:02 -04:00
Jon Evans 2cc5c6fd45 Add ERC check in component editor for conflicting multi-unit pins
Fixes: lp:1680638
* https://bugs.launchpad.net/kicad/+bug/1680638
2018-03-15 11:11:43 -04:00
Jon Evans 0a81782b5d Add ERC check that a pin appears in only one net
Fixes: lp:1680638
* https://bugs.launchpad.net/kicad/+bug/1680638
2018-03-15 11:11:43 -04:00
Wayne Stambaugh 89d350a7d2 Footprint editor: fix bug in footprint wizard 2D barcode generator.
The text height and thickness settings were never implemented so they
didn't get updated when the options were changed.  Added the missing
code to update both parameters.

Added text width parameter so text height and width do not need to be
the same value.  Currently both the value and reference fields are set
to the same height and width.  Please feel free to change this if you
feel the need to have separate text settings for both the value and
reference fields.

Fixes lp:1751309

https://bugs.launchpad.net/kicad/+bug/1751309
2018-03-15 10:37:36 -04:00
Jeff Young c6ef0d57f1 Retire auto-delete-old-track from toolbar.
Also corrects the backwards-wording of the setting in the Preferences
dialog.

Fixes: lp:1754667
* https://bugs.launchpad.net/kicad/+bug/1754667
2018-03-15 11:41:27 +00:00
Jeff Young d9d9a54aa8 Replace previous hidden text commit with a LOD-based one. 2018-03-15 11:00:36 +00:00
jean-pierre charras e14a7c928c Fix incorrect pin num string in cadstar and orcadpcb2 format 2018-03-15 09:15:49 +01:00
Jon Evans 213b600b54 Revert active layer behavior so gerber/drill load behavior matches
Fixes: lp:1755713
* https://bugs.launchpad.net/kicad/+bug/1755713
2018-03-14 21:52:06 -04:00
Jeff Young a75ead5efd Handle hidden text changing layers when native layer toggled.
Fixes: lp:1553459
* https://bugs.launchpad.net/kicad/+bug/1553459
2018-03-14 22:56:03 +00:00
Jeff Young 8904b2e046 Peg 3D viewer in front of Footprint Viewer and Wizard.
Fixes: lp:1754741
* https://bugs.launchpad.net/kicad/+bug/1754741
2018-03-14 19:17:09 +00:00
jean-pierre charras e8df845b3f Minor fix in zones_by_polygon.cpp: When editing a non copper zone, some settings were not those of the edited zone.
trigo.h: Add a useful double NormalizeAngleDegrees( double Angle, double aMin, double aMax ).
2018-03-14 19:03:14 +01:00
Maciej Suminski e4d512a293 Eagle PCB import: mute uninitialized variable warning
In fact radius is not used initialized, as the scope where it is
used (while loop) is dependent on the preceding if( w.curve ) clause
that initializes 'radius' variable.
2018-03-14 15:40:58 +01:00
Jeff Young 3d12a6889b Make sure ERC and DRC item lists respect color themes.
Fixes: lp:1492953
* https://bugs.launchpad.net/kicad/+bug/1492953
2018-03-14 14:15:16 +00:00
jean-pierre charras fa41026f36 Fix issue in aperture macro with some strange gerber files.
Fixes: lp:1755623
https://bugs.launchpad.net/kicad/+bug/1755623
2018-03-14 14:55:51 +01:00
jean-pierre charras 66d5d10b49 Gerbview: bigger line buffer to read some gerber files that have only one (very long) line.
small code refactor.
2018-03-14 10:42:18 +01:00
Maciej Suminski f7ad77004d Eagle PCB import: handle {smd,pad}.thermals property 2018-03-14 10:24:47 +01:00
Maciej Suminski d432a985ab Eagle PCB import: handle 'roundness' DRC rule (SMD rounded rectangles)
Fixes: lp:1754138
* https://bugs.launchpad.net/kicad/+bug/1754138
2018-03-14 10:24:47 +01:00
Maciej Suminski 5896723c60 Eagle PCB import: handle smd.{stop,cream} and pad.stop attributes 2018-03-14 10:24:47 +01:00
Maciej Suminski 128a7f252c Eagle PCB import: fixed comments 2018-03-14 09:54:41 +01:00
Jon Evans 543faa385b PDF Plotter: handle edge-case arc/circle drawing correctly
Fixes: lp:1752771
* https://bugs.launchpad.net/kicad/+bug/1752771
2018-03-13 21:01:06 -04:00
Jon Evans 2f86b497d9 Work around wxGrid boolean editor issues
Fixes: lp:1667240
* https://bugs.launchpad.net/kicad/+bug/1667240
2018-03-13 20:34:39 -04:00
Wayne Stambaugh 71d8a1ea1e GerbView: fix legacy canvas refresh when drawing outline modes. 2018-03-13 18:25:03 -04:00
Wayne Stambaugh a5cca18dd1 GerbView: add view menu.
Include all actions provided by left vertical toolbar in a new view
menu for consistency with other main frames.

Move show/hide layer manager to view menu.

Simplify some toolbar and menu update logic.

Fixes lp:1753337

https://bugs.launchpad.net/kicad/+bug/1753337
2018-03-13 18:00:15 -04:00
Maciej Suminski 8567eab09a Fix pasting BOARD_ITEMs containing Unicode characters
Fixes: lp:1749549
* https://bugs.launchpad.net/kicad/+bug/1749549
2018-03-13 17:40:18 +01:00
Maciej Suminski 83efd6b8a3 Added 'Paste' to eeschema context menus
Fixes: lp:1754891
* https://bugs.launchpad.net/kicad/+bug/1754891
2018-03-13 17:26:33 +01:00
Maciej Suminski d906acc0eb Eagle PCB import plugin: sprintf() -> snprintf() 2018-03-13 14:50:08 +01:00
Maciej Suminski aeb999b9ae Eagle PCB import: handle solder mask & paste for pads
Fixes: lp:1754138
* https://bugs.launchpad.net/kicad/+bug/1754138
2018-03-13 14:50:05 +01:00
Maciej Suminski 4055c435a5 Eagle PCB import: unified code for handling pad properties 2018-03-13 14:44:35 +01:00
Maciej Suminski 4c9be316dd Eagle import: minor ECOORD refactor
- changed EAGLE_UNIT enum names from EAGLE_* to EU_*
- renamed ToNanoMeters() to ConvertToNm() and added a comment
- added ToMils() and ToNanoMeters() method
2018-03-13 14:44:34 +01:00
Maciej Suminski 133b681006 Eagle PCB import: code formatting 2018-03-13 14:44:28 +01:00
Maciej Suminski 9d0cd1a188 Eagle PCB import: rounded rectangle pad support 2018-03-13 11:57:43 +01:00
Miles McCoo 9d98fe1b80 Fix for crash due to pcbnew_action_plugin object tracking
pcbnew_action_plug tracks items that were modified within a plugin. In the case of
deletion, the old object is no longer valid. This commit turns off the call to delete
if a plugin is active.
2018-03-13 10:19:39 +01:00
Jon Evans 935a5cada8 Fix typo in conditional check
Fixes: lp:1755265
* https://bugs.launchpad.net/kicad/+bug/1755265
2018-03-12 22:15:27 -04:00
Jeff Young f32f14dc8f Add WX_TEXT_ENTRY_DIALOG which inherits from DIALOG_SHIM.
Fixes: lp:1754977
* https://bugs.launchpad.net/kicad/+bug/1754977
2018-03-12 22:45:51 +00:00
Jeff Young 43899bbe0e Fix compile issues under some compilers. 2018-03-12 21:02:04 +00:00
Jeff Young 3d32ee774e Translatable strings must be ASCII7 for translation tools. 2018-03-12 19:54:07 +00:00
Jeff Young 4eedb3a27d The _() macro affords some nullptr safety over a naked immediate.
Fixes: lp:1477448
* https://bugs.launchpad.net/kicad/+bug/1477448
2018-03-12 19:18:05 +00:00
Tomasz Wlostowski b1f613071d eeschema: workaround for 64kByte string length limit in wxString::Format() causing segfaults in netlist update under Windows
Fixes: lp:1754402
* https://bugs.launchpad.net/kicad/+bug/1754402
2018-03-12 18:26:25 +01:00
Maciej Suminski ab37801489 Do not define hotkeys for copy/cut/paste to avoid double action execution
CTRL+{X,C,V} used to be handled both by the legacy hotkey system that
generated ID_EDIT_{CUT,COPY,PASTE} wxCommandEvent, and the Tool Framework
hotkey system.

Fixes: lp:1749549
* https://bugs.launchpad.net/kicad/+bug/1749549
2018-03-12 16:53:17 +01:00
jean-pierre charras d64c89d964 Footprint editor: Graphic polygon don't follow footprint when moving reference anchor
Fixes: lp:1755042
https://bugs.launchpad.net/kicad/+bug/1755042
2018-03-12 13:17:22 +01:00
jean-pierre charras 243ce6979b Fix a minor coding style and minor potential issue. 2018-03-12 08:34:21 +01:00
Alessandro Gatti 53c9143b64 fpwizard: Switch page after checking parameters
The parameter check was triggered by a grid clear event which was sent
after the current page number was changed, creating a mismatch between
the old and new parameter list lengths.

Fixes: lp:1754738
* https://bugs.launchpad.net/kicad/+bug/1754738
2018-03-11 19:10:27 -04:00
jean-pierre charras d52491c715 Custom pads: allows solid connection to zones.
The 2 options are now: no connection and solid connection
2018-03-11 20:39:29 +01:00
jean-pierre charras 17f6d09935 Page layout editor: fix incorrect management of block operation in context (popup) menu. 2018-03-11 18:38:27 +01:00
Alessandro Gatti f1cf95b8dd scripting: Fix invalid error message syntax.
Fixes: lp:1754758
https://bugs.launchpad.net/kicad/+bug/1754758
2018-03-11 15:09:27 +01:00
jean-pierre charras 17c0917dac DIALOG_UPDATE_PCB: minor fix: fix dialog min size.
The call to SetSizeHints() was missing
2018-03-10 18:19:52 +01:00
jean-pierre charras 2230abde1b page layout editor: fix a crash on block move.
This crash was due to a pointer initialized to a temporary reference.
Very minor coding style fixes
2018-03-10 10:25:07 +01:00
jean-pierre charras 83d5a770e8 Page layout editor: Hotkey modification ( '@' to a better key F5 ) 2018-03-10 08:41:06 +01:00
Seth Hillbrand f7cbf157a9 Adding segmentation to Eagle curved track import
Eagle tracks can have curves.  We approximate this using the
segments_per_360 define.  This results in 32 segments for a 360-degree
curve.  We could increase this value for curved tracks to get closer
tracking with the Eagle layout if needed.

Fixes: lp:1753289
* https://bugs.launchpad.net/kicad/+bug/1753289
2018-03-09 13:25:38 -08:00
Seth Hillbrand ea4cee3393 Set Eagle import generated timestamps to KiCad std 2018-03-09 13:12:18 -08:00
Seth Hillbrand 3d27dbdcbb Spelling Unrecognised -> Unrecognized 2018-03-09 09:43:54 -08:00
Seth Hillbrand 82e5110733 Spelling Synthetize -> Synthesize 2018-03-09 09:43:54 -08:00
Seth Hillbrand 7fbf7bbf42 Spelling improoved -> improved 2018-03-09 09:43:54 -08:00
Seth Hillbrand 2e12175c13 Spelling Plese -> Please 2018-03-09 09:43:54 -08:00
Seth Hillbrand a4519478f0 Spelling Appearence -> Appearance 2018-03-09 09:43:54 -08:00
Seth Hillbrand ce8d5787f7 Standardize Hierarchy wording 2018-03-09 09:43:54 -08:00
Seth Hillbrand 6d5389a90c Spelling Behaviour -> Behavior 2018-03-09 09:43:53 -08:00
Seth Hillbrand 649809a38f Standardize Keywords->Key words 2018-03-09 09:43:53 -08:00
Seth Hillbrand 26392f8070 Remove spaces from start of common translated words 2018-03-09 08:40:43 -08:00
jean-pierre charras 52ab6216c0 Refinement in circle to segment approximation for clearance area of DRAWSEGMENTS 2018-03-09 15:56:00 +01:00
Maciej Suminski 30a78f00bc Use 32-bit timestamps for imported Eagle files
Fixes: lp:1754610
* https://bugs.launchpad.net/kicad/+bug/1754610
2018-03-09 14:27:35 +01:00
jean-pierre charras 3fcc84dde3 Fix circle to segment approximation to 0.02 mm instead of 0.01 mm
(to avoid to long calculation time in fill zone)
2018-03-09 13:36:54 +01:00
jean-pierre charras 51fe063524 Circle to polygon conversion: a few enhancements:
* Remove duplicate code
* fix incorrect formulas is some places
* add comments
2018-03-09 13:28:47 +01:00
Jon Evans 9c62792245 SVG Plotter: Handle edge-case arc and circle drawing 2018-03-08 22:44:26 -05:00
Jon Evans 921e68107b OpenGL: Make circle/arc drawing match Cairo for some edge cases 2018-03-08 22:04:33 -05:00
hauptmech eeeed88425 Use fixed width on first Symbol Table column
Autosize when the reference field is a list of all components was too long.

Fixes: lp:1753330
* https://bugs.launchpad.net/kicad/+bug/1753330
2018-03-08 20:59:46 -05:00
Jeff Young 308f28d2d4 Save ModEdit's footprint ID rather than source.
This primarily keeps us from overriding "truth" with data that
might not have even been saved when closing ModEdit.

Fixes: lp:1752543
* https://bugs.launchpad.net/kicad/+bug/1752543
2018-03-09 01:32:52 +00:00
Jeff Young f1b48eb4f4 Fix default button and focus for ModEdit save.
Fixes: lp:1752546
* https://bugs.launchpad.net/kicad/+bug/1752546
2018-03-09 00:52:45 +00:00
Jeff Young c7cc795095 Close pcb opened just to get its GAL canvas settings.
Fixes: lp:1752541
* https://bugs.launchpad.net/kicad/+bug/1752541
2018-03-08 23:51:10 +00:00
Jeff Young 4693fd6200 Resolve env vars when looking up documentation files.
Fixes: lp:1729276
* https://bugs.launchpad.net/kicad/+bug/1729276
2018-03-08 23:51:10 +00:00
Jon Evans e4b847b345 GerbView: fix a few issues with layer selection / info synchronization
Fixes: lp:1754135
* https://bugs.launchpad.net/kicad/+bug/1754135
2018-03-08 18:19:48 -05:00
Jeff Young ad5311f393 Don't allow many context-menu commands for NEW/MOVED items.
Fixes: lp:1681198
* https://bugs.launchpad.net/kicad/+bug/1681198
2018-03-08 20:34:37 +00:00
Seth Hillbrand 5fea89ebd5 Standardize plural menu items 2018-03-08 12:33:32 -08:00
Seth Hillbrand 33423fe88d Standardize capitalization
Messages should start with capitalized letter
2018-03-08 12:33:32 -08:00
Seth Hillbrand 8ff91cc0da Standardize hotkeys table 2018-03-08 12:33:32 -08:00
Seth Hillbrand 5aa4129a88 Standardize copper zones 2018-03-08 12:33:32 -08:00
Seth Hillbrand de8716bcc2 Standardize open web browser 2018-03-08 12:33:32 -08:00
Seth Hillbrand f76b89cf99 Standardize error message in Eeschema 2018-03-08 12:33:32 -08:00
Seth Hillbrand 74e13aebca Spelling "Overwrite exiting" -> "Overwrite existing" 2018-03-08 12:33:32 -08:00
Seth Hillbrand 8639c308fa Spelling "free-stanging" -> "free-standing" 2018-03-08 12:33:32 -08:00
Seth Hillbrand 3cbf5f4942 Spelling indentifier -> identifier 2018-03-08 12:33:32 -08:00
Seth Hillbrand a607174f9a Fix english grammar 2018-03-08 12:33:32 -08:00
Seth Hillbrand 583ee0e4c3 Standardize Favourite -> Favorite 2018-03-08 12:33:32 -08:00
Seth Hillbrand 9bede6900c Standardize Kicad -> KiCad 2018-03-08 12:33:32 -08:00
Jeff Young 182b134872 Don't overwite env vars with settings.
Fixes: lp:1740022
* https://bugs.launchpad.net/kicad/+bug/1740022
2018-03-08 19:17:31 +00:00
Jeff Young 8a35e58987 Calculate number of segments based on radius.
Fixes: lp:1754252
* https://bugs.launchpad.net/kicad/+bug/1754252
2018-03-08 18:04:26 +00:00
Jeff Young ab730709c7 Only use hover track if there are no selected tracks.
Fixes: lp:1645670
* https://bugs.launchpad.net/kicad/+bug/1645670
2018-03-08 18:03:46 +00:00
Maciej Suminski 0bdae22af7 ResolveFile() handles absolute paths
Fixes: lp:1753094
* https://bugs.launchpad.net/kicad/+bug/1753094
2018-03-08 11:35:27 +01:00
Maciej Suminski 9ce768c29a Modified STROKE_FONT::ComputeStringBoundaryLimits() to process multiline strings
Removed a declaration of a not existing method (STROKE_FONT::ComputeTextLineSize()).

Fixes: lp:1747967
* https://bugs.launchpad.net/kicad/+bug/1747967
2018-03-08 10:56:34 +01:00
Maciej Suminski b3601bd540 SCH_LEGACY_PLUGIN_CACHE: Rename conflicting aliases 2018-03-08 09:48:41 +01:00
Maciej Suminski d74bb131e1 SCH_LEGACY_PLUGIN_CACHE: Do not add the root alias for loaded symbols
The root alias is added in the loop iterating through all aliases.
2018-03-08 09:48:41 +01:00
Maciej Suminski a5844c9bb8 Replace illegal characters in LIB_{ALIAS,PART} LIB_IDs
Schematic components have illegal characters replaced during load,
leading to broken component-symbol links. To avoid this, library symbols
should have their names fixed in the same way.

Fixes: lp:1752419
* https://bugs.launchpad.net/kicad/+bug/1752419
2018-03-08 09:48:34 +01:00
Maciej Suminski dfc47464d7 Added ReplaceIllegalFileNameChars() for wxString& 2018-03-08 09:06:15 +01:00
Jon Evans 23f49f014b Code style fixes 2018-03-07 22:14:24 -05:00
Jon Evans 3e033aee0c Perform coordinate format detection on Excellon drill files
Fixes: lp:1754121
* https://bugs.launchpad.net/kicad/+bug/1754121
2018-03-07 22:08:59 -05:00
Jon Evans 8f0c798dc8 Update MSYS2 links 2018-03-07 21:06:30 -05:00
Jon Evans 38d211b5e1 Document workaround for Windows compilation issues with OCE 2018-03-07 21:03:04 -05:00
Jon Evans 1e66a23dbc Rework footprint selection filtering to improve behavior
Fixes: lp:1751960
* https://bugs.launchpad.net/kicad/+bug/1751960
2018-03-07 20:41:10 -05:00
Seth Hillbrand 9c532dfada Eeschema: Prevent block duplicate from disappearing
Duplicate is handled like move/drag but shouldn't mark the original
items as moving.  This prevents a redraw from drawing the original
items.

Fixes: lp:1750083
* https://bugs.launchpad.net/kicad/+bug/1750083
2018-03-07 16:43:21 -08:00
Jon Evans c3333d4665 GerbView: ensure view settings are saved/restored in measure tool
Fixes: lp:1754100
* https://bugs.launchpad.net/kicad/+bug/1754100
2018-03-07 18:56:59 -05:00
Wayne Stambaugh 1ae721442c Pcbnew: fix invalid footprint name illegal character list.
Footprint names cannot contain ':', '\n', or '\r'.
2018-03-07 14:19:07 -05:00
Seth Hillbrand 85c8648045 Fix printable character bug in footprint
Fixes: lp:1754120
* https://bugs.launchpad.net/kicad/+bug/1754120
2018-03-07 10:57:36 -08:00
Seth Hillbrand 414e6614f1 Check for toolbar before checking tool
Not all toolbars exist in all tools at all times.  Need to check before
dereferencing variable.

Fixes: lp:1754094
* https://bugs.launchpad.net/kicad/+bug/1754094
2018-03-07 09:55:58 -08:00
jean-pierre charras 8fcbb64a46 Better algo to calculate the segment count to convert a DRAWSEGMENT arc or circle to a set of segments.
Currently, the max error between the arc/circle and a segment is set to 0.05 mm
2018-03-07 14:16:39 +01:00
Tomasz Włostowski ebd2b78f86 pcbnew/router: respect default net clearance for objects that don't have any net (e.g. board outline)
Fixes: lp:1753904
* https://bugs.launchpad.net/kicad/+bug/1753904
2018-03-07 11:47:37 +01:00
Maciej Suminski a3562b354b Refresh zones in the view on a DRC run
PCB_EDIT_FRAME::Fill_All_Zones() now reuses ZONE_FILLER tool to
avoid code duplication.

Fixes: lp:1753901
* https://bugs.launchpad.net/kicad/+bug/1753901
2018-03-07 09:05:51 +01:00
Seth Hillbrand c69db6cf8f Adding rounded rect and custom pad shapes to VRML export
Fixes: lp:1753552
* https://bugs.launchpad.net/kicad/+bug/1753552
2018-03-06 16:40:08 -08:00
Wayne Stambaugh 944a0b195e Update KiCad compiling document.
Add missing build dependencies ngspice and oce.

Fix missing dependencies for MSYS2 builds on windows.

Remove enabling scripting now that is enabled by default.
2018-03-06 18:54:51 -05:00
Jeff Young 44b81c99ec Use TransferDataFromWindow so <enter> works.
Fixes: lp:1750471
* https://bugs.launchpad.net/kicad/+bug/1750471
2018-03-06 21:12:14 +00:00
Jeff Young 2b34426c36 Only set always-show-scrollbars in constructor on Mac.
Fixes: lp:1753592
* https://bugs.launchpad.net/kicad/+bug/1753592
2018-03-06 20:31:44 +00:00
Maciej Suminski 49486b83b0 Add "create a new directory" checkbox to the Create Project dialog
Fixes: lp:1753325
* https://bugs.launchpad.net/kicad/+bug/1753325
2018-03-06 16:22:46 +01:00
Tomasz Włostowski a164f7e2da pcbnew: fixed zone filling performance regression
Fixes: lp:1753224
* https://bugs.launchpad.net/kicad/+bug/1753224
2018-03-06 16:06:16 +01:00
Tomasz Włostowski f2bb398ae6 pcbnew: fixes in primitives->custom pad tool
Fixes: lp:1753712
* https://bugs.launchpad.net/kicad/+bug/1753712

Fixes: lp:1753711
* https://bugs.launchpad.net/kicad/+bug/1753711
2018-03-06 14:59:15 +01:00
Tomasz Włostowski 48459e4268 pcbnew: fixes in custom pad creation tool
Fixes: lp:1753152
* https://bugs.launchpad.net/kicad/+bug/1753152
2018-03-06 14:59:15 +01:00
Maciej Suminski aff350f593 LIB_ID: change strcpy() to strncpy() for safety 2018-03-06 14:25:18 +01:00
hauptmech e62db2841a Fix dependency bug introduced in RPATH patch e0b33ee8 2018-03-06 07:39:44 -05:00
Clemens Koller f7ef010fe1 GerbView: Minor cleanup of Menus + Toolbar for consistency.
replace: File -> File(s) when wxFD_MULTIPLE
replace: Load -> Open
replace: Erase -> Clear
add Excellon / Gerber where it makes sense
re-sort File menu
2018-03-05 18:33:21 -05:00
jean-pierre charras 5a33f09608 Fix memory leak 2018-03-05 20:18:55 +01:00
jean-pierre charras ff91e9b253 minor fix in a debug code 2018-03-05 20:18:55 +01:00
jean-pierre charras cfbd156adc Minot fix: fix a minor wxAssert in dialog 2018-03-05 20:18:55 +01:00
Seth Hillbrand 218f66a08b Fix sign comparison warning 2018-03-05 09:20:19 -08:00
Maciej Suminski 5bbb4489b3 Fixed out of bounds access to m_shaderBuffer array in 3D viewer raytracer 2018-03-05 17:49:34 +01:00
hauptmech e0b33ee8a6 Fix RPATH not removed in shared object file for python
Build pcbnew_kiface files as object target that can then be linked in to pcbnew.kiface and _pcbnew.so
Only create _pcbnew.so target if scripting modules is enabled.
For linux builds only.
2018-03-05 11:19:16 -05:00
Diego Herranz 62bcf4fde4 pcbnew: reorder "Fabrication Outputs" in menu
Place it next to "Export" since it is similar conceptually
(it effectively exports to a few different formats too).
2018-03-05 10:49:55 -05:00
Maciej Suminski 3e54e16bdc Update ratsnest after a footprint change
PCB_BASE_FRAME::PlaceModule() calls CN_CONNECTIVITY_ALGO::Update()
on the new footprint that does not have nets assigned. The Update()
method first removes the footprint (but it has not been added, so
nothing happens) and then adds it with all pads marked as not connected.
Later, when BOARD_COMMIT is pushed - it tries to add the same footprint
again with nets assigned, but the pads are already registered, therefore
they are discarded.

To prevent this, PlaceModule() does not call CN_CONNECTIVITY_ALGO::Update()
for the just created footprint, as it is handled by BOARD_COMMIT later.
2018-03-05 16:42:30 +01:00
Maciej Suminski 0521b63503 Remove negation from PCB_BASE_FRAME::PlaceModule() parameter
Negated parameters make code confusing. Now the parameter
description is accurate.
2018-03-05 16:42:30 +01:00
Tomasz Włostowski 4be12292a0 Fixed duplicate misbehaviour when duplicating single track/via
Fixes: lp:1753158
* https://bugs.launchpad.net/kicad/+bug/1753158
2018-03-05 14:52:12 +01:00
Michael Kavanagh fabbc48b40 macOS: standardise CFBundleName to application names. 2018-03-05 01:14:00 +00:00
Seth Hillbrand 9c44d67f3b Eeschema: Simplify transformation representation
Fixes: lp:1752745
* https://bugs.launchpad.net/kicad/+bug/1752745
2018-03-05 01:05:21 +00:00
Jeff Young f4eb63f871 Size fields list correctly in symbol edit.
Fixes: lp:1753323
* https://bugs.launchpad.net/kicad/+bug/1753323
2018-03-05 00:07:50 +00:00
Jeff Young 90e2c8dd7f Get rid of first-scroll jerkiness in eeschema. 2018-03-05 00:07:50 +00:00
Jon Evans cd2224b94d Add missing hotkey support to GerbView
Fixes: lp:1752982
* https://bugs.launchpad.net/kicad/+bug/1752982
2018-03-04 16:59:23 -05:00
Jon Evans d2c86f8594 GerbView: Disable legacy-only event handlers when GAL is active
Fixes: lp:1752209
* https://bugs.launchpad.net/kicad/+bug/1752209
2018-03-04 16:21:24 -05:00
Seth Hillbrand 01ef0bd2e9 pcbnew: Add graphic polygon on drawing layer
Fixes: lp:1753151
* https://bugs.launchpad.net/kicad/+bug/1753151
2018-03-04 12:49:41 -08:00
Bernhard Stegmaier 8f42e128da Fix missing C++-11 compiler flags when building on macOS with non-Xcode clang 2018-03-04 15:00:43 -05:00
Bernhard Stegmaier a786078747 Fix clang-mp build error (don't declare const variables as being firstprivate) 2018-03-04 12:22:12 -05:00
Maciej Suminski 2af51ef20f Eagle import: do not call TrimWire() on imported schematics
It turns out that TrimWire() may remove legit Eagle wires and effectively
change the netlist.
2018-03-04 18:04:19 +01:00
Maciej Suminski 1f09990618 Remove not used ListNets() methods 2018-03-04 18:04:19 +01:00
Maciej Suminski 260f680c6c Eagle import: fix memory leak on schematic sheets import 2018-03-04 16:47:26 +01:00
Maciej Suminski 419a16ae58 Eagle import: fix footprint LIB_IDs in the imported board 2018-03-04 16:45:42 +01:00
Maciej Suminski 8e8d95dd7f Eagle import: process all sheets when adding junctions; fix footprint LIB_IDs 2018-03-04 16:45:42 +01:00
Maciej Suminski f7158e834d Created STDOUT_REPORTER class for debugging 2018-03-04 16:45:42 +01:00
Maciej Suminski a3941b1dec Eagle import plugin: remap zones/tracks/vias using net name remapping
There are a few steps to assign correct nets to zones/track/vias:
- create a net name to pad map
- perform 2 stage netlist update (fix timestamps and then references)
- compare new net names with the previously created net map, save the
    differences as a old net to new net map
- remap zones/tracks/vias using the map created in the previous step

The main advantage here is it correctly handles unnamed nets (i.e. ones
without any net labels attached), which might be changed by KiCad
netlist generator.
2018-03-04 16:45:42 +01:00
Maciej Suminski 77346d81ce Eagle import plugin: add junction dots to fix connectivity 2018-03-04 16:45:42 +01:00
Maciej Suminski 1f078f533b Refactor Eagle project import to use Kiway::ExpressMail() 2018-03-04 16:45:42 +01:00
Russell Oliver 9016344bb3 Eagle Schematic Import: Fix netlist mapping for zones and vias. 2018-03-04 16:45:11 +01:00
Russell Oliver 3d9c25494c Revert "Eagle importer: use only global net labels"
This reverts commit b1f456fade.
2018-03-04 16:42:55 +01:00
Jon Evans 2da7199a37 GerbView: Fix active layer synchronization 2018-03-03 23:43:16 -05:00
Jeff Young 284c346828 Don't cache github libraries above nginx server.
It's too expensive to fetch the timestamps when the github
server is busy.  See Dick Hollenbeck's comments at the top of
github_plugin.cpp for more info.

Also adds some safety to the other caching algorithms after
seeing github_plugin's wild-west usage of the kicad_plugin.

Fixes: lp:1753143
* https://bugs.launchpad.net/kicad/+bug/1753143
2018-03-04 01:16:59 +00:00
Wayne Stambaugh 43147a3a7a Do not append "RESCUE" to symbol names when rescuing symbols.
Fixes lp:1741755

https://bugs.launchpad.net/kicad/+bug/1741755
2018-03-03 15:34:26 -05:00
Jeff Young c294a54c57 Fix footprint wizard setup of gEDA libraries.
Fixes: lp:1753164
* https://bugs.launchpad.net/kicad/+bug/1753164
2018-03-03 20:08:29 +00:00
Jeff Young c77d13292b Reinstate multi-threading in zone filler. 2018-03-03 17:41:53 +00:00
Tomasz Włostowski 919b449595 Added 'show spice netlist' menu option in the simulator
Fixes: lp:1745887
* https://bugs.launchpad.net/kicad/+bug/1745887
2018-03-03 17:38:28 +01:00
Tomasz Włostowski d3b259cc09 pcbnew: toolbar/menu state sync for display units 2018-03-03 17:38:28 +01:00
Tomasz Włostowski af7064ef89 pcbnew: synchronize zone visibility view menu entries with the toolbar buttons 2018-03-03 17:38:28 +01:00
Wayne Stambaugh aeae32b1a2 Fix file naming bug when importing Eagle projects with . in file name.
Fixes lp:1747470

https://bugs.launchpad.net/kicad/+bug/1747470
2018-03-03 08:35:53 -05:00
Seth Hillbrand 3760b6820f pcbnew: align centers to the top and left
When aligning module centers, it can be hard to determine which item
will be chosen for the alignment target when it chooses based on the
median of the center values.  Instead, this patch chooses the alignment
target as the top and left most items of the Y and X centering,
respectively
2018-03-02 20:15:51 -08:00
Seth Hillbrand 818d4257c9 pcbnew: Prevent alignment on pads + parents
Filter a selection that contains pads and the pads' parent modules
before performing alignment operations.
2018-03-02 20:15:51 -08:00
Seth Hillbrand d5cd9761dd pcbnew: Check locks in alignment
When aligning in pcbnew, check for pad/module locks before performing a
move and query the user.

When aligning on pads, don't move the pad without moving the footprint,
so we don't break footprints.

Fixes: lp:1751352
* https://bugs.launchpad.net/kicad/+bug/1751352
2018-03-02 20:15:51 -08:00
Seth Hillbrand e6245c5c5a Fix type comparison warning 2018-03-02 17:08:01 -08:00
Jeff Young 8e1d397587 Update Eagle and gEDA importers.
Remove a throw in the Eagle importer which just threw a wedge
in the works, and return a default modTime when the file hasn't
been set yet.

Give the gEDA importer the multi-file cache management performance
improvements from the kicad_plugin.

Fixes: lp:1752719
* https://bugs.launchpad.net/kicad/+bug/1752719
2018-03-03 00:21:26 +00:00
Jeff Young 33d925f631 Add GetLibraryTimestamp to other plugins.
Fixes: lp:1752719
* https://bugs.launchpad.net/kicad/+bug/1752719
2018-03-02 20:53:48 +00:00
Seth Hillbrand cb052b42a6 LibEdit: Correct Mirroring labels in context menu
Fixes: lp:1752763
* https://bugs.launchpad.net/kicad/+bug/1752763
2018-03-02 10:17:55 -08:00
Maciej Suminski 3f1a3fe65b Derive DIALOG_MULTI_OPTIONS from wxMultiChoiceDialog 2018-03-02 18:09:27 +01:00
Maciej Suminski be13bb0013 Refactored SelectSingleOption() to take advantage of wxSingleChoiceDialog. 2018-03-02 17:43:59 +01:00
Maciej Suminski 18167f829a Derive KIDIALOG from wxRichMessageDialog
wxRichMessageDialog already offers a dialog with a checkbox, so
the custom dialog setup code is not necessary anymore.
2018-03-02 17:05:35 +01:00
Maciej Suminski 1d5df8e975 Renamed KI_DIALOG to KIDIALOG 2018-03-02 11:57:03 +01:00
Maciej Suminski d5ac7c031d Assign net classes to nets before showing the Design Rules dialog
It is needed to display nets that have just been imported to the
board (e.g. in an update PCB from schematics step).
2018-03-02 11:50:13 +01:00
Andrzej Wolski 1ac5ec1fc8 Restore some missing visibility items from board file
LAYER_TRACKS, LAYER_PADS_TH and LAYER_NON_PLATEDHOLES
now have their own visibility control, so do not force them on.
2018-03-02 11:12:53 +01:00
Maciej Suminski 0923c7f4de Change 'Create Array' default hot key due to a conflict with 'New File' 2018-03-02 11:08:04 +01:00
Maciej Suminski 52fcddf4f4 Allow drawing self-intersecting polygons, just display a warning
Fixes: lp:1751654
* https://bugs.launchpad.net/kicad/+bug/1751654
2018-03-02 10:58:43 +01:00
Seth Hillbrand 886159347a Eeschema: Verify file content exists
Fixes: lp:1752724
* https://bugs.launchpad.net/kicad/+bug/1752724
2018-03-01 14:32:59 -08:00
jean-pierre charras e3c71efbeb Fix compil warnings 2018-03-01 18:24:36 +01:00
Maciej Suminski de6b32d236 Share certain settings between board and footprint editor
45 degree graphics segments and selection vs dragging preference
should use the same setting in both applications.
2018-03-01 17:20:50 +01:00
Maciej Suminski 9127e09815 Code formatting 2018-03-01 17:20:50 +01:00
Maciej Suminski 98616da017 Added an option to enforce dragging gesture to always draw selection box
Partial solution to a problem described in lp:#1636214
2018-03-01 17:15:57 +01:00
Wayne Stambaugh ce1bd4c6b7 Eeschema: fix remapping backup project with schematics in subfolders.
The backup code was designed for a project with all of the schematics
in the project folder which is not always the case.  Fix the schematic
backup to keep the schematic folder structure in tact during backups.

Fixes lp:1751662

https://bugs.launchpad.net/kicad/+bug/1751662
2018-02-28 11:42:05 -05:00
Maciej Suminski fef1ba9993 Increase the area ratio threshold for rejecting large footprints in selection 2018-02-28 17:00:45 +01:00
Jon Evans 88fb4c57e5 PcbNew: center on items rather than zooming to them on find
Fixes: lp:1751480
* https://bugs.launchpad.net/kicad/+bug/1751480
2018-02-28 16:58:05 +01:00
Simon Richter 675bd39e8a Avoid shadowed variable 2018-02-28 16:34:03 +01:00
jean-pierre charras 2c85de3ab2 gerbview layer manager: fix a minor issue, and and icons in context menu, similar to pcbnew layer manager context menu 2018-02-28 10:21:37 +01:00
Jon Evans 2c54f6fe32 GerbView: Fix DCode reordering; ensure loaded layers are visible 2018-02-28 08:23:41 +01:00
Jon Evans de483ac1aa GerbView: only erase current layer if a new file is chosen 2018-02-28 08:23:40 +01:00
Jon Evans 490a2105c3 Properly update view when GerbView display settings changed 2018-02-28 08:23:39 +01:00
Jon Evans cd14525839 GerbView: More accurate selection of arc shapes 2018-02-28 08:23:39 +01:00
Jon Evans e2408989a4 GerbView: redraw negative items when visibility changes 2018-02-27 20:59:08 +01:00
Jon Evans 37beb726e3 GerbView: Implement in-place GAL layer reordering (for X2 sorting) 2018-02-27 20:59:07 +01:00
jean-pierre charras eb94d2fcd0 Gerbview: fix an issue when loading files: Layer filenames order in right tab view modified each time a new file is loaded.
It creates strange issues (inconsistent layer filenames order, inconsistent items colors) especially with non X2 files.
2018-02-27 19:58:07 +01:00
Robbert Lagerweij a59864201a pcbnew: use centerpoint distribution in align tool for overlaping items
reimplement the centerpoint distribution and use it when the items to be
distributed overlap leaving no gap to use for spacing

Fixes: lp:1748763
* https://bugs.launchpad.net/kicad/+bug/1748763
2018-02-27 17:58:19 +01:00
jean-pierre charras 5f578c884c Fix SetValue() method in TEXT_CTRL_EVAL
Normal SetValue() call would temporarily change the displayed
value, but as soon as the text widget receives focus again, the original
expression (not evaluated) is restored.

To avoid this, the original expression is cleared in the associated
NumericEvaluator object.
2018-02-27 12:47:43 +01:00
Maciej Suminski 5f2b8e0409 Change NumericEvaluator::clear() to optionally accept an object to clear 2018-02-27 12:47:32 +01:00
Jon Evans 0d794b20bb Add null check in ROUTER_TOOL::breakTrack() 2018-02-27 08:45:06 +01:00
Dan Weatherill 4124019f41 Send model change event on design rules change
Dispatches a TA_MODEL_CHANGE event when the design rules dialog is
closed, the intention being to cause the router tool to re-sync its
design rule information

Fixes: lp:1462929
* https://bugs.launchpad.net/kicad/+bug/1462929
2018-02-26 14:40:18 -05:00
Jon Evans 80035661dc Use proper path when loading files from Gerber job file 2018-02-26 14:26:58 -05:00
Jon Evans 5292829e05 Fix edge case GERBER_FILE_IMAGE creation logic 2018-02-26 14:26:47 -05:00
Jon Evans b03ac1f614 Only update item color when highlighting items in GerbView 2018-02-26 13:48:16 -05:00
Jon Evans 449da4303e Remove more unnecessary calls to RecacheAllItems 2018-02-26 13:47:55 -05:00
Maciej Suminski 55edf1aad2 PCB_PAINTER: use dynamic_cast to determine whether an object is of EDA_ITEM type 2018-02-26 17:22:50 +01:00
Maciej Suminski ad6571a508 GAL profiling: changed wxLogDebug() to wxLogTrace() for DRAW_PANEL_GAL 2018-02-26 17:22:47 +01:00
Jon Evans 31e78d670d Ensure ROUTER_PREVIEW_ITEM draws on top of all normal layers
Fixes: lp:1751646
* https://bugs.launchpad.net/kicad/+bug/1751646
2018-02-26 11:31:39 +01:00
Maciej Suminski b9285cf0e5 Display theta character correctly in ruler tool
Fixes: lp:1749549
* https://bugs.launchpad.net/kicad/+bug/1749549
2018-02-26 10:38:40 +01:00
Jon Evans 319b7cfc67 Remove extra call to SetTopLayer() when switching active layer 2018-02-25 19:19:45 -05:00
Jon Evans e21f18a176 Don't use the RTREE in UpdateAllLayersOrder() / UpdateAllLayersColor()
Since we are going to inspect every item for these calls, we don't
need to use the RTREE search, which is expensive with high item count.

This results in ~50% improvement in layer switching time in GerbView
when working with a set of large Gerber files.
2018-02-25 19:10:02 -05:00
Jon Evans 4ec7a02ccd Add a method to conditionally update VIEW_ITEMs (GerbView performance) 2018-02-25 18:20:44 -05:00
Jon Evans d7bb83ddcb Add a REPAINT flag for faster redraw when bounding box hasn't changed 2018-02-25 18:20:34 -05:00
Jon Evans be8bb24390 Make all new hotkeys editable; label some GAL-only hotkeys
Fixes: lp:1751183
* https://bugs.launchpad.net/kicad/+bug/1751183
2018-02-25 17:57:36 -05:00
Jon Evans cfd67163a1 Refactor post-load actions in PcbNew and apply them consistently
Fixes: lp:1751589
* https://bugs.launchpad.net/kicad/+bug/1751589
2018-02-25 17:47:36 -05:00
Jon Evans b90528a7ae Fix regression in GerbView display settings; some optimization too 2018-02-25 17:35:26 -05:00
Carsten Schoenert 2b52415cae fix misspelled 'Unkown' -> 'Unknown' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 9679bd55c1 fix misspelled 'streching' -> stretching 2018-02-25 17:10:10 -05:00
Carsten Schoenert 6256feb9db fix misspelled 'occured' -> 'occurred' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 5a86083a08 fix misspelled 'Occassionally' -> 'Occasionally' 2018-02-25 17:10:10 -05:00
Carsten Schoenert ff305781fb fix misspelled 'neeeded' -> 'needed' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 39e81b253b fix misspelled 'Modifed' -> 'Modified' 2018-02-25 17:10:10 -05:00
Carsten Schoenert 485f90f27a fix misspelled 'Appearence' -> 'Appearance' 2018-02-25 17:10:10 -05:00
Carsten Schoenert cb14742442 fix misspelled 'accesing' -> 'accessing' 2018-02-25 17:10:10 -05:00
Michael Geselbracht 21f46776c6 Fix decimal point bug, support for more units V2
If ',' is used as decimal separator by the current locale a '.' is also accepted.
Also add support for units "mi", "th" and "in" as described in the documentation of pcbnew.

Fixes: lp:1751315
* https://bugs.launchpad.net/kicad/+bug/1751315
2018-02-25 08:21:23 +01:00
Wayne Stambaugh 50608c19ff Tag beginning of 5.0.0-rc2 developemnt. 2018-02-24 19:51:04 -05:00
1257 changed files with 144722 additions and 129360 deletions
+1
View File
@@ -61,6 +61,7 @@ demos/**/_autosave-*
# editor/OS fluff
.*.swp
*~
.idea
.DS_Store
*.png
*.kiface
+56 -117
View File
@@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2015-2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -34,7 +35,13 @@
#include <wx/log.h>
#include <wx/stdpaths.h>
#include <boost/version.hpp>
#if BOOST_VERSION >= 106800
#include <boost/uuid/detail/sha1.hpp>
#else
#include <boost/uuid/sha1.hpp>
#endif
#include <glm/glm.hpp>
#include <glm/ext.hpp>
@@ -52,6 +59,7 @@
static wxCriticalSection lock3D_cache;
static bool isSHA1Same( const unsigned char* shaA, const unsigned char* shaB )
{
for( int i = 0; i < 20; ++i )
@@ -61,6 +69,7 @@ static bool isSHA1Same( const unsigned char* shaA, const unsigned char* shaB )
return true;
}
static bool checkTag( const char* aTag, void* aPluginMgrPtr )
{
if( NULL == aTag || NULL == aPluginMgrPtr )
@@ -71,6 +80,7 @@ static bool checkTag( const char* aTag, void* aPluginMgrPtr )
return pp->CheckTag( aTag );
}
static const wxString sha1ToWXString( const unsigned char* aSHA1Sum )
{
unsigned char uc;
@@ -151,14 +161,8 @@ void S3D_CACHE_ENTRY::SetSHA1( const unsigned char* aSHA1Sum )
{
if( NULL == aSHA1Sum )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] NULL passed for aSHA1Sum";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] NULL passed for aSHA1Sum",
__FILE__, __FUNCTION__, __LINE__ );
return;
}
@@ -186,6 +190,7 @@ S3D_CACHE::S3D_CACHE()
return;
}
S3D_CACHE::~S3D_CACHE()
{
FlushCache();
@@ -210,8 +215,8 @@ SCENEGRAPH* S3D_CACHE::load( const wxString& aModelFile, S3D_CACHE_ENTRY** aCach
if( full3Dpath.empty() )
{
// the model cannot be found; we cannot proceed
wxLogTrace( MASK_3D_CACHE, " * [3D model] could not find model '%s'\n",
aModelFile.GetData() );
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [3D model] could not find model '%s'\n",
__FILE__, __FUNCTION__, __LINE__, aModelFile );
return NULL;
}
@@ -294,15 +299,8 @@ SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY**
if( m_CacheMap.insert( std::pair< wxString, S3D_CACHE_ENTRY* >
( aFileName, ep ) ).second == false )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] duplicate entry in map file; key = '";
ostr << aFileName.ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] duplicate entry in map file; key = '%s'",
__FILE__, __FUNCTION__, __LINE__, aFileName );
m_CacheList.pop_back();
delete ep;
@@ -325,15 +323,8 @@ SCENEGRAPH* S3D_CACHE::checkCache( const wxString& aFileName, S3D_CACHE_ENTRY**
if( m_CacheMap.insert( std::pair< wxString, S3D_CACHE_ENTRY* >
( aFileName, ep ) ).second == false )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] duplicate entry in map file; key = '";
ostr << aFileName.ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] duplicate entry in map file; key = '%s'",
__FILE__, __FUNCTION__, __LINE__, aFileName );
m_CacheList.pop_back();
delete ep;
@@ -364,28 +355,16 @@ bool S3D_CACHE::getSHA1( const wxString& aFileName, unsigned char* aSHA1Sum )
{
if( aFileName.empty() )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] empty filename";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * [BUG] empty filename",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
if( NULL == aSHA1Sum )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] NULL pointer passed for aMD5Sum";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s\n * [BUG] NULL pointer passed for aMD5Sum",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
@@ -434,17 +413,16 @@ bool S3D_CACHE::loadCacheData( S3D_CACHE_ENTRY* aCacheItem )
if( bname.empty() )
{
#ifdef DEBUG
wxLogTrace( MASK_3D_CACHE, " * [3D model] cannot load cached model; no file hash available\n" );
#endif
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; no file hash available" );
return false;
}
if( m_CacheDir.empty() )
{
wxString errmsg = "cannot load cached model; config directory unknown";
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s\n", errmsg.GetData() );
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; config directory unknown" );
return false;
}
@@ -454,8 +432,7 @@ bool S3D_CACHE::loadCacheData( S3D_CACHE_ENTRY* aCacheItem )
if( !wxFileName::FileExists( fname ) )
{
wxString errmsg = "cannot open file";
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s '%s'\n",
errmsg.GetData(), fname.GetData() );
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s '%s'", errmsg.GetData(), fname.GetData() );
return false;
}
@@ -475,28 +452,16 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem )
{
if( NULL == aCacheItem )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * NULL passed for aCacheItem";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * NULL passed for aCacheItem",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
if( NULL == aCacheItem->sceneData )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * aCacheItem has no valid scene data";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * aCacheItem has no valid scene data",
__FILE__, __FUNCTION__, __LINE__ );
return false;
}
@@ -505,17 +470,16 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem )
if( bname.empty() )
{
#ifdef DEBUG
wxLogTrace( MASK_3D_CACHE, " * [3D model] cannot load cached model; no file hash available\n" );
#endif
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; no file hash available" );
return false;
}
if( m_CacheDir.empty() )
{
wxString errmsg = "cannot load cached model; config directory unknown";
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s\n", errmsg.GetData() );
wxLogTrace( MASK_3D_CACHE,
" * [3D model] cannot load cached model; config directory unknown" );
return false;
}
@@ -526,9 +490,8 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem )
{
if( !wxFileName::FileExists( fname ) )
{
wxString errmsg = _( "path exists but is not a regular file" );
wxLogTrace( MASK_3D_CACHE, " * [3D model] %s '%s'\n", errmsg.GetData(),
fname.ToUTF8() );
wxLogTrace( MASK_3D_CACHE, " * [3D model] path exists but is not a regular file '%s'",
fname );
return false;
}
@@ -559,14 +522,9 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
if( !cfgdir.DirExists() )
{
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "failed to create 3D configuration directory" );
ostr << " * " << errmsg.ToUTF8() << "\n";
errmsg = _( "config directory" );
ostr << " * " << errmsg.ToUTF8() << " '";
ostr << cfgdir.GetPath().ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
wxLogTrace( MASK_3D_CACHE,
"%s:%s:%d\n * failed to create 3D configuration directory '%s'",
__FILE__, __FUNCTION__, __LINE__, cfgdir.GetPath() );
return false;
}
@@ -577,15 +535,10 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
// inform the file resolver of the config directory
if( !m_FNResolver->Set3DConfigDir( m_ConfigDir ) )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * could not set 3D Config Directory on filename resolver\n";
ostr << " * config directory: '" << m_ConfigDir.ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE,
"%s:%s:%d\n * could not set 3D Config Directory on filename resolver\n"
" * config directory: '%s'",
__FILE__, __FUNCTION__, __LINE__, m_ConfigDir );
}
// 3D cache data must go to a user's cache directory;
@@ -597,20 +550,20 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
// 3. MSWin: AppData\Local\kicad\3d
wxString cacheDir;
#if defined(_WIN32)
#if defined(_WIN32)
wxStandardPaths::Get().UseAppInfo( wxStandardPaths::AppInfo_None );
cacheDir = wxStandardPaths::Get().GetUserLocalDataDir();
cacheDir.append( "\\kicad\\3d" );
#elif defined(__APPLE)
#elif defined(__APPLE)
cacheDir = "${HOME}/Library/Caches/kicad/3d";
#else // assume Linux
#else // assume Linux
cacheDir = ExpandEnvVarSubstitutions( "${XDG_CACHE_HOME}" );
if( cacheDir.empty() || cacheDir == "${XDG_CACHE_HOME}" )
cacheDir = "${HOME}/.cache";
cacheDir.append( "/kicad/3d" );
#endif
#endif
cacheDir = ExpandEnvVarSubstitutions( cacheDir );
cfgdir.Assign( cacheDir, "" );
@@ -621,14 +574,8 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir )
if( !cfgdir.DirExists() )
{
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = "failed to create 3D cache directory";
ostr << " * " << errmsg.ToUTF8() << "\n";
errmsg = "cache directory";
ostr << " * " << errmsg.ToUTF8() << " '";
ostr << cfgdir.GetPath().ToUTF8() << "'";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * failed to create 3D cache directory '%s'",
__FILE__, __FUNCTION__, __LINE__, cfgdir.GetPath() );
return false;
}
@@ -681,11 +628,8 @@ wxString S3D_CACHE::Get3DConfigDir( bool createDefault )
if( !cfgpath.DirExists() )
{
std::ostringstream ostr;
wxString errmsg = "failed to create 3D configuration directory";
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * " << errmsg.ToUTF8();
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * failed to create 3D configuration directory '%s'",
__FILE__, __FUNCTION__, __LINE__, cfgpath.GetPath() );
return wxT( "" );
}
@@ -788,14 +732,9 @@ S3DMODEL* S3D_CACHE::GetModel( const wxString& aModelFileName )
if( !cp )
{
#ifdef DEBUG
do {
std::ostringstream ostr;
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
ostr << " * [BUG] model loaded with no associated S3D_CACHE_ENTRY";
wxLogTrace( MASK_3D_CACHE, "%s\n", ostr.str().c_str() );
} while( 0 );
#endif
wxLogTrace( MASK_3D_CACHE,
"%s:%s:%d\n * [BUG] model loaded with no associated S3D_CACHE_ENTRY",
__FILE__, __FUNCTION__, __LINE__ );
return NULL;
}
+9 -33
View File
@@ -29,6 +29,7 @@
#include <wx/log.h>
#include <wx/msgdlg.h>
#include <pgm_base.h>
#include <trace_helpers.h>
#include "common.h"
#include "3d_filename_resolver.h"
@@ -317,7 +318,8 @@ wxString S3D_FILENAME_RESOLVER::ResolvePath( const wxString& aFileName )
wxString errmsg = "[3D File Resolver] No such path; ensure the environment var is defined";
errmsg.append( "\n" );
errmsg.append( tname );
wxLogMessage( errmsg );
errmsg.append( "\n" );
wxLogTrace( tracePathsAndFiles, errmsg );
}
return wxEmptyString;
@@ -374,8 +376,7 @@ wxString S3D_FILENAME_RESOLVER::ResolvePath( const wxString& aFileName )
}
// ${ENV_VAR} paths have already been checked; skip them
while( sPL != ePL && ( sPL->m_alias.StartsWith( "${" )
|| sPL->m_alias.StartsWith( "$(" ) ) )
while( sPL != ePL && ( sPL->m_alias.StartsWith( "${" ) || sPL->m_alias.StartsWith( "$(" ) ) )
++sPL;
// at this point the filename must contain an alias or else it is invalid
@@ -392,7 +393,8 @@ wxString S3D_FILENAME_RESOLVER::ResolvePath( const wxString& aFileName )
wxString errmsg = "[3D File Resolver] No such path";
errmsg.append( "\n" );
errmsg.append( tname );
wxLogTrace( MASK_3D_RESOLVER, errmsg );
errmsg.append( "\n" );
wxLogTrace( tracePathsAndFiles, errmsg );
}
return wxEmptyString;
@@ -428,7 +430,8 @@ wxString S3D_FILENAME_RESOLVER::ResolvePath( const wxString& aFileName )
wxString errmsg = "[3D File Resolver] No such path; ensure the path alias is defined";
errmsg.append( "\n" );
errmsg.append( tname.substr( 1 ) );
wxLogTrace( MASK_3D_RESOLVER, errmsg );
errmsg.append( "\n" );
wxLogTrace( tracePathsAndFiles, errmsg );
}
return wxEmptyString;
@@ -641,40 +644,13 @@ bool S3D_FILENAME_RESOLVER::writePathList( void )
std::list< S3D_ALIAS >::const_iterator sPL = m_Paths.begin();
std::list< S3D_ALIAS >::const_iterator ePL = m_Paths.end();
while( sPL != ePL && ( sPL->m_alias.StartsWith( "${" )
|| sPL->m_alias.StartsWith( "$(" ) ) )
while( sPL != ePL && ( sPL->m_alias.StartsWith( "${" ) || sPL->m_alias.StartsWith( "$(" ) ) )
++sPL;
wxFileName cfgpath( m_ConfigDir, S3D_RESOLVER_CONFIG );
wxString cfgname = cfgpath.GetFullPath();
std::ofstream cfgFile;
if( sPL == ePL )
{
wxMessageDialog md( NULL,
_( "3D search path list is empty;\ncontinue to write empty file?" ),
_( "Write 3D search path list" ), wxYES_NO );
if( md.ShowModal() == wxID_YES )
{
cfgFile.open( cfgname.ToUTF8(), std::ios_base::trunc );
if( !cfgFile.is_open() )
{
wxMessageBox( _( "Could not open configuration file" ),
_( "Write 3D search path list" ) );
return false;
}
cfgFile << "#V" << CFGFILE_VERSION << "\n";
cfgFile.close();
return true;
}
return false;
}
cfgFile.open( cfgname.ToUTF8(), std::ios_base::trunc );
if( !cfgFile.is_open() )
@@ -75,8 +75,7 @@ void DLG_3D_PATH_CONFIG::initDialog()
size_t listsize = rpaths->size();
size_t listidx = 0;
while( rI != rE && ( (*rI).m_alias.StartsWith( "${" )
|| (*rI).m_alias.StartsWith( "$(" ) ) )
while( rI != rE && ( (*rI).m_alias.StartsWith( "${" ) || (*rI).m_alias.StartsWith( "$(" ) ) )
{
++listidx;
++rI;
@@ -3,7 +3,7 @@
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2017-2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -39,7 +39,7 @@
#define ID_CFG_PATHS ( ID_SET_DIR + 1 )
wxBEGIN_EVENT_TABLE( DLG_SELECT_3DMODEL, wxDialog )
wxBEGIN_EVENT_TABLE( DLG_SELECT_3DMODEL, DIALOG_SHIM )
EVT_DIRCTRL_SELECTIONCHANGED( ID_FILE_TREE, DLG_SELECT_3DMODEL::OnSelectionChanged )
EVT_DIRCTRL_FILEACTIVATED( ID_FILE_TREE, DLG_SELECT_3DMODEL::OnFileActivated )
EVT_CHOICE( ID_SET_DIR, DLG_SELECT_3DMODEL::SetRootDir )
@@ -49,9 +49,9 @@ wxEND_EVENT_TABLE()
DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheManager,
MODULE_3D_SETTINGS* aModelItem, wxString& prevModelSelectDir, int& prevModelWildcard ) :
wxDialog( aParent, wxID_ANY, _( "Select 3D Model" ), wxDefaultPosition,
wxSize( 500,200 ), wxCAPTION | wxRESIZE_BORDER | wxCLOSE_BOX
| wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU ),
DIALOG_SHIM( aParent, wxID_ANY, _( "Select 3D Model" ), wxDefaultPosition,
wxSize( 500,200 ), wxCAPTION | wxRESIZE_BORDER | wxCLOSE_BOX
| wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU ),
m_model( aModelItem ), m_cache( aCacheManager ), m_previousDir( prevModelSelectDir ),
m_previousFilterIndex( prevModelWildcard )
{
@@ -79,18 +79,16 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana
m_FileTree->ShowHidden( false );
m_FileTree->SetMinSize( wxSize( 300,100 ) );
m_FileTree->SetMinSize( wxSize( 300, 400 ) );
m_FileTree->SetLabel( wxT( "3D_MODEL_SELECTOR" ) );
bSizer2->Add( m_FileTree, 1, wxEXPAND | wxALL, 5 );
bSizer1->Add( bSizer2, 1, wxEXPAND, 5 );
bSizer1->Add( bSizer2, 3, wxEXPAND, 5 );
m_modelViewer = new C3D_MODEL_VIEWER( this,
COGL_ATT_LIST::GetAttributesList( true ),
m_cache );
m_modelViewer->SetMinSize( wxSize( 512, 384 ) );
m_modelViewer = new C3D_MODEL_VIEWER( this, COGL_ATT_LIST::GetAttributesList( true ), m_cache );
m_modelViewer->SetMinSize( wxSize( 500, 400 ) );
bSizer1->Add( m_modelViewer, 0, wxCENTER, 5 );
bSizer1->Add( m_modelViewer, 5, wxEXPAND | wxALL | wxCENTER, 5 );
// create the filter list
if( NULL != m_cache )
@@ -108,7 +106,6 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana
if( sL != eL )
filter.Append( wxT( "|" ) );
}
if( !filter.empty() )
@@ -137,7 +134,7 @@ DLG_SELECT_3DMODEL::DLG_SELECT_3DMODEL( wxWindow* aParent, S3D_CACHE* aCacheMana
dirChoices->SetMinSize( wxSize( 320, 12 ) );
wxStaticText* stDirChoice = new wxStaticText( this, -1, _( "Paths:" ) );
wxButton* cfgPaths = new wxButton( this, ID_CFG_PATHS, _( "Configure Path" ) );
wxButton* cfgPaths = new wxButton( this, ID_CFG_PATHS, _( "Configure Paths" ) );
hboxDirChoice->Add( stDirChoice, 0, wxALL | wxCENTER, 5 );
hboxDirChoice->Add( dirChoices, 1, wxEXPAND | wxALL, 5 );
hboxDirChoice->Add( cfgPaths, 0, wxALL, 5 );
@@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -38,15 +39,17 @@
#include <wx/sizer.h>
#include <wx/frame.h>
class MODULE_3D_SETTINGS;
class S3D_CACHE;
class S3D_FILENAME_RESOLVER;
class C3D_MODEL_VIEWER;
#include <dialog_shim.h>
class DLG_SELECT_3DMODEL : public wxDialog
class MODULE_3D_SETTINGS;
class S3D_CACHE;
class S3D_FILENAME_RESOLVER;
class C3D_MODEL_VIEWER;
class DLG_SELECT_3DMODEL : public DIALOG_SHIM
{
private:
MODULE_3D_SETTINGS* m_model; // data for the selected model
MODULE_3D_SETTINGS* m_model; // data for the selected model
S3D_CACHE* m_cache; // cache manager
S3D_FILENAME_RESOLVER* m_resolver; // 3D filename resolver
@@ -153,7 +153,7 @@ private:
void View3DLeft( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'X' );
m_previewPane->SetView3D( GR_KB_SHIFT + 'X' );
}
void View3DFront( wxCommandEvent& event ) override
@@ -163,7 +163,7 @@ private:
void View3DTop( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'z' );
m_previewPane->SetView3D( 'Z' );
}
void View3DUpdate( wxCommandEvent& event ) override
@@ -174,17 +174,17 @@ private:
void View3DRight( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'x' );
m_previewPane->SetView3D( 'X' );
}
void View3DBack( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'y' );
m_previewPane->SetView3D( GR_KB_SHIFT + 'Y' );
}
void View3DBottom( wxCommandEvent& event ) override
{
m_previewPane->SetView3D( 'Z' );
m_previewPane->SetView3D( GR_KB_SHIFT + 'Z' );
}
public:
+7 -28
View File
@@ -33,6 +33,7 @@
#include <class_board.h>
#include <3d_math.h>
#include "3d_fastmath.h"
#include <geometry/geometry_utils.h>
/**
* Trace mask used to enable or disable the trace output of this class.
@@ -62,7 +63,7 @@ CINFO3D_VISU::CINFO3D_VISU() :
m_boardPos = wxPoint();
m_boardSize = wxSize();
m_boardCenter = SFVEC3F();
m_boardCenter = SFVEC3F( 0.0f );
m_boardBoudingBox.Reset();
m_board2dBBox3DU.Reset();
@@ -243,37 +244,19 @@ int CINFO3D_VISU::GetCopperThicknessBIU() const
return COPPER_THICKNESS;
}
// Constant factors used for number of segments approximation calcs
#define MIN_SEG_PER_CIRCLE 12
#define MAX_SEG_PER_CIRCLE 48
#define SEG_MIN_FACTOR_BIU ( 0.10f * IU_PER_MM )
#define SEG_MAX_FACTOR_BIU ( 6.00f * IU_PER_MM )
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( float aDiameter3DU ) const
{
wxASSERT( aDiameter3DU > 0.0f );
unsigned int result = mapf( aDiameter3DU,
m_calc_seg_min_factor3DU, m_calc_seg_max_factor3DU,
(float)MIN_SEG_PER_CIRCLE, (float)MAX_SEG_PER_CIRCLE );
wxASSERT( result > 1 );
return result;
return GetNrSegmentsCircle( (int)( aDiameter3DU / m_biuTo3Dunits ) );
}
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( int aDiameterBUI ) const
unsigned int CINFO3D_VISU::GetNrSegmentsCircle( int aDiameterBIU ) const
{
wxASSERT( aDiameterBUI > 0 );
wxASSERT( aDiameterBIU > 0 );
unsigned int result = mapf( (float)aDiameterBUI,
(float)SEG_MIN_FACTOR_BIU, (float)SEG_MAX_FACTOR_BIU,
(float)MIN_SEG_PER_CIRCLE, (float)MAX_SEG_PER_CIRCLE );
wxASSERT( result > 1 );
return result;
return GetArcToSegmentCount( aDiameterBIU / 2, ARC_HIGH_DEF, 360.0 );
}
@@ -281,7 +264,7 @@ double CINFO3D_VISU::GetCircleCorrectionFactor( int aNrSides ) const
{
wxASSERT( aNrSides >= 3 );
return 1.0 / cos( M_PI / ( (double)aNrSides * 2.0 ) );
return GetCircletoPolyCorrectionFactor( aNrSides );
}
@@ -318,10 +301,6 @@ void CINFO3D_VISU::InitSettings( REPORTER *aStatusTextReporter )
// Calculate the convertion to apply to all positions.
m_biuTo3Dunits = RANGE_SCALE_3D / std::max( m_boardSize.x, m_boardSize.y );
// Calculate factors for cicle segment approximation
m_calc_seg_min_factor3DU = (float)( SEG_MIN_FACTOR_BIU * m_biuTo3Dunits );
m_calc_seg_max_factor3DU = (float)( SEG_MAX_FACTOR_BIU * m_biuTo3Dunits );
m_epoxyThickness3DU = m_board->GetDesignSettings().GetBoardThickness() *
m_biuTo3Dunits;
+4 -4
View File
@@ -394,10 +394,10 @@ class CINFO3D_VISU
/**
* @brief GetNrSegmentsCircle
* @param aDiameterBUI: diameter in board unities
* @param aDiameterBIU: diameter in board internal units
* @return number of sides that should be used in that circle
*/
unsigned int GetNrSegmentsCircle( int aDiameterBUI ) const;
unsigned int GetNrSegmentsCircle( int aDiameterBIU ) const;
/**
* @brief GetCircleCorrectionFactor - computes a angle correction
@@ -427,11 +427,11 @@ class CINFO3D_VISU
void createNewPad( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
const wxSize &aInflateValue ) const;
wxSize aInflateValue ) const;
void createNewPadWithClearance( const D_PAD *aPad,
CGENERICCONTAINER2D *aDstContainer,
int aClearanceValue ) const;
wxSize aClearanceValue ) const;
COBJECT2D *createNewPadDrill( const D_PAD* aPad, int aInflateValue );
@@ -40,7 +40,7 @@
#include "../3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h"
#include <openmp_mutex.h>
#include <class_board.h>
#include <class_module.h>
#include <class_pad.h>
@@ -66,7 +66,7 @@ static const CBBOX2D *s_boardBBox3DU = NULL;
static const BOARD_ITEM *s_boardItem = NULL;
// This is a call back function, used by DrawGraphicText to draw the 3D text shape:
void addTextSegmToContainer( int x0, int y0, int xf, int yf )
void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData )
{
wxASSERT( s_boardBBox3DU != NULL );
wxASSERT( s_dstcontainer != NULL );
@@ -297,10 +297,14 @@ COBJECT2D *CINFO3D_VISU::createNewTrack( const TRACK* aTrack,
// board_items_to_polygon_shape_transform.cpp
void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
int aClearanceValue ) const
wxSize aClearanceValue ) const
{
const int dx = (aPad->GetSize().x / 2) + aClearanceValue;
const int dy = (aPad->GetSize().y / 2) + aClearanceValue;
// note: for most of shapes, aClearanceValue.x = aClearanceValue.y
// only rectangular and oval shapes can have different values
// when drawn on the solder paste layer, because we can have a margin that is a
// percent of pad size
const int dx = (aPad->GetSize().x / 2) + aClearanceValue.x;
const int dy = (aPad->GetSize().y / 2) + aClearanceValue.y;
if( !dx || !dy )
{
@@ -328,7 +332,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
case PAD_SHAPE_OVAL:
{
if( abs( dx - dy ) == 0 )
if( dx == dy )
{
// The segment object cannot store start and end the same position,
// so add a circle instead
@@ -351,7 +355,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
shape_offset.y = dy - dx;
iwidth = dx * 2;
}
else //if( dy <= dx )
else //if( dy < dx )
{
shape_offset.x = dy - dx;
iwidth = dy * 2;
@@ -374,8 +378,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
}
else
{
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU,
end3DU,
aDstContainer->Add( new CROUNDSEGMENT2D( start3DU, end3DU,
iwidth * m_biuTo3Dunits,
*aPad ) );
}
@@ -386,7 +389,7 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
case PAD_SHAPE_TRAPEZOID:
case PAD_SHAPE_RECT:
{
// https://github.com/KiCad/kicad-source-mirror/blob/0cab3e47ad8097db7b898b3cef2cf9b235318ca3/pcbnew/board_items_to_polygon_shape_transform.cpp#L613
// see pcbnew/board_items_to_polygon_shape_transform.cpp
wxPoint corners[4];
aPad->BuildPadPolygon( corners, wxSize( 0, 0), aPad->GetOrientation() );
@@ -415,38 +418,34 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
*aPad ) );
// Add the PAD contours
// !TODO: check the corners because it cannot add
// roundsegments that are in the same start and end position
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[0],
corners3DU[1],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[1],
corners3DU[2],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[2],
corners3DU[3],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[3],
corners3DU[0],
aClearanceValue * 2.0f * m_biuTo3Dunits,
*aPad ) );
// Round segments cannot have 0-length elements, so we approximate them
// as a small circle
for( int i = 1; i <= 4; i++ )
{
if( Is_segment_a_circle( corners3DU[i - 1], corners3DU[i & 3] ) )
{
aDstContainer->Add( new CFILLEDCIRCLE2D( corners3DU[i - 1],
aClearanceValue.x * m_biuTo3Dunits,
*aPad ) );
}
else
{
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[i - 1],
corners3DU[i & 3],
aClearanceValue.x * 2.0f * m_biuTo3Dunits,
*aPad ) );
}
}
}
break;
case PAD_SHAPE_ROUNDRECT:
{
const int pad_radius = aPad->GetRoundRectCornerRadius();
const int rounding_radius = pad_radius + aClearanceValue;
wxSize shapesize( aPad->GetSize() );
shapesize.x += aClearanceValue * 2;
shapesize.y += aClearanceValue * 2;
shapesize.x += aClearanceValue.x * 2;
shapesize.y += aClearanceValue.y * 2;
int rounding_radius = aPad->GetRoundRectCornerRadius( shapesize );
wxPoint corners[4];
@@ -471,27 +470,24 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
*aPad ) );
// Add the PAD contours
// !TODO: check the corners because it cannot add
// roundsegments that are in the same start and end position
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[0],
corners3DU[1],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[1],
corners3DU[2],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[2],
corners3DU[3],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[3],
corners3DU[0],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
// Round segments cannot have 0-length elements, so we approximate them
// as a small circle
for( int i = 1; i <= 4; i++ )
{
if( Is_segment_a_circle( corners3DU[i - 1], corners3DU[i & 3] ) )
{
aDstContainer->Add( new CFILLEDCIRCLE2D( corners3DU[i - 1],
rounding_radius * m_biuTo3Dunits,
*aPad ) );
}
else
{
aDstContainer->Add( new CROUNDSEGMENT2D( corners3DU[i - 1],
corners3DU[i & 3],
rounding_radius * 2.0f * m_biuTo3Dunits,
*aPad ) );
}
}
}
break;
@@ -501,12 +497,8 @@ void CINFO3D_VISU::createNewPadWithClearance( const D_PAD* aPad,
polyList.Append( aPad->GetCustomShapeAsPolygon() );
aPad->CustomShapeAsPolygonToBoardPosition( &polyList, aPad->ShapePos(), aPad->GetOrientation() );
if( aClearanceValue )
polyList.Inflate( aClearanceValue, 32 );
// This convert the poly in outline and holes
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
polyList.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
if( aClearanceValue.x )
polyList.Inflate( aClearanceValue.x, 32 );
// Add the PAD polygon
Convert_shape_line_polygon_to_triangles( polyList, *aDstContainer, m_biuTo3Dunits, *aPad );
@@ -576,7 +568,7 @@ COBJECT2D *CINFO3D_VISU::createNewPadDrill( const D_PAD* aPad, int aInflateValue
// board_items_to_polygon_shape_transform.cpp
void CINFO3D_VISU::createNewPad( const D_PAD* aPad,
CGENERICCONTAINER2D *aDstContainer,
const wxSize &aInflateValue ) const
wxSize aInflateValue ) const
{
switch( aPad->GetShape() )
{
@@ -584,7 +576,7 @@ void CINFO3D_VISU::createNewPad( const D_PAD* aPad,
case PAD_SHAPE_OVAL:
case PAD_SHAPE_ROUNDRECT:
case PAD_SHAPE_CUSTOM:
createNewPadWithClearance( aPad, aDstContainer, aInflateValue.x );
createNewPadWithClearance( aPad, aDstContainer, aInflateValue );
break;
case PAD_SHAPE_TRAPEZOID:
@@ -760,8 +752,9 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
PCB_LAYER_ID aLayerId,
int aClearanceValue )
{
// The full width of the lines to create:
const int linewidth = aDrawSegment->GetWidth() + (2 * aClearanceValue);
// The full width of the lines to create
// The extra 1 protects the inner/outer radius values from degeneracy
const int linewidth = aDrawSegment->GetWidth() + (2 * aClearanceValue) + 1;
switch( aDrawSegment->GetShape() )
{
@@ -827,11 +820,8 @@ void CINFO3D_VISU::AddShapeWithClearanceToContainer( const DRAWSEGMENT* aDrawSeg
aDrawSegment->TransformShapeWithClearanceToPolygon( polyList, aClearanceValue,
segcountforcircle, correctionFactor );
// This convert the poly in outline and holes
// Note: This two sequencial calls are need in order to get
// the triangulation function to work properly.
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
polyList.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
if( polyList.IsEmpty() ) // Just for caution
break;
@@ -858,24 +848,14 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
PCB_LAYER_ID aLayerId )
{
// Copy the polys list because we have to simplify it
SHAPE_POLY_SET polyList = SHAPE_POLY_SET(aZoneContainer->GetFilledPolysList());
SHAPE_POLY_SET polyList = SHAPE_POLY_SET( aZoneContainer->GetFilledPolysList(), true );
// This convert the poly in outline and holes
// Note: This two sequencial calls are need in order to get
// the triangulation function to work properly.
polyList.Simplify( SHAPE_POLY_SET::PM_FAST );
polyList.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
if( polyList.IsEmpty() )
return;
Convert_shape_line_polygon_to_triangles( polyList,
*aDstContainer,
m_biuTo3Dunits,
*aZoneContainer );
// add filled areas outlines, which are drawn with thick lines segments
// /////////////////////////////////////////////////////////////////////////
for( int i = 0; i < polyList.OutlineCount(); ++i )
@@ -893,10 +873,11 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
if( Is_segment_a_circle( start3DU, end3DU ) )
{
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU,
(aZoneContainer->GetMinThickness() / 2) *
m_biuTo3Dunits,
*aZoneContainer ) );
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
if( radius > 0.0 ) // degenerated circles crash 3D viewer
aDstContainer->Add( new CFILLEDCIRCLE2D( start3DU, radius ,
*aZoneContainer ) );
}
else
{
@@ -922,11 +903,12 @@ void CINFO3D_VISU::AddSolidAreasShapesToContainer( const ZONE_CONTAINER* aZoneCo
if( Is_segment_a_circle( start3DU, end3DU ) )
{
aDstContainer->Add(
new CFILLEDCIRCLE2D( start3DU,
(aZoneContainer->GetMinThickness() / 2) *
m_biuTo3Dunits,
*aZoneContainer ) );
float radius = (aZoneContainer->GetMinThickness() / 2) * m_biuTo3Dunits;
if( radius > 0.0 ) // degenerated circles crash 3D viewer
aDstContainer->Add(
new CFILLEDCIRCLE2D( start3DU, radius,
*aZoneContainer ) );
}
else
{
+64 -52
View File
@@ -40,7 +40,7 @@
#include "../3d_rendering/3d_render_raytracing/accelerators/ccontainer2d.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/ccylinder.h"
#include "../3d_rendering/3d_render_raytracing/shapes3D/clayeritem.h"
#include <openmp_mutex.h>
#include <class_board.h>
#include <class_module.h>
#include <class_pad.h>
@@ -52,6 +52,9 @@
#include <trigo.h>
#include <utility>
#include <vector>
#include <thread>
#include <algorithm>
#include <atomic>
#include <profile.h>
@@ -788,36 +791,43 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
// Add zones objects
// /////////////////////////////////////////////////////////////////////
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
std::atomic<size_t> nextZone( 0 );
std::atomic<size_t> threadsFinished( 0 );
size_t parallelThreadCount = std::max<size_t>( std::thread::hardware_concurrency(), 2 );
for( size_t ii = 0; ii < parallelThreadCount; ++ii )
{
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
if( aStatusTextReporter )
aStatusTextReporter->Report( wxString::Format( _( "Create zones of layer %s" ),
LSET::Name( curr_layer_id ) ) );
wxASSERT( m_layers_container2D.find( curr_layer_id ) != m_layers_container2D.end() );
CBVHCONTAINER2D *layerContainer = m_layers_container2D[curr_layer_id];
// ADD COPPER ZONES
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
std::thread t = std::thread( [&]()
{
const ZONE_CONTAINER* zone = m_board->GetArea( ii );
const PCB_LAYER_ID zonelayer = zone->GetLayer();
if( zonelayer == curr_layer_id )
for( size_t areaId = nextZone.fetch_add( 1 );
areaId < static_cast<size_t>( m_board->GetAreaCount() );
areaId = nextZone.fetch_add( 1 ) )
{
AddSolidAreasShapesToContainer( zone,
layerContainer,
curr_layer_id );
const ZONE_CONTAINER* zone = m_board->GetArea( areaId );
if( zone == nullptr )
break;
auto layerContainer = m_layers_container2D.find( zone->GetLayer() );
if( layerContainer != m_layers_container2D.end() )
AddSolidAreasShapesToContainer( zone, layerContainer->second,
zone->GetLayer() );
}
}
threadsFinished++;
} );
t.detach();
}
while( threadsFinished < parallelThreadCount )
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
#ifdef PRINT_STATISTICS_3D_VIEWER
printf( "T13: %.3f ms\n", (float)( GetRunningMicroSecs() - start_Time ) / 1e3 );
printf( "fill zones T13: %.3f ms\n", (float)( GetRunningMicroSecs() - start_Time ) / 1e3 );
start_Time = GetRunningMicroSecs();
#endif
@@ -825,29 +835,18 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) &&
(m_render_engine == RENDER_ENGINE_OPENGL_LEGACY) )
{
// Add zones poly contourns
// /////////////////////////////////////////////////////////////////////
for( unsigned int lIdx = 0; lIdx < layer_id.size(); ++lIdx )
// ADD COPPER ZONES
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
{
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
const ZONE_CONTAINER* zone = m_board->GetArea( ii );
wxASSERT( m_layers_poly.find( curr_layer_id ) != m_layers_poly.end() );
if( zone == nullptr )
break;
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
auto layerContainer = m_layers_poly.find( zone->GetLayer() );
// ADD COPPER ZONES
for( int ii = 0; ii < m_board->GetAreaCount(); ++ii )
{
const ZONE_CONTAINER* zone = m_board->GetArea( ii );
const LAYER_NUM zonelayer = zone->GetLayer();
if( zonelayer == curr_layer_id )
{
zone->TransformSolidAreasShapesToPolygonSet( *layerPoly,
segcountforcircle,
correctionFactor );
}
}
if( layerContainer != m_layers_poly.end() )
zone->TransformSolidAreasShapesToPolygonSet( *layerContainer->second, segcountforcircle, correctionFactor );
}
}
@@ -865,22 +864,35 @@ void CINFO3D_VISU::createLayers( REPORTER *aStatusTextReporter )
if( GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) &&
(m_render_engine == RENDER_ENGINE_OPENGL_LEGACY) )
{
const int nLayers = layer_id.size();
std::atomic<size_t> nextItem( 0 );
std::atomic<size_t> threadsFinished( 0 );
#pragma omp parallel for
for( signed int lIdx = 0; lIdx < nLayers; ++lIdx )
size_t parallelThreadCount = std::min<size_t>(
std::max<size_t>( std::thread::hardware_concurrency(), 2 ),
layer_id.size() );
for( size_t ii = 0; ii < parallelThreadCount; ++ii )
{
const PCB_LAYER_ID curr_layer_id = layer_id[lIdx];
std::thread t = std::thread( [&nextItem, &threadsFinished, &layer_id, this]()
{
for( size_t i = nextItem.fetch_add( 1 );
i < layer_id.size();
i = nextItem.fetch_add( 1 ) )
{
auto layerPoly = m_layers_poly.find( layer_id[i] );
wxASSERT( m_layers_poly.find( curr_layer_id ) != m_layers_poly.end() );
if( layerPoly != m_layers_poly.end() )
// This will make a union of all added contours
layerPoly->second->Simplify( SHAPE_POLY_SET::PM_FAST );
}
SHAPE_POLY_SET *layerPoly = m_layers_poly[curr_layer_id];
threadsFinished++;
} );
wxASSERT( layerPoly != NULL );
// This will make a union of all added contourns
layerPoly->Simplify( SHAPE_POLY_SET::PM_FAST );
t.detach();
}
while( threadsFinished < parallelThreadCount )
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
#ifdef PRINT_STATISTICS_3D_VIEWER
+12 -1
View File
@@ -52,8 +52,19 @@ void CINFO3D_VISU::buildPadShapePolygon( const D_PAD* aPad,
case PAD_SHAPE_CIRCLE:
case PAD_SHAPE_OVAL:
case PAD_SHAPE_ROUNDRECT:
aPad->TransformShapeWithClearanceToPolygon( aCornerBuffer, aInflateValue.x,
{
// We are using TransformShapeWithClearanceToPolygon to build the shape.
// Currently, this method uses only the same inflate value for X and Y dirs.
// so because here this is not the case, we use a inflated dummy pad to build
// the polygonal shape
// TODO: remove this dummy pad when TransformShapeWithClearanceToPolygon will use
// a wxSize to inflate the pad size
D_PAD dummy( *aPad );
wxSize new_size = aPad->GetSize() + aInflateValue + aInflateValue;
dummy.SetSize( new_size );
dummy.TransformShapeWithClearanceToPolygon( aCornerBuffer, 0,
aSegmentsPerCircle, aCorrectionFactor );
}
break;
case PAD_SHAPE_TRAPEZOID:
+69 -45
View File
@@ -39,7 +39,7 @@
#include <class_board.h>
#include "status_text_reporter.h"
#include <gl_context_mgr.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
#include <profile.h> // To use GetRunningMicroSecs or another profiling utility
#include <bitmaps.h>
#include <hotkeys_basic.h>
#include <menus_helpers.h>
@@ -701,27 +701,27 @@ void EDA_3D_CANVAS::OnPopUpMenu( wxCommandEvent &event )
break;
case ID_POPUP_VIEW_XPOS:
key = 'x';
break;
case ID_POPUP_VIEW_XNEG:
key = 'X';
break;
case ID_POPUP_VIEW_YPOS:
key = 'y';
case ID_POPUP_VIEW_XNEG:
key = GR_KB_SHIFT + 'X';
break;
case ID_POPUP_VIEW_YNEG:
case ID_POPUP_VIEW_YPOS:
key = 'Y';
break;
case ID_POPUP_VIEW_YNEG:
key = GR_KB_SHIFT + 'Y';
break;
case ID_POPUP_VIEW_ZPOS:
key = 'z';
key = 'Z';
break;
case ID_POPUP_VIEW_ZNEG:
key = 'Z';
key = GR_KB_SHIFT + 'Z';
break;
case ID_POPUP_MOVE3D_LEFT:
@@ -758,12 +758,27 @@ void EDA_3D_CANVAS::OnCharHook( wxKeyEvent &event )
void EDA_3D_CANVAS::OnKeyEvent( wxKeyEvent& event )
{
//wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::OnKeyEvent" ) );
int localkey = event.GetKeyCode();
// Use only upper char values in comparisons
// (the Shift modifier is a separate attribute)
if( (localkey >= 'a') && (localkey <= 'z') )
localkey += 'A' - 'a';
if( m_camera_is_moving )
return;
SetView3D( event.GetKeyCode() );
event.Skip();
if( event.ShiftDown() )
localkey |= GR_KB_SHIFT;
if( event.ControlDown() )
localkey |= GR_KB_CTRL;
if( event.AltDown() )
localkey |= GR_KB_ALT;
if( !SetView3D( localkey ) )
event.Skip();
}
@@ -875,54 +890,55 @@ void EDA_3D_CANVAS::move_pivot_based_on_cur_mouse_position()
}
void EDA_3D_CANVAS::SetView3D( int keycode )
bool EDA_3D_CANVAS::SetView3D( int aKeycode )
{
if( m_camera_is_moving )
return;
return false;
const float delta_move = m_delta_move_step_factor * m_settings.CameraGet().ZoomGet();
const float arrow_moving_time_speed = 8.0f;
bool handled = false;
switch( keycode )
switch( aKeycode )
{
case WXK_SPACE:
move_pivot_based_on_cur_mouse_position();
return;
return true;
case WXK_LEFT:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( -delta_move, 0.0f, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_RIGHT:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( +delta_move, 0.0f, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_UP:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( 0.0f, +delta_move, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_DOWN:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_LINEAR );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Pan_T1( SFVEC3F( 0.0f, -delta_move, 0.0f ) );
request_start_moving_camera( arrow_moving_time_speed, false );
return;
return true;
case WXK_HOME:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
request_start_moving_camera( glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case WXK_END:
break;
@@ -932,25 +948,28 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().RotateZ_T1( glm::radians( 45.0f ) );
request_start_moving_camera();
handled = true;
break;
case WXK_F1:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
if( m_settings.CameraGet().Zoom_T1( 1.4f ) )
request_start_moving_camera( 3.0f );
return;
return true;
case WXK_F2:
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
if( m_settings.CameraGet().Zoom_T1( 1/1.4f ) )
request_start_moving_camera( 3.0f );
return;
return true;
case '+':
break;
case '-':
break;
@@ -959,6 +978,7 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL,
!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL ) );
ReloadRequest();
handled = true;
break;
case 's':
@@ -966,6 +986,7 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT,
!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT ) );
ReloadRequest();
handled = true;
break;
case 'v':
@@ -973,6 +994,7 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL,
!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL ) );
ReloadRequest();
handled = true;
break;
case 'r':
@@ -981,62 +1003,62 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
request_start_moving_camera( glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case 'x':
case 'X':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateZ_T1( glm::radians( -90.0f ) );
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
request_start_moving_camera();
return;
return true;
case 'X':
case GR_KB_SHIFT + 'X':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateZ_T1( glm::radians( 90.0f ) );
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
request_start_moving_camera();
return;
return true;
case 'y':
case 'Y':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
request_start_moving_camera();
return;
return true;
case 'Y':
case GR_KB_SHIFT + 'Y':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateX_T1( glm::radians( -90.0f ) );
m_settings.CameraGet().RotateZ_T1( glm::radians( -180.0f ) );
request_start_moving_camera();
return;
case 'z':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
request_start_moving_camera(
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case 'Z':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateX_T1( glm::radians( -180.0f ) );
request_start_moving_camera(
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return;
return true;
case GR_KB_SHIFT + 'Z':
m_settings.CameraGet().SetInterpolateMode( INTERPOLATION_BEZIER );
m_settings.CameraGet().SetT0_and_T1_current_T();
m_settings.CameraGet().Reset_T1();
m_settings.CameraGet().RotateY_T1( glm::radians( 180.0f ) );
request_start_moving_camera(
glm::min( glm::max( m_settings.CameraGet().ZoomGet(), 0.5f ), 1.125f ) );
return true;
default:
return;
return false;
}
m_mouse_was_moved = true;
@@ -1045,6 +1067,8 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
DisplayStatus();
Request_refresh();
return handled;
}
+6 -4
View File
@@ -100,9 +100,11 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
/**
* @brief SetView3D - Helper function to call view commands
* @param keycode: ascii key commands
* @param aKeycode: ascii key commands
* @return true if the key code was handled,
* false if no command found for this code.
*/
void SetView3D( int keycode );
bool SetView3D( int aKeycode );
/**
* @brief RenderEngineChanged - Notify that the render engine was changed
@@ -121,6 +123,8 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
*/
void Request_refresh( bool aRedrawImmediately = true );
void OnKeyEvent( wxKeyEvent& event );
private:
void OnPaint( wxPaintEvent &event );
@@ -149,8 +153,6 @@ class EDA_3D_CANVAS : public HIDPI_GL_CANVAS
void OnCharHook( wxKeyEvent& event );
void OnKeyEvent( wxKeyEvent& event );
void OnTimerTimeout_Editing( wxTimerEvent& event );
/**
@@ -35,7 +35,7 @@
#include "../../3d_fastmath.h"
#include <trigo.h>
#include <project.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
#include <profile.h> // To use GetRunningMicroSecs or another profiling utility
void C3D_RENDER_OGL_LEGACY::add_object_to_triangle_layer( const CFILLEDCIRCLE2D * aFilledCircle,
@@ -369,7 +369,8 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
// /////////////////////////////////////////////////////////////////////////
CCONTAINER2D boardContainer;
Convert_shape_line_polygon_to_triangles( m_settings.GetBoardPoly(),
SHAPE_POLY_SET tmpBoard = m_settings.GetBoardPoly();
Convert_shape_line_polygon_to_triangles( tmpBoard,
boardContainer,
m_settings.BiuTo3Dunits(),
(const BOARD_ITEM &)*m_settings.GetBoard() );
@@ -614,11 +615,9 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
{
const SHAPE_POLY_SET *polyList = map_poly.at( layer_id );
layerTriangles->AddToMiddleContourns( *polyList,
layer_z_bot,
layer_z_top,
m_settings.BiuTo3Dunits(),
false );
if( polyList->OutlineCount() > 0 )
layerTriangles->AddToMiddleContourns( *polyList, layer_z_bot, layer_z_top,
m_settings.BiuTo3Dunits(), false );
}
// Create display list
@@ -642,7 +641,7 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER *aStatusTextReporter )
if( aStatusTextReporter )
aStatusTextReporter->Report( _( "Loading 3D models" ) );
load_3D_models();
load_3D_models( aStatusTextReporter );
#ifdef PRINT_STATISTICS_3D_VIEWER
unsigned stats_end_models_Load_Time = GetRunningMicroSecs();
@@ -768,9 +767,11 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
{
const VIA *via = static_cast<const VIA*>(track);
const float holediameter = via->GetDrillValue() * m_settings.BiuTo3Dunits();
const float thickness = m_settings.GetCopperThickness3DU();
const float hole_inner_radius = ( holediameter / 2.0f );
const float holediameter = via->GetDrillValue() * m_settings.BiuTo3Dunits();
const float thickness = m_settings.GetCopperThickness3DU();
const int nrSegments = m_settings.GetNrSegmentsCircle( via->GetDrillValue() );
const double correctionFactor = m_settings.GetCircleCorrectionFactor( nrSegments );
const float hole_inner_radius = ( holediameter / 2.0f ) * correctionFactor;
const SFVEC2F via_center( via->GetStart().x * m_settings.BiuTo3Dunits(),
-via->GetStart().y * m_settings.BiuTo3Dunits() );
@@ -790,7 +791,7 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
hole_inner_radius + thickness,
ztop,
zbot,
m_settings.GetNrSegmentsCircle( via->GetDrillValue() ),
nrSegments,
layerTriangleVIA );
}
}
@@ -829,20 +830,20 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
// we use the hole diameter to calculate the seg count.
// for round holes, drillsize.x == drillsize.y
// for oblong holes, the diameter is the smaller of
// (drillsize.x, drillsize.y)
const int diam = std::min( drillsize.x, drillsize.y ) +
m_settings.GetCopperThicknessBIU() * 2;
const int segmentsPerCircle = m_settings.GetNrSegmentsCircle( diam );
// for slots, the diameter is the smaller of (drillsize.x, drillsize.y)
int copperThickness = m_settings.GetCopperThicknessBIU();
int radius = std::min( drillsize.x, drillsize.y ) / 2 + copperThickness;
int nrSegments = m_settings.GetNrSegmentsCircle( radius * 2 );
double correctionFactor = m_settings.GetCircleCorrectionFactor( nrSegments );
int correction = radius * ( correctionFactor - 1 );
pad->BuildPadDrillShapePolygon( tht_outer_holes_poly,
m_settings.GetCopperThicknessBIU(),
segmentsPerCircle );
copperThickness + correction,
nrSegments );
pad->BuildPadDrillShapePolygon( tht_inner_holes_poly,
0,
segmentsPerCircle );
correction,
nrSegments );
}
}
}
@@ -921,7 +922,7 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads()
* cache for this render. (cache based on C_OGL_3DMODEL with associated
* openGL lists in GPU memory)
*/
void C3D_RENDER_OGL_LEGACY::load_3D_models()
void C3D_RENDER_OGL_LEGACY::load_3D_models( REPORTER *aStatusTextReporter )
{
if( (!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL )) &&
(!m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT )) &&
@@ -943,7 +944,18 @@ void C3D_RENDER_OGL_LEGACY::load_3D_models()
{
if( !sM->m_Filename.empty() )
{
if( aStatusTextReporter )
{
// Display the short filename of the 3D model loaded:
// (the full name is usually too long to be displayed)
wxFileName fn( sM->m_Filename );
wxString msg;
msg.Printf( _( "Loading %s" ), fn.GetFullName() );
aStatusTextReporter->Report( msg );
}
// Check if the model is not present in our cache map
// (Not already loaded in memory)
if( m_3dmodel_map.find( sM->m_Filename ) == m_3dmodel_map.end() )
{
// It is not present, try get it from cache
@@ -174,7 +174,7 @@ private:
void generate_3D_Vias_and_Pads();
void load_3D_models();
void load_3D_models( REPORTER *aStatusTextReporter );
/**
* @brief render_3D_models
@@ -218,7 +218,7 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel,
glDisableClientState( GL_NORMAL_ARRAY );
glDisableClientState( GL_VERTEX_ARRAY );
glFinish();
glFlush();
delete [] pColorRGBA;
}
@@ -319,7 +319,7 @@ C_OGL_3DMODEL::C_OGL_3DMODEL( const S3DMODEL &a3DModel,
for( unsigned int mesh_i = 0; mesh_i < a3DModel.m_MeshesSize; ++mesh_i )
m_model_bbox.Union( m_meshs_bbox[mesh_i] );
glFinish();
glFlush();
}
}
@@ -30,6 +30,9 @@
#include "clayer_triangles.h"
#include <wx/debug.h> // For the wxASSERT
#include <mutex>
#include <thread>
#include <atomic>
CLAYER_TRIANGLE_CONTAINER::CLAYER_TRIANGLE_CONTAINER( unsigned int aNrReservedTriangles,
@@ -219,8 +222,8 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const std::vector< SFVEC2F > &aCont
const SFVEC2F &v0 = aContournPoints[i + 0];
const SFVEC2F &v1 = aContournPoints[i + 1];
#pragma omp critical
{
std::lock_guard<std::mutex> lock( m_middle_layer_lock );
m_layer_middle_contourns_quads->AddQuad( SFVEC3F( v0.x, v0.y, zTop ),
SFVEC3F( v1.x, v1.y, zTop ),
SFVEC3F( v1.x, v1.y, zBot ),
@@ -279,8 +282,6 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_POLY_SET &aPolySet,
double aBiuTo3Du,
bool aInvertFaceDirection )
{
wxASSERT( aPolySet.OutlineCount() > 0 );
if( aPolySet.OutlineCount() == 0 )
return;
@@ -305,21 +306,41 @@ void CLAYER_TRIANGLES::AddToMiddleContourns( const SHAPE_POLY_SET &aPolySet,
m_layer_middle_contourns_quads->Reserve_More( nrContournPointsToReserve * 2,
true );
#pragma omp parallel for
for( signed int i = 0; i < aPolySet.OutlineCount(); ++i )
std::atomic<int> nextItem( 0 );
std::atomic<size_t> threadsFinished( 0 );
size_t parallelThreadCount = std::min<size_t>(
std::max<size_t>( std::thread::hardware_concurrency(), 2 ),
static_cast<size_t>( aPolySet.OutlineCount() ) );
for( size_t ii = 0; ii < parallelThreadCount; ++ii )
{
// Add outline
const SHAPE_LINE_CHAIN& pathOutline = aPolySet.COutline( i );
AddToMiddleContourns( pathOutline, zBot, zTop, aBiuTo3Du, aInvertFaceDirection );
// Add holes for this outline
for( int h = 0; h < aPolySet.HoleCount( i ); ++h )
std::thread t = std::thread( [&]()
{
const SHAPE_LINE_CHAIN &hole = aPolySet.CHole( i, h );
AddToMiddleContourns( hole, zBot, zTop, aBiuTo3Du, aInvertFaceDirection );
}
for( int i = nextItem.fetch_add( 1 );
i < aPolySet.OutlineCount();
i = nextItem.fetch_add( 1 ) )
{
// Add outline
const SHAPE_LINE_CHAIN& pathOutline = aPolySet.COutline( i );
AddToMiddleContourns( pathOutline, zBot, zTop, aBiuTo3Du, aInvertFaceDirection );
// Add holes for this outline
for( int h = 0; h < aPolySet.HoleCount( i ); ++h )
{
const SHAPE_LINE_CHAIN &hole = aPolySet.CHole( i, h );
AddToMiddleContourns( hole, zBot, zTop, aBiuTo3Du, aInvertFaceDirection );
}
}
threadsFinished++;
} );
t.detach();
}
while( threadsFinished < parallelThreadCount )
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
@@ -35,6 +35,7 @@
#include <geometry/shape_line_chain.h>
#include <geometry/shape_poly_set.h>
#include <vector>
#include <mutex>
typedef std::vector< SFVEC3F > SFVEC3F_VECTOR;
@@ -174,6 +175,8 @@ public:
float zTop,
bool aInvertFaceDirection );
std::mutex m_middle_layer_lock;
CLAYER_TRIANGLE_CONTAINER *m_layer_top_segment_ends;
CLAYER_TRIANGLE_CONTAINER *m_layer_top_triangles;
CLAYER_TRIANGLE_CONTAINER *m_layer_middle_contourns_quads;
@@ -29,6 +29,7 @@
#include "ccontainer2d.h"
#include <vector>
#include <mutex>
#include <boost/range/algorithm/partition.hpp>
#include <boost/range/algorithm/nth_element.hpp>
#include <wx/debug.h>
@@ -46,6 +47,7 @@ CGENERICCONTAINER2D::CGENERICCONTAINER2D( OBJECT2D_TYPE aObjType )
void CGENERICCONTAINER2D::Clear()
{
std::lock_guard<std::mutex> lock( m_lock );
m_bbox.Reset();
for( LIST_OBJECT2D::iterator ii = m_objects.begin();
@@ -32,6 +32,7 @@
#include "../shapes2D/cobject2d.h"
#include <list>
#include <mutex>
typedef std::list<COBJECT2D *> LIST_OBJECT2D;
typedef std::list<const COBJECT2D *> CONST_LIST_OBJECT2D;
@@ -52,6 +53,7 @@ public:
{
if( aObject ) // Only add if it is a valid pointer
{
std::lock_guard<std::mutex> lock( m_lock );
m_objects.push_back( aObject );
m_bbox.Union( aObject->GetBBox() );
}
@@ -70,6 +72,7 @@ public:
CONST_LIST_OBJECT2D &aOutList ) const = 0;
private:
std::mutex m_lock;
};
@@ -46,7 +46,7 @@
#include <class_module.h>
#include <base_units.h>
#include <profile.h> // To use GetRunningMicroSecs or an other profiling utility
#include <profile.h> // To use GetRunningMicroSecs or another profiling utility
/**
* Scale convertion from 3d model units to pcb units
@@ -918,7 +918,6 @@ void C3D_RENDER_RAYTRACING::reload( REPORTER *aStatusTextReporter )
}
m_accelerator = 0;
//m_accelerator = new CGRID( m_object_container );
m_accelerator = new CBVH_PBRT( m_object_container );
#ifdef PRINT_STATISTICS_3D_VIEWER
@@ -1211,7 +1210,7 @@ void C3D_RENDER_RAYTRACING::load_3D_models()
wxPoint pos = module->GetPosition();
glm::mat4 moduleMatrix = glm::mat4();
glm::mat4 moduleMatrix = glm::mat4( 1.0f );
moduleMatrix = glm::translate( moduleMatrix,
SFVEC3F( pos.x * m_settings.BiuTo3Dunits(),
File diff suppressed because it is too large Load Diff
@@ -131,7 +131,7 @@ private:
unsigned long int m_stats_start_rendering_time;
/// Save the number of blocks progress of the render
long m_nrBlocksRenderProgress;
size_t m_nrBlocksRenderProgress;
CPOSTSHADER_SSAO m_postshader_ssao;
@@ -165,7 +165,7 @@ private:
std::vector< SFVEC2UI > m_blockPositions;
/// this flags if a position was already processed (cleared each new render)
std::vector< bool > m_blockPositionsWasProcessed;
std::vector< int > m_blockPositionsWasProcessed;
/// this encodes the Morton code positions (on fast preview mode)
std::vector< SFVEC2UI > m_blockPositionsFast;
@@ -50,9 +50,9 @@ void RAY::Init( const SFVEC3F& o, const SFVEC3F& d )
// Amy Williams Steve Barrus R. Keith Morley Peter Shirley
// University of Utah
// http://people.csail.mit.edu/amy/papers/box-jgt.pdf
m_dirIsNeg[0] = m_Dir.x <= 0.0f;
m_dirIsNeg[1] = m_Dir.y <= 0.0f;
m_dirIsNeg[2] = m_Dir.z <= 0.0f;
m_dirIsNeg[0] = m_Dir.x < 0.0f;
m_dirIsNeg[1] = m_Dir.y < 0.0f;
m_dirIsNeg[2] = m_Dir.z < 0.0f;
// ray slope
@@ -35,9 +35,9 @@
#include <wx/glcanvas.h> // CALLBACK definition, needed on Windows
// alse needed on OSX to define __DARWIN__
#include <geometry/polygon_triangulation.h>
#include "../../../3d_fastmath.h"
#include <poly2tri/poly2tri.h>
CTRIANGLE2D::CTRIANGLE2D ( const SFVEC2F &aV1,
@@ -126,172 +126,28 @@ bool CTRIANGLE2D::IsPointInside( const SFVEC2F &aPoint ) const
const float c = 1.0f - a - b;
return 0.0f <= c && c <= 1.0f;
/*
return 0.0f <= a && a <= 1.0f &&
0.0f <= b && b <= 1.0f &&
0.0f <= c && c <= 1.0f;*/
}
template <class C> void FreeClear( C & cntr )
{
for( typename C::iterator it = cntr.begin();
it != cntr.end();
++it )
{
delete * it;
}
cntr.clear();
}
// Note: Please check edgeshrink.cpp in order to learn the EdgeShrink propose
#define APPLY_EDGE_SHRINK
#ifdef APPLY_EDGE_SHRINK
extern void EdgeShrink( std::vector<SFVEC2I64> &aPath );
#define POLY_SCALE_FACT 256
#define POLY_SCALE_FACT_INVERSE (1.0 / (double)(POLY_SCALE_FACT))
#endif
void Convert_shape_line_polygon_to_triangles( const SHAPE_POLY_SET &aPolyList,
void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET &aPolyList,
CGENERICCONTAINER2D &aDstContainer,
float aBiuTo3DunitsScale ,
const BOARD_ITEM &aBoardItem )
{
unsigned int nOutlines = aPolyList.OutlineCount();
aPolyList.CacheTriangulation();
const double conver_d = (double)aBiuTo3DunitsScale;
for( unsigned int idx = 0; idx < nOutlines; ++idx )
for( unsigned int i = 0; i < aPolyList.TriangulatedPolyCount(); i++ )
{
const SHAPE_LINE_CHAIN &outlinePath = aPolyList.COutline( idx );
auto triPoly = aPolyList.TriangulatedPolygon( i );
wxASSERT( outlinePath.PointCount() >= 3 );
std::vector<SFVEC2I64> scaledOutline;
scaledOutline.resize( outlinePath.PointCount() );
// printf("\nidx: %u\n", idx);
// Apply a scale to the points
for( unsigned int i = 0;
i < (unsigned int)outlinePath.PointCount();
++i )
for( size_t i = 0; i < triPoly->GetTriangleCount(); i++ )
{
const VECTOR2I& a = outlinePath.CPoint( i );
#ifdef APPLY_EDGE_SHRINK
scaledOutline[i] = SFVEC2I64( (glm::int64)a.x * POLY_SCALE_FACT,
(glm::int64)a.y * POLY_SCALE_FACT );
#else
scaledOutline[i] = SFVEC2I64( (glm::int64)a.x,
(glm::int64)a.y );
#endif
}
#ifdef APPLY_EDGE_SHRINK
// Apply a modification to the points
EdgeShrink( scaledOutline );
#endif
// Copy to a array of pointers
std::vector<p2t::Point*> polyline;
polyline.resize( outlinePath.PointCount() );
for( unsigned int i = 0;
i < (unsigned int)scaledOutline.size();
++i )
{
const SFVEC2I64 &a = scaledOutline[i];
//printf("%lu %lu\n", a.x, a.y);
polyline[i] = new p2t::Point( (double)a.x,
(double)a.y );
}
// Start creating the structured to be triangulated
p2t::CDT* cdt = new p2t::CDT( polyline );
// Add holes for this outline
unsigned int nHoles = aPolyList.HoleCount( idx );
std::vector< std::vector<p2t::Point*> > polylineHoles;
polylineHoles.resize( nHoles );
for( unsigned int idxHole = 0; idxHole < nHoles; ++idxHole )
{
const SHAPE_LINE_CHAIN &outlineHoles = aPolyList.CHole( idx,
idxHole );
wxASSERT( outlineHoles.PointCount() >= 3 );
std::vector<SFVEC2I64> scaledHole;
scaledHole.resize( outlineHoles.PointCount() );
// Apply a scale to the points
for( unsigned int i = 0;
i < (unsigned int)outlineHoles.PointCount();
++i )
{
const VECTOR2I &h = outlineHoles.CPoint( i );
#ifdef APPLY_EDGE_SHRINK
scaledHole[i] = SFVEC2I64( (glm::int64)h.x * POLY_SCALE_FACT,
(glm::int64)h.y * POLY_SCALE_FACT );
#else
scaledHole[i] = SFVEC2I64( (glm::int64)h.x,
(glm::int64)h.y );
#endif
}
#ifdef APPLY_EDGE_SHRINK
// Apply a modification to the points
EdgeShrink( scaledHole );
#endif
// Resize and reserve space
polylineHoles[idxHole].resize( outlineHoles.PointCount() );
for( unsigned int i = 0;
i < (unsigned int)outlineHoles.PointCount();
++i )
{
const SFVEC2I64 &h = scaledHole[i];
polylineHoles[idxHole][i] = new p2t::Point( h.x, h.y );
}
cdt->AddHole( polylineHoles[idxHole] );
}
// Triangulate
cdt->Triangulate();
// Hint: if you find any crashes on the triangulation poly2tri library,
// you can use the following site to debug the points and it will mark
// the errors in the polygon:
// http://r3mi.github.io/poly2tri.js/
// Get and add triangles
std::vector<p2t::Triangle*> triangles;
triangles = cdt->GetTriangles();
#ifdef APPLY_EDGE_SHRINK
const double conver_d = (double)aBiuTo3DunitsScale *
POLY_SCALE_FACT_INVERSE;
#else
const double conver_d = (double)aBiuTo3DunitsScale;
#endif
for( unsigned int i = 0; i < triangles.size(); ++i )
{
p2t::Triangle& t = *triangles[i];
p2t::Point& a = *t.GetPoint( 0 );
p2t::Point& b = *t.GetPoint( 1 );
p2t::Point& c = *t.GetPoint( 2 );
VECTOR2I a;
VECTOR2I b;
VECTOR2I c;
triPoly->GetTriangle( i, a, b, c );
aDstContainer.Add( new CTRIANGLE2D( SFVEC2F( a.x * conver_d,
-a.y * conver_d ),
@@ -302,15 +158,5 @@ void Convert_shape_line_polygon_to_triangles( const SHAPE_POLY_SET &aPolyList,
aBoardItem ) );
}
// Delete created data
delete cdt;
// Free points
FreeClear(polyline);
for( unsigned int idxHole = 0; idxHole < nHoles; ++idxHole )
{
FreeClear( polylineHoles[idxHole] );
}
}
}
@@ -68,7 +68,7 @@ public:
};
void Convert_shape_line_polygon_to_triangles( const SHAPE_POLY_SET &aPolyList,
void Convert_shape_line_polygon_to_triangles( SHAPE_POLY_SET &aPolyList,
CGENERICCONTAINER2D &aDstContainer,
float aBiuTo3DunitsScale,
const BOARD_ITEM &aBoardItem );
@@ -1,89 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file edgeshrink.cpp
* @brief The edgeShrink function was found in the project clip2tri by the:
* Bitfighter project (http://bitfighter.org)
* https://github.com/raptor/clip2tri
* https://github.com/raptor/clip2tri/blob/f62a734d22733814b8a970ed8a68a4d94c24fa5f/clip2tri/clip2tri.cpp#L150
*/
#include <plugins/3dapi/xv3d_types.h>
#include <vector>
// clip2tri is Licenced under:
// The MIT License (MIT)
// Copyright (c) 2014 Bitfighter developers
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// Shrink large polygons by reducing each coordinate by 1 in the
// general direction of the last point as we wind around
//
// This normally wouldn't work in every case, but our upscaled-by-1000 polygons
// have little chance to create new duplicate points with this method.
//
// For information on why this was needed, see:
//
// https://github.com/greenm01/poly2tri/issues/90
//
#define S_INC 1
void EdgeShrink( std::vector<SFVEC2I64> &aPath )
{
unsigned int prev = aPath.size() - 1;
for( unsigned int i = 0; i < aPath.size(); i++ )
{
// Adjust coordinate by 1 depending on the direction
(aPath[i].x - aPath[prev].x) > 0 ? aPath[i].x -= S_INC :
aPath[i].x += S_INC;
(aPath[i].y - aPath[prev].y) > 0 ? aPath[i].y -= S_INC :
aPath[i].y += S_INC;
prev = i;
}
}
@@ -271,7 +271,7 @@ SFVEC3F CBBOX::Offset( const SFVEC3F &p ) const
// https://github.com/mmp/pbrt-v2/blob/master/src/core/geometry.cpp#L68
// /////////////////////////////////////////////////////////////////////////
#if 0
bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 )
bool CBBOX::Intersect( const RAY &aRay, float *aOutHitt0, float *aOutHitt1 ) const
{
float t0 = 0.0f;
float t1 = FLT_MAX;
+39 -18
View File
@@ -31,6 +31,10 @@
#include "buffers_debug.h"
#include <string.h> // For memcpy
#include <atomic>
#include <thread>
#include <chrono>
#ifndef CLAMP
#define CLAMP(n, min, max) {if( n < min ) n=min; else if( n > max ) n = max;}
#endif
@@ -469,34 +473,51 @@ void CIMAGE::EfxFilter( CIMAGE *aInImg, E_FILTER aFilterType )
aInImg->m_wraping = WRAP_CLAMP;
m_wraping = WRAP_CLAMP;
#pragma omp parallel for
for( int iy = 0; iy < (int)m_height; iy++)
std::atomic<size_t> nextRow( 0 );
std::atomic<size_t> threadsFinished( 0 );
size_t parallelThreadCount = std::max<size_t>( std::thread::hardware_concurrency(), 2 );
for( size_t ii = 0; ii < parallelThreadCount; ++ii )
{
for( int ix = 0; ix < (int)m_width; ix++ )
std::thread t = std::thread( [&]()
{
int v = 0;
for( int sy = 0; sy < 5; sy++ )
for( size_t iy = nextRow.fetch_add( 1 );
iy < m_height;
iy = nextRow.fetch_add( 1 ) )
{
for( int sx = 0; sx < 5; sx++ )
for( size_t ix = 0; ix < m_width; ix++ )
{
int factor = filter.kernel[sx][sy];
unsigned char pixelv = aInImg->Getpixel( ix + sx - 2,
iy + sy - 2 );
int v = 0;
v += pixelv * factor;
for( size_t sy = 0; sy < 5; sy++ )
{
for( size_t sx = 0; sx < 5; sx++ )
{
int factor = filter.kernel[sx][sy];
unsigned char pixelv = aInImg->Getpixel( ix + sx - 2,
iy + sy - 2 );
v += pixelv * factor;
}
}
v /= filter.div;
v += filter.offset;
CLAMP(v, 0, 255);
//TODO: This needs to write to a separate buffer
m_pixels[ix + iy * m_width] = v;
}
}
v /= filter.div;
threadsFinished++;
} );
v += filter.offset;
CLAMP(v, 0, 255);
m_pixels[ix + iy * m_width] = v;
}
t.detach();
}
while( threadsFinished < parallelThreadCount )
std::this_thread::sleep_for( std::chrono::milliseconds( 10 ) );
}
+423
View File
@@ -0,0 +1,423 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-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 3d_menubar.cpp
*/
#include <fctsys.h>
#include <eda_3d_viewer.h>
#include <3d_canvas/cinfo3d_visu.h>
#include <menus_helpers.h>
#include <3d_viewer_id.h>
#include "help_common_strings.h"
extern struct EDA_HOTKEY_CONFIG g_3DViewer_Hokeys_Descr[];
void EDA_3D_VIEWER::CreateMenuBar()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::CreateMenuBar" ) );
wxMenuBar* menuBar = new wxMenuBar;
wxMenu* fileMenu = new wxMenu;
wxMenu* editMenu = new wxMenu;
wxMenu* 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_MENU3D_MOUSEWHEEL_PANNING,
_( "Use Touchpad to Pan" ),
KiBitmap( tools_xpm ), wxITEM_CHECK );
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_TOOL_SET_VISIBLE_ITEMS,
_( "Display Options" ),
KiBitmap( read_setup_xpm ) );
wxMenu * renderEngineList = new wxMenu;
AddMenuItem( prefsMenu, renderEngineList, ID_MENU3D_ENGINE,
_( "Render Engine" ), KiBitmap( render_mode_xpm ) );
renderEngineList->AppendRadioItem( ID_MENU3D_ENGINE_OPENGL_LEGACY,
_( "OpenGL" ),
wxEmptyString );
renderEngineList->AppendRadioItem( ID_MENU3D_ENGINE_RAYTRACING,
_( "Raytracing" ),
wxEmptyString );
renderEngineList->Check( ID_MENU3D_ENGINE_OPENGL_LEGACY,
m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY );
renderEngineList->Check( ID_MENU3D_ENGINE_RAYTRACING,
m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING );
wxMenu * renderOptionsMenu = new wxMenu;
AddMenuItem( prefsMenu, renderOptionsMenu, ID_MENU3D_FL,
_( "Render Options" ), KiBitmap( options_3drender_xpm ) );
wxMenu * materialsList = new wxMenu;
AddMenuItem( renderOptionsMenu, materialsList, ID_MENU3D_FL_RENDER_MATERIAL,
_( "Material Properties" ), KiBitmap( color_materials_xpm ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
_( "Use All Properties" ),
_( "Use all material properties from each 3D model file" ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY,
_( "Use Diffuse Only" ),
_( "Use only the diffuse color property from model 3D model file " ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
_( "CAD Color Style" ),
_( "Use a CAD color style based on the diffuse color of the material" ) );
// Add specific preferences for OpenGL
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_OPENGL = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL,
_( "OpenGL Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
_( "Show Copper Thickness" ),
_( "Shows the copper thickness on copper layers (slower loading)"),
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
_( "Show Model Bounding Boxes" ),
KiBitmap( ortho_xpm ), wxITEM_CHECK );
// Add specific preferences for Raytracing
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_RAYTRACING = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING,
_( "Raytracing Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
_( "Render Shadows" ),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
_( "Procedural Textures" ),
_( "Apply procedural textures to materials (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
_( "Add Floor" ),
_( "Adds a floor plane below the board (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
_( "Refractions" ),
_( "Render materials with refractions properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
_( "Reflections" ),
_( "Render materials with reflections properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
_( "Anti-aliasing" ),
_( "Render with improved quality on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
_( "Post-processing" ),
_( "Apply Screen Space Ambient Occlusion and Global Illumination reflections on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
prefsMenu->AppendSeparator();
// Colors, axis and grid elements
// /////////////////////////////////////////////////////////////////////////
// Add submenu set Colors
wxMenu * setColorMenu = new wxMenu;
AddMenuItem( prefsMenu, setColorMenu, ID_MENU3D_COLOR,
_( "Choose Colors" ), KiBitmap( palette_xpm ) );
wxMenu * setBgColorMenu = new wxMenu;
AddMenuItem( setColorMenu, setBgColorMenu, ID_MENU3D_BGCOLOR,
_( "Background Color" ), KiBitmap( palette_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_TOP_SELECTION,
_( "Background Top Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
_( "Background Bottom Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
_( "Silkscreen Color..." ), KiBitmap( setcolor_silkscreen_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
_( "Solder Mask Color..." ), KiBitmap( setcolor_soldermask_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
_( "Solder Paste Color..." ), KiBitmap( setcolor_solderpaste_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_COPPER_COLOR_SELECTION,
_( "Copper/Surface Finish Color..." ), KiBitmap( setcolor_copper_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_PCB_BODY_COLOR_SELECTION,
_( "Board Body Color..." ), KiBitmap( setcolor_board_body_xpm ) );
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
// Creates grid menu
// /////////////////////////////////////////////////////////////////////////
wxMenu * gridlistMenu = new wxMenu;
AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
_( "3D Grid" ), KiBitmap( grid_xpm ) );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString );
// If the grid is on, check the corresponding menuitem showing the grid size
if( m_settings.GridGet() != GRID3D_NONE )
{
gridlistMenu->Check( ID_MENU3D_GRID_10_MM, m_settings.GridGet() == GRID3D_10MM );
gridlistMenu->Check( ID_MENU3D_GRID_5_MM, m_settings.GridGet() == GRID3D_5MM );
gridlistMenu->Check( ID_MENU3D_GRID_2P5_MM, m_settings.GridGet() == GRID3D_2P5MM );
gridlistMenu->Check( ID_MENU3D_GRID_1_MM, m_settings.GridGet() == GRID3D_1MM );
}
else
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
// Reset options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_RESET_DEFAULTS,
_( "Reset to Default Settings" ),
KiBitmap( tools_xpm ) );
// Help menu
// /////////////////////////////////////////////////////////////////////////
menuBar->Append( helpMenu, _( "&Help" ) );
AddMenuItem( helpMenu, wxID_HELP,
_( "Pcbnew &Manual" ),
_( "Open Pcbnew Manual" ),
KiBitmap( online_help_xpm ) );
AddMenuItem( helpMenu, wxID_INDEX,
_( "&Getting Started in KiCad" ),
_( "Open \"Getting Started in KiCad\" guide for beginners" ),
KiBitmap( help_xpm ) );
wxString text = AddHotkeyName( _( "&List Hotkeys..." ), g_3DViewer_Hokeys_Descr, 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 );
SetMenuBarOptionsState();
}
void EDA_3D_VIEWER::SetMenuBarOptionsState()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::SetMenuBarOptionsState" ) );
wxMenuBar* menuBar = GetMenuBar();
if( menuBar == NULL )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::SetMenuBarOptionsState menuBar == NULL" ) );
return;
}
wxMenuItem* item;
// Set the state of toggle menus according to the current display options
item = menuBar->FindItem( ID_MENU3D_MOUSEWHEEL_PANNING );
item->Check( m_settings.GetFlag( FL_MOUSEWHEEL_PANNING ) );
item = menuBar->FindItem( ID_MENU3D_ENGINE_OPENGL_LEGACY );
item->Check( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY );
item = menuBar->FindItem( ID_MENU3D_ENGINE_RAYTRACING );
item->Check( m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_NORMAL );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_DIFFUSE_ONLY );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_CAD_MODE );
// OpenGL
item = menuBar->FindItem( ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS );
item->Check( m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) );
item = menuBar->FindItem( ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX );
item->Check( m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) );
// Raytracing
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_SHADOWS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_BACKFLOOR );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_REFRACTIONS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFRACTIONS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_REFLECTIONS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_POST_PROCESSING );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) );
item = menuBar->FindItem( ID_MENU3D_AXIS_ONOFF );
item->Check( m_settings.GetFlag( FL_AXIS ) );
}
+11 -397
View File
@@ -3,8 +3,8 @@
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
* Copyright (C) 2013 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-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
@@ -63,8 +63,8 @@ void EDA_3D_VIEWER::ReCreateMainToolbar()
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_TOOL_SET_VISIBLE_ITEMS, wxEmptyString,
KiBitmap( read_setup_xpm ),
_( "Set display options, and some layers visibility" ) );
KiBitmap( read_setup_xpm ),
_( "Set display options, and some layers visibility" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_RENDER_CURRENT_VIEW, wxEmptyString,
@@ -84,34 +84,34 @@ void EDA_3D_VIEWER::ReCreateMainToolbar()
_( "Redraw view" ) );
m_mainToolBar->AddTool( ID_ZOOM_PAGE, wxEmptyString, KiBitmap( zoom_fit_in_page_xpm ),
_( "Fit in page" ) );
_( "Zoom to fit 3D model" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_ROTATE3D_X_NEG, wxEmptyString,
KiBitmap( rotate_neg_x_xpm ),
_( "Rotate X <-" ) );
_( "Rotate X Clockwise" ) );
m_mainToolBar->AddTool( ID_ROTATE3D_X_POS, wxEmptyString,
KiBitmap( rotate_pos_x_xpm ),
_( "Rotate X ->" ) );
_( "Rotate X Counterclockwise" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_ROTATE3D_Y_NEG, wxEmptyString,
KiBitmap( rotate_neg_y_xpm ),
_( "Rotate Y <-" ) );
_( "Rotate Y Clockwise" ) );
m_mainToolBar->AddTool( ID_ROTATE3D_Y_POS, wxEmptyString,
KiBitmap( rotate_pos_y_xpm ),
_( "Rotate Y ->" ) );
_( "Rotate Y Counterclockwise" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_ROTATE3D_Z_NEG, wxEmptyString,
KiBitmap( rotate_neg_z_xpm ),
_( "Rotate Z <-" ) );
_( "Rotate Z Clockwise" ) );
m_mainToolBar->AddTool( ID_ROTATE3D_Z_POS, wxEmptyString,
KiBitmap( rotate_pos_z_xpm ),
_( "Rotate Z ->" ) );
_( "Rotate Z Counterclockwise" ) );
m_mainToolBar->AddSeparator();
m_mainToolBar->AddTool( ID_MOVE3D_LEFT, wxEmptyString, KiBitmap( left_xpm ),
@@ -135,392 +135,6 @@ void EDA_3D_VIEWER::ReCreateMainToolbar()
}
void EDA_3D_VIEWER::CreateMenuBar()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::CreateMenuBar" ) );
wxMenuBar* menuBar = new wxMenuBar;
wxMenu* fileMenu = new wxMenu;
wxMenu* editMenu = new wxMenu;
wxMenu* prefsMenu = new wxMenu;
wxMenu* helpMenu = new wxMenu;
menuBar->Append( fileMenu, _( "&File" ) );
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_PNG,
_( "Export Current View as PNG..." ),
KiBitmap( export_xpm ) );
AddMenuItem( fileMenu, ID_MENU_SCREENCOPY_JPEG,
_( "Export Current View as JPEG..." ),
KiBitmap( export_xpm ) );
fileMenu->AppendSeparator();
AddMenuItem( fileMenu, wxID_EXIT,
_( "&Exit" ),
KiBitmap( exit_xpm ) );
menuBar->Append( editMenu, _( "&Edit" ) );
AddMenuItem( editMenu, ID_TOOL_SCREENCOPY_TOCLIBBOARD,
_( "Copy 3D Image" ),
KiBitmap( copy_xpm ) );
menuBar->Append( prefsMenu, _( "&Preferences" ) );
AddMenuItem( prefsMenu, ID_MENU3D_MOUSEWHEEL_PANNING,
_( "Use Touchpad to Pan" ),
KiBitmap( tools_xpm ), wxITEM_CHECK );
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_REALISTIC_MODE,
_( "Realistic Mode" ),
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
wxMenu * renderEngineList = new wxMenu;
AddMenuItem( prefsMenu, renderEngineList, ID_MENU3D_ENGINE,
_( "Render Engine" ), KiBitmap( render_mode_xpm ) );
renderEngineList->AppendRadioItem( ID_MENU3D_ENGINE_OPENGL_LEGACY,
_( "OpenGL" ),
wxEmptyString );
renderEngineList->AppendRadioItem( ID_MENU3D_ENGINE_RAYTRACING,
_( "Raytracing" ),
wxEmptyString );
renderEngineList->Check( ID_MENU3D_ENGINE_OPENGL_LEGACY,
m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY );
renderEngineList->Check( ID_MENU3D_ENGINE_RAYTRACING,
m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING );
wxMenu * renderOptionsMenu = new wxMenu;
AddMenuItem( prefsMenu, renderOptionsMenu, ID_MENU3D_FL,
_( "Render Options" ), KiBitmap( options_3drender_xpm ) );
wxMenu * materialsList = new wxMenu;
AddMenuItem( renderOptionsMenu, materialsList, ID_MENU3D_FL_RENDER_MATERIAL,
_( "Material Properties" ), KiBitmap( color_materials_xpm ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL,
_( "Use All Properties" ),
_( "Use all material properties from each 3D model file" ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY,
_( "Use Diffuse Only" ),
_( "Use only the diffuse color property from model 3D model file " ) );
materialsList->AppendRadioItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE,
_( "CAD Color Style" ),
_( "Use a CAD color style based on the diffuse color of the material" ) );
// Add specific preferences for OpenGL
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_OPENGL = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL,
_( "OpenGL Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS,
_( "Show Copper Thickness" ),
_( "Shows the copper thickness on copper layers (slower loading)"),
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_OPENGL, ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX,
_( "Show Model Bounding Boxes" ),
KiBitmap( ortho_xpm ), wxITEM_CHECK );
// Add specific preferences for Raytracing
// /////////////////////////////////////////////////////////////////////////
wxMenu * renderOptionsMenu_RAYTRACING = new wxMenu;
AddMenuItem( renderOptionsMenu, renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING,
_( "Raytracing Options" ), KiBitmap( tools_xpm ) );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS,
_( "Render Shadows" ),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES,
_( "Procedural Textures" ),
_( "Apply procedural textures to materials (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_BACKFLOOR,
_( "Add Floor" ),
_( "Adds a floor plane below the board (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFRACTIONS,
_( "Refractions" ),
_( "Render materials with refractions properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_REFLECTIONS,
_( "Reflections" ),
_( "Render materials with reflections properties on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING,
_( "Anti-aliasing" ),
_( "Render with improoved quality on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
AddMenuItem( renderOptionsMenu_RAYTRACING, ID_MENU3D_FL_RAYTRACING_POST_PROCESSING,
_( "Post-processing" ),
_( "Apply Screen Space Ambient Occlusion and Global Illumination reflections on final render (slow)"),
KiBitmap( green_xpm ), wxITEM_CHECK );
prefsMenu->AppendSeparator();
// Colors, axis and grid elements
// /////////////////////////////////////////////////////////////////////////
// Add submenu set Colors
wxMenu * setColorMenu = new wxMenu;
AddMenuItem( prefsMenu, setColorMenu, ID_MENU3D_COLOR,
_( "Choose Colors" ), KiBitmap( palette_xpm ) );
wxMenu * setBgColorMenu = new wxMenu;
AddMenuItem( setColorMenu, setBgColorMenu, ID_MENU3D_BGCOLOR,
_( "Background Color" ), KiBitmap( palette_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_TOP_SELECTION,
_( "Background Top Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setBgColorMenu, ID_MENU3D_BGCOLOR_BOTTOM_SELECTION,
_( "Background Bottom Color..." ), KiBitmap( setcolor_3d_bg_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SILKSCREEN_COLOR_SELECTION,
_( "Silkscreen Color..." ), KiBitmap( setcolor_silkscreen_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERMASK_COLOR_SELECTION,
_( "Solder Mask Color..." ), KiBitmap( setcolor_soldermask_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_SOLDERPASTE_COLOR_SELECTION,
_( "Solder Paste Color..." ), KiBitmap( setcolor_solderpaste_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_COPPER_COLOR_SELECTION,
_( "Copper/Surface Finish Color..." ), KiBitmap( setcolor_copper_xpm ) );
AddMenuItem( setColorMenu, ID_MENU3D_PCB_BODY_COLOR_SELECTION,
_( "Board Body Color..." ), KiBitmap( setcolor_board_body_xpm ) );
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
// Creates grid menu
// /////////////////////////////////////////////////////////////////////////
wxMenu * gridlistMenu = new wxMenu;
AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
_( "3D Grid" ), KiBitmap( grid_xpm ) );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString );
gridlistMenu->AppendRadioItem( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString );
// If the grid is on, check the corresponding menuitem showing the grid size
if( m_settings.GridGet() != GRID3D_NONE )
{
gridlistMenu->Check( ID_MENU3D_GRID_10_MM, m_settings.GridGet() == GRID3D_10MM );
gridlistMenu->Check( ID_MENU3D_GRID_5_MM, m_settings.GridGet() == GRID3D_5MM );
gridlistMenu->Check( ID_MENU3D_GRID_2P5_MM, m_settings.GridGet() == GRID3D_2P5MM );
gridlistMenu->Check( ID_MENU3D_GRID_1_MM, m_settings.GridGet() == GRID3D_1MM );
}
else
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
// Display elements options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_SHOW_BOARD_BODY,
_( "Show Board Bod&y" ), KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
AddMenuItem( prefsMenu, ID_MENU3D_ZONE_ONOFF,
_( "Show Zone &Filling" ), KiBitmap( add_zone_xpm ), wxITEM_CHECK );
wxMenu * moduleAttributes = new wxMenu;
AddMenuItem( prefsMenu, moduleAttributes, ID_MENU3D_MODULE_ONOFF,
_( "Show 3D M&odels" ), KiBitmap( shape_3d_xpm ) );
moduleAttributes->AppendCheckItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL,
_( "Through Hole" ),
_( "Footprint Properties -> Placement type -> Through hole" ) );
moduleAttributes->AppendCheckItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL_INSERT,
_( "Surface Mount" ),
_( "Footprint Properties -> Placement type -> Surface mount" ) );
moduleAttributes->AppendCheckItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_VIRTUAL,
_( "Virtual" ),
_( "Footprint Properties -> Placement type -> Virtual (eg: edge connectors, test points, mechanical parts)" ) );
// Layer options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
wxMenu * layersMenu = new wxMenu;
AddMenuItem( prefsMenu, layersMenu, ID_MENU3D_LAYERS,
_( "Show &Layers" ), KiBitmap( tools_xpm ) );
AddMenuItem( layersMenu, ID_MENU3D_ADHESIVE_ONOFF,
_( "Show &Adhesive Layers" ), KiBitmap( tools_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_SILKSCREEN_ONOFF,
_( "Show &Silkscreen Layers" ), KiBitmap( text_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_SOLDER_MASK_ONOFF,
_( "Show Solder &Mask Layers" ), KiBitmap( pads_mask_layers_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_SOLDER_PASTE_ONOFF,
_( "Show Solder &Paste Layers" ), KiBitmap( pads_mask_layers_xpm ), wxITEM_CHECK );
// Other layers are not "board" layers, and are not shown in realistic mode
// These menus will be disabled in in realistic mode
AddMenuItem( layersMenu, ID_MENU3D_COMMENTS_ONOFF,
_( "Show &Comments and Drawings Layers" ), KiBitmap( editor_xpm ), wxITEM_CHECK );
AddMenuItem( layersMenu, ID_MENU3D_ECO_ONOFF,
_( "Show &Eco Layers" ), KiBitmap( editor_xpm ), wxITEM_CHECK );
// Reset options
// /////////////////////////////////////////////////////////////////////////
prefsMenu->AppendSeparator();
AddMenuItem( prefsMenu, ID_MENU3D_RESET_DEFAULTS,
_( "Reset to Default Settings" ),
KiBitmap( tools_xpm ) );
// Help menu
// /////////////////////////////////////////////////////////////////////////
menuBar->Append( helpMenu, _( "&Help" ) );
AddMenuItem( helpMenu, ID_MENU3D_HELP_HOTKEY_SHOW_CURRENT_LIST,
_( "&List Hotkeys..." ),
_( "Displays the current hotkeys list and corresponding commands" ),
KiBitmap( hotkeys_xpm ) );
SetMenuBar( menuBar );
SetMenuBarOptionsState();
}
void EDA_3D_VIEWER::SetMenuBarOptionsState()
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::SetMenuBarOptionsState" ) );
wxMenuBar* menuBar = GetMenuBar();
if( menuBar == NULL )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::SetMenuBarOptionsState menuBar == NULL" ) );
return;
}
wxMenuItem* item;
// Set the state of toggle menus according to the current display options
item = menuBar->FindItem( ID_MENU3D_MOUSEWHEEL_PANNING );
item->Check( m_settings.GetFlag( FL_MOUSEWHEEL_PANNING ) );
item = menuBar->FindItem( ID_MENU3D_ENGINE_OPENGL_LEGACY );
item->Check( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY );
item = menuBar->FindItem( ID_MENU3D_ENGINE_RAYTRACING );
item->Check( m_settings.RenderEngineGet() == RENDER_ENGINE_RAYTRACING );
item = menuBar->FindItem( ID_MENU3D_REALISTIC_MODE );
item->Check( m_settings.GetFlag( FL_USE_REALISTIC_MODE ) );
item = menuBar->FindItem( ID_MENU3D_COMMENTS_ONOFF );
item->Enable( !m_settings.GetFlag( FL_USE_REALISTIC_MODE ) );
item = menuBar->FindItem( ID_MENU3D_ECO_ONOFF );
item->Enable( !m_settings.GetFlag( FL_USE_REALISTIC_MODE ) );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_NORMAL );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_DIFFUSE_ONLY );
item = menuBar->FindItem( ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE );
item->Check( m_settings.MaterialModeGet() == MATERIAL_MODE_CAD_MODE );
// OpenGL
item = menuBar->FindItem( ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS );
item->Check( m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) );
item = menuBar->FindItem( ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX );
item->Check( m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) );
// Raytracing
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_RENDER_SHADOWS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_SHADOWS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_BACKFLOOR );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_BACKFLOOR ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_REFRACTIONS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFRACTIONS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_REFLECTIONS );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_REFLECTIONS ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_POST_PROCESSING );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_ANTI_ALIASING ) );
item = menuBar->FindItem( ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES );
item->Check( m_settings.GetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES ) );
item = menuBar->FindItem( ID_MENU3D_SHOW_BOARD_BODY );
item->Check( m_settings.GetFlag( FL_SHOW_BOARD_BODY ) );
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL );
item->Check( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL ) );
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL_INSERT );
item->Check( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT ) );
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_VIRTUAL );
item->Check( m_settings.GetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL ) );
item = menuBar->FindItem( ID_MENU3D_ZONE_ONOFF );
item->Check( m_settings.GetFlag( FL_ZONE ) );
item = menuBar->FindItem( ID_MENU3D_AXIS_ONOFF );
item->Check( m_settings.GetFlag( FL_AXIS ) );
item = menuBar->FindItem( ID_MENU3D_ADHESIVE_ONOFF );
item->Check( m_settings.GetFlag( FL_ADHESIVE ) );
item = menuBar->FindItem( ID_MENU3D_SILKSCREEN_ONOFF );
item->Check( m_settings.GetFlag( FL_SILKSCREEN ) );
item = menuBar->FindItem( ID_MENU3D_SOLDER_MASK_ONOFF );
item->Check( m_settings.GetFlag( FL_SOLDERMASK ) );
item = menuBar->FindItem( ID_MENU3D_SOLDER_PASTE_ONOFF );
item->Check( m_settings.GetFlag( FL_SOLDERPASTE ) );
item = menuBar->FindItem( ID_MENU3D_COMMENTS_ONOFF );
item->Check( m_settings.GetFlag( FL_COMMENTS ) );
item = menuBar->FindItem( ID_MENU3D_ECO_ONOFF );
item->Check( m_settings.GetFlag( FL_ECO ));
}
void EDA_3D_VIEWER::SetToolbars()
{
}
@@ -54,9 +54,7 @@ void EDA_3D_VIEWER::Install3DViewOptionDialog( wxCommandEvent& event )
{
SetMenuBarOptionsState();
// Force immediate display redraw:
ReloadRequest();
m_canvas->Request_refresh();
NewDisplay( true );
}
}
@@ -1,8 +1,8 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Aug 4 2017)
// C++ code generated with wxFormBuilder (version Jul 11 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_3D_view_option_base.h"
@@ -87,7 +87,10 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizerRenderOptions->Add( fgSizer3, 1, wxEXPAND, 5 );
bSizeLeft->Add( fgSizerRenderOptions, 1, wxEXPAND, 5 );
bSizeLeft->Add( fgSizerRenderOptions, 0, wxEXPAND|wxBOTTOM, 5 );
bSizeLeft->Add( 0, 10, 0, 0, 5 );
m_staticText3DmodelVisibility = new wxStaticText( this, wxID_ANY, _("3D model visibility:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticText3DmodelVisibility->Wrap( -1 );
@@ -128,10 +131,10 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizer3DVisibility->Add( m_checkBox3DshapesVirtual, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLeft->Add( fgSizer3DVisibility, 1, wxEXPAND, 5 );
bSizeLeft->Add( fgSizer3DVisibility, 0, wxEXPAND, 5 );
bSizerUpper->Add( bSizeLeft, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
bSizerUpper->Add( bSizeLeft, 1, wxEXPAND, 5 );
m_staticlineVertical = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
bSizerUpper->Add( m_staticlineVertical, 0, wxEXPAND | wxALL, 5 );
@@ -190,9 +193,12 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizerShowBrdLayersOpts->Add( m_checkBoxAdhesive, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLayer->Add( fgSizerShowBrdLayersOpts, 1, wxEXPAND, 5 );
bSizeLayer->Add( fgSizerShowBrdLayersOpts, 0, wxEXPAND, 5 );
m_staticTextUserLayers = new wxStaticText( this, wxID_ANY, _("User layers:"), wxDefaultPosition, wxDefaultSize, 0 );
bSizeLayer->Add( 0, 10, 0, 0, 5 );
m_staticTextUserLayers = new wxStaticText( this, wxID_ANY, _("User layers (not shown in realistic mode):"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextUserLayers->Wrap( -1 );
m_staticTextUserLayers->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
@@ -222,7 +228,7 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
fgSizerShowUserLayersOpts->Add( m_checkBoxECO, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
bSizeLayer->Add( fgSizerShowUserLayersOpts, 1, wxEXPAND, 5 );
bSizeLayer->Add( fgSizerShowUserLayersOpts, 0, wxEXPAND, 5 );
bSizerRight->Add( bSizeLayer, 1, wxEXPAND, 5 );
@@ -234,7 +240,7 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
bSizerMain->Add( bSizerUpper, 1, wxEXPAND, 5 );
m_staticlineH = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizerMain->Add( m_staticlineH, 0, wxEXPAND | wxALL, 5 );
bSizerMain->Add( m_staticlineH, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_sdbSizer = new wxStdDialogButtonSizer();
m_sdbSizerOK = new wxButton( this, wxID_OK );
@@ -243,7 +249,7 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi
m_sdbSizer->AddButton( m_sdbSizerCancel );
m_sdbSizer->Realize();
bSizerMain->Add( m_sdbSizer, 0, wxALL|wxEXPAND, 5 );
bSizerMain->Add( m_sdbSizer, 0, wxALL|wxALIGN_RIGHT, 5 );
this->SetSizer( bSizerMain );
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="13" />
<FileVersion major="1" minor="14" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
@@ -14,6 +14,7 @@
<property name="file">dialog_3D_view_option_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property>
<property name="name">dialog_3D_view_option_base</property>
<property name="namespace"></property>
@@ -44,7 +45,7 @@
<property name="minimum_size"></property>
<property name="name">DIALOG_3D_VIEW_OPTIONS_BASE</property>
<property name="pos"></property>
<property name="size">571,399</property>
<property name="size">571,372</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
<property name="title">3D Display Options</property>
@@ -54,13 +55,20 @@
<property name="window_style"></property>
<event name="OnActivate"></event>
<event name="OnActivateApp"></event>
<event name="OnAuiFindManager"></event>
<event name="OnAuiPaneActivated"></event>
<event name="OnAuiPaneButton"></event>
<event name="OnAuiPaneClose"></event>
<event name="OnAuiPaneMaximize"></event>
<event name="OnAuiPaneRestore"></event>
<event name="OnAuiRender"></event>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnClose"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -75,17 +83,23 @@
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMaximize"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnMove"></event>
<event name="OnMoveEnd"></event>
<event name="OnMoveStart"></event>
<event name="OnMoving"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnShow"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
<object class="wxBoxSizer" expanded="1">
@@ -104,7 +118,7 @@
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
@@ -144,6 +158,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Render options:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -169,7 +184,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -196,8 +218,8 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="flag">wxEXPAND|wxBOTTOM</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -276,7 +298,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -363,7 +392,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox">OnCheckRealisticMode</event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -455,7 +491,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -542,7 +585,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -634,7 +684,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -721,7 +778,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -813,7 +877,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -900,7 +971,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -992,7 +1070,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1079,7 +1164,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1125,6 +1217,16 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">10</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
@@ -1158,6 +1260,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">3D model visibility:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -1183,7 +1286,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1211,7 +1321,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -1290,7 +1400,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1377,7 +1494,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1469,7 +1593,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1556,7 +1687,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1648,7 +1786,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1735,7 +1880,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -1821,7 +1973,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1897,6 +2056,7 @@
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Board layers:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -1922,7 +2082,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -1950,7 +2117,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -2029,7 +2196,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2116,7 +2290,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2208,7 +2389,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2295,7 +2483,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2387,7 +2582,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2474,7 +2676,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2566,7 +2775,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2653,7 +2869,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -2681,6 +2904,16 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">10</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
@@ -2713,7 +2946,8 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User layers:</property>
<property name="label">User layers (not shown in realistic mode):</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@@ -2739,7 +2973,14 @@
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2767,7 +3008,7 @@
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="1">
<property name="cols">3</property>
<property name="flexible_direction">wxBOTH</property>
@@ -2846,7 +3087,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -2933,7 +3181,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -3025,7 +3280,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -3112,7 +3374,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
@@ -3148,7 +3417,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticLine" expanded="1">
<property name="BottomDockable">1</property>
@@ -3202,7 +3471,14 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnAux1DClick"></event>
<event name="OnAux1Down"></event>
<event name="OnAux1Up"></event>
<event name="OnAux2DClick"></event>
<event name="OnAux2Down"></event>
<event name="OnAux2Up"></event>
<event name="OnChar"></event>
<event name="OnCharHook"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
@@ -3229,7 +3505,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="flag">wxALL|wxALIGN_RIGHT</property>
<property name="proportion">0</property>
<object class="wxStdDialogButtonSizer" expanded="1">
<property name="Apply">0</property>
@@ -1,8 +1,8 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Aug 4 2017)
// C++ code generated with wxFormBuilder (version Jul 11 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO "NOT" EDIT THIS FILE!
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#ifndef __DIALOG_3D_VIEW_OPTION_BASE_H__
@@ -11,8 +11,6 @@
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
class DIALOG_SHIM;
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/stattext.h>
@@ -85,7 +83,7 @@ class DIALOG_3D_VIEW_OPTIONS_BASE : public DIALOG_SHIM
public:
DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("3D Display Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,399 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("3D Display Options"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,372 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_3D_VIEW_OPTIONS_BASE();
};
+49 -111
View File
@@ -141,24 +141,17 @@ BEGIN_EVENT_TABLE( EDA_3D_VIEWER, EDA_BASE_FRAME )
END_EVENT_TABLE()
EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway,
PCB_BASE_FRAME *aParent,
const wxString &aTitle,
long style ) :
EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent,
const wxString &aTitle, long style ) :
KIWAY_PLAYER( aKiway,
aParent,
FRAME_PCB_DISPLAY3D,
aTitle,
wxDefaultPosition,
wxDefaultSize,
style,
VIEWER3D_FRAMENAME )
KIWAY_PLAYER( aKiway, aParent,
FRAME_PCB_DISPLAY3D, aTitle,
wxDefaultPosition, wxDefaultSize,
style, VIEWER3D_FRAMENAME )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::EDA_3D_VIEWER %s" ), aTitle );
m_canvas = NULL;
m_defaultFileName = "";
// Give it an icon
wxIcon icon;
@@ -203,6 +196,8 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway,
m_mainToolBar->EnableTool( ID_RENDER_CURRENT_VIEW,
(m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY) );
m_mainToolBar->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( EDA_3D_VIEWER::OnKeyEvent ), NULL, this );
// Fixes bug in Windows (XP and possibly others) where the canvas requires the focus
// in order to receive mouse events. Otherwise, the user has to click somewhere on
// the canvas before it will respond to mouse wheel events.
@@ -213,6 +208,8 @@ EDA_3D_VIEWER::EDA_3D_VIEWER( KIWAY *aKiway,
EDA_3D_VIEWER::~EDA_3D_VIEWER()
{
m_mainToolBar->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( EDA_3D_VIEWER::OnKeyEvent ), NULL, this );
m_auimgr.UnInit();
// m_canvas delete will be called by wxWidget manager
@@ -284,8 +281,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
break;
case ID_RELOAD3D_BOARD:
ReloadRequest();
m_canvas->Request_refresh();
NewDisplay( true );
break;
case ID_ROTATE3D_X_POS:
@@ -351,7 +347,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
m_canvas->Request_refresh();
else
ReloadRequest();
NewDisplay( true );
}
return;
@@ -361,7 +357,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
if( m_settings.RenderEngineGet() == RENDER_ENGINE_OPENGL_LEGACY )
m_canvas->Request_refresh();
else
ReloadRequest();
NewDisplay( true );
}
return;
@@ -392,27 +388,27 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
case ID_MENU3D_REALISTIC_MODE:
m_settings.SetFlag( FL_USE_REALISTIC_MODE, isChecked );
SetMenuBarOptionsState();
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_FL_RENDER_MATERIAL_MODE_NORMAL:
m_settings.MaterialModeSet( MATERIAL_MODE_NORMAL );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_FL_RENDER_MATERIAL_MODE_DIFFUSE_ONLY:
m_settings.MaterialModeSet( MATERIAL_MODE_DIFFUSE_ONLY );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_FL_RENDER_MATERIAL_MODE_CAD_MODE:
m_settings.MaterialModeSet( MATERIAL_MODE_CAD_MODE );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_FL_OPENGL_RENDER_COPPER_THICKNESS:
m_settings.SetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS, isChecked );
ReloadRequest();
NewDisplay( true );
return;
case ID_MENU3D_FL_OPENGL_RENDER_SHOW_MODEL_BBOX:
@@ -427,12 +423,12 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
case ID_MENU3D_FL_RAYTRACING_PROCEDURAL_TEXTURES:
m_settings.SetFlag( FL_RENDER_RAYTRACING_PROCEDURAL_TEXTURES, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_FL_RAYTRACING_BACKFLOOR:
m_settings.SetFlag( FL_RENDER_RAYTRACING_BACKFLOOR, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_FL_RAYTRACING_REFRACTIONS:
@@ -447,7 +443,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
case ID_MENU3D_FL_RAYTRACING_POST_PROCESSING:
m_settings.SetFlag( FL_RENDER_RAYTRACING_POST_PROCESSING, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_FL_RAYTRACING_ANTI_ALIASING:
@@ -457,7 +453,7 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
case ID_MENU3D_SHOW_BOARD_BODY:
m_settings.SetFlag( FL_SHOW_BOARD_BODY, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_AXIS_ONOFF:
@@ -467,52 +463,52 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
case ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL:
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_NORMAL_INSERT:
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_NORMAL_INSERT, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_MODULE_ONOFF_ATTRIBUTES_VIRTUAL:
m_settings.SetFlag( FL_MODULE_ATTRIBUTES_VIRTUAL, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_ZONE_ONOFF:
m_settings.SetFlag( FL_ZONE, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_ADHESIVE_ONOFF:
m_settings.SetFlag( FL_ADHESIVE, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_SILKSCREEN_ONOFF:
m_settings.SetFlag( FL_SILKSCREEN, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_SOLDER_MASK_ONOFF:
m_settings.SetFlag( FL_SOLDERMASK, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_SOLDER_PASTE_ONOFF:
m_settings.SetFlag( FL_SOLDERPASTE, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_COMMENTS_ONOFF:
m_settings.SetFlag( FL_COMMENTS, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_ECO_ONOFF:
m_settings.SetFlag( FL_ECO, isChecked );
ReloadRequest( );
NewDisplay( true );
return;
case ID_MENU3D_RESET_DEFAULTS:
@@ -525,10 +521,10 @@ void EDA_3D_VIEWER::Process_Special_Functions( wxCommandEvent &event )
// Refresh menu option state
SetMenuBarOptionsState();
// Tell canvas that we (may) changed the render engine
// Tell canvas that we (may have) changed the render engine
RenderEngineChanged();
ReloadRequest();
NewDisplay( true );
}
return;
@@ -905,6 +901,15 @@ void EDA_3D_VIEWER::OnRightClick( const wxPoint &MousePos, wxMenu *PopMenu )
}
void EDA_3D_VIEWER::OnKeyEvent( wxKeyEvent& event )
{
if( m_canvas )
return m_canvas->OnKeyEvent( event );
event.Skip();
}
void EDA_3D_VIEWER::RedrawActiveWindow( wxDC *DC, bool EraseBg )
{
wxLogTrace( m_logTrace, wxT( "EDA_3D_VIEWER::RedrawActiveWindow" ) );
@@ -934,7 +939,7 @@ void EDA_3D_VIEWER::takeScreenshot( wxCommandEvent& event )
fn.SetExt( file_ext );
fullFileName = EDA_FILE_SELECTOR( _( "3D Image File Name:" ), fn.GetPath(),
m_defaultFileName, file_ext, mask, this,
m_defaultSaveScreenshotFileName, file_ext, mask, this,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT, true );
if( fullFileName.IsEmpty() )
@@ -1050,7 +1055,7 @@ bool EDA_3D_VIEWER::Set3DSilkScreenColorFromUser()
&definedColors );
if( change )
NewDisplay();
NewDisplay( true );
return change;
}
@@ -1086,7 +1091,7 @@ bool EDA_3D_VIEWER::Set3DSolderMaskColorFromUser()
&definedColors );
if( change )
NewDisplay();
NewDisplay( true );
return change;
}
@@ -1112,7 +1117,7 @@ bool EDA_3D_VIEWER::Set3DCopperColorFromUser()
&definedColors );
if( change )
NewDisplay();
NewDisplay( true );
return change;
}
@@ -1142,7 +1147,7 @@ bool EDA_3D_VIEWER::Set3DBoardBodyColorFromUser()
&definedColors );
if( change )
NewDisplay();
NewDisplay( true );
return change;
}
@@ -1167,74 +1172,7 @@ bool EDA_3D_VIEWER::Set3DSolderPasteColorFromUser()
&definedColors );
if( change )
NewDisplay();
NewDisplay( true );
return change;
}
// Define 3D Viewer Hotkeys
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[] =
{
&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)
struct EDA_HOTKEY_CONFIG g_3DViewer_Hokeys_Descr[] =
{
{ &g_CommonSectionTag, viewer3d_Hotkey_List, &viewer3DSectionTitle },
{ NULL, NULL, NULL }
};
void EDA_3D_VIEWER::DisplayHotKeys()
{
DisplayHotkeyList( this, g_3DViewer_Hokeys_Descr );
}
+6 -7
View File
@@ -52,8 +52,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
public:
EDA_3D_VIEWER( KIWAY *aKiway,
PCB_BASE_FRAME *aParent,
EDA_3D_VIEWER( KIWAY *aKiway, PCB_BASE_FRAME *aParent,
const wxString &aTitle,
long style = KICAD_DEFAULT_3D_DRAWFRAME_STYLE );
@@ -66,7 +65,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
/**
* Request reloading the 3D view. However the request will be executed
* only when the 3D canvas is refreshed.
* It allows to prepare changes and request for 3D rebuild only when all
* It allows one to prepare changes and request for 3D rebuild only when all
* changes are committed.
* This is made because the 3D rebuild can take a long time, and this rebuild
* cannot always made after each change, for calculation time reason.
@@ -93,14 +92,14 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void SetDefaultFileName( const wxString &aFn )
{
wxFileName fn( aFn );
m_defaultFileName = fn.GetName();
m_defaultSaveScreenshotFileName = fn.GetName();
}
/**
* Function GetDefaultFileName
* @return the default suggested file name
*/
const wxString &GetDefaultFileName() const { return m_defaultFileName; }
const wxString &GetDefaultFileName() const { return m_defaultSaveScreenshotFileName; }
/**
* Function GetSettings
@@ -202,8 +201,8 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
void LoadSettings( wxConfigBase *aCfg ) override;
void OnLeftClick( wxDC *DC, const wxPoint &MousePos );
void OnRightClick( const wxPoint &MousePos, wxMenu *PopMenu );
void OnKeyEvent( wxKeyEvent& event );
void RedrawActiveWindow( wxDC *DC, bool EraseBg );
@@ -226,7 +225,7 @@ class EDA_3D_VIEWER : public KIWAY_PLAYER
/**
* Filename to propose for save a screenshot
*/
wxString m_defaultFileName;
wxString m_defaultSaveScreenshotFileName;
/**
* The canvas where the openGL context will be rendered
+99
View File
@@ -0,0 +1,99 @@
/*
* 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( "Help (this window)" ), 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)
struct EDA_HOTKEY_CONFIG g_3DViewer_Hokeys_Descr[] =
{
{ &g_CommonSectionTag, viewer3d_Hotkey_List, &viewer3DSectionTitle },
{ NULL, NULL, NULL }
};
void EDA_3D_VIEWER::DisplayHotKeys()
{
DisplayHotkeyList( this, g_3DViewer_Hokeys_Descr );
}
+2 -6
View File
@@ -40,11 +40,6 @@ set(3D-VIEWER_SRCS
${DIR_DLG}/dlg_select_3dmodel.cpp
${DIR_DLG}/panel_prev_3d_base.cpp
${DIR_DLG}/panel_prev_model.cpp
../polygon/poly2tri/common/shapes.cc
../polygon/poly2tri/sweep/advancing_front.cc
../polygon/poly2tri/sweep/cdt.cc
../polygon/poly2tri/sweep/sweep.cc
../polygon/poly2tri/sweep/sweep_context.cc
3d_canvas/cinfo3d_visu.cpp
3d_canvas/create_layer_items.cpp
3d_canvas/create_3Dgraphic_brd_items.cpp
@@ -79,7 +74,6 @@ set(3D-VIEWER_SRCS
${DIR_RAY_2D}/cring2d.cpp
${DIR_RAY_2D}/croundsegment2d.cpp
${DIR_RAY_2D}/ctriangle2d.cpp
${DIR_RAY_2D}/edgeshrink.cpp
${DIR_RAY_3D}/cbbox.cpp
${DIR_RAY_3D}/cbbox_ray.cpp
${DIR_RAY_3D}/ccylinder.cpp
@@ -97,6 +91,8 @@ set(3D-VIEWER_SRCS
3d_rendering/cpostshader.cpp
3d_rendering/cpostshader_ssao.cpp
3d_rendering/ctrack_ball.cpp
3d_viewer/3d_menubar.cpp
3d_viewer/hotkeys.cpp
3d_rendering/test_cases.cpp
3d_rendering/trackball.cpp
3d_viewer/3d_toolbar.cpp
+4 -1
View File
@@ -50,6 +50,9 @@ void OGL_GetScreenshot( wxImage &aDstImage )
// Alphabuffer was causing some transparency problems on some systems (Windows)
// unsigned char* alphabuffer = (unsigned char*) malloc( viewport.x * viewport.y );
// Call glFinish before screenshot to ensure everything is fully drawn.
glFinish();
glPixelStorei( GL_PACK_ALIGNMENT, 1 );
glReadBuffer( GL_BACK_LEFT );
@@ -130,7 +133,7 @@ GLuint OGL_LoadTexture( const CIMAGE &aImage )
glBindTexture( GL_TEXTURE_2D, 0 );
glFinish();
glFlush();
free( rgbaBuffer );
-81
View File
@@ -1,81 +0,0 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2016 Mario Luzeiro <mrluzeiro@ua.pt>
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* @file openmp_mutex.h
* @brief a mutex for openmp got from the website:
* http://bisqwit.iki.fi/story/howto/openmp/
* by Joel Yliluoma <bisqwit@iki.fi>
*/
#ifndef _OPENMP_MUTEX_H
#define _OPENMP_MUTEX_H
#ifdef _OPENMP
# include <omp.h>
struct MutexType
{
MutexType() { omp_init_lock( &lock ); }
~MutexType() { omp_destroy_lock( &lock ); }
void Lock() { omp_set_lock( &lock ); }
void Unlock() { omp_unset_lock( &lock ); }
MutexType( const MutexType& ) { omp_init_lock( &lock ); }
MutexType& operator= ( const MutexType& ) { return *this; }
public:
omp_lock_t lock;
};
#else
/// A dummy mutex that doesn't actually exclude anything,
/// but as there is no parallelism either, no worries.
struct MutexType
{
void Lock() {}
void Unlock() {}
};
#endif
/// An exception-safe scoped lock-keeper.
struct ScopedLock
{
explicit ScopedLock( MutexType& m ) : mut( m ), locked( true ) { mut.Lock(); }
~ScopedLock() { Unlock(); }
void Unlock() { if( !locked ) return; locked = false; mut.Unlock(); }
void LockAgain() { if( locked ) return; mut.Lock(); locked = true; }
private:
MutexType& mut;
bool locked;
private: // prevent copying the scoped lock.
void operator=(const ScopedLock&);
ScopedLock(const ScopedLock&);
};
#endif // _OPENMP_MUTEX_H
+1 -1
View File
@@ -34,7 +34,7 @@ Andrew Zonenberg <azonenberg[at]drawersteak-dot-com>
Cirilo Bernardo <cirilo_bernardo[at]yahoo-dot-com>
Adam Wolf <adamwolf[at]feelslikeburning-dot-com>
Bernhard Stegmaier <stegmaier[at]sw-systems-dot-de>
Chris Pavlina <pavlina.chris[at]gmail-dot-com>
Alexis Lockwood <alexlockwood[at]fastmail-dot-com>
Simon Richter <Simon.Richter[at]hogyros-dot-de>
Mario Luzeiro <mrluzeiro[at]ua-dot-pt>
Mateusz Skowroński <skowri[at]gmail-dot-com>
+113 -36
View File
@@ -21,6 +21,15 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
cmake_minimum_required( VERSION 2.8.12 FATAL_ERROR )
# because of http://public.kitware.com/Bug/view.php?id=10395
# See https://gitlab.kitware.com/cmake/cmake/issues/15943
# Remove as soon as 3.1 is minimum required version
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW) # CMake 3.0
endif()
# Default to CMAKE_BUILD_TYPE = Release unless overridden on command line
# http://www.cmake.org/pipermail/cmake/2008-September/023808.html
if( DEFINED CMAKE_BUILD_TYPE )
@@ -33,12 +42,16 @@ project( kicad )
include( GNUInstallDirs )
cmake_minimum_required( VERSION 2.8.12 FATAL_ERROR )
# because of http://public.kitware.com/Bug/view.php?id=10395
# Path to local CMake modules.
set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules )
# On Windows, binaries created by link option -g3 are very large (more than 1Gb for pcbnew,
# and more than 3Gb for the full kicad suite)
# This option create binaries using link option -g1 that create much smaller files, but
# there are less info in debug (but the file names and line numbers are available)
option( BUILD_SMALL_DEBUG_FILES "In debug build: create smaller binaries." OFF )
#
# KiCad build options should be added below.
#
@@ -66,13 +79,17 @@ option( KICAD_SCRIPTING_WXPYTHON
ON )
option( KICAD_SCRIPTING_ACTION_MENU
"Build a tools menu with registred python plugins: actions plugins (default OFF)."
)
"Build a tools menu with registered python plugins: actions plugins (default ON)."
ON )
option( KICAD_USE_OCE
"Build tools and plugins related to OpenCascade Community Edition (default OFF)"
"Build tools and plugins related to OpenCascade Community Edition (default ON)"
ON )
option( KICAD_USE_OCC
"Build tools and plugins related to OpenCascade Technology (overrides KICAD_USE_OCE, default OFF)"
OFF )
option( KICAD_INSTALL_DEMOS
"Install kicad demos and examples (default ON)"
ON )
@@ -205,6 +222,44 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
endif()
endif()
#================================================
# Provide access to CCACHE
#================================================
if (USE_CCACHE)
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
get_property(RULE_LAUNCH_COMPILE GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
set(RULE_LAUNCH_COMPILE "${RULE_LAUNCH_COMPILE} ${CCACHE_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${RULE_LAUNCH_COMPILE})
get_property(RULE_LAUNCH_LINK GLOBAL PROPERTY RULE_LAUNCH_LINK)
set(RULE_LAUNCH_LINK "${RULE_LAUNCH_LINK} ${CCACHE_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${RULE_LAUNCH_LINK})
message(STATUS "Used ${CCACHE_FOUND} for compilation.")
else(CCACHE_FOUND)
message(STATUS "CCache was requested but not found.")
endif(CCACHE_FOUND)
endif(USE_CCACHE)
#================================================
# Provide access to CCACHE
#================================================
if (USE_DISTCC)
find_program(DISTCC_FOUND distcc)
if(DISTCC_FOUND)
get_property(RULE_LAUNCH_COMPILE GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
set(RULE_LAUNCH_COMPILE "${RULE_LAUNCH_COMPILE} ${DISTCC_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${RULE_LAUNCH_COMPILE})
message(STATUS "Using ${DISTCC_FOUND} for distributed build.")
else(DISTCC_FOUND)
message(INFO "Distcc was requested but not found.")
endif(DISTCC_FOUND)
endif(USE_DISTCC)
#================================================
# Set flags for GCC, or treat llvm as GCC
#================================================
@@ -219,6 +274,10 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( TO_LINKER -XLinker )
else()
set( TO_LINKER -Wl )
# Set 32-bit flag for GCC to prevent excess precision
if( CMAKE_SIZEOF_VOID_P EQUAL 4 )
set( CMAKE_CXX_FLAGS "-ffloat-store ${CMAKE_CXX_FLAGS}" )
endif()
endif()
# Establish -Wall early, so specialized relaxations of this may come
@@ -226,8 +285,18 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}" )
set( CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}" )
set( CMAKE_C_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG" )
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
# Link flags in Debug: -g1 and -ggdb1 or -g1 and -ggdb3 can be used.
# Level 1 produces minimal information, enough for making basic backtraces.
# This includes descriptions of functions and external variables, and line number tables,
# but no information about local variables.
# Level 3 includes full information, but binaries are much larger.
if( BUILD_SMALL_DEBUG_FILES )
set( CMAKE_C_FLAGS_DEBUG "-g1 -ggdb1 -DDEBUG" )
set( CMAKE_CXX_FLAGS_DEBUG "-g1 -ggdb1 -DDEBUG -Wno-deprecated-declarations" )
else()
set( CMAKE_C_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG" )
set( CMAKE_CXX_FLAGS_DEBUG "-g3 -ggdb3 -DDEBUG -Wno-deprecated-declarations" )
endif()
if( MINGW )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
@@ -321,6 +390,12 @@ if( KICAD_USE_OCE )
add_definitions( -DKICAD_USE_OCE )
endif()
if( KICAD_USE_OCC )
add_definitions( -DKICAD_USE_OCC )
remove_definitions( -DKICAD_USE_OCE )
unset( KICAD_USE_OCE )
endif()
if( KICAD_USE_CUSTOM_PADS )
add_definitions( -DKICAD_USE_CUSTOM_PADS )
endif()
@@ -356,6 +431,9 @@ if( NOT APPLE )
set( KICAD_BIN bin
CACHE PATH "Location of KiCad binaries." )
set( KICAD_DATA ${CMAKE_INSTALL_DATADIR}/kicad
CACHE PATH "Location of KiCad data files." )
if( WIN32 )
set( KICAD_PLUGINS ${KICAD_BIN}/scripting/plugins
CACHE PATH "Location of KiCad plugins." )
@@ -366,7 +444,7 @@ if( NOT APPLE )
set( KICAD_USER_PLUGIN ${KICAD_BIN}/plugins
CACHE PATH "Location of KiCad user-loaded plugins" )
else()
set( KICAD_PLUGINS ${CMAKE_INSTALL_LIBDIR}/kicad/plugins
set( KICAD_PLUGINS ${KICAD_DATA}/plugins
CACHE PATH "Location of KiCad plugins." )
set( KICAD_LIB ${CMAKE_INSTALL_LIBDIR}
@@ -376,8 +454,6 @@ if( NOT APPLE )
CACHE PATH "Location of KiCad user-loaded plugins" )
endif()
set( KICAD_DATA ${CMAKE_INSTALL_DATADIR}/kicad
CACHE PATH "Location of KiCad data files." )
set( KICAD_DOCS ${CMAKE_INSTALL_DATADIR}/doc/kicad
CACHE PATH "Location of KiCad documentation files." )
set( KICAD_DEMOS ${KICAD_DATA}/demos
@@ -471,24 +547,6 @@ include( ExternalProject )
#================================================
include( CheckFindPackageResult )
#
# Find OpenMP support, optional
#
find_package( OpenMP )
if( OPENMP_FOUND )
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
add_definitions( -DUSE_OPENMP )
# MinGW does not include the OpenMP link library and FindOpenMP.cmake does not
# set it either. Not sure this is the most elegant solution but it works.
if( MINGW )
set( OPENMP_LIBRARIES gomp )
endif()
endif()
#
# Find wxWidgets library, required
#
@@ -524,6 +582,7 @@ endif()
#
# Find OpenGL library, required
#
set( OpenGL_GL_PREFERENCE "LEGACY" ) # CMake 3.11+ setting; see 'cmake --help-policy CMP0072'
find_package( OpenGL REQUIRED )
#
@@ -539,6 +598,8 @@ endif()
#
find_package( GLM 0.9.5.1 REQUIRED )
add_definitions( -DGLM_FORCE_CTOR_INIT )
#
# Find CURL library, required for github plugin
#
@@ -572,9 +633,24 @@ endif()
# Find OpenCascade Community Edition, required for STEP plugin and tools
if( KICAD_USE_OCE )
set( LIBS_OCE TKBinXCAF TKPCAF TKSTEP TKXDESTEP TKIGES TKXDEIGES )
set( OCC_LIBRARIES TKBinXCAF TKPCAF TKSTEP TKXDESTEP TKIGES TKXDEIGES )
find_package( OCE 0.16 REQUIRED ${LIBS_OCE} )
find_package( OCE 0.16 REQUIRED ${OCC_LIBRARIES} )
elseif( KICAD_USE_OCC )
find_package(OpenCASCADE)
if( NOT OCC_FOUND )
MESSAGE( FATAL_ERROR "================================================================\n"
" KICAD_USE_OCC=True but OpenCASCADE was no found!\n"
"================================================================\n")
endif()
if( OCC_VERSION_STRING VERSION_LESS 6.8.0 )
MESSAGE( FATAL_ERROR "================================================================\n"
"OpenCASCADE version ${OCC_VERSION_STRING} was found.\n"
" KiCad requires a minimum version of 6.8.0\n"
"================================================================\n")
endif()
include_directories( SYSTEM ${OCC_INCLUDE_DIR} )
endif()
# Assist with header file searching optimization:
@@ -793,7 +869,7 @@ add_custom_target( uninstall
###
# Install scripts
###
if( UNIX )
if( UNIX AND NOT APPLE )
install( DIRECTORY scripts
DESTINATION ${KICAD_DOCS}
COMPONENT resources
@@ -815,30 +891,31 @@ if( UNIX AND NOT APPLE )
# Install Mime directory
install( DIRECTORY ${UNIX_ICON_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
# Install Icons
install( DIRECTORY ${UNIX_MIME_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
# Install Applications directory (.desktop files)
install( DIRECTORY ${UNIX_APPLICATIONS_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
# Install AppStream directory (app store entry)
install( DIRECTORY ${UNIX_APPDATA_FILES}
DESTINATION ${CMAKE_INSTALL_PREFIX}/share
DESTINATION share
COMPONENT resources
)
endif()
#include( CTest )
enable_testing()
if( UNIX AND NOT APPLE )
-42
View File
@@ -1,42 +0,0 @@
# - Check if a symbol exists as a function, variable, or macro in C++
# CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>)
#
# Check that the <symbol> is available after including given header
# <files> and store the result in a <variable>. Specify the list
# of files in one argument as a semicolon-separated list.
# CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as opposed
# to CHECK_SYMBOL_EXISTS(), which works only for C.
#
# If the header files define the symbol as a macro it is considered
# available and assumed to work. If the header files declare the
# symbol as a function or variable then the symbol must also be
# available for linking. If the symbol is a type or enum value
# it will not be recognized (consider using CheckTypeSize or
# CheckCSourceCompiles).
#
# The following variables may be set before calling this macro to
# modify the way the check is run:
#
# CMAKE_REQUIRED_FLAGS = string of compile command line flags
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
#=============================================================================
# Copyright 2003-2011 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
include(CheckSymbolExists)
macro(CHECK_CXX_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
_CHECK_SYMBOL_EXISTS("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
endmacro()
+192
View File
@@ -0,0 +1,192 @@
# Try to find OCC
# Once done this will define
#
# OCC_FOUND - system has OCC - OpenCASCADE
# OCC_INCLUDE_DIR - where the OCC include directory can be found
# OCC_LIBRARY_DIR - where the OCC library directory can be found
# OCC_LIBRARIES - Link this to use OCC
############################################################################
#
# Modifications Copyright (C) 2018 Seth Hillbrand
#
# Based on FindOpenCasCade.cmake by the FreeCAD CAx development team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Set the needed libraries
set( OCC_LIBS
TKBinL
TKBin
TKBinTObj
TKBinXCAF
TKBool
TKBO
TKBRep
TKCAF
TKCDF
TKernel
TKFeat
TKFillet
TKG2d
TKG3d
TKGeomAlgo
TKGeomBase
TKHLR
TKIGES
TKLCAF
TKMath
TKMesh
TKMeshVS
TKOffset
TKOpenGl
TKPrim
TKService
TKShHealing
TKSTEP209
TKSTEPAttr
TKSTEPBase
TKSTEP
TKSTL
TKTObj
TKTopAlgo
TKV3d
TKVRML
TKXCAF
TKXDEIGES
TKXDESTEP
TKXMesh
TKXmlL
TKXml
TKXmlTObj
TKXmlXCAF
TKXSBase
)
set(OCC_TYPE "OpenCASCADE Standard Edition")
if(WIN32)
if(CYGWIN OR MINGW)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
/usr/include/opencascade
/usr/local/include/opencascade
/opt/opencascade/include
/opt/opencascade/inc
)
FIND_LIBRARY(OCC_LIBRARY TKernel
HINTS
${OCC_LIBRARY_DIR}
/usr/lib
/usr/local/lib
/opt/opencascade/lib
)
else(CYGWIN OR MINGW)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/include"
)
FIND_LIBRARY(OCC_LIBRARY TKernel
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/lib"
)
endif(CYGWIN OR MINGW)
else(WIN32)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
/usr/include/opencascade
/usr/local/include/opencascade
/opt/opencascade/include
/opt/opencascade/inc
)
FIND_LIBRARY(OCC_LIBRARY TKernel
HINTS
${OCC_LIBRARY_DIR}
/usr
/usr/local
/opt/opencascade
/opt/opencascade/lin64/gcc
PATH_SUFFIXES lib
)
endif(WIN32)
if(OCC_LIBRARY)
GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH)
IF(NOT OCC_INCLUDE_DIR)
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
${OCC_LIBRARY_DIR}/../inc
)
ENDIF()
else(OCC_LIBRARY)
message( "" )
message( "*** OpenCascade library missing ***" )
message( "Verify your OpenCascade installation or pass CMake" )
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" )
message( "" )
message( FATAL_ERROR "" )
endif(OCC_LIBRARY)
if(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR
REGEX "#define OCC_VERSION_MAJOR.*"
)
string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR})
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR
REGEX "#define OCC_VERSION_MINOR.*"
)
string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR})
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT
REGEX "#define OCC_VERSION_MAINTENANCE.*"
)
string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT})
set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}")
else(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
message( "" )
message( "*** OpenCascade header files missing ***" )
message( "Verify your OpenCascade installation or pass CMake" )
message( " the header directory as '-DOCC_INCLUDE_DIR=<path>'" )
message( "" )
message( FATAL_ERROR "" )
endif(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
# handle the QUIETLY and REQUIRED arguments and set OCC_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(OCC REQUIRED_VARS OCC_INCLUDE_DIR VERSION_VAR OCC_VERSION_STRING)
if(OCC_FOUND)
foreach(lib IN LISTS OCC_LIBS)
#Use the specified library location if given
find_library(OCC_TEMP_LIB ${lib} HINTS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH)
if(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
message( "" )
message( "*** OpenCascade library missing ***" )
message( "Could not find a library for ${lib} at ${OCC_LIBRARY_DIR}" )
message( "Verify your OpenCascade installation or pass CMake" )
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" )
message( "" )
message( FATAL_ERROR "" )
else(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
list(APPEND OCC_LIBRARIES ${OCC_TEMP_LIB})
endif(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
unset(OCC_TEMP_LIB CACHE)
endforeach(lib)
#Convert path names to absolute for cleaner display
get_filename_component(OCC_INCLUDE_DIR "${OCC_INCLUDE_DIR}" ABSOLUTE)
get_filename_component(OCC_LIBRARY_DIR "${OCC_LIBRARY_DIR}" ABSOLUTE)
message(STATUS "Found ${OCC_TYPE} version: ${OCC_VERSION_STRING}")
message(STATUS " ++ ${OCC_TYPE} include directory: ${OCC_INCLUDE_DIR}")
message(STATUS " ++ ${OCC_TYPE} shared libraries directory: ${OCC_LIBRARY_DIR}")
endif(OCC_FOUND)
+11 -4
View File
@@ -12,6 +12,15 @@ find_library( NGSPICE_LIBRARY ngspice
PATH_SUFFIXES src/.libs lib
)
if( WIN32 AND MSYS )
# NGSPICE_LIBRARY points to libngspice.dll.a on Windows,
# but the goal is to find out the DLL name.
find_library( NGSPICE_DLL NAMES libngspice-0.dll libngspice-1.dll )
else()
set( NGSPICE_DLL "${NGSPICE_LIBRARY}" )
endif()
include( FindPackageHandleStandardArgs )
if( ${NGSPICE_INCLUDE_DIR} STREQUAL "NGSPICE_INCLUDE_DIR-NOTFOUND" OR ${NGSPICE_LIBRARY} STREQUAL "NGSPICE_LIBRARY-NOTFOUND" )
@@ -28,12 +37,10 @@ if( ${NGSPICE_INCLUDE_DIR} STREQUAL "NGSPICE_INCLUDE_DIR-NOTFOUND" OR ${NGSPICE_
endif()
find_package_handle_standard_args( ngspice
REQUIRED_VARS
NGSPICE_INCLUDE_DIR
NGSPICE_LIBRARY
)
REQUIRED_VARS NGSPICE_INCLUDE_DIR NGSPICE_LIBRARY NGSPICE_DLL )
mark_as_advanced(
NGSPICE_INCLUDE_DIR
NGSPICE_LIBRARY
NGSPICE_DLL
)
+1 -1
View File
@@ -35,4 +35,4 @@
# be set after each version tag is added to the git repo. This will
# give developers a reasonable idea where which branch was used to build
# KiCad.
set( KICAD_VERSION "5.0.0-rc1" )
set( KICAD_VERSION "5.0.2-unknown" )
+3
View File
@@ -72,4 +72,7 @@
#define KIFACE_SUFFIX "@KIFACE_SUFFIX@"
#define KIFACE_PREFIX "@KIFACE_PREFIX@"
/// Allows scripts install directory to be referenced by the program code.
#define PYTHON_DEST "@PYTHON_DEST@"
#endif // CONFIG_H_
+1 -1
View File
@@ -1128,7 +1128,7 @@ removed: (common/infospgm.cpp) is no longer needed
When a sheet is deleted by block delete. it is put in undo list.
It is really deleted after 10 changes (when the undo list is full).
At this time, the associated data is also deleted.
If an other (not deleted) sheet shares the same data, this data is lost.
If another (not deleted) sheet shares the same data, this data is lost.
Need work to solve this problem and keep the undo/redo feature.
+1 -1
View File
@@ -281,7 +281,7 @@ Component library object and other minor improvements.
Speed up ZONE_CONTAINER::Copy method
Speed up NETINFO_ITEM* BOARD::FindNet( const wxString& aNetname ) by using afast binary search
Switch to kbool V2.1. This version solves others problems in zones calculations.
Adding an other way to generate thermal shape; DO NOT USE: this is for kbool tests only
Adding another way to generate thermal shape; DO NOT USE: this is for kbool tests only
(I am thinking some bugs are remaining, so i am always working on kbool tests.
Klaas Olwerda is supporting me)
+1 -1
View File
@@ -46,7 +46,7 @@ PROJECT_BRIEF =
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
# Doxygen will copy the logo to the output directory.
PROJECT_LOGO =
PROJECT_LOGO = ../kicad_doxygen_logo.png
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
+71 -74
View File
@@ -95,22 +95,35 @@ available and is always required to build KiCad.
## Python Programming Language ## {#python}
The [Python][] programming language is used to provide scripting support to KiCad. It only needs
to be install if the [KiCad scripting](#kicad_scripting) build configuration option is enabled.
The [Python][] programming language is used to provide scripting support to KiCad. It needs
to be installed unless the [KiCad scripting](#kicad_scripting) build configuration option is
disabled.
## wxPython Library ## {#wxpython}
The [wxPython][] library is used to provide a scripting console for Pcbnew. It only needs to be
installed if the [wxPython scripting](#wxpython_scripting) build configuration option is enabled.
When building KiCad with wxPython support, make sure the version of the wxWidgets library and
the version of wxPython installed on your system are the same. Mismatched versions have been
known to cause runtime issues.
The [wxPython][] library is used to provide a scripting console for Pcbnew. It needs to be
installed unless the [wxPython scripting](#wxpython_scripting) build configuration option is
disabled. When building KiCad with wxPython support, make sure the version of the wxWidgets
library and the version of wxPython installed on your system are the same. Mismatched versions
have been known to cause runtime issues.
## Curl Multi-Protocol File Transfer Library ## {#curl}
The [Curl Multi-Protocol File Transfer Library][libcurl] is used to provide secure internet
file transfer access for the [GitHub][] plug in. This library only needs to be installed if
the GitHub plug build option is enabled.
file transfer access for the [GitHub][] plug in. This library needs to be installed unless
the GitHub plug build option is disabled.
## OpenCascade Community Edition (OCE) ## {#oce}
The [OpenCascade Community Edition][liboce] is used to provide support for loading and saving
3D model file formats such as STEP. This library needs to be installed unless the OCE build
option is disabled.
## Ngspice Library ## {#ngspice}
The [Ngspice Library][libngsice] is used to provide Spice simulation support in the schematic
editor. Make sure the the version of ngspice library used was built with the--with-ngshared
option. This library needs to be installed unless the Spice build option is disabled.
# KiCad Build Configuration Options # {#build_opts}
@@ -175,29 +188,22 @@ The KICAD_SCRIPTING_ACTION_MENU option allows Python scripts to be added directl
menu. This option is disabled by default. Please note that this option is highly experimental
and can cause Pcbnew to crash if Python scripts create an invalid object state within Pcbnew.
## Setting the Build Version and Repository Name ## {#build_version_opt}
## KiCad Build Version ## {#build_version_opt}
The KiCad version string is defined by the three CMake variables KICAD_VERSION, KICAD_BRANCH_NAME,
and KICAD_VERSION_EXTRA. Variables KICAD_BRANCH_NAME and KICAD_VERSION_EXTRA are defined as empty
strings and can be set at configuration. Unless the source branch is a stable release archive,
KICAD_VERSION is set to "no-vcs-found". If an optional variable is not define, it is not appended
to the full version string. If an optional variable is defined it is appended along with a leading
'-' to the full version string as follows:
The KiCad version string is defined by the output of `git describe --dirty` when git is available
or the version string defined in CMakeModules/KiCadVersion.cmake with the value of
KICAD_VERSION_EXTRA appended to the former. If the KICAD_VERSION_EXTRA variable is not define,
it is not appended to the version string. If the KICAD_VERSION_EXTRA variable is defined it
is appended along with a leading '-' to the full version string as follows:
KICAD_VERSION[-KICAD_BRANCH_NAME][-KICAD_VERSION_EXTRA]
(KICAD_VERSION[-KICAD_VERSION_EXTRA])
When the version string is set to "no-vcs-found", the build script automatically creates the
version string information from the [git][] repository information as follows:
The build script automatically creates the version string information from the [git][] repository
information as follows:
(2016-08-26 revision 67230ac)-master
| | |
| | branch name, "HEAD" if not on a branch,
| | or "unknown" if no .git present
| |
| abbreviated commit hash, or no-git if no .git
| present
(5.0.0-rc2-dev-100-g5a33f0960)
|
date of commit, or date of build if no .git present
output of `git describe --dirty` if git is available.
# Getting the KiCad Source Code ## {#getting_src}
@@ -215,7 +221,7 @@ copy on your machine by using the following command:
Here is a list of source links:
Stable release archive: https://launchpad.net/kicad/4.0/4.0.2/+download/kicad-4.0.2.tar.xz
Stable release archive: https://launchpad.net/kicad/4.0/4.0.7/+download/kicad-4.0.7.tar.xz
Development branch: https://code.launchpad.net/~kicad-product-committers/kicad/+git/product-git/+ref/master
@@ -230,9 +236,6 @@ To perform a full build on Linux, run the following commands:
mkdir build/debug # Optional for debug build.
cd build/release
cmake -DCMAKE_BUILD_TYPE=Release \
-DKICAD_SCRIPTING=ON \
-DKICAD_SCRIPTING_MODULES=ON \
-DKICAD_SCRIPTING_WXPYTHON=ON \
../../
make
sudo make install
@@ -249,38 +252,19 @@ the dependencies from source which is a huge and frustrating undertaking. The [
provides packages for all of the require dependencies to build KiCad. To setup the [MSYS2][]
build environment, depending on your system download and run either the [MSYS2 32-bit Installer][]
or the [MSYS2 64-bit Installer][]. After the installer is finished, update to the latest
package versions by running the `msys2_shell.bat` file located in the MSYS2 install path and
package versions by running the `msys2_shell.cmd` file located in the MSYS2 install path and
running the command `pacman -Syu`. If the msys2-runtime package is updated, close the shell
and run `msys2_shell.bat`.
and run `msys2_shell.cmd`.
## MSYS2 the Easy Way ## {#msys2_easy}
## Building using MSYS2 ## {#msys2_build}
The easiest way to build KiCad using the [MSYS2][] build environment is to use the KiCad
[PKGBUILD][] provided by the MSYS2 project to build package using the head of the KiCad
development branch. To build the KiCad package, run the `msys2_shell.bat` file located in the
MSYS2 install path and run the following commands:
pacman -S base-devel git
mkdir src
cd src
git clone https://github.com/Alexpux/MINGW-packages
cd MinGW-packages/mingw-w64-kicad-git
makepkg-mingw -is
This will download and install all of the build dependencies, clone the KiCad source mirror
from GitHub, create both 32-bit and 64-bit KiCad packages depending on your MSYS setup, and
install the newly built KiCad packages. Please note that this build process takes a very
long time to build even on a fast system.
## MSYS2 the Hard Way ## {#msys2_hard}
If you do not want to create KiCad packages and prefer the traditional `make && make install`
method of building KiCad, your task is significantly more involved. For 64 bit builds run
the `mingw64_shell.bat` file located in the MSYS2 install path. At the command prompt run the
the following commands:
The following commands assume you are building for 64-bit Windows, and that you already have
the KiCad source code in a folder called `kicad-source` in your home directory. See below
for changes if you need to build for 32-bit instead. Run `mingw64.exe` from the MSYS2
install path. At the command prompt run the the following commands:
pacman -S base-devel \
git \
mingw-w64-x86_64-cmake \
mingw-w64-x86_64-doxygen \
mingw-w64-x86_64-gcc \
@@ -294,7 +278,9 @@ the following commands:
mingw-w64-x86_64-wxPython \
mingw-w64-x86_64-wxWidgets \
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-glm
mingw-w64-x86_64-glm \
mingw-w64-x86_64-oce \
mingw-w64-x86_64-ngspice
cd kicad-source
mkdir -p build/release
mkdir build/debug # Optional for debug build.
@@ -304,15 +290,13 @@ the following commands:
-DCMAKE_PREFIX_PATH=/mingw64 \
-DCMAKE_INSTALL_PREFIX=/mingw64 \
-DDEFAULT_INSTALL_PATH=/mingw64 \
-DKICAD_SCRIPTING=ON \
-DKICAD_SCRIPTING_MODULES=ON \
-DKICAD_SCRIPTING_WXPYTHON=ON \
../../
make install
For 32-bit builds, run `mingw32_shell.bat` and change `x86_64` to `i686` in the package names and
For 32-bit builds, run `mingw32.exe` and change `x86_64` to `i686` in the package names and
change the paths in the cmake configuration from `/mingw64` to `/mingw32`.
For debug builds, run the cmake command with `-DCMAKE_BUILD_TYPE=Debug` from the `build/debug` folder.
## Known MSYS2 Build Issues ## {#known_issues_msys2}
@@ -328,13 +312,27 @@ to crash. You must downgrade to version 1.57 by running the command:
pacman -U /var/cache/pacman/pkg/mingw-w64-x86_64-boost-1.57.0-4-any.pkg.tar.xz
If the file mingw-w64-x86_64-boost-1.57.0-4-any.pkg.tar.xz is no longer in your pacman cache,
you will have to down load it from the [MSYS2 64-bit SourceForge repo][]. You should also
you will have to download it from the [MSYS2 64-bit SourceForge repo][]. You should also
configure pacman to prevent upgrading the 64-bit Boost package by adding:
IgnorePkg = mingw-w64-x86_64-boost
to your /etc/pacman.conf file.
### Building OCE from source
KiCad requires OCE by default, and the version installed by `pacman` can cause build errors in
x86_64 systems as of March 2018. In order to work around this, you can build OCE from source on
these systems. Building OCE on Windows requires that you place the source code in a very short
directory path, otherwise you will run into errors caused by the maximum path length on Windows.
In the example below, the `MINGW-packages` repository is cloned to `/c/mwp`, which is equivalent to
`C:\mwp` in Windows path terminology. You may wish to change the destination of the `git clone`
command if you do not want to place it on the root of your C drive, but if you run in to strange
compilation errors about missing files, it is probably because your path is too long.
git clone https://github.com/Alexpux/MINGW-packages /c/mwp
cd /c/mwp/mingw-w64-oce
makepkg-mingw -is
# Building KiCad on macOS # {#build_osx}
@@ -345,10 +343,10 @@ building and packaging KiCad on macOS, see the [macOS bundle build scripts][].
In the following set of commands, replace the macOS version number (i.e. 10.9) with the desired
minimum version. It may be easiest to build for the same version you are running.
KiCad currently won't work with a stock version of wxWidgets that can be downloaded or installed by
package managers like MacPorts or Homebrew. To avoid having to deal with patches a [KiCad fork of
wxWidgets][] is being maintained on GitHub. All the needed patches and some other fixes/improvements
are contained in the `kicad/macos-wx-3.0` branch.
KiCad currently won't work with a stock version of wxWidgets that can be downloaded or
installed by package managers like MacPorts or Homebrew. To avoid having to deal with
patches a [KiCad fork of wxWidgets][] is being maintained on GitHub. All the needed patches
and some other fixes/improvements are contained in the `kicad/macos-wx-3.0` branch.
To perform a wxWidgets build, execute the following commands:
@@ -411,9 +409,6 @@ configuration as follows to point it to your own wxWidgets/wxPython:
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 \
-DwxWidgets_CONFIG_EXECUTABLE=<your wxWidgets build folder>/wx-bin/bin/wx-config \
-DKICAD_SCRIPTING=ON \
-DKICAD_SCRIPTING_MODULES=ON \
-DKICAD_SCRIPTING_WXPYTHON=ON \
-DPYTHON_EXECUTABLE=<path-to-python-exe>/python \
-DPYTHON_SITE_PACKAGE_PATH=<your wxWidgets build folder>/wx-bin/lib/python2.7/site-packages \
-DCMAKE_INSTALL_PREFIX=../bin \
@@ -456,9 +451,9 @@ you will have to apply the Boost patches in the KiCad source [patches folder][].
[Cairo]: http://cairographics.org/
[Python]: https://www.python.org/
[wxPython]: http://wxpython.org/
[MSYS2]: http://msys2.github.io/
[MSYS2 32-bit Installer]: http://repo.msys2.org/distrib/i686/msys2-i686-20150916.exe
[MSYS2 64-bit Installer]: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20150916.exe
[MSYS2]: http://www.msys2.org/
[MSYS2 32-bit Installer]: http://repo.msys2.org/distrib/i686/msys2-i686-20161025.exe
[MSYS2 64-bit Installer]: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20161025.exe
[PKGBUILD]: https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-kicad-git/PKGBUILD
[macOS bundle build scripts]:http://bazaar.launchpad.net/~adamwolf/+junk/kicad-mac-packaging/files
[KiCad fork of wxWidgets]:https://github.com/KiCad/wxWidgets
@@ -469,3 +464,5 @@ you will have to apply the Boost patches in the KiCad source [patches folder][].
[GLM]: http://glm.g-truc.net/
[git]: https://git-scm.com/
[OCE]: https://github.com/tpaviot/oce
[liboce]: https://github.com/tpaviot/oce
[libngspice]: https://sourceforge.net/projects/ngspice/
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

+1 -1
View File
@@ -45,7 +45,7 @@ PROJECT_BRIEF =
# exceed 55 pixels and the maximum width should not exceed 200 pixels.
# Doxygen will copy the logo to the output directory.
PROJECT_LOGO =
PROJECT_LOGO = Documentation/kicad_doxygen_logo.png
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
+661
View File
@@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.
+674
View File
@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+13
View File
@@ -0,0 +1,13 @@
The majority of KiCad's source code is developed and distributed under the terms
of the GPLv3 or later. However, It does include some third-party code licensed
under AGPLv3 or later.
Both licenses are compatible, but a combined works as is will be governed under
the terms of the AGPLv3 (or later). This includes any binary distribution of the
KiCad EDA suite by the KiCad project or any third party, e.g. Linux distributor.
You are free to use the *sources* under the terms of their respective licenses.
Licensed under AGPLv3 (or later):
- TTL [https://www.sintef.no/projectweb/geometry-toolkits/ttl/], sources in include/ttl/*
Licensed under GPLv3 (or later):
+3 -1
View File
@@ -19,7 +19,7 @@
<key>CFBundleLongVersionString</key>
<string></string>
<key>CFBundleName</key>
<string>bitmap2component</string>
<string>Bitmap 2 Component</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
@@ -32,6 +32,8 @@
<true/>
<key>LSRequiresCarbon</key>
<true/>
<key>NSRequiresAquaSystemAppearance</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>NSHighResolutionCapable</key>
+1 -1
View File
@@ -639,7 +639,7 @@ void BM2CMP_FRAME::ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat )
if( !potrace_bitmap )
{
wxString msg;
msg.Printf( wxT( "Error allocating memory for potrace bitmap" ) );
msg.Printf( _( "Error allocating memory for potrace bitmap" ) );
wxMessageBox( msg );
return;
}
+7 -7
View File
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 30 2017)
// C++ code generated with wxFormBuilder (version Jun 5 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@@ -119,21 +119,21 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxALL, 5 );
m_buttonLoad = new wxButton( m_panelRight, wxID_ANY, _("Load Bitmap"), wxDefaultPosition, wxDefaultSize, 0 );
brightSizer->Add( m_buttonLoad, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
brightSizer->Add( m_buttonLoad, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 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") );
brightSizer->Add( m_buttonExport, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
brightSizer->Add( m_buttonExport, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 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 = 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 );
@@ -142,7 +142,7 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
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.") );
sbSizer2->Add( m_sliderThreshold, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
sbSizer2->Add( m_sliderThreshold, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
m_checkNegative = new wxCheckBox( sbSizer2->GetStaticBox(), wxID_ANY, _("Negative"), wxDefaultPosition, wxDefaultSize, 0 );
sbSizer2->Add( m_checkNegative, 0, wxBOTTOM|wxTOP, 10 );
@@ -153,7 +153,7 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
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->SetSelection( 0 );
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_radio_PCBLayer, 0, wxALL|wxEXPAND, 5 );
+7 -6
View File
@@ -14,6 +14,7 @@
<property name="file">bitmap2cmp_gui_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property>
<property name="name">bitmap2cmp_gui</property>
<property name="namespace"></property>
@@ -1812,7 +1813,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT</property>
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="BottomDockable">1</property>
@@ -1900,7 +1901,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT</property>
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="1">
<property name="BottomDockable">1</property>
@@ -2019,7 +2020,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Format</property>
<property name="label">Format:</property>
<property name="majorDimension">1</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
@@ -2082,7 +2083,7 @@
<property name="proportion">0</property>
<object class="wxStaticBoxSizer" expanded="1">
<property name="id">wxID_ANY</property>
<property name="label">Image Options</property>
<property name="label">Image Options:</property>
<property name="minimum_size"></property>
<property name="name">sbSizer2</property>
<property name="orient">wxVERTICAL</property>
@@ -2174,7 +2175,7 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT</property>
<property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxSlider" expanded="1">
<property name="BottomDockable">1</property>
@@ -2420,7 +2421,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">3</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
+1 -1
View File
@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Dec 30 2017)
// C++ code generated with wxFormBuilder (version Jun 5 2018)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
Binary file not shown.
+7 -4
View File
@@ -2,7 +2,7 @@
# This program source code file is part of KICAD, a free EDA CAD application.
#
# Copyright (C) 2011 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
# Copyright (C) 2011-2016 Kicad Developers, see change_log.txt for contributors#.
# Copyright (C) 2011-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
@@ -98,6 +98,7 @@ set( BMAPS_SMALL
pintype_opencoll
pintype_openemit
pintype_noconnect
refresh
tree_nosel
tree_sel
)
@@ -304,8 +305,7 @@ set( BMAPS_MID
label2glabel
label2text
label
lang_catalan
lang_chinese
lang_ca
lang_bg
lang_cs
lang_def
@@ -326,6 +326,7 @@ set( BMAPS_MID
lang_sk
lang_sl
lang_lt
lang_zh
language
layers_manager
leave_sheet
@@ -344,6 +345,7 @@ set( BMAPS_MID
load_module_board
load_module_lib
local_ratsnest
lock_unlock
locked
measurement
minus
@@ -411,6 +413,7 @@ set( BMAPS_MID
options_all_vias
options_arc
options_circle
options_generic
options_module
options_pad
options_pinsheet
@@ -630,7 +633,7 @@ function( svg2png inputFile outFile pngWidth pngHeight )
add_custom_command(
OUTPUT ${outFile}
COMMAND ${Inkscape_EXECUTABLE} --export-area-snap -f ${inputFile} -e ${outFile}
COMMAND ${Inkscape_EXECUTABLE} --without-gui --export-area-snap -f ${inputFile} -e ${outFile}
-w ${pngWidth} -h ${pngHeight} > ${logfile}
DEPENDS ${inputFile}
COMMENT "Creating ${pngHeight} pixel tall ${outFile}"
+34
View File
@@ -0,0 +1,34 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.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, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
0x61, 0x00, 0x00, 0x01, 0x0b, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x9d, 0xd3, 0xbd, 0x4a, 0x43,
0x41, 0x10, 0x05, 0xe0, 0xcf, 0xc4, 0x18, 0xd2, 0xda, 0x08, 0x82, 0x18, 0xc1, 0xce, 0x1f, 0xb0,
0x55, 0x44, 0xc1, 0x42, 0x1b, 0xf3, 0x22, 0x8a, 0xb6, 0x62, 0x2f, 0x82, 0xb1, 0xf0, 0x25, 0x2c,
0x05, 0x15, 0x2c, 0x54, 0x62, 0x91, 0x32, 0x88, 0x85, 0x79, 0x01, 0x5b, 0x1f, 0x20, 0x2a, 0x11,
0x7f, 0x9a, 0x09, 0x5c, 0x96, 0x24, 0x24, 0x39, 0x70, 0x2f, 0x3b, 0x3b, 0x7b, 0xe6, 0xec, 0xbd,
0x67, 0x86, 0xde, 0x18, 0xc7, 0x1c, 0xca, 0xc8, 0x67, 0xf6, 0x8f, 0x51, 0xea, 0xc3, 0xb3, 0x8e,
0x5b, 0xb4, 0xf0, 0x17, 0x4f, 0x0b, 0x57, 0x38, 0x8d, 0xb8, 0x9c, 0x55, 0xe9, 0x20, 0x8f, 0x73,
0x1c, 0xe2, 0x07, 0x35, 0xbc, 0x22, 0x87, 0x25, 0x54, 0x32, 0xe7, 0xa7, 0xf0, 0x96, 0x2a, 0x5f,
0x44, 0xf5, 0xa7, 0xac, 0x42, 0x60, 0x17, 0xed, 0xcc, 0x8d, 0x2a, 0x29, 0x79, 0x23, 0x12, 0x35,
0x14, 0x92, 0xdc, 0x22, 0x9a, 0x78, 0x46, 0x03, 0x8f, 0xd8, 0x49, 0x0b, 0xdc, 0xe1, 0x17, 0x0b,
0x46, 0xc0, 0x04, 0xbe, 0x70, 0x3f, 0x0a, 0x39, 0x87, 0x19, 0x14, 0xf1, 0x32, 0x04, 0x6f, 0x05,
0xfb, 0x98, 0x14, 0xaf, 0xbd, 0xd8, 0x1c, 0x14, 0x67, 0xa9, 0x9d, 0xc3, 0xe2, 0x01, 0x9f, 0x49,
0x1b, 0x0c, 0x8c, 0x79, 0x7c, 0xe3, 0x3a, 0x4d, 0x6c, 0x87, 0x45, 0x8d, 0xb0, 0xac, 0x19, 0x16,
0x66, 0x51, 0x44, 0x3d, 0x1c, 0x5b, 0xd3, 0xa5, 0x59, 0x3a, 0x8d, 0xd2, 0x8e, 0x38, 0x55, 0xae,
0x47, 0xbe, 0xda, 0xad, 0x95, 0xdf, 0x33, 0xeb, 0x31, 0x1c, 0x60, 0x33, 0xd4, 0x96, 0xb1, 0x15,
0xae, 0x55, 0x71, 0xd4, 0xed, 0xdb, 0x66, 0xa3, 0xfa, 0x09, 0x2e, 0x93, 0x61, 0xfa, 0xc0, 0x0d,
0x56, 0xfb, 0xfd, 0x9c, 0x52, 0x8c, 0x6a, 0xf6, 0x16, 0xd3, 0x31, 0xd2, 0x85, 0x5e, 0xa4, 0x7f,
0x48, 0xf6, 0x3b, 0x32, 0xac, 0x39, 0x22, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE refresh_xpm[1] = {{ png, sizeof( png ), "refresh_xpm" }};
//EOF
+84 -85
View File
@@ -8,91 +8,90 @@
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, 0x33, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0xd6, 0x79, 0x4c, 0x93,
0x67, 0x1c, 0x07, 0xf0, 0x87, 0x8a, 0x47, 0xbd, 0xa6, 0x80, 0x32, 0x20, 0x9b, 0xd3, 0x2c, 0xf3,
0x0f, 0x37, 0xdd, 0x8c, 0x59, 0xe2, 0xa6, 0x8b, 0xc6, 0x73, 0x32, 0xe4, 0xb2, 0xf4, 0x82, 0xb6,
0x54, 0xe9, 0x05, 0x0c, 0x14, 0x07, 0x2a, 0xa0, 0x4e, 0x86, 0x58, 0x70, 0x43, 0x64, 0x72, 0x08,
0x11, 0x10, 0x25, 0xa0, 0x53, 0x4e, 0x07, 0x28, 0x08, 0x55, 0x04, 0x15, 0x1c, 0x1e, 0xc1, 0x33,
0xe2, 0x7d, 0x15, 0x2b, 0x16, 0x15, 0x95, 0xb6, 0xef, 0x77, 0x6f, 0xbb, 0xd0, 0x50, 0x0e, 0xe9,
0x96, 0xf9, 0x24, 0x4f, 0xde, 0xb4, 0xe9, 0xf3, 0x7c, 0xde, 0xe7, 0xf7, 0x7b, 0xfa, 0x7b, 0x1e,
0x42, 0xac, 0x6d, 0xcb, 0x04, 0x9f, 0x11, 0x57, 0x1e, 0x87, 0xb8, 0xf9, 0xce, 0x24, 0x2c, 0xd6,
0x68, 0xf2, 0x3e, 0xda, 0x68, 0xd6, 0x2a, 0xb9, 0x3d, 0x4f, 0xd2, 0x31, 0x37, 0x22, 0xa6, 0x6b,
0x41, 0xe4, 0xd6, 0x76, 0x67, 0x41, 0x90, 0x76, 0x3c, 0x47, 0xa2, 0x71, 0x11, 0x06, 0x5d, 0x9c,
0x24, 0x0e, 0x3d, 0xc8, 0xf4, 0x12, 0x87, 0xd1, 0x2f, 0xb1, 0x84, 0xb8, 0xf9, 0x4d, 0x26, 0x9b,
0x37, 0x33, 0xfe, 0xbd, 0xe0, 0x21, 0x1a, 0xe7, 0xc0, 0x95, 0x96, 0x2f, 0x8a, 0x8a, 0xd3, 0xde,
0x78, 0xf8, 0x18, 0x2d, 0x77, 0xef, 0xa3, 0xbb, 0xe9, 0xf4, 0x7a, 0x5c, 0x7f, 0xf0, 0x08, 0x25,
0x67, 0xce, 0x21, 0xfe, 0x50, 0xa9, 0x9e, 0xbf, 0x7d, 0x57, 0xfb, 0x8c, 0xe0, 0x0d, 0x6d, 0xf4,
0x0b, 0x68, 0xed, 0x79, 0xd2, 0x7b, 0x4e, 0x7e, 0x81, 0x35, 0xf6, 0x3c, 0x79, 0xd4, 0xe0, 0xc8,
0x0f, 0xdc, 0xd9, 0xf4, 0xa0, 0x87, 0x3b, 0x8a, 0x2b, 0xde, 0x52, 0x14, 0x85, 0x9a, 0x8b, 0x97,
0x21, 0x4a, 0x4c, 0x87, 0x35, 0xad, 0xfd, 0xe5, 0x2b, 0x2c, 0x88, 0x8c, 0xd3, 0x8f, 0xf0, 0xf2,
0xd7, 0xbd, 0x8b, 0xb0, 0x19, 0xcf, 0x91, 0x46, 0x4c, 0x12, 0x87, 0xb4, 0x37, 0xdf, 0xbc, 0x6d,
0x1e, 0x7c, 0xeb, 0x89, 0x1a, 0x85, 0x0d, 0x4d, 0x56, 0x41, 0xe1, 0xd9, 0xf9, 0x7a, 0x3a, 0xac,
0x86, 0x31, 0xac, 0x95, 0x2f, 0xfb, 0x27, 0x96, 0x73, 0x1d, 0xed, 0x79, 0xb2, 0x86, 0x15, 0x71,
0x49, 0x1d, 0x2f, 0x5f, 0xbf, 0xb1, 0x18, 0x6c, 0x84, 0xd2, 0xcb, 0xab, 0x07, 0x45, 0x92, 0x4a,
0x2b, 0x29, 0x47, 0x5f, 0x85, 0xa1, 0xf5, 0xb1, 0x1a, 0xe3, 0xd8, 0x92, 0x67, 0x7d, 0x0c, 0x5b,
0x0f, 0xe1, 0x62, 0x7b, 0xae, 0x44, 0xbd, 0xbf, 0xf6, 0x94, 0xbe, 0xbf, 0x09, 0xfe, 0xba, 0x79,
0x0b, 0x9e, 0xb1, 0x89, 0xef, 0x44, 0x72, 0x6b, 0xea, 0xa8, 0x09, 0x7c, 0xb9, 0xa1, 0x3b, 0x97,
0x1f, 0xf8, 0x04, 0x68, 0x2c, 0x77, 0x15, 0x5b, 0x7a, 0x88, 0xe9, 0x23, 0xc1, 0xf7, 0x9b, 0x12,
0x90, 0x53, 0x7d, 0x02, 0x9a, 0x8e, 0x17, 0x7d, 0x26, 0x79, 0xab, 0xd3, 0xe1, 0xd1, 0xb3, 0xe7,
0x03, 0x22, 0xc6, 0x4d, 0x61, 0xc7, 0x93, 0x1a, 0x1a, 0xaf, 0xb7, 0x9a, 0x3e, 0x77, 0xe9, 0xf4,
0xa0, 0x73, 0xac, 0xb6, 0x80, 0x46, 0xb2, 0x65, 0x0d, 0x0b, 0x53, 0x8a, 0xb0, 0x38, 0xa5, 0x88,
0x9a, 0x16, 0xf1, 0xab, 0x7e, 0x2c, 0x3f, 0x90, 0x1a, 0xc9, 0x96, 0x1a, 0x26, 0x4b, 0x7e, 0xea,
0x62, 0x29, 0x93, 0x91, 0x79, 0xb4, 0x16, 0x75, 0x97, 0xaf, 0x61, 0xe9, 0x26, 0x65, 0xbf, 0xc8,
0xc9, 0x96, 0xab, 0xb0, 0xe3, 0x4a, 0x0c, 0xaa, 0x4b, 0x57, 0xa8, 0xee, 0xef, 0x3a, 0x3a, 0x5f,
0xc3, 0x9e, 0x2b, 0xbd, 0x6f, 0x09, 0x71, 0xe4, 0xe5, 0x5e, 0x05, 0x75, 0x08, 0x3b, 0xa3, 0x46,
0x78, 0xe3, 0x53, 0xac, 0x39, 0xfd, 0x04, 0x32, 0xd5, 0x1d, 0xb8, 0x1f, 0xac, 0xc7, 0xac, 0x1d,
0xf9, 0x94, 0xcb, 0x9a, 0xad, 0x3a, 0x26, 0x47, 0x4e, 0x31, 0x96, 0x0b, 0xe0, 0x20, 0x08, 0xd6,
0x2f, 0x8a, 0x8e, 0xa7, 0xb6, 0xfd, 0x51, 0x82, 0xbb, 0xea, 0x36, 0x5c, 0xb8, 0x7d, 0x07, 0x74,
0x5e, 0x0d, 0x47, 0x1a, 0x9b, 0xa9, 0x9e, 0x78, 0x9b, 0xb6, 0x03, 0x13, 0xf9, 0xf2, 0x56, 0x0b,
0x88, 0xc9, 0x96, 0xe6, 0x2f, 0xda, 0x53, 0x01, 0xc9, 0x89, 0x3b, 0x90, 0x9d, 0xbc, 0x0b, 0x09,
0x8d, 0x88, 0x8e, 0xdf, 0x04, 0xbb, 0xf2, 0x0a, 0xdc, 0xca, 0x2e, 0x60, 0xc1, 0xe1, 0xb3, 0xf8,
0x7a, 0x5f, 0x0d, 0x26, 0x29, 0xb3, 0xe0, 0x1c, 0x9f, 0x8d, 0xd1, 0xe1, 0x09, 0x94, 0xad, 0x38,
0x4c, 0x6f, 0xe3, 0xbd, 0x92, 0x62, 0x78, 0x0a, 0x91, 0x5c, 0x5a, 0x69, 0xe8, 0xbd, 0xca, 0x7b,
0x6d, 0x1a, 0x38, 0xf2, 0x15, 0x57, 0x2c, 0xa0, 0xe1, 0x2b, 0x02, 0x76, 0xcf, 0xde, 0x75, 0x18,
0x9c, 0xa3, 0x57, 0xc1, 0x3b, 0x76, 0xcd, 0xf4, 0xf4, 0x2e, 0x6f, 0xa1, 0x91, 0xf3, 0x58, 0x58,
0xd8, 0x88, 0x6f, 0x0f, 0x9c, 0xc2, 0xe7, 0x19, 0x65, 0x60, 0x0a, 0x43, 0xe1, 0x92, 0x56, 0x84,
0x71, 0x3b, 0x0b, 0x30, 0x74, 0x7b, 0x0e, 0x88, 0x72, 0x0f, 0x6c, 0x04, 0x21, 0x86, 0xf2, 0xa6,
0x0b, 0x7d, 0xc2, 0x69, 0xfc, 0x83, 0x3b, 0x09, 0x02, 0x9b, 0x2d, 0x77, 0x9c, 0xa7, 0x38, 0xfe,
0x8b, 0x84, 0x5c, 0x2c, 0x2b, 0x69, 0x86, 0x6b, 0xe9, 0x79, 0xd3, 0x73, 0x71, 0x51, 0x13, 0xe6,
0x1f, 0x3a, 0x83, 0x6f, 0xe8, 0x90, 0xce, 0xa4, 0x57, 0x33, 0x35, 0xf3, 0x08, 0x26, 0x6c, 0x49,
0x85, 0xc3, 0xef, 0x07, 0x31, 0xf2, 0xb7, 0x7d, 0x26, 0xa4, 0x1b, 0x2a, 0x3b, 0xdb, 0xdc, 0x07,
0xba, 0x74, 0xfb, 0x1e, 0xe8, 0x52, 0xd5, 0x60, 0x01, 0x31, 0x96, 0x0b, 0xd7, 0x4f, 0x8e, 0x49,
0xc7, 0x9c, 0x03, 0xf5, 0x98, 0x4b, 0xe7, 0x65, 0x0e, 0xbd, 0x82, 0xd9, 0x05, 0x27, 0x31, 0x2b,
0xaf, 0x16, 0xd3, 0x73, 0xab, 0x30, 0x35, 0xab, 0x02, 0x8e, 0x5b, 0x33, 0x30, 0x4c, 0xb4, 0x1a,
0x23, 0xd6, 0x25, 0x80, 0x11, 0x93, 0x06, 0xf2, 0x4b, 0x5a, 0x37, 0xa4, 0x2f, 0x3e, 0x7d, 0xae,
0x0f, 0xd4, 0x74, 0xa3, 0x15, 0x2e, 0x82, 0xa0, 0xda, 0x5e, 0xe5, 0x86, 0x1f, 0xe8, 0xb8, 0x21,
0x51, 0x6f, 0x9c, 0x74, 0x46, 0x6e, 0x35, 0xa6, 0xef, 0xad, 0xc2, 0xb4, 0x9c, 0xa3, 0x26, 0x60,
0x4a, 0x66, 0x19, 0x9c, 0x12, 0xf3, 0x30, 0x6a, 0x4d, 0x2c, 0x46, 0x44, 0x25, 0x82, 0x11, 0xbd,
0x03, 0x64, 0x6d, 0x1c, 0x08, 0x5b, 0x06, 0x12, 0x95, 0x04, 0xe2, 0x25, 0xa6, 0x56, 0xed, 0xcc,
0x80, 0xf6, 0x55, 0x27, 0x9e, 0x3c, 0xd7, 0x9a, 0x21, 0xe3, 0x2e, 0x75, 0x16, 0x06, 0x97, 0x5b,
0x42, 0xae, 0x7c, 0xe1, 0xd8, 0xd5, 0xb1, 0xaf, 0x3f, 0xc9, 0x28, 0x45, 0x77, 0xff, 0x38, 0xbd,
0x18, 0xce, 0xa9, 0x85, 0x60, 0x06, 0x6e, 0xc4, 0xd0, 0x55, 0xe1, 0x60, 0xd2, 0xe1, 0xb2, 0x89,
0xcf, 0x32, 0x87, 0xcc, 0x1c, 0x3a, 0xbe, 0x42, 0xbf, 0x2e, 0x3b, 0xdf, 0xb4, 0xc5, 0xbf, 0xfc,
0x71, 0x03, 0xf2, 0x54, 0xf5, 0x88, 0x2d, 0x28, 0x86, 0x7f, 0xd2, 0x6e, 0x38, 0xf9, 0x29, 0x0a,
0x2d, 0x21, 0x37, 0x5f, 0xef, 0x61, 0x8a, 0xa8, 0x0e, 0xbb, 0xe4, 0x03, 0x30, 0xf6, 0xf1, 0xc9,
0x05, 0x18, 0x9b, 0x90, 0x83, 0xe1, 0xe1, 0x4a, 0x0c, 0xdb, 0xb2, 0x0b, 0x43, 0x12, 0xb2, 0xfb,
0x00, 0x3d, 0x72, 0xa4, 0xcb, 0x57, 0x35, 0x58, 0x84, 0xcd, 0x58, 0x23, 0x67, 0x04, 0xaf, 0xef,
0x1c, 0xe3, 0x23, 0x0e, 0xe8, 0x75, 0xa8, 0xf9, 0x2e, 0xb5, 0x11, 0x87, 0xb5, 0x1b, 0x27, 0xb4,
0xa5, 0x01, 0xe3, 0x93, 0x9e, 0xe0, 0x9f, 0x10, 0x0d, 0x00, 0xf4, 0x84, 0xf6, 0xd7, 0xd6, 0x5b,
0x40, 0x79, 0x74, 0x19, 0xb3, 0xe3, 0x48, 0x4e, 0x1b, 0x0b, 0x74, 0xaf, 0x15, 0x71, 0xe7, 0x10,
0x61, 0xc8, 0x53, 0xd3, 0xe0, 0xb0, 0x58, 0x90, 0x80, 0xf0, 0x41, 0x01, 0x33, 0xe4, 0x17, 0xa2,
0xdb, 0x5b, 0x5d, 0x67, 0x46, 0xd4, 0x74, 0x9e, 0x1c, 0x78, 0x32, 0x0d, 0x71, 0xe7, 0x7c, 0xd4,
0x4f, 0xd5, 0xe6, 0x7c, 0x45, 0xf8, 0x8a, 0x36, 0xf2, 0x73, 0x0a, 0x88, 0x22, 0x9a, 0xde, 0x51,
0xe9, 0xd6, 0x43, 0x82, 0x90, 0xae, 0xac, 0x2a, 0x95, 0x19, 0x5a, 0xb2, 0x51, 0xf9, 0x7c, 0xd4,
0x0a, 0x7f, 0xff, 0x01, 0x8e, 0x07, 0xdf, 0x4f, 0x89, 0xa7, 0xa8, 0x93, 0xc8, 0x22, 0xad, 0x06,
0x7a, 0x42, 0x99, 0x95, 0xb5, 0x26, 0x24, 0xeb, 0x98, 0x4a, 0x3f, 0x81, 0x2f, 0x53, 0x0d, 0x7c,
0xd4, 0xcd, 0x9b, 0x67, 0x4b, 0xdc, 0x45, 0xa9, 0xf4, 0xd1, 0xfd, 0x98, 0xb0, 0xa5, 0x1a, 0x12,
0xb4, 0xb1, 0x8b, 0x6c, 0x4e, 0xb6, 0x1a, 0xda, 0x5d, 0x71, 0x1c, 0x0f, 0x34, 0xcf, 0x8c, 0x35,
0xef, 0x29, 0x59, 0x26, 0xfa, 0xd0, 0xba, 0x7b, 0x82, 0x2b, 0x6f, 0x0a, 0x71, 0x17, 0xae, 0x25,
0x5e, 0xfe, 0xe7, 0x88, 0x97, 0xa8, 0x9d, 0xac, 0x5c, 0xfb, 0x82, 0x44, 0x28, 0x41, 0xb6, 0x65,
0x0e, 0x08, 0xa5, 0xfe, 0x59, 0x85, 0xef, 0xd6, 0xc5, 0x68, 0x99, 0xde, 0xfe, 0xdc, 0xff, 0x76,
0xfd, 0x59, 0xc2, 0xb2, 0xa3, 0x61, 0x16, 0xf1, 0xf0, 0x2f, 0x21, 0xee, 0x02, 0x2d, 0xe1, 0x05,
0x69, 0x48, 0x68, 0x0c, 0x45, 0x62, 0xd2, 0x7a, 0x40, 0xa1, 0x6f, 0x17, 0x46, 0xc6, 0x19, 0xe8,
0x03, 0xaf, 0xfc, 0xff, 0xb9, 0x73, 0x19, 0xc3, 0xeb, 0xca, 0x9b, 0x4f, 0x3c, 0x84, 0x29, 0x74,
0x7f, 0x48, 0x7c, 0x24, 0x6d, 0x24, 0x30, 0xfa, 0x8d, 0x0d, 0x57, 0xde, 0x35, 0xdc, 0x98, 0x5f,
0x4f, 0xbf, 0x89, 0xef, 0xe5, 0xae, 0x67, 0xba, 0x50, 0xba, 0x09, 0x22, 0x18, 0x9e, 0xe2, 0x96,
0x21, 0xee, 0x02, 0xde, 0x60, 0x3f, 0xff, 0x1b, 0x73, 0x06, 0xe5, 0x5c, 0xf9, 0x44, 0x86, 0x22,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x05, 0x22, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x7b, 0x4c, 0x53,
0x57, 0x1c, 0xc7, 0x0f, 0x2f, 0x85, 0xa1, 0x43, 0x51, 0xc4, 0x69, 0x9c, 0xd3, 0xa1, 0x43, 0xf7,
0xd2, 0x2c, 0x33, 0x73, 0x33, 0x4e, 0xb7, 0x3f, 0x30, 0x30, 0xa8, 0x1d, 0x14, 0xfa, 0x6e, 0xa1,
0x50, 0x4a, 0x0b, 0x8a, 0x80, 0x82, 0x65, 0xa8, 0x20, 0x38, 0x50, 0xd1, 0xa9, 0x81, 0x15, 0x54,
0x64, 0xb0, 0xcc, 0x17, 0x1a, 0x11, 0x4d, 0x71, 0xc8, 0x1c, 0xc3, 0x17, 0x28, 0x4e, 0x97, 0x88,
0xe0, 0x0b, 0xc7, 0x94, 0x39, 0x79, 0x6b, 0x7d, 0xd0, 0xc2, 0xfd, 0xee, 0xdc, 0x3a, 0x9d, 0xa5,
0x80, 0xb8, 0xb8, 0x6f, 0x72, 0x92, 0x7b, 0x4f, 0x4e, 0xce, 0x27, 0xbf, 0xc7, 0xf9, 0x9e, 0x43,
0xc8, 0x20, 0x65, 0xcf, 0x11, 0x7a, 0xd9, 0x71, 0xc4, 0x3b, 0x89, 0xb7, 0x20, 0x81, 0xf8, 0xc9,
0xe6, 0x12, 0x1e, 0x6f, 0x08, 0x79, 0xa9, 0xfa, 0x40, 0xe9, 0xe0, 0xca, 0x57, 0x6e, 0x1a, 0x2f,
0x8d, 0x32, 0xb8, 0x85, 0xc4, 0x62, 0x4a, 0x6c, 0x3a, 0xe3, 0x2a, 0x8b, 0x66, 0x86, 0x06, 0x28,
0x98, 0xa1, 0x81, 0x61, 0x3d, 0xce, 0x82, 0x70, 0xc3, 0x70, 0xbe, 0xea, 0xaa, 0x8d, 0xaf, 0xb8,
0x88, 0xf8, 0x08, 0xb5, 0xc4, 0x4f, 0x38, 0x9f, 0xcc, 0x93, 0x3b, 0xbe, 0x18, 0xc4, 0x57, 0x32,
0x89, 0x42, 0x6a, 0x35, 0xd9, 0xf9, 0x06, 0xfd, 0xd9, 0xf3, 0x98, 0x9d, 0x9c, 0x8d, 0xf8, 0x33,
0x2d, 0x88, 0x3a, 0xd9, 0x84, 0x90, 0x63, 0xd7, 0xc1, 0x2d, 0x3e, 0x87, 0x8f, 0xb7, 0xeb, 0xe1,
0xb9, 0xae, 0x00, 0xe3, 0xb5, 0x1b, 0xe1, 0x1a, 0x91, 0xc8, 0x38, 0x8a, 0x34, 0x8c, 0x2d, 0x57,
0xce, 0xd8, 0x70, 0xe5, 0x3d, 0xf6, 0x01, 0x8a, 0x0e, 0x1a, 0xb9, 0xdd, 0x80, 0x0c, 0x47, 0xae,
0x4c, 0x34, 0x4a, 0x10, 0xde, 0x7a, 0xf8, 0xcc, 0xaf, 0x0c, 0xa8, 0x2a, 0x2f, 0xd6, 0x61, 0xf6,
0xaa, 0x2d, 0xd0, 0xd6, 0xb4, 0x61, 0x11, 0x05, 0x05, 0x53, 0x50, 0x40, 0xe9, 0x45, 0x2c, 0x28,
0xae, 0xc1, 0x27, 0x7b, 0x4e, 0xe0, 0xbd, 0xc2, 0xa3, 0x98, 0xbc, 0xed, 0x10, 0xdc, 0xb2, 0x8a,
0xe0, 0x98, 0x59, 0x00, 0x22, 0x5d, 0x0c, 0xe2, 0x27, 0x01, 0x9b, 0x91, 0xbe, 0x09, 0x3c, 0x9e,
0x93, 0x9b, 0x30, 0x22, 0x6f, 0x56, 0x4c, 0x52, 0xc7, 0xad, 0xd6, 0x36, 0x3c, 0x51, 0x55, 0xfd,
0x55, 0xcc, 0xd4, 0x66, 0x9a, 0x21, 0xa1, 0x15, 0x37, 0x20, 0x28, 0xab, 0x87, 0xdf, 0xa1, 0x0b,
0xf8, 0x6c, 0x5f, 0x15, 0x3e, 0xdc, 0x59, 0x81, 0x69, 0xf9, 0x47, 0x30, 0x21, 0xa7, 0x18, 0x23,
0x36, 0xef, 0x86, 0x6d, 0x78, 0x02, 0x48, 0xe8, 0x32, 0xd8, 0x2c, 0x94, 0x33, 0xfd, 0xa4, 0x4a,
0xf0, 0xb6, 0xab, 0x20, 0xbc, 0x21, 0xb1, 0x60, 0xcf, 0xc3, 0x1e, 0x86, 0xc1, 0xb3, 0xba, 0xd0,
0xf0, 0x3b, 0xa6, 0xc7, 0xa5, 0x41, 0x5a, 0x7e, 0x05, 0x81, 0x47, 0x2e, 0xc1, 0x97, 0x42, 0x3e,
0xdf, 0x5f, 0x8d, 0x8f, 0x76, 0x55, 0xe2, 0xdd, 0x82, 0x32, 0x4c, 0xda, 0xfa, 0x38, 0x1a, 0x87,
0xa8, 0x64, 0x1a, 0x4d, 0x34, 0x48, 0xfa, 0x76, 0x0a, 0x92, 0x59, 0x81, 0x6c, 0x86, 0xf9, 0x87,
0x68, 0x5e, 0x93, 0x68, 0xda, 0x8e, 0xd7, 0xd6, 0xa3, 0x2f, 0xd5, 0xdd, 0x6c, 0x82, 0x47, 0xf4,
0x2a, 0x0a, 0x38, 0x0f, 0xaf, 0x03, 0x67, 0xf1, 0x69, 0xd1, 0x29, 0xcc, 0xda, 0xf9, 0x0b, 0xde,
0xa1, 0x10, 0x36, 0x65, 0xee, 0xd9, 0xfb, 0xe0, 0x18, 0xbf, 0x0e, 0x44, 0xa0, 0x06, 0xf9, 0x7a,
0x1b, 0x48, 0x46, 0x9e, 0x35, 0x88, 0x46, 0x51, 0x6a, 0xc7, 0x91, 0x20, 0x6d, 0x77, 0x31, 0x73,
0xba, 0xee, 0x2a, 0x1e, 0x76, 0x19, 0xad, 0x40, 0x37, 0xfe, 0x6a, 0xc6, 0xeb, 0xea, 0x44, 0x73,
0x3d, 0x58, 0xc0, 0x8c, 0xc2, 0x72, 0x78, 0xee, 0x28, 0xc5, 0xc4, 0xdc, 0x83, 0x8f, 0xeb, 0x92,
0xb8, 0x11, 0x24, 0x48, 0x05, 0x92, 0x9a, 0x63, 0x86, 0x98, 0x23, 0xe2, 0xf4, 0x02, 0x8d, 0x95,
0x68, 0x4e, 0x46, 0xe7, 0x16, 0xc2, 0x37, 0x25, 0x93, 0xf1, 0x50, 0xc6, 0x98, 0x46, 0xf0, 0x95,
0xcc, 0x1b, 0x8a, 0xe8, 0x9e, 0xc0, 0xf4, 0xcd, 0xa6, 0xec, 0xc3, 0x47, 0x99, 0x33, 0x97, 0xaf,
0xa3, 0xf1, 0x4e, 0x0b, 0xc6, 0x29, 0x97, 0x62, 0x7a, 0xfe, 0x8f, 0x98, 0x92, 0xa7, 0xa7, 0x80,
0x12, 0x8c, 0xfd, 0x76, 0xbf, 0xb9, 0x26, 0x43, 0x56, 0x66, 0x81, 0xf0, 0xc2, 0x40, 0x68, 0x57,
0x9a, 0x21, 0xec, 0xa0, 0x51, 0xd9, 0x72, 0x83, 0x7b, 0x2c, 0x40, 0xe3, 0x64, 0x51, 0xfa, 0xde,
0x29, 0xbb, 0xd3, 0x71, 0x17, 0x05, 0x3f, 0x55, 0x42, 0x92, 0xa9, 0x63, 0x66, 0x44, 0x69, 0x8d,
0x63, 0xc4, 0xea, 0x1e, 0x5b, 0x8e, 0x14, 0xce, 0x91, 0x2b, 0x30, 0x6c, 0x79, 0x26, 0x86, 0xa5,
0xe6, 0xc2, 0x69, 0x7d, 0x21, 0x6c, 0x92, 0xff, 0x81, 0x24, 0x6d, 0xfa, 0x17, 0xc2, 0x8e, 0xb4,
0x5c, 0xd8, 0x7e, 0x29, 0xef, 0xee, 0x15, 0x91, 0x7a, 0x57, 0x69, 0xcd, 0x05, 0x0c, 0xa4, 0x07,
0x5d, 0x5d, 0x18, 0x2e, 0x8a, 0x80, 0x43, 0xc2, 0x7a, 0xd8, 0x68, 0xbe, 0xa2, 0x05, 0x5f, 0x04,
0xe2, 0x1f, 0x0a, 0x22, 0xd2, 0x80, 0xd0, 0x6e, 0xb4, 0x80, 0xb0, 0x23, 0x55, 0x07, 0x3b, 0xff,
0x10, 0xa3, 0x05, 0x68, 0x8c, 0x48, 0x95, 0x5b, 0x74, 0xa2, 0x7a, 0x40, 0x10, 0xdb, 0x85, 0x2e,
0x22, 0xb5, 0xf5, 0x86, 0x3c, 0xe5, 0xd3, 0xe2, 0x5b, 0x8c, 0x94, 0x6c, 0x0a, 0x52, 0x3c, 0xb2,
0x00, 0x8d, 0x0c, 0x52, 0xae, 0xfd, 0xae, 0xbc, 0x12, 0xcf, 0x93, 0x8b, 0x30, 0xc2, 0x7a, 0xc3,
0xa0, 0x70, 0x90, 0x35, 0x5b, 0xad, 0xe7, 0x69, 0x4a, 0xa9, 0x33, 0xdc, 0xb7, 0x00, 0x0d, 0x59,
0x28, 0x5b, 0x9e, 0x75, 0xb8, 0x6c, 0x40, 0x88, 0x4e, 0x5f, 0x8e, 0x89, 0x8a, 0x25, 0x70, 0x11,
0xab, 0xa9, 0xd5, 0x2c, 0x87, 0xdd, 0xe2, 0x14, 0x90, 0x27, 0x9d, 0x96, 0x96, 0x63, 0x0d, 0x5a,
0xb9, 0x99, 0x05, 0xdd, 0xb5, 0x3c, 0x45, 0x5f, 0x88, 0x34, 0x19, 0x45, 0x25, 0xdd, 0xfd, 0xa5,
0xec, 0x76, 0x7b, 0x07, 0x54, 0x59, 0x79, 0x68, 0x37, 0xdc, 0x87, 0xd1, 0xd4, 0x8d, 0xb3, 0x57,
0xae, 0x23, 0xf3, 0x80, 0x1e, 0xde, 0xa9, 0xdf, 0xc0, 0x86, 0xda, 0xcc, 0x70, 0x1a, 0xe9, 0xc8,
0xc8, 0x24, 0x90, 0x98, 0x35, 0x66, 0x00, 0xdb, 0xda, 0x6c, 0x73, 0xd8, 0xf3, 0x42, 0xdb, 0x2c,
0x41, 0x3e, 0x22, 0x19, 0xeb, 0x06, 0xbd, 0x21, 0x8f, 0x8c, 0x46, 0x70, 0x56, 0x6f, 0xc0, 0xda,
0x7d, 0x87, 0xfa, 0x8d, 0x74, 0x92, 0x22, 0xba, 0xfb, 0x78, 0x6d, 0x1d, 0xf6, 0x1e, 0xaf, 0x82,
0x4a, 0x97, 0x0f, 0xcf, 0x48, 0x2d, 0x5e, 0xa5, 0xe0, 0x57, 0x24, 0x91, 0x70, 0xe0, 0x29, 0x6e,
0xf7, 0xb2, 0x1e, 0xb1, 0xbf, 0x46, 0x97, 0x7f, 0xf7, 0xd9, 0x0d, 0x58, 0x9f, 0x63, 0xfd, 0xad,
0xa4, 0xfa, 0xdc, 0x80, 0x29, 0x7d, 0x33, 0x74, 0x89, 0xa9, 0xfe, 0xe6, 0x9f, 0x16, 0x73, 0x6c,
0xd4, 0x73, 0x96, 0xa6, 0x18, 0x9c, 0xb8, 0x8a, 0x78, 0x4b, 0x90, 0xb7, 0x78, 0x81, 0x24, 0x33,
0xbb, 0xfd, 0xc9, 0x42, 0xd6, 0x19, 0xa6, 0x47, 0x2c, 0x43, 0xf1, 0xe9, 0x9a, 0xe7, 0x36, 0x88,
0x47, 0x58, 0x8c, 0xa9, 0xb6, 0xf1, 0x96, 0xc5, 0xdc, 0x0f, 0x3f, 0x9f, 0xe8, 0xa6, 0xd7, 0xcb,
0x69, 0xd6, 0xda, 0x7a, 0x9b, 0xe9, 0x1c, 0x4e, 0xea, 0x86, 0x16, 0x76, 0xd1, 0xc1, 0xaa, 0x1a,
0x6c, 0x3d, 0x72, 0x0c, 0x6d, 0xf7, 0x0c, 0x18, 0x8c, 0xa6, 0x28, 0x63, 0x4d, 0xbf, 0x35, 0x34,
0x3e, 0x73, 0xd0, 0x3b, 0x31, 0x5a, 0xa8, 0x6a, 0x25, 0x1c, 0xfe, 0x04, 0x6b, 0xd7, 0xf6, 0xe3,
0xcf, 0x9c, 0xaf, 0x4d, 0x6d, 0xee, 0xbc, 0xff, 0x00, 0x3e, 0xc9, 0xeb, 0xd0, 0xd8, 0xdc, 0x82,
0xc1, 0x6a, 0x6a, 0x78, 0xac, 0xe9, 0xdc, 0xb5, 0x86, 0xa7, 0xff, 0x5e, 0x2b, 0x32, 0x3a, 0x9c,
0x03, 0x82, 0x83, 0xfb, 0xbe, 0x1e, 0xfc, 0xc4, 0x1e, 0xe3, 0xa4, 0x91, 0x86, 0xa4, 0xef, 0x8b,
0xf0, 0xa2, 0x7a, 0x2b, 0x3c, 0xce, 0x58, 0x7d, 0xf9, 0x9a, 0xf9, 0x7b, 0x47, 0x59, 0x45, 0xb7,
0x9b, 0x48, 0x55, 0xd1, 0xff, 0x75, 0x3a, 0x6f, 0x9e, 0xfd, 0x68, 0x81, 0x4a, 0x37, 0x82, 0x1f,
0x76, 0xfb, 0xfd, 0x45, 0xda, 0xd6, 0xf4, 0xbd, 0x25, 0xc6, 0x4b, 0x7f, 0xdc, 0x1a, 0x34, 0xe8,
0x54, 0xdd, 0x15, 0x73, 0xf3, 0x8c, 0x12, 0xaa, 0x5a, 0x88, 0xb7, 0x7c, 0xec, 0xe0, 0xde, 0x09,
0x3e, 0xc2, 0xc9, 0xce, 0x01, 0x8a, 0x38, 0x6a, 0xa2, 0x35, 0xee, 0x12, 0x75, 0xbb, 0x74, 0xa3,
0xee, 0x1e, 0x5b, 0xb7, 0x2e, 0x93, 0xa9, 0x4f, 0x90, 0xa7, 0x2a, 0xce, 0xc8, 0x5e, 0xf3, 0x73,
0x13, 0x56, 0x77, 0x3a, 0xf9, 0x07, 0x0b, 0xfe, 0xdb, 0x0b, 0xc8, 0x8b, 0xe7, 0x4a, 0xc1, 0x3c,
0x77, 0xb1, 0xfa, 0xe0, 0xab, 0x81, 0x8a, 0xce, 0xb9, 0xf1, 0xab, 0x5b, 0x73, 0xf4, 0xe5, 0x4c,
0x53, 0xeb, 0xd3, 0x06, 0xc5, 0x34, 0xd5, 0xb2, 0x2e, 0x7e, 0xc6, 0x96, 0x1e, 0x37, 0x51, 0x84,
0xfe, 0xe5, 0x3c, 0xbb, 0x68, 0x7a, 0x29, 0x74, 0xbe, 0x4b, 0x50, 0x68, 0xf6, 0x48, 0xbe, 0xb2,
0x89, 0xb6, 0x7f, 0x73, 0xea, 0xee, 0x03, 0x8f, 0xe8, 0x39, 0x32, 0xd2, 0x48, 0x1e, 0x10, 0xae,
0x64, 0x0c, 0xf9, 0x5f, 0xe4, 0x2d, 0x9d, 0xea, 0xc4, 0x95, 0xc7, 0xbb, 0x8b, 0x23, 0x2e, 0xda,
0x71, 0xe4, 0xc2, 0xe7, 0x2d, 0xff, 0x1b, 0xc0, 0xf8, 0x47, 0x1e, 0xb0, 0x6f, 0x75, 0x78, 0x00,
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE axis3d_back_xpm[1] = {{ png, sizeof( png ), "axis3d_back_xpm" }};
+85 -84
View File
@@ -8,90 +8,91 @@
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, 0x22, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x7b, 0x4c, 0x53,
0x57, 0x1c, 0xc7, 0x0f, 0x2f, 0x85, 0xa1, 0x43, 0x51, 0xc4, 0x69, 0x9c, 0xd3, 0xa1, 0x43, 0xf7,
0xd2, 0x2c, 0x33, 0x73, 0x33, 0x4e, 0xb7, 0x3f, 0x30, 0x30, 0xa8, 0x1d, 0x14, 0xfa, 0x6e, 0xa1,
0x50, 0x4a, 0x0b, 0x8a, 0x80, 0x82, 0x65, 0xa8, 0x20, 0x38, 0x50, 0xd1, 0xa9, 0x81, 0x15, 0x54,
0x64, 0xb0, 0xcc, 0x17, 0x1a, 0x11, 0x4d, 0x71, 0xc8, 0x1c, 0xc3, 0x17, 0x28, 0x4e, 0x97, 0x88,
0xe0, 0x0b, 0xc7, 0x94, 0x39, 0x79, 0x6b, 0x7d, 0xd0, 0xc2, 0xfd, 0xee, 0xdc, 0x3a, 0x9d, 0xa5,
0x80, 0xb8, 0xb8, 0x6f, 0x72, 0x92, 0x7b, 0x4f, 0x4e, 0xce, 0x27, 0xbf, 0xc7, 0xf9, 0x9e, 0x43,
0xc8, 0x20, 0x65, 0xcf, 0x11, 0x7a, 0xd9, 0x71, 0xc4, 0x3b, 0x89, 0xb7, 0x20, 0x81, 0xf8, 0xc9,
0xe6, 0x12, 0x1e, 0x6f, 0x08, 0x79, 0xa9, 0xfa, 0x40, 0xe9, 0xe0, 0xca, 0x57, 0x6e, 0x1a, 0x2f,
0x8d, 0x32, 0xb8, 0x85, 0xc4, 0x62, 0x4a, 0x6c, 0x3a, 0xe3, 0x2a, 0x8b, 0x66, 0x86, 0x06, 0x28,
0x98, 0xa1, 0x81, 0x61, 0x3d, 0xce, 0x82, 0x70, 0xc3, 0x70, 0xbe, 0xea, 0xaa, 0x8d, 0xaf, 0xb8,
0x88, 0xf8, 0x08, 0xb5, 0xc4, 0x4f, 0x38, 0x9f, 0xcc, 0x93, 0x3b, 0xbe, 0x18, 0xc4, 0x57, 0x32,
0x89, 0x42, 0x6a, 0x35, 0xd9, 0xf9, 0x06, 0xfd, 0xd9, 0xf3, 0x98, 0x9d, 0x9c, 0x8d, 0xf8, 0x33,
0x2d, 0x88, 0x3a, 0xd9, 0x84, 0x90, 0x63, 0xd7, 0xc1, 0x2d, 0x3e, 0x87, 0x8f, 0xb7, 0xeb, 0xe1,
0xb9, 0xae, 0x00, 0xe3, 0xb5, 0x1b, 0xe1, 0x1a, 0x91, 0xc8, 0x38, 0x8a, 0x34, 0x8c, 0x2d, 0x57,
0xce, 0xd8, 0x70, 0xe5, 0x3d, 0xf6, 0x01, 0x8a, 0x0e, 0x1a, 0xb9, 0xdd, 0x80, 0x0c, 0x47, 0xae,
0x4c, 0x34, 0x4a, 0x10, 0xde, 0x7a, 0xf8, 0xcc, 0xaf, 0x0c, 0xa8, 0x2a, 0x2f, 0xd6, 0x61, 0xf6,
0xaa, 0x2d, 0xd0, 0xd6, 0xb4, 0x61, 0x11, 0x05, 0x05, 0x53, 0x50, 0x40, 0xe9, 0x45, 0x2c, 0x28,
0xae, 0xc1, 0x27, 0x7b, 0x4e, 0xe0, 0xbd, 0xc2, 0xa3, 0x98, 0xbc, 0xed, 0x10, 0xdc, 0xb2, 0x8a,
0xe0, 0x98, 0x59, 0x00, 0x22, 0x5d, 0x0c, 0xe2, 0x27, 0x01, 0x9b, 0x91, 0xbe, 0x09, 0x3c, 0x9e,
0x93, 0x9b, 0x30, 0x22, 0x6f, 0x56, 0x4c, 0x52, 0xc7, 0xad, 0xd6, 0x36, 0x3c, 0x51, 0x55, 0xfd,
0x55, 0xcc, 0xd4, 0x66, 0x9a, 0x21, 0xa1, 0x15, 0x37, 0x20, 0x28, 0xab, 0x87, 0xdf, 0xa1, 0x0b,
0xf8, 0x6c, 0x5f, 0x15, 0x3e, 0xdc, 0x59, 0x81, 0x69, 0xf9, 0x47, 0x30, 0x21, 0xa7, 0x18, 0x23,
0x36, 0xef, 0x86, 0x6d, 0x78, 0x02, 0x48, 0xe8, 0x32, 0xd8, 0x2c, 0x94, 0x33, 0xfd, 0xa4, 0x4a,
0xf0, 0xb6, 0xab, 0x20, 0xbc, 0x21, 0xb1, 0x60, 0xcf, 0xc3, 0x1e, 0x86, 0xc1, 0xb3, 0xba, 0xd0,
0xf0, 0x3b, 0xa6, 0xc7, 0xa5, 0x41, 0x5a, 0x7e, 0x05, 0x81, 0x47, 0x2e, 0xc1, 0x97, 0x42, 0x3e,
0xdf, 0x5f, 0x8d, 0x8f, 0x76, 0x55, 0xe2, 0xdd, 0x82, 0x32, 0x4c, 0xda, 0xfa, 0x38, 0x1a, 0x87,
0xa8, 0x64, 0x1a, 0x4d, 0x34, 0x48, 0xfa, 0x76, 0x0a, 0x92, 0x59, 0x81, 0x6c, 0x86, 0xf9, 0x87,
0x68, 0x5e, 0x93, 0x68, 0xda, 0x8e, 0xd7, 0xd6, 0xa3, 0x2f, 0xd5, 0xdd, 0x6c, 0x82, 0x47, 0xf4,
0x2a, 0x0a, 0x38, 0x0f, 0xaf, 0x03, 0x67, 0xf1, 0x69, 0xd1, 0x29, 0xcc, 0xda, 0xf9, 0x0b, 0xde,
0xa1, 0x10, 0x36, 0x65, 0xee, 0xd9, 0xfb, 0xe0, 0x18, 0xbf, 0x0e, 0x44, 0xa0, 0x06, 0xf9, 0x7a,
0x1b, 0x48, 0x46, 0x9e, 0x35, 0x88, 0x46, 0x51, 0x6a, 0xc7, 0x91, 0x20, 0x6d, 0x77, 0x31, 0x73,
0xba, 0xee, 0x2a, 0x1e, 0x76, 0x19, 0xad, 0x40, 0x37, 0xfe, 0x6a, 0xc6, 0xeb, 0xea, 0x44, 0x73,
0x3d, 0x58, 0xc0, 0x8c, 0xc2, 0x72, 0x78, 0xee, 0x28, 0xc5, 0xc4, 0xdc, 0x83, 0x8f, 0xeb, 0x92,
0xb8, 0x11, 0x24, 0x48, 0x05, 0x92, 0x9a, 0x63, 0x86, 0x98, 0x23, 0xe2, 0xf4, 0x02, 0x8d, 0x95,
0x68, 0x4e, 0x46, 0xe7, 0x16, 0xc2, 0x37, 0x25, 0x93, 0xf1, 0x50, 0xc6, 0x98, 0x46, 0xf0, 0x95,
0xcc, 0x1b, 0x8a, 0xe8, 0x9e, 0xc0, 0xf4, 0xcd, 0xa6, 0xec, 0xc3, 0x47, 0x99, 0x33, 0x97, 0xaf,
0xa3, 0xf1, 0x4e, 0x0b, 0xc6, 0x29, 0x97, 0x62, 0x7a, 0xfe, 0x8f, 0x98, 0x92, 0xa7, 0xa7, 0x80,
0x12, 0x8c, 0xfd, 0x76, 0xbf, 0xb9, 0x26, 0x43, 0x56, 0x66, 0x81, 0xf0, 0xc2, 0x40, 0x68, 0x57,
0x9a, 0x21, 0xec, 0xa0, 0x51, 0xd9, 0x72, 0x83, 0x7b, 0x2c, 0x40, 0xe3, 0x64, 0x51, 0xfa, 0xde,
0x29, 0xbb, 0xd3, 0x71, 0x17, 0x05, 0x3f, 0x55, 0x42, 0x92, 0xa9, 0x63, 0x66, 0x44, 0x69, 0x8d,
0x63, 0xc4, 0xea, 0x1e, 0x5b, 0x8e, 0x14, 0xce, 0x91, 0x2b, 0x30, 0x6c, 0x79, 0x26, 0x86, 0xa5,
0xe6, 0xc2, 0x69, 0x7d, 0x21, 0x6c, 0x92, 0xff, 0x81, 0x24, 0x6d, 0xfa, 0x17, 0xc2, 0x8e, 0xb4,
0x5c, 0xd8, 0x7e, 0x29, 0xef, 0xee, 0x15, 0x91, 0x7a, 0x57, 0x69, 0xcd, 0x05, 0x0c, 0xa4, 0x07,
0x5d, 0x5d, 0x18, 0x2e, 0x8a, 0x80, 0x43, 0xc2, 0x7a, 0xd8, 0x68, 0xbe, 0xa2, 0x05, 0x5f, 0x04,
0xe2, 0x1f, 0x0a, 0x22, 0xd2, 0x80, 0xd0, 0x6e, 0xb4, 0x80, 0xb0, 0x23, 0x55, 0x07, 0x3b, 0xff,
0x10, 0xa3, 0x05, 0x68, 0x8c, 0x48, 0x95, 0x5b, 0x74, 0xa2, 0x7a, 0x40, 0x10, 0xdb, 0x85, 0x2e,
0x22, 0xb5, 0xf5, 0x86, 0x3c, 0xe5, 0xd3, 0xe2, 0x5b, 0x8c, 0x94, 0x6c, 0x0a, 0x52, 0x3c, 0xb2,
0x00, 0x8d, 0x0c, 0x52, 0xae, 0xfd, 0xae, 0xbc, 0x12, 0xcf, 0x93, 0x8b, 0x30, 0xc2, 0x7a, 0xc3,
0xa0, 0x70, 0x90, 0x35, 0x5b, 0xad, 0xe7, 0x69, 0x4a, 0xa9, 0x33, 0xdc, 0xb7, 0x00, 0x0d, 0x59,
0x28, 0x5b, 0x9e, 0x75, 0xb8, 0x6c, 0x40, 0x88, 0x4e, 0x5f, 0x8e, 0x89, 0x8a, 0x25, 0x70, 0x11,
0xab, 0xa9, 0xd5, 0x2c, 0x87, 0xdd, 0xe2, 0x14, 0x90, 0x27, 0x9d, 0x96, 0x96, 0x63, 0x0d, 0x5a,
0xb9, 0x99, 0x05, 0xdd, 0xb5, 0x3c, 0x45, 0x5f, 0x88, 0x34, 0x19, 0x45, 0x25, 0xdd, 0xfd, 0xa5,
0xec, 0x76, 0x7b, 0x07, 0x54, 0x59, 0x79, 0x68, 0x37, 0xdc, 0x87, 0xd1, 0xd4, 0x8d, 0xb3, 0x57,
0xae, 0x23, 0xf3, 0x80, 0x1e, 0xde, 0xa9, 0xdf, 0xc0, 0x86, 0xda, 0xcc, 0x70, 0x1a, 0xe9, 0xc8,
0xc8, 0x24, 0x90, 0x98, 0x35, 0x66, 0x00, 0xdb, 0xda, 0x6c, 0x73, 0xd8, 0xf3, 0x42, 0xdb, 0x2c,
0x41, 0x3e, 0x22, 0x19, 0xeb, 0x06, 0xbd, 0x21, 0x8f, 0x8c, 0x46, 0x70, 0x56, 0x6f, 0xc0, 0xda,
0x7d, 0x87, 0xfa, 0x8d, 0x74, 0x92, 0x22, 0xba, 0xfb, 0x78, 0x6d, 0x1d, 0xf6, 0x1e, 0xaf, 0x82,
0x4a, 0x97, 0x0f, 0xcf, 0x48, 0x2d, 0x5e, 0xa5, 0xe0, 0x57, 0x24, 0x91, 0x70, 0xe0, 0x29, 0x6e,
0xf7, 0xb2, 0x1e, 0xb1, 0xbf, 0x46, 0x97, 0x7f, 0xf7, 0xd9, 0x0d, 0x58, 0x9f, 0x63, 0xfd, 0xad,
0xa4, 0xfa, 0xdc, 0x80, 0x29, 0x7d, 0x33, 0x74, 0x89, 0xa9, 0xfe, 0xe6, 0x9f, 0x16, 0x73, 0x6c,
0xd4, 0x73, 0x96, 0xa6, 0x18, 0x9c, 0xb8, 0x8a, 0x78, 0x4b, 0x90, 0xb7, 0x78, 0x81, 0x24, 0x33,
0xbb, 0xfd, 0xc9, 0x42, 0xd6, 0x19, 0xa6, 0x47, 0x2c, 0x43, 0xf1, 0xe9, 0x9a, 0xe7, 0x36, 0x88,
0x47, 0x58, 0x8c, 0xa9, 0xb6, 0xf1, 0x96, 0xc5, 0xdc, 0x0f, 0x3f, 0x9f, 0xe8, 0xa6, 0xd7, 0xcb,
0x69, 0xd6, 0xda, 0x7a, 0x9b, 0xe9, 0x1c, 0x4e, 0xea, 0x86, 0x16, 0x76, 0xd1, 0xc1, 0xaa, 0x1a,
0x6c, 0x3d, 0x72, 0x0c, 0x6d, 0xf7, 0x0c, 0x18, 0x8c, 0xa6, 0x28, 0x63, 0x4d, 0xbf, 0x35, 0x34,
0x3e, 0x73, 0xd0, 0x3b, 0x31, 0x5a, 0xa8, 0x6a, 0x25, 0x1c, 0xfe, 0x04, 0x6b, 0xd7, 0xf6, 0xe3,
0xcf, 0x9c, 0xaf, 0x4d, 0x6d, 0xee, 0xbc, 0xff, 0x00, 0x3e, 0xc9, 0xeb, 0xd0, 0xd8, 0xdc, 0x82,
0xc1, 0x6a, 0x6a, 0x78, 0xac, 0xe9, 0xdc, 0xb5, 0x86, 0xa7, 0xff, 0x5e, 0x2b, 0x32, 0x3a, 0x9c,
0x03, 0x82, 0x83, 0xfb, 0xbe, 0x1e, 0xfc, 0xc4, 0x1e, 0xe3, 0xa4, 0x91, 0x86, 0xa4, 0xef, 0x8b,
0xf0, 0xa2, 0x7a, 0x2b, 0x3c, 0xce, 0x58, 0x7d, 0xf9, 0x9a, 0xf9, 0x7b, 0x47, 0x59, 0x45, 0xb7,
0x9b, 0x48, 0x55, 0xd1, 0xff, 0x75, 0x3a, 0x6f, 0x9e, 0xfd, 0x68, 0x81, 0x4a, 0x37, 0x82, 0x1f,
0x76, 0xfb, 0xfd, 0x45, 0xda, 0xd6, 0xf4, 0xbd, 0x25, 0xc6, 0x4b, 0x7f, 0xdc, 0x1a, 0x34, 0xe8,
0x54, 0xdd, 0x15, 0x73, 0xf3, 0x8c, 0x12, 0xaa, 0x5a, 0x88, 0xb7, 0x7c, 0xec, 0xe0, 0xde, 0x09,
0x3e, 0xc2, 0xc9, 0xce, 0x01, 0x8a, 0x38, 0x6a, 0xa2, 0x35, 0xee, 0x12, 0x75, 0xbb, 0x74, 0xa3,
0xee, 0x1e, 0x5b, 0xb7, 0x2e, 0x93, 0xa9, 0x4f, 0x90, 0xa7, 0x2a, 0xce, 0xc8, 0x5e, 0xf3, 0x73,
0x13, 0x56, 0x77, 0x3a, 0xf9, 0x07, 0x0b, 0xfe, 0xdb, 0x0b, 0xc8, 0x8b, 0xe7, 0x4a, 0xc1, 0x3c,
0x77, 0xb1, 0xfa, 0xe0, 0xab, 0x81, 0x8a, 0xce, 0xb9, 0xf1, 0xab, 0x5b, 0x73, 0xf4, 0xe5, 0x4c,
0x53, 0xeb, 0xd3, 0x06, 0xc5, 0x34, 0xd5, 0xb2, 0x2e, 0x7e, 0xc6, 0x96, 0x1e, 0x37, 0x51, 0x84,
0xfe, 0xe5, 0x3c, 0xbb, 0x68, 0x7a, 0x29, 0x74, 0xbe, 0x4b, 0x50, 0x68, 0xf6, 0x48, 0xbe, 0xb2,
0x89, 0xb6, 0x7f, 0x73, 0xea, 0xee, 0x03, 0x8f, 0xe8, 0x39, 0x32, 0xd2, 0x48, 0x1e, 0x10, 0xae,
0x64, 0x0c, 0xf9, 0x5f, 0xe4, 0x2d, 0x9d, 0xea, 0xc4, 0x95, 0xc7, 0xbb, 0x8b, 0x23, 0x2e, 0xda,
0x71, 0xe4, 0xc2, 0xe7, 0x2d, 0xff, 0x1b, 0xc0, 0xf8, 0x47, 0x1e, 0xb0, 0x6f, 0x75, 0x78, 0x00,
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x05, 0x33, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0xd6, 0x79, 0x4c, 0x93,
0x67, 0x1c, 0x07, 0xf0, 0x87, 0x8a, 0x47, 0xbd, 0xa6, 0x80, 0x32, 0x20, 0x9b, 0xd3, 0x2c, 0xf3,
0x0f, 0x37, 0xdd, 0x8c, 0x59, 0xe2, 0xa6, 0x8b, 0xc6, 0x73, 0x32, 0xe4, 0xb2, 0xf4, 0x82, 0xb6,
0x54, 0xe9, 0x05, 0x0c, 0x14, 0x07, 0x2a, 0xa0, 0x4e, 0x86, 0x58, 0x70, 0x43, 0x64, 0x72, 0x08,
0x11, 0x10, 0x25, 0xa0, 0x53, 0x4e, 0x07, 0x28, 0x08, 0x55, 0x04, 0x15, 0x1c, 0x1e, 0xc1, 0x33,
0xe2, 0x7d, 0x15, 0x2b, 0x16, 0x15, 0x95, 0xb6, 0xef, 0x77, 0x6f, 0xbb, 0xd0, 0x50, 0x0e, 0xe9,
0x96, 0xf9, 0x24, 0x4f, 0xde, 0xb4, 0xe9, 0xf3, 0x7c, 0xde, 0xe7, 0xf7, 0x7b, 0xfa, 0x7b, 0x1e,
0x42, 0xac, 0x6d, 0xcb, 0x04, 0x9f, 0x11, 0x57, 0x1e, 0x87, 0xb8, 0xf9, 0xce, 0x24, 0x2c, 0xd6,
0x68, 0xf2, 0x3e, 0xda, 0x68, 0xd6, 0x2a, 0xb9, 0x3d, 0x4f, 0xd2, 0x31, 0x37, 0x22, 0xa6, 0x6b,
0x41, 0xe4, 0xd6, 0x76, 0x67, 0x41, 0x90, 0x76, 0x3c, 0x47, 0xa2, 0x71, 0x11, 0x06, 0x5d, 0x9c,
0x24, 0x0e, 0x3d, 0xc8, 0xf4, 0x12, 0x87, 0xd1, 0x2f, 0xb1, 0x84, 0xb8, 0xf9, 0x4d, 0x26, 0x9b,
0x37, 0x33, 0xfe, 0xbd, 0xe0, 0x21, 0x1a, 0xe7, 0xc0, 0x95, 0x96, 0x2f, 0x8a, 0x8a, 0xd3, 0xde,
0x78, 0xf8, 0x18, 0x2d, 0x77, 0xef, 0xa3, 0xbb, 0xe9, 0xf4, 0x7a, 0x5c, 0x7f, 0xf0, 0x08, 0x25,
0x67, 0xce, 0x21, 0xfe, 0x50, 0xa9, 0x9e, 0xbf, 0x7d, 0x57, 0xfb, 0x8c, 0xe0, 0x0d, 0x6d, 0xf4,
0x0b, 0x68, 0xed, 0x79, 0xd2, 0x7b, 0x4e, 0x7e, 0x81, 0x35, 0xf6, 0x3c, 0x79, 0xd4, 0xe0, 0xc8,
0x0f, 0xdc, 0xd9, 0xf4, 0xa0, 0x87, 0x3b, 0x8a, 0x2b, 0xde, 0x52, 0x14, 0x85, 0x9a, 0x8b, 0x97,
0x21, 0x4a, 0x4c, 0x87, 0x35, 0xad, 0xfd, 0xe5, 0x2b, 0x2c, 0x88, 0x8c, 0xd3, 0x8f, 0xf0, 0xf2,
0xd7, 0xbd, 0x8b, 0xb0, 0x19, 0xcf, 0x91, 0x46, 0x4c, 0x12, 0x87, 0xb4, 0x37, 0xdf, 0xbc, 0x6d,
0x1e, 0x7c, 0xeb, 0x89, 0x1a, 0x85, 0x0d, 0x4d, 0x56, 0x41, 0xe1, 0xd9, 0xf9, 0x7a, 0x3a, 0xac,
0x86, 0x31, 0xac, 0x95, 0x2f, 0xfb, 0x27, 0x96, 0x73, 0x1d, 0xed, 0x79, 0xb2, 0x86, 0x15, 0x71,
0x49, 0x1d, 0x2f, 0x5f, 0xbf, 0xb1, 0x18, 0x6c, 0x84, 0xd2, 0xcb, 0xab, 0x07, 0x45, 0x92, 0x4a,
0x2b, 0x29, 0x47, 0x5f, 0x85, 0xa1, 0xf5, 0xb1, 0x1a, 0xe3, 0xd8, 0x92, 0x67, 0x7d, 0x0c, 0x5b,
0x0f, 0xe1, 0x62, 0x7b, 0xae, 0x44, 0xbd, 0xbf, 0xf6, 0x94, 0xbe, 0xbf, 0x09, 0xfe, 0xba, 0x79,
0x0b, 0x9e, 0xb1, 0x89, 0xef, 0x44, 0x72, 0x6b, 0xea, 0xa8, 0x09, 0x7c, 0xb9, 0xa1, 0x3b, 0x97,
0x1f, 0xf8, 0x04, 0x68, 0x2c, 0x77, 0x15, 0x5b, 0x7a, 0x88, 0xe9, 0x23, 0xc1, 0xf7, 0x9b, 0x12,
0x90, 0x53, 0x7d, 0x02, 0x9a, 0x8e, 0x17, 0x7d, 0x26, 0x79, 0xab, 0xd3, 0xe1, 0xd1, 0xb3, 0xe7,
0x03, 0x22, 0xc6, 0x4d, 0x61, 0xc7, 0x93, 0x1a, 0x1a, 0xaf, 0xb7, 0x9a, 0x3e, 0x77, 0xe9, 0xf4,
0xa0, 0x73, 0xac, 0xb6, 0x80, 0x46, 0xb2, 0x65, 0x0d, 0x0b, 0x53, 0x8a, 0xb0, 0x38, 0xa5, 0x88,
0x9a, 0x16, 0xf1, 0xab, 0x7e, 0x2c, 0x3f, 0x90, 0x1a, 0xc9, 0x96, 0x1a, 0x26, 0x4b, 0x7e, 0xea,
0x62, 0x29, 0x93, 0x91, 0x79, 0xb4, 0x16, 0x75, 0x97, 0xaf, 0x61, 0xe9, 0x26, 0x65, 0xbf, 0xc8,
0xc9, 0x96, 0xab, 0xb0, 0xe3, 0x4a, 0x0c, 0xaa, 0x4b, 0x57, 0xa8, 0xee, 0xef, 0x3a, 0x3a, 0x5f,
0xc3, 0x9e, 0x2b, 0xbd, 0x6f, 0x09, 0x71, 0xe4, 0xe5, 0x5e, 0x05, 0x75, 0x08, 0x3b, 0xa3, 0x46,
0x78, 0xe3, 0x53, 0xac, 0x39, 0xfd, 0x04, 0x32, 0xd5, 0x1d, 0xb8, 0x1f, 0xac, 0xc7, 0xac, 0x1d,
0xf9, 0x94, 0xcb, 0x9a, 0xad, 0x3a, 0x26, 0x47, 0x4e, 0x31, 0x96, 0x0b, 0xe0, 0x20, 0x08, 0xd6,
0x2f, 0x8a, 0x8e, 0xa7, 0xb6, 0xfd, 0x51, 0x82, 0xbb, 0xea, 0x36, 0x5c, 0xb8, 0x7d, 0x07, 0x74,
0x5e, 0x0d, 0x47, 0x1a, 0x9b, 0xa9, 0x9e, 0x78, 0x9b, 0xb6, 0x03, 0x13, 0xf9, 0xf2, 0x56, 0x0b,
0x88, 0xc9, 0x96, 0xe6, 0x2f, 0xda, 0x53, 0x01, 0xc9, 0x89, 0x3b, 0x90, 0x9d, 0xbc, 0x0b, 0x09,
0x8d, 0x88, 0x8e, 0xdf, 0x04, 0xbb, 0xf2, 0x0a, 0xdc, 0xca, 0x2e, 0x60, 0xc1, 0xe1, 0xb3, 0xf8,
0x7a, 0x5f, 0x0d, 0x26, 0x29, 0xb3, 0xe0, 0x1c, 0x9f, 0x8d, 0xd1, 0xe1, 0x09, 0x94, 0xad, 0x38,
0x4c, 0x6f, 0xe3, 0xbd, 0x92, 0x62, 0x78, 0x0a, 0x91, 0x5c, 0x5a, 0x69, 0xe8, 0xbd, 0xca, 0x7b,
0x6d, 0x1a, 0x38, 0xf2, 0x15, 0x57, 0x2c, 0xa0, 0xe1, 0x2b, 0x02, 0x76, 0xcf, 0xde, 0x75, 0x18,
0x9c, 0xa3, 0x57, 0xc1, 0x3b, 0x76, 0xcd, 0xf4, 0xf4, 0x2e, 0x6f, 0xa1, 0x91, 0xf3, 0x58, 0x58,
0xd8, 0x88, 0x6f, 0x0f, 0x9c, 0xc2, 0xe7, 0x19, 0x65, 0x60, 0x0a, 0x43, 0xe1, 0x92, 0x56, 0x84,
0x71, 0x3b, 0x0b, 0x30, 0x74, 0x7b, 0x0e, 0x88, 0x72, 0x0f, 0x6c, 0x04, 0x21, 0x86, 0xf2, 0xa6,
0x0b, 0x7d, 0xc2, 0x69, 0xfc, 0x83, 0x3b, 0x09, 0x02, 0x9b, 0x2d, 0x77, 0x9c, 0xa7, 0x38, 0xfe,
0x8b, 0x84, 0x5c, 0x2c, 0x2b, 0x69, 0x86, 0x6b, 0xe9, 0x79, 0xd3, 0x73, 0x71, 0x51, 0x13, 0xe6,
0x1f, 0x3a, 0x83, 0x6f, 0xe8, 0x90, 0xce, 0xa4, 0x57, 0x33, 0x35, 0xf3, 0x08, 0x26, 0x6c, 0x49,
0x85, 0xc3, 0xef, 0x07, 0x31, 0xf2, 0xb7, 0x7d, 0x26, 0xa4, 0x1b, 0x2a, 0x3b, 0xdb, 0xdc, 0x07,
0xba, 0x74, 0xfb, 0x1e, 0xe8, 0x52, 0xd5, 0x60, 0x01, 0x31, 0x96, 0x0b, 0xd7, 0x4f, 0x8e, 0x49,
0xc7, 0x9c, 0x03, 0xf5, 0x98, 0x4b, 0xe7, 0x65, 0x0e, 0xbd, 0x82, 0xd9, 0x05, 0x27, 0x31, 0x2b,
0xaf, 0x16, 0xd3, 0x73, 0xab, 0x30, 0x35, 0xab, 0x02, 0x8e, 0x5b, 0x33, 0x30, 0x4c, 0xb4, 0x1a,
0x23, 0xd6, 0x25, 0x80, 0x11, 0x93, 0x06, 0xf2, 0x4b, 0x5a, 0x37, 0xa4, 0x2f, 0x3e, 0x7d, 0xae,
0x0f, 0xd4, 0x74, 0xa3, 0x15, 0x2e, 0x82, 0xa0, 0xda, 0x5e, 0xe5, 0x86, 0x1f, 0xe8, 0xb8, 0x21,
0x51, 0x6f, 0x9c, 0x74, 0x46, 0x6e, 0x35, 0xa6, 0xef, 0xad, 0xc2, 0xb4, 0x9c, 0xa3, 0x26, 0x60,
0x4a, 0x66, 0x19, 0x9c, 0x12, 0xf3, 0x30, 0x6a, 0x4d, 0x2c, 0x46, 0x44, 0x25, 0x82, 0x11, 0xbd,
0x03, 0x64, 0x6d, 0x1c, 0x08, 0x5b, 0x06, 0x12, 0x95, 0x04, 0xe2, 0x25, 0xa6, 0x56, 0xed, 0xcc,
0x80, 0xf6, 0x55, 0x27, 0x9e, 0x3c, 0xd7, 0x9a, 0x21, 0xe3, 0x2e, 0x75, 0x16, 0x06, 0x97, 0x5b,
0x42, 0xae, 0x7c, 0xe1, 0xd8, 0xd5, 0xb1, 0xaf, 0x3f, 0xc9, 0x28, 0x45, 0x77, 0xff, 0x38, 0xbd,
0x18, 0xce, 0xa9, 0x85, 0x60, 0x06, 0x6e, 0xc4, 0xd0, 0x55, 0xe1, 0x60, 0xd2, 0xe1, 0xb2, 0x89,
0xcf, 0x32, 0x87, 0xcc, 0x1c, 0x3a, 0xbe, 0x42, 0xbf, 0x2e, 0x3b, 0xdf, 0xb4, 0xc5, 0xbf, 0xfc,
0x71, 0x03, 0xf2, 0x54, 0xf5, 0x88, 0x2d, 0x28, 0x86, 0x7f, 0xd2, 0x6e, 0x38, 0xf9, 0x29, 0x0a,
0x2d, 0x21, 0x37, 0x5f, 0xef, 0x61, 0x8a, 0xa8, 0x0e, 0xbb, 0xe4, 0x03, 0x30, 0xf6, 0xf1, 0xc9,
0x05, 0x18, 0x9b, 0x90, 0x83, 0xe1, 0xe1, 0x4a, 0x0c, 0xdb, 0xb2, 0x0b, 0x43, 0x12, 0xb2, 0xfb,
0x00, 0x3d, 0x72, 0xa4, 0xcb, 0x57, 0x35, 0x58, 0x84, 0xcd, 0x58, 0x23, 0x67, 0x04, 0xaf, 0xef,
0x1c, 0xe3, 0x23, 0x0e, 0xe8, 0x75, 0xa8, 0xf9, 0x2e, 0xb5, 0x11, 0x87, 0xb5, 0x1b, 0x27, 0xb4,
0xa5, 0x01, 0xe3, 0x93, 0x9e, 0xe0, 0x9f, 0x10, 0x0d, 0x00, 0xf4, 0x84, 0xf6, 0xd7, 0xd6, 0x5b,
0x40, 0x79, 0x74, 0x19, 0xb3, 0xe3, 0x48, 0x4e, 0x1b, 0x0b, 0x74, 0xaf, 0x15, 0x71, 0xe7, 0x10,
0x61, 0xc8, 0x53, 0xd3, 0xe0, 0xb0, 0x58, 0x90, 0x80, 0xf0, 0x41, 0x01, 0x33, 0xe4, 0x17, 0xa2,
0xdb, 0x5b, 0x5d, 0x67, 0x46, 0xd4, 0x74, 0x9e, 0x1c, 0x78, 0x32, 0x0d, 0x71, 0xe7, 0x7c, 0xd4,
0x4f, 0xd5, 0xe6, 0x7c, 0x45, 0xf8, 0x8a, 0x36, 0xf2, 0x73, 0x0a, 0x88, 0x22, 0x9a, 0xde, 0x51,
0xe9, 0xd6, 0x43, 0x82, 0x90, 0xae, 0xac, 0x2a, 0x95, 0x19, 0x5a, 0xb2, 0x51, 0xf9, 0x7c, 0xd4,
0x0a, 0x7f, 0xff, 0x01, 0x8e, 0x07, 0xdf, 0x4f, 0x89, 0xa7, 0xa8, 0x93, 0xc8, 0x22, 0xad, 0x06,
0x7a, 0x42, 0x99, 0x95, 0xb5, 0x26, 0x24, 0xeb, 0x98, 0x4a, 0x3f, 0x81, 0x2f, 0x53, 0x0d, 0x7c,
0xd4, 0xcd, 0x9b, 0x67, 0x4b, 0xdc, 0x45, 0xa9, 0xf4, 0xd1, 0xfd, 0x98, 0xb0, 0xa5, 0x1a, 0x12,
0xb4, 0xb1, 0x8b, 0x6c, 0x4e, 0xb6, 0x1a, 0xda, 0x5d, 0x71, 0x1c, 0x0f, 0x34, 0xcf, 0x8c, 0x35,
0xef, 0x29, 0x59, 0x26, 0xfa, 0xd0, 0xba, 0x7b, 0x82, 0x2b, 0x6f, 0x0a, 0x71, 0x17, 0xae, 0x25,
0x5e, 0xfe, 0xe7, 0x88, 0x97, 0xa8, 0x9d, 0xac, 0x5c, 0xfb, 0x82, 0x44, 0x28, 0x41, 0xb6, 0x65,
0x0e, 0x08, 0xa5, 0xfe, 0x59, 0x85, 0xef, 0xd6, 0xc5, 0x68, 0x99, 0xde, 0xfe, 0xdc, 0xff, 0x76,
0xfd, 0x59, 0xc2, 0xb2, 0xa3, 0x61, 0x16, 0xf1, 0xf0, 0x2f, 0x21, 0xee, 0x02, 0x2d, 0xe1, 0x05,
0x69, 0x48, 0x68, 0x0c, 0x45, 0x62, 0xd2, 0x7a, 0x40, 0xa1, 0x6f, 0x17, 0x46, 0xc6, 0x19, 0xe8,
0x03, 0xaf, 0xfc, 0xff, 0xb9, 0x73, 0x19, 0xc3, 0xeb, 0xca, 0x9b, 0x4f, 0x3c, 0x84, 0x29, 0x74,
0x7f, 0x48, 0x7c, 0x24, 0x6d, 0x24, 0x30, 0xfa, 0x8d, 0x0d, 0x57, 0xde, 0x35, 0xdc, 0x98, 0x5f,
0x4f, 0xbf, 0x89, 0xef, 0xe5, 0xae, 0x67, 0xba, 0x50, 0xba, 0x09, 0x22, 0x18, 0x9e, 0xe2, 0x96,
0x21, 0xee, 0x02, 0xde, 0x60, 0x3f, 0xff, 0x1b, 0x73, 0x06, 0xe5, 0x5c, 0xf9, 0x44, 0x86, 0x22,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE axis3d_front_xpm[1] = {{ png, sizeof( png ), "axis3d_front_xpm" }};
@@ -25,6 +25,6 @@ static const unsigned char png[] = {
0x2b, 0xeb, 0x17, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE lang_chinese_xpm[1] = {{ png, sizeof( png ), "lang_chinese_xpm" }};
const BITMAP_OPAQUE lang_zh_xpm[1] = {{ png, sizeof( png ), "lang_zh_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.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, 0x6c, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x41, 0x4e, 0xc2,
0x40, 0x14, 0x86, 0x89, 0x17, 0xe0, 0x0c, 0x24, 0xba, 0x10, 0xd8, 0x72, 0x0d, 0xb8, 0x82, 0x96,
0xa4, 0xab, 0x76, 0x26, 0x8d, 0x3b, 0x63, 0x08, 0x89, 0xc6, 0xd4, 0xb4, 0x55, 0xd0, 0xa5, 0xb2,
0x82, 0x5b, 0xc8, 0xce, 0x13, 0xb0, 0x29, 0xac, 0x75, 0xd1, 0x4d, 0x17, 0x6c, 0x80, 0x92, 0x90,
0x0c, 0xef, 0x9f, 0xb4, 0x2b, 0x3b, 0xd4, 0x58, 0x4a, 0x8c, 0x4a, 0xf2, 0x85, 0x97, 0x79, 0x2f,
0xff, 0x97, 0x29, 0xc3, 0xa4, 0xa5, 0xd2, 0x9f, 0xf9, 0x3c, 0x19, 0x46, 0xa5, 0xcf, 0x98, 0xd7,
0x63, 0x6c, 0xd2, 0xe7, 0x7c, 0x0e, 0x64, 0x4d, 0x6b, 0xe8, 0x25, 0x73, 0x86, 0x63, 0x54, 0x98,
0xc3, 0x3c, 0xe6, 0xb2, 0x09, 0x77, 0xf9, 0x1c, 0xa0, 0xc6, 0x1a, 0x7a, 0x3b, 0x25, 0x14, 0xd6,
0xa2, 0xd0, 0x25, 0x21, 0x14, 0x2c, 0x7a, 0x9c, 0x37, 0x29, 0xac, 0x45, 0xa1, 0x4b, 0x42, 0xa4,
0xe2, 0xb1, 0x05, 0xf7, 0x78, 0x53, 0x25, 0x39, 0xa1, 0xa0, 0x55, 0x1c, 0x38, 0xa4, 0xc0, 0x86,
0xad, 0xeb, 0x65, 0x80, 0x9a, 0xfa, 0x23, 0xf4, 0x1e, 0x38, 0x8b, 0x2e, 0xee, 0x78, 0x24, 0x03,
0x1d, 0x36, 0xa4, 0x9d, 0x34, 0x74, 0x5b, 0x2f, 0x03, 0xd4, 0xb4, 0x3e, 0x8a, 0x85, 0x2b, 0xeb,
0xde, 0x3a, 0xfe, 0x24, 0xa2, 0x90, 0x17, 0x04, 0x51, 0xe0, 0x60, 0xc7, 0x8e, 0x07, 0x98, 0xb9,
0xbe, 0x94, 0x41, 0xca, 0x39, 0xf4, 0x62, 0xd9, 0x73, 0x9a, 0xe8, 0x03, 0x21, 0x8f, 0xa6, 0x59,
0x55, 0x05, 0xa0, 0x87, 0x19, 0xcf, 0x62, 0xc2, 0x74, 0xd5, 0x73, 0xe8, 0x41, 0x44, 0xdf, 0xef,
0x69, 0xa2, 0x0d, 0x42, 0xba, 0xdd, 0xee, 0x91, 0x2a, 0x00, 0xbd, 0xf8, 0xf1, 0x65, 0xce, 0xc5,
0x3b, 0xda, 0xa4, 0x89, 0xe4, 0x0f, 0x9e, 0x75, 0x2a, 0xbf, 0x3a, 0x97, 0x1c, 0x8c, 0x7f, 0x51,
0x3e, 0xd1, 0x69, 0xad, 0x66, 0x13, 0x6b, 0x42, 0x7c, 0x93, 0x75, 0xb5, 0x5e, 0xbf, 0x55, 0x88,
0xde, 0x40, 0x22, 0xca, 0x23, 0x49, 0x88, 0x32, 0xef, 0xb5, 0x3d, 0x48, 0x24, 0xb9, 0x44, 0x5a,
0xbb, 0x2d, 0xa6, 0xb3, 0x99, 0xf0, 0xa7, 0x53, 0x71, 0x4e, 0x75, 0x61, 0x22, 0x08, 0xc2, 0x30,
0x94, 0xf8, 0xbe, 0xff, 0x0b, 0x44, 0x78, 0x5c, 0x41, 0x10, 0x48, 0xce, 0x34, 0xad, 0x38, 0x11,
0x78, 0x1d, 0x8f, 0x25, 0x85, 0x1e, 0x86, 0x83, 0x8a, 0xae, 0x3a, 0x1d, 0x49, 0xe1, 0xa2, 0x7d,
0xfe, 0x8f, 0x0e, 0x73, 0x33, 0xe0, 0x9e, 0xca, 0x7b, 0xd7, 0x11, 0x37, 0x3f, 0xe2, 0xf5, 0x6d,
0x0b, 0x54, 0xe3, 0x75, 0x92, 0x1e, 0x22, 0x94, 0xee, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE lock_unlock_xpm[1] = {{ png, sizeof( png ), "lock_unlock_xpm" }};
//EOF
+29 -27
View File
@@ -8,33 +8,35 @@
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, 0x95, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0x60, 0x18, 0x6e, 0x80,
0x91, 0x18, 0x45, 0xcd, 0xcd, 0xcd, 0x8a, 0x7f, 0xff, 0xfe, 0xcd, 0x01, 0x32, 0x5d, 0x80, 0x58,
0x1e, 0x2a, 0xfc, 0x10, 0x88, 0xf7, 0x30, 0x33, 0x33, 0x4f, 0xa9, 0xad, 0xad, 0xbd, 0x4f, 0xb1,
0x45, 0x8d, 0x8d, 0x8d, 0xfe, 0xff, 0xff, 0xff, 0x5f, 0x0e, 0x64, 0x72, 0xe2, 0x50, 0xf2, 0x0d,
0x88, 0x23, 0x1b, 0x1a, 0x1a, 0x36, 0xe1, 0x33, 0x87, 0x89, 0x80, 0x4f, 0x54, 0x81, 0x96, 0xac,
0x80, 0x5a, 0xb2, 0x84, 0x89, 0x89, 0xc9, 0x8c, 0x83, 0x83, 0x43, 0x00, 0x84, 0x41, 0x6c, 0xa0,
0xd8, 0x52, 0x20, 0xe6, 0x02, 0xe2, 0x95, 0x40, 0x8b, 0x54, 0xf0, 0x99, 0xc5, 0x82, 0x4f, 0x12,
0x18, 0x5c, 0xe5, 0x40, 0x8a, 0x03, 0x88, 0xe7, 0x01, 0x0d, 0x4a, 0x46, 0x93, 0x3e, 0x0d, 0xc4,
0x31, 0x40, 0xf1, 0x9f, 0x40, 0x3a, 0x09, 0x88, 0x41, 0x6a, 0x53, 0xc9, 0xf2, 0x11, 0x10, 0xb8,
0x43, 0xe9, 0x5e, 0x3c, 0x6a, 0x7a, 0xd1, 0xd4, 0x92, 0x65, 0x91, 0x24, 0x94, 0xbe, 0x81, 0x47,
0x0d, 0x4c, 0x4e, 0x8a, 0x12, 0x8b, 0x98, 0x41, 0x04, 0x30, 0x78, 0xfe, 0xe1, 0x52, 0x80, 0x24,
0xc7, 0x4c, 0x89, 0x45, 0x54, 0x03, 0xc3, 0xcf, 0x22, 0x8c, 0x0c, 0x1b, 0x11, 0x11, 0xd1, 0x01,
0xa4, 0x0a, 0x81, 0xf9, 0x87, 0x0d, 0x98, 0xbc, 0x19, 0xfe, 0xfd, 0xfb, 0x47, 0x12, 0x06, 0xea,
0xf9, 0x05, 0xa4, 0x7b, 0x4f, 0x9e, 0x3c, 0x59, 0x85, 0xd7, 0x47, 0x40, 0x0b, 0x0a, 0x81, 0x8a,
0xd9, 0xfe, 0xfc, 0xf9, 0x03, 0xd2, 0x44, 0x10, 0x83, 0xd4, 0x21, 0x63, 0x90, 0x5e, 0x20, 0x2e,
0x22, 0x98, 0x61, 0x41, 0x0a, 0x09, 0xb8, 0x98, 0xa0, 0xaf, 0x80, 0x80, 0x9d, 0x18, 0x8b, 0x70,
0x1a, 0x6a, 0x60, 0x60, 0xc0, 0x90, 0x96, 0x96, 0x06, 0xf2, 0x35, 0xc3, 0xb4, 0x69, 0xd3, 0x18,
0x4e, 0x9f, 0x3e, 0x8d, 0x22, 0x0f, 0x12, 0x27, 0x3a, 0x31, 0xa0, 0x05, 0x03, 0x0a, 0x4e, 0x4d,
0x4d, 0x65, 0x10, 0x12, 0x12, 0x62, 0x10, 0x16, 0x16, 0x66, 0xc8, 0xc8, 0xc8, 0x80, 0x07, 0x1d,
0x88, 0xc6, 0x67, 0x09, 0x41, 0x1f, 0x61, 0x09, 0x12, 0x0c, 0x47, 0x91, 0x9d, 0xbc, 0xf1, 0x45,
0xf6, 0xe4, 0xc9, 0x93, 0x19, 0x7e, 0xff, 0xfe, 0x0d, 0xc6, 0x13, 0x27, 0x4e, 0x24, 0x29, 0x79,
0xb3, 0x60, 0x73, 0x25, 0x2e, 0x1f, 0x01, 0x93, 0x2c, 0xc3, 0xf5, 0xeb, 0xd7, 0x21, 0x45, 0xf7,
0xe9, 0xd3, 0x94, 0x59, 0x84, 0x2f, 0xe8, 0x08, 0xc5, 0x03, 0x45, 0x16, 0xa1, 0x47, 0xf4, 0x91,
0x23, 0x47, 0xa8, 0x63, 0x11, 0x7a, 0xd0, 0xa1, 0x83, 0x8d, 0x1b, 0x37, 0x52, 0xa7, 0xac, 0x03,
0x15, 0x21, 0x30, 0x5f, 0x51, 0x00, 0x7e, 0x12, 0x63, 0x51, 0x2f, 0x30, 0xa8, 0x7e, 0x51, 0x60,
0xc9, 0x2f, 0xa0, 0xfe, 0x9e, 0x01, 0x6b, 0xd7, 0x01, 0x00, 0x25, 0x5a, 0xbf, 0x01, 0x77, 0x49,
0xeb, 0x47, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x01, 0xb6, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0x96, 0x3f, 0x6f, 0xd3,
0x60, 0x10, 0x87, 0x9f, 0x73, 0x2b, 0x43, 0x99, 0xaa, 0x64, 0x2a, 0x4b, 0x85, 0x44, 0xf7, 0x4c,
0xfd, 0x04, 0x48, 0x1d, 0x59, 0x83, 0xc4, 0x44, 0xe2, 0x34, 0x03, 0x4b, 0x59, 0x2a, 0x55, 0x2a,
0x0a, 0xb0, 0x30, 0x90, 0x21, 0x0a, 0xca, 0x40, 0x2a, 0x26, 0x10, 0x30, 0x86, 0x99, 0x31, 0x8b,
0xe5, 0x0f, 0x10, 0xb6, 0xaa, 0x5f, 0x02, 0xa9, 0xb1, 0xef, 0xbd, 0x0e, 0xfd, 0x03, 0x71, 0x6b,
0x3b, 0x8d, 0x23, 0x21, 0xf5, 0xa4, 0x9b, 0xee, 0xfc, 0x3e, 0xf7, 0xbb, 0xbb, 0xf7, 0x95, 0xe1,
0xae, 0x99, 0xcc, 0x93, 0xf4, 0xae, 0xd9, 0x7c, 0x64, 0x26, 0x2f, 0x45, 0x78, 0x62, 0xb0, 0x79,
0xf1, 0xe1, 0x89, 0x19, 0xbf, 0x44, 0xec, 0xe3, 0xe1, 0xd1, 0xd1, 0x71, 0x69, 0xd0, 0x9b, 0x66,
0xf3, 0xa9, 0x20, 0xdf, 0x80, 0xb5, 0x8c, 0x94, 0x3f, 0x22, 0x3c, 0x3b, 0x1c, 0x0e, 0x7f, 0xe6,
0x9d, 0xe3, 0xe5, 0x2a, 0xd9, 0xdd, 0xdd, 0x12, 0xe4, 0xfb, 0x39, 0x44, 0xbe, 0x20, 0x6c, 0xfb,
0x9e, 0xac, 0xfb, 0x9e, 0xac, 0x23, 0x6c, 0x0b, 0x7c, 0x05, 0x1e, 0x98, 0xf1, 0xa3, 0xd3, 0x68,
0x3c, 0xce, 0x3b, 0x6b, 0x35, 0x57, 0x8e, 0xba, 0x7d, 0xe0, 0x3e, 0xc2, 0xe7, 0xd7, 0xc3, 0x4f,
0x8d, 0x54, 0x34, 0x02, 0x9e, 0xbf, 0x0d, 0x82, 0x53, 0x8c, 0x17, 0x9e, 0xc8, 0x3e, 0x10, 0x2c,
0xa4, 0xc8, 0x60, 0x07, 0xc0, 0x25, 0x5e, 0x37, 0x2b, 0xe7, 0x6f, 0xcc, 0xdb, 0x59, 0xb8, 0x75,
0xc0, 0x06, 0x00, 0x9b, 0x1b, 0xbf, 0x33, 0x33, 0xae, 0x62, 0xf6, 0xb0, 0x0c, 0x68, 0x05, 0xa0,
0xd3, 0xe9, 0xb8, 0xac, 0x84, 0x7f, 0x62, 0x2b, 0x65, 0x40, 0x4b, 0xb3, 0xbb, 0x07, 0xba, 0x76,
0x61, 0xeb, 0xf5, 0xfa, 0x7b, 0x60, 0xcf, 0xcc, 0x7c, 0x55, 0xc5, 0x39, 0x77, 0x2b, 0x57, 0xd5,
0xa9, 0x73, 0xae, 0x1b, 0x86, 0xe1, 0x41, 0xae, 0x22, 0x33, 0xdb, 0x53, 0x55, 0x3f, 0x49, 0x12,
0x54, 0xb5, 0xd0, 0x93, 0x24, 0x99, 0x71, 0x55, 0xf5, 0x55, 0xf5, 0x55, 0xe1, 0x85, 0x55, 0x55,
0xbf, 0xa0, 0xe2, 0x42, 0x55, 0xc0, 0xbd, 0x79, 0x40, 0x99, 0x87, 0xd6, 0x6a, 0x35, 0x5a, 0xad,
0x16, 0x66, 0xc6, 0x60, 0x30, 0x20, 0x8a, 0xa2, 0x99, 0xb8, 0x99, 0xcd, 0xbf, 0x0c, 0xa9, 0x36,
0xcc, 0x78, 0x10, 0x04, 0x54, 0x2a, 0x15, 0xaa, 0xd5, 0x2a, 0xed, 0x76, 0xfb, 0xaa, 0x75, 0xaa,
0x9a, 0x0b, 0x29, 0x54, 0x74, 0x43, 0x4b, 0xae, 0x15, 0xb5, 0xf0, 0x7a, 0xe7, 0x0d, 0xbb, 0xdf,
0xef, 0x13, 0xc7, 0x31, 0x71, 0x1c, 0xd3, 0xeb, 0xf5, 0x6e, 0xb5, 0xde, 0xab, 0x37, 0x55, 0x99,
0xa5, 0x28, 0x0c, 0x43, 0x26, 0x93, 0xc9, 0xf9, 0xd3, 0x1d, 0x45, 0xe5, 0x40, 0x79, 0xad, 0x2b,
0x9a, 0x43, 0x29, 0x50, 0x7a, 0xd0, 0xe3, 0xf1, 0x78, 0x39, 0xa0, 0x74, 0xeb, 0xd2, 0x36, 0x1a,
0x8d, 0x96, 0xf3, 0xd6, 0xa9, 0xea, 0xf4, 0x52, 0x55, 0x09, 0x3b, 0x9d, 0x07, 0xd4, 0x35, 0xb3,
0x69, 0x09, 0xc8, 0xd4, 0xcc, 0x3e, 0xfc, 0xb7, 0xff, 0xba, 0x33, 0x76, 0xe5, 0xc3, 0xdb, 0x78,
0x51, 0xf1, 0x43, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE locked_xpm[1] = {{ png, sizeof( png ), "locked_xpm" }};
+47
View File
@@ -0,0 +1,47 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps.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, 0xe4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0x96, 0xcb, 0x4e, 0xc2,
0x50, 0x10, 0x86, 0xe5, 0x1a, 0xee, 0x7b, 0x71, 0xa1, 0xc4, 0xc4, 0xb7, 0x20, 0xc0, 0x93, 0xd0,
0x9d, 0x5b, 0x36, 0x2c, 0x54, 0x8c, 0x81, 0xd7, 0x21, 0x21, 0xc2, 0x1b, 0x40, 0xa1, 0xc0, 0x82,
0xd7, 0xf0, 0x05, 0xb8, 0x18, 0x83, 0xe4, 0x38, 0x5f, 0xd3, 0x63, 0x1a, 0x52, 0x69, 0x05, 0xad,
0x36, 0x99, 0x30, 0xcc, 0x99, 0xff, 0x9f, 0x73, 0xe6, 0xd2, 0xd3, 0xb3, 0xb3, 0xff, 0xf8, 0xc4,
0x62, 0x31, 0x43, 0x64, 0xeb, 0x88, 0xf1, 0x6b, 0x81, 0x0a, 0x85, 0xc2, 0x73, 0xa7, 0xd3, 0x51,
0x08, 0xfa, 0x4f, 0x70, 0x5e, 0x8b, 0x44, 0xf6, 0x8d, 0xb9, 0x5c, 0xee, 0xa5, 0xdb, 0xed, 0x2a,
0x04, 0xdd, 0x03, 0x17, 0x71, 0xb0, 0xfe, 0x4f, 0x22, 0x91, 0xb8, 0x8d, 0x46, 0xa3, 0x3b, 0x21,
0xb2, 0xe4, 0x6f, 0xc9, 0x1d, 0x3c, 0x99, 0x4c, 0xbe, 0xcd, 0xe7, 0x73, 0x85, 0xa0, 0xef, 0x91,
0x96, 0xc0, 0x80, 0x85, 0xc3, 0x2f, 0xce, 0x8d, 0xe4, 0xfe, 0xbd, 0xdf, 0xef, 0xab, 0x46, 0xa3,
0xb1, 0x4d, 0xa5, 0x52, 0xeb, 0x78, 0x3c, 0xfe, 0x94, 0xcf, 0xe7, 0xcd, 0x74, 0x3a, 0xfd, 0x6a,
0x18, 0xc6, 0x66, 0x3a, 0x9d, 0x2a, 0x04, 0x1d, 0x1b, 0x6b, 0xf8, 0xe0, 0x0b, 0x06, 0x2c, 0x1c,
0x70, 0x1d, 0x0a, 0x14, 0x61, 0x57, 0x00, 0x16, 0x8b, 0x85, 0xea, 0xf5, 0x7a, 0xaa, 0x5a, 0xad,
0xae, 0x9a, 0xcd, 0xe6, 0x6e, 0x38, 0x1c, 0xaa, 0xf1, 0x78, 0xac, 0x4c, 0xd3, 0xb4, 0x05, 0x1d,
0x1b, 0x6b, 0xf8, 0xe0, 0x0b, 0x06, 0xac, 0x93, 0x8d, 0x88, 0xdf, 0xa9, 0x2e, 0x65, 0x77, 0x36,
0x70, 0x36, 0x9b, 0xa9, 0xc9, 0x64, 0xf2, 0x49, 0x8c, 0xee, 0x16, 0x1d, 0x18, 0x1d, 0x5f, 0x4e,
0x03, 0x36, 0x70, 0x9d, 0x48, 0x45, 0xb9, 0x5c, 0x5e, 0xeb, 0x20, 0xfc, 0x5a, 0x96, 0x65, 0xa7,
0x0c, 0x42, 0x04, 0x1d, 0x9b, 0xdb, 0x07, 0x0c, 0xd8, 0xc0, 0x2d, 0x47, 0xde, 0x49, 0x89, 0x26,
0x80, 0x94, 0xdd, 0x56, 0x2a, 0x95, 0xa5, 0xa4, 0x65, 0x8d, 0x48, 0xba, 0x96, 0xd8, 0x58, 0xd3,
0xc1, 0xc0, 0x80, 0x0d, 0xdc, 0xda, 0x99, 0x4c, 0x66, 0xa3, 0x6b, 0xc2, 0xae, 0x21, 0x14, 0xf2,
0x8d, 0x74, 0xda, 0x9d, 0xac, 0x9f, 0x8b, 0x14, 0x45, 0x7f, 0xc0, 0x36, 0x18, 0x0c, 0x6c, 0x1f,
0x5d, 0x33, 0x1a, 0xe4, 0x50, 0xea, 0xea, 0x0c, 0x20, 0xb3, 0x41, 0xdb, 0xd2, 0x51, 0xba, 0x26,
0xec, 0x98, 0x93, 0x88, 0xfd, 0x7e, 0x1f, 0x24, 0xb6, 0x56, 0xad, 0x56, 0x5b, 0xea, 0x53, 0x81,
0x01, 0x0b, 0x07, 0x5c, 0xce, 0x50, 0xd7, 0xdd, 0xaf, 0x96, 0x6d, 0xbb, 0xdd, 0xb6, 0x07, 0x91,
0x19, 0x01, 0xe8, 0x2e, 0x32, 0xa9, 0xe2, 0x14, 0x1e, 0x1b, 0x2c, 0xb2, 0xe6, 0x6e, 0x1a, 0xb0,
0x70, 0xc0, 0x05, 0x27, 0xdc, 0xe1, 0x07, 0xf2, 0x4b, 0x1d, 0x85, 0xa7, 0x26, 0x1e, 0xa9, 0x7b,
0xfc, 0x56, 0xea, 0xf6, 0x9b, 0x81, 0x82, 0x7e, 0xd1, 0x0c, 0x2d, 0xe7, 0x64, 0x17, 0x04, 0x39,
0xa6, 0x19, 0x7c, 0xdb, 0x1b, 0x42, 0x76, 0xaf, 0xdb, 0x5b, 0xf4, 0x15, 0x36, 0x8f, 0xf6, 0x1e,
0x05, 0x9e, 0xa3, 0xb0, 0x06, 0xf6, 0x2a, 0x8c, 0x57, 0x50, 0x68, 0x2f, 0xd5, 0x63, 0xae, 0x89,
0xd1, 0x31, 0xd7, 0x44, 0x68, 0x17, 0x5f, 0xe0, 0xab, 0x3c, 0x9b, 0xcd, 0x9e, 0x76, 0x95, 0x87,
0xfd, 0x71, 0xf2, 0xb7, 0x9f, 0x5b, 0xa7, 0x3c, 0x1f, 0x74, 0xcf, 0xc8, 0x85, 0x45, 0xfc, 0x99,
0x61, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE options_generic_xpm[1] = {{ png, sizeof( png ), "options_generic_xpm" }};
//EOF
+57 -54
View File
@@ -8,60 +8,63 @@
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, 0x39, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xc5, 0x96, 0x4b, 0x48, 0x54,
0x61, 0x14, 0xc7, 0xcf, 0xe4, 0x68, 0xd9, 0xcb, 0x32, 0x98, 0x87, 0x3a, 0x8d, 0x35, 0x4d, 0xf9,
0x48, 0xc8, 0xd2, 0x9c, 0xc7, 0xbd, 0xe3, 0xe0, 0x73, 0x9c, 0x06, 0x17, 0xd5, 0x64, 0x48, 0x8a,
0x91, 0x2d, 0x6a, 0x51, 0xa2, 0x05, 0x56, 0x10, 0x91, 0x2d, 0x22, 0x5a, 0x48, 0xab, 0x6a, 0x5b,
0xd0, 0x2a, 0x82, 0xa0, 0x76, 0x05, 0xd6, 0x2e, 0xdb, 0x44, 0x44, 0xa8, 0xd9, 0x5b, 0x7b, 0xf8,
0xca, 0xd0, 0xcc, 0xcc, 0xec, 0x7f, 0xc6, 0xef, 0xc2, 0x75, 0xbc, 0x33, 0x8e, 0x56, 0x74, 0xe0,
0xcf, 0xc7, 0xb9, 0xf7, 0xfb, 0xce, 0xef, 0x7e, 0x8f, 0x73, 0xbe, 0x4b, 0xf4, 0x1f, 0x2c, 0xf0,
0xb7, 0x02, 0xfd, 0x24, 0x3a, 0x30, 0x49, 0xd4, 0x3b, 0x4e, 0xd4, 0xdd, 0x41, 0x54, 0xaf, 0x7e,
0xb7, 0x0a, 0x7a, 0x23, 0xda, 0x19, 0xe6, 0x97, 0xe5, 0x6b, 0x15, 0x1e, 0xcf, 0xdd, 0x80, 0xc7,
0x63, 0xf7, 0x49, 0x52, 0x4b, 0x85, 0x2c, 0x3f, 0xaa, 0x90, 0xa4, 0x53, 0x91, 0x20, 0x53, 0x44,
0x3a, 0x80, 0x3e, 0xa1, 0x9d, 0x62, 0x0d, 0x13, 0x0d, 0x16, 0x13, 0xc9, 0xca, 0xfb, 0x3a, 0xa8,
0x17, 0xaa, 0x0e, 0x1f, 0x88, 0xc0, 0x23, 0xd0, 0x14, 0x82, 0x7f, 0x44, 0x3b, 0x09, 0xf5, 0x41,
0x57, 0xa3, 0x81, 0x46, 0x75, 0xba, 0x2f, 0x2a, 0xd0, 0x80, 0x55, 0x35, 0xab, 0x3b, 0x02, 0x74,
0x33, 0x22, 0x48, 0x96, 0x9f, 0x04, 0x9c, 0xce, 0x54, 0x7e, 0x16, 0x74, 0x3a, 0x13, 0x23, 0x70,
0x74, 0x45, 0x0e, 0x47, 0x7d, 0xab, 0xcd, 0xf6, 0x6d, 0x84, 0x68, 0x74, 0x88, 0xa8, 0xef, 0x2c,
0xd1, 0x95, 0x0c, 0xa2, 0x5d, 0xfc, 0x72, 0x3d, 0xd4, 0x23, 0x40, 0xdc, 0xae, 0xd5, 0x02, 0x95,
0xcb, 0xf2, 0xd6, 0x39, 0xb6, 0x46, 0x57, 0xe2, 0x74, 0xd6, 0x96, 0xbb, 0xdd, 0xfd, 0x56, 0x83,
0xa1, 0x11, 0x9d, 0x03, 0xeb, 0x88, 0x76, 0x67, 0x12, 0x95, 0x1e, 0x22, 0x5a, 0xcd, 0x1d, 0x4e,
0x08, 0x88, 0xa2, 0x23, 0x5a, 0x20, 0xaf, 0xd7, 0xbb, 0x3c, 0x1a, 0xa5, 0xd4, 0xe5, 0xaa, 0x61,
0x48, 0xaa, 0xd1, 0xd8, 0x00, 0xd7, 0x00, 0xc5, 0x31, 0x5c, 0x28, 0x64, 0x95, 0xd0, 0x1a, 0xe8,
0xbd, 0x38, 0x0c, 0x95, 0x5a, 0xa0, 0x60, 0x76, 0x76, 0x42, 0x8c, 0x10, 0xa3, 0x80, 0x68, 0x5a,
0xbc, 0x00, 0x51, 0x84, 0x3d, 0xfa, 0xa5, 0xfe, 0x32, 0xb5, 0x15, 0x17, 0x14, 0xec, 0x63, 0x88,
0xc5, 0x6c, 0x6e, 0x84, 0x6b, 0x8e, 0x06, 0x61, 0xe3, 0xaf, 0x7d, 0x37, 0xdf, 0x7c, 0x09, 0x83,
0xa4, 0xcc, 0x05, 0x61, 0x5b, 0x0c, 0xbd, 0x9d, 0x0f, 0x04, 0x1b, 0x5f, 0x1d, 0x82, 0x98, 0x4c,
0x4d, 0x70, 0xd3, 0x62, 0x81, 0xb0, 0x2d, 0x11, 0x09, 0x3b, 0x5f, 0xc8, 0x31, 0xb8, 0x96, 0x6d,
0x58, 0x7a, 0x24, 0x75, 0x13, 0x72, 0xed, 0xa9, 0xaf, 0xb0, 0x30, 0x1f, 0x4b, 0x7d, 0x0f, 0xea,
0xc6, 0xb3, 0x76, 0x9f, 0xc7, 0xb3, 0x53, 0x3d, 0x36, 0x31, 0x56, 0x50, 0x99, 0xcb, 0xb5, 0x57,
0x05, 0xe1, 0x54, 0x88, 0x43, 0xf5, 0xb8, 0x80, 0xc0, 0x63, 0x08, 0x5c, 0x84, 0x34, 0xd8, 0xc1,
0x87, 0x87, 0x73, 0xce, 0x27, 0xcb, 0x75, 0xbc, 0xbf, 0xd0, 0x41, 0x65, 0xfc, 0x52, 0xe8, 0x75,
0xac, 0x90, 0x34, 0x93, 0xe9, 0x38, 0xdc, 0x74, 0x86, 0x04, 0x83, 0xc1, 0x38, 0x04, 0xfa, 0x0e,
0x5d, 0xe7, 0x3e, 0x3c, 0x83, 0x50, 0xde, 0x39, 0x9d, 0xc9, 0xa1, 0xc3, 0x34, 0x5d, 0x51, 0x7a,
0x94, 0x18, 0xcb, 0xa0, 0x57, 0x51, 0x37, 0xde, 0xed, 0xae, 0x42, 0xad, 0x1b, 0x4c, 0x37, 0x9b,
0x39, 0xef, 0x90, 0x8b, 0xa4, 0x57, 0x12, 0x15, 0x81, 0x86, 0xa1, 0x1b, 0x1a, 0x20, 0x7e, 0xd7,
0x0f, 0x75, 0x28, 0x71, 0x38, 0x19, 0x5f, 0x2e, 0x00, 0x32, 0x5d, 0x78, 0x3d, 0x9e, 0xa3, 0x08,
0x36, 0x0e, 0x88, 0x5f, 0x01, 0xf9, 0xbd, 0x5e, 0x93, 0x28, 0xc2, 0x63, 0xe5, 0x92, 0x54, 0xa2,
0xf4, 0x5d, 0x01, 0x75, 0x6b, 0x41, 0xb0, 0x54, 0xa7, 0x31, 0xe0, 0xab, 0xd5, 0x6c, 0x3e, 0x09,
0x77, 0x43, 0x38, 0x44, 0x05, 0xdb, 0xe3, 0x97, 0xa4, 0x07, 0x08, 0xdc, 0x2b, 0x6a, 0x63, 0x17,
0x74, 0xcb, 0xef, 0x76, 0xe7, 0xa9, 0xfb, 0x69, 0x82, 0xca, 0x24, 0xa9, 0x19, 0x90, 0x1f, 0xde,
0xfc, 0xfc, 0xc7, 0xc5, 0x0e, 0xc7, 0x6d, 0x77, 0x6e, 0x6e, 0xca, 0x5c, 0xfb, 0x18, 0xbe, 0x47,
0xe1, 0xb6, 0x12, 0x7a, 0x31, 0x63, 0x26, 0xb2, 0xdc, 0x80, 0x01, 0x13, 0x76, 0x8b, 0xe5, 0x1c,
0xdc, 0x8d, 0x38, 0x08, 0x45, 0xf0, 0x1f, 0xa2, 0x35, 0xfc, 0x29, 0xa8, 0x4b, 0x35, 0x93, 0xc3,
0x38, 0x2d, 0x13, 0x9b, 0xd2, 0xd3, 0xcf, 0xc3, 0xcd, 0x14, 0x25, 0x8a, 0x78, 0x19, 0x30, 0xc3,
0xfb, 0x67, 0x88, 0x16, 0x2d, 0xf4, 0xf6, 0x4d, 0x82, 0x3a, 0x43, 0x33, 0x71, 0xb9, 0xf6, 0xe3,
0xfc, 0x4f, 0x64, 0xd8, 0x6c, 0x17, 0xe1, 0x66, 0x29, 0x10, 0xd5, 0x17, 0x37, 0x73, 0x7e, 0x2c,
0x14, 0xc4, 0x55, 0xbb, 0x03, 0xd3, 0xad, 0xe5, 0x99, 0x6c, 0xb6, 0xdb, 0x5b, 0xb5, 0x20, 0xca,
0xa5, 0x87, 0xa5, 0x69, 0xd3, 0x3a, 0x0f, 0x50, 0x8d, 0x58, 0x9d, 0x88, 0xc6, 0x17, 0x53, 0x27,
0xbe, 0x74, 0x4c, 0xce, 0xcb, 0x6b, 0xdb, 0x9e, 0x93, 0xd3, 0xc8, 0xc9, 0x89, 0x65, 0x0a, 0x6a,
0x09, 0xa0, 0x67, 0x9c, 0xa8, 0x61, 0x31, 0x8c, 0xe2, 0x3e, 0xe3, 0x7c, 0xbc, 0xcc, 0x59, 0xa1,
0x55, 0xff, 0x78, 0xe9, 0x86, 0xe2, 0xf5, 0xfa, 0x7e, 0x68, 0x00, 0xfa, 0x1c, 0x4d, 0x09, 0x7a,
0xfd, 0x07, 0xf4, 0x7f, 0xae, 0xa1, 0x9e, 0xb0, 0x4b, 0xb4, 0x4b, 0xcc, 0x74, 0xd6, 0x81, 0x48,
0x16, 0x4a, 0x8a, 0x51, 0xfc, 0x0f, 0x61, 0x15, 0xca, 0x52, 0x01, 0xda, 0xa1, 0x16, 0x68, 0xcb,
0xbf, 0xf8, 0x2f, 0xac, 0x82, 0x2e, 0xd1, 0xf4, 0xaf, 0xd5, 0xac, 0x4b, 0xf2, 0x37, 0x49, 0x1a,
0x27, 0x8b, 0xe9, 0xf5, 0x90, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
0xce, 0x00, 0x00, 0x03, 0x73, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xc5, 0x96, 0x5b, 0x6c, 0x4c,
0x51, 0x14, 0x86, 0xd7, 0xe8, 0xb4, 0x75, 0xab, 0x6b, 0x32, 0x97, 0xea, 0xb4, 0x43, 0xb5, 0xaa,
0x45, 0x48, 0xca, 0x5c, 0xce, 0xa5, 0x87, 0x32, 0x9d, 0x19, 0x4c, 0xe2, 0x61, 0x52, 0x71, 0x17,
0x95, 0x20, 0x22, 0xe2, 0x92, 0x94, 0x87, 0x46, 0xf0, 0xe0, 0x41, 0xa2, 0xf1, 0xc4, 0x83, 0x37,
0x22, 0xe2, 0xf2, 0xe0, 0xf2, 0xd4, 0x44, 0x88, 0x08, 0x89, 0xc6, 0x83, 0x84, 0xaa, 0x56, 0x5b,
0xea, 0xae, 0x9d, 0x22, 0x8a, 0x28, 0xea, 0x5f, 0x63, 0x9f, 0xe6, 0x18, 0xa7, 0x63, 0x5a, 0xc4,
0x4e, 0xfe, 0x9c, 0xb3, 0x66, 0xef, 0xbd, 0xbe, 0xbd, 0xd6, 0xde, 0xeb, 0xec, 0x21, 0xfa, 0x0f,
0x6d, 0xd1, 0xdf, 0x72, 0xf4, 0x85, 0x68, 0xdd, 0x57, 0xa2, 0x67, 0x9f, 0x88, 0x5a, 0x1a, 0x88,
0xd6, 0xe3, 0x27, 0x8b, 0xde, 0x37, 0x06, 0x7a, 0x24, 0x9e, 0x7f, 0xd4, 0x7a, 0xe1, 0x14, 0xa0,
0x97, 0x78, 0xf6, 0xb2, 0xde, 0x12, 0xc5, 0xca, 0x88, 0xe6, 0xea, 0xfd, 0x6b, 0xa0, 0x67, 0xd0,
0x32, 0xe3, 0xa4, 0x88, 0xc7, 0x63, 0x0f, 0x2b, 0x4a, 0x5d, 0x48, 0x51, 0x2e, 0x41, 0xc5, 0x21,
0x59, 0x3e, 0x81, 0x67, 0x73, 0x50, 0x55, 0x57, 0x27, 0x03, 0x75, 0x5b, 0x2c, 0x6f, 0x0c, 0xa0,
0xce, 0x3c, 0xa2, 0x2a, 0xbd, 0xff, 0x92, 0x00, 0x9d, 0x35, 0x4e, 0x0a, 0x6a, 0x9a, 0x1b, 0x8e,
0x7b, 0xa1, 0xcf, 0xd0, 0x7b, 0xa8, 0x0b, 0x6a, 0x0d, 0xca, 0xf2, 0x96, 0x7e, 0x38, 0x96, 0x79,
0x5e, 0x6f, 0x55, 0x6d, 0x7e, 0xfe, 0x87, 0xf7, 0x44, 0xdd, 0x5d, 0x44, 0xaf, 0xf7, 0x12, 0x1d,
0x9d, 0x42, 0x14, 0xe5, 0xce, 0x49, 0xd0, 0x53, 0x01, 0xe2, 0x67, 0xae, 0x09, 0x88, 0x75, 0x52,
0xd3, 0xb4, 0xa1, 0xfc, 0x7b, 0x34, 0x1a, 0x4d, 0x33, 0x83, 0xcc, 0xf7, 0xf9, 0x56, 0x55, 0x48,
0x52, 0xc7, 0x44, 0x9b, 0x6d, 0xc7, 0x0c, 0x24, 0x64, 0x22, 0x86, 0x16, 0x11, 0x55, 0xac, 0x22,
0x1a, 0xcf, 0x03, 0x76, 0x09, 0x88, 0xae, 0x2d, 0x26, 0xa0, 0x0f, 0x81, 0x40, 0x60, 0x44, 0xb2,
0xbd, 0x59, 0xe0, 0xf7, 0xaf, 0x64, 0xc8, 0x04, 0xbb, 0x7d, 0x2b, 0x4c, 0x1b, 0x94, 0x26, 0x0e,
0x41, 0xdf, 0x41, 0x88, 0xd0, 0x0f, 0xe2, 0x13, 0x71, 0x18, 0x22, 0x26, 0xa0, 0xb6, 0x01, 0x40,
0xec, 0x02, 0x62, 0xda, 0xd2, 0x05, 0x88, 0xfa, 0xd9, 0xa3, 0xc6, 0xfe, 0x26, 0x96, 0x7b, 0x3c,
0x2b, 0x18, 0xe2, 0x72, 0x3a, 0xb7, 0xc1, 0x74, 0x26, 0x83, 0x70, 0xcb, 0x80, 0xda, 0x13, 0x7f,
0x5c, 0x2c, 0xcb, 0xb9, 0x80, 0xc4, 0x82, 0x8a, 0x72, 0x3d, 0x05, 0x48, 0x36, 0x43, 0xc2, 0xb2,
0x5c, 0x18, 0xd2, 0xb4, 0xcd, 0x61, 0x49, 0xaa, 0x0a, 0xf8, 0xfd, 0xb6, 0xc4, 0x39, 0x99, 0xd0,
0xe3, 0x81, 0xd4, 0x0b, 0x36, 0x7e, 0x59, 0x1c, 0xe2, 0x70, 0x6c, 0x87, 0x99, 0x53, 0x52, 0x52,
0x92, 0x81, 0x63, 0x7f, 0x1c, 0xea, 0xe8, 0x3b, 0x40, 0xaa, 0xca, 0x27, 0x54, 0x33, 0xce, 0x1b,
0x2a, 0x0a, 0x76, 0xa0, 0x90, 0x1d, 0x30, 0x5d, 0x1c, 0x09, 0x1c, 0xd7, 0x40, 0x3d, 0xa8, 0xb5,
0x4e, 0x38, 0x3f, 0xc5, 0xfb, 0xca, 0x30, 0xd4, 0xe1, 0x45, 0xe3, 0xdc, 0x61, 0xa9, 0x82, 0x90,
0x8e, 0xa5, 0x06, 0x48, 0x6e, 0x1c, 0x12, 0x0a, 0x65, 0x22, 0xbd, 0xf7, 0xd9, 0x31, 0x43, 0x78,
0x1c, 0xde, 0x2f, 0xc4, 0xa3, 0x92, 0xe5, 0x9b, 0xc6, 0xf9, 0xc3, 0xa1, 0xb6, 0x54, 0x21, 0x39,
0x0e, 0xc7, 0x4e, 0x98, 0x6e, 0x7d, 0xe3, 0xe1, 0x7c, 0x49, 0xf0, 0x47, 0x51, 0x7f, 0x83, 0xee,
0x20, 0x65, 0x37, 0x60, 0xb7, 0x88, 0x14, 0x5e, 0x31, 0xfa, 0xe0, 0x1a, 0x69, 0x4d, 0x06, 0x29,
0x97, 0xa4, 0x4a, 0x38, 0x8c, 0xb9, 0x9d, 0x4e, 0xae, 0x3b, 0xd4, 0x22, 0x59, 0xf5, 0x3e, 0xac,
0xfa, 0x98, 0x58, 0x7d, 0x37, 0xf4, 0x82, 0x05, 0xd0, 0x47, 0x11, 0xe1, 0x39, 0xa3, 0x9f, 0x91,
0x50, 0xcb, 0x60, 0x20, 0x22, 0x4d, 0x67, 0xc4, 0xea, 0xeb, 0x17, 0xca, 0xf2, 0x24, 0x44, 0x14,
0x00, 0x88, 0x0f, 0xc5, 0x37, 0xec, 0xd1, 0x06, 0xe3, 0xd8, 0x2c, 0xe8, 0xa1, 0x19, 0x04, 0xa9,
0xaa, 0x01, 0xe4, 0x5d, 0x9e, 0xd3, 0xb9, 0x1b, 0xe6, 0xe4, 0x44, 0x48, 0x3c, 0x75, 0x8a, 0x72,
0x5a, 0x80, 0x9a, 0xe3, 0x1f, 0x62, 0x59, 0xae, 0x13, 0xf6, 0xbd, 0x88, 0x24, 0x65, 0xfd, 0x16,
0x14, 0x90, 0xe5, 0x6a, 0x40, 0x3e, 0x6b, 0xb3, 0x67, 0xd7, 0x97, 0x7b, 0xbd, 0xe7, 0xa5, 0x59,
0xb3, 0xb2, 0xcd, 0x16, 0x13, 0x2a, 0x2b, 0xdb, 0x88, 0x28, 0x3e, 0x09, 0xe7, 0xed, 0xd0, 0x57,
0xa4, 0x2f, 0x86, 0xe7, 0xfa, 0xc4, 0xb1, 0xa3, 0xa0, 0xe6, 0x9f, 0x22, 0x51, 0x94, 0xad, 0x7c,
0x5c, 0x0b, 0x5c, 0xae, 0xfd, 0x30, 0x0b, 0x71, 0x10, 0xe6, 0xc1, 0xbe, 0x66, 0x56, 0x84, 0xfc,
0x3d, 0x43, 0xdf, 0x21, 0xc0, 0x6e, 0x87, 0x55, 0xb5, 0x01, 0xef, 0x57, 0xf1, 0xbe, 0xdc, 0x6c,
0x51, 0x0c, 0x6a, 0x32, 0x44, 0xb2, 0x09, 0x2b, 0xea, 0x99, 0xe2, 0x76, 0x1f, 0x80, 0x39, 0x55,
0x7c, 0xa2, 0x08, 0xd5, 0x5e, 0x8a, 0x08, 0x2f, 0xef, 0x21, 0x1a, 0x32, 0xd8, 0x8b, 0x71, 0x34,
0xf4, 0x20, 0x1e, 0x89, 0xdf, 0xbf, 0x16, 0x39, 0xef, 0x29, 0xca, 0xcf, 0x3f, 0x08, 0xb3, 0x58,
0x87, 0xf4, 0xed, 0x87, 0xaa, 0x56, 0xa3, 0x7f, 0xcd, 0x60, 0x41, 0xfc, 0xd5, 0x6e, 0xac, 0xc0,
0x7d, 0xc2, 0x91, 0x4c, 0x2b, 0x28, 0xa8, 0x35, 0x83, 0xc4, 0xef, 0x22, 0x9f, 0x6f, 0x18, 0xa7,
0xc6, 0xc4, 0x47, 0x18, 0x5a, 0x29, 0xb2, 0xd3, 0x6f, 0x1b, 0xcb, 0x11, 0xf1, 0xd9, 0x57, 0x4a,
0x4b, 0xaf, 0xce, 0x99, 0x3e, 0x7d, 0x1b, 0x17, 0x27, 0xd2, 0x14, 0x35, 0x13, 0x40, 0x77, 0x4d,
0x2e, 0x3f, 0xbb, 0xb8, 0xcf, 0xb8, 0x1e, 0x8f, 0x70, 0x55, 0x98, 0x7d, 0xc9, 0x39, 0x75, 0x5d,
0xe9, 0x56, 0x6b, 0x07, 0xd4, 0x09, 0xbd, 0x4a, 0xa6, 0x0c, 0xab, 0xf5, 0x39, 0xc6, 0x37, 0x98,
0xe8, 0x69, 0xc2, 0x25, 0xda, 0x24, 0x22, 0xfd, 0xe5, 0x40, 0x8c, 0x13, 0x1a, 0x9d, 0xa2, 0x26,
0x40, 0x79, 0x42, 0xc5, 0x06, 0xc0, 0x2d, 0x68, 0x1f, 0x34, 0xf3, 0x5f, 0xfc, 0x2f, 0xac, 0x84,
0x0e, 0x43, 0x8a, 0xf1, 0xfa, 0xd6, 0xdb, 0x77, 0xcb, 0x1b, 0x49, 0x88, 0x18, 0x0b, 0x33, 0xe5,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE polar_coord_xpm[1] = {{ png, sizeof( png ), "polar_coord_xpm" }};
+19 -28
View File
@@ -8,34 +8,25 @@
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, 0xa5, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0x60, 0x18, 0x6e, 0x80,
0x91, 0x52, 0x03, 0x9a, 0x9b, 0x9b, 0x15, 0xff, 0xfe, 0xfd, 0x9b, 0x03, 0x64, 0xba, 0x00, 0xb1,
0x3c, 0x54, 0xf8, 0x21, 0x10, 0xef, 0x61, 0x66, 0x66, 0x9e, 0x52, 0x5b, 0x5b, 0x7b, 0x9f, 0x62,
0x8b, 0x1a, 0x1b, 0x1b, 0xfd, 0xff, 0xff, 0xff, 0xbf, 0x1c, 0xc8, 0xe4, 0xc4, 0xa1, 0xe4, 0x1b,
0x10, 0x47, 0x36, 0x34, 0x34, 0x6c, 0x62, 0xa4, 0xc0, 0x27, 0xaa, 0x40, 0x9f, 0x5c, 0x02, 0x32,
0x39, 0x80, 0x78, 0x09, 0x13, 0x13, 0xd3, 0x24, 0x36, 0x36, 0xb6, 0x5b, 0x20, 0xb9, 0x5f, 0xbf,
0x7e, 0xa9, 0xfd, 0xfb, 0xf7, 0x2f, 0x1f, 0xc8, 0x8c, 0x06, 0xe2, 0x1f, 0x40, 0xac, 0xcb, 0x42,
0xae, 0x45, 0x40, 0x4b, 0xca, 0xa1, 0x96, 0xcc, 0x03, 0xba, 0x38, 0x19, 0x4d, 0xfa, 0x34, 0x10,
0xc7, 0x00, 0xc5, 0x7f, 0x02, 0xe9, 0x24, 0x20, 0x2e, 0x67, 0xa2, 0x20, 0xe4, 0xdc, 0xa1, 0x74,
0x2f, 0x1e, 0x35, 0x30, 0x39, 0x77, 0x4a, 0x2c, 0x92, 0x84, 0xd2, 0x37, 0xf0, 0xa8, 0x81, 0xc9,
0x49, 0x51, 0x62, 0x11, 0x33, 0x88, 0x00, 0x06, 0xcf, 0x3f, 0x5c, 0x0a, 0x90, 0xe4, 0x98, 0x99,
0xe8, 0x95, 0x8f, 0x86, 0x9f, 0x45, 0xe0, 0xe4, 0x1d, 0x11, 0x11, 0xd1, 0x01, 0xa4, 0x0a, 0x81,
0x99, 0x8f, 0x0d, 0x98, 0x6c, 0x19, 0x80, 0x79, 0x80, 0x20, 0x3e, 0x70, 0xe0, 0x00, 0x98, 0xb6,
0xb1, 0xb1, 0xf9, 0x0f, 0xd4, 0xf3, 0x0b, 0xc8, 0xee, 0x3d, 0x79, 0xf2, 0x64, 0x15, 0x16, 0x3b,
0x8e, 0xc0, 0x4b, 0x86, 0xf0, 0xf0, 0xf0, 0x9f, 0x40, 0x85, 0x6c, 0xc4, 0x58, 0x00, 0xc2, 0x38,
0x1c, 0xf3, 0xf3, 0xcc, 0x99, 0x33, 0x1c, 0x78, 0x7d, 0x04, 0xd4, 0xc8, 0x46, 0x86, 0xc1, 0x28,
0x18, 0x08, 0xd8, 0x09, 0x06, 0x1d, 0xb2, 0x41, 0xe8, 0x86, 0x1a, 0x18, 0x18, 0x30, 0xa4, 0xa5,
0xa5, 0x31, 0x00, 0x83, 0x95, 0x61, 0xda, 0xb4, 0x69, 0x0c, 0xa7, 0x4f, 0x9f, 0x46, 0x91, 0x07,
0x89, 0x13, 0x9d, 0x18, 0xfe, 0xfc, 0xf9, 0x03, 0xc7, 0x20, 0x8b, 0x90, 0x71, 0x6a, 0x6a, 0x2a,
0x83, 0x90, 0x90, 0x10, 0x83, 0xb0, 0xb0, 0x30, 0x43, 0x46, 0x46, 0x06, 0x58, 0x0c, 0xa6, 0x8e,
0x58, 0x4b, 0xb0, 0xfa, 0x08, 0x4b, 0x90, 0xa0, 0x00, 0x90, 0x25, 0x64, 0x27, 0x6f, 0x74, 0x5f,
0x20, 0xfb, 0x70, 0xf2, 0xe4, 0xc9, 0x0c, 0xbf, 0x7f, 0xff, 0x06, 0xe3, 0x89, 0x13, 0x27, 0x52,
0x96, 0xbc, 0x41, 0x06, 0xe2, 0xf2, 0x11, 0x30, 0xc9, 0x32, 0x5c, 0xbf, 0x7e, 0x1d, 0x52, 0x24,
0x9f, 0x3e, 0x4d, 0x99, 0x45, 0xf8, 0x82, 0x8e, 0x94, 0x78, 0x20, 0xd9, 0x22, 0xf4, 0x88, 0x3e,
0x72, 0xe4, 0x08, 0x75, 0x2c, 0x42, 0x0f, 0x3a, 0x74, 0xb0, 0x71, 0xe3, 0x46, 0xea, 0x94, 0x75,
0xa0, 0x22, 0x04, 0xe6, 0x2b, 0x0a, 0xc0, 0x4f, 0x62, 0x2c, 0xea, 0x05, 0x06, 0xd5, 0x2f, 0x0a,
0x2c, 0xf9, 0x05, 0xd4, 0xdf, 0x33, 0x28, 0xda, 0x75, 0x00, 0xe1, 0xa2, 0xc4, 0xfc, 0xec, 0xf5,
0xed, 0x82, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x01, 0x0f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0x60, 0x18, 0x05, 0x68,
0x20, 0xb6, 0x26, 0x45, 0x31, 0xa1, 0x32, 0xb9, 0x37, 0xa1, 0x2a, 0xf9, 0x22, 0x10, 0x7f, 0x80,
0xe2, 0x8b, 0x20, 0x31, 0x90, 0x1c, 0x55, 0x2c, 0x49, 0xac, 0x4e, 0xf1, 0x4f, 0xa8, 0x4a, 0xf9,
0x06, 0x34, 0xf8, 0x3f, 0x0e, 0xfc, 0x35, 0xbe, 0x32, 0xc9, 0x8f, 0x22, 0x4b, 0x12, 0x6a, 0x12,
0x54, 0x81, 0x06, 0x7d, 0x07, 0x19, 0x18, 0x5f, 0x95, 0xbc, 0x38, 0xa1, 0x22, 0xd5, 0x34, 0xad,
0x3c, 0x8d, 0x1f, 0x84, 0x41, 0xec, 0x84, 0xca, 0x94, 0x25, 0x50, 0xcb, 0xbe, 0x27, 0x57, 0x24,
0xab, 0x90, 0x6f, 0x51, 0x75, 0xca, 0x1c, 0xa8, 0x41, 0x73, 0x71, 0xaa, 0x01, 0xca, 0x41, 0x1d,
0x32, 0x9b, 0x6c, 0x8b, 0x80, 0x9a, 0x1f, 0x83, 0x0c, 0x49, 0xac, 0x4c, 0xd4, 0xc2, 0x19, 0xb4,
0x40, 0x39, 0xa8, 0x63, 0x1e, 0x91, 0xef, 0xa3, 0xaa, 0xe4, 0x3f, 0x20, 0x43, 0x1a, 0x1a, 0x1a,
0x98, 0x70, 0xa9, 0x01, 0xc9, 0x41, 0x2d, 0xfa, 0x43, 0x89, 0x45, 0xe0, 0x08, 0xa7, 0x96, 0xba,
0x51, 0x8b, 0xf0, 0xab, 0x33, 0x36, 0x36, 0xee, 0x00, 0xe2, 0x9f, 0x40, 0xfc, 0x9f, 0x4c, 0x0c,
0xd2, 0xdb, 0x86, 0x23, 0x75, 0x1e, 0x06, 0x61, 0x98, 0x45, 0x94, 0x58, 0x02, 0xc3, 0x3f, 0x08,
0x06, 0x03, 0x15, 0x2c, 0x01, 0x63, 0x8a, 0x2c, 0xca, 0xcc, 0xcc, 0xfc, 0x7f, 0xe3, 0xc6, 0x0d,
0x30, 0xce, 0xc8, 0xc8, 0xa0, 0x9d, 0x45, 0x20, 0x0b, 0xde, 0xbc, 0x79, 0x03, 0xc6, 0xd7, 0xaf,
0x5f, 0x1f, 0x06, 0x16, 0x81, 0x82, 0xeb, 0xf9, 0xf3, 0xe7, 0x60, 0x4c, 0xd3, 0xa0, 0x03, 0xe1,
0x7d, 0xfb, 0xf6, 0x81, 0x31, 0x4d, 0x13, 0x03, 0x5d, 0x2d, 0x6a, 0x6a, 0x6a, 0x02, 0x63, 0x9a,
0x5b, 0x44, 0xcd, 0x7c, 0x44, 0xb7, 0x92, 0xa1, 0x8d, 0xd2, 0xb2, 0xce, 0xc8, 0xc8, 0xa8, 0x65,
0x50, 0x34, 0xcb, 0x00, 0xfd, 0x52, 0x19, 0xe9, 0xa4, 0x86, 0xe8, 0x10, 0x00, 0x00, 0x00, 0x00,
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE unlocked_xpm[1] = {{ png, sizeof( png ), "unlocked_xpm" }};
+49 -36
View File
@@ -8,42 +8,55 @@
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, 0xcd, 0x94, 0xcf, 0x6a, 0x1a,
0x51, 0x14, 0xc6, 0xa7, 0xa1, 0x5d, 0xa6, 0x69, 0x37, 0x85, 0xf6, 0x1d, 0x14, 0xff, 0x6b, 0x23,
0xea, 0x3c, 0x82, 0x1a, 0x48, 0xa2, 0x48, 0x41, 0x7d, 0x01, 0x91, 0x96, 0x96, 0xac, 0x5c, 0x88,
0x4f, 0x20, 0x4c, 0x5e, 0x41, 0xa1, 0x2d, 0x29, 0x5d, 0x86, 0x2c, 0xc4, 0x95, 0x33, 0xd9, 0xa4,
0xef, 0x50, 0x02, 0x69, 0xd3, 0x86, 0x2e, 0x1a, 0x12, 0xe2, 0xed, 0xf7, 0x0d, 0x67, 0x21, 0x83,
0x72, 0xe7, 0x0a, 0x42, 0x2f, 0x1c, 0x46, 0x67, 0xee, 0xbd, 0xbf, 0xf3, 0x9d, 0xef, 0xdc, 0x6b,
0x59, 0x06, 0xc3, 0x75, 0x5d, 0xbb, 0x58, 0x2c, 0xfe, 0x4a, 0x26, 0x93, 0x8a, 0x4f, 0xfc, 0xef,
0x85, 0xf9, 0x9f, 0xc9, 0x64, 0xfe, 0x98, 0x70, 0x2c, 0x2e, 0xf2, 0x3c, 0x4f, 0x99, 0x06, 0xd7,
0x19, 0x81, 0x98, 0xe9, 0x3a, 0x20, 0x2a, 0xfb, 0xbf, 0x14, 0x41, 0xc9, 0x4e, 0x2a, 0x95, 0x3a,
0xac, 0xd5, 0x6a, 0x5e, 0xb3, 0xd9, 0x54, 0x8c, 0x4e, 0xa7, 0xa3, 0x1c, 0xc7, 0x51, 0xd3, 0xe9,
0x54, 0x0b, 0x62, 0x25, 0x74, 0x80, 0x27, 0x89, 0x44, 0xe2, 0x08, 0xcf, 0xdf, 0x9c, 0x0c, 0xd8,
0xbc, 0x5a, 0xad, 0x2a, 0x46, 0xa9, 0x54, 0xf2, 0x37, 0x28, 0x14, 0x0a, 0xaa, 0xdf, 0xef, 0xab,
0xd9, 0x6c, 0xb6, 0x9e, 0xa2, 0x48, 0x24, 0xf2, 0x1c, 0x1b, 0x9d, 0x21, 0xe6, 0x88, 0x4f, 0x00,
0xe6, 0x16, 0x3d, 0xe2, 0xc6, 0xa3, 0xd1, 0x48, 0xb5, 0xdb, 0x6d, 0x1f, 0xd8, 0x68, 0x34, 0xd4,
0x64, 0x32, 0x31, 0xf3, 0x88, 0x4a, 0x04, 0xf2, 0x17, 0x2a, 0x6a, 0x3a, 0x8f, 0x86, 0xc3, 0xa1,
0xca, 0xe5, 0x72, 0x3e, 0x6c, 0x99, 0xb2, 0x95, 0x8a, 0xa4, 0x5c, 0xf3, 0x45, 0x88, 0x9c, 0xa3,
0xde, 0xaa, 0xf2, 0x10, 0x46, 0x65, 0x83, 0xc1, 0x20, 0x9c, 0x47, 0x34, 0x9e, 0x9e, 0x00, 0xf2,
0xd1, 0xb4, 0xeb, 0x5a, 0xad, 0x96, 0xef, 0x59, 0xb0, 0x41, 0x96, 0x2a, 0xa2, 0x0a, 0x66, 0x40,
0x4f, 0x4c, 0xcf, 0xd1, 0x78, 0x3c, 0xf6, 0xb3, 0x67, 0x37, 0x6a, 0x3d, 0x02, 0xe0, 0x18, 0x93,
0xaf, 0xf0, 0xf3, 0x91, 0xa9, 0x22, 0xfa, 0x43, 0x45, 0xdd, 0x6e, 0x57, 0xaf, 0x08, 0x90, 0xaf,
0x50, 0xe5, 0xae, 0xb8, 0xeb, 0x7a, 0xba, 0x33, 0x53, 0xa9, 0x54, 0xfc, 0x12, 0x6a, 0x3d, 0x02,
0xe4, 0x0b, 0x3e, 0x78, 0xeb, 0xde, 0x0c, 0xe5, 0x72, 0xd9, 0x3f, 0xd0, 0x61, 0x14, 0x39, 0x52,
0xba, 0xad, 0xe0, 0x37, 0xde, 0xc2, 0xba, 0x5b, 0x9b, 0xdd, 0x5a, 0xaf, 0xd7, 0xdd, 0xc0, 0x77,
0x7b, 0x99, 0xa2, 0x43, 0x4e, 0x88, 0xc7, 0xe3, 0xaf, 0x2d, 0xc3, 0x81, 0xb5, 0x79, 0x69, 0xa4,
0x7d, 0xed, 0xe4, 0x6c, 0x36, 0xfb, 0x14, 0x93, 0x99, 0xcd, 0xe7, 0x35, 0x40, 0x2c, 0xfb, 0x75,
0x3e, 0x9f, 0xdf, 0x0e, 0x7b, 0x89, 0x7e, 0x90, 0xcc, 0x1a, 0x06, 0x90, 0x37, 0xb2, 0xe6, 0x5d,
0xe8, 0xcc, 0x6c, 0xdb, 0x7e, 0x8c, 0x85, 0xa7, 0x58, 0x78, 0x1b, 0x06, 0x26, 0x90, 0x07, 0xc4,
0x0d, 0x4a, 0xfe, 0xca, 0xa8, 0x0c, 0xb1, 0x58, 0xec, 0x99, 0xc0, 0x98, 0xe5, 0x49, 0x3a, 0x9d,
0xde, 0x0d, 0x34, 0xc8, 0x16, 0x3d, 0x91, 0x72, 0xb1, 0x09, 0x6e, 0xe4, 0xf9, 0x2d, 0x1a, 0x8d,
0xbe, 0x30, 0x82, 0x51, 0x19, 0x16, 0xbe, 0x17, 0xcf, 0xb8, 0xc9, 0x0f, 0xc4, 0xb9, 0xc4, 0x4f,
0x79, 0x77, 0x8d, 0x78, 0x8b, 0x78, 0x89, 0xb8, 0x90, 0x77, 0xf7, 0x48, 0xe0, 0x12, 0xb1, 0x67,
0x04, 0xa4, 0xb9, 0xec, 0x24, 0xb6, 0x3e, 0x15, 0x88, 0x0a, 0x87, 0xef, 0x16, 0x8d, 0xa7, 0x12,
0xbc, 0xbf, 0x13, 0x98, 0x0f, 0xc4, 0x9c, 0x03, 0x6b, 0x13, 0x03, 0x9b, 0x7f, 0x5f, 0x00, 0x6d,
0x0e, 0xc6, 0x72, 0x71, 0xf3, 0x20, 0x6c, 0x23, 0xaa, 0xa8, 0x20, 0x08, 0xb3, 0x36, 0x35, 0x82,
0xb0, 0x7f, 0xa8, 0x11, 0x18, 0x39, 0x35, 0x06, 0xa4, 0x45, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x02, 0xf4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x55, 0x4d, 0x4f, 0x1a,
0x51, 0x14, 0x9d, 0xa4, 0xe9, 0xa6, 0xe9, 0xd7, 0xa6, 0xe9, 0x3f, 0x68, 0xbb, 0x37, 0x62, 0x50,
0xdc, 0x35, 0x42, 0x13, 0x92, 0x06, 0x09, 0xec, 0x74, 0x05, 0x7e, 0xa0, 0x69, 0x64, 0xd5, 0x45,
0x89, 0x5d, 0x10, 0x05, 0xe3, 0xc6, 0x88, 0xa6, 0xa8, 0x11, 0x49, 0xd3, 0x85, 0x7c, 0x18, 0x05,
0x45, 0x5c, 0x89, 0xa9, 0x44, 0x4d, 0x01, 0x15, 0x74, 0x61, 0xbb, 0x60, 0xd7, 0xd2, 0x76, 0x63,
0xd3, 0xc4, 0x6e, 0x4c, 0xe7, 0xf5, 0x9e, 0x97, 0x8c, 0x19, 0x11, 0xc6, 0x19, 0x43, 0x5f, 0x72,
0x43, 0x66, 0xe6, 0xbd, 0x77, 0xee, 0x3d, 0xe7, 0xdc, 0x8b, 0x20, 0x68, 0x58, 0xb9, 0x5c, 0x6e,
0xa8, 0xbd, 0xbd, 0x5d, 0x6c, 0x6a, 0x6a, 0x62, 0xf8, 0xa5, 0xe7, 0x2d, 0x35, 0xcf, 0x3a, 0x9d,
0x4e, 0xd4, 0x82, 0x23, 0xe0, 0x50, 0x3e, 0x9f, 0x67, 0x5a, 0x03, 0xe7, 0x34, 0x01, 0x21, 0xd3,
0x9b, 0x00, 0xa1, 0x32, 0x4d, 0x40, 0x1d, 0x1d, 0x1d, 0xe2, 0xf1, 0xf1, 0x31, 0x43, 0xec, 0xef,
0xef, 0x37, 0xb6, 0x22, 0xc6, 0xd8, 0x83, 0x58, 0x2c, 0xb6, 0x34, 0x31, 0x31, 0xf1, 0x7d, 0x64,
0x64, 0x44, 0x74, 0xb9, 0x5c, 0x0c, 0x31, 0x3e, 0x3e, 0xce, 0xe8, 0x3d, 0xdb, 0xdd, 0xdd, 0x65,
0x07, 0x07, 0x07, 0x8a, 0x40, 0x60, 0x42, 0x11, 0x24, 0x91, 0x48, 0xbc, 0x1d, 0x1d, 0x1d, 0xfd,
0xd3, 0xda, 0xda, 0xca, 0x37, 0xb7, 0xb5, 0xb5, 0x31, 0xab, 0xd5, 0xca, 0x43, 0xfe, 0x6e, 0x6e,
0x6e, 0xee, 0xe6, 0x15, 0x45, 0x22, 0x91, 0x0f, 0x5d, 0x5d, 0x5d, 0xdc, 0x41, 0xfd, 0xfd, 0xfd,
0x62, 0x30, 0x18, 0x3c, 0x19, 0x1e, 0x1e, 0x66, 0x47, 0x47, 0x47, 0x3c, 0x0a, 0x85, 0x02, 0xdb,
0xd8, 0xd8, 0x60, 0x6e, 0xb7, 0x9b, 0x03, 0xf6, 0xf4, 0xf4, 0xb0, 0xbd, 0xbd, 0x3d, 0x6d, 0x1a,
0xa1, 0x12, 0x80, 0x90, 0x2d, 0xd9, 0xf4, 0xf4, 0xf4, 0x29, 0xd1, 0xf3, 0xbc, 0x9e, 0xeb, 0x0e,
0x0f, 0x0f, 0x39, 0x85, 0xd8, 0xdb, 0xdb, 0xdb, 0xab, 0xbe, 0x22, 0x68, 0x02, 0xba, 0x90, 0xe5,
0xd4, 0xd4, 0xd4, 0x69, 0xa5, 0x52, 0x79, 0x24, 0xeb, 0xa3, 0xad, 0x5a, 0x17, 0x41, 0xa3, 0x68,
0x34, 0xca, 0x2b, 0x03, 0x8d, 0xd5, 0x9a, 0xd5, 0xd4, 0x88, 0x0e, 0x2c, 0x81, 0xff, 0xbe, 0xbe,
0x3e, 0x51, 0xaa, 0x44, 0x4d, 0x1f, 0x15, 0x8b, 0x45, 0x4e, 0x23, 0x34, 0x83, 0x41, 0xae, 0xad,
0x08, 0xee, 0x42, 0x06, 0xd0, 0x44, 0x6b, 0x1f, 0xa5, 0xd3, 0x69, 0x9e, 0x7d, 0x3c, 0x1e, 0x57,
0xd6, 0x88, 0x68, 0xbb, 0xe7, 0xf1, 0x78, 0xce, 0x0d, 0x06, 0x03, 0x5b, 0x5d, 0x5d, 0x0d, 0x68,
0x9d, 0x0c, 0x30, 0x08, 0x2a, 0x82, 0xf5, 0xe5, 0x7d, 0x76, 0xa5, 0x22, 0x02, 0x7a, 0xea, 0x74,
0x3a, 0xc5, 0xce, 0xce, 0x4e, 0x56, 0x2a, 0x95, 0x5e, 0xd6, 0x98, 0x75, 0x5b, 0x4a, 0x40, 0x70,
0xa3, 0xc5, 0x62, 0x61, 0x83, 0x83, 0x83, 0xbc, 0xa9, 0xeb, 0x6a, 0x44, 0x40, 0x4f, 0x00, 0x84,
0xcd, 0x74, 0xc8, 0xa2, 0xb5, 0x22, 0x09, 0x68, 0x60, 0x60, 0xe0, 0x12, 0x50, 0xad, 0x8a, 0xee,
0x4a, 0xd4, 0xad, 0xad, 0xad, 0x5d, 0xa1, 0x0e, 0x53, 0x58, 0x69, 0x4a, 0xa3, 0xcf, 0x60, 0x24,
0xaf, 0xd7, 0x2b, 0x9a, 0x4c, 0x26, 0xf9, 0xf7, 0xa1, 0xba, 0x66, 0x98, 0x9d, 0x9d, 0xfd, 0x2c,
0x68, 0x5c, 0x33, 0x33, 0x33, 0x5f, 0x70, 0x96, 0xee, 0xa8, 0x5c, 0xbb, 0x99, 0xec, 0x1d, 0x87,
0xa0, 0xd4, 0x7c, 0xe2, 0xce, 0xce, 0x8e, 0x51, 0x2d, 0xc8, 0xf6, 0xf6, 0xb6, 0x99, 0xce, 0xfc,
0x05, 0x1b, 0xe4, 0xba, 0x88, 0x9a, 0x21, 0x7a, 0xdf, 0xe7, 0xf3, 0x9d, 0x21, 0xb3, 0x40, 0x20,
0x70, 0xa9, 0x61, 0xeb, 0xad, 0x72, 0xb9, 0xfc, 0x78, 0x72, 0x72, 0xf2, 0x37, 0xce, 0x8c, 0x8d,
0x8d, 0x9d, 0xd1, 0x1d, 0x0f, 0x55, 0x65, 0xb7, 0xbc, 0xbc, 0xec, 0x91, 0x46, 0x10, 0x4d, 0x87,
0x5f, 0xd9, 0x6c, 0xf6, 0x85, 0x52, 0x25, 0x00, 0xc1, 0xde, 0x96, 0x96, 0x16, 0x96, 0x4a, 0xa5,
0x72, 0x9a, 0xf8, 0x5e, 0x5c, 0x5c, 0x7c, 0xdf, 0xdd, 0xdd, 0xcd, 0x05, 0x05, 0x8d, 0xc4, 0xff,
0x09, 0x5d, 0xf2, 0x0e, 0xb6, 0x87, 0x23, 0xc9, 0x2c, 0x41, 0xe8, 0x08, 0xba, 0xb0, 0x07, 0x20,
0xf8, 0xb5, 0xdb, 0xed, 0x22, 0x7d, 0xfb, 0x98, 0xc9, 0x64, 0x5e, 0x53, 0x65, 0xb7, 0x55, 0x81,
0xad, 0xac, 0xac, 0xbc, 0xf1, 0xfb, 0xfd, 0x67, 0xd0, 0x0c, 0x97, 0xc0, 0x51, 0xe8, 0x31, 0x84,
0xf4, 0x37, 0x01, 0x4d, 0x40, 0xd7, 0xfa, 0xfa, 0xfa, 0x27, 0x9b, 0xcd, 0xc6, 0x13, 0x6b, 0x6e,
0x6e, 0x66, 0x46, 0xa3, 0x91, 0x85, 0xc3, 0xe1, 0x6f, 0x6a, 0xa8, 0xbf, 0xd0, 0x8c, 0xa6, 0x73,
0x0c, 0x4e, 0x22, 0xfb, 0x9e, 0xa3, 0xcf, 0x1c, 0x0e, 0x87, 0x88, 0x36, 0xc0, 0x3b, 0x08, 0x2f,
0x69, 0x92, 0x4c, 0x26, 0x33, 0x7a, 0xbd, 0x9e, 0x27, 0x80, 0x00, 0x9d, 0xf3, 0xf3, 0xf3, 0x3f,
0x55, 0x83, 0xc9, 0x40, 0xef, 0x60, 0x7a, 0x50, 0x3c, 0xc3, 0xb8, 0xaa, 0xfe, 0xbe, 0xb9, 0xb9,
0xf9, 0xca, 0x6c, 0x36, 0x5f, 0x00, 0xc9, 0xc1, 0x84, 0x46, 0x2e, 0x02, 0xbf, 0xb5, 0xb0, 0xb0,
0xf0, 0x15, 0x97, 0x57, 0x83, 0x09, 0x8d, 0x5e, 0xa0, 0x09, 0x15, 0x54, 0x83, 0x09, 0xff, 0x63,
0x01, 0x2c, 0x14, 0x0a, 0xfd, 0x90, 0x83, 0xfd, 0x03, 0x15, 0xf7, 0xfe, 0x53, 0x91, 0x84, 0x3e,
0x9c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE zoom_area_xpm[1] = {{ png, sizeof( png ), "zoom_area_xpm" }};
+44 -29
View File
@@ -8,35 +8,50 @@
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, 0xbc, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xcb, 0x4a, 0xc3,
0x40, 0x14, 0x86, 0x6b, 0xd1, 0xa5, 0xb7, 0x8d, 0xa0, 0xef, 0x90, 0x90, 0xa4, 0x0d, 0x55, 0xb3,
0xc9, 0x3b, 0x08, 0x56, 0xa1, 0xb8, 0x2c, 0x64, 0xef, 0xa5, 0xf8, 0x20, 0xd6, 0x97, 0xd0, 0xda,
0xea, 0x52, 0x7c, 0x01, 0x2f, 0x0b, 0x7d, 0x07, 0x11, 0x62, 0xab, 0x8d, 0x0b, 0x45, 0xb1, 0xf5,
0xff, 0xe5, 0x04, 0x42, 0x16, 0xed, 0x4c, 0x34, 0x1b, 0x31, 0xf0, 0x93, 0x64, 0x3a, 0x67, 0xbe,
0x39, 0x97, 0x39, 0x69, 0xa1, 0xf0, 0x7f, 0xfd, 0x89, 0xab, 0x54, 0x2a, 0xcd, 0x96, 0xcb, 0xe5,
0x0d, 0xc7, 0x71, 0x0e, 0xf1, 0x7c, 0x4a, 0xf1, 0x19, 0xaa, 0x56, 0x2a, 0x95, 0x99, 0xdf, 0x00,
0x4c, 0x61, 0xb1, 0x7d, 0xdc, 0x9f, 0xa1, 0x21, 0x14, 0x42, 0x57, 0xa2, 0x50, 0xc6, 0x9e, 0xa0,
0x86, 0xef, 0xfb, 0x93, 0x99, 0x20, 0x86, 0x61, 0xcc, 0x63, 0x81, 0x0b, 0x68, 0x00, 0x1d, 0x03,
0xb8, 0x8c, 0xe1, 0x89, 0xc4, 0x94, 0xa2, 0x6d, 0xdb, 0x2b, 0xf8, 0xad, 0x45, 0x20, 0x3c, 0x3e,
0xb7, 0x2c, 0x6b, 0x4e, 0xdb, 0x13, 0x81, 0xbc, 0x62, 0x81, 0xcd, 0x71, 0xf3, 0xb1, 0x89, 0x1a,
0xe6, 0xbe, 0x11, 0xa6, 0xe5, 0x99, 0x84, 0x6b, 0x40, 0x48, 0x10, 0x04, 0x2f, 0xf5, 0x7a, 0x7d,
0x38, 0x4a, 0x9c, 0x23, 0x30, 0x7a, 0xb6, 0xab, 0x9c, 0x78, 0xe6, 0x04, 0x06, 0x47, 0x7c, 0xe7,
0x42, 0x51, 0x14, 0x8d, 0x14, 0xe7, 0x88, 0xed, 0x09, 0x73, 0xa6, 0x54, 0x20, 0xf4, 0x82, 0x3b,
0x93, 0x9c, 0x68, 0x81, 0x5c, 0xd7, 0x5d, 0x15, 0xdb, 0xaa, 0x4a, 0xd8, 0x58, 0xc2, 0x61, 0x9c,
0x78, 0x1d, 0x10, 0x0b, 0x04, 0xb6, 0x5d, 0xe8, 0x40, 0x25, 0x74, 0x67, 0xf0, 0xea, 0x32, 0x7e,
0xd7, 0x04, 0xd1, 0xfe, 0x1a, 0xf6, 0x1d, 0x95, 0xd0, 0x75, 0x78, 0x4e, 0x7e, 0x00, 0xba, 0x41,
0x54, 0xda, 0x2a, 0x1e, 0x35, 0x25, 0x74, 0xc5, 0x5c, 0x43, 0xc7, 0x56, 0xc3, 0x84, 0xf2, 0x30,
0xea, 0x82, 0x60, 0xeb, 0x49, 0x31, 0xac, 0x8f, 0x05, 0xb1, 0x34, 0xa5, 0xad, 0xb4, 0x32, 0x80,
0x18, 0xf6, 0x9e, 0xe7, 0x79, 0xd3, 0xaa, 0x67, 0xa9, 0x21, 0x3b, 0xab, 0xa9, 0x1e, 0x58, 0x40,
0xb6, 0xc4, 0x66, 0x47, 0xb9, 0x33, 0xb0, 0x8d, 0xb0, 0x9d, 0xb0, 0xad, 0x10, 0xa6, 0x10, 0x6e,
0x42, 0x3e, 0xa1, 0x3e, 0x42, 0xbe, 0xa4, 0xd5, 0xef, 0xd8, 0x20, 0x05, 0xc6, 0x5d, 0xb6, 0x79,
0x18, 0xe3, 0x02, 0x89, 0x13, 0xcf, 0x9c, 0x48, 0xb8, 0xd8, 0xc5, 0xfb, 0x72, 0xbf, 0x33, 0x4d,
0x73, 0x41, 0x0b, 0x46, 0xcf, 0x60, 0xb8, 0x27, 0x39, 0xe3, 0x22, 0x8f, 0x3c, 0x27, 0xa2, 0xae,
0x8c, 0xf5, 0xa0, 0x6d, 0x68, 0x11, 0xba, 0x95, 0xb1, 0x0f, 0x6c, 0xe0, 0x01, 0x5a, 0xd3, 0x02,
0x32, 0xb9, 0xac, 0x24, 0x96, 0x3e, 0x3d, 0x10, 0x2f, 0x9a, 0x1c, 0x4b, 0x26, 0x9e, 0x9e, 0x60,
0xfc, 0x5d, 0x60, 0xdf, 0x40, 0xa5, 0x76, 0x94, 0xf1, 0x63, 0x79, 0x9f, 0x00, 0xe5, 0x07, 0x63,
0xb8, 0xb8, 0x78, 0x1a, 0x96, 0x8b, 0x57, 0xf4, 0x20, 0x0d, 0xcb, 0xed, 0x0f, 0x4d, 0x1a, 0xf6,
0x05, 0x34, 0x6e, 0x0d, 0x75, 0xfe, 0xd5, 0x32, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0xce, 0x00, 0x00, 0x02, 0xac, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x56, 0x3b, 0x6b, 0x9a,
0x61, 0x14, 0x0e, 0x94, 0x2e, 0x6d, 0x62, 0xbb, 0xf4, 0x2f, 0xa4, 0xdd, 0x45, 0xc5, 0xcb, 0x58,
0x90, 0x80, 0x50, 0x54, 0x74, 0xd3, 0x29, 0x31, 0xba, 0x74, 0x10, 0xa4, 0x43, 0xd5, 0x6e, 0x5e,
0x36, 0xaf, 0xa9, 0x0a, 0x5e, 0x28, 0x1d, 0x34, 0x1a, 0xe2, 0x1d, 0xb2, 0x28, 0x54, 0x51, 0x68,
0x05, 0x45, 0x97, 0xa4, 0x7b, 0x6b, 0xdb, 0xa1, 0x69, 0x85, 0x74, 0x09, 0xfd, 0xde, 0x9e, 0x47,
0x62, 0x11, 0x49, 0xf4, 0xd3, 0xda, 0x4e, 0x15, 0x0e, 0xea, 0xf7, 0x9e, 0x73, 0x9e, 0xf7, 0x7d,
0xce, 0x73, 0xce, 0xfb, 0x6d, 0x6c, 0xfc, 0xff, 0xfc, 0x8b, 0x0f, 0x63, 0x6c, 0x93, 0xec, 0xd1,
0x95, 0xdd, 0x5d, 0x77, 0xf2, 0x7b, 0xd9, 0x6c, 0xf6, 0xc8, 0xe7, 0xf3, 0x7d, 0x72, 0x38, 0x1c,
0x97, 0x7b, 0x7b, 0x7b, 0x0c, 0x86, 0xdf, 0xf4, 0x6c, 0x78, 0x78, 0x78, 0x98, 0x23, 0x1f, 0xc1,
0x1f, 0x81, 0x14, 0x0a, 0x85, 0x17, 0x2e, 0x97, 0xeb, 0x87, 0x4c, 0x26, 0x63, 0x42, 0xa1, 0x90,
0xc9, 0xe5, 0x72, 0xa6, 0xd5, 0x6a, 0xc7, 0x36, 0xfd, 0xcc, 0xed, 0x76, 0x5f, 0x1c, 0x1f, 0x1f,
0xdb, 0x57, 0x02, 0xc9, 0x64, 0x32, 0xaf, 0x0d, 0x06, 0x03, 0x87, 0x64, 0x16, 0x8b, 0x85, 0x8b,
0x44, 0x22, 0xa7, 0x95, 0x4a, 0x25, 0xd4, 0xef, 0xf7, 0x9f, 0xc0, 0xca, 0xe5, 0xf2, 0x41, 0x34,
0x1a, 0x3d, 0xdd, 0xdf, 0xdf, 0x1f, 0xfb, 0xc0, 0x37, 0x9d, 0x4e, 0xbf, 0x5a, 0xfa, 0x24, 0x08,
0x14, 0x8b, 0xc5, 0x2c, 0x1c, 0x0e, 0x9f, 0xb7, 0xdb, 0xed, 0xc7, 0x37, 0xf9, 0xb6, 0x5a, 0x2d,
0x65, 0x28, 0x14, 0xfa, 0x06, 0x5f, 0xa3, 0xd1, 0xc8, 0xf1, 0x3e, 0x19, 0x6a, 0x02, 0xba, 0xb0,
0x4b, 0x4a, 0x70, 0x6e, 0xb7, 0xdb, 0x4f, 0x6c, 0x36, 0xdb, 0xd7, 0x79, 0x06, 0x1f, 0x80, 0x21,
0x06, 0x34, 0xf2, 0xaa, 0x19, 0x15, 0xf7, 0x08, 0xfc, 0x9b, 0xcd, 0x66, 0x0e, 0x27, 0xb1, 0x5a,
0xad, 0xdf, 0x89, 0x26, 0xd6, 0xe9, 0x74, 0xae, 0x35, 0xac, 0xc1, 0x87, 0x7c, 0x77, 0x40, 0x23,
0x6a, 0x46, 0xe2, 0xc9, 0x2e, 0x04, 0x82, 0xba, 0xb0, 0x33, 0xd4, 0x04, 0xff, 0x91, 0xa4, 0xd7,
0xeb, 0xb1, 0xd1, 0x68, 0x74, 0xad, 0x61, 0x0d, 0x3e, 0xf0, 0xa5, 0x9a, 0x9d, 0x21, 0xd6, 0xef,
0xf7, 0x0f, 0x17, 0xd1, 0xb6, 0x45, 0x34, 0x5c, 0x2a, 0x14, 0x0a, 0x56, 0x2a, 0x95, 0x82, 0xcb,
0x02, 0x51, 0xcc, 0x01, 0x4e, 0x04, 0xe9, 0xcf, 0xed, 0x33, 0x5a, 0x7c, 0x48, 0x3d, 0xc2, 0x69,
0x34, 0x1a, 0x06, 0x65, 0x2d, 0x0b, 0x34, 0x18, 0x0c, 0x34, 0x6a, 0xb5, 0x9a, 0x99, 0x4c, 0x26,
0x8e, 0x72, 0x6d, 0xcf, 0x03, 0xda, 0x06, 0x10, 0x9c, 0x29, 0x48, 0xbd, 0x2c, 0x50, 0xb7, 0xdb,
0xd5, 0x21, 0x16, 0x39, 0x16, 0x01, 0x6d, 0x4e, 0xa8, 0xa3, 0x22, 0xaf, 0x44, 0x1d, 0x84, 0x84,
0x1c, 0x0b, 0x95, 0x37, 0x11, 0x43, 0x2c, 0x16, 0x3b, 0x5b, 0x41, 0x0c, 0xef, 0x11, 0x8b, 0xd1,
0xc4, 0x47, 0xde, 0x39, 0x14, 0x14, 0x52, 0x45, 0x33, 0xf2, 0x95, 0x77, 0xa3, 0xd1, 0x50, 0x51,
0xcc, 0x4f, 0xb0, 0x91, 0xcb, 0xe5, 0x32, 0x7c, 0x1a, 0x56, 0x80, 0xa6, 0xc3, 0xce, 0x82, 0xc1,
0x20, 0xaf, 0x86, 0x25, 0x95, 0x9d, 0x04, 0x02, 0x81, 0x11, 0x62, 0xbc, 0x5e, 0x2f, 0x1a, 0xf6,
0x3e, 0xaf, 0xe9, 0x80, 0x31, 0x32, 0x19, 0x41, 0xe8, 0xf8, 0x66, 0xb3, 0xb9, 0x73, 0x93, 0x2f,
0x4e, 0x02, 0x10, 0xf8, 0x4a, 0x24, 0x12, 0x46, 0xf3, 0xf0, 0xdd, 0x52, 0xf3, 0x0e, 0x03, 0x12,
0xb3, 0x0b, 0xbb, 0x04, 0x8d, 0x18, 0xa0, 0x94, 0xe4, 0x25, 0x64, 0x0f, 0x45, 0x12, 0x65, 0x11,
0xd4, 0x11, 0x74, 0xc1, 0x07, 0x20, 0xf8, 0xd6, 0xeb, 0xf5, 0x1c, 0xad, 0xbd, 0xa9, 0xd7, 0xeb,
0xcf, 0xe8, 0x64, 0xb7, 0x79, 0x81, 0xe5, 0xf3, 0xf9, 0xe7, 0x1e, 0x8f, 0xe7, 0x02, 0x35, 0x43,
0x12, 0x28, 0x0a, 0x3d, 0x06, 0x9b, 0x5c, 0x13, 0xa8, 0x09, 0xe8, 0xaa, 0x56, 0xab, 0x6f, 0x75,
0x3a, 0xdd, 0x78, 0x63, 0x22, 0x91, 0x88, 0x29, 0x95, 0x4a, 0x96, 0x4a, 0xa5, 0x3e, 0x0e, 0x87,
0xc3, 0x07, 0x7c, 0x87, 0xac, 0x00, 0xb3, 0x0b, 0x4a, 0x72, 0x3a, 0x9d, 0xb8, 0xf8, 0xb8, 0xdd,
0xdd, 0x5d, 0x0e, 0x12, 0xc6, 0x33, 0x14, 0x7e, 0x52, 0x93, 0x62, 0xb1, 0x58, 0x97, 0x4a, 0xa5,
0xe3, 0x0d, 0xc0, 0x40, 0x67, 0x3c, 0x1e, 0xff, 0xc2, 0x1b, 0x6c, 0x0a, 0xf4, 0x0e, 0xa6, 0xc7,
0xd5, 0x55, 0xbe, 0x35, 0xbb, 0x5e, 0xab, 0xd5, 0x9e, 0xaa, 0x54, 0xaa, 0xdf, 0x40, 0xd3, 0x60,
0xeb, 0xbe, 0xf6, 0x6f, 0x25, 0x93, 0xc9, 0x0f, 0x48, 0x3e, 0x0b, 0xb6, 0xf6, 0x17, 0x18, 0xd0,
0x84, 0x13, 0xcc, 0x82, 0xfd, 0x95, 0xb7, 0x25, 0x80, 0x25, 0x12, 0x89, 0xcf, 0xd3, 0x60, 0xbf,
0x00, 0xd9, 0x6f, 0x34, 0xee, 0x2c, 0x55, 0x33, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0x44, 0xae, 0x42, 0x60, 0x82,
};
+46 -29
View File
@@ -8,35 +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, 0x01, 0xa9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x56, 0xcb, 0x4a, 0xc3,
0x40, 0x14, 0xad, 0x45, 0x97, 0xbe, 0x36, 0x82, 0xfe, 0x43, 0x4a, 0xf3, 0x22, 0x6a, 0x36, 0xf9,
0x07, 0xc1, 0x5a, 0x28, 0x7e, 0x85, 0x8f, 0xe2, 0x87, 0x58, 0x7f, 0x42, 0x6b, 0xab, 0x4b, 0xf1,
0x07, 0x7c, 0x2c, 0xf4, 0x1f, 0x44, 0x88, 0xad, 0x76, 0xa5, 0x58, 0x6c, 0x3d, 0x07, 0xee, 0x22,
0x0c, 0x09, 0x99, 0x89, 0x66, 0x23, 0x06, 0x0e, 0x09, 0x33, 0x73, 0xef, 0x99, 0x73, 0x5f, 0x6d,
0xa5, 0xf2, 0xff, 0xfc, 0x89, 0xc7, 0x75, 0xdd, 0x45, 0xcf, 0xf3, 0x76, 0x1c, 0xc7, 0x39, 0xc1,
0xf7, 0x05, 0xc1, 0x6f, 0xa0, 0x11, 0x04, 0xc1, 0xc2, 0x6f, 0x10, 0xcc, 0xc1, 0xd9, 0x11, 0xde,
0x6f, 0xc0, 0x14, 0x88, 0x81, 0x5b, 0x41, 0x2c, 0x6b, 0xaf, 0x40, 0x3b, 0x8a, 0xa2, 0xd9, 0x42,
0x24, 0x96, 0x65, 0x2d, 0xc3, 0xc1, 0x35, 0x30, 0x01, 0xce, 0x40, 0xb8, 0x8e, 0xe5, 0x99, 0xc4,
0x91, 0xaa, 0x6d, 0xdb, 0x1b, 0xd8, 0xeb, 0x92, 0x10, 0x8a, 0xaf, 0xea, 0xf5, 0xfa, 0x92, 0xb1,
0x12, 0x21, 0x79, 0x87, 0x83, 0x66, 0xde, 0x79, 0x5c, 0xa2, 0x85, 0xb3, 0x1f, 0x24, 0x33, 0x52,
0x26, 0xe1, 0x9a, 0xa4, 0x91, 0x48, 0xb8, 0xa6, 0x19, 0x64, 0x54, 0x76, 0xa0, 0x9d, 0x78, 0xe6,
0x04, 0x06, 0xa7, 0x19, 0xfb, 0xa9, 0x44, 0xb2, 0x77, 0xce, 0x9c, 0x69, 0x15, 0x08, 0x55, 0xd0,
0x91, 0xe4, 0xc4, 0x88, 0xc8, 0xf7, 0xfd, 0x4d, 0xb1, 0x6d, 0xe8, 0x84, 0x8d, 0x25, 0x1c, 0x2b,
0x89, 0xd7, 0x22, 0x62, 0x81, 0x60, 0x6f, 0x00, 0x1c, 0xeb, 0x84, 0xee, 0x12, 0xaa, 0x6e, 0x54,
0xc7, 0x79, 0x48, 0x9c, 0xbf, 0x83, 0x7d, 0x5f, 0x27, 0x74, 0x7d, 0xf6, 0xc9, 0x0f, 0x88, 0xee,
0x11, 0x95, 0x9e, 0x8e, 0xa2, 0x8e, 0x84, 0xae, 0x5a, 0x6a, 0xe8, 0x38, 0x6a, 0xe8, 0x88, 0xcd,
0x68, 0x4a, 0x04, 0xdb, 0x50, 0x8a, 0x61, 0x3b, 0x97, 0x88, 0xa5, 0x29, 0x63, 0xa5, 0x5b, 0x80,
0x88, 0x61, 0x1f, 0x86, 0x61, 0x38, 0xaf, 0xdb, 0x4b, 0x6d, 0xb9, 0x59, 0x4b, 0x97, 0x08, 0x24,
0xbb, 0x62, 0xb3, 0xaf, 0x3d, 0x19, 0x38, 0x46, 0x38, 0x4e, 0x38, 0x56, 0xd2, 0xc8, 0x32, 0x48,
0xbe, 0x80, 0x11, 0x42, 0xbe, 0x66, 0x34, 0xef, 0x38, 0x20, 0x85, 0x8c, 0xb7, 0xec, 0xb1, 0x19,
0x95, 0x02, 0xa9, 0x32, 0x27, 0x12, 0x2e, 0xaa, 0x1c, 0xc9, 0xfb, 0xb1, 0x56, 0xab, 0xad, 0x18,
0x91, 0x51, 0x19, 0x0c, 0x0f, 0x25, 0x67, 0x74, 0xf2, 0xc2, 0x3e, 0x11, 0x0c, 0x64, 0x6d, 0x08,
0xec, 0x01, 0xab, 0xc0, 0x83, 0xac, 0x8d, 0x71, 0x81, 0x67, 0x60, 0xcb, 0x88, 0x90, 0xc9, 0x65,
0x25, 0xb1, 0xf4, 0xa9, 0x40, 0x54, 0x74, 0xb8, 0x96, 0x4c, 0x3c, 0x95, 0x60, 0xfd, 0x33, 0xd1,
0x5f, 0x63, 0xad, 0x71, 0x54, 0xf0, 0xc7, 0xf2, 0x49, 0x69, 0xe6, 0x72, 0xc8, 0x18, 0x2e, 0x3a,
0x57, 0xc9, 0x4a, 0x51, 0x45, 0x05, 0x2a, 0x59, 0x69, 0x7f, 0x68, 0x54, 0xb2, 0x6f, 0xb3, 0xb9,
0x02, 0xae, 0xbf, 0xa2, 0x7e, 0x91, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
0xce, 0x00, 0x00, 0x02, 0xbd, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x56, 0x3b, 0x8b, 0x5a,
0x41, 0x14, 0x5e, 0x08, 0x69, 0x92, 0xdd, 0x4d, 0x8a, 0x0d, 0xf9, 0x07, 0x9b, 0xf4, 0xa2, 0xe2,
0xa3, 0x0c, 0xc8, 0x82, 0x10, 0x54, 0xb4, 0x52, 0x2b, 0x9f, 0x4d, 0xda, 0x14, 0x51, 0xd3, 0xf9,
0xe8, 0x7c, 0x6e, 0x54, 0xf0, 0x41, 0x48, 0xe1, 0x6b, 0xf1, 0x2d, 0x56, 0x0a, 0x51, 0x14, 0x12,
0x41, 0xd0, 0x66, 0x4d, 0x61, 0x97, 0x98, 0xa4, 0xd9, 0x10, 0xd8, 0x34, 0x4b, 0xee, 0x64, 0x3e,
0xf1, 0x86, 0x1b, 0x61, 0xf5, 0xea, 0x9a, 0x54, 0xb9, 0x70, 0xf0, 0x3a, 0x73, 0xe6, 0x7c, 0x33,
0xe7, 0xfb, 0xce, 0x99, 0xbb, 0xb7, 0xf7, 0xff, 0xf9, 0x17, 0x0f, 0x21, 0x64, 0x9f, 0xda, 0xe3,
0x85, 0xdd, 0xdd, 0x75, 0xf0, 0x7b, 0xf9, 0x7c, 0xfe, 0xcc, 0xef, 0xf7, 0x7f, 0x76, 0x3a, 0x9d,
0x57, 0x66, 0xb3, 0x99, 0xc0, 0xf0, 0x4e, 0xc7, 0x66, 0xb9, 0x5c, 0xae, 0x40, 0x7d, 0x0e, 0x6f,
0x04, 0x52, 0x2e, 0x97, 0x5f, 0xba, 0xdd, 0xee, 0x1f, 0x52, 0xa9, 0x94, 0x08, 0x04, 0x02, 0x22,
0x93, 0xc9, 0x88, 0x46, 0xa3, 0x99, 0x1b, 0x77, 0xcc, 0xe3, 0xf1, 0x5c, 0x16, 0x8b, 0x45, 0xc7,
0x56, 0x20, 0xd9, 0x6c, 0xf6, 0x8d, 0xc1, 0x60, 0x60, 0x10, 0xcc, 0x6e, 0xb7, 0x33, 0xd1, 0x68,
0xf4, 0xbc, 0x5e, 0xaf, 0x87, 0x47, 0xa3, 0xd1, 0x53, 0x58, 0xad, 0x56, 0x3b, 0x8d, 0xc5, 0x62,
0xe7, 0x56, 0xab, 0x75, 0xee, 0x03, 0xdf, 0x4c, 0x26, 0xf3, 0x7a, 0xe3, 0x93, 0x60, 0xa1, 0x48,
0x24, 0x22, 0x91, 0x48, 0xe4, 0xa2, 0xdf, 0xef, 0x3f, 0x59, 0xa4, 0xf1, 0x88, 0x9a, 0x60, 0x61,
0x47, 0x18, 0xeb, 0xf5, 0x7a, 0x8a, 0x70, 0x38, 0xfc, 0x0d, 0xbe, 0x46, 0xa3, 0x91, 0xe1, 0x7d,
0x32, 0x70, 0x82, 0x74, 0x61, 0x97, 0x34, 0xc0, 0xc5, 0x6c, 0x36, 0x7b, 0xc0, 0xce, 0x35, 0x9b,
0xcd, 0x84, 0x5e, 0xaf, 0x27, 0x30, 0xbc, 0xb3, 0xe3, 0xf0, 0x01, 0x18, 0xd6, 0x20, 0x8d, 0xbc,
0x38, 0xa3, 0xe4, 0x9e, 0x21, 0xff, 0x36, 0x9b, 0x8d, 0x61, 0x4f, 0xc2, 0x05, 0x42, 0x30, 0x18,
0x17, 0x08, 0x0f, 0xf5, 0x3d, 0x41, 0x1a, 0xc1, 0x19, 0x15, 0x4f, 0x7e, 0x2d, 0x10, 0xd4, 0x85,
0x40, 0xe0, 0x64, 0x79, 0x6e, 0x15, 0x10, 0x1e, 0xca, 0xd9, 0x04, 0x73, 0x81, 0x40, 0x60, 0xb6,
0x2e, 0x6d, 0x07, 0x0e, 0x87, 0xe3, 0x4a, 0x2e, 0x97, 0x93, 0x6a, 0xb5, 0x1a, 0x02, 0x0f, 0x08,
0xc8, 0xda, 0x60, 0x30, 0x98, 0xb0, 0x40, 0x78, 0xe7, 0xce, 0xc1, 0x97, 0xae, 0x39, 0xc5, 0x89,
0x20, 0xfd, 0x95, 0x75, 0x46, 0x27, 0x1f, 0xd1, 0x1a, 0x61, 0xd4, 0x6a, 0x35, 0x81, 0xb2, 0x40,
0x3a, 0xf8, 0x60, 0x83, 0x5f, 0x67, 0xf0, 0x81, 0xef, 0x78, 0x3c, 0x56, 0xab, 0x54, 0x2a, 0x62,
0xb1, 0x58, 0x18, 0xfa, 0xff, 0x78, 0x15, 0xd0, 0x31, 0x80, 0xe0, 0x4c, 0x17, 0xa9, 0x36, 0x05,
0x1a, 0x0e, 0x87, 0x5a, 0xac, 0x45, 0x8c, 0x75, 0x40, 0xfb, 0x6c, 0xea, 0x68, 0x9d, 0x6c, 0x95,
0x3a, 0x08, 0x09, 0x31, 0xd6, 0x2a, 0x8f, 0x15, 0x43, 0x3c, 0x1e, 0x9f, 0x6c, 0x21, 0x86, 0x0f,
0x98, 0x43, 0x6b, 0xe2, 0x23, 0xef, 0x02, 0x08, 0x85, 0x54, 0x51, 0x8c, 0x7c, 0x81, 0x3a, 0x9d,
0x8e, 0x92, 0xae, 0xf9, 0x89, 0x6c, 0x14, 0x0a, 0x85, 0x2c, 0x9f, 0x82, 0x3d, 0x44, 0xd1, 0x21,
0x58, 0x28, 0x14, 0xe2, 0x55, 0xb0, 0xd3, 0xe9, 0xf4, 0x61, 0x30, 0x18, 0xfc, 0x8e, 0x35, 0x3e,
0x9f, 0x0f, 0x05, 0x7b, 0x9f, 0x57, 0x77, 0x40, 0x1b, 0x61, 0x5b, 0x10, 0x2a, 0xbe, 0xdb, 0xed,
0x9e, 0x5c, 0xd7, 0x82, 0x70, 0x12, 0x80, 0xc0, 0x57, 0x2c, 0x16, 0x13, 0xda, 0x0f, 0xdf, 0x6f,
0xd4, 0xef, 0xd0, 0x20, 0xd1, 0xbb, 0xb0, 0x4b, 0xa4, 0x11, 0x0d, 0x94, 0x06, 0x79, 0x05, 0xd9,
0x43, 0x91, 0x54, 0x2c, 0x51, 0xf0, 0x88, 0x74, 0xc1, 0x07, 0x20, 0xf8, 0xd5, 0xe9, 0x74, 0x0c,
0x9d, 0x7b, 0xdb, 0x6e, 0xb7, 0x9f, 0xd3, 0xcd, 0xdc, 0xe6, 0x05, 0x56, 0x2a, 0x95, 0x5e, 0x78,
0xbd, 0xde, 0x4b, 0x70, 0x86, 0x20, 0x50, 0x14, 0x6a, 0x0c, 0xc6, 0x5e, 0x13, 0xe0, 0x04, 0xe9,
0x6a, 0x34, 0x1a, 0xef, 0xb4, 0x5a, 0xed, 0x7c, 0x63, 0x42, 0xa1, 0x90, 0x28, 0x14, 0x0a, 0x92,
0x4e, 0xa7, 0x3f, 0x71, 0x53, 0xbf, 0x96, 0x33, 0xf4, 0x2e, 0x28, 0xc9, 0xe5, 0x72, 0xe1, 0xe2,
0x63, 0x4c, 0x26, 0x13, 0x03, 0x09, 0x63, 0x0c, 0xc4, 0xb3, 0x9c, 0x54, 0x2a, 0x95, 0xb6, 0x44,
0x22, 0xf9, 0x5d, 0x5f, 0x48, 0x67, 0x22, 0x91, 0xf8, 0xca, 0x1b, 0x8c, 0x03, 0x7a, 0x07, 0xdd,
0x63, 0x71, 0x95, 0x1f, 0x2c, 0xcf, 0xb7, 0x5a, 0xad, 0x67, 0x4a, 0xa5, 0xf2, 0x8f, 0x62, 0x66,
0xc1, 0x76, 0x7d, 0xed, 0xdf, 0x4a, 0xa5, 0x52, 0x1f, 0x11, 0x7c, 0x19, 0x6c, 0xe7, 0x1f, 0x30,
0x48, 0x13, 0x4e, 0xb0, 0x0c, 0xf6, 0x57, 0xbe, 0x96, 0x00, 0x96, 0x4c, 0x26, 0xbf, 0x70, 0xc1,
0x7e, 0x01, 0x69, 0x5a, 0xc4, 0x6b, 0xd2, 0x18, 0xe5, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE zoom_in_xpm[1] = {{ png, sizeof( png ), "zoom_in_xpm" }};
+46 -28
View File
@@ -8,34 +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, 0x01, 0x9f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x56, 0x4b, 0x4a, 0xc3,
0x50, 0x14, 0xad, 0x41, 0x87, 0xfe, 0x26, 0x82, 0xee, 0x21, 0x21, 0x6d, 0x12, 0xa2, 0x66, 0x92,
0x3d, 0x08, 0xd6, 0x42, 0x71, 0x15, 0x7e, 0x8a, 0x0b, 0xb1, 0x6e, 0x42, 0x6b, 0xab, 0x43, 0x71,
0x03, 0x7e, 0x06, 0xba, 0x07, 0x11, 0x62, 0xab, 0x1d, 0x29, 0x16, 0x5b, 0xcf, 0x81, 0x3b, 0x08,
0x6f, 0xd2, 0xfb, 0xa2, 0x99, 0x88, 0x0f, 0x0e, 0x49, 0x5f, 0xdf, 0x7d, 0xe7, 0x9e, 0xfb, 0x6b,
0x2b, 0x95, 0xff, 0xf5, 0x27, 0x56, 0x10, 0x04, 0x8b, 0x61, 0x18, 0xee, 0xd4, 0x6a, 0xb5, 0x13,
0xbc, 0x5f, 0x10, 0x7c, 0x07, 0xea, 0x71, 0x1c, 0x2f, 0xfc, 0x06, 0xc1, 0x1c, 0x2e, 0x3b, 0xc2,
0xf3, 0x0d, 0x98, 0x00, 0x19, 0x70, 0x2b, 0xc8, 0x64, 0xef, 0x15, 0x68, 0xa5, 0x69, 0x3a, 0x5b,
0x88, 0xc4, 0x75, 0xdd, 0x65, 0x5c, 0x70, 0x0d, 0x8c, 0x81, 0x33, 0x10, 0xae, 0x63, 0x7b, 0x26,
0x77, 0xc4, 0xa9, 0x56, 0xab, 0x1b, 0xf8, 0xae, 0x43, 0x42, 0x28, 0xbe, 0xf2, 0x7d, 0x7f, 0xc9,
0x5a, 0x89, 0x90, 0xbc, 0xe3, 0x82, 0xc6, 0xb4, 0xf3, 0x70, 0xa2, 0x89, 0xb3, 0x1f, 0x24, 0xb3,
0x52, 0x26, 0xe1, 0x1a, 0x6b, 0x48, 0x0c, 0x32, 0x2a, 0x3b, 0x50, 0x27, 0x9e, 0x39, 0x81, 0xc1,
0x69, 0x81, 0x9c, 0x9e, 0x33, 0x67, 0xaa, 0x02, 0xa1, 0x0a, 0x7a, 0x26, 0x39, 0xb1, 0x5a, 0x51,
0x14, 0x6d, 0x8a, 0x6d, 0x5d, 0x13, 0x02, 0x96, 0x70, 0x66, 0x24, 0x5e, 0xbb, 0x1c, 0xd8, 0xf6,
0x81, 0x63, 0x8d, 0xfc, 0x4b, 0xa8, 0xba, 0xc9, 0x7d, 0x9e, 0x68, 0x90, 0x3b, 0x7f, 0x07, 0xfb,
0x9e, 0x26, 0x74, 0x3d, 0xf6, 0xc9, 0x0f, 0x88, 0xee, 0x11, 0x95, 0xae, 0x46, 0x51, 0x5b, 0x42,
0xe7, 0x94, 0x1a, 0x3a, 0x8e, 0x1a, 0x7a, 0xc8, 0x66, 0xb4, 0x65, 0x81, 0x6d, 0x22, 0xc5, 0xb0,
0x3d, 0xf5, 0x30, 0x4b, 0x53, 0xc6, 0x4a, 0xa7, 0x00, 0x11, 0xc3, 0x3e, 0x48, 0x92, 0x64, 0x5e,
0xdb, 0x0f, 0x2d, 0xf1, 0xac, 0x69, 0x41, 0xb2, 0x2b, 0x36, 0xfb, 0x6a, 0xcf, 0x38, 0x46, 0x38,
0x4e, 0x38, 0x56, 0x34, 0x64, 0x42, 0xf2, 0x05, 0x0c, 0x11, 0xf2, 0x35, 0xab, 0x30, 0x70, 0x40,
0x0a, 0x19, 0xbd, 0xec, 0xb2, 0x19, 0x8d, 0x02, 0x71, 0x98, 0x13, 0x09, 0x17, 0x2b, 0x6f, 0x28,
0xcf, 0x47, 0xcf, 0xf3, 0x56, 0xac, 0xc8, 0xa8, 0x0c, 0x86, 0x87, 0x92, 0x33, 0x5e, 0xf2, 0xc2,
0x3e, 0x11, 0xf4, 0x65, 0x6f, 0x00, 0xec, 0x01, 0xab, 0xc0, 0x83, 0xec, 0x8d, 0xe0, 0xc0, 0x33,
0xb0, 0x65, 0x45, 0xc8, 0xe4, 0xb2, 0x92, 0x58, 0xfa, 0x54, 0x20, 0x2a, 0xda, 0xdc, 0xcb, 0x27,
0x9e, 0x4a, 0xb0, 0xff, 0x99, 0xeb, 0xaf, 0x91, 0x6a, 0x1c, 0x15, 0xfc, 0xb1, 0x7c, 0x32, 0x9a,
0xb9, 0x1c, 0x32, 0x86, 0x8b, 0x97, 0x9b, 0x64, 0xa5, 0xa8, 0xa2, 0x02, 0x93, 0xac, 0xb4, 0x3f,
0x34, 0x26, 0xd9, 0x37, 0xc7, 0x61, 0xe9, 0x1f, 0x03, 0x13, 0x08, 0xbc, 0x00, 0x00, 0x00, 0x00,
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x02, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x56, 0xdd, 0x6b, 0x52,
0x71, 0x18, 0xde, 0x4d, 0x10, 0x7d, 0xac, 0xba, 0x88, 0xfe, 0x83, 0xd5, 0xbd, 0xa0, 0xe2, 0xc7,
0x55, 0x92, 0x0c, 0x82, 0xa6, 0xa3, 0xab, 0xda, 0x2e, 0xf2, 0x6b, 0xfb, 0x0b, 0x46, 0xce, 0x2d,
0xe8, 0x63, 0x73, 0x35, 0x36, 0xc5, 0xe3, 0xf2, 0x18, 0xfb, 0x20, 0x74, 0x4d, 0x8f, 0x5f, 0x43,
0x85, 0x14, 0x4b, 0x61, 0x63, 0x12, 0x11, 0x83, 0x79, 0xb3, 0x15, 0xec, 0x72, 0xae, 0x2e, 0x72,
0x5d, 0x2c, 0x0a, 0xd9, 0xf9, 0xf5, 0x7b, 0x6c, 0x67, 0x88, 0xd1, 0xf1, 0xb8, 0xac, 0xab, 0x0e,
0xbc, 0x30, 0xc7, 0xf3, 0xbe, 0xcf, 0xfb, 0x3e, 0xef, 0xc7, 0x39, 0x1d, 0x1d, 0xff, 0x9f, 0x7f,
0xf1, 0x10, 0x42, 0xce, 0x10, 0xf2, 0xfd, 0xca, 0x4f, 0x23, 0xa7, 0xdb, 0x1c, 0xfc, 0xf3, 0x39,
0x8e, 0x0b, 0x46, 0x5d, 0xae, 0xc9, 0xdd, 0x91, 0x11, 0x7b, 0xd5, 0x62, 0x31, 0x11, 0x18, 0xfe,
0x76, 0xb9, 0x9e, 0x94, 0xc3, 0xe1, 0x60, 0x84, 0x92, 0x76, 0xfe, 0x11, 0xc9, 0xf2, 0x32, 0x77,
0x6f, 0x6c, 0xec, 0xfe, 0x57, 0x95, 0x4a, 0x45, 0x64, 0x32, 0x19, 0x51, 0xab, 0xd5, 0xa4, 0xb7,
0xd7, 0x58, 0xb3, 0xfa, 0xff, 0x8d, 0x8f, 0x3f, 0xd8, 0x8f, 0xc7, 0x43, 0x8e, 0x63, 0x91, 0x84,
0x42, 0xc1, 0x40, 0x5f, 0xdf, 0x2d, 0x1e, 0xc1, 0x06, 0x07, 0x6d, 0xbc, 0xcf, 0xc7, 0x6c, 0xa6,
0xd3, 0x09, 0x66, 0x63, 0xe3, 0xed, 0x0d, 0x58, 0x2a, 0x15, 0x9f, 0x61, 0x59, 0xef, 0xa6, 0xcd,
0x66, 0xa9, 0x61, 0x80, 0x5d, 0x5a, 0x0a, 0x3c, 0x6f, 0xb9, 0x12, 0x38, 0xca, 0xe5, 0x72, 0xe2,
0xf5, 0xba, 0x2b, 0xc5, 0x62, 0x5e, 0xf7, 0x3b, 0xec, 0xda, 0xda, 0x6b, 0x3d, 0xc3, 0x4c, 0xef,
0x01, 0xdb, 0xdf, 0x7f, 0x9b, 0x97, 0x5c, 0x19, 0x7a, 0x02, 0xb9, 0x90, 0x25, 0xc3, 0xb8, 0x2a,
0xe5, 0xf2, 0x87, 0x8b, 0xcd, 0x7c, 0x80, 0x01, 0x19, 0x7c, 0x20, 0xa3, 0xa4, 0x9e, 0x85, 0xc3,
0x81, 0x28, 0xf4, 0x1f, 0x18, 0xb0, 0xf2, 0x62, 0x95, 0x34, 0x3e, 0xc5, 0x62, 0xa1, 0x1b, 0x32,
0xa2, 0x67, 0x1c, 0xb7, 0xc8, 0x35, 0x75, 0xc0, 0x74, 0x21, 0x33, 0xf4, 0xa4, 0xd5, 0xbe, 0xb2,
0x2c, 0xb3, 0x05, 0x5f, 0xb7, 0x7b, 0xb2, 0xdc, 0x6c, 0x4f, 0xce, 0x3a, 0x1c, 0x77, 0xab, 0x1a,
0x8d, 0x86, 0x24, 0x93, 0x51, 0x0f, 0xfd, 0x7d, 0x21, 0x97, 0xcb, 0x39, 0xa5, 0x18, 0xb0, 0xd4,
0x67, 0x06, 0x15, 0x61, 0xf4, 0x45, 0xf7, 0x8c, 0x90, 0x6f, 0x97, 0xe9, 0x8e, 0xf0, 0x46, 0xa3,
0x81, 0x60, 0xb2, 0x28, 0x58, 0x66, 0x32, 0x99, 0x88, 0x56, 0xab, 0x15, 0x35, 0x60, 0x80, 0x2d,
0x95, 0xde, 0x19, 0x0d, 0x86, 0x1e, 0x62, 0xb5, 0x9a, 0x79, 0x1a, 0xab, 0x4b, 0x8c, 0xa8, 0x0b,
0x44, 0x00, 0x53, 0x27, 0x43, 0xab, 0x44, 0xeb, 0xeb, 0x6f, 0x6e, 0xc2, 0x17, 0x31, 0x90, 0xb4,
0xe8, 0x89, 0x11, 0xa4, 0xa3, 0x7b, 0x72, 0x2c, 0xe9, 0x30, 0x48, 0x76, 0xfb, 0x50, 0xb5, 0xe9,
0xe4, 0x09, 0xc3, 0xe0, 0xf7, 0x7b, 0xb7, 0x5a, 0x1f, 0x06, 0xef, 0x7b, 0xf8, 0xe2, 0x34, 0x49,
0x18, 0xef, 0x60, 0x04, 0x0d, 0xc5, 0xa8, 0x62, 0x19, 0xa5, 0x92, 0xac, 0xac, 0xe4, 0xae, 0x53,
0x9f, 0x03, 0xa8, 0x11, 0x89, 0x2c, 0x86, 0xa4, 0x5c, 0xe8, 0x4e, 0x2c, 0x1d, 0x32, 0xf3, 0x78,
0xa6, 0x25, 0x2d, 0xec, 0xf6, 0x76, 0xe9, 0x12, 0xc5, 0x7e, 0x81, 0xcf, 0xc4, 0xc4, 0x23, 0xba,
0xb0, 0x95, 0xf3, 0x92, 0xb2, 0xc3, 0x19, 0x11, 0x4e, 0x10, 0x36, 0x7e, 0x75, 0xf5, 0x55, 0xb7,
0x58, 0x25, 0x20, 0x01, 0x16, 0xd5, 0x64, 0xb3, 0xe9, 0x6c, 0x4b, 0x7a, 0xe3, 0x40, 0xe2, 0x76,
0x21, 0x4b, 0xc8, 0x88, 0x03, 0x4a, 0x8f, 0xea, 0x53, 0x8c, 0x3d, 0x26, 0x32, 0x95, 0x8a, 0xf9,
0xd0, 0x47, 0xc8, 0x05, 0x0c, 0x48, 0x0e, 0xb1, 0x07, 0x99, 0x4c, 0x2a, 0x91, 0xcf, 0xbf, 0x1c,
0xa2, 0xea, 0x9c, 0x90, 0x44, 0x96, 0x48, 0x84, 0x87, 0x9d, 0xce, 0x87, 0xfb, 0xe8, 0x19, 0x82,
0x60, 0xa2, 0xb0, 0x63, 0x30, 0xe1, 0x35, 0x01, 0x02, 0xc8, 0x45, 0x83, 0x67, 0x05, 0x52, 0x85,
0x42, 0x41, 0xf4, 0xfa, 0x6b, 0x64, 0x61, 0xe1, 0xd9, 0x8e, 0x14, 0xe9, 0x8f, 0x7a, 0x86, 0xdb,
0x85, 0x49, 0x1a, 0x1d, 0x1d, 0xc6, 0x8b, 0x8f, 0x37, 0x9b, 0xef, 0x10, 0xac, 0xc1, 0xd4, 0xd4,
0xe3, 0x72, 0x2c, 0xf6, 0x22, 0x24, 0xf4, 0x24, 0x93, 0x49, 0xc6, 0x95, 0x4a, 0x65, 0x2d, 0x01,
0x18, 0xe4, 0x9c, 0x9d, 0x65, 0x3f, 0x49, 0x26, 0xab, 0x23, 0x3d, 0x85, 0x45, 0x3c, 0x7c, 0x95,
0xff, 0xb2, 0x27, 0x85, 0x42, 0xd6, 0xae, 0xd3, 0x5d, 0x3d, 0x22, 0xaa, 0x27, 0x6b, 0xf7, 0x37,
0xc5, 0xc9, 0xf9, 0x79, 0xff, 0x0e, 0x82, 0x37, 0x92, 0xb5, 0xfd, 0x03, 0x06, 0x32, 0xa1, 0x82,
0x46, 0xb2, 0xbf, 0xf2, 0xb5, 0x04, 0xb2, 0xb9, 0x39, 0xf6, 0x63, 0x3d, 0xd9, 0x0f, 0x96, 0x23,
0x77, 0x01, 0xad, 0x45, 0x73, 0x44, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
};
const BITMAP_OPAQUE zoom_out_xpm[1] = {{ png, sizeof( png ), "zoom_out_xpm" }};
+45 -26
View File
@@ -8,32 +8,51 @@
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, 0x7b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xcf, 0x4a, 0xc3,
0x40, 0x10, 0xc6, 0xfb, 0xe7, 0x64, 0x95, 0x7a, 0x17, 0x8d, 0x05, 0x8f, 0x91, 0x90, 0xbf, 0x84,
0x3c, 0x84, 0x68, 0x29, 0x79, 0x0e, 0x2f, 0x82, 0xa6, 0xbd, 0xf8, 0x0a, 0x1e, 0x6c, 0xf5, 0xea,
0x0b, 0x28, 0x56, 0x5f, 0x41, 0x73, 0x10, 0x14, 0x3d, 0xa4, 0x27, 0xb1, 0xfa, 0x12, 0xa2, 0x92,
0xfa, 0x0d, 0x8c, 0xb0, 0x2d, 0xd8, 0xee, 0x54, 0x4f, 0xa5, 0x0b, 0x3f, 0x4a, 0xd3, 0x9d, 0xfd,
0x66, 0x66, 0xbf, 0xdd, 0xb4, 0x50, 0x98, 0x8f, 0x99, 0x18, 0x8e, 0xe3, 0xac, 0xfb, 0xbe, 0xdf,
0xf2, 0x3c, 0xef, 0x1a, 0xdc, 0x83, 0x27, 0x70, 0x05, 0x0e, 0x80, 0xf1, 0x67, 0x01, 0x2c, 0xb2,
0xec, 0xba, 0xee, 0x09, 0x3e, 0xbf, 0xc0, 0x00, 0x7c, 0x82, 0x17, 0xf0, 0x0a, 0x3e, 0x94, 0x67,
0x1d, 0x9a, 0x3b, 0x75, 0x15, 0x08, 0xce, 0x78, 0xb1, 0x5b, 0xb0, 0x13, 0x45, 0xd1, 0xc2, 0xcf,
0xef, 0x96, 0x65, 0x2d, 0x22, 0x89, 0x3a, 0xff, 0x46, 0x73, 0x32, 0x8a, 0x11, 0x57, 0x02, 0x7a,
0x20, 0xa7, 0xf6, 0xe0, 0x51, 0x71, 0xcc, 0xf4, 0x12, 0xe6, 0x24, 0x3c, 0x37, 0x0b, 0xc3, 0xb0,
0xaa, 0x2d, 0x84, 0xfd, 0x38, 0xe5, 0x2c, 0xf7, 0x05, 0xc9, 0x25, 0x1c, 0xd3, 0xd6, 0x0a, 0xb0,
0x6d, 0xbb, 0x46, 0x7d, 0x87, 0xd8, 0x0d, 0x65, 0x2b, 0x68, 0x44, 0x11, 0x71, 0x29, 0xef, 0xa7,
0xa1, 0x93, 0x19, 0x39, 0x69, 0x00, 0xa1, 0x6d, 0xe9, 0xbe, 0x22, 0xa6, 0xa1, 0xdd, 0x09, 0xb6,
0x2d, 0x39, 0xa9, 0x22, 0x15, 0x32, 0x4d, 0x73, 0x89, 0x2a, 0x82, 0xe0, 0xa5, 0x8e, 0xd0, 0x23,
0x59, 0x58, 0x58, 0xc9, 0x21, 0x57, 0x32, 0xca, 0x3b, 0x9c, 0xb8, 0xf2, 0x9b, 0xd0, 0x03, 0xe8,
0x4b, 0x84, 0xe0, 0xb4, 0x55, 0xe5, 0xac, 0xa9, 0x1c, 0x8f, 0xab, 0xa8, 0xcb, 0x41, 0x15, 0xe1,
0x91, 0xe8, 0x8e, 0x88, 0xd0, 0x1a, 0x1b, 0x3a, 0x66, 0x68, 0x48, 0x84, 0x70, 0x78, 0xb7, 0x54,
0x21, 0x7c, 0x3f, 0x9b, 0x94, 0x99, 0xc1, 0x66, 0x48, 0x27, 0x1c, 0xd4, 0xa1, 0x11, 0xc7, 0x71,
0x99, 0x5a, 0xce, 0x42, 0x39, 0x12, 0xdd, 0xd4, 0x69, 0x43, 0x9b, 0x03, 0x92, 0x29, 0x4d, 0x71,
0xae, 0xbb, 0xb9, 0x55, 0xbe, 0xe7, 0x72, 0x16, 0x2b, 0x49, 0x4c, 0x01, 0xa7, 0x45, 0xd2, 0x4b,
0xb5, 0xc7, 0x19, 0xa6, 0xb4, 0x67, 0x74, 0x91, 0x6a, 0x74, 0x63, 0x57, 0x7c, 0x83, 0x73, 0x65,
0x1d, 0xe5, 0x95, 0x40, 0x4e, 0x7a, 0x03, 0xcf, 0xe0, 0xe8, 0xdf, 0x5f, 0x7c, 0x41, 0x10, 0xac,
0x61, 0xe1, 0x3d, 0x70, 0x01, 0xee, 0x08, 0xb8, 0xaa, 0x39, 0xff, 0x4b, 0x30, 0x5b, 0xe3, 0x1b,
0x66, 0x68, 0xb1, 0xc5, 0xd2, 0xe8, 0x19, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
0xae, 0x42, 0x60, 0x82,
0xce, 0x00, 0x00, 0x02, 0xae, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0x60, 0x18, 0x05, 0xc3,
0x02, 0x1c, 0x3c, 0x78, 0x30, 0x6c, 0xd6, 0xac, 0x59, 0x47, 0x3b, 0x3b, 0x3b, 0x9f, 0x35, 0x35,
0x35, 0x7d, 0x68, 0x6d, 0x6d, 0x7d, 0xdf, 0xd3, 0xd3, 0x73, 0x6f, 0xd1, 0xa2, 0x45, 0x9b, 0x2e,
0x5f, 0xbe, 0xac, 0x4c, 0xb1, 0x05, 0x7b, 0xf6, 0xec, 0xb1, 0x9d, 0x36, 0x6d, 0xda, 0x83, 0xd0,
0xd0, 0xd0, 0xff, 0xc6, 0xc6, 0xc6, 0x60, 0x6c, 0x69, 0x69, 0xf9, 0xdf, 0xc2, 0xc2, 0x02, 0xcc,
0x36, 0x35, 0x35, 0xfd, 0x9f, 0x97, 0x97, 0xf7, 0x77, 0xe1, 0xc2, 0x85, 0xc7, 0x5f, 0xbc, 0x78,
0xc1, 0x4d, 0x96, 0x25, 0x6b, 0xd6, 0xac, 0xc9, 0x29, 0x2e, 0x2e, 0xfe, 0x05, 0x32, 0x30, 0x3a,
0x3a, 0xfa, 0x5f, 0x7f, 0x7f, 0xff, 0xc3, 0xa5, 0x4b, 0x97, 0xae, 0xdd, 0xb6, 0x6d, 0x5b, 0x2b,
0x10, 0xf7, 0xcf, 0x9d, 0x3b, 0x77, 0x67, 0x77, 0x77, 0xf7, 0x5b, 0x0f, 0x0f, 0x0f, 0xb0, 0xe5,
0x13, 0x27, 0x4e, 0x7c, 0x77, 0xfc, 0xf8, 0x71, 0x4d, 0x92, 0x2c, 0xd9, 0xb2, 0x65, 0x4b, 0x10,
0xd0, 0xa5, 0xbf, 0x41, 0x2e, 0xee, 0xea, 0xea, 0xfa, 0xb0, 0x73, 0xe7, 0xce, 0x70, 0x6c, 0xea,
0xfe, 0xff, 0xff, 0xcf, 0x04, 0x74, 0xd0, 0xc4, 0xfc, 0xfc, 0x7c, 0xb0, 0x83, 0x26, 0x4d, 0x9a,
0xf4, 0x16, 0x08, 0xf8, 0x88, 0xb2, 0x04, 0xa8, 0x99, 0xbd, 0xaf, 0xaf, 0xef, 0x2d, 0x48, 0xe3,
0x84, 0x09, 0x13, 0xde, 0x5c, 0xbd, 0x7a, 0x55, 0x82, 0x90, 0x9e, 0xed, 0xdb, 0xb7, 0x83, 0x1d,
0x66, 0x6e, 0x6e, 0xfe, 0x7f, 0xde, 0xbc, 0x79, 0xc7, 0x88, 0xb2, 0x68, 0xfd, 0xfa, 0xf5, 0xfd,
0x8e, 0x8e, 0x8e, 0xff, 0x73, 0x72, 0x72, 0xfe, 0x1c, 0x38, 0x70, 0xc0, 0x92, 0xd8, 0x50, 0x00,
0xea, 0x9b, 0xe0, 0xec, 0xec, 0xfc, 0x1f, 0xe8, 0xbb, 0xbf, 0x67, 0xcf, 0x9e, 0x25, 0x1c, 0x84,
0x40, 0xdf, 0x3c, 0x04, 0xf9, 0x66, 0xce, 0x9c, 0x39, 0x27, 0x49, 0x09, 0x6e, 0x60, 0x48, 0xb0,
0xb4, 0xb7, 0xb7, 0xbf, 0x33, 0x31, 0x31, 0xf9, 0x0f, 0x4c, 0x1c, 0x1b, 0x09, 0x29, 0x66, 0xad,
0xab, 0xab, 0xfb, 0xe9, 0xe9, 0xe9, 0xf9, 0x1f, 0x98, 0xa4, 0xd3, 0x88, 0xb4, 0x80, 0x09, 0x88,
0x05, 0x41, 0x18, 0x68, 0xc1, 0x01, 0x68, 0x5c, 0xdd, 0x83, 0x89, 0x01, 0x31, 0x1b, 0x36, 0x4d,
0xf2, 0xe9, 0xe9, 0xe9, 0xff, 0x32, 0x33, 0x33, 0xff, 0x01, 0xd9, 0x32, 0xc4, 0xfa, 0x04, 0x98,
0x0a, 0xdf, 0x95, 0x97, 0x97, 0xff, 0x29, 0x2b, 0x2b, 0xfb, 0x0b, 0xb2, 0x28, 0x3c, 0x3c, 0xfc,
0x1f, 0x88, 0x0f, 0x4c, 0x28, 0x3f, 0xde, 0xbf, 0x7f, 0xaf, 0x80, 0x4d, 0x93, 0x62, 0x6a, 0x6a,
0xea, 0xbf, 0xdc, 0xdc, 0x5c, 0x90, 0x45, 0xe2, 0xc4, 0x06, 0x1b, 0x30, 0xe3, 0x6e, 0x07, 0xa5,
0x50, 0x58, 0x5e, 0x83, 0xe1, 0xd9, 0xb3, 0x67, 0x9f, 0xc1, 0xe5, 0x3a, 0x1e, 0xa0, 0x4b, 0x7e,
0x07, 0x05, 0x05, 0xfd, 0x3f, 0x73, 0xe6, 0x8c, 0x37, 0xb1, 0x16, 0xdd, 0xbb, 0x77, 0x4f, 0x1d,
0x98, 0x78, 0xfe, 0x22, 0x5b, 0x92, 0x96, 0x96, 0xf6, 0x17, 0x98, 0xaf, 0xcc, 0x71, 0x6a, 0x02,
0x16, 0x33, 0xaf, 0x40, 0x11, 0xba, 0x78, 0xf1, 0xe2, 0x6d, 0xa4, 0x24, 0x06, 0x60, 0x86, 0xbd,
0x83, 0x6c, 0xd1, 0xf4, 0xe9, 0xd3, 0xaf, 0xe2, 0xd5, 0x00, 0xca, 0xfd, 0xa0, 0xfc, 0x50, 0x5f,
0x5f, 0xff, 0xfd, 0xf1, 0xe3, 0xc7, 0x42, 0xc4, 0x5a, 0x04, 0xcc, 0xd4, 0xa5, 0xee, 0xee, 0xee,
0x60, 0x4b, 0x62, 0x63, 0x63, 0xff, 0x01, 0x13, 0x93, 0x17, 0x5e, 0x0d, 0xcf, 0x9e, 0x3d, 0x13,
0x01, 0x59, 0x02, 0xb2, 0x0c, 0x18, 0xf6, 0x57, 0x40, 0xa9, 0x8a, 0xd8, 0x44, 0x01, 0x2c, 0x6c,
0x3f, 0x83, 0x2c, 0x9a, 0x32, 0x65, 0xca, 0x1d, 0xa2, 0x5c, 0xb7, 0x72, 0xe5, 0xca, 0x36, 0x60,
0x41, 0xfa, 0xcf, 0xc9, 0xc9, 0x09, 0x14, 0x84, 0x57, 0x9f, 0x3c, 0x79, 0x22, 0x4c, 0x6c, 0xa2,
0x08, 0x0b, 0x0b, 0xfb, 0xbf, 0x6b, 0xd7, 0xae, 0x58, 0xa2, 0xc3, 0x7c, 0xf9, 0xf2, 0xe5, 0xab,
0x43, 0x42, 0x42, 0xfe, 0x99, 0x99, 0x99, 0x81, 0x83, 0x11, 0x68, 0xc8, 0x8e, 0x0b, 0x17, 0x2e,
0xf8, 0x00, 0x5d, 0x2e, 0x01, 0xc4, 0xb2, 0xd8, 0xf2, 0xc7, 0xfd, 0xfb, 0xf7, 0x35, 0xf6, 0xef,
0xdf, 0xff, 0x98, 0xe4, 0x12, 0x7c, 0xf5, 0xea, 0xd5, 0x6d, 0xb5, 0xb5, 0xb5, 0x3f, 0x60, 0xd5,
0x42, 0x60, 0x60, 0xe0, 0xff, 0x8c, 0x8c, 0x0c, 0x70, 0x3e, 0x03, 0x96, 0x69, 0x0f, 0x71, 0x04,
0xa1, 0x1c, 0x59, 0xd5, 0xc5, 0xf3, 0xe7, 0xcf, 0x45, 0x97, 0x2d, 0x5b, 0xb6, 0x0e, 0x58, 0x8a,
0xbf, 0xa8, 0xaa, 0xaa, 0xfa, 0x9d, 0x92, 0x92, 0x02, 0xb6, 0x68, 0xc1, 0x82, 0x05, 0xf7, 0x68,
0x56, 0xd3, 0x02, 0x5d, 0xcb, 0x09, 0xca, 0xd4, 0xa0, 0x12, 0x04, 0x88, 0x99, 0x47, 0xdb, 0x1e,
0x74, 0x01, 0x00, 0x27, 0x3b, 0xb2, 0x14, 0x1b, 0x88, 0x5c, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x49,
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE zoom_redraw_xpm[1] = {{ png, sizeof( png ), "zoom_redraw_xpm" }};
Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

+301 -305
View File
@@ -1,315 +1,311 @@
/* XPM */
static char *icon_kicad[] = {
/* columns rows colors chars-per-pixel */
"128 128 181 2 ",
"128 128 177 2 ",
" c #A33E03",
". c #A44006",
"X c #A5430A",
"o c #A64710",
"O c #A74811",
"+ c #A84B15",
"@ c #A94E18",
"# c #AB521F",
"o c #A74912",
"O c #A84A13",
"+ c #A74E1B",
"@ c #A94D19",
"# c #AB521D",
"$ c #876900",
"% c #8A6B00",
"& c #8F7000",
"* c #947300",
"= c #997700",
"- c #9C7A00",
"; c #A27E00",
": c #AC5724",
"> c #AE5827",
", c #AF5D2C",
"< c #B26335",
"1 c #B3673A",
"2 c #B46A3E",
"3 c #B56C41",
"4 c #BA7146",
"5 c #B77148",
"6 c #B9744C",
"7 c #B97751",
"8 c #BC7C56",
"9 c #BD7F5B",
"0 c #A68100",
"q c #AB8500",
"w c #AF8800",
"e c #B38B00",
"r c #B88F00",
"t c #B58F0C",
"y c #BD9200",
"u c #BC950D",
"i c #B79313",
"p c #B5931D",
"a c #BC9618",
"s c #BA9723",
"d c #BB9B2D",
"f c #BC9F38",
"g c #C19600",
"h c #C69900",
"j c #C89B00",
"k c #C39A0A",
"l c #C29B13",
"z c #C39D1C",
"x c #C4A024",
"c c #C8A52B",
"v c #C2A231",
"b c #C7A739",
"n c #9B8A4D",
"m c #BF825E",
"M c #A0925F",
"N c #BBA146",
"B c #BCA24A",
"V c #BFA750",
"C c #BF8563",
"Z c #B8896D",
"A c #A49561",
"S c #A79863",
"D c #AB9B65",
"F c #A3976E",
"G c #B0A067",
"H c #B4A36A",
"J c #B9A76C",
"K c #BCAB6E",
"L c #C0835F",
"P c #C1A440",
"I c #CDAE44",
"U c #C6AA4A",
"Y c #C5AD5A",
"T c #CAB053",
"R c #CFB55E",
"E c #D1B557",
"W c #C18664",
"Q c #C48865",
"! c #C38B6A",
"~ c #C38F72",
"^ c #C49173",
"/ c #C99374",
"( c #C6967A",
") c #C99678",
"_ c #C7997D",
"` c #C9997D",
"' c #C0AE6F",
"] c #C9B366",
"[ c #C4B16D",
"{ c #D4BC6A",
"} c #C1AF70",
"| c #CEB971",
" . c #C9B778",
".. c #D5BF73",
"X. c #D3C07D",
"o. c #A9A187",
"O. c #ADA489",
"+. c #B2AA8E",
"@. c #ABA692",
"#. c #B6AE91",
"$. c #B8AF91",
"%. c #BCB394",
"&. c #B3B3B3",
"*. c #BBBBBB",
"=. c #C79C83",
"-. c #C89F86",
";. c #CCA187",
":. c #CBA38B",
">. c #D2A58B",
",. c #D5A88E",
"<. c #CEBD84",
"1. c #C8BA89",
"2. c #CDA790",
"3. c #CEA994",
"4. c #CDAD9B",
"5. c #D3AB94",
"6. c #D2AF9A",
"7. c #C0B797",
"8. c #C4BB9A",
"9. c #C9BF9E",
"0. c #D3B19D",
"q. c #D3B5A3",
"w. c #D5B8A7",
"e. c #D5BBAB",
"r. c #DABDAC",
"t. c #D5BFB2",
"y. c #D4C48C",
"u. c #CDC093",
"i. c #CAC09F",
"p. c #D1C69E",
"a. c #D7CA9A",
"s. c #CDC3A1",
"d. c #D1C7A3",
"f. c #D4CAA6",
"g. c #DBCFA4",
"h. c #D5CBA9",
"j. c #D9CEA9",
"k. c #DCD1AC",
"l. c #CEC9B4",
"z. c #CCC0B9",
"x. c #D6C1B4",
"c. c #DDC5B6",
"v. c #D5CDB3",
"b. c #DAC6BB",
"n. c #D3CDBC",
"m. c #D9C9BF",
"M. c #DAD1B1",
"N. c #DCD4BC",
"B. c #E0C7B8",
"V. c #E1C8B9",
"C. c #C3C3C3",
"Z. c #CFC6C1",
"A. c #CCCBCB",
"S. c #D1CEC3",
"D. c #DCCCC2",
"F. c #D6D2C4",
"G. c #DED3C6",
"H. c #D3D2CB",
"J. c #DDD4CD",
"K. c #D4D4D4",
"L. c #DCD7D1",
"P. c #DED9D5",
"I. c #DCDCDC",
"U. c #E5CFC2",
"Y. c #E6D0C3",
"T. c #E8D2C5",
"R. c #E2D3CB",
"E. c #E1DCCD",
"W. c #E0D7D1",
"Q. c #E4DBD4",
"!. c #E9DDD5",
"~. c #E3DED9",
"^. c #E6E1DE",
"/. c #ECE2DC",
"(. c #E4E4E4",
"). c #E9E5E3",
"_. c #ECECEC",
"`. c #F2EDEA",
"'. c #F4F4F4",
"]. c #F9F9F9",
"[. c None",
"& c #906F00",
"* c #8F7000",
"= c #8E710B",
"- c #947300",
"; c #997700",
": c #9D7A00",
"> c #93750B",
", c #97780B",
"< c #9C7B0B",
"1 c #A27E00",
"2 c #AC5421",
"3 c #AF5927",
"4 c #AF5B2A",
"5 c #B15E2E",
"6 c #927A24",
"7 c #A86036",
"8 c #AD683F",
"9 c #B26232",
"0 c #B46638",
"q c #B4693D",
"w c #B66E45",
"e c #AF704B",
"r c #B77047",
"t c #B67249",
"y c #B9744C",
"u c #BB7B56",
"i c #BD7E5A",
"p c #B17B5B",
"a c #A68100",
"s c #AB8500",
"d c #AF8800",
"f c #A4820C",
"g c #A9860C",
"h c #AE890C",
"j c #B48B00",
"k c #B88F00",
"l c #B28D0C",
"z c #BC9200",
"x c #B6910D",
"c c #BC950D",
"v c #BD9919",
"b c #B89417",
"n c #978136",
"m c #9A8437",
"M c #9D8738",
"N c #9F8838",
"B c #B99721",
"V c #BC9B25",
"C c #A48C3A",
"Z c #A88F3B",
"A c #AC933C",
"S c #BB9D35",
"D c #B1973D",
"F c #B59A3E",
"G c #B89D3F",
"H c #C19600",
"J c #C69900",
"K c #C89B00",
"L c #C0970D",
"P c #C69D0F",
"I c #C39D19",
"U c #C5A225",
"Y c #C0A02D",
"T c #CBA72D",
"R c #C7A83A",
"E c #C4A435",
"W c #B99E40",
"Q c #BD805C",
"! c #BDA44C",
"~ c #BE8463",
"^ c #B0876F",
"/ c #B58A71",
"( c #A59B77",
") c #C1825E",
"_ c #C4A846",
"` c #C7A943",
"' c #C8AD51",
"] c #C2AA59",
"[ c #CCB35E",
"{ c #D0B350",
"} c #C28460",
"| c #C58967",
" . c #C18A6B",
".. c #C68F70",
"X. c #C59274",
"o. c #C6967B",
"O. c #C99779",
"+. c #CA987B",
"@. c #C6B065",
"#. c #CAB56E",
"$. c #D0B96A",
"%. c #C3B071",
"&. c #C7B67A",
"*. c #CDBA76",
"=. c #D1BE7F",
"-. c #D4BE73",
";. c #B49685",
":. c #B79886",
">. c #BBA89E",
",. c #BBB4AF",
"<. c #B3B3B3",
"1. c #BBBBBB",
"2. c #C69E87",
"3. c #CB9D82",
"4. c #CBA38B",
"5. c #C7B98B",
"6. c #CABA82",
"7. c #CFA790",
"8. c #CDAC99",
"9. c #CDA994",
"0. c #D3AB93",
"q. c #D1AE9A",
"w. c #D3B29E",
"e. c #CFB3A2",
"r. c #C6B6AC",
"t. c #D2B3A1",
"y. c #D4BAAB",
"u. c #DABDAD",
"i. c #D3BDB1",
"p. c #CEC08F",
"a. c #D4C388",
"s. c #CDC29B",
"d. c #D5C795",
"f. c #CEC7AF",
"g. c #D5C9A0",
"h. c #D2C8A8",
"j. c #D9CDA6",
"k. c #D5C2B7",
"l. c #DAC1B2",
"z. c #D6CEB3",
"x. c #D6C3B9",
"c. c #D8C8BE",
"v. c #D5C9B9",
"b. c #D5D0BD",
"n. c #D9D2B8",
"m. c #DCD3B1",
"M. c #C3C3C3",
"N. c #CAC7C6",
"B. c #CBCBCB",
"V. c #DBCBC2",
"C. c #D1CEC3",
"Z. c #DCD4C5",
"A. c #DFD9C6",
"S. c #D5D3CC",
"D. c #DED6CC",
"F. c #D4D4D4",
"G. c #DED6D1",
"H. c #DCD9D4",
"J. c #DCDBDB",
"K. c #E1CCC1",
"L. c #E1D0C6",
"P. c #E4D6CE",
"I. c #E3DECE",
"U. c #E1D9D5",
"Y. c #E2DEDB",
"T. c #EAE2DE",
"R. c #E4E3DE",
"E. c #E4E4E4",
"W. c #EDE6E2",
"Q. c #EBE8E6",
"!. c #EBEBEB",
"~. c #F1E7E1",
"^. c #F1E9E3",
"/. c #F1EBE8",
"(. c #F4F4F4",
"). c #F9F9F9",
"_. c None",
/* pixels */
"[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.[.j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j h j j j j j j j j j j j j j j j j j j j [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j [.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j h j h j j j j j j j j j j j j j [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j [.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.h j j j h j j h j j j j j j j j j j j j j j j j j j j j j j h j j j j j j j j j j h j j j j j j j j j j j j h j h j h j h j h j j h j [.[.[.[.[.[.[.[.[.[.[.[.[.j j j h j j j j j j j j j j j j j j j j j j j h j j h j j j j j j j j [.[.[.[.[.",
"[.[.[.[.[.[.[.h j j h j j h j j j j h h j j h j h j h h h h h j h j h j h h h h h j j h h h h h h h h j h j h h h h h j j j h j h j j h h j h h h j h j [.[.[.[.[.[.[.[.[.[.[.[.j j j j j h j j j j h h j j h j j j j g h h j j j h j h j j j j h h h [.[.[.[.[.",
"[.[.[.[.[.[.h h h h h h h h h h h h h h h h h h h h h h h j h h h j h h h j h h h h h h j h j j h j h h h j h j j h h h h h h h h h h h h h h h h h h h h [.[.[.[.[.[.[.[.[.[.[.g h h j h h h h h h h j h h h h g j j j h h h h h h h j g j g h j h h [.[.[.[.[.",
"[.[.[.[.[.[.h h h h h h h h h h h h h h h h h h h h h h h h h h j j h j h h h h h h h h h h h h h h h h j h j j h h h h j h h j h h h h h h h h h h h h h h [.[.[.[.[.[.[.[.[.[.[.j j g h h h h h h h h j h h h h h g j h h h h h h h h j h j h h h h [.[.[.[.[.",
"[.[.[.[.[.[.h h h h h h h h h j g h h h h h h j h h h h h h h h j y h j h h h h h h h g h h h j h h h h g j g j h h h h g h h j h h h h h h h h h h h h h h h [.[.[.[.[.[.[.[.[.[.g h g h h h h h h g h g h h h h j g h h h h h h h j g j g g h h h h [.[.[.[.[.",
"[.[.[.[.[.h g h g g h g h g E X.X.X.{ X.X.X.{ X.{ X.X.X.........X.....X...X...X...X.X.{ X.X...X.....X.X.....X.X.....X.X.....X.X.........X.I h h g h h g g h g h h [.[.[.[.[.[.[.[.[.[.j h h h h h h h h h h h h g j h h h g h g g h h h h h h h h h h [.[.[.[.[.",
"[.[.[.[.[.g h h h h h g g h M.(.).).(.).(.(.).).).).).(.).).(.(.(._.(.).).).(._.).).).).(.(.).).).).(.(.).).(.(.(.).(.(.).).(.(.).).(.(.(.(.{ h h h g h h g g h h g [.[.[.[.[.[.[.[.[.[.h h y h h g h g h g g h h g h g g h h h h g g h h g g h h g h [.[.[.[.[.",
"[.[.[.[.[.h g g g h h h h h k.).(.(.).(.(._.(._.).(.(.(.(.(.(.(.(.).(.(.(.(.(.(.(.(.(.(.(._.(.(.(.(.(.(.).(.(._.(.(.(.(.).(.).(.(.(.(.(.).(.).y.h g h g g h h g g h h [.[.[.[.[.[.[.[.[.[.j h h h h g h g g h h g h g h h g h g h h h g h h h h g h g [.[.[.[.[.",
"[.[.[.[.[.g h g g g g g g g k.).(.).(.(.(.(.(.(.(.).(._.(.(._.(.(.(.).(.).(.(.(._.(.(.).(.(.(.(.(.(.(._.(.).(.(.(.(.(._.).(.(._.(.(._.(._.(.(.(.g.k h g g g h g h g g g [.[.[.[.[.[.[.[.[.[.y h g g h g g h g g h g g h g h g h g g h g g g g g g g h [.[.[.[.[.",
"[.[.[.[.[.g g g g g g g g g k.(.(.(.).(.(.(.(.(.(.(.(.(.).(.(.(.).).(.(.(.(.(.(.(.(.(.(.).).(.(.(.(.(.(.(.(.(.(.(.(.(.).(.(.(.).(.(.(.(.(.(.(.(.(.N.z g g h g g h y h g g [.[.[.[.[.[.[.[.[.[.h g g g g g h g g g g g g g g g g g g g g g g g g g g g [.[.[.[.[.",
"[.[.[.[.[.h g g g g h g g g k.(.(.(.(.(._.'.'._._.'.'.'.'._.'._._.].'._._.'.'.'.'._._.'._.].'._.`.!.r.r.r.r.).'._.'._.]._.'._.].'.'.'.'.(.(.(.(.).(.E.c g g g g g h g g g g [.[.[.[.[.[.[.[.[.[.g h g g g g g g h g g g g g h g g g g h g g g g g g g [.[.[.[.[.",
"[.[.[.[.[.g g g g g y g g g j.(.(.(.(.(.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].,. . T.].].].].].].].].].].].].]._.(.(.(.(.(.(.^.I y g h g g g g g g g g [.[.[.[.[.[.[.[.[.g g g g g g g g g g g g g g y g g g g g g g g g g g [.[.[.[.[.",
"[.[.[.[.[.g g g g g g g g g j.(.(.(.(.(.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].,. T.].].].].].].].].].].].].].].'.(.(.I.(.(.(.^.R y g y g y g g g y g j [.[.[.[.[.[.[.[.[.[.g g g g g g g g g g g g g g g g g g g g g g g g [.[.[.[.[.",
"[.[.[.[.[.g g g g g y g g g k.(.(.(.(.(.'.].].].].].].].].].].].].].].].].].].].].].].].].].].].].,.. . T.].].].].].].].].].].].].].].].].(.(.(.(.I.(.(.X.g y h y h y g g y y y [.[.[.[.[.[.[.[.[.[.g y g y y y g g g g y g g g g g y g g g g y g [.[.[.[.[.",
"[.[.[.[.[.y y y y g g y y g j.(.(.(.(.(.'.].].].].].].].].].].].].].].].].].].].].].].].].].].].].,. T.].].].].].].].].].].].].].].].].'.(.(.(.(.I.(.(.a.k y y y g y y h j y y [.[.[.[.[.[.[.[.[.[.g g g g g y g y g g g g g y g g g y g g g g [.[.[.[.[.",
"[.[.[.[.[.g y g g y y g g y j.(.(.(.I.I.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].>. T.].].].].].].].].].].].].].].].].].].(.(.I.(.(.(.I.M.l h y y h y y h y y h [.[.[.[.[.[.[.[.[.[.g y g y g y y g y g y g y g y y y g y g g [.[.[.[.[.",
"[.[.[.[.[.y g y y g y y y r j.(.I.(.(.(.'.].].].].].].].].].].].].].].].].].].].].].].].].].].].].,. . X T.].].].].].].].].].].].].].].].].].].'._.(.(.I.(.I.^.E.x y y y y g y y y y y [.[.[.[.[.[.[.[.[.[.g y g y g g y g g g y g y y g g y g y g [.[.[.[.[.",
"[.[.[.[.[.y y g y y g y g y j.I.(.I.(.I.'.].].].].].].].].].].].].].].].].].].].].].].].].].].].].,. Y.].].].].].].].].].].].].].].].].].].].]._.(.I.(.(.(.I.E.b y y y y y y h y y y y [.[.[.[.[.[.[.[.[.g y y y y g y y y y y g y g g y y y y [.[.[.[.[.",
"[.[.[.[.[.y y y y y y y y y j.(.I.(.I.(.].].].].].].].].].].].].].].].].].].].].].].].].].].].].].,. T.].].].].].].].].].].].].].].].].].].].].]._.(.(.I.I.(.(.I.T y y y y y y y y y y y [.[.[.[.[.[.[.[.[.[.y g y y g y g g y y y y y y g y g [.[.[.[.[.",
"[.[.[.[.[.y y y y y y y y y j.I.(.I.(.I.'.].].].].].].].].].].].].].].].].].].].].].].].].].].].].,. Y.].].].].].].].].].].].].].'.].].].].].].].]._.(.I.I.(.I.(.I.| y y y y y y y y y y y [.[.[.[.[.[.[.[.[.[.y y g y y y y y y y y y y y y y [.[.[.[.[.",
"[.[.[.[.[.y y y y y y y y y f.~.I.(.I.I.'.].].].].].].].].].].].].].'.].].].].].].].].].].].].].].,. U.].].].'.].].].].].].].].].].].].].].].].].].].].I.I.I.(.I.I.(.y.u y y y y r y y y y y [.[.[.[.[.[.[.[.[.[.y y y y y y y g y y y y y y y [.[.[.[.[.",
"[.[.[.[.[.y y r y y y y y y f.(.I.I.I.(.].].].].].].].].].].].].].].].].].].].].].].].].].].'.].].>. Y.].].].].].].].].].].].].].].].].].].].].].].].].'.(.(.(.I.I.(.I.h.u y y r y y y y y y y [.[.[.[.[.[.[.[.[.[.y r y y y y y y r y y y y y [.[.[.[.[.",
"[.[.[.[.[.y r y y y r y r y h.I.(.I.I.I.'.].].].].].].].].].].].].].].].].].].].].].].].].].].].].>. U.].].].].].].].].].].].].].].].].].].].].].].].].].].(.I.I.I.I.I.(.N.x y y y r y r y r y r [.[.[.[.[.[.[.[.[.[.y y y y y r y y y y r y y [.[.[.[.[.",
"[.[.[.[.[.y y r r r r r r r f.I.I.I.I.(.'.].].'.'.].'.].].].].].'.].'.].].'.].'.].].].].].].].].].>. Y.].'.].].'.].'.].'.].].].].].].].].].].].'.].].].].].].(.(.I.I.I.I.I.L.v r y y r y r r y y r y [.[.[.[.[.[.[.[.[.y y r y r y y y y y r y [.[.[.[.[.",
"[.[.[.[.[.r y r y r y y r y f.I.(.I.I.I._.].].].].].].].].].].].].].].].].].].].'.].'.].].'.].].].>. U.].].].].].].].].].].].].].'.].'.].].].].].'.].'.].'.].]._.I.(.I.I.I.I.I.U r r y r r y r r y r y [.[.[.[.[.[.[.[.[.[.y y r r y r r r y r [.[.[.[.[.",
"[.[.[.[.[.r r r r r r y r r f.I.I.I.I.I.'.].].].].].].'.].'.].].].].'.].'.].].].].'.].].].].'.].].>. U.].'.].].].].].'.].].].].].].].].].].].].].].].].'.'.].].].'.I.I.I.I.I.I.I.] r r r r r r r r r r r [.[.[.[.[.[.[.[.[.[.r y y r r r y r r [.[.[.[.[.",
"[.[.[.[.[.r r r r r r y r r f.I.I.I.I.I.'.'.'.].'.].'.].].].'.].'.].'.].].].'.].'.].'.].'.].'.].].,. U.].].'.].'.].'.].'.'.].'.'.'.].'.'.'.].'.'.'.].'.'.].].'.'.].'.(.I.I.I.I.I.I.<.r r y r r r r r r y y [.[.[.[.[.[.[.[.[.[.r r r y r y r r [.[.[.[.[.",
"[.[.[.[.[.r r r r r r r r r f.I.I.I.I.I.'.].'.'.'.].].'.].'.'.].'.].].'.].'.'.].].].'.'.].].].'.].,. V.].].].'.].'.].].'.].'.].].].'.].].].'.'.].].'.'.].'.].].'.'.].'.(.I.I.I.I.I.I.p.t r r r r r r r r r r [.[.[.[.[.[.[.[.[.[.r y r r r [.[.[.[.[.[.[.",
"[.[.[.[.[.r r r r r r r r r d.I.I.I.I.I.'.'.].].].'.].].'.].].'.].'.].].'.].].'.].'.].]./.5.5.6.,.7 / 5.,.5.,.`.].].'.].'.].'.].'.].'.].].].].].'.].].].].'.'.].'.].'.].(.I.I.I.I.I.I.v.a r r r r r r r r r r [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.r r r e r r r r r d.I.I.K.I.K.'.].'.].].'.].'.].].].].].'.].'.].'.].].].].].'.V. /.].].].'.].'.].].].'.].].'.].'.].].'.].'.].].].'.].'.].'.'.(.I.I.I.I.I.I.F.x e r e r r e r r r r r [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.r e r r r e e e r d.I.I.I.I.I.'.].'.].].'.'.].'.'.'.'.].'.'.].'.].'.].'.'.].'.V. !.].'.].'.'.].'.'.].'.'.'.'.].'.'.'.].'.].'.'.'.].'.].'.].'.]._.I.K.I.K.I.I.L.N r r e r r e r e r r r [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.r e e e r r r r e s.I.K.I.I.I.'.'.'.'.'.].'.'.].].'.].'.'.].'.].].'.'.'.].].'.V. !.'.'.].'.'.].].'.].'.'.].'.].].'.].'.'.].].'.'.].].'.'.].'.'.'._.I.I.I.I.I.K.K.Y e e e r r e r e e r r [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.r e r r e e e e e s.I.I.I.K.K.'.'.].'.].'.'.].'.'.].'.].'.'.].'.'.].'.].'.'.].V. !.'.].'.].].'.'.].'.].'.'.].'.'.].'.'.].'.'.'.].'.'.].'.'.].].'.].'.I.K.K.K.I.I.I. .r r e r e e r e e e r [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.e r e e e e r e e d.I.K.I.I.K.'.'.'.].].'.].'.].'.].'.'.'.'.'.'.'.'.'.'.'.'.'.V. W r.r.r.r.4 !.].'.].'.].'.'.].'.'.].'.].'.'.'.'.'.].'.'.].'.'.'.'.'.].].'.'.'.'.'.I.I.I.K.I.I.K.u.t e e e r e e e e e e [.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.e e e e e e e e e d.K.I.K.K.I.'.'.'.'.'.'.'.'.'.'.'.'.'.].'.'.].'.].'.'.'.'.].V. >.'.'.].`.Q !.'.'.'.'.].'.'.'.'.'.'.'.'.'.'.].'.].'.'.'.].].'.].'.'.'.'.'.'.].'.'.'.(.K.I.I.K.I.K.h.i e e e e e e r e r r [.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.r e e r e e e e e s.K.K.I.I.K._.'.'.].'.'.].'.'.'.].'.].'.'.].'.'.'.].].'.].'.V. >.'.'.'.'.Q !.'.'.'.'.'.].'.].'.'.].'.].'.'.].'.'.'.'.'.'.'.'.'.].'.].].'.'.].].'.].'.(.K.K.K.K.I.I.n.s e e e e e e e e e e r [.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.e e e e e e e e e s.I.K.I.K.K.'.'.'.'.].'.'.'.'.].'.'.'.'.'.'.].'.'.].'.'.'.'.V. >.'.'.'.].Q !.'.].'.'.'.'.'.'.'.].'.'.'.'.'.'.'.].'.].].'.].'.'.'.'.'.'.'.'.'.'.'.'.'.'._.K.I.I.K.K.K.H.f e e e e e e e e e e e [.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.e e e e e e e e e s.K.K.K.I.I.'.'.'.'.'.'.'.'.'.'.'.'.'.].'.'.'.'.'.'.'.'.'.'.V. >.'.'.'.'.Q !.'.'.'.'.'.'.'.'.'.'.].'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'._.K.K.I.K.I.K.K.V e e e e e e e w e e w [.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.e e e w e w e e e s.K.K.I.K.K.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.V. >.'.'.'.'.Q !.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.].'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.].'.'.'.].'.'._.I.K.K.K.K.K.K.| w e w e w e w e e e e [.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.e e e e e e w w e s.K.K.K.K.K._.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.c. >.'.'.'.'.Q !.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.].'.'.'.'.].'.'.'.'.'.'.'.'.'.'.'.'.'.I.K.K.K.K.K.K.1.t w e w w e w e w w e [.[.[.[.[.[.[.[.",
"[.[.[.[.[.w w w w w w e w e s.K.K.K.K.K.'.'.'.'.'.'.'.'.'.'.'._.'.'.'.'.'.'.'.'.'.'.'.'.V. >.'.'.'.'.Q !.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'._.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.I.K.I.K.K.K.K.s.t w e e w e w w e e e [.[.[.[.[.[.[.",
"[.[.[.[.[.w w w w w w w w w i.K.K.K.K.K._.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.c. ;.'.'.'.'.W Q.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'._.'.'.'.'.'.'.(.K.K.K.K.K.K.l.p w w w w w w w w w e [.[.[.[.[.[.",
"[.[.[.[.[.e w e w w e w w e i.K.K.K.K.K._.'.'.'.'.'.'.'.'._.'.'.'.'.'.'.'.'._.'.'.'.'.'.c. >.'.'.'.'.W !.`.'.'.'.'.'.'.'.'.'._.'.'.'.'.'.'.'.'.'.'.'.'._.'.'.'.'.'.'.'.'.'.'.'._.'.'.'.'.'.'.'.'.(.K.K.K.K.K.K.Z.d w e w w w e w w w e [.[.[.[.[.",
"[.[.[.[.[.w w w w w w w w w s.K.K.K.K.K._.'.'.'._.'.'._.'._.'.'.'.'.'.'.'.'.'.'._.'.'._.c. >.'.'.'.`.W !.'.'.'.'.'.'._.'.'.'.'.'.'.'.'._.'.'._.'.'.'.'.'.'.'.'._.'.'._.'.'.'.'.'.'.'.'.'._.'.'._.'.(.K.K.K.K.K.K.A.N w w w w w w w w w [.[.[.[.[.",
"[.[.[.[.[.w w w w w w w w w 9.K.K.K.A.K._.'._.'.'.'.'.'.'.'.'.'._.'.'._.'._.'.'.'.'.'.'.c. ;.`.'.'.'.W !.'.'._.'.'._.'.'.'._.'.'.'._.'.'.'._.'.'._.'.'._.'._.'.'.'._.'.'.'._.'.'.'.'._.'.'.'.'.'.'.'._.K.H.K.K.K.K.K.B w w w w w w w w [.[.[.[.[.",
"[.[.[.[.[.w w w w w q w q w i.A.K.A.K.A._.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'._.'.'.'.'.c. >.'.'.'.`.Q !._.'.'.'.'._.'.'.'.'.'._.'.'.'.'.'.'.'._.'.'._.'.'.'.'.'.'._.'.'.'.'.'._._._.'.'._.'.'.'.'.'.'._.K.K.K.K.K.K.' w w w w w w w w [.[.[.[.[.",
"[.[.[.[.[.w q w w w w w w w i.K.K.K.K.K._.'.'._.'._._.'.'._.'._.'._.'._._.'.'.'.'._._.'.c. / Q.!.Q.Q.8 Q.'.'._.'.'.'._.'.'._.'.'.'._.'._._.'.'.'.'.'.'.'._.'._.'.'.'._.'.'._.'.'.'.'._.'.'.'.'._._.'._.'.(.K.K.A.A.K.' q w q w q q q w [.[.[.[.[.",
"[.[.[.[.[.q w q w q w w q w 9.K.A.K.K.K._.'.'._.'.'._.'._.'.'.'._.'.'.'._.'._.'.'.'._.'.c. Q.'._._.'._._.'.'.'.'._._._.'.'.'._.'._.'.'._.'._.'.'.'._._._.'.'.'.'._._.'._.'.'._.'.'.'.'._.'.'.(.K.A.K.K.K.K w q q w w w q q [.[.[.[.[.",
"[.[.[.[.[.w q q q q q q q q i.A.A.K.A.K._._.'.'._.'.'.'._.'._.'._.'._.'.'.'._.'._.'.'.'.c. Q.'.'.'.'.'.'.'._._.'.'.'._.'._.'.'.'._.'.'._.'.'.'._.'._.'.'.'._._.'.'.'.'.'.'._.'.'._._.'.'.'._.(.K.K.K.K.A.' w q w q q w q w [.[.[.[.[.",
"[.[.[.[.[.w q q q w q q q w 9.K.K.A.K.A._.'._.'._.'._.'._.'._.'.'._.'._.'._.'._.'.'._.'.c. !.'._.'._._.'._.'.'._._.'.'._._.'.'._.'._._.'._._.'._._.'.'._.'.'._.'.'._._.'.'._.'.'._.'.'.'._.'.(.A.K.A.K.A.K w q q q q q q w [.[.[.[.[.",
"[.[.[.[.[.q q q q q q q q q 9.A.A.K.K.K._.'.'._.'._._.'.'.'.'._._.'.'.'.'._._.'._.'.'._.V. Q.'._._.'.'._.'._._.'.'._._.'.'._._.'._.'.'.'.'.'._.'.'.'._.'._._.'.'._.'.'._._.'.'._.'._._.'.'._.(.K.A.K.A.K.K q q q q q q q q [.[.[.[.[.",
"[.[.[.[.[.q q q q q q q q q 9.K.A.K.A.A._._.'._._.'._.'._._._.'._._._._._.'.'._.'._._._.R.! ! ! ! , O ! ! ! ! Q /._.'.'._._.'._.'.'._._.'.'._._.'.'.'.'._.`.`._._.'.'._._.'._.`.'._._.`._._._._._._._._.'.'._._.'.(.K.A.A.K.A.K q q q q q q q q [.[.[.[.[.",
"[.[.[.[.[.q q q q q q q 0 q 8.A.K.A.A.K._._._.'._._.'._.'._.'._.'.'._.'._.'._.'._.'._.'._._.'._.'.! @ _.'.'._._.'._.'._.'.'._.'._.'._.'._._.'.'._._.`.> + O O + O X X X X X X X . . X r._._._.'._.(.A.A.K.A.K.K q q q q q q q q [.[.[.[.[.",
"[.[.[.[.[.q q 0 0 q q q q q 9.A.A.A.A.A._.'.'._.'._._.'._.'.'._._.'.'._.'._.'._._.'.'._.'._._.'._.! @ '._._.'.'._._.'.'._._._.'._._.'._.'._.'.'._._._.O . . 0.'._.'.'.(.A.A.K.A.A.K q q 0 q q q q q [.[.[.[.[.",
"[.[.[.[.[.q q q 0 q 0 q q 0 9.A.K.A.K.A._._._._.'._.'._._._._.'._._._._._._._._._._._._.'._.'._._.! @ _._._._._._._._._._._.'._._.'._._._._._._.'.'._.O ;._._._.(.K.A.A.A.K.K q q q q 0 q 0 q [.[.[.[.[.",
"[.[.[.[.[.0 q 0 q q q q 0 q 8.A.A.A.K.A._.'._.'._._._._._._.'._._._.'.'.'.'._._.'.'._.'._._._._._.! @ _._._._.'.'.'.'._._.'._.'._.'._._._.'._._._._.'.O ^ _._.(.A.A.A.A.A.K 0 q 0 0 q 0 0 0 [.[.[.[.[.",
"[.[.[.[.[.q 0 q 0 0 0 0 q 0 8.A.A.A.A.A.(._._._._.'.'._.'._._._.'._._._._._._.'._._._._._.'._.'.'.! @ _.'.'._._._._._._.'._._.'._._._.'._.'._._.'._._.O . . X . X X X O O O O + + @ @ + W _.(.A.K.A.A.A.K q 0 0 q 0 0 q q [.[.[.[.[.",
"[.[.[.[.[.0 q 0 q ; q q ; q 8.A.A.A.A.A._._._._._._.'._._._._._._._.'._._._._._._._._.'.'._._._._.! o L L W W L W W L L L C C C W W W W L W W L W W L X . _._._.'._._._.'._._._._.'._._._._.! 6 ~.A.A.A.K.A.J 0 0 0 q 0 0 q 0 [.[.[.[.[.",
"[.[.[.[.[.q ; 0 0 q ; ; q ; 8.A.A.A.A.A._._._._._._._._.'._._._._._._._.'._._._.'._._._._._._._._.! X _._.'._._._._._._.'._._._._._._._._.=. 1 z.A.A.A.A.K 0 0 q 0 0 0 0 0 [.[.[.[.[.",
"[.[.[.[.[.0 ; q ; q ; q ; q 7.A.A.A.A.A.(._._._._._._._._._._._._._._._._._._._._._._._._._._._._.! X . _._._._._._._._._._._._._._._._._.`.Q.# Z A.A.A.A.J 0 0 0 ; q 0 0 0 [.[.[.[.[.",
"[.[.[.[.[.0 q ; q ; q ; q ; 8.A.A.A.A.A._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.! X _._._._._._._._._._._._._._._.'._.U.# ( A.A.C.A.A.J 0 0 0 0 ; 0 0 0 [.[.[.[.[.",
"[.[.[.[.[.; q q ; ; ; q ; ; 9.A.A.A.C.A.(._._._._._._._._._._._._._._._._._._._._._._._._._._.)._.! . . . . X 8 8 9 9 9 W m W W W W W Q ! ! ! ! o q.(.C.A.A.A.A.J ; 0 0 ; q 0 ; 0 [.[.[.[.[.",
"[.[.[.[.[.q ; ; ; q ; ; ; ; 8.Z.A.A.A.A.(._._._._._._._._._._.(._._._._._._._.0.1 < < < 3._._._._.W + ~.Q.Q.Q.Q.Q.~.P.~.Q.Q.Q.Q.Q.Q.Q.Q.~.Q.Q.Q.Q.Q.Q.O + b._.(.A.A.A.C.A.K ; 0 ; 0 0 0 0 0 [.[.[.[.[.",
"[.[.[.[.[.; ; ; q ; ; q ; ; 7.A.C.A.C.A.(._._.(._._._._._._._._._.(._._.)._._.:. ( _.)._._.L o (._.)._._._._._._._._._.(._._._._._._._._.(.(._.O > R._._.I.C.A.C.A.A.J ; ; ; 0 ; ; ; ; [.[.[.[.[.",
"[.[.[.[.[.q ; ; ; ; ; ; ; ; 7.A.A.A.C.A.(._._._._._._._._.(._._._._._._._._._.>. =._._._.~.# ~._._._._._.(._._.(.)._._._.(._._.(._.(._._._._.O < ~._.(._.I.A.A.C.A.C.J ; 0 ; ; 0 ; 0 0 [.[.[.[.[.",
"[.[.[.[.[.; 0 ; ; ; ; ; ; ; 7.C.A.C.C.A.(._._._.(._._._._._._.(._._._._._._._.:. =._.).Q., Q._._.(._._._._._._._._._._._._._._._._._.(._._.+ 6 )._._._.(.I.C.A.A.C.A.J ; ; ; ; ; ; 0 ; [.[.[.[.[.",
"[.[.[.[.[.; ; ; ; ; ; ; ; ; 7.A.C.A.A.C.(._._.(._._._.(._.(._._._.(.(._._.(._.:. =._.R.# 7 _.)._._._.(._.(._.(.(.(._.(.(._.(._._.(._._._.(.c.x.t.t.e.e.w.w.q.q.q.q.q.0.6.6.4.4.3.3.2.2.2.4.).)._.)._._.(.C.C.A.A.C.J ; ; ; ; ; ; ; ; [.[.[.[.[.",
"[.[.[.[.[.; ; ; ; ; ; ; ; ; 7.C.A.A.C.A.(._.(._._.(._._._._.(.(.(.(._._.(._._.:. ( b.@ 3 ^._.)._.(._.(._._._._._._._._._._._.(._._.(.(._._._.(._._.(._.).)._._.)._._.(.)._._.(.(._.)._._.(._._.(._.(._.I.C.C.A.C.A.J ; ; ; ; ; ; ; ; [.[.[.[.[.",
"[.[.[.[.[.; ; ; ; ; ; ; ; ; 7.A.C.C.A.C.(._.(._._.(._.(.(._._._._._._.(._._.(.:. m o 7 ).(._._._.(._._._.(.(._._.(.(._._.(._.(.(._._._.(.(._._.(._._._._._.(._._.(.)._._.)._.(._._._.)._.(._.(._._.(._.(.C.A.C.A.C.H ; ; ; ; ; ; ; ; [.[.[.[.[.",
"[.[.[.[.[.; ; - ; ; ; ; ; ; 7.C.C.C.C.A.(.(._._._._.(._._.(._.(.(._.(._._.(._.:. m _._.(._.(.(._.(._._.(._.(._.(._.(._.(._._._._.(._._._.(._.(._._.(.(._._.(._.(._.(._.(._._.(._.(._._.(.(._._.(.(._.I.C.A.C.C.A.J - ; ; ; ; - ; ; [.[.[.[.[.",
"[.[.[.[.[.; ; ; - ; - ; - - %.C.A.A.C.C.(.(._.(.(._._.(.)._.(._._.(._.).(._.(.:. ^ (.(.(._.)._._._._.(.(._.(._.(._.(._.(._.(._.(.(._.(.(._._.(._.(.(._._.(._._.(._.(._.(._.(._.(.)._.(.(._._._.(._._._.I.C.C.C.C.C.J - ; - - ; ; ; ; [.[.[.[.[.",
"[.[.[.[.[.; - ; ; ; - ; ; - %.A.C.C.C.C.(.~.J.W.W.W.W.W.L.W.W.W.W.W.W.W.W.W.W.=. -._.(._._.(.(._.(.(.(._._.(._.(.(._._.(._.(.(._.(._.(._._.(.(.(.(._._.(.(.(._.(.(._._.(._.(.(._._.(.(._.(._.(.(.(._.(.(.I.C.C.A.C.C.H - ; ; ; ; ; - - [.[.[.[.[.",
"[.[.[.[.[.- ; - - ; - ; - ; %.C.C.C.C.C.(.6 3.).(.(._.(._.(.(._.(._.(.(._.(._._.(.(._.(._.(.(._.(._.(.(._.(._._.(.(._.(._.(.(._.(._.(.(._.(.(.(._._.(._.(._.(._.(._.(.I.C.C.C.A.C.H - - ; - - ; - ; [.[.[.[.[.",
"[.[.[.[.[.- ; ; - - - ; - ; %.C.C.C.C.C.(.6 X q.(._.(.(._.(._.(.(._.(._.(.(._.(.(.(.(.(.(._.(.(._.(.(._.(._.(.(._.(._.(._.(.(._.(._.(._.(.(._.(._._.(.(._._.(.(._._.(.(._.I.C.C.C.C.C.H - ; - - - - ; - [.[.[.[.[.",
"[.[.[.[.[.; - - ; - - ; - - %.C.C.C.C.C.(.6 t.(._.(._._.(.(.(._.(.(._._.(._.(.(._.(._._.(.(._._.(._.(.(._._.(.(._._.(._.(.(._.(._.(.(.(._._.(._.(.(._.(.(.(.(._.(.(._.(.(.I.C.C.C.C.C.H - - - ; - - - - [.[.[.[.[.",
"[.[.[.[.[.- - - - - - - - - %.C.C.C.C.C.(.5 -.(._.(.(._.(._.(._._._.(.(.(.(._.(.(._.(._._._.(.(.(.(._.(.(.(.(.(.(.(._.(._.(._.(.(.(._.(._.(._.(.(.(._.(._.(._._.(.(._.(._.K.C.C.C.C.C.H - ; - - - - ; - [.[.[.[.[.",
"[.[.[.[.[.- - - - - - - - - $.C.C.*.C.C.(.:.C W C C ! C ! Z C C C ! C W C ! W 3 ( (._.(.(.(.(.(.(.(.(.(.(._.(.(._._.(.(.(.(.(.(.(._.(._.(._.(._.(._.(.(.(.(.(.(.(._.(._.(.(.(.(.(._.(.(.(._.(.(.(.(.(.(.(.(.I.C.C.C.C.C.H - - - - - - - - [.[.[.[.[.",
"[.[.[.[.[.- - - - - - - - - $.C.C.*.C.C.(.(.(.(.(._._.(.(.(.(._.(.(.(.(._.(.(.:. C ).(.).(.(._.(._.(._.(._.(.(.(.(.(.(.(.(.(.(.(._._.(.(.(._.(.(.(._.(._.(._.(._.(._.(.(.(._.(.(.(.(.(._.(.(.(._._.(.(._.(.I.C.C.C.*.C.G = - - - = - = - [.[.[.[.[.",
"[.[.[.[.[.- - - - = - - - - $.C.C.C.C.C.(.(._._.(.(.(.(.(._.(._._.(._.(.(.(.(.:. 7 (.(._.(.(.(.(.(.(.(._.(._.(._._.(._._._.(.(.(.(.(._.(.(.(._.(.(.(.(.(.(.(._.(.(.(._.(.(.(._._._.(.(.(.(._.(.(._.(._.(.K.C.*.C.C.C.G - - - - - - - - [.[.[.[.[.",
"[.[.[.[.[.- = = = - = - - - $.C.*.C.C.C.I.(.(.(.(.(.(._.(._.(.(.(.(.(.(._.(.(.:. 4 I.(.(._._.(.(.(.(.(.(.(._.(.(.(.(.(.(.(.(._._.(.(.(.(.(.).(.(.(.(._._.(.(.(._.(.(.(.(.(.(.(._.(._.(.(.(.(.(._.(.(.(.I.C.C.C.*.*.H = = - = - - = - [.[.[.[.[.",
"[.[.[.[.[.= - - = - - - = = $.*.C.C.*.*.(.(.(.(.(._.(.(.(.(.(.(.(.(._.(.(.(.(.2. o < ~.(.(.(.(.(._.(.(.(.(.(.(.(.(.(.(._.(.(.(.(.(.(._.(.(.(.(._.(.(.(.(.(.(.(.(.(.(._.(.(.).(.(.(.(.(.(._.(.(.(.(.(.(.K.C.*.C.C.C.G = = - = - = - - [.[.[.[.[.",
"[.[.[.[.[.= = = = - - - = - $.C.C.C.*.C.(.(.(._.(._.(.(.(.(.(.(.(.(.(.(.(.(.(.:. ! : > J.(.).(.(.(.(.(.(.(.(._.(.(.(.(.(.(._.(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.).(.K.*.C.*.*.C.G = = = = = = - - [.[.[.[.[.",
"[.[.[.[.[.= = = = = = = = = $.*.*.C.C.*.I.(.(.(.(.(.(.(.(.(._.(.(._.(.(.(.).(.:. =.W., : D.(.(.(.(._.(._.(.(.(._.(._.(.(.(.(.(.(.I.: : # : : # : : : # # : # # : # # : # : : # : : # : : # # # # # : # 6 C.*.C.C.*.G = = = = = = = = [.[.[.[.[.",
"[.[.[.[.[.= = = = = = = = = #.C.C.*.*.C.(.(.(.(.(.(.(._.(._.(.(.(.(._.(._.(.(.:. ( ).I.3 , (.(.(._.(.(.(.(.(.(.(._.(.(._.(.(.(.).J. < *.C.*.*.*.D = = = = = = = = [.[.[.[.[.",
"[.[.[.[.[.= = = = = = = = = #.*.*.C.*.*.I.(._.(._.(.(.(.(.(._.(.(._.(.(.(.(.(.-. ( (.(.).6 D.(.(.(._.(.(.(.(.(.(.(.(.(.(.(.(._.).J. X X X X X X X X o X X o X X X X X X X X X X X 2 *.*.C.*.C.G = = = = = = = = [.[.[.[.[.",
"[.[.[.[.[.= = = = = = = = = #.*.*.*.C.C.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.-. ( (.(.(.(.9 (.(.(.(.(.(.(.(.(.(.(.(._.).(.(.(.(.(.L. 1 (.).(.(.(.(.(.(.(.(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.I.C.C.*.C.*.G = = = = = = = = [.[.[.[.[.",
"[.[.[.[.[.= = = = = * = * = #.*.C.*.*.*.I._.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.D.( ( ( =.t.(.(.(.(.D. J.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.L. 1 (.(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.).(.(.(.(.(.K.*.*.*.*.*.G = = * * = = = = [.[.[.[.[.",
"[.[.[.[.[.= = = * = = = = = #.*.*.*.*.*.(.(.(.(.(.(.(.(.(.(._.(.(.(.(.(.(.).(.(.(.(.(.(.).(.(.(.(.t. D.(._.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.W. 1 ).(.x., , , , , , , , -.(.(.(.(.(.m 9 9 8 8 8 9 8 8 8 9 8 9 ^ K.*.*.C.*.*.G * = = = = * = = [.[.[.[.[.",
"[.[.[.[.[.* * * = * * = * * #.*.C.*.*.*.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.t. S.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.J. 1 (.(.e. ! (.(.(.(.).X , K.*.*.*.*.*.D * * = * * = * = [.[.[.[.[.",
"[.[.[.[.[.= * = * = * * * = +.*.*.*.*.*.I.(.(.(.(.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.I.(.t. Z.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.J. 2 I.(.e. ! (.(.(.(.(. , K.*.*.*.*.*.D * = * = * = * = [.[.[.[.[.",
"[.[.[.[.[.= * * * = * = * * +.*.*.*.*.*.I.(.(.(.(.(.I.(.(.(.(.(.(.(.(.I.(.(.(.(.(.(.I.(.(.(.(.(.(.t. D.(.(.(.(.(.(.(.(.(.(.(.(.I.(.(.I.(.(.J. 1 (.(.t., , , , , , , , =.I.(.(.(.(. , K.*.*.*.*.*.D * * * * * = * = [.[.[.[.[.",
"[.[.[.[.[.= * * * * * * * = +.*.*.*.*.*.I.(.(.(.(.(.(.(.(.(.(.(.(.(.I.(.(.(.(.I.(.(.(.(.(.(.(.(.(.t. m.(.(.I.(.(.I.(.(.(.(.(.(.(.(.(.(.(.(.K. 1 (.(.(.(.(.(.(.(.(.I.(.(.(.(.(.(.(.L.I.I.P.P.P.P.L.P.P.L.W.P.I.K.*.*.*.*.*.D * * * * * * * * [.[.[.[.[.",
"[.[.[.[.[.* * * * * * * * * O.*.*.*.*.*.I.(.(.(.(.(.(.(.(.(.(.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.I.(.(.t. m.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.J. 1 (.(.(.(.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.K.*.*.*.*.*.D * * * * * * * * [.[.[.[.[.",
"[.[.[.[.[.* * * * * * * * * O.*.*.*.*.*.P.^.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.I.(.(.(.(.t. m.(.(.I.(.(.(.(.(.(.I.(.(.(.(.I.(.(.(.J. 1 (.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.I.(.(.(.(.(.I.(.(.(.K.&.*.*.*.*.S * * * * * * * * [.[.[.[.[.",
"[.[.[.[.[.* * * * * * * * * O.*.*.*.*.*.I.^.(.(.(.I.(.(.(.(.(.I.(.(.(.(.(.(.(.(.I.(.(.(.(.(.(.(.(.t. m.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.J. 1 (.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.K.*.*.*.&.*.S * * * & * * * * [.[.[.[.[.",
"[.[.[.[.[.* * & * * & * * * O.*.*.*.&.&.I.(.(.(.(.(.(.(.(.(.(.(.I.(.(.I.I.(.(.I.(.(.I.(.(.I.(.(.(.t. m.I.(.(.(.I.I.(.I.(.I.(.(.I.(.(.(.(.(.J. 1 (.(.(.(.(.I.(.I.(.(.(.(.(.I.(.I.(.(.I.(.(.(.(.(.(.I.(.(.(.(.(.K.*.*.&.*.*.A * & * * * * & * [.[.[.[.[.",
"[.[.[.[.[.& * * % * * * & * o.*.&.*.*.*.I.(.(.I.(.I.(.I.(.(.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.7 3 3 3 , 1 3 3 3 3 q.(.(.(.(.(.(.(.(.(.I.(.(.I.J. 1 (.t.-.-.-.-.-.-.-.-.-.2.I.(.(.(.(.(.(.(.I.P.5 3 5 5 5 5 5 3 5 b.&.*.*.*.&.S & * & & * * & * [.[.[.[.[.",
"[.[.[.[.[.* * & * * & * * * O.*.&.*.*.&.I.(.(.(.(.(.(.(.(.(.(.(.I.(.(.I.(.(.I.(.(.(.(.(.(.+ :.(.(.(.(.(.(.(.(.(.(.(.(.(.J. 1 (.~ + (.(.(.(.(.(.(.(.(.J. z.&.*.&.&.*.S * & * & * & & & [.[.[.[.[.",
"[.[.[.[.[.& & & & & * & % * O.*.*.&.*.*.I.(.I.(.I.(.I.(.(.I.I.(.(.(.(.(.(.(.(.(.(.I.(.(.I.+ :.(.I.I.(.I.(.(.I.I.(.(.I.(.J. 1 I.~ + (.(.I.I.(.(.I.(.I.J. z.*.&.*.*.*.A & & & & & & & * [.[.[.[.[.",
"[.[.[.[.[.& & & & & & & & & O.&.&.*.*.&.I.I.I.(.(.(.(.(.(.I.(.(.I.(.(.(.I.(.(.(.I.(.(.I.(.+ 2.(.(.I.(.(.(.(.(.(.(.(.I.I.J. 1 (.~ . + I.I.(.(.(.(.(.(.(.J. z.&.*.&.&.*.S & & & & & & * & [.[.[.[.[.",
"[.[.[.[.[.& & & & & & & & * O.*.&.&.&.&.I.(.(.(.(.I.I.(.(.(.(.I.(.(.I.I.(.I.(.I.I.(.(.I.(.> o o o o o o o o o + o o o 3.I.(.(.(.(.I.I.(.I.I.(.(.(.H. 1 (.=.: : : : : : : : : 1 (.(.(.(.I.I.(.I.I.J. z.*.&.*.&.&.A & & & & & & & & [.[.[.[.[.",
"[.[.[.[.[.& & & & & & & & & O.&.*.*.&.&.I.(.I.I.(.(.(.I.I.I.(.(.I.(.(.(.I.(.(.(.(.(.(.I.I.(.(.(.(.I.(.(.I.(.(.I.I.(.(.(.I.(.(.I.I.(.(.(.(.(.(.I.(.K.# # 7 (.(.I.(.I.I.(.(.(.I.(.(.(.I.I.I.(.(.(.(.(.I.4.4.4.4.4.4.4.4.4.A.&.&.&.*.*.M % & & & & & & & [.[.[.[.[.",
"[.[.[.[.[.& & & & & % & & % O.*.&.&.&.*.I.I.(.(.I.I.(.(.(.(.(.I.(.(.I.(.(.(.I.I.(.I.(.(.(.(.I.(.(.(.I.(.I.(.(.I.I.(.(.I.I.(.(.I.(.(.I.I.(.I.(.(.(.I.I.(.(.I.(.(.(.(.(.(.I.(.I.(.I.(.(.(.(.(.I.I.(.I.(.(.I.(.(.I.I.(.(.I.K.&.*.&.&.&.S % & & & % & & & [.[.[.[.[.",
"[.[.[.[.[.& & % % & & & & % O.&.&.&.&.&.I.(.(.I.(.(.I.(.(.(.(.I.(.I.(.(.(.I.(.(.I.(.I.(.(.I.(.I.I.I.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.I.(.(.I.(.I.(.(.(.I.(.I.(.I.(.I.(.(.I.(.I.(.(.I.(.(.(.(.I.(.(.(.(.I.I.(.(.(.(.(.(.(.(.K.&.&.&.&.&.A % % & & % % & & [.[.[.[.[.",
"[.[.[.[.[.& % & & % % & % & O.&.&.&.*.&.I.I.(.(.(.I.(.(.I.I.(.(.(.I.(.I.(.(.I.(.(.(.I.(.(.I.(.(.(.(.(.I.(.I.I.(.(.I.I.(.(.I.I.(.(.(.I.(.(.(.I.(.I.(.(.(.I.(.(.(.I.(.(.I.(.(.(.I.(.(.I.I.(.(.I.(.I.(.(.(.(.I.I.(.(.I.I.(.A.&.&.*.&.&.S % & & % & & % & [.[.[.[.[.",
"[.[.[.[.[.% & % & & & & & % o.&.&.&.*.&.I.^.(.I.(.(.(.(.I.(.(.I.~.I.(.(.I.(.I.(.I.(.(.I.~.I.(.(.(.I.(.I.(.(.I.~.I.(.(.I.(.I.(.I.I.(.(.I.~.I.(.(.I.(.I.(.(.I.(.I.~.I.(.(.I.(.I.(.I.(.(.I.~.I.(.(.(.I.(.I.(.(.I.~.I.(.(.I.A.&.&.&.&.&.S * % % & % % * & [.[.[.[.[.",
"[.[.[.[.[.& % % % % % % % & o.&.&.&.&.&.A.K.K.K.K.K.K.A.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.A.&.&.&.&.&.A % & % % & % % * [.[.[.[.[.",
"[.[.[.[.[.& % & & % & % % % o.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.M % % & % % % % % [.[.[.[.[.",
"[.[.[.[.[.% & % % % % % % & o.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.M % % % % % % & % [.[.[.[.[.",
"[.[.[.[.[.& % % % % % % % % o.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.M % % % % % % % & [.[.[.[.[.",
"[.[.[.[.[.% % % % % % & % % o.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.&.M % % % % % % % % [.[.[.[.[.",
"[.[.[.[.[.% $ % $ % % % % % F @.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.n % % % % % % % % [.[.[.[.[.",
"[.[.[.[.[.[.% % % % % $ % $ % $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ % $ $ $ $ % % $ % $ % $ $ $ $ $ $ $ $ % $ % $ % $ $ $ % $ % % $ $ $ $ $ $ % % $ $ % % $ $ $ $ $ % $ $ $ $ % % $ % $ % $ $ $ $ $ $ $ $ % $ % $ % $ $ $ % $ % % % % % % % % % % % % & [.[.[.[.[.",
"[.[.[.[.[.[.% % % $ $ % $ $ % % $ % % $ $ $ % $ $ % % $ $ $ % $ % $ $ $ % $ % $ % % $ % % $ $ $ $ $ $ % $ $ $ % % $ $ $ % $ % $ % % $ % % $ $ $ $ $ $ $ % $ $ % % $ $ $ % $ % $ % % $ % $ % $ $ $ % $ % $ $ $ % % $ $ $ % $ % $ $ % % $ $ % % $ % $ $ [.[.[.[.[.",
"[.[.[.[.[.[.% $ $ % % $ $ % $ $ $ $ $ $ % % $ % $ $ $ % % $ $ % $ % % $ $ % $ $ $ $ $ $ $ $ % % $ $ % $ $ % $ $ $ % % $ $ % $ $ $ $ $ $ $ $ % % $ % % $ $ % $ $ $ % % $ $ % $ $ $ $ $ $ $ $ % % $ $ $ $ $ % $ $ $ % % $ $ % $ $ $ $ $ % $ $ $ % $ $ % [.[.[.[.[.",
"[.[.[.[.[.[.[.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.",
"[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[.[."
"_._._._._._.K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K _._._._._._._._._._._._._._._._._._._._._.K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K _._._.",
"_._._._.K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K J K K K K K K K K K K K K K K J K K K K K K K K K K J K K K _._._._._._._._._._._._._._._._._.K K K K K K K K K K K K K J K K K K K K K K K K K K K K K K K K K K K K _.",
"_._._.J J K J K K K K J K K K J K K K K K J K K K K K K K K K K K K K K K K K K K K K K K K K K J J K J J K K K K K K K K J K K K J J K K K J J K K K _._._._._._._._._._._._._._._.K K K K K K K K K K J K K J K K K K K K K K K K K K K J K K K K J K K K K _.",
"_._.J K K J K J J K J K J J J K J J J K J K J K K J J J J K J K J J J J K J J K J J J J K J J J K K J K K J K J J J J J J K K J J K K J J J J J K K J K _._._._._._._._._._._._._._.J J J K J J K H K K K K J K K J J J K K J J J J J K J K J K K J K J K K K K ",
"_.J J J J J J K J J J J J J J J K J J J K J J J J J J J J J J J J J K J K J H K K J K J J K J J J J K J J J J K J J K J J J J K J J J J K J J J J J J J J J _._._._._._._._._._._._.J J J K J J J J J J J J J J J K J K J J J J J K K K z K J J J J J J J J J K ",
"_.J J J J J J J J J J K J J J J J J J J J J J J J J J J J J J J J J J J J J K J J J J J J J J J J J J J J J J J J J J J J J J K J J J K J J J J J J J J J K J _._._._._._._._._._._.K J J J K J J J K J J J K J J J J J J J J J K z K K K K J K K K J K J J J J ",
"_.J J J J J J J J J J J J J H J J J J J J J J J J J K J J J J J K J J K H J J J H K J J J J J J J J J J J J J J K J J J J J K H J J J J J J J J J J J J J J J J _._._._._._._._._._._.J J K J J J J H J J J J J J J J J J J J J K K K K J J z J z K J J J J J J ",
"J J J H J J J J J J P P P P P I P P P P P P P P P P P P P P P P P P P P P P I P P P P P P P P P P P P P P P P P P P P P P P P I P P P P P P J J J J H J J J J J K _._._._._._._._._._._.J H H K J J J J J J J H K z J J J J J J K z K z J J K K J K J K z J J J ",
"H J H J H J H H J P E.E.!.E.E.E.E.!.E.!.!.E.!.Q.!.Q.E.E.!.!.E.E.Q.E.E.E.E.!.!.E.E.!.E.!.!.E.!.Q.Q.!.E.E.E.!.E.!.E.!.E.E.E.E.!.E.!.E.!.E.E.U.T H J H H J H H J J J H _._._._._._._._._._._.H H J J J J J J H J J H J H J J J H J J K J J J J z J z K J J z J z K ",
"H J J H J J J J J P E.E.E.E.!.E.E.E.E.E.E.E.E.E.E.E.E.!.E.E.E.E.E.Q.E.!.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.Q.E.E.E.E.E.!.E.!.E.E.E.E.E.E.E.E.Q.E.{ J J J J J J J H H K K H _._._._._._._._._._.J J z J J H H J H J J H H J J J J H J z J K z J K J J J K z K J J J ",
"J H H J J H H J H P Q.E.E.Q.E.E.E.Q.Q.E.E.E.E.E.E.Q.E.E.E.E.!.E.E.Q.E.E.E.E.!.E.E.Q.Q.E.E.E.E.E.E.E.!.E.Q.E.E.Q.E.E.E.E.E.E.Q.E.E.E.E.!.E.!.E.E.-.J H H H H H H H H H J J _._._._._._._._._._.J J J z J H J J J H J J H J z J J z K J z K z z K z K J J z J z K ",
"H J H H H H J H H P E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.!.E.E.Q.E.E.Q.E.E.E.E.E.E.E.E.E.d.P H H J H H J H H H H H _._._._._._._._._._._.z J J J J z H H H J H J J z J K z J z J K J K K z z K K J z J ",
"H H H H H H H H H P E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.Q.E.E.E.E.E.E.E.E.E.E.E.Q.E.E.E.E.E.E.E.E.E.E.Q.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.Q.m.P J H H H H H H H H H H _._._._._._._._._._._.J H H H J H H J H J z J J z z z J z K z K z J z z K z z J z ",
"H H H H H H H H H L E.E.E.E.E.R.(.(.(.).).).).).).(.).).).).).(.).).).).).(.).).).(.(.).).).).).+...| | | !.).).(.).).).(.).).).).).(.(.E.E.E.!.E.E.E.A.U H H H H H H H H H H H _._._._._._._._._._._.H H H H H J z H H H H H J J J J J z K z J z J J z J J J J ",
"H H H H H H H H H P E.E.E.E.E.R.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 ~.).).).).).).).).).).).).).).(.Q.E.E.E.E.E.E.Y.` H H H H H H H H H H H H _._._._._._._._._._.H z H H z J z J H z J z z J z J J z J z J z z J z J z J ",
"H H z H H H z H H L E.E.E.E.E.E.(.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 ^.).).).).).).).).).).).).).).).(.E.E.E.E.E.E.E.R.$.H H z H H z H H H z H H _._._._._._._._._._.J H H J z J z H H z J J z J z z J z J z J J z J z J z ",
"z H H H H H z H H c E.E.E.J.E.E.(.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 . ~.).).).).).).).).).).).).).).).).).!.E.E.E.E.E.E.J.p.z H H z H H H z z H H H _._._._._._._._._._._.H H z H z H H H H z z z J J z H H H z z H H H H H ",
"z H z z z z H H z c E.E.E.E.E.J.(.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 . /.).).).).).).).).).).).).).).).).).).!.R.E.J.J.E.E.E.j.L z z z H z H H z z H z _._._._._._._._._._._.H H H H H z H z z J J z z H H z z J H H H z H z ",
"H z H H H z H z H L E.J.E.J.E.E.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 . ~.).).).).).).).).).).).).).).).).).).).(.E.E.E.E.E.E.E.Z.U z z H H z H H z H H H _._._._._._._._._._._.z z H z z H H z z z z z H z z z H z z z H z H ",
"z H z z H z z H z L E.J.E.E.E.J.(.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 . ~.).).).).).).).).).).).).).).).).).).).).(.E.E.J.J.E.R.E.H.R z z H z z z H z z z z z _._._._._._._._._._.H H z H z H J z J z H z H J H z H H H z H z ",
"z H z z z H z z z L E.R.E.J.E.E.(.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 . ~.).).).).).).).).).).).).).).).).).).).).).).E.J.J.R.E.J.E.J.[ z z H H z z H z z z z H _._._._._._._._._._.z H z z z z z z J z z z z z z z H z z z H ",
"z z z z z z z z z L J.R.J.E.E.J.(.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 . ~.).).).).).).).).).).).).).).).).).).).).).).).!.E.E.J.E.J.E.E.=.z z z z z z z z z z z z _._._._._._._._._._._.z H z z z z z z z H z z H z z z H z z ",
"z z H z z z z z z c E.J.E.J.E.J.(.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 ~.).).).).).).).).).).).).).).).).).).(.).).).).).Q.J.E.J.E.J.R.R.g.L z z z z z z z z z z z _._._._._._._._._._._.z z z z J z z z z z z H H z z z z z ",
"z z z z z z z z z c E.J.J.E.J.E.!.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 . /.).).).).).).).).).).).).).).).).).).).).).).).).).Q.J.E.J.R.J.J.E.n.I z z z z z z z z z z z _._._._._._._._._._._.z z z z z z z H z z z z z z z z H ",
"z z z z z z z z z c J.J.E.J.J.J.Q.).).).).).).).).).).).).).).).).).(.).).).).).).).).).).(.).).3 ~.).).).).).).).).).).).).).).).).).).).).).).).).).).(.E.J.J.J.E.J.J.F.E z z z z z z z z z z z z _._._._._._._._._._.z z z z z z z z z z z z z z z z ",
"z z z k z k k z z c E.J.E.J.E.J.!.).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).2 ~.).).).).).).).).).).).).).).).).).).).).).).).).).).).(.E.E.J.E.J.E.J.J.' z z z z z z z z z k z z _._._._._._._._._._.z z z z z z z z z z z z k z z ",
"z z k z k z z z z c J.R.J.J.J.J.(.(.).).(.).).).).).).).).).).).).).).).).).).).).).).(.).).).).2 ~.).).).(.).).).).).).).).).).(.).).(.).).(.).).).).).).).(.E.J.J.E.J.J.J.J.*.z z z z k k z z z k z z _._._._._._._._._._.z z k z k z z z z z z z k z ",
"k z k z z z k k z c J.J.J.J.E.J.(.).).(.).).(.).).).).).).(.).).).).(.).).(.).(.).(.).).(.).).).3 ~.).).).).(.).(.).).(.).).).).).).).).).).(.).(.).).(.).(.).).!.J.J.J.R.R.J.J.p.x k z k z k k k z k k z _._._._._._._._._._._.z k z z z z z k k k z z ",
"k z k z k z k z k c J.J.J.J.J.J.!.).).).).).(.).).).(.).(.).).(.(.).).(.).(.).).).(.).).).(.).(.# ~.(.).(.).).).).).).).).).).).).(.).).(.).).).(.).).).).(.).).).!.J.J.J.J.J.J.J.n.v z k k k k k k k z z k _._._._._._._._._._._.z k k z k z k k z k k ",
"z k k k k k k k z c J.J.R.J.J.J.(.(.).(.).).).).(.).).).).).).).).).).).).).).).).).(.).).).).).2 ~.(.).).).).(.).(.).).).).(.).).).(.).).).).).).).).).).).).(.(.).(.J.J.J.J.J.J.J.S.Y k k z k z k k k k k z k _._._._._._._._._._.k z k k k k z k z _.",
"k k k k k k k k k x J.J.J.J.J.J.!.).).(.).(.(.).).(.(.).).(.(.).(.).).(.(.).).(.(.).).(.).(.).(.2 ~.).(.(.).).(.(.).).(.(.(.).).(.(.).).(.).).(.(.).).(.(.(.).).).).(.(.E.J.J.J.J.J.J.H._ k k k k k k k k k k k k _._._._._._._._._._.z k z k z k z k _.",
"k k k k k k k k k x J.J.J.J.J.J.!.).(.).(.).).(.).).).(.).).).(.).(.).).(.).(.).).(.).).).(.).).2 ~.).).).).(.).).(.(.).).).(.).).).(.).).(.(.).).(.(.).).).(.).).(.).).(.E.J.J.J.J.J.J.J.#.k k k k k k k k k k k z _._._._._._._._._._._.k k k k _._._.",
"j j k k k k j k j x J.J.J.J.J.J.!.).).).(.).(.).(.(.).(.).(.).).(.(.).(.).(.).).).(./.9 9 9 9 9 X 5 9 9 9 9 u.).).).(.).).).(.).(.).).(.(.).).(.(.).).(.(.).).(.).(.).).(.).!.J.J.J.J.J.J.J.p.c k k k j k k j k j k k _._._._._._._._._._._._._._._._._.",
"k k j k k k k k k c J.J.F.J.J.F.!.).(.).).(.).).).).).).(.).).(.).).).).(.).).(.(.).^. 0.).(.).).(.(.(.).).).).(.).).(.).).).).(.).).).(.).).).(.(.).).(.!.J.J.J.F.J.J.F.h.b k k k j k k k j k k k _._._._._._._._._._._._._._._._.",
"k j k j k j k j j x J.F.J.F.J.J.(.(.).(.(.).(.(.(.(.(.(.(.).).(.).(.(.(.(.).).(.).).Q. 0.).).(.).(.(.).).(.(.).(.).(.).).(.(.).(.).(.(.(.).(.(.(.).(.(.(.(.!.J.J.J.F.J.F.J.n.V j k k k k k k j k j k j _._._._._._._._._._._._._._.",
"j k j k j k j k k x J.J.J.J.J.F.!.(.(.).).(.(.).).).(.).(.).(.).(.).(.).(.).(.).(.(.Q. 0.).(.).(.(.).(.(.).(.(.(.).).(.(.).(.(.(.).(.).(.).(.).).(.(.).).(.(.(.J.J.J.J.J.J.H.S.! j j k j j k k j k j k k _._._._._._._._._._._._._.",
"j k j k j j k j j x J.J.F.J.J.J.(.(.(.(.(.).).(.(.).(.).(.).).(.(.).(.).(.).).(.).(.^. 0.).).).(.).(.).(.).(.).(.(.(.).(.).(.).(.(.).).(.).).(.).).).).(.).).(.(.R.J.J.F.J.J.J.F.@.j k j k j j j k k j j k _._._._._._._._._._._._.",
"j j j k j k j k j x F.F.J.F.J.F.!.(.(.).(.(.(.(.(.(.).(.(.(.(.(.(.(.).(.(.(.(.(.).(.^. o L.K.K.L.L.y 0.(.(.(.).(.(.(.(.(.(.).(.).(.(.(.(.(.).(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.).(.E.F.J.J.F.J.F.J.6.j j j j k j j j j j j k _._._._._._._._._._._.",
"k j j j j j j j j x J.J.F.J.F.J.!.(.(.(.).(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.~. O (.).(.(.(.) 0.).(.(.(.(.(.(.).(.(.(.(.(.(.).(.).(.(.(.).).(.(.(.).(.).(.).(.(.(.).(.).(.(.!.J.F.J.J.J.F.J.s.x j j j j j j j k j j j _._._._._._._._._._.",
"j j j j j j j j j x F.J.F.J.F.F.!.).(.).(.(.(.(.).(.).(.(.).(.).).(.).(.(.).(.).).(.~. O (.(.).(.).) 0.).).(.).(.(.).(.(.(.).(.).(.(.(.(.).(.(.(.(.(.(.).(.(.(.(.(.(.(.).(.(.(.(.(.(.!.J.F.F.F.J.F.F.b.B k j j j j j j j j j j j _._._._._._._._.",
"j j d j j j j j j x J.F.J.J.F.J.!.(.(.(.(.(.(.).(.).(.(.(.).(.(.).(.(.(.(.(.(.(.(.(.~. O ).(.(.(.).Q 0.(.(.).(.(.).(.(.(.).(.(.(.(.(.(.(.).(.(.(.(.(.).(.(.).(.(.(.(.(.).(.(.).(.(.(.(.(.J.J.F.F.J.J.F.S.G j j j j j j d j d j j j _._._._._._._.",
"j j j j d j j j j x F.F.F.F.F.F.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.W. O (.(.(.(.(.) . 0.(.(.(.(.).(.(.(.).(.(.(.(.(.(.(.(.(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.R.F.J.F.F.F.F.J.! j j j j j j j j j j j j _._._._._._.",
"d j j j j j j d d x F.J.F.J.J.F.!.(.(.(.(.(.).(.(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.~. O (.(.).(.(.) 0.).(.(.(.(.(.(.(.(.(.(.).(.(.(.(.(.(.(.(.(.).(.(.(.(.).(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.E.F.F.J.J.F.J.F.&.j d j j j j d d j j j d _._._._._.",
"d j d j j d j j j x F.F.F.F.F.F.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.W. O (.(.(.(.(.) 0.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.).(.(.(.(.(.(.(.(.(.(.E.F.F.F.F.F.F.F.s.l d d j d j j d d j d j _._._._.",
"j j d d j d j d d l F.F.F.J.F.F.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.T. O (.(.(.(.(.) 0.).!.(.(.(.(.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.!.(.(.(.(.(.(.(.(.(.!.(.(.(.(.(.(.(.(.(.(.!.J.F.F.F.F.J.F.f.b d d d d j j d j j d j _._._.",
"d d d j d j d d d x F.F.F.F.F.F.!.(.(.(.!.(.(.(.(.(.(.(.(.(.!.(.(.(.(.(.(.(.(.(.(.(.W. O (.(.!.(.(.Q 0.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.!.J.F.F.F.F.F.F.C.S j j d d d d d d j d d _._.",
"d j d d d d d j j l F.F.F.F.F.F.E.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.W. O (.(.(.(.(.) 0.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.!.(.(.(.!.J.F.F.F.F.F.F.F.! d d d d d j d d d j j _.",
"d d d d d d d d d h F.F.F.F.F.F.!.(.!.(.(.(.(.(.!.(.(.(.(.(.!.(.(.(.(.(.(.(.!.(.(.(.W. o (.(.!.(.(.) 0.(.(.(.(.!.(.(.(.(.!.(.(.(.(.(.!.(.(.(.(.(.!.(.(.(.(.(.!.(.(.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.E.F.F.F.F.F.F.F.%.j d d d d d d d d d _.",
"d d d d d d d d d l F.F.F.F.F.F.E.(.(.(.!.(.(.(.(.!.(.(.!.(.(.(.(.(.(.(.(.(.(.(.(.(.T. o (.(.(.!.(.Q 0.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.!.(.(.(.!.(.!.(.(.!.(.(.(.(.!.(.(.!.(.(.(.(.!.(.(.!.!.(.(.!.(.(.(.(.(.E.F.F.F.F.F.F.B.5.j d d d d d d d d d ",
"s d d s d d d d s l F.F.F.B.F.F.E.(.(.(.(.(.(.!.(.(.(.(.(.(.(.(.(.!.!.(.(.!.(.(.(.(.T. . o (.(.(.(.(.) 0.(.(.(.(.(.!.(.(.!.(.!.(.!.!.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.!.(.(.(.(.(.(.(.(.(.(.!.(.(.(.(.!.F.F.F.F.F.F.F.W d s d d s d s d d ",
"d d d d d d s d d h F.F.F.F.F.F.E.(.!.!.(.!.(.!.!.(.(.(.(.(.!.!.(.(.(.(.!.(.!.(.(.!.T. o (.!.(.(.(.) 0.(.!.!.(.!.(.!.(.(.(.(.(.!.(.(.(.(.(.(.!.(.(.(.!.(.!.!.(.(.(.(.(.!.(.!.(.(.(.(.(.(.(.!.(.(.!.(.(.!.!.(.!.Q.F.B.B.F.F.F.F d d d d d d d d s ",
"s d s d s s d s d g F.B.F.B.F.B.Q.(.(.(.(.(.(.(.(.(.!.!.!.(.(.(.!.(.!.(.(.(.(.!.(.(.T. . ) ) ) } ) 3 0.(.(.(.(.(.(.(.(.!.(.!.(.(.(.!.!.(.!.(.!.(.!.(.(.(.(.(.(.!.!.!.(.(.(.!.(.!.(.!.!.(.(.(.!.(.!.(.(.(.!.(.(.(.F.F.F.F.F.F.W s d s s d s s d d ",
"s d d s d d s d d h F.F.F.F.B.F.E.(.(.(.!.(.(.(.(.(.!.(.!.(.(.(.!.(.!.(.(.(.!.(.!.(.T. 0.!.!.(.!.(.!.(.(.(.(.!.!.(.(.(.(.(.(.(.(.!.(.!.(.!.(./.!.(.(.(.(.(.!.(.(.(.(.(.!.(.!.(.(.(.(.!.(.(.(.!.(.!.F.B.F.F.F.B.W s s s d s d d s s ",
"d s s d s s s s d h B.F.B.B.F.F.Q.(.!.!.(.!.(.!.!.(.(.(.(.(.!.(.(.(.(.(.!.(.(.(.(.(.T. 0.(.(.(.(.(.!.(.!.(.(.(.(.(.!.(.!.!.(.!.(.(.(.!.(.(.(.(.(.(.!.(.!.(.!.(.!.(.!.(.(.(.(.(.!.(.(.(.(.!.(.(.(.!.F.F.B.F.F.F.W d d d s d s s s d ",
"s s s s s s s d s h B.F.F.B.F.B.E.!.(.(.(.!.!.(.!.(.(.!.(.!.(.!.!.(.(.!.!.(.!.(.(.!.T. 0.!.!.(.(.!.(.(.!.(.!.(.!.!.(.!.(.(.(.!.!.(.(.(.(.!.!.(.(.!.(.!.(.(.(.(.!.(.!.(.!.(.(.!.!.(.(.!.(.!.(.!.!.(.B.F.B.F.B.F.W s s s s s s s s s ",
"s s s s s s s s s g F.F.B.F.B.F.Q.(.!.(.!.(.(.!.(.!.(.(.!.(.!.(.!.(.!.(.(.!.(.!./.(.T. . 0.(.!.(.!.(.!.(.(.!.(.!.(.(.!.(.!.(.!.(.(.!.!.(.!.(.(.!.(.(.!.(.(.!.!.(.(.!.(.!.(.!.(.!.(.!.(.(.!.(.!.(.(.!.F.B.F.B.F.B.D s s s s s s s s s ",
"s s s s s s s s s h B.F.F.B.F.F.E.!.(.!.!.(.!.(.!.!.(.!.(.!.(.!.(.(.!.(.!.(.!.!.(.!.Q.7.7.0.7.7. 2 4.0.7.7.7.L.(.(.!.!.(.(.!.!.(.!.(.!.(.(.!.(.!.(.(.!.P.P.P.P.P.P.P.K.K.K.K.K.K.K.K.K.K.K.V.l.u.l.u.l.l.P.(.!.!.(.!.(.!.B.B.F.B.B.B.W s s s s s 1 s s s ",
"s s 1 s s s s s a g F.B.B.F.B.B.E.(.(.!.(.!.(.!.!.(.!.(.!.(.!.(.!.!.(.!.(.!.(.!.!.(.!.(.!.!.(.!. 0 (.(.!.(.!.(.!.!.(.(.!.!.(.!.!.!.!.(.!.!.(.!.(.!.!.T. o u.!.(.!.(.!.(.F.F.B.F.F.B.W s s s s s s s s s ",
"s s s s s a s s s h B.B.B.B.F.B.E.!.!.(.!.(.!.(.!.(.(.!.(.!.!.(.(.!.!.(.!.(.(.!.!.(.(.!.!.(.(.!. 0 !.!.(.(.!.!.(.(.!.!.(.(.!.!.(.(.!.!.(.(.(.!.!.(.!.T. 0.!.(.(.!.!.B.B.B.B.B.B.W 1 1 s s s s s s 1 ",
"s 1 s s s a s a s g B.F.F.B.B.B.E.(.!.!.!.(.!.!.!.!.(.!.!.!.(.!.!.(.!.!.(.!.!.!.!.!.!.(.(.!.!.(. 0 (.!.!.!.(.!.!.!.!.(.!.(.!.(.!.!.(.(.!.!.!.!.(.!.(.T. +.!.!.!.!.B.F.F.B.B.F.W a s s 1 s 1 s s s ",
"s 1 s s a s s s s g F.B.B.B.F.B.E.(.!.!.(.!.!.(.(.!.!.(.!.!.(.!.!.!.(.!.!.(.!.(.(.!.(.!.!.(.!.!. 0 !.!.(.!.(.!.(.!.!.(.!.!.!.!.(.!.(.!.!.!.(.(.!.!.!.T. ) Q.!.!.B.F.B.B.B.B.W a a s a s s s s a ",
"s s a s s a a s 1 g B.B.B.B.B.B.E.!.(.!.(.!.!.(.(.!.!.(.!.(.!.!.!.(.!.!.!.!.!.(.(.!.!.(.!.!.(.!. 0 !.!.(.!.!.!.(.!.(.!./.!.(.!.!.!.(.!.(.!.!.!.!.(.!.T. y Q.!.B.B.B.B.B.B.W : a a s a 1 s 1 s ",
"a a a a a a s a s g B.B.B.B.B.B.E.!.!.!.!.!.(.!.!.!.(.!.!.!.!.(.!.!.!.(.(.!.!.!.!.(.!.!.!.!.!.!. # .............. ................................... . l.~.Y.Y.Y.W.Y.Y.Y.T.T.Y.Q.!.!.!.!./.L.2 0 Y.B.B.B.B.B.B.W a s a s a 1 s s 1 ",
"a a s a a a a a a g B.B.F.B.B.B.E.!.!.(.!.!.!.!.!.!.!.!.!.(.!.!.!.(.!.!.!.!.(.!.!.!.!.!.(.!.!.(. . . K.!.!.(.!./.!.!.!.!.(.!.!.(.!.(.!.!.(.Y.5 2 r.B.F.B.B.B.W s a a a a s 1 s s ",
"s a a a a a a a f f B.B.B.B.B.B.E.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!. K.!.!.!.!.!.!.!.(.!.!.!.!.!.(.!.!.!./.!.V.X 2 N.B.B.B.B.A a a a a a a a a a ",
"1 a a a a a a a s < B.B.B.B.B.B.E.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.(.!.!.!. V.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.K.2 2 r.B.B.B.B.B.W a a a a a a a a a ",
"a 1 a a a 1 a a 1 g B.B.M.B.B.B.E.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!. X.7.7.7.7.7.0.7.q.t.w.w.t.w.w.w.t.u.7.X 0 Y.B.B.N.B.B.B.A a a a a a a a a a ",
"a a 1 a a a a 1 1 f M.B.B.B.M.B.E.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.y.O.3.+.3.i.!.!.Q.!.!. 2 3.3.3.3.3.3.3.3.3.3.2.3.3.3.3.3.3.3.2.3.3.3.3.3.3.O. u Q.Q.N.B.N.B.B.M.W a : a a a 1 a 1 a ",
"a a 1 a a a a a a g B.N.B.B.B.B.E.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.u .!.!.!.!.!. 9 !.!.!.Q.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.Y. / !.!.!.B.B.B.B.N.N.A a a a a a a a 1 a ",
"1 a a 1 1 1 1 a 1 g B.B.M.B.M.B.E.E.!.!.!.!.E.!.!.!.!.!.!.E.!.!.!.!.!.!.!.i .!.!.!.Q.J. E.!.!.!.Q.!.!.!.!.!.!.!.!.E.!.!.!.!.!.!.!.!.Q.Q.Q.Y. X q.!.!.!.E.B.N.B.M.B.N.A a 1 1 1 a 1 a a 1 ",
"a a 1 a a a 1 a 1 f M.B.M.B.M.B.E.!.E.!.!.!.!.!.!.!.!.!.!.!.!.!.!.Q.!.!.!.u | !.Q.!.P.5 D.!.!.!.!.Q.!.!.E.!.!.!.!.Q.!.!.!.!.!.E.!.!.!.!.!.Y. O i.!.!.Q.!.!.M.B.B.B.N.B.W a a 1 a 1 1 a 1 a ",
"1 1 1 1 1 1 1 1 1 f M.N.B.M.B.B.E.E.!.!.!.E.!.!.E.!.E.!.!.!.E.!.E.Q.Q.!.Q.u | !.Q.V.# O E.E.!.E.!.E.!.!.!.E.!.!.Q.Q.!.E.!.!.E.!.!.Q.Q.Q.!.Y.9 9 9 9 7 2 2 2 3 2 2 2 2 2 @ O O O O o O O o X 4 G.Q.!.!.Q.E.!.B.M.M.B.B.M.C < 1 1 1 1 1 1 a : ",
"1 1 1 1 1 1 1 1 1 g B.N.M.N.B.M.J.E.!.!.!.!.E.!.E.!.!.!.!.E.!.E.!.!.!.!.!.u | Q.i.o o y.Q.Q.!.!.!.!.!.E.!.E.!.!.E.E.!.!.!.!.E.E.!.!.!.!.!.E.!.!.E.!.!.!.!.!.E.E.!.!.!.!.E.!.E.Q.!.Q.!.!.!.!.!.E.!.E.!.E.!.!.E.B.B.B.B.N.B.A a 1 1 1 1 1 1 1 1 ",
"1 1 1 1 1 1 1 a 1 g N.N.M.N.M.M.E.!.E.!.E.!.!.!.!.!.!.E.!.!.!.!.E.!.E.!.E.i .w. @ i.!.Q.!.E.E.!.E.!.!.!.!.!.!.!.!.!.!.E.!.!.E.!.E.!.E.!.!.!.!.!.!.E.!.E.!.!.!.!.E.!.!.!.!.!.Q.!.!.E.E.!.E.!.!.!.E.!.!.!.!.E.M.M.M.M.M.N.A : 1 1 1 a 1 1 1 1 ",
"1 1 1 1 1 1 1 1 1 < N.N.B.B.M.B.J.!.E.!.!.!.E.!.!.E.E.!.E.!.!.E.!.!.E.!.!.u w # K.E.E.!.!.E.E.!.!.E.E.!.E.E.E.!.!.E.E.!.E.!.!.!.E.!.!.!.E.!.!.E.E.!.E.E.!.E.!.E.!.E.E.!.E.!.!.E.!.E.E.!.!.E.E.!.!.E.!.E.!.E.M.B.B.M.N.N.A a 1 1 1 : 1 a 1 1 ",
"1 1 : 1 1 1 1 : 1 < M.N.M.M.B.M.J.E.!.E.E.E.!.E.!.E.!.!.!.E.E.!.E.!.!.E.Q.i 4 G.Q.!.!.!.E.!.!.E.!.!.!.E.!.!.E.!.!.E.!.E.!.!.E.!.!.E.E.E.!.E.E.!.!.E.!.!.E.!.E.!.E.!.!.E.!.E.!.!.E.!.!.!.E.!.!.E.!.!.!.E.!.E.M.M.N.M.N.M.A : : 1 : a : : 1 : ",
"1 1 1 : : 1 1 : 1 < B.N.M.B.M.B.J.!.!.!.!.E.!.E.!.E.!.E.E.!.Q.E.!.Q.Q.Q.E.u w E.E.!.E.E.!.E.!.!.E.!.E.E.!.E.!.!.E.!.E.!.E.!.E.E.!.E.!.!.!.!.E.!.!.E.!.!.!.!.!.!.E.!.!.!.!.E.!.E.!.!.E.!.!.!.E.E.!.!.!.E.!.!.E.B.M.B.M.N.M.W : 1 1 : 1 1 a : 1 ",
": : 1 1 1 : 1 1 < < N.N.M.M.M.M.J.L.t.t.t.t.t.t.t.t.t.t.t.t.t.q.e.t.e.t.e.w u E.Q.!.E.!.!.E.!.E.!.E.E.!.!.E.!.!.E.!.E.!.E.!.E.!.!.E.!.E.E.E.E.!.E.!.E.!.E.E.E.E.E.!.E.E.E.!.E.!.!.E.E.!.E.E.!.E.!.E.E.!.!.E.E.!.M.M.M.M.M.N.C : : : 1 1 : : : 1 ",
"1 : 1 : : 1 : 1 1 < M.M.M.B.M.M.J.4. .E.E.E.Q.!.E.!.E.E.!.!.E.!.E.E.E.E.E.E.!.!.E.!.E.!.E.E.!.E.!.E.!.!.E.!.E.E.!.E.!.E.!.!.E.!.E.!.E.E.!.E.E.!.E.!.E.!.E.E.!.E.E.E.E.!.E.M.M.B.M.M.M.A 1 : 1 1 : 1 : : 1 ",
"1 : : 1 : : : : 1 < M.M.M.M.M.M.J.4. 2.Q.!.E.!.E.E.!.E.E.!.E.E.!.E.!.E.!.!.E.!.E.E.!.E.!.E.E.!.E.!.E.!.E.!.E.E.E.!.E.!.E.!.E.E.!.E.!.E.E.!.E.!.E.E.!.E.!.E.!.!.E.!.E.!.E.E.E.M.M.M.M.M.M.A : : : : : : 1 : : ",
": : 1 : : : : : : f M.M.M.M.M.M.J.4. q.Q.E.Q.!.E.!.E.E.!.E.!.E.!.!.E.!.!.E.!.!.E.!.E.Q.Q.E.Q.E.Q.E.Q.E.E.!.E.Q.E.!.E.E.!.E.E.!.E.E.!.E.Q.E.E.Q.Q.E.!.E.E.!.E.Q.E.E.Q.E.Q.E.!.E.M.M.M.M.M.M.Z : a : : : a : : a ",
": : : : : : : : : < M.M.M.M.M.M.J.4. i E.Q.E.E.E.!.!.E.E.!.E.!.E.E.E.E.E.!.E.E.u 2 # # 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 p M.M.M.M.Z : : : : : ; : : ; ",
": : : : : : : : : f N.M.M.M.M.M.J.i.y u y u y u y u y y u u y u y u y y u + y Y.E.!.E.E.!.E.E.E.!.E.E.E.E.!.E.E.!.E.w . e M.M.M.M.Z : : : : : : : : : ",
": : : : : : : ; : < M.M.M.M.1.M.J.E.E.!.Q.E.E.Q.E.E.Q.E.Q.E.E.E.E.E.E.!.E.u 7 U.E.!.E.E.E.!.E.E.E.!.!.E.E.!.E.E.E.8 . e M.M.M.M.Z ; ; : : : : : : : ",
": : : : ; : : : : < M.M.M.M.M.M.J.E.E.E.!.E.!.E.!.E.!.E.E.!.E.!.Q.E.E.E.!.u 2 L.E.Q.E.Q.E.!.E.!.E.E.E.E.!.E.!.E.w . e M.M.1.M.Z : : : : : : : : ; ",
": : : : : : : : : < 1.M.1.M.M.1.J.E.E.E.E.E.E.E.E.E.E.E.E.E.E.!.!.E.!.E.E.u + V.E.E.E.E.E.E.E.!.E.!.E.E.E.E.E.0 8 y y r y y y e y y y y y y y y y e y y y y y y t y y y t t y t y y t y y y t y y y y t e ^ M.M.M.M.Z : ; : ; ; ; : ; : ",
": : : ; - ; : : : < M.1.1.M.M.1.J.E.E.E.E.E.!.E.E.E.E.Q.E.!.E.E.E.E.!.E.E.u o e.!.E.E.!.E.E.E.E.!.E.E.E.E.E.w i.Q.E.E.E.!.E.E.E.E.E.E.E.E.Q.E.Q.E.E.E.E.E.E.Q.E.E.E.!.E.E.E.E.E.E.E.E.!.E.E.Q.E.E.E.E.1.1.M.1.1.M.N : : ; : : : : : ; ",
"- : ; : : : - : : < M.1.M.M.1.M.J.!.E.E.!.E.E.E.!.E.E.E.E.E.E.E.E.E.E.E.E.i u @ 8.E.E.E.E.Q.E.E.E.E.!.E.E.!.0 y.E.E.Q.E.Q.E.E.Q.E.E.Q.E.E.E.E.E.E.Q.E.!.E.E.E.E.E.E.E.E.E.!.E.E.E.!.E.E.E.E.E.E.Q.E.E.M.M.M.M.M.M.N ; : ; ; ; ; ; ; : ",
"; ; ; ; ; ; ; ; ; < 1.M.1.M.1.M.J.E.E.E.E.E.E.E.!.E.E.E.E.E.E.E.!.E.E.E.E.u .V.3 X.E.E.E.E.E.E.E.E.E.E.E.E.q u.E.E.E.Q.E.Q.E.Q.E.E.E.E.E.Q.E.E.E.E.E.E.E.!.E.E.E.Q.E.Q.E.E.E.E.E.Q.E.E.E.E.E.Q.E.E.E.1.M.M.1.1.1.C ; ; ; ; ; ; ; : ; ",
"; ; ; ; : ; ; ; ; < M.1.M.1.M.1.J.E.E.E.E.E.!.E.E.E.E.E.E.E.!.E.E.E.E.E.E.u .E.G.5 X.E.E.E.E.!.E.E.E.!.E.E.q i.E.E.E.2.@ @ @ @ @ + @ # @ @ @ + !.E.!.E.E.E.E.K.i i i i ~ i i ~ i i i i i Q Q Q Q i i >.M.1.M.M.M.Z ; ; ; ; ; ; ; ; ; ",
"; ; ; ; ; ; ; ; ; < M.M.M.1.1.M.J.E.E.E.E.!.E.E.E.E.E.E.E.!.E.E.E.E.Q.E.E.u .E.E.Y.w U.E.Q.E.!.E.!.E.E.E.!.q u.E.E.E.3. !.E.E.!.E.E.!.i. :.M.M.1.M.1.Z ; ; ; ; ; ; ; ; ; ",
"; ; ; ; ; ; ; ; - < 1.1.1.M.1.1.J.E.E.E.E.E.E.E.E.E.E.E.E.!.E.E.E.E.E.E.E.u .E.E.E.E.u G.E.E.E.E.E.E.E.!.E.E.q i.E.Q.E.o. E.E.!.E.E.E.E.i. ;.M.1.1.1.M.C ; ; ; ; ; ; ; ; ; ",
"; ; ; ; ; ; ; ; - < 1.1.1.1.1.M.J.E.E.E.E.E.!.!.E.E.!.E.E.E.E.E.E.E.E.!.E.i .E.E.Q.E.E.0 E.E.E.E.E.E.E.E.E.E.E.q y.E.E.E.o. E.E.E.E.E.E.E.i. ;.1.M.1.1.1.Z ; ; ; ; ; ; - ; ; ",
"- ; ; - - ; ; - ; < 1.M.1.M.1.1.F.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.Y.U.U.U.U.Y.E.E.E.E.E.u E.E.E.E.E.E.E.E.E.Q.E.q y.E.E.E.o. E.E.E.E.E.!.E.i. ;.1.M.1.M.1.N ; * ; - - ; ; ; * ",
"; - ; - - ; ; , - < 1.1.1.1.1.1.J.E.E.E.E.E.E.E.E.E.E.E.!.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.Q.E.E.E.u E.E.E.E.E.E.E.E.E.E.E.w y.E.E.E.2.2 2 2 2 2 2 2 2 2 2 2 4 E.E.E.E.E.E.E.i. . ;.M.1.1.1.1.N - ; ; ; ; ; ; ; ; ",
"- ; - ; ; - ; - - < 1.1.M.1.1.M.J.E.E.E.E.E.E.E.E.E.E.E.!.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.u Y.E.E.E.E.!.E.E.E.E.E.0 y.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.U.y.y.y.y.y.y.y.y.y.y.i.y.y.y.f.y.y.y.y.,.1.1.1.M.1.N ; ; * - ; * - ; * ",
"- - - - ; ; - - - > 1.1.1.1.1.1.F.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.E.E.E.u U.E.E.E.E.E.E.E.J.E.J.w y.E.E.E.E.E.E.J.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.1.1.1.1.1.1.C - - - ; - - - - ; ",
"- ; - ; - - ; - ; , 1.1.r.1.1.1.F.E.E.E.E.E.E.E.J.E.E.E.E.J.E.E.E.E.E.E.E.J.E.E.E.E.E.E.E.E.E.E.u J.E.E.E.E.E.E.E.E.E.E.0 y.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.J.E.E.E.E.E.1.1.1.1.1.1.C - - - - - ; - - - ",
"- - - - - - - - - > 1.1.M.1.1.1.F.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.Y.u U.E.E.E.E.J.E.E.E.E.E.w y.E.E.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.J.E.E.E.E.J.E.E.E.R.E.E.E.E.E.E.E.E.E.E.E.E.E.J.1.1.1.1.1.1.M - - - - - - ; - - ",
"- - - - - - - - - > 1.1.1.1.1.1.F.E.E.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.E.J.E.E.E.E.E.E.E.u J.E.E.E.E.E.E.E.E.E.E.0 e.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.J.1.1.1.1.1.1.N - - - - ; - - - - ",
"- - * - - - - - - > 1.1.1.1.1.1.F.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.E.u Y.E.E.E.E.E.E.E.E.E.E.w y.E.E.E.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.E.E.E.E.E.E.E.1.1.<.1.1.1.M - - - * - - - - - ",
"- - - - - - - - - > 1.1.1.<.1.1.F.E.E.E.E.E.E.E.E.J.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.u Y.E.E.E.E.E.E.E.E.E.E.0 e.E.E.E.E.E.E.E.E.E.E.R.E.J.E.E.R.E.E.E.E.E.E.E.E.E.J.E.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.J.1.<.1.1.1.1.M - - - - - - - - - ",
"* - - - * - * - - > 1.1.<.1.1.<.F.E.E.E.J.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.J.E.E.E.E.J.E.E.E.E.E.E.u U.E.J.E.R.J.E.E.J.J.E.0 y.E.E.J.E.J.E.E.Y.E.E.E.E.J.E.E.E.E.E.E.E.J.J.E.E.E.E.E.E.E.E.E.E.E.E.J.E.E.E.E.E.J.E.E.1.1.1.1.<.<.m - % - - - - - - - ",
"- * * - - - * - - > <.<.1.1.1.1.J.E.J.E.E.E.J.E.J.E.E.E.J.E.E.J.E.E.E.J.E.E.J.E.E.E.E.o.e r w e + e t y e w 3.E.E.E.E.E.0 y.E.J.V.V.V.V.V.N.V.V.V.V.V.V.V.V.F.J.E.E.E.E.E.E.J.E.E.E.J.E.x.~ ~ ~ ~ ~ ~ p ~ ~ ~ ~ i ^ <.1.<.1.1.M - - - & - - - % - ",
"* % - - - - - - - > 1.<.1.<.1.<.F.E.J.E.E.E.J.E.E.E.E.J.E.E.J.E.E.E.J.E.E.J.E.E.E.E.E.r y E.E.E.E.E.w e.E.i. .E.R.E.E.J.E.E.J.J.E.E.E.E.8. 7 1.1.1.1.<.m - - % - - - - - & ",
"& - % - % - % - % > <.1.1.<.<.1.F.E.E.E.J.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.r y J.E.E.J.E.7 y.E.i. / E.E.E.E.E.E.E.E.E.E.E.E.J.8. 7 1.<.<.1.1.M * - - % - % - - & ",
"% - - - % - - - - > 1.<.<.1.1.<.F.E.E.E.E.E.J.E.J.J.E.E.E.E.J.E.E.J.E.E.E.E.J.J.J.E.J.e y E.E.J.E.J.w y.E.i. .J.E.J.E.E.E.E.E.E.E.E.E.E.8. 7 <.1.1.<.1.M - % - % * % - % - ",
"& * - % - - % % - > <.1.1.<.<.1.F.J.J.E.E.J.E.E.E.E.E.J.J.E.J.E.E.E.J.J.J.E.E.E.J.E.E.w e E.E.J.E.E.0 y.J.y. / Y.E.E.E.J.E.J.E.J.E.J.J.E.8. 7 1.<.<.1.<.M % - * - * - * * * ",
"& & % - * % % - % > 1.<.<.1.1.<.F.E.J.E.E.J.E.E.E.E.E.J.E.E.E.J.J.E.E.E.J.E.E.E.E.E.E.i.e.e.e.e.e.e.e.e.e.e.e.e.e.e.x.E.E.J.J.E.0 e.E.i. .E.E.E.E.J.J.E.J.J.E.E.E.E.8. 7 <.1.<.<.1.m - * * % - % - % - ",
"& & - % & - - - % > <.<.<.<.<.<.F.E.J.E.E.J.E.J.J.J.E.E.E.J.E.E.E.E.J.E.E.E.J.J.E.J.J.E.J.E.E.E.E.E.E.E.E.J.E.E.J.E.J.E.E.E.E.E.w y.J.i. ..E.J.J.E.E.E.E.E.E.E.J.E.R.8. 7 <.1.<.1.<.m % % * * % - % % * ",
"% - % - % - % % & > <.1.<.<.<.1.F.J.E.E.E.E.J.E.E.E.J.E.J.E.J.E.E.J.E.J.E.J.E.E.J.E.E.E.J.E.E.E.J.J.E.E.E.E.J.J.E.J.E.E.J.J.E.J.0 i.J.V.u u u u i u u i i u u u u u 8.E.E.J.E.J.E.J.E.J.E.E.E.E.8. 7 <.<.<.1.<.M % - % % - - % * % ",
"* % * % * % - % % > <.<.1.<.<.<.F.E.E.J.J.E.E.E.E.J.E.E.E.E.J.E.E.J.E.E.E.E.J.E.E.E.E.J.E.E.J.J.E.E.E.J.J.E.E.E.E.E.E.J.E.E.E.E.0 y.E.E.J.E.J.E.E.J.E.J.E.E.J.E.E.J.E.E.J.E.E.E.E.J.E.E.E.E.J.J.S.2.2.4.2.7.2.2.7.2.2.7.2.;.1.<.<.<.<.m - % * - % % - % & ",
"* % * % % * % - & = <.<.<.<.<.<.F.E.J.E.E.E.E.J.E.E.J.E.E.J.E.E.E.E.J.E.E.E.E.E.J.E.E.E.J.E.E.E.E.E.J.E.J.E.E.E.E.J.E.E.E.E.E.J.V.i.i.i.J.E.E.Y.J.E.E.J.E.E.J.E.E.E.J.E.E.J.E.E.J.E.E.J.E.E.E.J.E.J.E.E.J.E.E.E.J.E.E.E.E.E.Y.J.<.<.<.1.<.<.m * % & % - % % % & ",
"* * % * * * % % % > <.<.<.<.<.<.F.J.J.E.J.J.J.E.E.J.E.J.J.E.E.J.Y.J.E.J.E.J.J.E.E.J.E.J.E.J.J.E.J.J.E.J.E.E.J.J.E.E.J.J.J.E.J.E.J.J.J.E.J.J.J.E.J.E.E.J.J.E.J.E.E.J.E.J.J.E.J.E.E.J.J.E.J.J.J.E.J.E.J.J.E.E.J.J.E.E.J.J.J.J.E.J.<.<.<.<.<.<.m % * % % * % - % % ",
"% * * % % % * % % > <.<.<.<.<.<.1.M.M.M.1.M.M.M.M.M.M.M.M.M.M.M.M.M.M.1.M.M.M.1.M.M.M.M.M.M.1.1.M.M.M.M.M.M.1.1.M.M.M.M.M.M.1.M.M.M.M.M.M.M.M.1.M.M.M.M.M.M.M.M.1.M.M.M.M.M.M.M.M.M.M.M.M.M.M.1.M.M.M.M.M.M.1.1.M.M.M.M.M.M.M.M.<.<.<.<.<.<.m % % * % % % * - % ",
"% % % % * % % * % = <.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.n % % % % * % % % % ",
"% * % % % % % % % = <.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.n % % % * % % - % % ",
"% % * % % % % % % > <.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.n $ % % % % % % % % ",
"% % % % % % % % % = <.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.,.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.6 = % % % % % % % % ",
"% $ % % % $ % % % % ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( / ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ^ ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 6 $ % % % % % % % % ",
"% % % % % % % % % $ % % $ % % % % % % % % % % % $ $ $ $ $ $ $ % $ % $ % $ % % % % % % % % % % % $ $ % $ % % $ % % % % % % % % $ % % % % $ % $ % $ $ $ $ $ % % $ % $ % % $ % % % % % $ % % $ % $ $ $ % % $ % % $ $ % % $ % % % $ $ % $ % % % % % % % % % % % % % ",
"_.$ $ % $ $ $ $ $ % % $ % $ $ $ $ $ $ % $ $ $ % $ $ $ $ $ $ $ $ % % % $ % $ $ % $ $ $ % $ $ $ % $ $ $ % $ % % $ $ % $ $ $ $ % $ $ $ $ $ % $ % % $ $ $ $ $ $ $ % % $ $ % % $ $ % $ $ % % $ % $ % $ $ % $ $ % % $ % $ $ % $ $ % $ % $ % % $ $ $ $ % % $ % $ $ $ $ ",
"_.$ % $ $ $ $ % $ $ $ $ $ $ $ % $ $ $ $ $ % $ $ $ $ $ $ % $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ % $ $ $ $ $ % $ % $ $ % % $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ % $ % $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ % $ $ % $ $ $ $ % $ $ % % $ % $ $ % $ _.",
"_._.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _.",
"_._._.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _._.",
"_._._._.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % _._._.",
"_._._._._.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _._._._._.",
"_._._._._._._._.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % _._._._._._._._."
};
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

+209 -216
View File
@@ -1,222 +1,215 @@
/* XPM */
static char *icon_kicad_64[] = {
/* columns rows colors chars-per-pixel */
"64 64 152 2 ",
"64 64 145 2 ",
" c #A33E03",
". c #A44106",
"X c #A5430A",
"o c #A94C16",
"O c #AB511D",
"+ c #876900",
"@ c #8A6B00",
"# c #8F7000",
"$ c #937300",
"% c #997700",
"& c #9D7A00",
"* c #8D7112",
"= c #A27E00",
"- c #AF5C2B",
"; c #B05E2D",
": c #B15F30",
"> c #957E2D",
", c #B36335",
"< c #B3673B",
"1 c #B56A3D",
"2 c #B76D42",
"3 c #B97046",
"4 c #B77249",
"5 c #B9754D",
"6 c #BB7A53",
"7 c #BD7E59",
"8 c #A68100",
"9 c #AB8500",
"0 c #AF8800",
"q c #B38B00",
"w c #B88F00",
"e c #B28C09",
"r c #BC9200",
"t c #B9930E",
"y c #B28E11",
"u c #BB971C",
"i c #97802D",
"p c #9C832E",
"a c #A0872F",
"s c #BC9C2E",
"d c #A48A30",
"f c #A98E31",
"g c #AD9232",
"h c #B29634",
"j c #B69934",
"k c #C19600",
"l c #C59900",
"z c #C99C00",
"x c #C09708",
"c c #C09A13",
"v c #C8A11A",
"b c #C29E24",
"n c #CAA62C",
"m c #C4A438",
"M c #988540",
"N c #9A8849",
"B c #BE815D",
"V c #BEA344",
"C c #BD8C70",
"Z c #C1825D",
"A c #CCAE43",
"S c #C7AC51",
"D c #CFB65F",
"F c #C58E6D",
"G c #C79375",
"H c #C89376",
"J c #C69679",
"K c #C99578",
"L c #C6997F",
"P c #CA997C",
"I c #C2AC60",
"U c #CAB66E",
"Y c #C6B67C",
"T c #D3C07D",
"R c #BC9680",
"E c #AEAA9D",
"W c #B0AC9F",
"Q c #B2AEA1",
"! c #B6B2A4",
"~ c #B9B5A7",
"^ c #BBB7A9",
"/ c #BEBAAB",
"( c #B3B3B3",
") c #BBBBBB",
"_ c #C79C82",
"` c #C89C82",
"' c #CBA48E",
"] c #CEBF8A",
"[ c #CFA790",
"{ c #CCA995",
"} c #D0AA94",
"| c #C9BE96",
" . c #D8B39E",
".. c #C5B5AB",
"X. c #CBB6A9",
"o. c #C1BDAE",
"O. c #D4B7A6",
"+. c #D5BAAA",
"@. c #D9BDAC",
"#. c #C4BFB0",
"$. c #C3BDB9",
"%. c #D6C99A",
"&. c #DACB98",
"*. c #CCC5AA",
"=. c #D1C7A3",
"-. c #DCCEA1",
";. c #DED3AD",
":. c #C6C1B1",
">. c #CAC5B5",
",. c #CEC9B8",
"<. c #D7C1B4",
"1. c #D9C3B7",
"2. c #D3CDB6",
"3. c #D7C5BB",
"4. c #D9C6BA",
"5. c #D2CDBC",
"6. c #DBC9BE",
"7. c #D9D0B1",
"8. c #D6D1BF",
"9. c #E1C6B6",
"0. c #C4C3C3",
"q. c #CBCBCB",
"w. c #DBCCC4",
"e. c #DCCFC8",
"r. c #D6D2C3",
"t. c #DAD5C3",
"y. c #DED9C7",
"u. c #D6D4CF",
"i. c #DDD2CC",
"p. c #D4D4D3",
"a. c #DDD7D3",
"s. c #DED9D4",
"d. c #DBDBDB",
"f. c #E5CFC2",
"g. c #E6D1C4",
"h. c #E8D1C5",
"j. c #E3D4CA",
"k. c #E1DCCB",
"l. c #E8D8CF",
"z. c #E2DAD6",
"x. c #E2DEDC",
"c. c #E3E1DD",
"v. c #ECE2DC",
"b. c #E4E4E4",
"n. c #EAE6E3",
"m. c #E9E8E7",
"M. c #EBEBEB",
"N. c #F1E7E2",
"B. c #F2E8E3",
"V. c #F3F3F3",
"C. c #F9F9F9",
"Z. c None",
". c #A44006",
"X c #A6430B",
"o c #A84A13",
"O c #AB4F1A",
"+ c #AB521E",
"@ c #876900",
"# c #8A6B00",
"$ c #906F00",
"% c #8F7006",
"& c #947301",
"* c #997700",
"= c #9C7A01",
"- c #8F7518",
"; c #92771C",
": c #957A1C",
"> c #9A7E1D",
", c #A27E00",
"< c #AC5421",
"1 c #AD5827",
"2 c #AF5C2B",
"3 c #B26335",
"4 c #B46638",
"5 c #B5693D",
"6 c #AD6840",
"7 c #B76E44",
"8 c #B7724A",
"9 c #B9734A",
"0 c #BB7750",
"q c #BB7C57",
"w c #BB7D59",
"e c #9E811D",
"r c #A68101",
"t c #AB8500",
"y c #AF8801",
"u c #B08700",
"i c #B38B01",
"p c #B88F00",
"a c #B48E0D",
"s c #B79007",
"d c #BC9200",
"f c #BD9508",
"g c #A3851E",
"h c #A7891E",
"j c #AB8C1F",
"k c #B28E12",
"l c #B99312",
"z c #BE9814",
"x c #B4911B",
"c c #AF8F20",
"v c #B29120",
"b c #BB9923",
"n c #BEA039",
"m c #C29600",
"M c #C69A00",
"N c #C89B00",
"B c #C49A0A",
"V c #C59F1B",
"C c #C09F2A",
"Z c #C7A52F",
"A c #BE825F",
"S c #BF8361",
"D c #AF8B76",
"F c #B08C77",
"G c #C3A743",
"H c #CBAF4F",
"J c #C2AB5B",
"K c #D1B555",
"L c #C28562",
"P c #C28B6B",
"I c #C38E70",
"U c #C69172",
"Y c #C99272",
"T c #C8977A",
"R c #C7997E",
"E c #CB9B7F",
"W c #C8B266",
"Q c #CEB970",
"! c #B99580",
"~ c #B09789",
"^ c #ADA99B",
"/ c #B7ACA6",
"( c #BBABA2",
") c #BAB1AB",
"_ c #B4B4B4",
"` c #BCBCBC",
"' c #C99D83",
"] c #CBA28A",
"[ c #C7B780",
"{ c #CCBC85",
"} c #C1A697",
"| c #CDA791",
" . c #CCA995",
".. c #CEAE9B",
"X. c #D2AB94",
"o. c #D2AF9B",
"O. c #D1B19E",
"+. c #CFB2A1",
"@. c #D2B3A1",
"#. c #D9B9A7",
"$. c #D6BBAB",
"%. c #DABBA9",
"&. c #D6C382",
"*. c #CBC09A",
"=. c #D3C593",
"-. c #D9CB9B",
";. c #CDC6AF",
":. c #D1C7A6",
">. c #D6CDAD",
",. c #D6C1B5",
"<. c #DAC3B5",
"1. c #D7C7BD",
"2. c #D9C6BB",
"3. c #D4CEBB",
"4. c #DDCABF",
"5. c #DDD5B9",
"6. c #C4C4C4",
"7. c #CBC7C5",
"8. c #CCCCCC",
"9. c #D0CDC1",
"0. c #DBCDC4",
"q. c #DACFC8",
"w. c #D9D5C5",
"e. c #D6D3CA",
"r. c #DDD2CC",
"t. c #DFDBCC",
"y. c #D4D4D4",
"u. c #DED6D2",
"i. c #DDD9D5",
"p. c #DCDCDC",
"a. c #E2CEC3",
"s. c #E4D1C6",
"d. c #E2D4CB",
"f. c #E8D6CC",
"g. c #E6DCD6",
"h. c #E2DEDA",
"j. c #E5E1DE",
"k. c #E8E1DD",
"l. c #E4E4E4",
"z. c #E8E4E2",
"x. c #ECE8E6",
"c. c #EBEBEB",
"v. c #F4F4F4",
"b. c #F9F9F9",
"n. c None",
/* pixels */
"Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.",
"Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.",
"Z.Z.Z.Z.Z.Z.z z z z z z z z z z z z z z z z z z z z z z z z z z z z Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.z z z z z z z z z z z z z Z.Z.Z.Z.Z.",
"Z.Z.Z.Z.z z z z z z z z z z z z z z z z z z z z z z z z z l z z z z z z z Z.Z.Z.Z.Z.Z.Z.z z z z z z z z z z z z z z z z z Z.Z.Z.",
"Z.Z.Z.l l l l l l l z l l l z l l l l l l l z l z k k z z l z l l z l z z l Z.Z.Z.Z.Z.Z.l l l z z k z l l z l l z l z l z z Z.Z.",
"Z.Z.Z.l l l l l l l l l l l l l l l l l l l l l k z z k l k l l k z k z k z z Z.Z.Z.Z.Z.Z.l l l k z l l l k l l k z k l l l Z.Z.",
"Z.Z.Z.l l l l &.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.-.v l l k k l Z.Z.Z.Z.Z.l l k l k l l l k l k l l l l k Z.Z.",
"Z.Z.Z.k l k k k.m.b.b.m.b.b.b.b.m.b.b.m.b.b.b.b.m.b.b.m.b.m.b.b.b.m.b.z.n k k l k l Z.Z.Z.Z.Z.l z k l k k l l k z k k l k l Z.Z.",
"Z.Z.Z.k k k k k.b.b.M.M.m.M.M.M.M.M.M.M.M.M.V.M.m.j.j.B.M.M.M.M.M.M.b.b.d.A r l r l k Z.Z.Z.Z.Z.l k k k k k k k k k k k k k Z.Z.",
"Z.Z.Z.k k k k y.b.b.C.C.C.C.C.C.C.C.C.C.C.C.C.C.g. B.C.C.C.C.C.C.V.b.b.b.D l l r k k Z.Z.Z.Z.Z.k k k k k k k r k k k k k Z.Z.",
"Z.Z.Z.k k r r k.b.c.C.C.C.C.C.C.C.C.C.C.C.C.C.C.g. B.C.C.C.C.C.C.C.V.b.c.c.] k k r k l Z.Z.Z.Z.Z.k k k k k k k k k k k k Z.Z.",
"Z.Z.Z.k r k r y.c.b.C.C.C.C.C.C.C.C.C.C.C.C.C.C.g. . B.C.C.C.C.C.C.C.C.V.b.b.c.%.x k r r r Z.Z.Z.Z.Z.r k r r k r k r k k r Z.Z.",
"Z.Z.Z.r r r r y.b.c.C.C.C.C.C.C.C.C.C.C.C.C.C.C.g. B.C.C.C.C.C.C.C.C.C.V.b.c.b.7.u r r r r r Z.Z.Z.Z.Z.r r r r k r r r r Z.Z.",
"Z.Z.Z.r r r r y.d.d.C.C.C.C.C.C.C.C.C.C.C.C.C.C.g. B.C.C.C.C.C.C.C.C.C.C.C.b.d.c.t.b r r r r r Z.Z.Z.Z.Z.r k r r r r r r Z.Z.",
"Z.Z.Z.r r w w t.d.b.C.C.C.C.C.C.C.C.C.C.C.C.C.C.f. B.C.C.C.C.C.C.C.C.C.C.C.C.M.d.d.a.m r r r r r Z.Z.Z.Z.Z.r r r r r r r Z.Z.",
"Z.Z.Z.r r w w t.d.d.V.C.C.C.C.C.C.C.C.V.C.C.C.C.f. N.C.C.V.C.C.C.C.C.C.C.V.C.C.M.d.c.d.S r w w w w Z.Z.Z.Z.Z.r r r r r r Z.Z.",
"Z.Z.Z.w w w w t.d.d.V.C.V.C.C.C.C.C.C.C.C.C.C.C.9.X B.C.C.C.C.C.C.C.C.C.C.C.C.V.C.V.d.d.d.U w w w w w Z.Z.Z.Z.Z.w w r w Z.Z.Z.",
"Z.Z.Z.w w w w 8.d.d.V.C.V.C.V.C.C.V.V.C.V.C.v.j. . 9.h.v.V.C.V.V.C.V.V.C.V.C.C.C.C.M.d.d.d.] r w w w w Z.Z.Z.Z.Z.Z.w Z.Z.Z.Z.",
"Z.Z.Z.w w w w 8.d.d.V.C.C.V.V.C.V.V.C.V.V.C.Z F C.C.C.V.V.C.V.C.C.V.V.C.V.C.V.d.d.d.=.t w w w w w Z.Z.Z.Z.Z.Z.Z.Z.Z.",
"Z.Z.Z.w w w w 8.d.d.V.V.V.C.C.V.V.C.V.C.V.V.Z F C.V.V.C.C.V.C.V.V.C.V.V.V.C.C.V.x.d.d.2.u w q w q w Z.Z.Z.Z.Z.Z.Z.Z.",
"Z.Z.Z.q q q q 5.d.p.V.C.V.C.V.V.C.V.V.V.C.V.Z . 1 l.l.; F V.V.V.V.V.C.V.V.V.V.C.V.C.V.V.V.V.b.d.p.r.s q q q q q Z.Z.Z.Z.Z.Z.Z.",
"Z.Z.Z.q q q w 5.p.d.V.V.V.V.V.V.V.V.C.C.V.V.Z 3 V.C., F V.V.V.C.V.V.C.V.C.V.V.V.C.V.V.V.C.V.b.d.p.u.V q q q q q Z.Z.Z.Z.Z.Z.",
"Z.Z.Z.q q q q 5.d.p.V.V.V.V.V.V.V.V.V.V.V.V.Z . 3 V.C., F V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.M.p.p.d.I q q q q q Z.Z.Z.Z.Z.",
"Z.Z.Z.q 0 0 0 5.p.p.V.V.V.V.V.V.V.V.V.V.V.V.Z 3 V.V., F V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.M.d.p.p.Y e q 0 q q Z.Z.Z.Z.",
"Z.Z.Z.q 0 0 0 5.p.p.V.V.V.V.V.V.V.V.V.V.V.V.7 3 V.V., F V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.M.d.p.p.| e 0 0 0 0 Z.Z.Z.",
"Z.Z.Z.0 0 0 0 ,.p.p.M.V.V.V.V.V.V.V.V.V.V.V.Z 3 V.V., F V.V.V.V.M.V.V.V.M.V.V.M.V.V.M.V.V.V.V.V.V.V.M.d.p.p.*.y 0 0 0 q Z.Z.",
"Z.Z.Z.0 0 0 0 ,.q.p.V.V.V.M.V.V.V.V.M.V.M.V.Z 2 N.n., F M.V.V.V.M.V.M.V.V.V.V.V.V.V.V.V.V.V.M.V.M.V.V.V.p.p.p.j 0 0 0 0 Z.Z.",
"Z.Z.Z.0 9 0 9 ,.p.p.V.M.V.V.M.V.M.M.V.V.V.V.7 F V.V.M.V.V.V.V.V.M.V.V.M.V.M.V.M.V.M.M.V.V.V.V.M.d.q.p.h 0 9 8 0 Z.Z.",
"Z.Z.Z.0 9 9 9 >.q.p.V.M.V.V.V.M.V.V.V.M.V.V.Z F V.M.M.V.M.V.V.V.V.M.V.M.V.V.V.M.M.V.V.V.M.V.V.V.d.p.p.h 9 0 0 8 Z.Z.",
"Z.Z.Z.9 9 8 9 >.p.q.M.M.M.M.M.V.M.M.M.V.M.M.f.@.P . +.@.g.V.M.V.M.V.V.M.M.V.` P ` P P P P K K G G G v.M.V.p.p.q.h 9 8 8 0 Z.Z.",
"Z.Z.Z.9 9 9 8 >.q.p.M.V.V.V.M.M.V.V.M.M.V.V.M.M.+. X V.M.M.V.V.M.M.M.M.V.M.M.X X - l.M.d.p.q.j 8 0 9 9 Z.Z.",
"Z.Z.Z.8 8 9 9 >.q.q.M.M.M.M.M.V.M.M.M.V.M.M.M.V.@. X M.V.M.M.M.M.V.V.M.M.V.M.X X X X X X X O j.p.q.q.h 9 8 8 8 Z.Z.",
"Z.Z.Z.8 = 9 9 #.q.q.M.M.M.M.M.M.M.V.M.M.M.V.M.M.@. , , , < , , , < , , , , X L M.M.M.V.M.M.M.V.H o ..q.q.g 9 8 8 8 Z.Z.",
"Z.Z.Z.9 8 8 = >.q.q.M.M.M.M.M.M.M.M.M.M.M.M.M.M.@. X C M.M.M.M.M.M.M.M.+. C q.q.g = 9 8 9 Z.Z.",
"Z.Z.Z.8 = 9 = #.q.q.M.M.M.M.M.M.M.M.M.x.} } x.M.+. G C F C J F F F F F F F X o - - : : : : , : X { p.0.q.g = = 8 = Z.Z.",
"Z.Z.Z.= = = = #.q.0.M.M.M.M.M.M.M.M.m.f. 3.M.` b.M.M.M.b.M.M.M.M.M.M.M.X . o +.M.p.q.q.f = = = 8 Z.Z.",
"Z.Z.Z.= = = = #.0.q.b.M.M.m.m.m.M.M.m.w. 1.+.X o b.M.M.b.M.M.m.m.M.M.M.m.B B 7 7 7 6 6 6 6 5 5 5 w.m.m.p.q.0.g = = = = Z.Z.",
"Z.Z.Z.= = = = #.q.0.b.M.m.M.M.m.m.m.M.4. H o 1.M.b.M.M.M.m.m.m.M.b.M.m.m.M.M.b.m.m.m.m.m.m.m.m.M.M.m.p.0.q.g = = = = Z.Z.",
"Z.Z.Z.= = = = #.0.0.b.M.m.m.m.m.m.m.m.4. O w.M.m.M.M.m.m.m.m.M.b.b.M.m.m.M.b.M.b.b.m.m.m.m.m.m.m.m.m.p.q.0.f = & = = Z.Z.",
"Z.Z.Z.= = & & #.0.0.w.C C F F C C F F 7 - j.m.m.b.b.m.b.m.M.b.m.b.M.m.b.m.b.M.b.M.b.m.b.m.m.m.m.b.b.m.q.0.0.f & = & = Z.Z.",
"Z.Z.Z.& & = & / 0.0.{ O z.m.m.b.m.m.m.m.m.b.b.M.b.M.b.m.m.m.m.m.b.m.m.m.m.b.M.b.M.m.m.p.0.0.f & & = & Z.Z.",
"Z.Z.Z.& & & & / 0.0.+., : , , < , : : - o i.b.b.m.b.m.b.b.m.b.M.M.b.b.b.b.m.m.b.m.b.b.m.b.m.m.b.m.b.b.b.q.0.0.f & & & & Z.Z.",
"Z.Z.Z.& & & & / ) 0.b.m.b.b.M.b.m.b.M.3. O w.b.b.m.b.M.b.m.b.b.b.b.m.m.b.m.b.M.b.m.m.b.m.m.b.m.b.m.m.b.q.0.0.d % & & & Z.Z.",
"Z.Z.Z.& % & % / 0.0.b.b.b.b.b.b.b.b.b.3. o 3.b.b.b.b.b.b.b.M.b.b.b.b.b.m.b.b.b.b.b.b.b.b.b.b.m.b.b.b.q.0.0.d & % % % Z.Z.",
"Z.Z.Z.% % % % / 0.) b.b.b.b.b.b.m.b.b.4. ' X X +.m.b.b.b.b.m.b.b.b.b._ _ ` _ _ _ _ _ _ _ _ _ _ _ _ _ _ ..) ) d % % % % Z.Z.",
"Z.Z.Z.% % % % ^ 0.) b.b.b.m.b.m.b.b.m.4. <.4.o b.m.b.m.b.m.b.m.b.d.. . X . . . . R 0.0.d % % % & Z.Z.",
"Z.Z.Z.% % % % ^ 0.) b.b.b.b.b.b.b.b.b.w.< < w.b.<. b.b.b.b.b.b.b.b.b.d. ' b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.q.0.) a % % % % Z.Z.",
"Z.Z.Z.% $ % $ ~ ) ) b.b.b.b.b.b.b.b.b.b.b.b.b.b.e. d.b.b.b.b.b.b.b.b.s. ' i.o o o o X.m.b.; - - : - - 2 0.) ) a $ % $ % Z.Z.",
"Z.Z.Z.% $ $ $ ~ $.) d.b.b.b.b.b.b.b.b.d.b.b.b.b.w. d.b.b.b.b.b.b.b.b.s. ' u.o o o o X.b.b. O q.) ) a % $ $ % Z.Z.",
"Z.Z.Z.$ $ $ $ ! ) ) b.b.b.b.b.b.b.b.b.b.b.b.b.b.w. a.b.b.b.b.b.b.b.b.s. ' b.b.b.b.b.b.b.b.d.d.b.x.d.x.x.0.) ) a $ $ $ $ Z.Z.",
"Z.Z.Z.$ $ $ $ ! ) ) x.b.b.b.b.b.b.b.b.b.b.b.b.b.e. a.b.b.b.b.b.d.b.b.s. ' b.b.d.b.b.b.b.b.b.b.b.b.b.b.b.0.) ) a $ $ $ $ Z.Z.",
"Z.Z.Z.$ $ $ $ ! ( ) d.b.b.b.b.d.b.d.b.b.b.d.w.{ _ ' { X.b.d.b.b.x.b.s. ' w.3.3.<.3.i.b.b.b.b.3.{ { { { 0.( ( p # # $ $ Z.Z.",
"Z.Z.Z.$ $ # # Q ( ) d.b.d.d.b.b.b.d.b.b.b.b._ 4 b.b.b.b.b.b.s. ' < J c.c.b.c.C $.) ) a $ # # # Z.Z.",
"Z.Z.Z.# # # # Q ) ( b.d.b.b.d.b.b.b.b.d.d.c._ X X X X . 4 b.b.d.b.b.d.s. ' 4 o o o o _ b.b.d.x.C $.) ( > # # # # Z.Z.",
"Z.Z.Z.# # # # Q ( ( b.b.b.d.b.b.b.d.b.d.b.b.c.c.d.b.b.b.b.b.d.d.d.b.d.b.d._ 3.b.b.b.b.d.d.b.b.b.x.u.3.w.3.w.) ( ( > # # # # Z.Z.",
"Z.Z.Z.# # # # E ) ( d.d.b.b.b.d.b.d.b.b.b.d.b.d.b.d.c.b.d.b.b.b.b.b.d.b.d.b.c.b.d.d.b.b.b.b.d.d.b.c.b.x.d.b.0.( ( p # @ # # Z.Z.",
"Z.Z.Z.# # @ # E ( ( d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.0.( ( > @ # @ @ Z.Z.",
"Z.Z.Z.# + # + E ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( > @ @ @ # Z.Z.",
"Z.Z.Z.+ + # @ W ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( > @ @ @ @ Z.Z.",
"Z.Z.Z.# + + @ M N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N * @ @ @ @ Z.Z.",
"Z.Z.Z.+ @ + @ + + + + + + + + + + + @ + @ + + + + + + + @ + @ + + + + + + + + + @ + @ + + + + + + + + + @ + @ + @ + @ @ @ Z.Z.Z.",
"Z.Z.Z.Z.+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ Z.Z.Z.",
"Z.Z.Z.Z.Z.+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ @ Z.Z.Z.Z.",
"Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z."
"n.n.n.N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N n.n.n.n.n.n.n.n.n.n.N N N N N N N N N N M N N N N N N n.",
"n.M N M N M M N N N N M N N N N N M N N N M M M M M M N M M M N M M M M M M n.n.n.n.n.n.n.M N N N N N N M M N N N N N N N M N N ",
"n.M M M M M M M M M M M M M M M M M N N M M M M M M M M M M M N N M M M M M M n.n.n.n.n.n.M M M M M M M M M M M M M M M M M M N ",
"M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M n.n.n.n.n.n.M M M M M M M M M M M M M M M M M M ",
"M m M M B l.x.l.l.c.l.c.l.c.l.l.l.l.c.l.c.l.c.l.l.c.l.c.l.l.l.l.c.x.l.K M m M m m m n.n.n.n.n.M M m M m M m m M m M M M M M M d ",
"M m m m B l.l.l.l.l.l.l.l.l.c.l.c.l.l.l.l.l.l.x.l.l.x.l.c.l.c.l.l.l.z.l.&.M m m M m M n.n.n.n.n.M m m m M m M m m m m M d M M M ",
"m m m m B l.l.l.c.c.v.c.c.v.c.c.v.c.c.v.c.c.v.c.$.$.s.c.c.c.v.c.c.c.l.l.l.-.B m m m m m n.n.n.n.n.m m M m m m m m M M f M M d M ",
"m m m m m l.l.l.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o . Y b.b.b.b.b.b.b.v.l.l.l.5.V M d m m M n.n.n.n.n.m m m m m m m d d M d d M d ",
"m m m d f l.l.l.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o Y b.b.b.b.b.b.b.b.b.l.l.l.t.Z f M d f M n.n.n.n.n.n.d m m m m d m m m d m m ",
"d d m m B l.p.l.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o Y b.b.b.b.b.b.b.b.b.b.l.p.l.p.H M d f f d d n.n.n.n.n.m d m d m d m d m m d ",
"d d d d f p.l.p.v.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o Y b.b.b.b.b.b.b.b.b.b.b.c.p.l.l.Q d d d d d d n.n.n.n.n.d d d d d d d d d d ",
"d d d d f l.p.l.v.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o Y b.b.b.b.b.b.b.b.b.b.b.b.x.p.p.p.=.f d d d d d n.n.n.n.n.d d m d m d m d d ",
"d d p d f p.j.p.v.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.o Y b.b.b.b.b.b.b.b.b.b.b.b.b.v.p.p.l.>.z d d d p d n.n.n.n.n.d d d d d d d d ",
"d d p d f p.p.p.v.b.v.b.b.b.b.b.b.b.b.v.b.v.b.b.o Y b.v.b.b.b.b.b.b.v.b.b.b.b.b.v.p.p.p.w.b s d d d d n.n.n.n.n.n.p d d d d p ",
"p p p d s p.p.p.v.b.b.b.b.b.b.b.b.v.b.b.b.b.b.b.o Y b.b.b.v.b.b.b.b.b.v.b.b.b.b.v.v.l.p.p.i.G d p p p d p n.n.n.n.n.d d p p p ",
"d p p p s p.p.y.v.b.v.b.v.b.b.b.b.b.v.v.b.v.v.b.o P b.v.b.b.b.b.b.v.b.b.v.b.v.b.b.b.v.x.p.p.i.W p p p p p p n.n.n.n.n.d p d n.",
"i p p p a p.p.i.v.v.b.b.b.v.v.b.b.v.b.b.v.' O O . X O O f.b.v.b.v.b.b.b.v.b.v.v.b.v.b.v.l.p.p.p.{ a p i d i p n.n.n.n.n.n.n.n.",
"i p p p s i.p.y.v.v.v.v.v.b.b.v.b.v.v.v.b.U . . s.b.v.v.b.v.v.v.b.v.b.b.v.b.v.b.v.c.i.y.p.:.l i d i p p n.n.n.n.n.n.n.",
"i p i i a y.y.p.v.v.b.v.v.v.b.b.v.v.b.b.b.Y 7 7 5 f.b.b.b.v.b.v.b.v.b.v.v.b.v.b.v.b.v.v.p.p.i.3.b i i s p i n.n.n.n.n.n.",
"i i i i s p.y.y.v.v.v.b.b.v.v.v.v.b.v.v.v.Y X b.b.%. s.v.v.v.v.v.v.b.v.v.v.v.v.b.v.v.v.b.v.v.p.p.y.e.n i i i i i n.n.n.n.n.",
"i i i y s y.i.y.c.v.v.v.v.v.v.v.v.v.v.v.v.Y X v.v.#. s.v.v.v.b.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.p.p.y.y.J i i i i i p n.n.n.",
"i y i s a y.y.y.v.v.v.v.v.v.v.v.v.v.v.v.v.Y X v.v.%. a.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.l.y.p.y.[ y i i u i y n.n.",
"y i y y a y.y.y.c.v.v.v.v.v.v.v.v.v.v.v.v.U X v.v.#. a.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.c.v.v.v.v.v.c.y.y.y.+.s y i u y i n.",
"y y y y y p.y.y.c.v.v.v.v.v.v.v.v.v.v.v.v.U X v.v.#. a.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.x.p.y.y.;.x i u i u y ",
"y y y y y y.y.y.c.v.v.c.v.c.v.v.v.v.v.v.v.P X v.v.#. a.v.v.v.v.v.v.v.v.v.v.v.v.c.v.c.v.v.v.c.v.c.v.c.v.v.i.y.y.9.k y y y y ",
"y y y y a y.y.y.c.v.v.v.v.v.v.c.c.v.v.c.v.Y X #.#.Y a.v.c.v.c.c.v.v.c.v.c.v.v.v.v.c.v.v.v.v.v.v.v.v.v.v.c.y.y.y.v y t y t ",
"t y t y k 8.y.8.c.c.c.v.v.c.v.c.c.v.c.v.v.Y a.v.v.v.v.c.v.c.v.v.c.v.c.c.v.v.v.v.c.v.c.c.v.v.c.v.c.8.y.y.v y t t y ",
"t t t t t y.8.y.c.v.v.c.v.c.v.v.v.v.c.v.c.Y a.c.c.c.v.v.c.v.v.c.v.v.c.v.v.v.c.c.v.c.v.v.v.c.v.v.c.y.8.8.v t t t t ",
"t t t t t 8.8.y.c.v.c.v.c.v.v.c.c.c.c.v.c.g.a.4. Y 0.4.x.c.v.c.v.v.c.c.c.v.$.L L L L L L L L L A L L O.c.v.v.y.8.8.v t t t t ",
"t t r t a 8.8.y.l.c.c.v.c.c.c.v.c.v.v.c.v.c.c.c. X.v.v.c.v.c.v.c.c.c.c.v.v.U . . . R c.c.8.y.8.v t t t r ",
", r t t r y.8.8.c.c.c.c.v.c.v.c.c.c.c.c.c.v.c.v. X.c.c.c.v.c.c.c.c.v.v.c.c.U . . . . . . . L c.8.8.8.c r t r t ",
"t r r r r 8.8.8.l.v.v.c.c.c.c.c.c.v.c.v.c.c.c.c. < 4 4 4 4 4 4 4 4 4 3 4 4 5 . s.k.k.c.c.c.c.c.c.%.X . . 0 8.8.8.j r r r r ",
"r r r r r 8.8.8.l.c.c.c.c.c.c.c.c.c.c.v.c.c.c.c. . . 2 i.c.c.c.c.c.c.c.c.z.4 X ( 7.8.c = r r r ",
"r r , r r 8.8.7.l.c.c.c.c.c.c.c.c.c.h.$.<.k.c.c. 2 7 7 7 7 7 7 7 7 7 7 7 7 7 5 8 0 0 0 0 0 0 0 2 O <.7.8.6.c r r r r ",
", r , r , 8.8.8.l.c.c.c.c.c.c.c.c.c.@. $.c.z. I c.l.c.c.c.c.c.c.c.l.x.c.U 2 u.l.8.7.8.c r r = r ",
"r , , , g 6.6.8.l.c.c.c.l.c.l.c.c.x.#. $.h.8 S l.c.c.c.c.c.x.l.c.c.c.c.T o o o o o o o o o 7 j.x.c.7.7.6.c = r = r ",
", , , , > 7.7.8.l.c.l.c.l.c.c.c.c.l.#. o.3 3 h.x.c.c.l.c.c.c.l.c.c.c.l.c.l.c.c.c.l.c.c.c.x.c.c.c.l.c.c.l.6.6.8.h r = r , ",
", , , , , 6.6.6.l.c.c.l.c.x.l.c.l.c.+. < 8 j.c.x.l.c.c.l.l.l.c.c.l.c.c.l.c.c.l.c.c.c.l.x.c.l.l.c.c.l.c.c.8.8.6.h = r r = ",
", , = , , 8.8.6.h.q.0.0.a.0.0.0.0.0.' w l.l.l.l.l.c.c.l.c.l.c.l.c.l.l.c.c.l.l.c.l.c.c.l.c.c.c.c.c.c.c.l.6.6.6.h = , = = ",
"= = , = = 6.6.6.$. U l.c.c.l.c.l.c.l.c.c.l.l.c.l.l.c.l.l.c.l.l.c.l.x.l.l.l.l.l.l.l.l.l.7.6.6.g , , = , ",
"= = , = , 6.6.6.$. + l.x.c.l.c.c.l.c.c.l. .' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ! 6.6.g = = = , ",
"= = = = = 6.6.6.y...+.o.........o.o.P w l.l.l.l.l.l.l.l.l.< . . 1 6.6.g = = = = ",
"= = = = = 6.` 6.l.l.l.c.l.c.l.c.l.x.+. 6 h.l.l.x.x.c.l.c.< < 1 2 2 1 1 2 2 1 1 2 1 1 2 1 1 1 1 1 1 1 1 6 6.` e * = = = ",
"* = * * = 6.` 6.l.l.l.l.l.l.l.l.l.l.+. 2 3 d.l.l.l.l.l.l.+ e.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.x.l.l.l.l.6.6.6.e * = * = ",
"* * * * - 6.` 6.p.l.l.l.c.l.l.l.l.l.o. +.8 < e.l.x.l.l.l.< q.l.o.R R R R R ,.l.l.l.1.@.O.O.O.+.O.O.O.O.` ` 6.e * * * * ",
"* * * * = ` ` ` l.l.c.l.l.l.l.c.x.l... #.l.A L l.l.l.l.l.< r.z.5 U l.l.c.w . . . . . ( 6.` e * * * * ",
"* & * * = 6.6.` p.l.l.l.l.l.l.l.l.l.0.P P 0.l.l.< S l.l.l.l.l.+ 0.l.5 U l.l.l.w . ( ` ` e * * * * ",
"& * * * & ` ` ` l.l.l.l.l.l.l.l.l.l.l.z.l.l.l.l.2 U l.l.l.l.l.< 0.l.O.' ' ' ' ' ,.l.l.l.] w q q q q q q q A ) ` ` e & & * & ",
"& & & * * 6.` ` p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.2 . I l.l.l.l.l.+ 0.l.l.l.l.l.l.l.l.p.l.p.l.l.l.l.j.l.l.p.l.l.` ` ` > & * & & ",
"* & & & & ` ` ` p.l.p.l.l.l.l.l.l.l.l.p.l.l.p.l.2 . I l.l.l.l.l.+ 0.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.` ` ` > & & & & ",
"& & & & % ` ` ` p.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.2 F z.l.l.l.l.+ q.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.p.l.l.l.l.l._ ` ` > & & & & ",
"$ & & # & _ ` _ p.l.l.l.l.l.l.p.l.l.p.l.l.q. . .+ 8 X. .e.l.l.< 0.u.u.u.u.y.u.i.i.l.l.l.l.l.l.p.+.+.+.+.+.+./ ` _ : $ % & & ",
"& $ $ & & _ ` ` p.l.l.l.p.p.l.l.l.l.l.l.p. . .l.p.+ 0.w 3 l.l.p.l.l.l.1. F ` ` > & & # & ",
"& # & $ % ` _ ` p.l.p.l.l.l.p.l.p.l.p.l.l. . .l.l.+ 0.w 4 p.l.l.l.p.p.1. F _ _ : # & # & ",
"$ & # & % ` _ _ y.l.l.p.l.p.l.l.p.l.l.p.p.p.0.0.1.0.1.0.0.i.p.p.< 0.w 3 l.l.p.l.l.l.1. D _ _ > # & & # ",
"# $ $ # % _ _ _ y.l.l.p.l.l.l.p.l.l.p.j.l.l.l.l.l.j.p.l.p.l.l.l.< 8.$.........+.} $.l.l.p.l.p.l.w.7 7 8 7 7 7 ~ _ _ : $ # $ $ ",
"# % % # % _ _ _ p.p.p.l.l.p.l.p.p.p.l.l.p.l.p.p.l.p.l.p.l.p.l.p.r.q.p.p.l.l.p.l.p.l.p.l.p.l.p.l.p.l.p.l.p.l.l.p._ _ _ : # $ # $ ",
"% # # % % _ _ _ ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` _ _ _ ; # # # # ",
"# # # # % _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ; # # # # ",
"# # # @ @ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ; # # # # ",
"# # @ # % @ @ @ @ @ @ @ @ @ @ @ @ # @ # @ # @ # @ @ @ @ # @ @ # @ @ @ @ @ @ @ @ @ # @ # # @ @ # # # @ @ # @ @ # @ @ # @ # # @ # ",
"n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # @ @ n.",
"n.n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # n.",
"n.n.n.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # n.n.n."
};
Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 95 KiB

+13 -8
View File
@@ -1,15 +1,20 @@
<svg xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1">
<svg xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<radialGradient id="a" gradientUnits="userSpaceOnUse" cy="25.129" cx="10.328" gradientTransform="matrix(.97815 .0053484 -.0046022 .84169 .97435 -1.027)" r="27.987">
<linearGradient id="b">
<stop stop-color="#89d5f8" offset="0"/>
<stop stop-color="#00899e" offset="1"/>
</radialGradient>
</linearGradient>
<radialGradient id="a" xlink:href="#b" gradientUnits="userSpaceOnUse" cy="17.014" cx="18.418" gradientTransform="matrix(.97244 -.10566 .050523 .465 -.35195 9.5854)" r="27.987"/>
<radialGradient id="c" xlink:href="#b" gradientUnits="userSpaceOnUse" cy="3.3918" cx="29.041" gradientTransform="matrix(.95171 -.22592 .15618 .65794 -.1085 12.423)" r="27.987"/>
</defs>
<g stroke-linejoin="bevel" stroke="#004c5b">
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m27.184 2.532 31.106 4.7272-17.549 18.997-36.353-7.117 22.796-16.607z"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m40.916 26.084 17.058-18.119-0.963 31.586-15.549 22.977-0.546-36.444z"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#a)" d="m4.215 18.77 37.115 7.3804v36.311l-35.614-10.641-1.501-33.05z"/>
<path style="color:#000000" d="m27.439 2.865 0.561 30.953 28.853 5.765" stroke-dashoffset="2.5932" stroke-dasharray="4.32200003, 2.16100001" stroke-width="2.161" fill="none"/>
<path style="color:#000000" d="m27.718 33.796-21.264 17.204" stroke-dashoffset="1.513" stroke-dasharray="4.32293653, 2.16146827" stroke-width="2.1615" fill="url(#a)"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m4.215 18.77 37.115 7.3804v36.311l-35.614-10.641-1.501-33.05z"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m40.916 26.084 17.186-19.341-1.091 32.808-15.549 22.977-0.546-36.444z"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m27.056 2.2749 30.976 4.47-17.291 19.511-36.482-7.374 22.797-16.607z"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#c)" d="m58.007 6.7472-0.894 32.409-28.839-6.289-0.882-30.391 30.615 4.2718z"/>
<path style="color:#000000" d="m28.195 32.896-21.559 18.377" stroke-dasharray="4.32293653, 2.16146827" stroke-width="2.1615" fill="url(#a)"/>
<path style="color:#000000" stroke-width="2.161" fill="url(#a)" d="m40.455 26.182-13.091-2.546"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#a)" d="m57.636 7.1818-16.909 18.909"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#a)" d="m41 36.455-0.182-10.182"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

+8 -13
View File
@@ -1,20 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1">
<defs>
<linearGradient id="b">
<radialGradient id="a" gradientUnits="userSpaceOnUse" cy="25.129" cx="10.328" gradientTransform="matrix(.97815 .0053484 -.0046022 .84169 .97435 -1.027)" r="27.987">
<stop stop-color="#89d5f8" offset="0"/>
<stop stop-color="#00899e" offset="1"/>
</linearGradient>
<radialGradient id="a" xlink:href="#b" gradientUnits="userSpaceOnUse" cy="17.014" cx="18.418" gradientTransform="matrix(.97244 -.10566 .050523 .465 -.35195 9.5854)" r="27.987"/>
<radialGradient id="c" xlink:href="#b" gradientUnits="userSpaceOnUse" cy="3.3918" cx="29.041" gradientTransform="matrix(.95171 -.22592 .15618 .65794 -.1085 12.423)" r="27.987"/>
</radialGradient>
</defs>
<g stroke-linejoin="bevel" stroke="#004c5b">
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m4.215 18.77 37.115 7.3804v36.311l-35.614-10.641-1.501-33.05z"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m40.916 26.084 17.186-19.341-1.091 32.808-15.549 22.977-0.546-36.444z"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m27.056 2.2749 30.976 4.47-17.291 19.511-36.482-7.374 22.797-16.607z"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#c)" d="m58.007 6.7472-0.894 32.409-28.839-6.289-0.882-30.391 30.615 4.2718z"/>
<path style="color:#000000" d="m28.195 32.896-21.559 18.377" stroke-dasharray="4.32293653, 2.16146827" stroke-width="2.1615" fill="url(#a)"/>
<path style="color:#000000" stroke-width="2.161" fill="url(#a)" d="m40.455 26.182-13.091-2.546"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#a)" d="m57.636 7.1818-16.909 18.909"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#a)" d="m41 36.455-0.182-10.182"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m27.184 2.532 31.106 4.7272-17.549 18.997-36.353-7.117 22.796-16.607z"/>
<path style="color:#000000" stroke-width="2.1615" fill="#fff" d="m40.916 26.084 17.058-18.119-0.963 31.586-15.549 22.977-0.546-36.444z"/>
<path style="color:#000000" stroke-width="2.1615" fill="url(#a)" d="m4.215 18.77 37.115 7.3804v36.311l-35.614-10.641-1.501-33.05z"/>
<path style="color:#000000" d="m27.439 2.865 0.561 30.953 28.853 5.765" stroke-dashoffset="2.5932" stroke-dasharray="4.32200003, 2.16100001" stroke-width="2.161" fill="none"/>
<path style="color:#000000" d="m27.718 33.796-21.264 17.204" stroke-dashoffset="1.513" stroke-dasharray="4.32293653, 2.16146827" stroke-width="2.1615" fill="url(#a)"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

@@ -13,7 +13,7 @@
version="1.1"
id="svg2"
inkscape:version="0.48.4 r9939"
sodipodi:docname="lang_chinese.svg">
sodipodi:docname="lang_zh.svg">
<metadata
id="metadata21">
<rdf:RDF>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

+455
View File
@@ -0,0 +1,455 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="26"
width="26"
version="1.0"
id="svg2"
inkscape:version="0.92.0 r15299"
sodipodi:docname="lock_unlock.svg">
<metadata
id="metadata188">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1033"
id="namedview186"
showgrid="true"
inkscape:zoom="15.365974"
inkscape:cx="4.5385449"
inkscape:cy="11.395488"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg2">
<inkscape:grid
type="xygrid"
id="grid3167"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<defs
id="defs4">
<linearGradient
id="an"
y2="13.849"
gradientUnits="userSpaceOnUse"
x2="28.979"
gradientTransform="translate(-116.91,-44.22)"
y1="28.622"
x1="16.226">
<stop
stop-color="#8b8b8b"
offset="0"
id="stop7" />
<stop
stop-color="#8b8b8b"
stop-opacity="0"
offset="1"
id="stop9" />
</linearGradient>
<linearGradient
id="ao"
y2="11.708"
xlink:href="#aa"
gradientUnits="userSpaceOnUse"
x2="129.27"
gradientTransform="matrix(0.52628,0,0,0.78596,-155.15,-37.182)"
y1="22.589001"
x1="153.36" />
<linearGradient
id="aa">
<stop
stop-color="#fff"
offset="0"
id="stop13" />
<stop
stop-color="#fff"
stop-opacity="0"
offset="1"
id="stop15" />
</linearGradient>
<linearGradient
id="ap"
y2="33.214001"
gradientUnits="userSpaceOnUse"
x2="135.71001"
gradientTransform="matrix(0.76019,0,0,0.76019,-191.41,-37.143)"
y1="110"
x1="203.57001">
<stop
stop-color="#4f3a1e"
offset="0"
id="stop18" />
<stop
stop-color="#4f3a1e"
stop-opacity="0"
offset="1"
id="stop20" />
</linearGradient>
<linearGradient
id="aq"
y2="41.539001"
xlink:href="#aa"
gradientUnits="userSpaceOnUse"
x2="127.36"
gradientTransform="matrix(0.69024,0,0,0.6591,-179.72,-32.689)"
y1="13.741"
x1="115.62" />
<linearGradient
id="at"
y2="62.02"
gradientUnits="userSpaceOnUse"
x2="-28.537001"
gradientTransform="translate(-116.91,-44.22)"
y1="24.645"
x1="54.296001">
<stop
stop-color="#965d01"
stop-opacity="0"
offset="0"
id="stop24" />
<stop
stop-color="#ab6200"
offset="1"
id="stop26" />
</linearGradient>
<linearGradient
id="ar"
y2="11.685"
gradientUnits="userSpaceOnUse"
x2="98.292"
gradientTransform="matrix(0.76019,0,0,0.76019,-189.24,-36.6)"
y1="70.179001"
x1="156.78999">
<stop
stop-color="#fb9c02"
offset="0"
id="stop29" />
<stop
stop-color="#fff"
offset="1"
id="stop31" />
</linearGradient>
<linearGradient
id="as"
y2="18.836"
xlink:href="#aa"
gradientUnits="userSpaceOnUse"
x2="142.17999"
gradientTransform="matrix(0.76019,0,0,0.76019,-191.41,-37.143)"
y1="16.563"
x1="116.42" />
<radialGradient
id="ay"
gradientUnits="userSpaceOnUse"
cy="4.2800999"
cx="123.57"
gradientTransform="matrix(1.2373,1.1904,-0.87346,0.90788,-246.63,-189.76)"
r="18.304001">
<stop
stop-color="#fff"
offset="0"
id="stop35" />
<stop
stop-color="#b3b0a7"
offset="1"
id="stop37" />
</radialGradient>
<filter
id="ag"
height="1.9436001"
width="1.15"
color-interpolation-filters="sRGB"
y="-0.47181001"
x="-0.074989997">
<feGaussianBlur
stdDeviation="1.4154412"
id="feGaussianBlur40" />
</filter>
<linearGradient
id="av"
y2="32.161999"
gradientUnits="userSpaceOnUse"
x2="40.938"
gradientTransform="matrix(0.63853,0,0,0.69647,-37.821,-3.0264)"
y1="32.161999"
x1="6.7268">
<stop
stop-color="#ead200"
offset="0"
id="stop43" />
<stop
stop-color="#fff16a"
offset="0.21"
id="stop45" />
<stop
stop-color="#b5a300"
offset="0.84"
id="stop47" />
<stop
stop-color="#e8d000"
offset="1"
id="stop49" />
</linearGradient>
<linearGradient
id="al"
y2="36.126999"
gradientUnits="userSpaceOnUse"
x2="30.875"
gradientTransform="matrix(0.63683,0,0,0.68893,-37.771,-1.8896)"
y1="25.002001"
x1="10.907">
<stop
stop-color="#fff"
offset="0"
id="stop52" />
<stop
stop-color="#fff"
stop-opacity=".49485"
offset="1"
id="stop54" />
</linearGradient>
<linearGradient
id="am"
y2="17"
gradientUnits="userSpaceOnUse"
x2="24.75"
gradientTransform="matrix(0.63798,0,0,0.92464,-37.808,-3.9886)"
y1="21"
x1="24.875">
<stop
stop-color="#fffac7"
offset="0"
id="stop57" />
<stop
stop-color="#fff8b2"
offset="1"
id="stop59" />
</linearGradient>
<radialGradient
id="ad"
xlink:href="#ab"
gradientUnits="userSpaceOnUse"
cy="20.312"
cx="15.938"
gradientTransform="matrix(1,0,0,0.58491,0,8.4316)"
r="3.3125" />
<linearGradient
id="ab">
<stop
offset="0"
id="stop63" />
<stop
stop-opacity="0"
offset="1"
id="stop65" />
</linearGradient>
<linearGradient
id="au"
y2="20.094"
gradientUnits="userSpaceOnUse"
x2="34"
gradientTransform="translate(-38.777,11.701)"
y1="20.094"
x1="17.188">
<stop
offset="0"
id="stop68" />
<stop
stop-opacity=".17172"
offset=".5"
id="stop70" />
<stop
offset="1"
id="stop72" />
</linearGradient>
<filter
id="ah"
height="4.0437999"
width="1.2829"
color-interpolation-filters="sRGB"
y="-1.5219001"
x="-0.14144">
<feGaussianBlur
stdDeviation="1.1889706"
id="feGaussianBlur75" />
</filter>
<linearGradient
id="ak"
y2="17.469999"
gradientUnits="userSpaceOnUse"
x2="27.191999"
gradientTransform="translate(0,-1.9263)"
y1="2.9137001"
x1="10.651">
<stop
stop-color="#cad0c6"
offset="0"
id="stop78" />
<stop
stop-color="#eaece9"
offset=".5"
id="stop80" />
<stop
stop-color="#c5cbc0"
offset="1"
id="stop82" />
</linearGradient>
<linearGradient
id="aw"
y2="14.85"
xlink:href="#ab"
gradientUnits="userSpaceOnUse"
x2="33.004002"
gradientTransform="translate(1.6824,1.125)"
y1="14.85"
x1="35.005001" />
<filter
id="ac"
height="1.0951999"
width="1.4849"
color-interpolation-filters="sRGB"
y="-0.047579002"
x="-0.24243">
<feGaussianBlur
stdDeviation="0.24444548"
id="feGaussianBlur86" />
</filter>
<linearGradient
id="ax"
y2="13.789"
xlink:href="#ab"
gradientUnits="userSpaceOnUse"
x2="35.021"
gradientTransform="translate(-19.533,1.7437)"
y1="13.789"
x1="32.127998" />
<filter
id="ae"
color-interpolation-filters="sRGB">
<feGaussianBlur
stdDeviation="0.8362597"
id="feGaussianBlur90" />
</filter>
<linearGradient
id="aj"
y2="18.038"
gradientUnits="userSpaceOnUse"
x2="21.941999"
gradientTransform="matrix(0.6374,0,0,0.58679,-37.794,3.1212)"
y1="21.551001"
x1="21.941999">
<stop
stop-color="#fff"
offset="0"
id="stop93" />
<stop
stop-color="#fff"
stop-opacity="0"
offset="1"
id="stop95" />
</linearGradient>
<filter
id="af"
height="1.1647"
width="1.9881999"
color-interpolation-filters="sRGB"
y="-0.082353003"
x="-0.49412">
<feGaussianBlur
stdDeviation="0.69878785"
id="feGaussianBlur98" />
</filter>
<radialGradient
id="az"
gradientUnits="userSpaceOnUse"
cy="6.2807002"
cx="18.031"
r="3.1819999">
<stop
stop-color="#fff"
offset="0"
id="stop101" />
<stop
stop-color="#fff"
stop-opacity="0"
offset="1"
id="stop103" />
</radialGradient>
<filter
id="ai"
height="1.8271"
width="1.1702"
color-interpolation-filters="sRGB"
y="-0.41356999"
x="-0.085115999">
<feGaussianBlur
stdDeviation="0.42546784"
id="feGaussianBlur106" />
</filter>
</defs>
<path
style="fill:none;stroke:#6e8c6e;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 25,12 0,-4 c 0,0 0.5,-5 -5,-5 -5.5,0 -5,5 -5,5 l 0,4"
id="path3944"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cczcc" />
<path
style="fill:none;stroke:#906e6e;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 15,12 V 8 C 15,8 15.5,3 10,3 4.5,3 5,8 5,8 v 4"
id="path3944-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cczcc" />
<rect
style="fill:#292b2b;fill-opacity:1;stroke:none"
id="rect3169"
width="17.999996"
height="13"
x="1"
y="12"
rx="1.5"
ry="1.5" />
<path
sodipodi:type="arc"
style="fill:#ececec;fill-opacity:1;stroke:none"
id="path3971"
sodipodi:cx="13"
sodipodi:cy="16"
sodipodi:rx="2"
sodipodi:ry="2"
d="m 15,16 a 2,2 0 1 1 -4,0 2,2 0 1 1 4,0 z"
transform="translate(-3,1)" />
<path
style="fill:none;stroke:#ececec;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 10,17 0,4"
id="path3973"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

+7 -7
View File
@@ -12,7 +12,7 @@
width="26"
version="1.0"
id="svg2"
inkscape:version="0.48.4 r9939"
inkscape:version="0.92.0 r15299"
sodipodi:docname="locked.svg">
<metadata
id="metadata188">
@@ -34,15 +34,15 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="744"
inkscape:window-width="1920"
inkscape:window-height="1033"
id="namedview186"
showgrid="true"
inkscape:zoom="30.731949"
inkscape:cx="11.296694"
inkscape:cx="5.4721366"
inkscape:cy="9.6647768"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg2">
<inkscape:grid
@@ -454,7 +454,7 @@
rx="1.5"
ry="1.5" />
<path
style="fill:none;stroke:#808080;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
style="fill:none;stroke:#826465;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="M 18,12 18,8 C 18,8 18.5,3 13,3 7.5,3 8,8 8,8 l 0,4"
id="path3944"
inkscape:connector-curvature="0"

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

+102
View File
@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="0.92.0 r15299"
sodipodi:docname="options_generic.svg">
<metadata
id="metadata223">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1033"
id="namedview221"
showgrid="true"
inkscape:zoom="21.730769"
inkscape:cx="4.6477875"
inkscape:cy="8.352213"
inkscape:window-x="-4"
inkscape:window-y="-4"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
showguides="true"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3013"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
</sodipodi:namedview>
<defs
id="defs4">
<linearGradient
id="linearGradient3846">
<stop
style="stop-color:#d2d2d2;stop-opacity:1"
offset="0"
id="stop3848" />
<stop
id="stop3793"
offset="0.61904764"
style="stop-color:#c3c3c3;stop-opacity:1" />
<stop
style="stop-color:#d2d2d2;stop-opacity:1"
offset="1"
id="stop3850" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3846"
id="radialGradient4223"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.875,0,0,0.875,12.585545,1097.5149)"
cx="13"
cy="13"
fx="13"
fy="13"
r="12" />
</defs>
<g
id="g4219"
transform="translate(-10.960545,-1095.8894)"
style="stroke:#000000">
<path
inkscape:connector-curvature="0"
style="fill:url(#radialGradient4223);fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 23.960545,1097.3899 c -0.313616,0 -0.630223,0.038 -0.9375,0.062 l -0.75,3.5937 c -0.95747,0.2036 -1.827822,0.6124 -2.625,1.125 l -3.125,-2.0312 c -0.471052,0.401 -0.911514,0.8414 -1.3125,1.3125 l 2.03125,3.125 c -0.512591,0.7972 -0.921386,1.6675 -1.125,2.625 l -3.59375,0.75 c -0.02463,0.3073 -0.0625,0.6239 -0.0625,0.9375 0,0.3136 0.03787,0.6302 0.0625,0.9375 l 3.59375,0.75 c 0.203614,0.9574 0.612409,1.8278 1.125,2.625 l -2.03125,3.125 c 0.400986,0.471 0.841448,0.9115 1.3125,1.3125 l 3.125,-2.0313 c 0.797178,0.5126 1.66753,0.9214 2.625,1.125 l 0.75,3.5938 c 0.307277,0.025 0.623884,0.062 0.9375,0.062 0.313616,0 0.630223,-0.038 0.9375,-0.062 l 0.75,-3.5938 c 0.95747,-0.2036 1.827822,-0.6124 2.625,-1.125 l 3.125,2.0313 c 0.471052,-0.401 0.911514,-0.8415 1.3125,-1.3125 l -2.03125,-3.125 c 0.51259,-0.7972 0.921386,-1.6676 1.125,-2.625 l 3.59375,-0.75 c 0.02463,-0.3073 0.0625,-0.6239 0.0625,-0.9375 0,-0.3136 -0.03787,-0.6302 -0.0625,-0.9375 l -3.59375,-0.75 c -0.203614,-0.9575 -0.61241,-1.8278 -1.125,-2.625 l 2.03125,-3.125 c -0.400986,-0.4711 -0.841448,-0.9115 -1.3125,-1.3125 l -3.125,2.0312 c -0.797178,-0.5126 -1.66753,-0.9214 -2.625,-1.125 l -0.75,-3.5937 c -0.307277,-0.025 -0.623884,-0.062 -0.9375,-0.062 z m 0,8 c 1.932997,0 3.5,1.567 3.5,3.5 0,1.933 -1.567003,3.5 -3.5,3.5 -1.932997,0 -3.5,-1.567 -3.5,-3.5 0,-1.933 1.567003,-3.5 3.5,-3.5 z"
id="path4215" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

+61 -19
View File
@@ -11,8 +11,11 @@
width="26"
version="1.1"
id="svg2"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="polar_coord.svg">
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="polar_coord.svg"
inkscape:export-filename="/Users/jeff/kicad_dev/kicad/bitmaps_png/png_26/polar_coord.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<metadata
id="metadata39">
<rdf:RDF>
@@ -21,7 +24,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
@@ -34,15 +37,15 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="849"
inkscape:window-width="1440"
inkscape:window-height="800"
id="namedview37"
showgrid="true"
inkscape:zoom="26.666667"
inkscape:cx="11.220709"
inkscape:cy="12.00265"
showgrid="false"
inkscape:zoom="23.434245"
inkscape:cx="13.246822"
inkscape:cy="12.489107"
inkscape:window-x="0"
inkscape:window-y="29"
inkscape:window-y="1"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:snap-grids="false"
@@ -191,11 +194,11 @@
id="path19"
d="M 3.4889441,22.442933 21.656486,4.1948239" />
<g
transform="matrix(1.0578651,0,0,0.94530011,-1.65,-0.3)"
style="font-size:10.34677601px;font-weight:bold;line-height:125%;fill:#493d3d;fill-opacity:1;font-family:Century Schoolbook"
transform="matrix(1.0578651,0,0,0.94530011,-1.8206903,0.63879705)"
style="font-weight:bold;font-size:10.34677601px;line-height:125%;font-family:'Century Schoolbook';fill:#493d3d;fill-opacity:1"
id="text21">
<path
d="M 14.42271,4.703743 C 14.22468,4.611056 14.026656,4.5436439 13.828638,4.5015058 13.634822,4.4551648 13.438905,4.4319918 13.240887,4.4319868 12.65945,4.4319922 12.210737,4.6194827 11.894746,4.9944589 11.58296,5.3652315 11.08788,5.9380908 11.072584,6.6330662 l -0.0709,3.2214041 -1.8371429,0 0,-7.0783001 1.9434889,-0.03967 0,1.1628636 c 0.290712,-0.4634538 0.9426,-0.7608454 1.317585,-0.9715158 0.37919,-0.2148699 0.832116,-0.3223082 1.358781,-0.3223155 0.07583,7.3e-6 0.157992,0.00422 0.246476,0.01264 0.08847,0.00422 0.216978,0.01686 0.385515,0.037919 l 0.0063,2.0476511"
d="M 14.42271,4.703743 C 14.22468,4.611056 14.026656,4.5436439 13.828638,4.5015058 13.634822,4.4551648 13.438905,4.4319918 13.240887,4.4319868 12.65945,4.4319922 12.210737,4.6194827 11.894746,4.9944589 11.58296,5.3652315 11.08788,5.9380908 11.072584,6.6330662 l -0.0709,3.2214041 H 9.1645411 V 2.7761702 l 1.9434889,-0.03967 v 1.1628636 c 0.290712,-0.4634538 0.9426,-0.7608454 1.317585,-0.9715158 0.37919,-0.2148699 0.832116,-0.3223082 1.358781,-0.3223155 0.07583,7.3e-6 0.157992,0.00422 0.246476,0.01264 0.08847,0.00422 0.216978,0.01686 0.385515,0.037919 l 0.0063,2.0476511"
style="font-size:12.94317722px;fill:#493d3d"
id="path4866"
inkscape:connector-curvature="0"
@@ -210,12 +213,51 @@
transform="scale(1.320342,0.75737952)"
style="font-size:8.10237503px;line-height:125%;fill:#493d3d;fill-opacity:1;font-family:Bitstream Vera Sans"
id="text29">
<path
d="m 17.091728,15.617771 c -0.249954,7e-6 -0.374928,0.327796 -0.374924,0.983369 l 0,4.652352 c 0.365305,10e-7 0.730614,-0.235103 1.095929,-0.705313 0.32685,-0.420472 0.490278,-1.134827 0.490284,-2.143066 -6e-6,-0.940412 -0.165356,-1.66381 -0.496052,-2.170193 -0.269181,-0.411426 -0.507593,-0.617142 -0.715237,-0.617149 m 0,-1.064751 c 0.538345,8e-6 1.0517,0.298409 1.540068,0.895205 0.526807,0.637501 1.045831,1.623128 1.045838,2.956888 -7e-6,1.225257 -0.519031,2.201844 -1.045838,2.929761 -0.496058,0.687227 -1.134388,1.030842 -1.914992,1.030842 l 0,2.726306 -1.055552,0 0,-2.719524 c -0.76523,0 -1.405482,-0.345875 -1.920758,-1.037624 -0.522971,-0.705311 -0.898062,-1.679637 -0.898061,-2.922978 -10e-7,-1.29307 0.37509,-2.269656 0.898061,-2.929762 0.392225,-0.492808 0.907503,-0.802512 1.545835,-0.929114 l 0,1.105442 c -0.253796,0.10399 -0.492208,0.332317 -0.715237,0.684968 -0.330703,0.519948 -0.524455,1.258949 -0.524454,2.117979 -10e-7,0.913291 0.193751,1.580394 0.524454,2.100334 0.296091,0.465688 0.659476,0.698531 1.09016,0.69853 l 0,-4.659133 c -3e-6,-1.365407 0.476821,-2.048112 1.430476,-2.04812"
style="font-size:11.60540199px;fill:#493d3d"
id="path4869"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccsccccsccsc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
x="30.1875"
y="12.575"
id="text38"
transform="scale(0.75737953,1.320342)"><tspan
sodipodi:role="line"
id="tspan36"
x="30.1875"
y="47.965626" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
x="29.700125"
y="10.680539"
id="text42"
transform="scale(0.75737953,1.320342)"><tspan
sodipodi:role="line"
id="tspan40"
x="29.700125"
y="46.071163" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:37.62418747px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#493d3d;fill-opacity:1;stroke:#493d3d;stroke-width:0.47030237;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
x="17.408667"
y="18.426802"
id="text46"
transform="scale(0.75047264,1.3324936)"><tspan
sodipodi:role="line"
id="tspan44"
x="17.408667"
y="18.426802"
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.28719997px;font-family:Palatino;-inkscape-font-specification:'Palatino, Bold Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#493d3d;fill-opacity:1;stroke:#493d3d;stroke-width:0.47030237;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">θ</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
x="30.872232"
y="16.521296"
id="text50"
transform="scale(0.75737953,1.320342)"><tspan
sodipodi:role="line"
id="tspan48"
x="30.872232"
y="51.911919" /></text>
</g>
<path
style="fill:#ff0000;stroke:#ff0000;stroke-width:0.10395694"

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

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