Browse Source
Add Gerber job file writer in Pcbnew, and a basic reader in Gerbview. Currently disabled
Add Gerber job file writer in Pcbnew, and a basic reader in Gerbview. Currently disabled
Fix also very minor issues in Gerbviewpull/7/merge
30 changed files with 2134 additions and 78 deletions
-
1bitmaps_png/CMakeLists.txt
-
146bitmaps_png/cpp_26/gerber_job_file.cpp
-
818bitmaps_png/sources/gerber_job_file.svg
-
35common/gbr_metadata.cpp
-
1common/pcb_plot_params.keywords
-
3common/wildcards_and_files_ext.cpp
-
2gerbview/CMakeLists.txt
-
4gerbview/events_called_functions.cpp
-
18gerbview/files.cpp
-
4gerbview/gerbview_config.cpp
-
17gerbview/gerbview_frame.cpp
-
20gerbview/gerbview_frame.h
-
15gerbview/gerbview_id.h
-
245gerbview/job_file_reader.cpp
-
81gerbview/menubar.cpp
-
10gerbview/readgerb.cpp
-
1include/bitmaps.h
-
9include/plot_auxiliary_data.h
-
1include/wildcards_and_files_ext.h
-
12kicad/tree_project_frame.cpp
-
1pcbnew/CMakeLists.txt
-
37pcbnew/dialogs/dialog_plot.cpp
-
7pcbnew/dialogs/dialog_plot_base.cpp
-
88pcbnew/dialogs/dialog_plot_base.fbp
-
3pcbnew/dialogs/dialog_plot_base.h
-
388pcbnew/exporters/gerber_jobfile_writer.cpp
-
125pcbnew/exporters/gerber_jobfile_writer.h
-
18pcbnew/pcb_plot_params.cpp
-
6pcbnew/pcb_plot_params.h
-
96pcbnew/pcbplot.cpp
@ -0,0 +1,146 @@ |
|||
|
|||
/* 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, 0x08, 0x14, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x56, 0x69, 0x6c, 0x53, |
|||
0xe9, 0x15, 0x35, 0x23, 0xa6, 0xaa, 0xda, 0x8a, 0xf9, 0x53, 0xca, 0x08, 0x5a, 0x44, 0x01, 0x01, |
|||
0x1a, 0x60, 0x40, 0x45, 0x2c, 0x65, 0xdf, 0x09, 0x61, 0x11, 0xbb, 0x10, 0xc3, 0xbe, 0xa9, 0x02, |
|||
0x04, 0xc3, 0x0f, 0x98, 0x16, 0x04, 0x65, 0x08, 0x59, 0x86, 0x84, 0x6c, 0x10, 0xb2, 0x2f, 0x64, |
|||
0x71, 0x20, 0x21, 0x8b, 0x1d, 0x12, 0x48, 0x1c, 0x27, 0x71, 0x56, 0xc7, 0xf6, 0xb3, 0x1d, 0xe3, |
|||
0x2d, 0x89, 0x63, 0x27, 0x4e, 0xf2, 0xfc, 0xbc, 0xc7, 0x8e, 0xf7, 0xed, 0xf6, 0x1a, 0x01, 0x22, |
|||
0x4c, 0xa7, 0x6a, 0xa5, 0x3e, 0xe9, 0xca, 0x7e, 0xcf, 0xcf, 0xf7, 0x7c, 0xf7, 0xdc, 0xf3, 0x9d, |
|||
0xfb, 0xd1, 0x68, 0x9f, 0x5d, 0xa7, 0x4f, 0x9f, 0x3e, 0x7c, 0xee, 0xdc, 0xb9, 0x98, 0x43, 0x87, |
|||
0x0e, 0xed, 0xde, 0xb3, 0x67, 0xcf, 0xef, 0xc3, 0xcf, 0x2e, 0x5e, 0xbc, 0xf8, 0xe5, 0xb1, 0x63, |
|||
0xc7, 0xfe, 0x79, 0xf8, 0xf0, 0xe1, 0x5d, 0x78, 0x3b, 0x89, 0xf6, 0xff, 0xb8, 0xb2, 0xb3, 0xb3, |
|||
0xe9, 0x81, 0x40, 0xe0, 0xe5, 0xd0, 0xd0, 0x10, 0x83, 0xcd, 0x66, 0x33, 0x93, 0x92, 0x92, 0xe8, |
|||
0x17, 0x2e, 0x5c, 0x28, 0x2b, 0x2d, 0x2d, 0x65, 0x0b, 0x44, 0xe2, 0xa6, 0x2a, 0x76, 0x87, 0x92, |
|||
0x23, 0xe9, 0x1f, 0xe0, 0xf6, 0x0e, 0xa9, 0xdb, 0xa4, 0x1a, 0x2e, 0x5b, 0xa4, 0xbe, 0xdd, 0xd3, |
|||
0xd3, 0xf3, 0xdb, 0xff, 0x09, 0x64, 0xdb, 0xb6, 0x6d, 0xd3, 0x3b, 0x3b, 0x3b, 0xab, 0x83, 0xc1, |
|||
0x60, 0xf4, 0xa9, 0x53, 0xa7, 0xca, 0x32, 0x32, 0x32, 0xf2, 0x48, 0x92, 0xcc, 0x31, 0x1a, 0x8d, |
|||
0x5c, 0xa2, 0x4f, 0x63, 0x6d, 0x93, 0x0f, 0x07, 0x98, 0x6f, 0x8d, 0xde, 0x8c, 0x36, 0xd2, 0xf9, |
|||
0x53, 0x9d, 0xca, 0x92, 0xd6, 0xae, 0xeb, 0xaf, 0x14, 0x92, 0x64, 0x13, 0xa1, 0xb4, 0xd6, 0x75, |
|||
0x29, 0xa2, 0xff, 0x6b, 0xa0, 0x03, 0x07, 0x0e, 0xec, 0x1d, 0x1e, 0x1e, 0xae, 0x1c, 0x1b, 0x1b, |
|||
0x8b, 0xb9, 0x73, 0xe7, 0xce, 0xb3, 0xb8, 0xb8, 0xb8, 0xbc, 0xe3, 0xc7, 0x8f, 0xb3, 0x1b, 0xba, |
|||
0x04, 0xae, 0x57, 0x52, 0x8b, 0xb7, 0x90, 0xb0, 0x8e, 0xd1, 0x25, 0xe3, 0x26, 0x46, 0x9f, 0xcf, |
|||
0x58, 0xdb, 0xe7, 0x35, 0x57, 0x4a, 0xac, 0xa6, 0xd4, 0x86, 0xbe, 0xd1, 0x18, 0xc6, 0x5b, 0x75, |
|||
0x45, 0xbb, 0x72, 0xbc, 0xec, 0x4d, 0x47, 0xdb, 0x2f, 0x52, 0x8b, 0x2b, 0xdf, 0x8e, 0x91, 0x18, |
|||
0x8e, 0x13, 0x27, 0x4e, 0xbc, 0x8e, 0x8d, 0x8d, 0x6d, 0xbd, 0x7c, 0xf9, 0x72, 0xd3, 0xc6, 0x8d, |
|||
0x1b, 0x85, 0x5b, 0xb7, 0x6e, 0x25, 0x52, 0xb2, 0x0a, 0x8c, 0x15, 0xbc, 0x41, 0x7f, 0x42, 0x5d, |
|||
0xaf, 0x35, 0xea, 0x25, 0xdf, 0x9a, 0x58, 0x27, 0x37, 0xff, 0x54, 0xc9, 0x33, 0x3d, 0xae, 0x93, |
|||
0x18, 0x32, 0x58, 0x32, 0x7d, 0x26, 0x4b, 0x66, 0xcc, 0x6e, 0x56, 0x19, 0xca, 0xc5, 0x66, 0xaa, |
|||
0xba, 0x43, 0xea, 0x2d, 0x78, 0x51, 0x23, 0x39, 0x72, 0xe4, 0xc8, 0x8e, 0x9f, 0x01, 0x61, 0xe2, |
|||
0x4c, 0x00, 0x60, 0x62, 0x54, 0xda, 0x6c, 0xb6, 0x2e, 0xfc, 0xec, 0xd4, 0xe9, 0x74, 0x3c, 0xb9, |
|||
0x5c, 0x2e, 0x92, 0xc9, 0x64, 0xe2, 0x66, 0x81, 0xd4, 0x5f, 0x22, 0xf7, 0xdb, 0x6a, 0x94, 0x4e, |
|||
0xf3, 0x2b, 0xac, 0xe2, 0x75, 0xaf, 0xd3, 0xd0, 0xa2, 0xf1, 0xe8, 0x39, 0x6a, 0x97, 0xbe, 0x93, |
|||
0x0c, 0x91, 0xdd, 0x64, 0x80, 0x2a, 0x69, 0x55, 0x91, 0xcd, 0x1a, 0x2f, 0xc9, 0x90, 0x98, 0xf5, |
|||
0x95, 0xac, 0x0e, 0x1f, 0xb2, 0x70, 0xeb, 0x67, 0x40, 0x8f, 0x1e, 0x3d, 0xca, 0xc2, 0xe4, 0x65, |
|||
0x7c, 0x3e, 0xbf, 0xbe, 0xb2, 0xb2, 0x92, 0xa8, 0xa9, 0xa9, 0xe1, 0x15, 0x15, 0x15, 0x09, 0xbb, |
|||
0xbb, 0xbb, 0x45, 0x95, 0xd5, 0x0c, 0x55, 0x0d, 0x5f, 0xe5, 0xa7, 0xf7, 0xd8, 0xcd, 0xa5, 0x7c, |
|||
0xca, 0xdc, 0xa8, 0x72, 0x53, 0x6f, 0x14, 0x76, 0xea, 0xf5, 0x5b, 0xa3, 0xbe, 0x51, 0x6e, 0xa6, |
|||
0x08, 0x0a, 0x46, 0xba, 0x87, 0xdd, 0xba, 0xf2, 0x2e, 0xd5, 0x28, 0xbb, 0x6f, 0x4c, 0xc5, 0xd5, |
|||
0x81, 0xb6, 0x8a, 0x23, 0xf1, 0xfe, 0x18, 0x9b, 0x28, 0xde, 0xbb, 0x77, 0xef, 0xa6, 0x7f, 0x0b, |
|||
0xd4, 0xda, 0xda, 0xda, 0x5c, 0x5c, 0x5c, 0x4c, 0x60, 0x08, 0x58, 0x2c, 0x16, 0x91, 0x9f, 0x9f, |
|||
0x2f, 0x62, 0xd6, 0xb1, 0x46, 0x2a, 0xb8, 0x6a, 0x1f, 0x5d, 0x64, 0x35, 0x96, 0xf0, 0x74, 0x06, |
|||
0xa6, 0x58, 0xa7, 0x67, 0xf7, 0xda, 0x75, 0x0c, 0x62, 0x84, 0xac, 0x97, 0x19, 0x48, 0x99, 0x09, |
|||
0x74, 0xfc, 0x21, 0x87, 0xae, 0x49, 0x4a, 0x92, 0xcd, 0x32, 0x72, 0x58, 0x6e, 0x01, 0x75, 0x6d, |
|||
0x97, 0xd2, 0x51, 0xf5, 0x8a, 0x33, 0x24, 0x91, 0x48, 0x18, 0x97, 0x2e, 0x5d, 0xca, 0xda, 0xbe, |
|||
0x7d, 0xfb, 0x82, 0x09, 0x40, 0x74, 0x3a, 0xbd, 0xfb, 0xc1, 0x83, 0x07, 0xa2, 0x70, 0x24, 0x24, |
|||
0x24, 0x88, 0x1a, 0x1a, 0x1a, 0x44, 0x79, 0x05, 0x25, 0x5a, 0x46, 0xb7, 0xca, 0x97, 0xcd, 0x19, |
|||
0x34, 0xbe, 0xe9, 0x75, 0xea, 0x0b, 0x5b, 0x94, 0x64, 0xe7, 0xa0, 0x83, 0x6a, 0x94, 0x51, 0xba, |
|||
0x6e, 0xb5, 0xd5, 0xa0, 0xb2, 0x81, 0x4e, 0x42, 0x3a, 0x0c, 0xbc, 0x7e, 0xca, 0xc0, 0x57, 0xe9, |
|||
0x75, 0xda, 0x71, 0x18, 0xae, 0xe7, 0xca, 0xc6, 0x53, 0x33, 0x8a, 0x75, 0x98, 0x33, 0xce, 0xeb, |
|||
0xf5, 0xd2, 0x1b, 0x1b, 0x1b, 0xab, 0x4e, 0x9e, 0x3c, 0x79, 0xe5, 0x53, 0x20, 0xfe, 0x07, 0xa0, |
|||
0x70, 0x20, 0x8d, 0xa2, 0xec, 0xec, 0x5c, 0x45, 0x75, 0x13, 0xdf, 0x97, 0xdf, 0xa1, 0x35, 0xd7, |
|||
0xf7, 0xda, 0xf5, 0xc5, 0x2d, 0x0a, 0xb2, 0xb5, 0xcf, 0x4a, 0xb2, 0x24, 0x5a, 0xaa, 0x67, 0xc4, |
|||
0xae, 0x1f, 0x1a, 0x0b, 0x18, 0x35, 0x66, 0xb7, 0x49, 0xaa, 0x35, 0x99, 0xe5, 0xc3, 0x46, 0xa3, |
|||
0xc1, 0x05, 0xd4, 0xab, 0x66, 0x9e, 0x3b, 0x25, 0xed, 0x99, 0x02, 0x73, 0x46, 0x85, 0x03, 0xf7, |
|||
0x24, 0xfd, 0xea, 0xd5, 0xab, 0xc9, 0x1f, 0x81, 0x9e, 0x3f, 0x7f, 0x4e, 0x7c, 0x0e, 0x54, 0x52, |
|||
0x52, 0xd2, 0x53, 0x5a, 0xd1, 0xe0, 0x2e, 0xe7, 0x0e, 0x39, 0x9b, 0x07, 0xdc, 0x86, 0x12, 0x8e, |
|||
0x9c, 0xec, 0xa1, 0x3c, 0x54, 0xbb, 0x7c, 0xc4, 0x20, 0x1f, 0xb5, 0x99, 0x06, 0x4d, 0x4e, 0xcb, |
|||
0x88, 0xd5, 0x65, 0xd5, 0xe8, 0xad, 0x63, 0xa4, 0xcd, 0x65, 0x32, 0x3a, 0xfd, 0x96, 0x82, 0x12, |
|||
0x86, 0x5f, 0x22, 0x51, 0x64, 0xbd, 0x07, 0x8a, 0xc3, 0x5e, 0x57, 0xef, 0xda, 0xb5, 0x6b, 0x19, |
|||
0x2d, 0x3e, 0x3e, 0x3e, 0x0b, 0x4b, 0xac, 0x2a, 0x2b, 0x2b, 0x9b, 0x00, 0x84, 0x96, 0x43, 0xae, |
|||
0x58, 0xb1, 0xc2, 0xbb, 0x62, 0xc5, 0x4a, 0x77, 0xe1, 0xcb, 0x06, 0x5f, 0x39, 0x31, 0x6c, 0x29, |
|||
0x66, 0xf7, 0x50, 0xe8, 0x04, 0x86, 0x16, 0x91, 0xca, 0x24, 0xd7, 0x9a, 0x2c, 0xc3, 0x16, 0xa7, |
|||
0x8d, 0xb2, 0x7b, 0xc6, 0x47, 0x4c, 0x63, 0x0e, 0x9b, 0x2f, 0x64, 0x15, 0x2a, 0x06, 0x3c, 0x09, |
|||
0x49, 0xd9, 0xf6, 0x4f, 0xaa, 0x29, 0xba, 0x76, 0xed, 0xda, 0xd3, 0x77, 0x3d, 0x0a, 0x03, 0x8d, |
|||
0x8f, 0x8f, 0xbf, 0x89, 0x89, 0x89, 0x21, 0x66, 0xce, 0x9c, 0xa9, 0x99, 0x3a, 0x75, 0xaa, 0x68, |
|||
0xfa, 0xf4, 0xe9, 0xa2, 0xc5, 0x8b, 0x17, 0xdb, 0x9b, 0x9a, 0x9a, 0x60, 0xf7, 0xee, 0xdd, 0xde, |
|||
0xb8, 0xf8, 0x64, 0xb2, 0x94, 0xc9, 0xf1, 0xde, 0x4f, 0xcd, 0x77, 0x70, 0x7a, 0x06, 0xcc, 0xdd, |
|||
0x0a, 0xad, 0x59, 0x3e, 0xa8, 0x1f, 0x1b, 0x35, 0xdb, 0xc7, 0xcd, 0x2e, 0xaf, 0x53, 0x6f, 0x73, |
|||
0xb8, 0x65, 0xaa, 0x41, 0x5f, 0x52, 0x72, 0x6e, 0x40, 0x2e, 0x55, 0x3c, 0xf9, 0x50, 0x0d, 0x97, |
|||
0xcb, 0xad, 0xde, 0xb1, 0x63, 0xc7, 0x5f, 0x3e, 0x02, 0xa1, 0xaf, 0xb1, 0x30, 0xb1, 0x75, 0xe7, |
|||
0xce, 0x9d, 0xa1, 0x69, 0xd3, 0xa6, 0x39, 0x10, 0xcc, 0xba, 0x7a, 0xf5, 0x6a, 0xbf, 0x42, 0xa1, |
|||
0x80, 0x1b, 0x37, 0x6e, 0x04, 0x67, 0xcd, 0x9a, 0xe5, 0x8a, 0x88, 0x88, 0x74, 0x1d, 0x3f, 0x7e, |
|||
0x22, 0xb4, 0x71, 0xd3, 0xe6, 0x50, 0x15, 0xab, 0xdd, 0xd5, 0x37, 0xa2, 0xc7, 0x4a, 0x6c, 0xce, |
|||
0x1e, 0xa5, 0xda, 0xf7, 0xa2, 0xe2, 0x75, 0x30, 0x39, 0x29, 0x27, 0xf0, 0x30, 0x3e, 0xd5, 0xfa, |
|||
0x69, 0x35, 0x57, 0xae, 0x5c, 0x49, 0xfb, 0x28, 0xef, 0x30, 0xd0, 0xe8, 0xe8, 0x28, 0x67, 0xc1, |
|||
0x82, 0x05, 0x4e, 0x14, 0x04, 0xe4, 0xe5, 0xe5, 0x41, 0x6e, 0x6e, 0x2e, 0xf4, 0xf7, 0xf7, 0x83, |
|||
0xd9, 0x6c, 0x06, 0xac, 0x16, 0x04, 0x02, 0x01, 0x20, 0xb5, 0xa0, 0x56, 0xab, 0x61, 0xeb, 0xd6, |
|||
0x6d, 0x81, 0x9b, 0x3f, 0x44, 0xd9, 0x1f, 0x26, 0x64, 0xb9, 0x1f, 0x25, 0xe6, 0xba, 0xd3, 0x9e, |
|||
0x3e, 0x73, 0x77, 0xf0, 0x44, 0xa1, 0x86, 0xa6, 0x8e, 0xe0, 0xcd, 0xbf, 0xff, 0x68, 0x44, 0x9f, |
|||
0xfc, 0xb4, 0x9a, 0x25, 0x1f, 0x81, 0xd0, 0xcf, 0x72, 0x4c, 0x26, 0x53, 0xe7, 0xe6, 0xcd, 0x9b, |
|||
0x25, 0x68, 0x3b, 0x01, 0x8d, 0x46, 0x03, 0x14, 0x45, 0x01, 0x1a, 0x29, 0x84, 0x2b, 0x0a, 0x7f, |
|||
0x47, 0xef, 0x03, 0x7c, 0x07, 0xf0, 0x5d, 0x38, 0x7a, 0xf4, 0x28, 0x85, 0x8e, 0x21, 0x40, 0xaa, |
|||
0x45, 0xa9, 0xa9, 0xa9, 0x04, 0x93, 0x59, 0xab, 0x2c, 0x2a, 0x29, 0x1f, 0x7b, 0xdb, 0xd7, 0x0f, |
|||
0x8f, 0xd3, 0x0a, 0xfc, 0xaf, 0xd3, 0x4e, 0x6a, 0x2c, 0xfc, 0x64, 0xce, 0x84, 0x6a, 0xc2, 0x57, |
|||
0x54, 0x54, 0xd4, 0x73, 0xa7, 0xd3, 0xd9, 0xb5, 0x72, 0xe5, 0xca, 0x91, 0x87, 0x0f, 0x1f, 0x86, |
|||
0xc2, 0x00, 0x62, 0xb1, 0x18, 0xd6, 0xac, 0x59, 0xe3, 0x5b, 0xb6, 0x6c, 0xd9, 0xf8, 0xaa, 0x55, |
|||
0xab, 0x3c, 0x4f, 0x9f, 0x3e, 0x0d, 0xa2, 0x2d, 0x41, 0x73, 0x73, 0x33, 0xe0, 0xbd, 0xf3, 0xc9, |
|||
0x93, 0x27, 0x02, 0x9c, 0x59, 0x42, 0x1c, 0x21, 0x04, 0x2e, 0xa4, 0xbb, 0xae, 0xae, 0x8e, 0x68, |
|||
0x62, 0xa4, 0x85, 0x94, 0xa5, 0x11, 0x60, 0xab, 0x58, 0x0c, 0xaa, 0xb8, 0x5f, 0x05, 0xff, 0x76, |
|||
0x60, 0xe9, 0x9a, 0x09, 0x40, 0xfb, 0xf6, 0xed, 0x93, 0x61, 0x35, 0x2e, 0x4c, 0xec, 0x57, 0x2a, |
|||
0x95, 0xe0, 0x72, 0xb9, 0x00, 0x4d, 0xd1, 0x3f, 0x7f, 0xfe, 0x7c, 0xf9, 0xd2, 0xa5, 0x4b, 0x85, |
|||
0x6d, 0x6d, 0x6d, 0xc4, 0xdc, 0xb9, 0x73, 0xdd, 0x58, 0x05, 0xa0, 0xff, 0xc1, 0xf5, 0xeb, 0xd7, |
|||
0x43, 0xcb, 0x97, 0x2f, 0xf7, 0xcd, 0x9e, 0x3d, 0xdb, 0x81, 0x8b, 0x14, 0x22, 0xbd, 0xbc, 0x97, |
|||
0x39, 0x51, 0x7d, 0x03, 0xa5, 0xab, 0x01, 0x82, 0x1e, 0x00, 0xe9, 0x35, 0xb0, 0xe7, 0xff, 0x11, |
|||
0xa4, 0xb1, 0xb4, 0xec, 0x09, 0x40, 0x6b, 0xd7, 0xae, 0xa5, 0x6a, 0x6b, 0x6b, 0x01, 0xfb, 0x04, |
|||
0x1e, 0x8f, 0x07, 0x1c, 0x0e, 0x07, 0x60, 0x75, 0x5e, 0x4c, 0x26, 0x8c, 0x88, 0x88, 0x20, 0xec, |
|||
0x76, 0x7b, 0x07, 0x82, 0x5a, 0x98, 0x4c, 0xe6, 0xbb, 0x5e, 0x85, 0xdf, 0xcd, 0xca, 0xca, 0x82, |
|||
0x6f, 0xbe, 0xf9, 0xc6, 0x8b, 0xcf, 0x78, 0xb8, 0x10, 0x11, 0x83, 0xc1, 0x10, 0x97, 0xdd, 0xfa, |
|||
0xf3, 0xb8, 0x47, 0x5d, 0x04, 0x60, 0xe6, 0x40, 0x80, 0xb3, 0x0d, 0xb4, 0xb1, 0x5f, 0x84, 0x88, |
|||
0x68, 0xda, 0xb7, 0x1f, 0x81, 0x70, 0xbf, 0xb0, 0xb6, 0x6c, 0xd9, 0x62, 0x42, 0x9a, 0x7c, 0x2a, |
|||
0x95, 0x0a, 0xac, 0x56, 0x2b, 0xe0, 0x38, 0x0f, 0xe0, 0x6c, 0xea, 0xc7, 0x7d, 0x24, 0x44, 0xfb, |
|||
0x10, 0x63, 0x52, 0x0f, 0x87, 0xc3, 0x81, 0x96, 0x96, 0x16, 0xd8, 0xb0, 0x61, 0x83, 0x7f, 0xde, |
|||
0xbc, 0x79, 0x36, 0x64, 0x60, 0xf4, 0xe0, 0xc1, 0x83, 0xc2, 0xfa, 0xfa, 0x7a, 0x02, 0xed, 0x4a, |
|||
0x78, 0xff, 0xf6, 0xf7, 0x75, 0x8a, 0xdc, 0x45, 0x81, 0xa0, 0x9b, 0x04, 0x50, 0xc5, 0x83, 0xbb, |
|||
0x7c, 0x21, 0x48, 0xee, 0xd1, 0xe4, 0x00, 0xef, 0xe7, 0x13, 0x36, 0x38, 0xbc, 0x8b, 0x33, 0xce, |
|||
0x9c, 0x39, 0xd3, 0x9a, 0x98, 0x98, 0x18, 0xd4, 0xeb, 0xf5, 0x20, 0x95, 0x4a, 0x01, 0xa5, 0xee, |
|||
0xc3, 0x7e, 0x38, 0xc2, 0xbd, 0x4a, 0x49, 0x49, 0x81, 0xf0, 0x9e, 0x42, 0xa3, 0x85, 0x25, 0x4b, |
|||
0x96, 0x38, 0xb0, 0x02, 0x1e, 0x3a, 0x07, 0x0f, 0x9d, 0x83, 0x87, 0x63, 0x9c, 0x8f, 0x3d, 0x12, |
|||
0xa2, 0x29, 0xa7, 0x97, 0x3e, 0x88, 0xec, 0xb3, 0x70, 0x6f, 0x02, 0x38, 0x07, 0x00, 0x04, 0x87, |
|||
0xc0, 0x90, 0x32, 0x05, 0xba, 0xee, 0xd0, 0x4e, 0x4f, 0x00, 0xc2, 0x86, 0x17, 0x44, 0x46, 0x46, |
|||
0x7a, 0x70, 0x4f, 0xbd, 0x93, 0x71, 0xb8, 0x27, 0x38, 0xd6, 0xa1, 0xbd, 0xbd, 0x1d, 0xd0, 0xcd, |
|||
0x21, 0x4c, 0x1d, 0xbe, 0x03, 0x48, 0xa9, 0x13, 0xcf, 0x15, 0x44, 0x41, 0x41, 0x01, 0x51, 0x58, |
|||
0x58, 0x48, 0x68, 0xb5, 0x5a, 0x1e, 0xfe, 0x46, 0xa0, 0x88, 0xe8, 0xdf, 0x7d, 0x77, 0x2c, 0xbf, |
|||
0xe5, 0xfe, 0x57, 0x5a, 0xbf, 0xb1, 0x13, 0x60, 0x94, 0x0e, 0xbe, 0xba, 0x55, 0xf0, 0xf6, 0xee, |
|||
0x24, 0x27, 0xeb, 0x07, 0xda, 0x57, 0x34, 0xb4, 0x9b, 0x4c, 0xbf, 0xdf, 0x5f, 0x8e, 0x94, 0x58, |
|||
0x90, 0x82, 0x77, 0xc9, 0xd2, 0xd3, 0xd3, 0xdf, 0xd1, 0x14, 0xa6, 0x0b, 0x57, 0x0b, 0x99, 0x99, |
|||
0x99, 0x80, 0x54, 0x06, 0xd2, 0xd2, 0xd2, 0xe0, 0xec, 0xd9, 0xb3, 0xc1, 0xe8, 0xe8, 0xe8, 0x21, |
|||
0xac, 0x9c, 0x8b, 0x63, 0x9f, 0x87, 0xbd, 0x25, 0x5e, 0xbc, 0x78, 0x21, 0x08, 0x1f, 0x64, 0xd6, |
|||
0xad, 0x5b, 0xf7, 0xed, 0x95, 0xcd, 0xb4, 0xc3, 0x83, 0xd5, 0x91, 0x21, 0x08, 0x7a, 0x51, 0x18, |
|||
0xdf, 0x03, 0x95, 0xfe, 0x35, 0xd4, 0xdc, 0x9c, 0xf2, 0x88, 0x86, 0x0a, 0xdb, 0x87, 0x52, 0x4d, |
|||
0x43, 0x85, 0xa9, 0x71, 0x74, 0x7b, 0x17, 0x2e, 0x5c, 0x38, 0xb8, 0x68, 0xd1, 0x22, 0x35, 0x86, |
|||
0x2b, 0x27, 0x27, 0x07, 0xce, 0x9f, 0x3f, 0x1f, 0x98, 0x33, 0x67, 0x8e, 0x09, 0x05, 0xc2, 0x42, |
|||
0xf5, 0x99, 0x71, 0x63, 0xdb, 0xf7, 0xef, 0xdf, 0xcf, 0x46, 0x47, 0xee, 0x42, 0xd5, 0xb5, 0xdf, |
|||
0xbd, 0x7b, 0xb7, 0x11, 0x29, 0x6f, 0xc4, 0x93, 0xd2, 0x87, 0x7d, 0xf3, 0x1b, 0xfa, 0xa5, 0x49, |
|||
0x0d, 0x63, 0x92, 0xc7, 0x20, 0x29, 0x3f, 0x0f, 0x65, 0x09, 0x27, 0xe1, 0xf6, 0x3f, 0x6e, 0x5e, |
|||
0xfd, 0x54, 0x80, 0x93, 0x26, 0x4f, 0x9e, 0xfc, 0xd7, 0x0f, 0x37, 0x33, 0x66, 0xcc, 0xb8, 0x8f, |
|||
0x49, 0x00, 0x55, 0xa9, 0xc3, 0xdb, 0xdf, 0xbd, 0x7f, 0xfc, 0x25, 0xc6, 0xb4, 0xf0, 0x17, 0xa4, |
|||
0xf0, 0x4f, 0x28, 0xa4, 0x64, 0xec, 0x4d, 0x35, 0x0a, 0xa2, 0x6a, 0xfd, 0xfa, 0xf5, 0x8b, 0x3f, |
|||
0xfc, 0x37, 0x72, 0x21, 0x6d, 0x69, 0xc1, 0xad, 0x4d, 0xdd, 0xed, 0x1d, 0x1c, 0x6f, 0x7a, 0x46, |
|||
0xde, 0xc8, 0xbd, 0x7b, 0xf7, 0xa6, 0xfc, 0xe2, 0x89, 0x08, 0x41, 0xd7, 0xa1, 0xc9, 0x92, 0x68, |
|||
0xb0, 0xe2, 0xff, 0x74, 0x72, 0xc2, 0x85, 0x2c, 0x41, 0xe1, 0xec, 0xfb, 0xec, 0xf1, 0x17, 0x18, |
|||
0xbf, 0xc6, 0xf8, 0xc3, 0xfb, 0x4f, 0xda, 0xbf, 0x00, 0xbc, 0x29, 0xf9, 0xf3, 0xe7, 0x0e, 0xc6, |
|||
0x86, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, |
|||
}; |
|||
|
|||
const BITMAP_OPAQUE gerber_job_file_xpm[1] = {{ png, sizeof( png ), "gerber_job_file_xpm" }}; |
|||
|
|||
//EOF
|
|||
@ -0,0 +1,818 @@ |
|||
<?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="gerber_job_file.svg"> |
|||
<metadata |
|||
id="metadata172"> |
|||
<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="1170" |
|||
inkscape:window-height="836" |
|||
id="namedview170" |
|||
showgrid="true" |
|||
inkscape:zoom="9.3622609" |
|||
inkscape:cx="13.030913" |
|||
inkscape:cy="4.5453342" |
|||
inkscape:window-x="413" |
|||
inkscape:window-y="162" |
|||
inkscape:window-maximized="0" |
|||
inkscape:current-layer="svg2" |
|||
showguides="false"> |
|||
<inkscape:grid |
|||
type="xygrid" |
|||
id="grid3100" |
|||
empspacing="5" |
|||
visible="true" |
|||
enabled="true" |
|||
snapvisiblegridlinesonly="true" |
|||
originx="0" |
|||
originy="0" |
|||
spacingx="1.0666667" |
|||
spacingy="1.0666667" /> |
|||
</sodipodi:namedview> |
|||
<defs |
|||
id="defs4"> |
|||
<linearGradient |
|||
id="ab" |
|||
y2="4.2192998" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="7.5955" |
|||
gradientTransform="matrix(0.88924,0,0,0.78227,0.62292,7.6472)" |
|||
y1="43.993999" |
|||
x1="40.751999"> |
|||
<stop |
|||
stop-color="#333" |
|||
offset="0" |
|||
id="stop7" /> |
|||
<stop |
|||
stop-color="#474747" |
|||
offset="1" |
|||
id="stop9" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="a" |
|||
y2="19500" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="15000" |
|||
y1="14100" |
|||
x1="10100"> |
|||
<stop |
|||
stop-color="#f5fffa" |
|||
offset="0" |
|||
id="stop12" /> |
|||
<stop |
|||
stop-color="#6f6d7f" |
|||
offset="1.2" |
|||
id="stop14" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="b" |
|||
y2="19500" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="15000" |
|||
y1="14100" |
|||
x1="10100"> |
|||
<stop |
|||
stop-color="#fff" |
|||
stop-opacity="0.698" |
|||
offset="0" |
|||
id="stop17" /> |
|||
<stop |
|||
stop-color="#5db7ff" |
|||
stop-opacity="0.698" |
|||
offset="1.2" |
|||
id="stop19" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="x" |
|||
y2="19500" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="15000" |
|||
y1="14100" |
|||
x1="10100"> |
|||
<stop |
|||
stop-color="#f5ffff" |
|||
offset="0" |
|||
id="stop22" /> |
|||
<stop |
|||
stop-color="#fff" |
|||
stop-opacity="0" |
|||
offset="1.2" |
|||
id="stop24" /> |
|||
</linearGradient> |
|||
<radialGradient |
|||
id="ac" |
|||
xlink:href="#b" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="17526" |
|||
cx="18632" |
|||
gradientTransform="matrix(0.00205653,0,0,0.00205653,35.864533,-12.1536)" |
|||
r="40170" /> |
|||
<radialGradient |
|||
id="ad" |
|||
xlink:href="#b" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="17831" |
|||
cx="18969" |
|||
r="23166" |
|||
gradientTransform="matrix(0.00191701,0,0,0.00191701,38.437333,-10.359467)" /> |
|||
<radialGradient |
|||
id="ae" |
|||
xlink:href="#a" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="27370" |
|||
cx="25538" |
|||
gradientTransform="matrix(0.00194549,0,0,0.00194549,24.0288,-25.181866)" |
|||
r="3682.2" /> |
|||
<radialGradient |
|||
id="af" |
|||
xlink:href="#x" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="17398" |
|||
cx="18401" |
|||
gradientTransform="matrix(0.00191701,0,0,0.00191701,38.242133,-10.359467)" |
|||
r="11888" /> |
|||
<radialGradient |
|||
id="ag" |
|||
xlink:href="#a" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="15674" |
|||
cx="16467" |
|||
gradientTransform="matrix(0.00204277,0,0,0.00207051,35.864533,-12.1536)" |
|||
r="3055.2" /> |
|||
<radialGradient |
|||
id="ah" |
|||
xlink:href="#b" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="17753" |
|||
cx="18300" |
|||
gradientTransform="matrix(0.00205653,0,0,0.00205653,35.864533,-12.1536)" |
|||
r="28430" /> |
|||
<radialGradient |
|||
id="ai" |
|||
xlink:href="#a" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="33086" |
|||
cx="-2182.7" |
|||
gradientTransform="matrix(0.00349152,0,0,0.00121131,33.954133,16.765867)" |
|||
r="11540" /> |
|||
<radialGradient |
|||
id="aj" |
|||
xlink:href="#a" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="18596" |
|||
cx="17070" |
|||
gradientTransform="matrix(0.00208203,0,0,0.00203136,35.864533,-12.1536)" |
|||
r="3734.6001" /> |
|||
<linearGradient |
|||
id="ao" |
|||
y2="39368" |
|||
xlink:href="#x" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="2312.5" |
|||
gradientTransform="matrix(0.00349152,0,0,0.00121131,33.954133,16.765867)" |
|||
y1="39560" |
|||
x1="-1083.8" /> |
|||
<radialGradient |
|||
id="ak" |
|||
xlink:href="#b" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="11246" |
|||
cx="13190" |
|||
gradientTransform="matrix(0.00173621,0,0,0.00173621,34.7392,-13.975467)" |
|||
r="16248" /> |
|||
<linearGradient |
|||
id="ap" |
|||
y2="18951" |
|||
xlink:href="#a" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="12508" |
|||
gradientTransform="matrix(0.00205653,0,0,0.00205653,35.864533,-12.1536)" |
|||
y1="-85.142998" |
|||
x1="-1308.3" /> |
|||
<radialGradient |
|||
id="al" |
|||
xlink:href="#a" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="29167" |
|||
cx="26631" |
|||
gradientTransform="matrix(0.00178912,0,0,0.00178912,42.586666,-6.9703469)" |
|||
r="4284.2002" /> |
|||
<linearGradient |
|||
id="y" |
|||
y2="20482" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="6753.3999" |
|||
gradientTransform="matrix(0.00141995,0,0,0.00297856,33.954133,16.765867)" |
|||
y1="27356" |
|||
x1="850.32001"> |
|||
<stop |
|||
stop-color="#a66500" |
|||
offset="0" |
|||
id="stop39" /> |
|||
<stop |
|||
stop-color="#da8f00" |
|||
offset="1" |
|||
id="stop41" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="z" |
|||
y2="21261" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="3741.1001" |
|||
gradientTransform="matrix(0.001344,0,0,0.00314709,33.954133,16.765867)" |
|||
y1="21261" |
|||
x1="-3478.8999"> |
|||
<stop |
|||
stop-color="#eda700" |
|||
offset="0" |
|||
id="stop44" /> |
|||
<stop |
|||
stop-color="#fff" |
|||
offset=".38824" |
|||
id="stop46" /> |
|||
<stop |
|||
stop-color="#ffcb50" |
|||
offset="0.7" |
|||
id="stop48" /> |
|||
<stop |
|||
stop-color="#ed8700" |
|||
offset="1" |
|||
id="stop50" /> |
|||
</linearGradient> |
|||
<linearGradient |
|||
id="aa" |
|||
y2="29618" |
|||
xlink:href="#a" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="24590" |
|||
gradientTransform="matrix(0.00205653,0,0,0.00205653,35.864533,-12.1536)" |
|||
y1="405.03" |
|||
x1="389.39999" /> |
|||
<radialGradient |
|||
id="am" |
|||
gradientUnits="userSpaceOnUse" |
|||
cy="10444" |
|||
cx="11715" |
|||
gradientTransform="matrix(0.00205653,0,0,0.00205653,35.864533,-12.1536)" |
|||
r="15132"> |
|||
<stop |
|||
stop-color="#f5ffff" |
|||
stop-opacity=".49020" |
|||
offset="0" |
|||
id="stop54" /> |
|||
<stop |
|||
stop-color="#fff" |
|||
stop-opacity="0" |
|||
offset="1.2" |
|||
id="stop56" /> |
|||
</radialGradient> |
|||
<linearGradient |
|||
inkscape:collect="always" |
|||
xlink:href="#ab" |
|||
id="linearGradient3191" |
|||
gradientUnits="userSpaceOnUse" |
|||
gradientTransform="matrix(0.94852267,0,0,0.83442133,0.664448,8.1570133)" |
|||
x1="40.751999" |
|||
y1="43.993999" |
|||
x2="7.5955" |
|||
y2="4.2192998" /> |
|||
<linearGradient |
|||
inkscape:collect="always" |
|||
xlink:href="#ab" |
|||
id="linearGradient1016" |
|||
gradientUnits="userSpaceOnUse" |
|||
gradientTransform="matrix(0.94852267,0,0,0.83442133,0.664448,8.1570133)" |
|||
x1="40.751999" |
|||
y1="43.993999" |
|||
x2="7.5955" |
|||
y2="4.2192998" /> |
|||
<linearGradient |
|||
id="a-6" |
|||
y2="39.685001" |
|||
gradientUnits="userSpaceOnUse" |
|||
x2="34.534" |
|||
gradientTransform="matrix(0.92673,0,0,0.84499,4.7271,52.187)" |
|||
y1="12.285" |
|||
x1="14.463"> |
|||
<stop |
|||
stop-color="#c9c9c9" |
|||
offset="0" |
|||
id="stop1040" /> |
|||
<stop |
|||
stop-color="#f8f8f8" |
|||
offset=".25" |
|||
id="stop1042" /> |
|||
<stop |
|||
stop-color="#e2e2e2" |
|||
offset=".5" |
|||
id="stop1044" /> |
|||
<stop |
|||
stop-color="#b0b0b0" |
|||
offset=".75" |
|||
id="stop1046" /> |
|||
<stop |
|||
stop-color="#c9c9c9" |
|||
offset="1" |
|||
id="stop1048" /> |
|||
</linearGradient> |
|||
</defs> |
|||
<g |
|||
id="g1010" |
|||
transform="matrix(0.96357902,0,0,0.99699248,-0.99217666,0.8052567)"> |
|||
<g |
|||
style="opacity:0.81081082" |
|||
id="g99" |
|||
transform="matrix(0.54157884,0,0,0.5495207,0.11187994,-2.8442232)"> |
|||
<g |
|||
style="stroke-linecap:round;stroke-linejoin:round" |
|||
id="use101" |
|||
transform="matrix(0.88516,0.46528,-0.46528,0.88516,20.799849,-8.6726939)"> |
|||
<rect |
|||
style="color:#000000;display:block;fill:#ffffff;fill-opacity:0.63253;stroke:url(#linearGradient3191);stroke-width:1.06666672" |
|||
ry="0.95879465" |
|||
height="34.145069" |
|||
width="33.079464" |
|||
display="block" |
|||
y="11.2" |
|||
x="6.928" |
|||
id="rect3151" /> |
|||
<rect |
|||
style="color:#000000;display:block;opacity:0.79120998;fill:none;stroke:#ffffff;stroke-width:1.06666672" |
|||
display="block" |
|||
rx="0.14066133" |
|||
ry="0.12247467" |
|||
height="32.004265" |
|||
width="30.9312" |
|||
y="12.262401" |
|||
x="8" |
|||
id="rect3153" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 10.862933,14.365867 5.6704,0.03413 3.2,3.2 v 8.533333" |
|||
display="block" |
|||
id="path3155" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="M 24,26.133333 V 17.6 l -3.2,-3.2" |
|||
display="block" |
|||
id="path3157" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="M 28.266667,26.133333 V 17.6 l -3.2,-3.2" |
|||
display="block" |
|||
id="path3159" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="M 32.533333,26.133333 V 14.4" |
|||
display="block" |
|||
id="path3161" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 19.733333,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3163" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 24,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3165" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 28.266667,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3167" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 32.533333,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3169" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 32.533333,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3171" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 28.266667,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3173" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 24,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3175" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 19.733333,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3177" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 19.733333,35.733333 v 3.2 L 17.6,41.066667 h -6.4" |
|||
display="block" |
|||
id="path3179" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 24,35.733333 v 5.333334" |
|||
display="block" |
|||
id="path3181" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 28.266667,35.733333 v 3.2 L 30.4,41.066667 h 6.4" |
|||
display="block" |
|||
id="path3183" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 32.533333,35.733333 2.133334,2.133334 H 36.8" |
|||
display="block" |
|||
id="path3185" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;stroke:#000000;stroke-width:1.06666672" |
|||
display="block" |
|||
d="m 11.2,16.533333 h 4.266667 L 17.6,18.666667 v 19.2 l -1.066667,1.066666 H 11.2 Z" |
|||
id="path3187" /> |
|||
<rect |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
display="block" |
|||
ry="2.1632001" |
|||
height="13.866667" |
|||
width="17.066668" |
|||
y="24" |
|||
x="17.6" |
|||
id="rect3189" /> |
|||
</g> |
|||
<use |
|||
id="use103" |
|||
x="0" |
|||
y="0" |
|||
width="48" |
|||
height="48" |
|||
transform="matrix(0.97367,0.22797,-0.22797,0.97367,10.729289,-7.9365122)" |
|||
xlink:href="#an" /> |
|||
<g |
|||
style="stroke-linecap:round;stroke-linejoin:round" |
|||
id="an" |
|||
transform="translate(-4.2613333,1.0552224)"> |
|||
<rect |
|||
style="color:#000000;display:block;fill:#ffffff;fill-opacity:0.63253;stroke:url(#linearGradient1016);stroke-width:1.06666672" |
|||
ry="0.95879465" |
|||
height="34.145069" |
|||
width="33.079464" |
|||
display="block" |
|||
y="11.2" |
|||
x="6.928" |
|||
id="rect3195" /> |
|||
<rect |
|||
style="color:#000000;display:block;opacity:0.79120998;fill:none;stroke:#ffffff;stroke-width:1.06666672" |
|||
display="block" |
|||
rx="0.14066133" |
|||
ry="0.12247467" |
|||
height="32.004265" |
|||
width="30.9312" |
|||
y="12.262401" |
|||
x="8" |
|||
id="rect3197" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 10.862933,14.365867 5.6704,0.03413 3.2,3.2 v 8.533333" |
|||
display="block" |
|||
id="path3199" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="M 24,26.133333 V 17.6 l -3.2,-3.2" |
|||
display="block" |
|||
id="path3201" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="M 28.266667,26.133333 V 17.6 l -3.2,-3.2" |
|||
display="block" |
|||
id="path3203" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="M 32.533333,26.133333 V 14.4" |
|||
display="block" |
|||
id="path3205" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 19.733333,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3207" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 24,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3209" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 28.266667,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3211" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 32.533333,26.133333 v 2.133334" |
|||
display="block" |
|||
id="path3213" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 32.533333,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3215" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 28.266667,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3217" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 24,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3219" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:2.13333344" |
|||
d="m 19.733333,33.6 v 2.133333" |
|||
display="block" |
|||
id="path3221" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 19.733333,35.733333 v 3.2 L 17.6,41.066667 h -6.4" |
|||
display="block" |
|||
id="path3223" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 24,35.733333 v 5.333334" |
|||
display="block" |
|||
id="path3225" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 28.266667,35.733333 v 3.2 L 30.4,41.066667 h 6.4" |
|||
display="block" |
|||
id="path3227" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
d="m 32.533333,35.733333 2.133334,2.133334 H 36.8" |
|||
display="block" |
|||
id="path3229" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;display:block;stroke:#000000;stroke-width:1.06666672" |
|||
display="block" |
|||
d="m 11.2,16.533333 h 4.266667 L 17.6,18.666667 v 19.2 l -1.066667,1.066666 H 11.2 Z" |
|||
id="path3231" /> |
|||
<rect |
|||
style="color:#000000;display:block;fill:none;stroke:#000000;stroke-width:1.06666672" |
|||
display="block" |
|||
ry="2.1632001" |
|||
height="13.866667" |
|||
width="17.066668" |
|||
y="24" |
|||
x="17.6" |
|||
id="rect3233" /> |
|||
</g> |
|||
<path |
|||
style="fill:#ffffff;fill-opacity:0.51807;fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path106" |
|||
d="M 4.2666667,27.733333 V 13.866667 H 34.133333 v 13.866666 c -7.466666,6.4 -19.2,-6.4 -29.8666663,0 z" /> |
|||
</g> |
|||
<g |
|||
id="g114" |
|||
transform="matrix(0.37303414,0.10324413,-0.09465317,0.34403422,-4.4968508,-1.3805606)"> |
|||
<g |
|||
style="opacity:0.18469998" |
|||
id="g116" |
|||
transform="matrix(0.001928,0,0,0.001928,35.5648,-10.49184)"> |
|||
<path |
|||
style="fill-rule:evenodd;stroke-width:1.10570669" |
|||
inkscape:connector-curvature="0" |
|||
id="path118" |
|||
d="m 23872.83,21016.084 a 2527.3137,2527.3137 0 1 1 -5054.627,0 2527.3137,2527.3137 0 1 1 5054.627,0 z" /> |
|||
<path |
|||
style="fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path120" |
|||
d="m 20995.2,18544 c -494.848,-610.219 -685.771,-195.563 -944.715,-401.365 -198.73,-178.134 135.168,-459.222 -297.205,-926.87 l -2109.76,2098.454 c 360.523,355.733 558.496,97.792 779.307,400.128 165.578,240.64 -18.251,553.856 514.89,898.57 l 2057.494,-2068.906 z" /> |
|||
<rect |
|||
style="fill-rule:evenodd;stroke-width:1.06666672" |
|||
id="rect122" |
|||
x="-2201.6001" |
|||
y="24636.801" |
|||
width="4977.8135" |
|||
height="1726.9333" |
|||
transform="rotate(-45)" /> |
|||
<path |
|||
style="fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path124" |
|||
d="m 20958.933,10346.987 c 0,5395.2 -4373.653,9768.96 -9768.96,9768.96 -5395.1997,0 -9768.9597,-4373.654 -9768.9597,-9768.96 0,-5395.2003 4373.6534,-9768.96033 9768.9597,-9768.96033 5395.2,0 9768.96,4373.65333 9768.96,9768.96033 z m -967.69,-0.01 c 0,4860.8 -3940.48,8801.28 -8801.28,8801.28 -4860.8003,0 -8801.1737,-3940.48 -8801.1737,-8801.28 0,-4860.8 3940.48,-8801.28 8801.1737,-8801.28 4860.8,0 8801.28,3940.48 8801.28,8801.28 z" /> |
|||
<path |
|||
style="fill-rule:evenodd;stroke-width:1.0222187" |
|||
inkscape:connector-curvature="0" |
|||
id="path126" |
|||
d="m 31187.387,28241.364 a 2336.4855,2336.4855 0 1 1 -4672.971,0 2336.4855,2336.4855 0 1 1 4672.971,0 z" /> |
|||
<rect |
|||
style="stroke-width:1.06666672" |
|||
id="rect128" |
|||
x="-2533.3333" |
|||
y="28601.6" |
|||
width="5890.3467" |
|||
height="12355.2" |
|||
transform="rotate(-45)" /> |
|||
</g> |
|||
<path |
|||
style="opacity:0.29300005;fill:url(#ac);fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path130" |
|||
d="m 72.802133,10.33856 c 0,7.183893 -5.82368,13.008 -13.008,13.008 -7.183786,0 -13.006933,-5.82368 -13.006933,-13.008 0,-7.1837867 5.82368,-13.008 13.006933,-13.008 7.183894,0 13.008,5.82368 13.008,13.008 z m 1.97152,-2.5621333 c 0,9.5886933 -7.77312,17.3621333 -17.362133,17.3621333 -9.588693,0 -17.362133,-7.773227 -17.362133,-17.3621333 0,-9.5886934 7.773226,-17.3621334 17.362133,-17.3621334 9.588693,0 17.362133,7.7732267 17.362133,17.3621334 z" /> |
|||
<path |
|||
style="opacity:0.68790002;fill:url(#ad);fill-rule:evenodd;stroke-width:0.00191701" |
|||
inkscape:connector-curvature="0" |
|||
id="path132" |
|||
d="m 75.617807,7.5176412 a 17.686557,17.686557 0 1 1 -35.37273,0 17.686557,17.686557 0 1 1 35.37273,0 z" /> |
|||
<path |
|||
style="fill:#717386;fill-rule:evenodd;stroke-width:0.00213184" |
|||
inkscape:connector-curvature="0" |
|||
id="path134" |
|||
d="m 81.892977,28.365297 a 4.8727467,4.8727467 0 1 1 -9.745493,0 4.8727467,4.8727467 0 1 1 9.745493,0 z" /> |
|||
<path |
|||
style="fill:url(#ae);fill-rule:evenodd;stroke-width:0.00194549" |
|||
inkscape:connector-curvature="0" |
|||
id="path136" |
|||
d="m 81.467545,28.365892 a 4.4468141,4.4468141 0 1 1 -8.893628,0 4.4468141,4.4468141 0 1 1 8.893628,0 z" /> |
|||
<path |
|||
style="fill:url(#af);fill-rule:evenodd;stroke-width:0.00191701" |
|||
inkscape:connector-curvature="0" |
|||
id="path138" |
|||
d="m 75.422607,7.5176412 a 17.686557,17.686557 0 1 1 -35.37273,0 17.686557,17.686557 0 1 1 35.37273,0 z" /> |
|||
<path |
|||
style="fill:url(#ag);fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path140" |
|||
d="m 76.343467,23.6 c -0.954091,-1.176533 -1.32224,-0.377056 -1.82144,-0.773845 -0.383158,-0.343446 0.260608,-0.885398 -0.573024,-1.787094 l -4.06784,4.045867 c 0.695104,0.685867 1.0768,0.188544 1.502506,0.771467 0.319243,0.463968 -0.03519,1.06784 0.992726,1.73248 l 3.96704,-3.988907 z" /> |
|||
<path |
|||
style="fill:url(#ah);fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path142" |
|||
d="m 74.241067,8.1754667 c 0,8.9271463 -7.184427,16.1642663 -16.046934,16.1642663 -8.8624,0 -16.046933,-7.236906 -16.046933,-16.1642663 0,-8.9271467 7.184427,-16.1642667 16.046933,-16.1642667 8.8624,0 16.046934,7.2368 16.046934,16.1642667 z m 1.31424,-0.6552107 c 0,10.01696 -8.12032,18.1376 -18.1376,18.1376 -10.01696,0 -18.1376,-8.12032 -18.1376,-18.1376 0,-10.01696 8.12032,-18.1376 18.1376,-18.1376 10.01696,0 18.1376,8.12032 18.1376,18.1376 z" /> |
|||
<rect |
|||
style="opacity:0.9554;fill:url(#ai);fill-rule:evenodd;stroke-width:1.06666672" |
|||
id="rect144" |
|||
x="29.709867" |
|||
y="64.267731" |
|||
width="9.5974398" |
|||
height="3.3297067" |
|||
transform="rotate(-45)" /> |
|||
<path |
|||
style="fill:url(#aj);fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path146" |
|||
d="m 76.0992,23.943467 c -0.954091,-1.176534 -1.32224,-0.377056 -1.82144,-0.773846 -0.383157,-0.343445 0.211648,-1.1792 -0.866805,-2.227733 l -3.773974,3.703147 c 0.842006,0.832768 1.664427,0.286485 2.090134,0.869397 0.319242,0.463968 -0.03519,1.06784 0.992725,1.73248 l 3.379413,-3.30336 z" /> |
|||
<rect |
|||
style="fill:url(#ao);fill-rule:evenodd;stroke-width:1.06666672" |
|||
id="rect148" |
|||
x="30.532267" |
|||
y="64" |
|||
width="7.9522138" |
|||
height="2.7589333" |
|||
transform="rotate(-45)" /> |
|||
<path |
|||
style="opacity:0.21019999;fill:url(#ak);fill-rule:evenodd;stroke-width:0.00173621" |
|||
inkscape:connector-curvature="0" |
|||
id="path150" |
|||
d="m 58.124257,-0.35660928 a 6.1968926,6.1968926 0 1 1 -12.393785,0 6.1968926,6.1968926 0 1 1 12.393785,0 z" /> |
|||
<path |
|||
style="fill:url(#ap);fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path152" |
|||
d="m 76.274133,7.79552 c 0,10.40224 -8.43264,18.8352 -18.8352,18.8352 -10.40224,0 -18.8352,-8.43264 -18.8352,-18.8352 0,-10.40224 8.43264,-18.8352 18.8352,-18.8352 10.40224,0 18.8352,8.43264 18.8352,18.8352 z m -1.865706,-1.81e-5 c 0,9.3718401 -7.597334,16.9696001 -16.9696,16.9696001 -9.371734,0 -16.9696,-7.597333 -16.9696,-16.9696001 0,-9.37184 7.597333,-16.9696 16.9696,-16.9696 9.37184,0 16.9696,7.5973333 16.9696,16.9696 z" /> |
|||
<path |
|||
style="fill:#808080;fill-rule:evenodd;stroke-width:0.00197088" |
|||
inkscape:connector-curvature="0" |
|||
id="path154" |
|||
d="m 95.995194,42.296634 a 4.5048404,4.5048404 0 1 1 -9.00968,0 4.5048404,4.5048404 0 1 1 9.00968,0 z" /> |
|||
<path |
|||
style="fill:url(#al);fill-rule:evenodd;stroke-width:0.00178912" |
|||
inkscape:connector-curvature="0" |
|||
id="path156" |
|||
d="m 95.408646,42.273392 a 4.089392,4.089392 0 1 1 -8.178784,0 4.089392,4.089392 0 1 1 8.178784,0 z" /> |
|||
<rect |
|||
style="fill:url(#y);stroke-width:1.06666672" |
|||
id="rect158" |
|||
x="29.069866" |
|||
y="71.911469" |
|||
width="11.3568" |
|||
height="23.821867" |
|||
transform="rotate(-45)" /> |
|||
<rect |
|||
style="fill:url(#z);stroke-width:1.06666672" |
|||
id="rect160" |
|||
x="30.209066" |
|||
y="73.19146" |
|||
width="9.080533" |
|||
height="21.262934" |
|||
transform="rotate(-45)" /> |
|||
<path |
|||
style="fill:url(#aa);fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path162" |
|||
d="m 74.776533,7.6485333 c 0,9.5166937 -7.71488,17.2319997 -17.232,17.2319997 -9.516693,0 -17.232,-7.71488 -17.232,-17.2319997 0,-9.5166933 7.71488,-17.232 17.232,-17.232 9.516694,0 17.232,7.71488 17.232,17.232 z m -0.514368,6.4e-6 c 0,9.2326403 -7.484586,16.7168003 -16.7168,16.7168003 -9.23264,0 -16.7168,-7.484587 -16.7168,-16.7168003 0,-9.23264 7.484587,-16.7168 16.7168,-16.7168 9.23264,0 16.7168,7.4845867 16.7168,16.7168 z" /> |
|||
<path |
|||
style="opacity:0.54140003;fill:url(#am);fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path164" |
|||
d="m 60.269867,2.3768533 c 0,3.8557867 -3.12576,6.9815467 -6.98144,6.9815467 -3.855787,0 -6.98144,-3.12576 -6.98144,-6.9815467 0,-3.8557866 3.12576,-6.98144 6.98144,-6.98144 3.855786,0 6.98144,3.12576 6.98144,6.98144 z M 61.49472,1.641984 c 0,4.9381333 -4.003093,8.941227 -8.941227,8.941227 -4.938133,0 -8.941226,-4.0030937 -8.941226,-8.941227 0,-4.9381333 4.003093,-8.9412267 8.941226,-8.9412267 4.938134,0 8.941227,4.0030934 8.941227,8.9412267 z" /> |
|||
<path |
|||
style="fill:#9a9ba9;fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path166" |
|||
d="m 72.385067,27.006933 0.310048,0.25232 3.43712,-3.307946 -0.187648,-0.301291 -3.559467,3.356907 z" /> |
|||
<path |
|||
style="fill:#8a92a0;fill-rule:evenodd;stroke-width:1.06666672" |
|||
inkscape:connector-curvature="0" |
|||
id="path168" |
|||
d="m 69.693867,24.718933 0.285653,0.210699 3.72416,-3.651093 -0.222336,-0.343243 -3.787413,3.78368 z" /> |
|||
</g> |
|||
</g> |
|||
<g |
|||
style="stroke:#000000" |
|||
transform="matrix(0.4228008,0,0,0.47494899,-3.6057646,-15.908652)" |
|||
id="g1063"> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;fill:url(#a-6);stroke-width:1.30209994" |
|||
d="m 25.828,57.411 c -0.34731,0.02167 -0.68489,0.07071 -1.026,0.10631 h -0.02332 l -0.81616,4.061 c -1.3303,0.27623 -2.5818,0.74502 -3.7077,1.382 l -3.661,-2.402 c -0.98968,0.70058 -1.8903,1.5177 -2.6817,2.4026 l 2.5417,3.3807 c -0.77174,1.0754 -1.3521,2.3033 -1.679,3.5933 -5.2e-5,0.0061 -4.5e-5,0.0202 0,0.02126 l -4.4306,0.63786 c -0.081,0.60325 -0.11659,1.2267 -0.11659,1.8498 0,0.50981 0.0154,1.0128 0.0699,1.5096 l 4.4306,0.72291 c 0.31511,1.4029 0.91369,2.713 1.7489,3.8697 l -2.635,3.2956 c 0.75466,0.85424 1.6259,1.632 2.5651,2.3176 l 3.731,-2.3388 c 1.3039,0.75844 2.7595,1.2903 4.3373,1.5521 l 0.69956,4.0185 c 0.49711,0.04126 1.0069,0.04252 1.5157,0.04252 0.71836,-10e-7 1.4045,-0.02482 2.0987,-0.10631 l 0.83948,-4.1036 c 1.499,-0.341 2.906,-0.931 4.128,-1.723 l 3.5911,2.3813 c 0.93128,-0.72243 1.7829,-1.5528 2.5184,-2.4451 l -2.6117,-3.4444 c 0.70729,-1.1138 1.1974,-2.3427 1.4458,-3.6571 l 4.4073,-0.63786 c 0.03865,-0.41935 0.04663,-0.82605 0.04663,-1.2545 0,-0.74449 -0.09491,-1.4745 -0.20987,-2.19 l -4.476,-0.745 c -0.351,-1.181 -0.927,-2.283 -1.656,-3.274 l 2.635,-3.2956 c -0.817,-0.911 -1.749,-1.752 -2.775,-2.466 l -3.801,2.381 c -1.092,-0.589 -2.268,-1.041 -3.544,-1.297 l -0.7,-4.04 c -0.63673,-0.06829 -1.2787,-0.10631 -1.9355,-0.10631 -0.1775,0 -0.36018,-0.0051 -0.53633,0 -0.08587,0.0024 -0.17086,-0.0046 -0.25651,0 -0.0232,0.0012 -0.0468,-0.0014 -0.06996,0 z m 0.60629,10.333 c 0.08519,-0.0039 0.17025,0 0.25651,0 2.7603,0 5.0135,2.0545 5.0135,4.5713 1e-6,2.5168 -2.2532,4.5501 -5.0135,4.5501 -2.7603,1e-6 -4.9902,-2.0332 -4.9902,-4.5501 0,-2.4382 2.0928,-4.4491 4.7337,-4.5713 z" |
|||
id="path1057" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;opacity:0.34658999;fill:none;stroke-width:1.40030003" |
|||
d="m 25.311,58.215 -0.6553,3.932 c -1.2469,0.25892 -3.5405,1.0508 -4.5959,1.6479 l -3.4863,-2.3726 c -0.92766,0.65668 -0.99127,0.70121 -1.7331,1.5307 l 2.5207,3.4087 c -0.72338,1.008 -1.5922,2.8042 -1.9042,4.0878 0,0 -4.4171,0.67892 -4.4171,0.67892 -0.07593,0.56544 -0.03948,1.7757 0.01164,2.2413 l 4.2192,0.69303 c 0.29536,1.315 1.4006,3.4316 2.1835,4.5157 l -2.6681,3.2142 c 0.70736,0.8007 0.84892,0.87397 1.7292,1.5166 l 3.5677,-2.3833 c 1.2222,0.7109 3.6482,1.5757 5.1271,1.8211 l 0.58553,3.8824 c 0.46595,0.03867 1.7532,0.14715 2.4038,0.07077 l 0.65531,-4.0416 c 1.4042,-0.31862 3.8304,-1.2267 4.9759,-1.9697 l 3.5639,2.3479 c 0.87292,-0.67715 0.88074,-0.77919 1.5702,-1.6156 l -2.641,-3.4228 c 0.66296,-1.044 1.5202,-3.0857 1.753,-4.3177 l 4.324,-0.65416 c 0.03623,-0.39307 0.03799,-1.4892 -0.06977,-2.1599 l -4.4054,-0.69303 c -0.32887,-1.1073 -1.4575,-3.1025 -2.1409,-4.0314 l 2.8,-3.2142 c -0.76558,-0.85369 -1.0502,-0.97082 -2.0124,-1.6403 l -3.688,2.408 c -1.024,-0.553 -3.066,-1.394 -4.262,-1.634 l -0.65149,-3.8471 c -0.59683,-0.06401 -2.3187,-0.03559 -2.6598,0 z" |
|||
id="path1059" /> |
|||
<path |
|||
inkscape:connector-curvature="0" |
|||
style="color:#000000;opacity:0.64772997;fill:none;stroke-width:0.71253002" |
|||
d="m 32.454,72.306 a 5.7605,5.2524 0 0 1 -11.521,0 5.7605,5.2524 0 1 1 11.521,0 z" |
|||
id="path1061" /> |
|||
</g> |
|||
</svg> |
|||
@ -0,0 +1,245 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2007-2017 Jean-Pierre Charras jp.charras at wanadoo.fr |
|||
* Copyright (C) 1992-2017 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 job_file_reader.cpp |
|||
*/ |
|||
|
|||
#include <fctsys.h>
|
|||
#include <wx/filename.h>
|
|||
|
|||
#include <gerbview.h>
|
|||
#include <richio.h>
|
|||
#include <class_drawpanel.h>
|
|||
#include <class_gerber_file_image.h>
|
|||
#include <class_gerber_file_image_list.h>
|
|||
#include <gerbview_frame.h>
|
|||
#include <reporter.h>
|
|||
#include <plot_auxiliary_data.h>
|
|||
#include <html_messagebox.h>
|
|||
|
|||
extern int ReadInt( char*& text, bool aSkipSeparator = true ); |
|||
extern double ReadDouble( char*& text, bool aSkipSeparator = true ); |
|||
extern bool GetEndOfBlock( char* buff, char*& text, FILE* gerber_file ); |
|||
|
|||
/**
|
|||
* this class read and parse a Gerber job file to extract useful info |
|||
* for GerbView |
|||
* |
|||
* In a gerber job file, data lines start by |
|||
* %TF. (usual Gerber X2 info) |
|||
* %TJ.B. (board info) |
|||
* %TJ.D. (design info) |
|||
* %TJ.L. (layers info) |
|||
* some others are not yet handled by Kicad |
|||
* M02* is the last line |
|||
*/ |
|||
class GERBER_JOBFILE_READER |
|||
{ |
|||
public: |
|||
GERBER_JOBFILE_READER( const wxString& aFileName, REPORTER* aReporter ) |
|||
{ |
|||
m_filename = aFileName; |
|||
m_reporter = aReporter; |
|||
} |
|||
|
|||
~GERBER_JOBFILE_READER() {} |
|||
|
|||
bool ReadGerberJobFile(); /// read the .gbj file
|
|||
wxArrayString& GetGerberFiles() { return m_GerberFiles; } |
|||
|
|||
private: |
|||
/** parse a string starting by "%TJ.L" (layer gerber filename)
|
|||
* and add the filename in m_GerberFiles |
|||
*/ |
|||
bool parseTJLayerString( wxString& aText ); |
|||
|
|||
private: |
|||
REPORTER* m_reporter; |
|||
wxFileName m_filename; |
|||
wxArrayString m_GerberFiles; // List of gerber files in job
|
|||
}; |
|||
|
|||
|
|||
bool GERBER_JOBFILE_READER::ReadGerberJobFile() |
|||
{ |
|||
// Read the gerber file */
|
|||
FILE* jobFile = wxFopen( m_filename.GetFullPath(), wxT( "rt" ) ); |
|||
|
|||
if( jobFile == nullptr ) |
|||
return false; |
|||
|
|||
LOCALE_IO toggleIo; |
|||
|
|||
FILE_LINE_READER jobfileReader( jobFile, m_filename.GetFullPath() ); // Will close jobFile
|
|||
|
|||
wxString msg; |
|||
wxString data; |
|||
|
|||
while( true ) |
|||
{ |
|||
char* line = jobfileReader.ReadLine(); |
|||
|
|||
if( !line ) // end of file
|
|||
break; |
|||
|
|||
wxString text( line ); |
|||
text.Trim( true ); |
|||
text.Trim( false ); |
|||
|
|||
// Search for lines starting by '%', others are not usefull
|
|||
if( text.StartsWith( "%TJ.L.", &data ) ) |
|||
{ |
|||
parseTJLayerString( data ); |
|||
continue; |
|||
} |
|||
|
|||
if( text.StartsWith( "M02" ) ) // End of file
|
|||
break; |
|||
} |
|||
|
|||
return true; |
|||
} |
|||
|
|||
|
|||
bool GERBER_JOBFILE_READER::parseTJLayerString( wxString& aText ) |
|||
{ |
|||
// Parse a line like:
|
|||
// %TJ.L."Copper,L1,Top",Positive,kit-dev-coldfire-xilinx_5213-Top_layer.gbr*%
|
|||
// and extract the .gbr filename
|
|||
|
|||
// The filename is between the last comma in string and the '*' char
|
|||
// the filename cannot contain itself a comma:
|
|||
// this is a not allowed char, that is transcoded in hexa sequence
|
|||
// if found in filename
|
|||
wxString name = aText.AfterLast( ',' ).BeforeFirst( '*' ); |
|||
m_GerberFiles.Add( FormatStringFromGerber( name ) ); |
|||
|
|||
return true; |
|||
} |
|||
|
|||
|
|||
bool GERBVIEW_FRAME::LoadGerberJobFile( const wxString& aFullFileName ) |
|||
{ |
|||
#define jobFileWildcard _( "Gerber job file (*.gbj)|*.gbj;.gbj" )
|
|||
wxFileName filename = aFullFileName; |
|||
wxString currentPath; |
|||
|
|||
if( !filename.IsOk() ) |
|||
{ |
|||
// Use the current working directory if the file name path does not exist.
|
|||
if( filename.DirExists() ) |
|||
currentPath = filename.GetPath(); |
|||
else |
|||
currentPath = m_mruPath; |
|||
|
|||
wxFileDialog dlg( this, _( "Open Gerber Job File" ), |
|||
currentPath, |
|||
filename.GetFullName(), |
|||
jobFileWildcard, |
|||
wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR ); |
|||
|
|||
if( dlg.ShowModal() == wxID_CANCEL ) |
|||
return false; |
|||
|
|||
filename = dlg.GetPath(); |
|||
currentPath = wxGetCwd(); |
|||
m_mruPath = currentPath; |
|||
} |
|||
else |
|||
{ |
|||
currentPath = filename.GetPath(); |
|||
m_mruPath = currentPath; |
|||
} |
|||
|
|||
wxString msg; |
|||
WX_STRING_REPORTER reporter( &msg ); |
|||
|
|||
if( filename.IsOk() ) |
|||
{ |
|||
GERBER_JOBFILE_READER gbjReader( filename.GetFullPath(), &reporter ); |
|||
|
|||
if( gbjReader.ReadGerberJobFile() ) |
|||
{ |
|||
// Update the list of recent drill files.
|
|||
UpdateFileHistory( filename.GetFullPath(), &m_jobFileHistory ); |
|||
|
|||
Clear_DrawLayers( false ); |
|||
ClearMsgPanel(); |
|||
|
|||
wxArrayString& gbrfiles = gbjReader.GetGerberFiles(); |
|||
|
|||
wxFileName gbr_fn = filename; |
|||
bool read_ok; |
|||
int layer = 0; |
|||
setActiveLayer( layer, false ); |
|||
|
|||
for( unsigned ii = 0; ii < gbrfiles.GetCount(); ii++ ) |
|||
{ |
|||
gbr_fn.SetFullName( gbrfiles[ii] ); |
|||
|
|||
if( gbr_fn.FileExists() ) |
|||
{ |
|||
//LoadGerberFiles( gbr_fn.GetFullPath() );
|
|||
read_ok = Read_GERBER_File( gbr_fn.GetFullPath() ); |
|||
|
|||
if( read_ok ) |
|||
{ |
|||
layer = getNextAvailableLayer( layer ); |
|||
setActiveLayer( layer, false ); |
|||
} |
|||
} |
|||
else |
|||
read_ok = false; |
|||
|
|||
if( !read_ok ) |
|||
{ |
|||
wxString err; |
|||
err.Printf( _( "Can't load Gerber file:<br><i>%s</i><br>" ), gbr_fn.GetFullPath() ); |
|||
reporter.Report( err, REPORTER::RPT_WARNING ); |
|||
} |
|||
} |
|||
|
|||
GetImagesList()->SortImagesByZOrder(); |
|||
ReFillLayerWidget(); |
|||
syncLayerBox( true ); |
|||
GetCanvas()->Refresh(); |
|||
} |
|||
} |
|||
|
|||
Zoom_Automatique( false ); |
|||
|
|||
if( !msg.IsEmpty() ) |
|||
{ |
|||
wxSafeYield(); // Allows slice of time to redraw the screen
|
|||
// to refresh widgets, before displaying messages
|
|||
HTML_MESSAGE_BOX mbox( this, _( "Messages" ) ); |
|||
mbox.ListSet( msg ); |
|||
mbox.ShowModal(); |
|||
} |
|||
|
|||
return true; |
|||
} |
|||
|
|||
|
|||
@ -0,0 +1,388 @@ |
|||
/*
|
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 2017 Jean_Pierre Charras <jp.charras at wanadoo.fr> |
|||
* Copyright (C) 1992-2017 KiCad Developers, see change_log.txt for contributors. |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* 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 gendrill_gerber_writer.cpp |
|||
* @brief Functions to create drill files in gerber X2 format. |
|||
*/ |
|||
|
|||
#include <fctsys.h>
|
|||
|
|||
#include <vector>
|
|||
|
|||
#include <plot_common.h>
|
|||
#include <wxPcbStruct.h>
|
|||
#include <build_version.h>
|
|||
|
|||
#include <class_board.h>
|
|||
#include <class_zone.h>
|
|||
#include <class_module.h>
|
|||
|
|||
#include <pcbplot.h>
|
|||
#include <pcbnew.h>
|
|||
#include <gerber_jobfile_writer.h>
|
|||
#include <wildcards_and_files_ext.h>
|
|||
#include <reporter.h>
|
|||
#include <plot_auxiliary_data.h>
|
|||
|
|||
|
|||
GERBER_JOBFILE_WRITER::GERBER_JOBFILE_WRITER( BOARD* aPcb, REPORTER* aReporter ) |
|||
{ |
|||
m_pcb = aPcb; |
|||
m_reporter = aReporter; |
|||
m_conversionUnits = 1.0 / IU_PER_MM; // Gerber units = mm
|
|||
} |
|||
|
|||
enum ONSIDE GERBER_JOBFILE_WRITER::hasSilkLayers() |
|||
{ |
|||
int flag = SIDE_NONE; |
|||
|
|||
for( unsigned ii = 0; ii < m_params.m_LayerId.size(); ii++ ) |
|||
{ |
|||
if( m_params.m_LayerId[ii] == B_SilkS ) |
|||
flag |= SIDE_BOTTOM; |
|||
|
|||
if( m_params.m_LayerId[ii] == F_SilkS ) |
|||
flag |= SIDE_TOP; |
|||
} |
|||
|
|||
return (enum ONSIDE)flag; |
|||
} |
|||
|
|||
|
|||
enum ONSIDE GERBER_JOBFILE_WRITER::hasSolderMasks() |
|||
{ |
|||
int flag = SIDE_NONE; |
|||
|
|||
for( unsigned ii = 0; ii < m_params.m_LayerId.size(); ii++ ) |
|||
{ |
|||
if( m_params.m_LayerId[ii] == B_Mask ) |
|||
flag |= SIDE_BOTTOM; |
|||
|
|||
if( m_params.m_LayerId[ii] == F_Mask ) |
|||
flag |= SIDE_TOP; |
|||
} |
|||
|
|||
return (enum ONSIDE)flag; |
|||
} |
|||
|
|||
const char* GERBER_JOBFILE_WRITER::sideKeyValue( enum ONSIDE aValue ) |
|||
{ |
|||
// return the key associated to sides used for some layers
|
|||
// "No, TopOnly, BotOnly or Both"
|
|||
const char* value = nullptr; |
|||
|
|||
switch( aValue ) |
|||
{ |
|||
case SIDE_NONE: |
|||
value = "No"; break; |
|||
|
|||
case SIDE_TOP: |
|||
value = "TopOnly"; break; |
|||
|
|||
case SIDE_BOTTOM: |
|||
value = "BotOnly"; break; |
|||
|
|||
case SIDE_BOTH: |
|||
value = "Both"; break; |
|||
|
|||
} |
|||
|
|||
return value; |
|||
} |
|||
|
|||
|
|||
extern void BuildGerberX2Header( const BOARD *aBoard, wxArrayString& aHeader ); |
|||
|
|||
|
|||
bool GERBER_JOBFILE_WRITER::CreateJobFile( const wxString& aFullFilename ) |
|||
{ |
|||
// Note: in Gerber job file, dimensions are in mm, and are floating numbers
|
|||
FILE* jobFile = wxFopen( aFullFilename, "wt" ); |
|||
|
|||
wxString msg; |
|||
|
|||
if( jobFile == nullptr ) |
|||
{ |
|||
if( m_reporter ) |
|||
{ |
|||
msg.Printf( _( "Unable to create job file '%s'" ), aFullFilename ); |
|||
m_reporter->Report( msg, REPORTER::RPT_ERROR ); |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
LOCALE_IO dummy; |
|||
|
|||
// output the job file header
|
|||
bool hasInnerLayers = m_pcb->GetCopperLayerCount() > 2; |
|||
wxArrayString header; |
|||
|
|||
fputs( "G04 Gerber job file with board parameters*\n" |
|||
"%TF.FileFunction,JobInfo*%\n" |
|||
"%TF.Part,SinglePCB*%\n", jobFile ); |
|||
fputs( "G04 Single PCB fabrication instructions*\n", jobFile ); |
|||
|
|||
BuildGerberX2Header( m_pcb, header ); |
|||
|
|||
for( unsigned ii = 0; ii < header.GetCount(); ii++ ) |
|||
{ |
|||
if( header[ii].Contains( "TF.SameCoordinates" ) ) |
|||
continue; // This attribute is not useful in job file, skip it
|
|||
|
|||
fputs( header[ii], jobFile ); |
|||
fputs( "\n", jobFile ); |
|||
} |
|||
|
|||
|
|||
fputs( "%MOMM*%\n", jobFile ); |
|||
|
|||
fputs( "G04 Overall board parameters*\n", jobFile ); |
|||
// output the bord size in mm:
|
|||
EDA_RECT brect = m_pcb->GetBoardEdgesBoundingBox(); |
|||
fprintf( jobFile, "%%TJ.B.Size.X,%.3f*%%\n", brect.GetWidth()*m_conversionUnits ); |
|||
fprintf( jobFile, "%%TJ.B.Size.Y,%.3f*%%\n", brect.GetHeight()*m_conversionUnits ); |
|||
|
|||
// number of copper layers
|
|||
fprintf( jobFile, "%%TJ.B.LayerNum,%d*%%\n", m_pcb->GetCopperLayerCount() ); |
|||
|
|||
// Board thickness
|
|||
fprintf( jobFile, "%%TJ.B.Overall.Thickness,%.3f*%%\n", |
|||
m_pcb->GetDesignSettings().GetBoardThickness()*m_conversionUnits ); |
|||
|
|||
fprintf( jobFile, "%%TJ.B.Legend.Present,%s*%%\n", sideKeyValue( hasSilkLayers() ) ); |
|||
|
|||
fprintf( jobFile, "%%TJ.B.SolderMask.Present,%s*%%\n", sideKeyValue( hasSolderMasks() ) ); |
|||
|
|||
// Job file support a few design rules:
|
|||
fputs( "G04 board design rules*\n", jobFile ); |
|||
const BOARD_DESIGN_SETTINGS& dsnSettings = m_pcb->GetDesignSettings(); |
|||
NETCLASS defaultNC = *dsnSettings.GetDefault(); |
|||
int minclearanceOuter = defaultNC.GetClearance(); |
|||
|
|||
// Search a smaller clearance in other net classes, if any.
|
|||
for( NETCLASSES::const_iterator it = dsnSettings.m_NetClasses.begin(); |
|||
it != dsnSettings.m_NetClasses.end(); |
|||
++it ) |
|||
{ |
|||
NETCLASS netclass = *it->second; |
|||
minclearanceOuter = std::min( minclearanceOuter, netclass.GetClearance() ); |
|||
} |
|||
|
|||
// job file knows different clearance types.
|
|||
// Kicad knows only one clearance for pads and tracks
|
|||
// However, pads can have a specific clearance defined for a pad or a footprint,
|
|||
// and min clearance can be dependent on layers.
|
|||
// Search for a minimal pad clearance:
|
|||
int minPadClearanceOuter = defaultNC.GetClearance(); |
|||
int minPadClearanceInner = defaultNC.GetClearance(); |
|||
|
|||
for( MODULE* module : m_pcb->Modules() ) |
|||
{ |
|||
for( auto& pad : module->Pads() ) |
|||
{ |
|||
if( ( pad->GetLayerSet() & LSET::InternalCuMask() ).any() ) |
|||
minPadClearanceInner = std::min( minPadClearanceInner, pad->GetClearance() ); |
|||
|
|||
if( ( pad->GetLayerSet() & LSET::ExternalCuMask() ).any() ) |
|||
minPadClearanceOuter = std::min( minPadClearanceOuter, pad->GetClearance() ); |
|||
} |
|||
} |
|||
|
|||
|
|||
fprintf( jobFile, "%%TJ.D.PadToPad.Outer,%.3f*%%\n", minPadClearanceOuter*m_conversionUnits ); |
|||
|
|||
if( hasInnerLayers ) |
|||
fprintf( jobFile, "%%TJ.D.PadToPad.Inner,%.3f*%%\n", minPadClearanceInner*m_conversionUnits ); |
|||
|
|||
fprintf( jobFile, "%%TJ.D.PadToTrack.Outer,%.3f*%%\n", minPadClearanceOuter*m_conversionUnits ); |
|||
|
|||
if( hasInnerLayers ) |
|||
fprintf( jobFile, "%%TJ.D.PadToTrack.Inner,%.3f*%%\n", minPadClearanceInner*m_conversionUnits ); |
|||
|
|||
// Until this is changed in Kicad, use the same value for internal tracks
|
|||
int minclearanceInner = minclearanceOuter; |
|||
|
|||
fprintf( jobFile, "%%TJ.D.TrackToTrack.Outer,%.3f*%%\n", minclearanceOuter*m_conversionUnits ); |
|||
|
|||
if( hasInnerLayers ) |
|||
fprintf( jobFile, "%%TJ.D.TrackToTrack.Inner,%.3f*%%\n", minclearanceInner*m_conversionUnits ); |
|||
|
|||
// Output the minimal track width
|
|||
int mintrackWidthOuter = INT_MAX; |
|||
int mintrackWidthInner = INT_MAX; |
|||
|
|||
for( TRACK* track : m_pcb->Tracks() ) |
|||
{ |
|||
if( track->Type() == PCB_VIA_T ) |
|||
continue; |
|||
|
|||
if( track->GetLayer() == B_Cu || track->GetLayer() == F_Cu ) |
|||
mintrackWidthOuter = std::min( mintrackWidthOuter, track->GetWidth() ); |
|||
else |
|||
mintrackWidthInner = std::min( mintrackWidthInner, track->GetWidth() ); |
|||
} |
|||
|
|||
if( mintrackWidthOuter != INT_MAX ) |
|||
fprintf( jobFile, "%%TJ.D.MinLineWidth.Outer,%.3f*%%\n", mintrackWidthOuter*m_conversionUnits ); |
|||
|
|||
if( mintrackWidthInner != INT_MAX ) |
|||
fprintf( jobFile, "%%TJ.D.MinLineWidth.Inner,%.3f*%%\n", mintrackWidthInner*m_conversionUnits ); |
|||
|
|||
// Output the minimal zone to xx clearance
|
|||
// Note: zones can have a zone clearance set to 0
|
|||
// if happens, the actual zone clearance is the clearance of its class
|
|||
minclearanceOuter = INT_MAX; |
|||
minclearanceInner = INT_MAX; |
|||
|
|||
for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ ) |
|||
{ |
|||
ZONE_CONTAINER* zone = m_pcb->GetArea( ii ); |
|||
|
|||
if( zone->GetIsKeepout() || !zone->IsOnCopperLayer() ) |
|||
continue; |
|||
|
|||
int zclerance = zone->GetClearance(); |
|||
|
|||
if( zone->GetLayer() == B_Cu || zone->GetLayer() == F_Cu ) |
|||
minclearanceOuter = std::min( minclearanceOuter, zclerance ); |
|||
else |
|||
minclearanceInner = std::min( minclearanceInner, zclerance ); |
|||
} |
|||
|
|||
if( minclearanceOuter != INT_MAX ) |
|||
fprintf( jobFile, "%%TJ.D.TrackToRegion.Outer,%.3f*%%\n", minclearanceOuter*m_conversionUnits ); |
|||
|
|||
if( hasInnerLayers && minclearanceInner != INT_MAX ) |
|||
fprintf( jobFile, "%%TJ.D.TrackToRegion.Inner,%.3f*%%\n", minclearanceInner*m_conversionUnits ); |
|||
|
|||
if( minclearanceOuter != INT_MAX ) |
|||
fprintf( jobFile, "%%TJ.D.RegionToRegion.Outer,%.3f*%%\n", minclearanceOuter*m_conversionUnits ); |
|||
|
|||
if( hasInnerLayers && minclearanceInner != INT_MAX ) |
|||
fprintf( jobFile, "%%TJ.D.RegionToRegion.Inner,%.3f*%%\n", minclearanceInner*m_conversionUnits ); |
|||
|
|||
// output the gerber file list:
|
|||
fputs( "G04 Layer Structure*\n", jobFile ); |
|||
|
|||
for( unsigned ii = 0; ii < m_params.m_GerberFileList.GetCount(); ii ++ ) |
|||
{ |
|||
wxString& name = m_params.m_GerberFileList[ii]; |
|||
PCB_LAYER_ID layer = m_params.m_LayerId[ii]; |
|||
wxString gbr_layer_id; |
|||
bool skip_file = false; // true to skip files which should not be in job file
|
|||
const char* polarity = "Positive"; |
|||
|
|||
if( layer <= B_Cu ) |
|||
{ |
|||
gbr_layer_id = "Copper,L"; |
|||
|
|||
if( layer == B_Cu ) |
|||
gbr_layer_id << m_pcb->GetCopperLayerCount(); |
|||
else |
|||
gbr_layer_id << layer+1; |
|||
|
|||
gbr_layer_id << ","; |
|||
|
|||
if( layer == B_Cu ) |
|||
gbr_layer_id << "Bottom"; |
|||
else if( layer == F_Cu ) |
|||
gbr_layer_id << "Top"; |
|||
else |
|||
gbr_layer_id << "Inner"; |
|||
} |
|||
|
|||
else |
|||
{ |
|||
switch( layer ) |
|||
{ |
|||
case B_Adhes: |
|||
gbr_layer_id = "Glue,Bottom"; break; |
|||
case F_Adhes: |
|||
gbr_layer_id = "Glue,Top"; break; |
|||
|
|||
case B_Paste: |
|||
gbr_layer_id = "SolderPaste,Bottom"; break; |
|||
case F_Paste: |
|||
gbr_layer_id = "SolderPaste,Top"; break; |
|||
|
|||
case B_SilkS: |
|||
gbr_layer_id = "Legend,Bottom"; break; |
|||
case F_SilkS: |
|||
gbr_layer_id = "Legend,Top"; break; |
|||
|
|||
case B_Mask: |
|||
gbr_layer_id = "SolderMask,Bottom"; polarity = "Negative"; break; |
|||
case F_Mask: |
|||
gbr_layer_id = "SolderMask,Top"; polarity = "Negative"; break; |
|||
|
|||
case Edge_Cuts: |
|||
gbr_layer_id = "Profile"; break; |
|||
|
|||
case B_Fab: |
|||
gbr_layer_id = "AssemblyDrawing,Bottom"; break; |
|||
case F_Fab: |
|||
gbr_layer_id = "AssemblyDrawing,Top"; break; |
|||
|
|||
case Dwgs_User: |
|||
case Cmts_User: |
|||
case Eco1_User: |
|||
case Eco2_User: |
|||
case Margin: |
|||
case B_CrtYd: |
|||
case F_CrtYd: |
|||
skip_file = true; break; |
|||
|
|||
default: |
|||
skip_file = true; |
|||
m_reporter->Report( "Unexpected layer id in job file", |
|||
REPORTER::RPT_ERROR ); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
if( !skip_file ) |
|||
{ |
|||
// name can contain non ASCII7 chars.
|
|||
// Only ASCII7 chars are accepted in gerber files. others must be converted to
|
|||
// a gerber hexa sequence.
|
|||
std::string strname = formatStringToGerber( name ); |
|||
fprintf( jobFile, "%%TJ.L.\"%s\",%s,%s*%%\n", TO_UTF8( gbr_layer_id ), |
|||
polarity, strname.c_str() ); |
|||
} |
|||
} |
|||
|
|||
// Close job file
|
|||
fputs( "M02*\n", jobFile ); |
|||
|
|||
fclose( jobFile ); |
|||
|
|||
if( m_reporter ) |
|||
{ |
|||
msg.Printf( _( "Create Gerber job file '%s'" ), aFullFilename ); |
|||
m_reporter->Report( msg, REPORTER::RPT_ACTION ); |
|||
} |
|||
|
|||
return true; |
|||
} |
|||
@ -0,0 +1,125 @@ |
|||
/** |
|||
* @file gerber_jobfile_writer.h |
|||
* @brief Classes used in drill files, map files and report files generation. |
|||
*/ |
|||
|
|||
/* |
|||
* This program source code file is part of KiCad, a free EDA CAD application. |
|||
* |
|||
* Copyright (C) 1992-2017 Jean_Pierre Charras <jp.charras at wanadoo.fr> |
|||
* Copyright (C) 1992-2017 KiCad Developers, see change_log.txt for contributors. |
|||
* |
|||
* This program is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU General Public License |
|||
* as published by the Free Software Foundation; either version 2 |
|||
* of the License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program; if not, you may find one here: |
|||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html |
|||
* or you may search the http://www.gnu.org website for the version 2 license, |
|||
* or you may write to the Free Software Foundation, Inc., |
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA |
|||
*/ |
|||
|
|||
#ifndef GERBER_JOBFILE_WRITER_H |
|||
#define GERBER_JOBFILE_WRITER_H |
|||
|
|||
|
|||
// A helper enum to handle sides of some layers (silk, mask) |
|||
enum ONSIDE |
|||
{ |
|||
SIDE_NONE = 0, // layers not present |
|||
SIDE_TOP = 1, // top layer only |
|||
SIDE_BOTTOM = 2, // bottom layer only |
|||
SIDE_BOTH = SIDE_TOP|SIDE_BOTTOM // both layers |
|||
}; |
|||
|
|||
class BOARD; |
|||
|
|||
/** |
|||
* class JOBFILE_PARAMS store the list of parameters written in Gerber job file |
|||
* especialy list of .gbr filenames and the corresponding layer id belonging the job |
|||
*/ |
|||
class JOBFILE_PARAMS |
|||
{ |
|||
public: |
|||
wxArrayString m_GerberFileList; // the list of gerber filenames (without path) |
|||
std::vector<PCB_LAYER_ID> m_LayerId; // the list of corresponding layer id |
|||
}; |
|||
|
|||
|
|||
/** |
|||
* GERBER_JOBFILE_WRITER is a class used to create Gerber job file |
|||
* a Gerber job file stores info to make a board: |
|||
* list of gerber files |
|||
* info about the board itsel: |
|||
* size, number of copper layers |
|||
* thickness of the board, copper and dielectric |
|||
* and some other info (colors, finish type ...) |
|||
* |
|||
* note: dimensions are always in mm in Kicad job file (can be also in inches in a job file) |
|||
* and they are in floating point notation |
|||
*/ |
|||
class GERBER_JOBFILE_WRITER |
|||
{ |
|||
public: |
|||
GERBER_JOBFILE_WRITER( BOARD* aPcb, REPORTER* aReporter = nullptr ); |
|||
|
|||
virtual ~GERBER_JOBFILE_WRITER() |
|||
{ |
|||
} |
|||
|
|||
/** |
|||
* add a gerber file name and type in job file list |
|||
* @param aLayer is the PCB_LAYER_ID corresponding to the gerber file |
|||
* @param aFilename is the filename (without path) of the gerber file |
|||
*/ |
|||
void AddGbrFile( PCB_LAYER_ID aLayer, wxString& aFilename ) |
|||
{ |
|||
m_params.m_GerberFileList.Add( aFilename ); |
|||
m_params.m_LayerId.push_back( aLayer ); |
|||
} |
|||
|
|||
/** |
|||
* Creates an Excellon drill file |
|||
* @param aFullFilename = the full filename |
|||
* @param aParams = true for a NPTH file, false for a PTH file |
|||
* @return true, or false if the file cannot be created |
|||
*/ |
|||
bool CreateJobFile( const wxString& aFullFilename ); |
|||
|
|||
private: |
|||
/** @return SIDE_NONE if no silk screen layer is in list |
|||
* SIDE_TOP if top silk screen layer is in list |
|||
* SIDE_BOTTOM if bottom silk screen layer is in list |
|||
* SIDE_BOTH if top and bottom silk screen layers are in list |
|||
*/ |
|||
enum ONSIDE hasSilkLayers(); |
|||
|
|||
/** @return SIDE_NONE if no soldermask layer is in list |
|||
* SIDE_TOP if top soldermask layer is in list |
|||
* SIDE_BOTTOM if bottom soldermask layer is in list |
|||
* SIDE_BOTH if top and bottom soldermask layers are in list |
|||
*/ |
|||
enum ONSIDE hasSolderMasks(); |
|||
|
|||
/** @return the key associated to sides used for some layers |
|||
* No TopOnly BotOnly Both |
|||
*/ |
|||
const char* sideKeyValue( enum ONSIDE aValue ); |
|||
|
|||
|
|||
private: |
|||
BOARD* m_pcb; // The board |
|||
REPORTER* m_reporter; // a reporter for messages (can be null) |
|||
JOBFILE_PARAMS m_params; // the list of various prms and data to write in a job file |
|||
double m_conversionUnits; // scaling factor to convert brd units to gerber units (mm) |
|||
}; |
|||
|
|||
#endif // #ifndef GERBER_JOBFILE_WRITER_H |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue