Merged with testing
This commit is contained in:
commit
863c1b4823
43
TODO.txt
43
TODO.txt
|
@ -48,37 +48,30 @@ E6) Start initial work for changing component library file format to use Dick's
|
|||
PCBNew
|
||||
------
|
||||
|
||||
* Make the zone hit testing be done in screen coordinates, not internal units.
|
||||
See the @todos in class_zone.cpp
|
||||
*) Make the zone hit testing be done in screen coordinates, not internal units.
|
||||
See the @todos in class_zone.cpp. A fixed distance in internal units becomes
|
||||
a variable distance based on zoom factor, leading to inconsistent results at
|
||||
various zoom factors. I believe that a fixed distance in pixels might make
|
||||
for a friendlier UI.
|
||||
|
||||
|
||||
Dick's Peronal TODO Items (Last Update: 24-April-2012)
|
||||
-----------------------------------------------------
|
||||
|
||||
1) Work through some scroll, pan, zoom overflows in PCBNEW's nanometer build mode.
|
||||
It is thought that if we can constrain the virtual IU space to within
|
||||
INT_MIN to INT_MAX then a whole host of other problems will go away. Most
|
||||
of the evil is in EDA_DRAW_FRAME::AdjustScrollBars() which assumes the
|
||||
virtual IU space is infinite. This function triggers a movement of the
|
||||
viewport within the virtual IU space and also a change in size of the virtual
|
||||
IU space. Once this happens, you can end up thinking there are problems in
|
||||
functions like EDA_DRAW_PANE::DrawCrossHair(), but this may be an artifact
|
||||
of having traveled outside a limited virtual IU space.
|
||||
|
||||
|
||||
2) Check that the new load visibility BOARD settings is properly setting the toolbar
|
||||
*) Check that the new load visibility BOARD settings is properly setting the toolbar
|
||||
buttons like show grid or ratsnest. Add PCB_EDIT_FRAME::SetVisibleElements() so
|
||||
toolbar crap is not known to a BOARD.
|
||||
|
||||
3) Finish removing global access requirements from KICAD_PLUGIN, so that:
|
||||
*) Finish removing global access requirements from PLUGINs, so that:
|
||||
*) a BOARD is a fully self contained document description.
|
||||
*) plugin developers do not have to access globals, since a plugin could
|
||||
very well be a dynamically loaded DLL/DSO.
|
||||
One final problem remains with BASE_SCREEN's grid origin, easy solution is to
|
||||
move just that one field into the BOARD.
|
||||
very well be a dynamically loaded DLL/DSO in the future.
|
||||
One final problem remains is the BASE_SCREEN's grid origin. An easy
|
||||
solution is to move just that one field into the BOARD.
|
||||
|
||||
*) Add ::Footprint*() functions to EAGLE_PLUGIN, so that Eagle footprint libraries
|
||||
can be used in situ.
|
||||
|
||||
*) Add a library table for Pcbnew like that in the sweet library and get rid of the
|
||||
damn search path strategy. This will enable concurrent usage of various types
|
||||
of PLUGIN::Footprint*() functions. At least LEGACY and KICAD are both needed
|
||||
concurrently.
|
||||
|
||||
4) Do an EAGLE XML import PCBNEW PLUGIN, and possibly add export support to it.
|
||||
This is PLUGIN::Load() and maybe PLUGIN::Save().
|
||||
|
||||
5) Get back to the SWEET work.
|
||||
|
||||
|
|
|
@ -109,6 +109,8 @@ set( BMAPS_SMALL
|
|||
pintype_opencoll
|
||||
pintype_openemit
|
||||
pintype_noconnect
|
||||
tree_nosel
|
||||
tree_sel
|
||||
)
|
||||
|
||||
# image basenames that go into the toolbar sized destinations, i.e. 26x26
|
||||
|
@ -127,6 +129,7 @@ set( BMAPS_MID
|
|||
add_hierar_pin
|
||||
add_hierarchical_subsheet
|
||||
add_junction
|
||||
add_keepout_area
|
||||
add_line2bus
|
||||
add_line_label
|
||||
add_line
|
||||
|
@ -473,8 +476,6 @@ set( BMAPS_MID
|
|||
track_sketch
|
||||
track_unlocked
|
||||
transistor
|
||||
tree_nosel
|
||||
tree_sel
|
||||
undelete
|
||||
undo
|
||||
unit_inch
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
|
||||
/* 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, 0x02, 0xb0, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0x5f, 0x48, 0x53,
|
||||
0x51, 0x1c, 0xc7, 0x45, 0xa7, 0x25, 0x61, 0x26, 0xb6, 0xfc, 0x93, 0x88, 0x92, 0xa9, 0x60, 0x11,
|
||||
0xf4, 0x22, 0xfd, 0x7b, 0xe8, 0x21, 0xea, 0x2d, 0xf2, 0x25, 0xa8, 0x27, 0x03, 0x85, 0x88, 0xd0,
|
||||
0xd5, 0x9a, 0x48, 0x77, 0x76, 0x23, 0x14, 0xb7, 0x74, 0x9b, 0xcb, 0x35, 0x77, 0xe7, 0xbd, 0x57,
|
||||
0xaf, 0x05, 0x35, 0x88, 0x56, 0xd6, 0x96, 0x63, 0x81, 0xf3, 0xc6, 0xc0, 0x6a, 0x43, 0x27, 0xcb,
|
||||
0x6d, 0xa0, 0xb8, 0xd9, 0x9d, 0x9b, 0xdb, 0xfc, 0x13, 0xb8, 0xb5, 0x72, 0x3b, 0x9d, 0x2b, 0x53,
|
||||
0xdc, 0x34, 0xea, 0xe1, 0xc3, 0xb9, 0x70, 0xee, 0xf7, 0x7b, 0x7e, 0xbf, 0x73, 0xbe, 0xbf, 0x34,
|
||||
0x00, 0x40, 0xda, 0x76, 0x50, 0x14, 0x4d, 0x57, 0xa9, 0x5a, 0x72, 0xe5, 0xf2, 0xdb, 0x7b, 0x52,
|
||||
0xf7, 0x76, 0x63, 0xeb, 0x83, 0x24, 0xd1, 0x42, 0x92, 0x14, 0x4a, 0x29, 0x02, 0xf1, 0x93, 0x84,
|
||||
0x70, 0x99, 0xc4, 0x85, 0x5e, 0x92, 0x44, 0x9e, 0xa9, 0xd5, 0x48, 0xf9, 0x3f, 0x0d, 0x28, 0x0a,
|
||||
0x3d, 0x04, 0x45, 0x06, 0x63, 0x67, 0xc3, 0x77, 0xa6, 0xfe, 0x6c, 0xd4, 0x7b, 0xad, 0x36, 0xea,
|
||||
0xa9, 0x3f, 0x17, 0x99, 0xe4, 0x5f, 0x59, 0x26, 0x08, 0xa1, 0x19, 0x9a, 0x57, 0x4b, 0x64, 0x5d,
|
||||
0xbc, 0x7e, 0x1c, 0xa3, 0xbb, 0xa5, 0xe2, 0x1b, 0x3b, 0x0c, 0x48, 0x1c, 0x11, 0x8e, 0x35, 0x5d,
|
||||
0x76, 0xcf, 0x9e, 0x3f, 0xf2, 0x2b, 0x50, 0x96, 0x09, 0x36, 0x99, 0x3b, 0x7d, 0x78, 0x7d, 0xf4,
|
||||
0x6e, 0xdd, 0x8c, 0xba, 0xbf, 0xc7, 0x69, 0xff, 0x66, 0x8f, 0x98, 0xc6, 0x46, 0x43, 0xa2, 0xae,
|
||||
0x8e, 0xba, 0x24, 0x03, 0x8d, 0x46, 0x93, 0x31, 0x80, 0x23, 0x83, 0xe6, 0x4b, 0x35, 0xab, 0x73,
|
||||
0xa5, 0x1c, 0x90, 0x0a, 0x7d, 0xe1, 0x58, 0xd8, 0x60, 0xd0, 0x45, 0x7c, 0x3e, 0x1f, 0x90, 0xf7,
|
||||
0x4a, 0xdf, 0x6e, 0x0a, 0x3b, 0x44, 0x8f, 0xea, 0x05, 0x02, 0x41, 0xce, 0xc6, 0xa5, 0xb1, 0xbd,
|
||||
0xeb, 0x4f, 0x95, 0xaf, 0xda, 0x4b, 0x38, 0x20, 0x15, 0x43, 0x6d, 0x59, 0xf8, 0xa3, 0x51, 0x1f,
|
||||
0xf6, 0xfb, 0xfd, 0x40, 0xd9, 0xa7, 0xb0, 0xb2, 0xa2, 0xc7, 0xdd, 0xa2, 0x66, 0xfd, 0x88, 0x2e,
|
||||
0x2c, 0x16, 0xb7, 0x37, 0x6d, 0xb8, 0x11, 0x04, 0x72, 0x13, 0x3f, 0x53, 0xe9, 0xa4, 0x4b, 0xb2,
|
||||
0xe2, 0x9f, 0x8b, 0x33, 0xc0, 0x26, 0xe3, 0xc5, 0x1c, 0x40, 0x9c, 0x2c, 0x0d, 0xbc, 0x78, 0xf9,
|
||||
0x7c, 0x29, 0x18, 0x0c, 0x02, 0xdb, 0x94, 0x2d, 0xa6, 0x1d, 0xd6, 0x7a, 0x69, 0xda, 0xf4, 0xc3,
|
||||
0x62, 0xb1, 0xac, 0x77, 0x76, 0x76, 0x34, 0x6c, 0x18, 0x0c, 0x0d, 0xa1, 0x15, 0xb8, 0xec, 0x4e,
|
||||
0x83, 0xa4, 0xe2, 0xe0, 0xbc, 0xb6, 0x28, 0x0b, 0x18, 0x0a, 0x39, 0x40, 0x5f, 0x98, 0x19, 0x97,
|
||||
0x55, 0x72, 0x19, 0xec, 0xa9, 0xd4, 0xbd, 0x18, 0x58, 0x8c, 0xb1, 0x06, 0x0e, 0x87, 0x03, 0x30,
|
||||
0x0c, 0x03, 0x2c, 0x56, 0xcb, 0x6f, 0x95, 0xba, 0x6f, 0x0a, 0x56, 0xcf, 0xd9, 0xba, 0x0c, 0x8a,
|
||||
0x42, 0xca, 0x65, 0xf7, 0xae, 0x5f, 0x7d, 0x50, 0x5b, 0xd5, 0x83, 0x54, 0x14, 0xbc, 0x41, 0x2a,
|
||||
0x8b, 0xde, 0x63, 0x58, 0xef, 0xd7, 0xf9, 0x79, 0xcf, 0x7a, 0x34, 0x1a, 0x05, 0xb3, 0xb3, 0x33,
|
||||
0x31, 0xf8, 0x0a, 0x93, 0x0a, 0xa5, 0x1c, 0x53, 0x28, 0x9f, 0xdc, 0x6f, 0x6c, 0x6c, 0xcc, 0x4c,
|
||||
0xca, 0x01, 0x0b, 0x1b, 0x1e, 0x82, 0x68, 0xe5, 0x8e, 0x8f, 0x7f, 0x38, 0x81, 0xa9, 0x95, 0xc3,
|
||||
0x2e, 0x97, 0xf3, 0xe7, 0xda, 0xda, 0x1a, 0x58, 0xf0, 0x2d, 0xc4, 0x70, 0x02, 0xa3, 0x57, 0x56,
|
||||
0x56, 0xd8, 0x4c, 0xec, 0x87, 0xec, 0x85, 0x14, 0x40, 0xf2, 0x76, 0x0d, 0x87, 0x1a, 0x57, 0x11,
|
||||
0x56, 0xab, 0x25, 0x1c, 0x0a, 0x85, 0x00, 0xe3, 0x65, 0x62, 0x03, 0x83, 0xb8, 0x19, 0x96, 0x9b,
|
||||
0x95, 0x10, 0x97, 0x42, 0x32, 0x12, 0x06, 0xf9, 0x3b, 0xc4, 0x32, 0xb9, 0xa4, 0x8d, 0xfe, 0x44,
|
||||
0xaf, 0x7a, 0x3c, 0x1e, 0xe0, 0x76, 0xbb, 0xe3, 0x83, 0xd4, 0xc0, 0x17, 0xf8, 0x84, 0xc7, 0xe1,
|
||||
0x5e, 0x0d, 0xa4, 0x2a, 0xf1, 0x1f, 0x77, 0x47, 0x94, 0x59, 0x60, 0xca, 0x6e, 0x19, 0x8c, 0x23,
|
||||
0x4b, 0xd3, 0xd3, 0xd3, 0xc0, 0xe5, 0x72, 0x41, 0x31, 0x61, 0xa5, 0x28, 0x6a, 0x5f, 0xca, 0x21,
|
||||
0x6c, 0xf9, 0x79, 0x90, 0xec, 0x24, 0x03, 0x14, 0x6d, 0xad, 0x7e, 0xad, 0x7d, 0x15, 0x34, 0x9b,
|
||||
0xcd, 0x60, 0x62, 0x72, 0x02, 0x50, 0x43, 0xa4, 0xcd, 0x31, 0xe7, 0x60, 0x7b, 0xce, 0x87, 0x14,
|
||||
0x43, 0x38, 0x89, 0x35, 0x37, 0xb1, 0x1e, 0x48, 0x32, 0x78, 0xd8, 0xde, 0x76, 0x51, 0xa7, 0x7b,
|
||||
0x17, 0x35, 0x99, 0x46, 0xe3, 0xb0, 0x67, 0x2b, 0x9f, 0xcf, 0xdf, 0x7e, 0x72, 0x0e, 0xe4, 0x28,
|
||||
0x24, 0xfd, 0xaf, 0xd3, 0xc8, 0x22, 0x12, 0xb5, 0xb7, 0xc0, 0xa1, 0x91, 0xf0, 0x78, 0xbc, 0xec,
|
||||
0xff, 0x19, 0x65, 0x96, 0x3f, 0xa1, 0x97, 0xae, 0x1c, 0xfc, 0x3f, 0x7e, 0xea, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_nosel_xpm[1] = {{ png, sizeof( png ), "tree_nosel_xpm" }};
|
||||
|
||||
//EOF
|
|
@ -0,0 +1,54 @@
|
|||
|
||||
/* 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, 0x02, 0x4a, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x32, 0x9e, 0x37, 0xaf, 0x52, 0x74, 0xee, 0xdc, 0x1a, 0xf5, 0x99, 0x33, 0x1b, 0x44, 0xd0,
|
||||
0xe5, 0xb0, 0x61, 0x38, 0x03, 0xa4, 0x69, 0xc1, 0xbc, 0xba, 0x65, 0x33, 0x56, 0x14, 0xbe, 0x9f,
|
||||
0xb9, 0xac, 0xe8, 0xfd, 0xfc, 0x79, 0xb5, 0xaf, 0x80, 0x78, 0xc3, 0xbc, 0x79, 0x0d, 0x4a, 0x04,
|
||||
0x0d, 0x98, 0x3f, 0xbf, 0x41, 0x01, 0xa8, 0xf9, 0x70, 0xc1, 0x61, 0xfb, 0x57, 0xee, 0x57, 0x84,
|
||||
0x7f, 0xb9, 0x5c, 0x12, 0xfc, 0xed, 0x7d, 0x45, 0xec, 0x67, 0xd2, 0x19, 0xfd, 0x0f, 0xf3, 0xe6,
|
||||
0xd5, 0x1e, 0xeb, 0xe9, 0x6b, 0x2e, 0x5d, 0xb0, 0x68, 0xde, 0xb1, 0xce, 0xce, 0xb6, 0x10, 0xac,
|
||||
0x06, 0x2c, 0x98, 0x57, 0xdb, 0x1c, 0xb1, 0x4f, 0xf7, 0x85, 0xc9, 0x01, 0x8e, 0x3f, 0x1a, 0xbb,
|
||||
0x19, 0xfe, 0xc3, 0xb0, 0xe9, 0x7e, 0xae, 0x3f, 0xb5, 0x4b, 0xd3, 0xdf, 0x9c, 0x3a, 0x7d, 0xe2,
|
||||
0xe7, 0xee, 0x3d, 0xbb, 0x5e, 0x34, 0x37, 0xd7, 0x68, 0x82, 0xd4, 0x37, 0x34, 0x34, 0xf0, 0xc0,
|
||||
0x0d, 0x98, 0x34, 0x29, 0x97, 0x7d, 0xf6, 0xfc, 0xca, 0x25, 0x56, 0x9b, 0x44, 0x3f, 0xa9, 0x6d,
|
||||
0x62, 0xf8, 0x8f, 0x8e, 0x67, 0x6d, 0x9c, 0xf8, 0xe7, 0xed, 0xdb, 0xb7, 0xff, 0x17, 0x2f, 0x59,
|
||||
0x78, 0x0c, 0xac, 0x81, 0x81, 0x81, 0x71, 0xf6, 0xdc, 0x59, 0xa7, 0xa6, 0x4c, 0x9b, 0x38, 0x0d,
|
||||
0xcc, 0x07, 0x9a, 0xc6, 0x32, 0x67, 0x5e, 0x55, 0x9f, 0xfe, 0x02, 0xe1, 0x8f, 0x2a, 0x2b, 0x19,
|
||||
0xfe, 0xa3, 0xe3, 0xfe, 0xa5, 0xed, 0xbf, 0x3f, 0x7c, 0xf8, 0xf0, 0x7f, 0xff, 0xfe, 0x7d, 0xaf,
|
||||
0xa6, 0x4e, 0x9f, 0x3c, 0x7f, 0xf2, 0x94, 0x09, 0xbb, 0x2e, 0x5d, 0xba, 0xf8, 0x73, 0xc1, 0xc2,
|
||||
0x79, 0xc7, 0xe1, 0x5e, 0x00, 0xfa, 0x33, 0xc5, 0xa4, 0x5b, 0xf9, 0xb2, 0xe2, 0x1c, 0x96, 0xbf,
|
||||
0x4a, 0x0b, 0x19, 0xfe, 0xc3, 0xf1, 0x7c, 0xc6, 0xff, 0xe1, 0x5d, 0x7e, 0x2f, 0x6f, 0xdf, 0xbe,
|
||||
0xfd, 0xf7, 0xd1, 0xa3, 0x47, 0xff, 0x5f, 0xbe, 0x7c, 0xf9, 0x1f, 0x44, 0x03, 0x0d, 0xf8, 0xdd,
|
||||
0xdb, 0xdf, 0xdd, 0x8a, 0x12, 0x88, 0x93, 0x67, 0x94, 0x24, 0xca, 0x97, 0x4a, 0xde, 0x93, 0xe9,
|
||||
0xe0, 0xf8, 0x25, 0xdb, 0xc7, 0xf2, 0x5f, 0xb6, 0x8b, 0xfd, 0xa7, 0x56, 0x99, 0xea, 0x8d, 0x35,
|
||||
0xeb, 0x57, 0xbe, 0x7e, 0xf6, 0xec, 0xd9, 0xff, 0x3b, 0x77, 0xee, 0xfc, 0xdf, 0xba, 0x6d, 0xf3,
|
||||
0xd3, 0xb5, 0xeb, 0x56, 0x5f, 0x9f, 0x30, 0xa9, 0xa7, 0x2b, 0x34, 0x34, 0x94, 0x19, 0x25, 0x1a,
|
||||
0xe7, 0xcd, 0xab, 0x96, 0x6d, 0x99, 0x94, 0xe5, 0xeb, 0x55, 0xe8, 0x56, 0xa8, 0x9f, 0xa5, 0x3f,
|
||||
0xd1, 0x28, 0xcb, 0xa8, 0x6f, 0xee, 0x82, 0x99, 0xe7, 0x1f, 0x3f, 0x7e, 0xfc, 0xff, 0xd5, 0xab,
|
||||
0x57, 0xff, 0xb7, 0x6d, 0xdf, 0xfa, 0xb4, 0xa6, 0xb9, 0x46, 0x1d, 0x67, 0x3a, 0x00, 0xe1, 0x99,
|
||||
0x33, 0xd3, 0x58, 0xe7, 0xcc, 0x69, 0x10, 0x5a, 0xb4, 0xa8, 0x41, 0x6c, 0xd2, 0xa4, 0x9e, 0xe6,
|
||||
0xcb, 0x97, 0x2f, 0x7d, 0x03, 0x39, 0xfb, 0xc2, 0xc5, 0xf3, 0x1f, 0xfa, 0x26, 0xf6, 0xa6, 0xe2,
|
||||
0x4d, 0x48, 0xc8, 0xb8, 0xa1, 0xb5, 0x41, 0x67, 0xd7, 0xae, 0x1d, 0xcf, 0x9f, 0x3c, 0x79, 0xf2,
|
||||
0xff, 0xc1, 0x83, 0xfb, 0x7f, 0x66, 0xcf, 0x99, 0xbe, 0x92, 0x60, 0x4a, 0x84, 0xe1, 0xdc, 0xdc,
|
||||
0x5c, 0xf6, 0xc5, 0x8b, 0x17, 0x5c, 0x06, 0xf9, 0x19, 0x64, 0xc0, 0x92, 0x65, 0x8b, 0x2e, 0x02,
|
||||
0x63, 0x8a, 0x8d, 0x68, 0x03, 0xa6, 0x4c, 0x9b, 0xb4, 0xec, 0xc2, 0x85, 0xf3, 0x7f, 0xee, 0xdd,
|
||||
0xbb, 0xf7, 0x7f, 0xcb, 0xd6, 0x4d, 0x8f, 0x1b, 0x1a, 0x2a, 0x14, 0x88, 0xca, 0x0b, 0x20, 0xdc,
|
||||
0xdc, 0xdc, 0xe0, 0xb2, 0x7d, 0xfb, 0xd6, 0x4f, 0x67, 0xcf, 0x9e, 0xfd, 0x7f, 0xe8, 0xf0, 0xa1,
|
||||
0x77, 0x3d, 0xfd, 0x9d, 0x31, 0x44, 0x67, 0x26, 0x10, 0x6e, 0xef, 0x6c, 0x2d, 0xda, 0xb3, 0x77,
|
||||
0xcf, 0x9f, 0xfd, 0x07, 0xf6, 0xfd, 0x9a, 0x3e, 0x73, 0xca, 0x3c, 0x92, 0x72, 0x23, 0x34, 0x8d,
|
||||
0x33, 0xf5, 0xf4, 0x75, 0xd5, 0xf7, 0x4d, 0xe8, 0x2e, 0x22, 0x46, 0x33, 0x08, 0x03, 0x00, 0xa3,
|
||||
0x36, 0xa6, 0x81, 0xc6, 0x70, 0x96, 0x32, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_sel_xpm[1] = {{ png, sizeof( png ), "tree_sel_xpm" }};
|
||||
|
||||
//EOF
|
|
@ -0,0 +1,82 @@
|
|||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps.h>
|
||||
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x04, 0x0b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0x5f, 0x4c, 0x53,
|
||||
0x57, 0x1c, 0x07, 0xf0, 0x5b, 0x4a, 0x59, 0x41, 0x18, 0xcc, 0x44, 0xd4, 0x42, 0x81, 0xd2, 0xd6,
|
||||
0x21, 0xd3, 0x0d, 0xc7, 0xc0, 0xc4, 0xd0, 0x0c, 0x1a, 0x61, 0xe8, 0x58, 0x04, 0x16, 0x15, 0x87,
|
||||
0x32, 0x08, 0x43, 0x83, 0xcc, 0x4c, 0x37, 0x56, 0xa0, 0x02, 0x86, 0xe0, 0xa4, 0x30, 0x81, 0xc1,
|
||||
0x1c, 0x6a, 0x41, 0xf9, 0x53, 0x6a, 0xe5, 0x6f, 0x0b, 0x88, 0x80, 0xe0, 0xda, 0x52, 0xda, 0x42,
|
||||
0xf4, 0x61, 0xcf, 0x4b, 0x7c, 0x59, 0x32, 0x93, 0xbd, 0x2c, 0xf1, 0xdf, 0x93, 0x8c, 0xef, 0x7a,
|
||||
0x6f, 0xd3, 0xd3, 0x15, 0xda, 0x72, 0xb7, 0x87, 0x3d, 0x7c, 0xdb, 0xdb, 0x7b, 0xcf, 0xf9, 0x7d,
|
||||
0xee, 0x39, 0x3d, 0xf7, 0x0f, 0x05, 0x80, 0xfa, 0x3f, 0xc2, 0x7c, 0xc4, 0xbe, 0x1d, 0xf4, 0x4b,
|
||||
0x94, 0x24, 0xe0, 0x35, 0x9d, 0xb4, 0x0c, 0xce, 0x6a, 0xe1, 0x29, 0xce, 0x5a, 0x45, 0x05, 0xb5,
|
||||
0x76, 0xfe, 0x3c, 0x85, 0xa2, 0x62, 0xce, 0x5a, 0xd6, 0x61, 0xce, 0x5f, 0xd1, 0x52, 0xe7, 0xf1,
|
||||
0xff, 0x90, 0x17, 0x04, 0x12, 0xef, 0x09, 0x7d, 0xd2, 0xa0, 0x56, 0xe1, 0x72, 0x6b, 0x2a, 0x6a,
|
||||
0xaa, 0x29, 0xaf, 0x69, 0xb8, 0x22, 0x85, 0xfa, 0x7e, 0x3f, 0x7a, 0x8d, 0x73, 0xac, 0x73, 0x7d,
|
||||
0x7a, 0x0c, 0x51, 0x52, 0xee, 0x6b, 0x0f, 0xe8, 0x92, 0x6a, 0x3d, 0xc2, 0xc1, 0xc5, 0xda, 0x10,
|
||||
0x8f, 0x7d, 0x8d, 0xcd, 0x89, 0xd0, 0x2d, 0x5b, 0x70, 0x77, 0xc5, 0xca, 0x2a, 0x34, 0xe6, 0x01,
|
||||
0xa5, 0x65, 0xf0, 0x9f, 0xba, 0x8a, 0x29, 0x6b, 0xb8, 0x68, 0xef, 0x2d, 0xc2, 0x80, 0x71, 0xd4,
|
||||
0xd1, 0x78, 0x09, 0x3d, 0xd3, 0xd7, 0x50, 0xdf, 0x10, 0x49, 0x30, 0x65, 0xf7, 0x51, 0xd4, 0x4c,
|
||||
0xb4, 0x42, 0x61, 0x68, 0xc1, 0x80, 0xed, 0xe7, 0x7f, 0x07, 0xe5, 0x1d, 0xe3, 0xfd, 0xe9, 0x2a,
|
||||
0xa4, 0xea, 0x90, 0x6d, 0xe8, 0xd0, 0x35, 0x5c, 0x43, 0xa0, 0xfc, 0x2a, 0x0a, 0x5c, 0x85, 0x33,
|
||||
0x1f, 0xb4, 0x1d, 0x80, 0x76, 0x79, 0x91, 0x3d, 0x54, 0x52, 0xca, 0x7d, 0xe5, 0x2a, 0x74, 0xd3,
|
||||
0xd0, 0xb4, 0xa1, 0xc3, 0x1d, 0xc7, 0x99, 0x2b, 0x95, 0x3c, 0xe6, 0xf8, 0x99, 0x6a, 0x37, 0x44,
|
||||
0x47, 0xf6, 0x63, 0x16, 0x74, 0x8e, 0x91, 0xb3, 0x82, 0x0a, 0x0a, 0x03, 0x9f, 0xb9, 0xa0, 0x1f,
|
||||
0xfa, 0x4a, 0x36, 0x74, 0x18, 0x5c, 0x9c, 0x22, 0x23, 0x3a, 0xb9, 0x0e, 0xa2, 0x93, 0x7d, 0x33,
|
||||
0x9f, 0x1d, 0x74, 0xf0, 0xd0, 0x1b, 0x7f, 0xd4, 0x56, 0x52, 0x68, 0xfa, 0x82, 0x83, 0xba, 0x4b,
|
||||
0x6f, 0x41, 0x63, 0x9e, 0x20, 0x8d, 0x75, 0x76, 0x13, 0x5a, 0xba, 0xb2, 0x09, 0x54, 0xd6, 0x24,
|
||||
0xc5, 0xc7, 0xea, 0x63, 0x4c, 0xc2, 0x6b, 0xc3, 0x09, 0xf6, 0xe9, 0xed, 0xe2, 0xcd, 0x21, 0xc9,
|
||||
0xde, 0xd0, 0x27, 0x5a, 0xf9, 0x56, 0x98, 0xb7, 0x71, 0x61, 0xd8, 0xcb, 0x45, 0xc7, 0x09, 0x2e,
|
||||
0x9a, 0x3b, 0xe5, 0x68, 0xeb, 0x39, 0x8e, 0xba, 0xfa, 0x70, 0xf7, 0x42, 0x70, 0x4c, 0x5f, 0xdf,
|
||||
0x82, 0x96, 0x14, 0xba, 0x7a, 0xa7, 0x15, 0x29, 0xc5, 0x7c, 0x82, 0x15, 0x0d, 0x9e, 0xf3, 0x0f,
|
||||
0xe5, 0x8a, 0x42, 0x7e, 0xb7, 0x08, 0x22, 0x61, 0x8e, 0x0c, 0x62, 0x30, 0x3a, 0x33, 0x62, 0x2e,
|
||||
0x5a, 0x4a, 0x38, 0x1e, 0xcb, 0xbb, 0x53, 0x53, 0xce, 0x14, 0x98, 0xe8, 0xbe, 0x01, 0x53, 0xce,
|
||||
0x61, 0x2c, 0x8b, 0xe2, 0x60, 0x16, 0xee, 0x40, 0xe1, 0x47, 0x3c, 0x06, 0x0a, 0x54, 0x70, 0x50,
|
||||
0x3e, 0xa4, 0xf4, 0x0d, 0xc9, 0xa4, 0x21, 0xbf, 0x8d, 0xe6, 0xe5, 0xc0, 0x26, 0x15, 0xc3, 0xb2,
|
||||
0x63, 0x0b, 0xc1, 0x4c, 0x91, 0x5c, 0xdc, 0xca, 0x0a, 0x40, 0x7d, 0x7d, 0x04, 0x6e, 0x8c, 0x37,
|
||||
0x62, 0xb2, 0xb3, 0x1d, 0x66, 0x79, 0x3a, 0x03, 0xd0, 0x59, 0x4c, 0xff, 0x10, 0xe3, 0x43, 0x5a,
|
||||
0x5c, 0x18, 0x6b, 0x44, 0x60, 0x55, 0x00, 0x83, 0xf1, 0x1c, 0xdf, 0x95, 0xfa, 0x2b, 0xde, 0x21,
|
||||
0xfa, 0x82, 0x6d, 0x1e, 0x54, 0x63, 0x78, 0x61, 0x0e, 0x33, 0xca, 0x2a, 0x2c, 0xbd, 0x93, 0x00,
|
||||
0xab, 0x70, 0x3b, 0xac, 0xd1, 0xdb, 0x60, 0x8b, 0x11, 0xc0, 0x94, 0x99, 0x81, 0x87, 0xc7, 0x8f,
|
||||
0x12, 0xc0, 0x2e, 0x11, 0x63, 0x56, 0xf1, 0x0d, 0x86, 0x6c, 0xee, 0xa5, 0x7d, 0xfa, 0xae, 0x82,
|
||||
0x4c, 0x21, 0xbf, 0x9a, 0x87, 0xba, 0xa9, 0x0e, 0xdf, 0x90, 0xab, 0xd3, 0xc8, 0x83, 0xfb, 0xee,
|
||||
0xc2, 0x31, 0x42, 0x3c, 0x0a, 0x0b, 0x73, 0x24, 0x14, 0xcb, 0xb1, 0x31, 0x58, 0x7a, 0x7f, 0x1f,
|
||||
0xc6, 0x47, 0x74, 0x5e, 0x57, 0xd9, 0x89, 0xfe, 0x33, 0x04, 0xdb, 0xa2, 0x0c, 0x46, 0xbd, 0xa1,
|
||||
0xd3, 0x3f, 0xe4, 0xca, 0x6c, 0xe5, 0xd7, 0x0c, 0xf2, 0x98, 0xcf, 0x67, 0xf2, 0x28, 0x22, 0x02,
|
||||
0xfa, 0x81, 0x5e, 0xbf, 0x77, 0x83, 0x4f, 0xba, 0x0b, 0x08, 0xf6, 0xe6, 0xc5, 0x30, 0x6c, 0x4f,
|
||||
0x0e, 0x58, 0xf5, 0x0b, 0xdd, 0x53, 0x7d, 0x07, 0xbb, 0x54, 0x82, 0x95, 0xe8, 0x28, 0x3c, 0x0e,
|
||||
0x09, 0x61, 0xb2, 0x22, 0x8c, 0x86, 0xf9, 0xa0, 0x1c, 0x43, 0x56, 0xb3, 0x4f, 0x88, 0xbe, 0x78,
|
||||
0xd3, 0x7f, 0x3a, 0x44, 0xb0, 0xa0, 0x2f, 0x69, 0xc2, 0x07, 0x34, 0x79, 0xad, 0xc3, 0x31, 0x6d,
|
||||
0x22, 0xf7, 0x7f, 0xe2, 0x00, 0xed, 0x12, 0x09, 0xf9, 0x3d, 0x5f, 0x56, 0xea, 0x77, 0x54, 0xf4,
|
||||
0x6d, 0x29, 0xa5, 0x3d, 0xcd, 0x89, 0x55, 0xfa, 0x80, 0xe8, 0xf9, 0xb7, 0xed, 0x4e, 0x20, 0x45,
|
||||
0x6d, 0x89, 0xbb, 0x31, 0xae, 0xd3, 0x40, 0xaf, 0xed, 0x67, 0xb6, 0x5d, 0xfb, 0xa7, 0xda, 0xbe,
|
||||
0xf7, 0x8b, 0x69, 0x6c, 0x46, 0x24, 0xaa, 0xde, 0x05, 0xf7, 0x5b, 0x2f, 0x10, 0xbd, 0xea, 0x96,
|
||||
0x52, 0x53, 0x48, 0x31, 0x3a, 0xf7, 0xae, 0x36, 0x93, 0xce, 0x7a, 0x4d, 0x1f, 0x39, 0x09, 0x6b,
|
||||
0xd2, 0x7b, 0x18, 0x36, 0x2d, 0xf8, 0xc5, 0xba, 0xe6, 0xf5, 0xe0, 0x9f, 0xe6, 0xac, 0x6d, 0x80,
|
||||
0x16, 0x8a, 0x8b, 0x3c, 0x10, 0x63, 0xee, 0x91, 0x0d, 0x9d, 0x0d, 0xbd, 0x3d, 0xb0, 0xc7, 0x3b,
|
||||
0xa7, 0x75, 0xee, 0xdc, 0xd9, 0x4d, 0x1f, 0x13, 0x3b, 0xf7, 0xac, 0x5b, 0x75, 0xd7, 0x2f, 0xd7,
|
||||
0x7a, 0xfc, 0x2f, 0xf4, 0x99, 0x8f, 0x4e, 0x4f, 0x7a, 0x2d, 0xf0, 0xa0, 0xa2, 0x9c, 0x5c, 0x4f,
|
||||
0x63, 0x86, 0x51, 0xf6, 0x8f, 0x09, 0xa9, 0x03, 0x9a, 0x4b, 0x4e, 0xf2, 0x18, 0xcd, 0x4c, 0xb5,
|
||||
0xc2, 0x67, 0x81, 0xa1, 0x45, 0x23, 0x2c, 0xfb, 0x53, 0x9d, 0xa3, 0xce, 0x3b, 0xc2, 0x1e, 0xca,
|
||||
0x8f, 0x0b, 0x7e, 0x6a, 0x89, 0x12, 0xfc, 0x63, 0x01, 0x24, 0x62, 0xd8, 0x38, 0xef, 0x77, 0x5a,
|
||||
0x0c, 0xb7, 0xd4, 0xa4, 0xbd, 0xbe, 0xff, 0x36, 0x3b, 0x88, 0x9e, 0xba, 0x81, 0xb3, 0xa5, 0xb0,
|
||||
0x8b, 0xe3, 0x99, 0x8e, 0xb3, 0x17, 0xbe, 0x62, 0xf5, 0x4e, 0xb0, 0xf0, 0xf9, 0x29, 0xa6, 0xfd,
|
||||
0xc3, 0xcf, 0x0a, 0xd8, 0x41, 0xa2, 0xc4, 0xe0, 0x5f, 0x93, 0x64, 0xb1, 0x2f, 0x4f, 0xa6, 0xc4,
|
||||
0xbe, 0x1c, 0xd9, 0x1a, 0xba, 0x2a, 0x4f, 0xdf, 0xf5, 0x7c, 0x7f, 0x66, 0xc2, 0xb3, 0xcd, 0x92,
|
||||
0x2d, 0x93, 0xbc, 0xa0, 0xdb, 0x97, 0xed, 0x13, 0xbe, 0xf2, 0x76, 0x3c, 0x55, 0xbe, 0xeb, 0x39,
|
||||
0xfd, 0xca, 0x45, 0x20, 0x81, 0x98, 0x3a, 0xb0, 0x53, 0x4c, 0x65, 0xd3, 0x49, 0x8e, 0xa3, 0x72,
|
||||
0x5d, 0xdb, 0x6c, 0x22, 0x8d, 0xa7, 0x72, 0xfc, 0x1d, 0x17, 0x88, 0xa8, 0x4c, 0xda, 0xf8, 0x1b,
|
||||
0x60, 0x76, 0x60, 0xa1, 0x4e, 0x22, 0xae, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_keepout_area_xpm[1] = {{ png, sizeof( png ), "add_keepout_area_xpm" }};
|
||||
|
||||
//EOF
|
|
@ -1,101 +0,0 @@
|
|||
|
||||
/* 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, 0x05, 0x39, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x7b, 0x4c, 0x53,
|
||||
0x57, 0x1c, 0xc7, 0x71, 0x80, 0x20, 0x2c, 0xf3, 0x3d, 0x61, 0x20, 0x28, 0xe8, 0xa6, 0x6e, 0x6c,
|
||||
0x73, 0x31, 0x8b, 0x0b, 0x7b, 0x28, 0x3e, 0x82, 0x4b, 0x96, 0xfd, 0xb1, 0xb9, 0x30, 0xb3, 0xb9,
|
||||
0xb9, 0x87, 0x9a, 0x65, 0x4e, 0x54, 0x14, 0xa1, 0xb7, 0xf5, 0xd2, 0x96, 0xb6, 0x14, 0x2a, 0xd1,
|
||||
0x81, 0x58, 0x68, 0xef, 0x6d, 0xe9, 0x40, 0x29, 0xaf, 0xa1, 0x08, 0x91, 0xc7, 0x98, 0x4f, 0x8c,
|
||||
0x0e, 0xc9, 0x14, 0xb0, 0x16, 0xa4, 0x22, 0xb6, 0x80, 0xa0, 0xd0, 0x27, 0x4f, 0xf9, 0xed, 0x9c,
|
||||
0xe6, 0x62, 0xee, 0x98, 0x14, 0x96, 0x99, 0xfd, 0xf1, 0xcd, 0xed, 0x4d, 0x7f, 0xe7, 0xf7, 0x39,
|
||||
0xf7, 0xf7, 0x3a, 0xc7, 0x0d, 0x00, 0xdc, 0xfe, 0x0f, 0x4d, 0xf8, 0x07, 0x4d, 0x93, 0x8b, 0x68,
|
||||
0x25, 0xf1, 0x3d, 0x4d, 0x73, 0xf7, 0xd2, 0x34, 0x71, 0x48, 0x45, 0xf1, 0xb6, 0x51, 0x54, 0xdc,
|
||||
0xfc, 0x67, 0x06, 0xd2, 0x28, 0x89, 0x57, 0x28, 0x8a, 0x2b, 0x57, 0x51, 0xdc, 0x6e, 0x9a, 0xe2,
|
||||
0xf6, 0x22, 0x3d, 0x62, 0xa9, 0x07, 0x81, 0x4b, 0xd1, 0x26, 0x96, 0xfd, 0x27, 0x10, 0x72, 0xf0,
|
||||
0x26, 0x02, 0x34, 0xa9, 0x15, 0x44, 0xdb, 0x79, 0xe9, 0x8e, 0x9e, 0x07, 0x7b, 0x22, 0x87, 0xcd,
|
||||
0x3f, 0x6d, 0x18, 0xb5, 0x20, 0x75, 0xed, 0xd9, 0x34, 0x74, 0x4d, 0xf8, 0x55, 0xef, 0x2f, 0x59,
|
||||
0x71, 0x6d, 0x08, 0xd8, 0xa0, 0xa6, 0x88, 0xf5, 0xec, 0xb5, 0x71, 0x64, 0xdc, 0x0a, 0x0e, 0x19,
|
||||
0xfb, 0xfe, 0xa4, 0x20, 0x95, 0x8a, 0x08, 0x45, 0x0e, 0xce, 0xe7, 0x1c, 0x8f, 0x6d, 0x34, 0xec,
|
||||
0x5c, 0x3f, 0xd8, 0xf9, 0xc9, 0xca, 0x11, 0x73, 0xd8, 0x2c, 0xb0, 0x86, 0x4c, 0x07, 0xeb, 0x62,
|
||||
0x4f, 0x30, 0x87, 0xcd, 0x84, 0x07, 0x1f, 0x2e, 0x1b, 0x35, 0xec, 0x88, 0x18, 0x2a, 0x48, 0x8f,
|
||||
0x69, 0xa2, 0x29, 0x5e, 0x7d, 0xb6, 0x92, 0x5c, 0x25, 0x14, 0x91, 0x3c, 0x89, 0x34, 0xd1, 0x9c,
|
||||
0xad, 0x51, 0x99, 0x8f, 0xcb, 0x8f, 0xd9, 0xb9, 0x24, 0x67, 0xaf, 0x4b, 0x10, 0xad, 0xe4, 0xca,
|
||||
0xd4, 0x59, 0xf1, 0x17, 0x6f, 0x6c, 0xfb, 0xc0, 0xd1, 0x1e, 0x1e, 0x38, 0xda, 0xb3, 0xc8, 0x13,
|
||||
0x9e, 0x26, 0xe3, 0xaa, 0x05, 0xd0, 0xb8, 0x35, 0x7c, 0x48, 0xad, 0xe0, 0x5c, 0x48, 0x91, 0x91,
|
||||
0x8d, 0x05, 0x45, 0xf9, 0x8e, 0xf6, 0xf6, 0x76, 0xd0, 0xdd, 0xd6, 0x81, 0x2c, 0x35, 0xb9, 0x8f,
|
||||
0x20, 0x0e, 0x2c, 0x9f, 0x10, 0xa4, 0x50, 0x90, 0x73, 0x50, 0x5e, 0x4a, 0x4e, 0xf1, 0xbe, 0xac,
|
||||
0xbb, 0xb9, 0x61, 0xd9, 0x90, 0x31, 0x18, 0x39, 0x74, 0xa1, 0x9b, 0x11, 0x4b, 0x46, 0xb4, 0xfb,
|
||||
0xb7, 0x18, 0xd4, 0xd9, 0xca, 0x91, 0xde, 0xde, 0x5e, 0xc0, 0xa0, 0xb4, 0xf4, 0xa3, 0x76, 0x1e,
|
||||
0x2f, 0x7e, 0x83, 0xcb, 0xd0, 0xa9, 0x94, 0xc4, 0x46, 0x14, 0xb6, 0x9c, 0xca, 0x4f, 0x57, 0x77,
|
||||
0x35, 0xad, 0x98, 0x09, 0x86, 0x20, 0x8f, 0x27, 0x6a, 0x7d, 0x8a, 0x6e, 0x2f, 0xf5, 0x05, 0x6a,
|
||||
0x67, 0xd4, 0xc0, 0xf5, 0xfa, 0xba, 0xc7, 0x7d, 0x7d, 0x7d, 0x70, 0xe7, 0x4e, 0x0b, 0x08, 0x45,
|
||||
0x09, 0xf5, 0xe3, 0x9d, 0x93, 0x7c, 0xee, 0x11, 0x04, 0xdf, 0xf4, 0x04, 0x44, 0x51, 0x44, 0x04,
|
||||
0x2a, 0xdf, 0x63, 0xa7, 0x37, 0x86, 0x3d, 0xba, 0x11, 0xe2, 0x03, 0xba, 0x40, 0x0f, 0x97, 0x6a,
|
||||
0x0c, 0xf6, 0x82, 0xb4, 0xdd, 0xdf, 0x8e, 0xe8, 0xf5, 0x3a, 0xc0, 0xa0, 0xe6, 0xe6, 0x66, 0x10,
|
||||
0x24, 0x92, 0x37, 0xdd, 0xdc, 0xdc, 0xa6, 0x8d, 0x41, 0x12, 0x04, 0xbc, 0xd8, 0xdc, 0x13, 0x39,
|
||||
0xb6, 0x24, 0xa9, 0x78, 0x80, 0x05, 0x22, 0xdf, 0x42, 0x65, 0x2b, 0xce, 0x8d, 0x58, 0x6e, 0xbc,
|
||||
0xbc, 0xd8, 0x17, 0xfe, 0x0c, 0xf0, 0x70, 0xa9, 0xab, 0xc1, 0xde, 0x20, 0xff, 0xf8, 0x3d, 0xeb,
|
||||
0x99, 0xb2, 0x92, 0x21, 0x8b, 0xc5, 0x02, 0x46, 0xa3, 0x11, 0x4a, 0x4e, 0x15, 0xdb, 0x85, 0xe2,
|
||||
0x84, 0x53, 0x1c, 0x92, 0xb3, 0x1a, 0x7d, 0xc5, 0x3e, 0x79, 0x66, 0x86, 0xe5, 0xfe, 0xfd, 0xfb,
|
||||
0x70, 0x38, 0x35, 0xd9, 0xb1, 0x79, 0xf3, 0x66, 0x77, 0x27, 0x48, 0xad, 0xe6, 0x04, 0xa0, 0x62,
|
||||
0x38, 0x98, 0x19, 0xb5, 0xb6, 0x24, 0x77, 0xf9, 0xbc, 0xc1, 0x6b, 0x2f, 0xb9, 0x03, 0xd6, 0xd5,
|
||||
0x09, 0x54, 0xb4, 0x74, 0xd6, 0x70, 0x5a, 0xd4, 0xba, 0x1a, 0x89, 0x54, 0xf4, 0x18, 0x83, 0x4c,
|
||||
0x26, 0x13, 0xb4, 0xb6, 0xb6, 0xc2, 0xa5, 0x4b, 0x17, 0x06, 0x0a, 0x8a, 0xf3, 0xcd, 0x55, 0x55,
|
||||
0x15, 0xfd, 0xfa, 0x66, 0x3d, 0xb4, 0xb5, 0xb5, 0x81, 0x48, 0x22, 0x70, 0x6c, 0xdf, 0xbe, 0xdd,
|
||||
0x93, 0xd5, 0x43, 0xbc, 0x8f, 0x14, 0x19, 0x07, 0x7e, 0x4c, 0x79, 0xf9, 0xc5, 0xbe, 0x92, 0x40,
|
||||
0xef, 0xd1, 0x8b, 0xfe, 0xee, 0x30, 0x5e, 0x17, 0x90, 0x4e, 0x07, 0x78, 0x81, 0xf4, 0xb5, 0x85,
|
||||
0xb6, 0xa4, 0x24, 0xc1, 0xa3, 0x5b, 0xb7, 0x9a, 0x9c, 0xa0, 0x8e, 0x8e, 0x0e, 0x67, 0xf8, 0xcc,
|
||||
0x66, 0x33, 0x74, 0x76, 0x76, 0xa2, 0x9c, 0xdd, 0x01, 0x83, 0xc1, 0x00, 0x95, 0x95, 0x67, 0x07,
|
||||
0xf8, 0xc2, 0x43, 0xe9, 0x7f, 0x2b, 0x6f, 0xb5, 0x5a, 0x34, 0x17, 0x85, 0x6f, 0xcb, 0xcf, 0xfb,
|
||||
0xbf, 0xd8, 0x4d, 0x06, 0xcd, 0xee, 0x91, 0xfb, 0xcf, 0x18, 0x3e, 0xe3, 0xe7, 0x01, 0xd5, 0x7e,
|
||||
0xee, 0x4e, 0x95, 0xa3, 0xdf, 0x72, 0x7f, 0x9f, 0x61, 0x5e, 0xf0, 0x5c, 0x8b, 0x58, 0x44, 0x9a,
|
||||
0xea, 0xeb, 0xaf, 0x8f, 0x0c, 0x0e, 0x0e, 0xc2, 0x18, 0xa8, 0xa5, 0xa5, 0x05, 0x4c, 0x1d, 0x26,
|
||||
0xb8, 0x77, 0xef, 0x1e, 0xe8, 0x74, 0x3a, 0x28, 0xfe, 0xb5, 0xd0, 0xce, 0x4f, 0x24, 0x9b, 0x63,
|
||||
0x62, 0x62, 0x7c, 0x9f, 0x36, 0x19, 0xfc, 0x68, 0x05, 0x11, 0x99, 0xc1, 0xdf, 0xf9, 0x59, 0xdc,
|
||||
0xab, 0x41, 0xf9, 0xfb, 0xe6, 0xfa, 0xf4, 0xec, 0x9d, 0xed, 0xe5, 0x88, 0x9e, 0xe5, 0x35, 0x10,
|
||||
0x8d, 0x9e, 0xfc, 0x77, 0xdf, 0xa8, 0x12, 0x27, 0xf2, 0x74, 0xb5, 0xb5, 0x97, 0x86, 0xfb, 0xfb,
|
||||
0xfb, 0x01, 0x83, 0xac, 0x56, 0xab, 0xb3, 0xbc, 0xb3, 0x94, 0x99, 0xd6, 0x94, 0xc3, 0xd2, 0x5b,
|
||||
0xd2, 0x14, 0x49, 0x8b, 0x24, 0x29, 0xb1, 0x39, 0x51, 0xcc, 0xff, 0x06, 0xe7, 0x66, 0xc2, 0x59,
|
||||
0x97, 0x9d, 0x1d, 0xe3, 0xab, 0x50, 0x70, 0x57, 0xaa, 0x54, 0xdc, 0x70, 0xac, 0x23, 0xc4, 0xd7,
|
||||
0x91, 0x59, 0xa9, 0xd1, 0x6b, 0x34, 0x1a, 0xc1, 0x9a, 0x64, 0x99, 0xe8, 0x8f, 0xdf, 0x7e, 0xaf,
|
||||
0x1e, 0xb4, 0xdb, 0xed, 0xe0, 0x70, 0x38, 0x9c, 0xa0, 0x87, 0x0f, 0x1f, 0x02, 0x45, 0x2b, 0xec,
|
||||
0x85, 0xc5, 0xf9, 0x02, 0xb4, 0x7e, 0x1e, 0xe3, 0x07, 0x57, 0x5f, 0xc8, 0x94, 0xa6, 0xb7, 0x56,
|
||||
0x4b, 0x4e, 0x97, 0xcb, 0xc9, 0x79, 0x57, 0xae, 0x94, 0xbf, 0xde, 0xd8, 0x78, 0xf9, 0x6d, 0xd9,
|
||||
0xe1, 0xa4, 0xf2, 0xf2, 0xf2, 0x33, 0xfd, 0x38, 0x0f, 0x36, 0x9b, 0xcd, 0x09, 0xb2, 0x58, 0xcc,
|
||||
0x90, 0xad, 0xa1, 0xac, 0xbc, 0x04, 0xce, 0xe7, 0x8c, 0xf3, 0x75, 0x2c, 0x1f, 0x78, 0xd2, 0x2f,
|
||||
0x61, 0x80, 0x2f, 0x4c, 0x65, 0xf2, 0x2e, 0xe5, 0x0b, 0xc9, 0xd4, 0xe2, 0x92, 0x22, 0x7b, 0x57,
|
||||
0x57, 0x97, 0xb3, 0x6f, 0x30, 0x08, 0x3f, 0x35, 0x39, 0x6a, 0x1b, 0x6a, 0xca, 0xad, 0x2c, 0xdb,
|
||||
0xb5, 0x48, 0xee, 0xac, 0x77, 0x0c, 0x7f, 0x1e, 0xc3, 0x26, 0x05, 0xc9, 0x52, 0xa5, 0x49, 0x79,
|
||||
0xda, 0x13, 0x0e, 0x9c, 0x64, 0x0c, 0xc2, 0x23, 0x07, 0xeb, 0x64, 0x5e, 0x0e, 0x4e, 0xf6, 0x77,
|
||||
0xe3, 0xec, 0xd9, 0x13, 0x3d, 0x10, 0x29, 0x98, 0xf9, 0x32, 0x4f, 0x97, 0x10, 0xb4, 0xdb, 0x1f,
|
||||
0xd4, 0x1a, 0x95, 0x1d, 0x97, 0x2e, 0x06, 0xe1, 0xd2, 0xed, 0xee, 0xee, 0x86, 0x13, 0x79, 0xb9,
|
||||
0x36, 0xb5, 0x86, 0x96, 0x21, 0x9b, 0x70, 0xa4, 0x19, 0x48, 0x41, 0x48, 0x91, 0x48, 0x0b, 0x58,
|
||||
0xeb, 0x43, 0xa7, 0x94, 0x23, 0x2e, 0x19, 0x1f, 0xa5, 0xa4, 0xb2, 0x6c, 0x0d, 0x0d, 0x0d, 0x30,
|
||||
0x06, 0x32, 0x9a, 0x8c, 0x90, 0xa7, 0x3d, 0x69, 0x43, 0xa1, 0x8c, 0x66, 0xec, 0xbc, 0x91, 0xde,
|
||||
0x61, 0x72, 0xc1, 0x5e, 0x8f, 0xe1, 0x0b, 0x27, 0x05, 0x11, 0xe4, 0xc1, 0xc8, 0xe3, 0x99, 0xe9,
|
||||
0xb6, 0xba, 0xba, 0x3a, 0x18, 0x03, 0xdd, 0xbd, 0x7b, 0x17, 0xf2, 0x0b, 0xb5, 0x0e, 0x04, 0x39,
|
||||
0x80, 0x6c, 0x9e, 0x73, 0x11, 0x09, 0x1f, 0xe6, 0x89, 0xe1, 0x5e, 0x13, 0x82, 0xb8, 0xdc, 0xd8,
|
||||
0xb0, 0xb4, 0x63, 0x47, 0xad, 0xb5, 0xb5, 0xb5, 0x30, 0x06, 0xd2, 0xeb, 0xf5, 0x50, 0x88, 0xce,
|
||||
0x1d, 0x91, 0x84, 0x9f, 0x80, 0x6c, 0xf0, 0x31, 0xbe, 0x98, 0xa9, 0x26, 0x3f, 0x26, 0xe1, 0xee,
|
||||
0x4c, 0x3e, 0xb0, 0xf3, 0x00, 0xc6, 0x66, 0x3e, 0xbb, 0xc4, 0xff, 0x01, 0xe2, 0x0b, 0x0e, 0xe5,
|
||||
0x54, 0x57, 0x57, 0x8e, 0x96, 0x96, 0x96, 0x42, 0x4d, 0x4d, 0x8d, 0x13, 0x84, 0x7a, 0xc4, 0x26,
|
||||
0x91, 0x0a, 0xc5, 0x0c, 0x60, 0x1a, 0xcb, 0x7e, 0x0e, 0xd3, 0x3b, 0x0b, 0x99, 0x30, 0xb2, 0x7d,
|
||||
0x2d, 0x70, 0x19, 0x3a, 0x54, 0x49, 0x74, 0x45, 0xc5, 0xd9, 0xc7, 0x65, 0x65, 0x65, 0x70, 0xee,
|
||||
0xdc, 0x39, 0x04, 0x29, 0xb0, 0xa3, 0x70, 0x25, 0x4f, 0x10, 0xa6, 0xb1, 0xc6, 0x0c, 0xfd, 0xd7,
|
||||
0xb7, 0x20, 0x92, 0x3c, 0xb8, 0x24, 0x59, 0x26, 0xb6, 0x16, 0x14, 0x68, 0xad, 0x19, 0xf2, 0x74,
|
||||
0x2b, 0x3a, 0x57, 0x38, 0x93, 0x38, 0xf1, 0x1f, 0xbf, 0xfb, 0x29, 0xdf, 0xeb, 0x76, 0xed, 0xda,
|
||||
0xe5, 0x85, 0x0a, 0x62, 0x7d, 0x7c, 0x7c, 0xbc, 0xff, 0xb3, 0xba, 0x40, 0xfe, 0x05, 0xa3, 0x0e,
|
||||
0x44, 0xc1, 0xe1, 0x8b, 0x0f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_nosel_xpm[1] = {{ png, sizeof( png ), "tree_nosel_xpm" }};
|
||||
|
||||
//EOF
|
|
@ -1,89 +0,0 @@
|
|||
|
||||
/* 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, 0x04, 0x83, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x7b, 0x4c, 0x5b,
|
||||
0x75, 0x14, 0xc7, 0x2f, 0x8f, 0x6c, 0xea, 0x5c, 0x9c, 0x65, 0x4c, 0x98, 0xa0, 0x22, 0x2e, 0x28,
|
||||
0x53, 0x8c, 0x9b, 0xba, 0xcd, 0x10, 0x13, 0x67, 0xcc, 0x36, 0x1d, 0x71, 0x92, 0xe0, 0xe3, 0x9f,
|
||||
0x65, 0x71, 0x11, 0x13, 0x32, 0xa2, 0x8b, 0x90, 0x42, 0xdb, 0x5b, 0x7e, 0x40, 0x4b, 0x69, 0x79,
|
||||
0x8f, 0x81, 0x1b, 0xa5, 0xf7, 0xb6, 0x8d, 0x80, 0xbc, 0x84, 0x86, 0xcd, 0x61, 0xa1, 0x10, 0x60,
|
||||
0x66, 0x93, 0x8d, 0x42, 0x99, 0x19, 0x30, 0x28, 0x8f, 0x8e, 0x95, 0x16, 0xcb, 0x08, 0xe5, 0xe1,
|
||||
0x18, 0x2d, 0xc7, 0xdf, 0xaf, 0xc4, 0x05, 0xe6, 0xc0, 0x09, 0xcc, 0x3f, 0xbe, 0xb9, 0xe9, 0x6d,
|
||||
0x7b, 0x3e, 0x39, 0xe7, 0x7b, 0xce, 0xf9, 0xfd, 0x28, 0x00, 0xa0, 0xfe, 0x0f, 0x2d, 0xfb, 0x05,
|
||||
0xc3, 0x08, 0xf6, 0x33, 0x8c, 0x30, 0x05, 0x3f, 0xf3, 0x59, 0x86, 0x2e, 0x62, 0x59, 0x41, 0x82,
|
||||
0xba, 0x10, 0xbd, 0xba, 0x6e, 0x20, 0x02, 0x60, 0x59, 0xfa, 0x17, 0x1c, 0xdc, 0x26, 0x57, 0xc7,
|
||||
0x8f, 0xe5, 0x97, 0x7d, 0x73, 0xfb, 0x54, 0x55, 0xd4, 0x38, 0xc3, 0x0a, 0x6c, 0xe4, 0x1d, 0xcb,
|
||||
0x08, 0x7f, 0x55, 0x2a, 0xe9, 0x9d, 0x6b, 0x02, 0x61, 0xc8, 0x61, 0x1c, 0xac, 0x2f, 0xb7, 0x22,
|
||||
0xca, 0x14, 0x79, 0xfd, 0xb5, 0xa9, 0x70, 0xdb, 0x16, 0xe7, 0x11, 0x33, 0xc7, 0xf1, 0xf1, 0x2d,
|
||||
0x8e, 0x23, 0xfc, 0x0f, 0x8e, 0xf3, 0x2b, 0xfc, 0x2e, 0xbf, 0xe4, 0xe4, 0x20, 0xa3, 0x10, 0x5c,
|
||||
0x63, 0x59, 0x74, 0x90, 0xfc, 0x07, 0xa1, 0x58, 0x1f, 0x01, 0x8a, 0x0f, 0x47, 0x08, 0x79, 0x3e,
|
||||
0x14, 0x88, 0x61, 0xf8, 0xef, 0x28, 0x19, 0xc1, 0x15, 0x69, 0xd5, 0xb1, 0x1b, 0x1f, 0x19, 0x39,
|
||||
0x8e, 0x3d, 0xfa, 0x8d, 0xf3, 0xc1, 0xcd, 0x14, 0xbc, 0xd2, 0xb4, 0xa0, 0xe0, 0x66, 0x37, 0xd8,
|
||||
0xdb, 0xbe, 0x71, 0x3e, 0xec, 0x86, 0xf7, 0x5c, 0x66, 0x65, 0xe4, 0x75, 0xb9, 0x5c, 0xd0, 0x29,
|
||||
0x91, 0x26, 0xb7, 0x9d, 0x29, 0xc8, 0xb7, 0x97, 0x57, 0x96, 0xde, 0x41, 0xc9, 0x74, 0xcd, 0x43,
|
||||
0x81, 0x94, 0x0c, 0x2d, 0x3f, 0x55, 0x14, 0x7d, 0xe9, 0x03, 0xbd, 0xd7, 0x5c, 0x48, 0x93, 0x07,
|
||||
0xbc, 0x5c, 0x4f, 0x2d, 0x55, 0xdd, 0x82, 0x5e, 0x6f, 0xf2, 0x84, 0x43, 0x97, 0x9f, 0x9d, 0x4d,
|
||||
0xcf, 0x4a, 0x99, 0xe9, 0x30, 0xb4, 0xcf, 0x9b, 0x4c, 0x26, 0x60, 0xd8, 0x42, 0x3b, 0x1f, 0xf1,
|
||||
0xdf, 0xfc, 0x57, 0x90, 0x5c, 0x8e, 0xfc, 0x18, 0x86, 0xd6, 0x1c, 0xaf, 0x09, 0xed, 0xde, 0x55,
|
||||
0xff, 0x84, 0x33, 0xe8, 0x67, 0x0a, 0x56, 0xd2, 0x71, 0xe6, 0x88, 0xf3, 0xb7, 0xd6, 0x4b, 0xf3,
|
||||
0xa3, 0xa3, 0xa3, 0x70, 0xf1, 0x62, 0x8b, 0x43, 0x24, 0x46, 0x67, 0x17, 0x07, 0xe5, 0x72, 0xb9,
|
||||
0x4f, 0xa1, 0x44, 0x41, 0x31, 0x42, 0x71, 0x2f, 0x2c, 0x01, 0xe1, 0x8e, 0xfa, 0x90, 0x55, 0x08,
|
||||
0xd4, 0xa1, 0xd5, 0xbe, 0xf6, 0x20, 0x8d, 0x07, 0xec, 0xd0, 0x50, 0x2b, 0xea, 0xe4, 0xe9, 0x48,
|
||||
0x30, 0x9b, 0xcd, 0x60, 0xb3, 0xd9, 0xa0, 0xb9, 0xa5, 0xc9, 0x49, 0xd3, 0x71, 0x27, 0x16, 0x83,
|
||||
0x92, 0x44, 0xa8, 0xe2, 0xdc, 0xf9, 0x1a, 0x87, 0x44, 0x2a, 0x6a, 0x59, 0x02, 0x52, 0x29, 0x84,
|
||||
0xef, 0xe1, 0xd2, 0xe5, 0xee, 0x56, 0xfb, 0xd8, 0x77, 0x94, 0xbb, 0xc3, 0x4b, 0x15, 0xd4, 0xf2,
|
||||
0x2a, 0xa7, 0x20, 0x36, 0xeb, 0x04, 0x98, 0x47, 0xcc, 0x30, 0x3e, 0x3e, 0x0e, 0x9d, 0xd7, 0x0c,
|
||||
0x20, 0x96, 0x24, 0x19, 0x69, 0x9a, 0xbb, 0x33, 0x22, 0x22, 0xc2, 0x83, 0x46, 0xbc, 0x63, 0x4a,
|
||||
0x35, 0x6b, 0x1f, 0x1e, 0x1e, 0x86, 0x54, 0x59, 0x8a, 0x6d, 0x09, 0x08, 0xb7, 0xeb, 0x6e, 0x3c,
|
||||
0x33, 0xa2, 0x5d, 0x79, 0xfe, 0xe6, 0x40, 0xb5, 0x27, 0x04, 0x96, 0x50, 0x10, 0x58, 0xbc, 0xbc,
|
||||
0x42, 0xf3, 0x82, 0xa0, 0xac, 0xfa, 0x47, 0xa7, 0xdd, 0x6e, 0x87, 0x91, 0x91, 0x11, 0xe8, 0xec,
|
||||
0x34, 0x60, 0x9f, 0xe4, 0x13, 0x99, 0xd9, 0x19, 0x13, 0x15, 0x95, 0xa5, 0x13, 0xdd, 0x3d, 0xdd,
|
||||
0x30, 0x30, 0x30, 0x00, 0x12, 0xa9, 0xf8, 0xf6, 0x7d, 0xa5, 0x43, 0x3e, 0xb8, 0x74, 0xb1, 0x9f,
|
||||
0x65, 0xef, 0x2f, 0x09, 0x48, 0xdb, 0x72, 0xe7, 0x45, 0x15, 0x05, 0x2b, 0x29, 0x40, 0xea, 0x35,
|
||||
0x93, 0x2c, 0x41, 0xd3, 0x56, 0xab, 0x05, 0xac, 0x56, 0x2b, 0x18, 0x8d, 0x46, 0x18, 0x1b, 0x1b,
|
||||
0x03, 0xe2, 0xd9, 0xe0, 0xe0, 0x20, 0xf4, 0xf7, 0xf7, 0x43, 0x63, 0xa3, 0x6e, 0x2e, 0x49, 0x94,
|
||||
0x20, 0xfd, 0x47, 0xd7, 0x61, 0x9f, 0x0e, 0x32, 0x85, 0x82, 0xaf, 0x9f, 0x8f, 0xf3, 0xb5, 0xf8,
|
||||
0xa7, 0x3f, 0xee, 0x08, 0x28, 0xc4, 0x01, 0x1f, 0x20, 0x3f, 0xf1, 0xe6, 0xd9, 0x4f, 0x84, 0x61,
|
||||
0x96, 0x0b, 0xb5, 0xe7, 0x67, 0x49, 0xe0, 0xde, 0xde, 0x5e, 0x57, 0x70, 0xe2, 0x19, 0xf9, 0xdc,
|
||||
0xd7, 0xd7, 0x0b, 0xd5, 0x9a, 0x9f, 0xa6, 0x71, 0x39, 0x3b, 0xf1, 0x6c, 0x71, 0x1e, 0x00, 0x42,
|
||||
0x5b, 0x58, 0x56, 0x18, 0x21, 0x3e, 0x1d, 0xfd, 0xa5, 0x6f, 0x94, 0x9f, 0x71, 0x5b, 0xcc, 0xd3,
|
||||
0x7f, 0x6e, 0x97, 0x6e, 0x80, 0xe7, 0x72, 0xdd, 0xc0, 0x3f, 0xdb, 0x1d, 0xb6, 0xa7, 0x6e, 0x80,
|
||||
0xad, 0xd1, 0x5e, 0xd3, 0x21, 0xd1, 0x21, 0x83, 0xdf, 0x17, 0xe4, 0x4d, 0x93, 0x0c, 0x2c, 0x16,
|
||||
0x0b, 0x74, 0x77, 0x77, 0xbb, 0x82, 0xcb, 0x15, 0x67, 0xa7, 0x72, 0x72, 0x32, 0x2d, 0xb2, 0x34,
|
||||
0x89, 0x01, 0x37, 0xc3, 0xb7, 0x14, 0x45, 0xb9, 0x2d, 0xbb, 0x19, 0x0a, 0x0b, 0x11, 0x47, 0xa9,
|
||||
0x14, 0xbe, 0x9f, 0x77, 0x86, 0x1b, 0xb6, 0x2f, 0x6a, 0x4f, 0x9a, 0xf7, 0x51, 0x7f, 0xc3, 0xa6,
|
||||
0x4f, 0x9f, 0xb1, 0x6f, 0xfe, 0xc2, 0xc7, 0xb6, 0xf5, 0xa8, 0xdf, 0xef, 0x87, 0x63, 0x0f, 0xd0,
|
||||
0x69, 0x19, 0x12, 0xcb, 0xcd, 0x9b, 0x26, 0x20, 0x66, 0x93, 0xb2, 0x11, 0x98, 0x52, 0xa5, 0x98,
|
||||
0x14, 0x0a, 0x79, 0x07, 0xfe, 0xd3, 0xae, 0xc3, 0x99, 0x3d, 0xc6, 0x30, 0xf1, 0xc1, 0xf8, 0xb9,
|
||||
0x57, 0xa5, 0xa0, 0xf7, 0x2d, 0x56, 0xaa, 0x34, 0xe9, 0x5c, 0x6b, 0xeb, 0xe5, 0xbb, 0xa4, 0x4c,
|
||||
0x24, 0x23, 0xd2, 0xde, 0x0d, 0x0d, 0xf5, 0x33, 0xc9, 0x62, 0x24, 0x5b, 0xf5, 0xf6, 0x2e, 0x2b,
|
||||
0x8b, 0xf0, 0x20, 0xe5, 0xc4, 0x50, 0x6f, 0x92, 0xa9, 0x58, 0x22, 0xfc, 0xbc, 0xb4, 0xac, 0x78,
|
||||
0x92, 0x64, 0x41, 0x00, 0x0b, 0x65, 0xeb, 0x72, 0x48, 0x65, 0x29, 0x57, 0xb0, 0x17, 0xee, 0xab,
|
||||
0x06, 0x2d, 0x16, 0x8f, 0xc7, 0xf3, 0xcd, 0xce, 0xcd, 0x1a, 0x33, 0x99, 0x86, 0x5c, 0xa6, 0x13,
|
||||
0x88, 0xd9, 0x7c, 0x0b, 0xb2, 0x72, 0x32, 0x6c, 0x08, 0xc5, 0x6c, 0x5b, 0xd3, 0x79, 0x74, 0xef,
|
||||
0x07, 0xd8, 0x54, 0x3c, 0xe1, 0x57, 0x3b, 0x3a, 0xda, 0xe7, 0x87, 0x86, 0x86, 0xee, 0x6d, 0x04,
|
||||
0xa5, 0x8a, 0x99, 0xe4, 0x23, 0xee, 0xbb, 0x6b, 0x3e, 0xf8, 0xfe, 0x56, 0x62, 0xb2, 0x30, 0x01,
|
||||
0xb7, 0xf2, 0x34, 0x99, 0x15, 0xb2, 0x40, 0x49, 0x36, 0x5a, 0x6d, 0xed, 0x14, 0xee, 0x2c, 0xe1,
|
||||
0xba, 0x9c, 0xb0, 0x44, 0x78, 0x87, 0xbd, 0xa5, 0x60, 0xe5, 0xf6, 0x9e, 0x9e, 0x1e, 0xdc, 0xc2,
|
||||
0x7d, 0x2e, 0x90, 0x5e, 0xdf, 0x36, 0x27, 0x91, 0x89, 0x5b, 0xee, 0x6f, 0xdf, 0x55, 0x83, 0xb0,
|
||||
0xc1, 0x4f, 0xa6, 0x67, 0xca, 0x46, 0xda, 0xda, 0xae, 0x42, 0x57, 0x57, 0x97, 0x6b, 0xfa, 0xb1,
|
||||
0xf9, 0x90, 0x99, 0x95, 0x66, 0x5d, 0x3c, 0x88, 0x6b, 0x06, 0xa5, 0x48, 0x92, 0x35, 0x3a, 0x5d,
|
||||
0xdd, 0x9c, 0x5e, 0xaf, 0x77, 0x0d, 0x25, 0xd9, 0x00, 0x0c, 0x53, 0x40, 0xce, 0x9d, 0xb7, 0xd7,
|
||||
0xed, 0x72, 0xc2, 0xe7, 0xf3, 0xfd, 0x95, 0x4a, 0xc5, 0x84, 0x4e, 0xa7, 0x83, 0xba, 0xba, 0x3a,
|
||||
0x30, 0x18, 0x0c, 0xa0, 0xd1, 0x54, 0x4d, 0x61, 0xbf, 0xbe, 0x5b, 0xd7, 0x5b, 0x10, 0xf6, 0xe6,
|
||||
0x0d, 0x56, 0xa5, 0x98, 0xd0, 0x6a, 0xb5, 0x50, 0x5b, 0x5b, 0x0b, 0x0d, 0x8d, 0xf5, 0x77, 0x53,
|
||||
0x52, 0x45, 0xda, 0x47, 0x72, 0xdd, 0x12, 0x89, 0x13, 0xd5, 0x2c, 0xce, 0xea, 0x87, 0x22, 0xb5,
|
||||
0x5d, 0x92, 0x2a, 0xba, 0x10, 0x13, 0x13, 0xb3, 0xe9, 0x91, 0x80, 0x48, 0x57, 0x91, 0x1b, 0x0e,
|
||||
0x0f, 0xf1, 0x42, 0xd6, 0xe3, 0x02, 0xf9, 0x17, 0x7f, 0x4e, 0x23, 0x68, 0x48, 0x3d, 0x71, 0xa9,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_sel_xpm[1] = {{ png, sizeof( png ), "tree_sel_xpm" }};
|
||||
|
||||
//EOF
|
|
@ -0,0 +1,178 @@
|
|||
<?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.48.1 "
|
||||
sodipodi:docname="add_keepout_area.svg">
|
||||
<metadata
|
||||
id="metadata14">
|
||||
<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 />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs12">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3165"
|
||||
id="linearGradient3147"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0243903,0,0,1.0355608,-35.845375,-31.825111)"
|
||||
x1="10"
|
||||
y1="2.5"
|
||||
x2="15.409858"
|
||||
y2="21.491209" />
|
||||
<linearGradient
|
||||
id="linearGradient3165">
|
||||
<stop
|
||||
id="stop5217"
|
||||
offset="0"
|
||||
style="stop-color:#f48e86;stop-opacity:0.99607843;" />
|
||||
<stop
|
||||
style="stop-color:#bf2c21;stop-opacity:0.99607843;"
|
||||
offset="0.5"
|
||||
id="stop5223" />
|
||||
<stop
|
||||
style="stop-color:#48130f;stop-opacity:0.99607843;"
|
||||
offset="1"
|
||||
id="stop5221" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3165"
|
||||
id="linearGradient3149"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0243903,0,0,1.0355608,-35.33318,-31.825111)"
|
||||
x1="9.5"
|
||||
y1="2.5"
|
||||
x2="14.909858"
|
||||
y2="21.491209" />
|
||||
<linearGradient
|
||||
id="linearGradient8262">
|
||||
<stop
|
||||
style="stop-color:#f68273;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop8264" />
|
||||
<stop
|
||||
id="stop8266"
|
||||
offset="0.5"
|
||||
style="stop-color:#cd2923;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#8c0000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop8268" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="21.491209"
|
||||
x2="14.909858"
|
||||
y1="2.5"
|
||||
x1="9.5"
|
||||
gradientTransform="matrix(1.0243903,0,0,1.0355608,-35.33318,-31.825111)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient8273"
|
||||
xlink:href="#linearGradient3165"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3165"
|
||||
id="linearGradient5212"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.96823216,0,0,0.98360286,21.081824,17.367375)"
|
||||
x1="9.5"
|
||||
y1="2.5"
|
||||
x2="14.909858"
|
||||
y2="21.491209" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3165"
|
||||
id="linearGradient5215"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.96823216,0,0,0.98360286,21.903889,16.869782)"
|
||||
x1="10"
|
||||
y1="2.5"
|
||||
x2="15.409858"
|
||||
y2="21.491209" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="968"
|
||||
id="namedview10"
|
||||
showgrid="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:zoom="31.197274"
|
||||
inkscape:cx="12.755157"
|
||||
inkscape:cy="13.257277"
|
||||
inkscape:window-x="-4"
|
||||
inkscape:window-y="-4"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2822"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<rect
|
||||
style="fill:#a8c9c5;fill-opacity:1;stroke:#1a2200;stroke-width:1.04457009;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect3767"
|
||||
width="22.751417"
|
||||
height="23.217913"
|
||||
x="1.7035706"
|
||||
y="1.551699" />
|
||||
<path
|
||||
d="m 11.388353,4.7619742 3.570662,-0.080905 10.013099,10.7534978 c 0.05305,1.027595 -0.0071,1.109722 0.04199,3.98885 L 14.971765,8.5777429 l -3.583953,-0.01462 -0.01801,-2.0063721 0.01856,-1.7947794 z"
|
||||
id="path6"
|
||||
style="fill:#037600;fill-opacity:1"
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="M 7.1933422,1.0463663 C 3.8459678,0.99480061 1.2607574,3.4092055 1.2343849,6.6456504 1.212037,9.3663522 3.7139513,12.43648 7.1669697,12.476979 10.355862,12.51438 12.921899,9.9848585 12.914948,6.6972161 12.90832,3.5634848 10.382485,0.99480061 7.1933422,1.0463663 z M 7.1405977,3.8886568 C 8.9745023,3.8628747 10.089243,5.3767725 10.097572,6.6456504 10.108967,8.3791437 8.6844134,9.6131959 7.1142253,9.5831254 5.4124574,9.5505334 4.2062509,8.276423 4.1836256,6.7487817 4.1598941,5.1194121 5.4120948,3.8886568 7.1405976,3.8886568 z"
|
||||
id="path8"
|
||||
style="fill:#797800;fill-opacity:1"
|
||||
sodipodi:nodetypes="csssccsssc"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="g3004"
|
||||
transform="matrix(0.82726961,0,0,0.80467364,-17.473303,-6.3485938)"
|
||||
style="fill:#cd0404;fill-opacity:1">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:0.85321099;fill:#cd0404;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
d="m 40.727806,39.169139 c 0,0 -5.138993,-13.201066 -18.02601,-17.485067 l 2.088731,-3.121414 c 12.777976,4.18237 17.994777,19.284892 17.994777,19.284892 z"
|
||||
id="path3006"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:0.85321099;fill:#cd0404;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
d="m 22.933897,35.970958 3.852963,3.290103 C 32.515122,24.39248 42.867046,20.959903 42.867046,20.959903 l -1.890358,-1.119465 c 0,0 -11.064955,2.012207 -18.042791,16.13052 z"
|
||||
id="path3008"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.4 KiB |
|
@ -188,7 +188,7 @@ double From_User_Unit( EDA_UNITS_T aUnit, double aValue )
|
|||
|
||||
int ReturnValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
|
||||
{
|
||||
int Value;
|
||||
double value;
|
||||
double dtmp = 0;
|
||||
|
||||
// Acquire the 'right' decimal point separator
|
||||
|
@ -239,9 +239,9 @@ int ReturnValueFromString( EDA_UNITS_T aUnits, const wxString& aTextValue )
|
|||
dtmp /= 1000;
|
||||
}
|
||||
|
||||
Value = From_User_Unit( aUnits, dtmp );
|
||||
value = From_User_Unit( aUnits, dtmp );
|
||||
|
||||
return Value;
|
||||
return KiROUND( value );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -250,12 +250,14 @@ void PAGE_INFO::SetPortrait( bool isPortrait )
|
|||
static int clampWidth( int aWidthInMils )
|
||||
{
|
||||
/* was giving EESCHEMA single component SVG plotter grief
|
||||
However a minimal test is made to avoid values that crashes Kicad
|
||||
if( aWidthInMils < 4000 ) // 4" is about a baseball card
|
||||
aWidthInMils = 4000;
|
||||
|
||||
else if( aWidthInMils > 44000 ) //44" is plotter size
|
||||
aWidthInMils = 44000;
|
||||
*/
|
||||
if( aWidthInMils < 10 )
|
||||
aWidthInMils = 10;
|
||||
return aWidthInMils;
|
||||
}
|
||||
|
||||
|
@ -264,11 +266,14 @@ static int clampHeight( int aHeightInMils )
|
|||
{
|
||||
/* was giving EESCHEMA single component SVG plotter grief
|
||||
clamping is best done at the UI, i.e. dialog, levels
|
||||
However a minimal test is made to avoid values that crashes Kicad
|
||||
if( aHeightInMils < 4000 )
|
||||
aHeightInMils = 4000;
|
||||
else if( aHeightInMils > 44000 )
|
||||
aHeightInMils = 44000;
|
||||
*/
|
||||
if( aHeightInMils < 10 )
|
||||
aHeightInMils = 10;
|
||||
return aHeightInMils;
|
||||
}
|
||||
|
||||
|
@ -315,19 +320,18 @@ void PAGE_INFO::SetHeightMils( int aHeightInMils )
|
|||
|
||||
void PAGE_INFO::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControlBits ) const
|
||||
throw( IO_ERROR )
|
||||
{
|
||||
// If page is A3 landscape, then it is assumed to be the default and is not written.
|
||||
if( !IsDefault() )
|
||||
{
|
||||
aFormatter->Print( aNestLevel, "(page %s", aFormatter->Quotew( GetType() ).c_str() );
|
||||
|
||||
// The page dimensions are only required for user defined page sizes.
|
||||
// Internally, the page size is in mils
|
||||
if( GetType() == PAGE_INFO::Custom )
|
||||
aFormatter->Print( aNestLevel, " %d %d", GetWidthIU(), GetHeightIU() );
|
||||
aFormatter->Print( 0, " %g %g",
|
||||
GetCustomWidthMils() * 25.4 / 1000.0,
|
||||
GetCustomHeightMils() * 25.4 / 1000.0 );
|
||||
|
||||
if( IsCustom() && IsPortrait() )
|
||||
aFormatter->Print( aNestLevel, " portrait" );
|
||||
aFormatter->Print( 0, " portrait" );
|
||||
|
||||
aFormatter->Print( aNestLevel, ")\n" );
|
||||
}
|
||||
aFormatter->Print( 0, ")\n" );
|
||||
}
|
||||
|
|
|
@ -274,27 +274,35 @@ void GERBER_PLOTTER::Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill,
|
|||
}
|
||||
|
||||
|
||||
void GERBER_PLOTTER::Circle( const wxPoint& aCentre, int aDiameter, FILL_T aFill,
|
||||
void GERBER_PLOTTER::Circle( const wxPoint& aCenter, int aDiameter, FILL_T aFill,
|
||||
int aWidth )
|
||||
{
|
||||
Arc( aCenter, 0, 3600, aDiameter / 2, aFill, aWidth );
|
||||
}
|
||||
|
||||
|
||||
void GERBER_PLOTTER::Arc( const wxPoint& aCenter, int aStAngle, int aEndAngle,
|
||||
int aRadius, FILL_T aFill, int aWidth )
|
||||
{
|
||||
wxASSERT( outputFile );
|
||||
wxPoint start, end;
|
||||
double radius = aDiameter / 2;
|
||||
const int delta = 3600 / 32; /* increment (in 0.1 degrees) to draw circles */
|
||||
|
||||
start.x = aCentre.x + KiROUND( radius );
|
||||
start.y = aCentre.y;
|
||||
start.x = aCenter.x + KiROUND( aRadius*cos( DEG2RAD( aStAngle/10.0 ) ) );
|
||||
start.y = aCenter.y - KiROUND( aRadius*sin( DEG2RAD( aStAngle/10.0 ) ) );
|
||||
SetCurrentLineWidth( aWidth );
|
||||
MoveTo( start );
|
||||
end.x = aCenter.x + KiROUND( aRadius*cos( DEG2RAD( aEndAngle/10.0 ) ) );
|
||||
end.y = aCenter.y - KiROUND( aRadius*sin( DEG2RAD( aEndAngle/10.0 ) ) );
|
||||
DPOINT devEnd = userToDeviceCoordinates( end );
|
||||
DPOINT devCenter = userToDeviceCoordinates( aCenter - start );
|
||||
fprintf( outputFile, "G75*\n" ); // Multiquadrant mode
|
||||
|
||||
for( int ii = delta; ii < 3600; ii += delta )
|
||||
{
|
||||
end.x = aCentre.x + (int) ( radius * cos( DEG2RAD( ii / 10.0 ) ) );
|
||||
end.y = aCentre.y + (int) ( radius * sin( DEG2RAD( ii / 10.0 ) ) );
|
||||
LineTo( end );
|
||||
}
|
||||
|
||||
FinishTo( start );
|
||||
if( aStAngle < aEndAngle )
|
||||
fprintf( outputFile, "G03" );
|
||||
else
|
||||
fprintf( outputFile, "G02" );
|
||||
fprintf( outputFile, "X%dY%dI%dJ%dD01*\n", int( devEnd.x ), int( devEnd.y ),
|
||||
int( devCenter.x ), int( devCenter.y ) );
|
||||
fprintf( outputFile, "G74*\nG01*\n" ); // Back to single quadrant and linear interp.
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -624,8 +624,8 @@ void DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample()
|
|||
// Prepare DC.
|
||||
wxSize example_size( lyWidth, lyHeight );
|
||||
wxMemoryDC memDC;
|
||||
memDC.SetClippingRegion( wxPoint( 0, 0 ), example_size );
|
||||
memDC.SelectObject( *m_page_bitmap );
|
||||
memDC.SetClippingRegion( wxPoint( 0, 0 ), example_size );
|
||||
memDC.Clear();
|
||||
memDC.SetUserScale( scaleW, scaleH );
|
||||
|
||||
|
|
|
@ -344,12 +344,12 @@ void EDA_TEXT::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl
|
|||
{
|
||||
if( !IsDefaultFormatting() )
|
||||
{
|
||||
aFormatter->Print( aNestLevel+1, "(effects\n" );
|
||||
aFormatter->Print( aNestLevel+1, "(effects" );
|
||||
|
||||
if( ( m_Size.x != DEFAULT_SIZE_TEXT ) || ( m_Size.y != DEFAULT_SIZE_TEXT ) || m_Bold
|
||||
|| m_Italic )
|
||||
{
|
||||
aFormatter->Print( aNestLevel+2, "(font" );
|
||||
aFormatter->Print( 0, " (font" );
|
||||
|
||||
// Add font support here at some point in the future.
|
||||
|
||||
|
@ -366,13 +366,13 @@ void EDA_TEXT::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl
|
|||
if( IsItalic() )
|
||||
aFormatter->Print( 0, " italic" );
|
||||
|
||||
aFormatter->Print( 0, ")\n");
|
||||
aFormatter->Print( 0, ")");
|
||||
}
|
||||
|
||||
if( m_Mirror || ( m_HJustify != GR_TEXT_HJUSTIFY_CENTER )
|
||||
|| ( m_VJustify != GR_TEXT_VJUSTIFY_CENTER ) )
|
||||
{
|
||||
aFormatter->Print( aNestLevel+2, "(justify");
|
||||
aFormatter->Print( 0, " (justify");
|
||||
|
||||
if( m_HJustify != GR_TEXT_HJUSTIFY_CENTER )
|
||||
aFormatter->Print( 0, (m_HJustify == GR_TEXT_HJUSTIFY_LEFT) ? " left" : " right" );
|
||||
|
@ -383,13 +383,13 @@ void EDA_TEXT::Format( OUTPUTFORMATTER* aFormatter, int aNestLevel, int aControl
|
|||
if( m_Mirror )
|
||||
aFormatter->Print( 0, " mirror" );
|
||||
|
||||
aFormatter->Print( 0, ")\n" );
|
||||
aFormatter->Print( 0, ")" );
|
||||
}
|
||||
|
||||
// As of now the only place this is used is in Eeschema to hide or show the text.
|
||||
if( m_Attributs )
|
||||
aFormatter->Print( aNestLevel+2, "hide\n" );
|
||||
aFormatter->Print( 0, " hide" );
|
||||
|
||||
aFormatter->Print( aNestLevel+1, ")\n" );
|
||||
aFormatter->Print( 0, ")\n" );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
# These are the keywords for the Pcbnew s-expression file format.
|
||||
|
||||
add_net
|
||||
allowed
|
||||
angle
|
||||
arc
|
||||
arc_segments
|
||||
|
@ -48,6 +49,7 @@ comment
|
|||
company
|
||||
connect
|
||||
connect_pads
|
||||
copperpour
|
||||
crossbar
|
||||
date
|
||||
descr
|
||||
|
@ -84,6 +86,7 @@ hatch
|
|||
hide
|
||||
italic
|
||||
justify
|
||||
keepout
|
||||
kicad_pcb
|
||||
last_trace_width
|
||||
layer
|
||||
|
@ -107,10 +110,12 @@ nets
|
|||
no
|
||||
no_connects
|
||||
none
|
||||
not_allowed
|
||||
np_thru_hole
|
||||
offset
|
||||
oval
|
||||
pad
|
||||
pads
|
||||
pad_drill
|
||||
pad_size
|
||||
pad_to_mask_clearance
|
||||
|
@ -164,6 +169,7 @@ trace_clearance
|
|||
trapezoid
|
||||
thru
|
||||
thru_hole
|
||||
thru_hole_only
|
||||
tstamp
|
||||
user
|
||||
user_trace_width
|
||||
|
@ -177,6 +183,7 @@ uvias_allowed
|
|||
value
|
||||
version
|
||||
via
|
||||
vias
|
||||
via_dia
|
||||
via_drill
|
||||
via_min_drill
|
||||
|
@ -193,4 +200,5 @@ zone
|
|||
zone_45_only
|
||||
zone_clearance
|
||||
zone_connect
|
||||
zone_type
|
||||
zones
|
||||
|
|
|
@ -50,10 +50,10 @@
|
|||
static void AbortCreateNewLine( EDA_DRAW_PANEL* Panel, wxDC* DC );
|
||||
static void ComputeBreakPoint( SCH_LINE* segment, const wxPoint& new_pos );
|
||||
|
||||
static DLIST< SCH_ITEM > s_wires;
|
||||
static DLIST< SCH_ITEM > s_oldWires;
|
||||
|
||||
static wxPoint s_startPoint;
|
||||
static DLIST< SCH_ITEM > s_wires; // when creating a new set of wires,
|
||||
// stores here the new wires.
|
||||
static DLIST< SCH_ITEM > s_oldWires; // when creating a new set of wires,
|
||||
// stores here the old wires (for undo command)
|
||||
|
||||
|
||||
/**
|
||||
|
@ -125,7 +125,6 @@ void SCH_EDIT_FRAME::BeginSegment( wxDC* DC, int type )
|
|||
|
||||
if( !segment ) /* first point : Create first wire or bus */
|
||||
{
|
||||
s_startPoint = cursorpos;
|
||||
GetScreen()->ExtractWires( s_oldWires, true );
|
||||
GetScreen()->SchematicCleanUp( m_canvas );
|
||||
|
||||
|
@ -228,50 +227,40 @@ void SCH_EDIT_FRAME::EndSegment( wxDC* DC )
|
|||
wxCHECK_RET( item->Type() == SCH_LINE_T, wxT( "Unexpected object type in wire list." ) );
|
||||
|
||||
segment = (SCH_LINE*) item;
|
||||
item = item->Next();
|
||||
|
||||
if( segment->IsNull() )
|
||||
{
|
||||
wxLogDebug( wxT( "Removing null segment: " ) + segment->GetSelectMenuText() );
|
||||
|
||||
SCH_ITEM* previousSegment = item->Back();
|
||||
|
||||
delete s_wires.Remove( item );
|
||||
|
||||
if( previousSegment == NULL )
|
||||
item = s_wires.begin();
|
||||
else
|
||||
item = previousSegment;
|
||||
wxLogDebug( wxT( "Segment count after removal: %d" ), s_wires.GetCount() );
|
||||
}
|
||||
|
||||
item = item->Next();
|
||||
delete s_wires.Remove( segment );
|
||||
}
|
||||
|
||||
if( s_wires.GetCount() == 0 )
|
||||
return;
|
||||
|
||||
// Get the last non-null wire.
|
||||
// Get the last non-null wire (this is the last created segment).
|
||||
m_itemToRepeat = segment = (SCH_LINE*) s_wires.GetLast();
|
||||
screen->SetCurItem( NULL );
|
||||
m_canvas->EndMouseCapture( -1, -1, wxEmptyString, false );
|
||||
|
||||
// store the terminal point of this last segment: a junction could be needed
|
||||
// (the last wire could be merged/deleted/modified, and lost)
|
||||
wxPoint endpoint = segment->GetEndPoint();
|
||||
|
||||
// store the starting point of this first segment: a junction could be needed
|
||||
SCH_LINE* firstsegment = (SCH_LINE*) s_wires.GetFirst();
|
||||
wxPoint startPoint = firstsegment->GetStartPoint();
|
||||
|
||||
screen->Append( s_wires );
|
||||
|
||||
// Correct and remove segments that need merged.
|
||||
// Correct and remove segments that need to be merged.
|
||||
screen->SchematicCleanUp( NULL, DC );
|
||||
|
||||
// A junction may be needed to connect the last segment. If the last segment was
|
||||
// removed by a cleanup, a junction may be needed to connect the segment's end point
|
||||
// which is also the same as the previous segment's start point.
|
||||
if( screen->IsJunctionNeeded( segment->GetEndPoint() ) )
|
||||
screen->Append( AddJunction( DC, segment->GetEndPoint() ) );
|
||||
else if( screen->IsJunctionNeeded( segment->GetStartPoint() ) )
|
||||
screen->Append( AddJunction( DC, segment->GetStartPoint() ) );
|
||||
// A junction could be needed to connect the end point of the last created segment.
|
||||
if( screen->IsJunctionNeeded( endpoint ) )
|
||||
screen->Append( AddJunction( DC, endpoint ) );
|
||||
|
||||
// Automatically place a junction on the start point if necessary because the cleanup
|
||||
// can suppress intermediate points by merging wire segments.
|
||||
if( screen->IsJunctionNeeded( s_startPoint ) )
|
||||
screen->Append( AddJunction( DC, s_startPoint ) );
|
||||
// A junction could be needed to connect the start point of the set of new created wires
|
||||
if( screen->IsJunctionNeeded( startPoint ) )
|
||||
screen->Append( AddJunction( DC, startPoint ) );
|
||||
|
||||
m_canvas->Refresh();
|
||||
|
||||
|
|
|
@ -149,6 +149,14 @@ void DIALOG_PRINT_USING_PRINTER::OnInitDialog( wxInitDialogEvent& event )
|
|||
m_buttonPrint->SetDefault();
|
||||
}
|
||||
|
||||
void DIALOG_PRINT_USING_PRINTER::GetPrintOptions()
|
||||
{
|
||||
SCH_EDIT_FRAME* parent = GetParent();
|
||||
|
||||
parent->SetPrintMonochrome( m_checkMonochrome->IsChecked() );
|
||||
parent->SetPrintSheetReference( m_checkReference->IsChecked() );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_PRINT_USING_PRINTER::OnCloseWindow( wxCloseEvent& event )
|
||||
{
|
||||
|
@ -160,8 +168,7 @@ void DIALOG_PRINT_USING_PRINTER::OnCloseWindow( wxCloseEvent& event )
|
|||
parent->SetPrintDialogSize( GetSize() );
|
||||
}
|
||||
|
||||
parent->SetPrintMonochrome( m_checkMonochrome->IsChecked() );
|
||||
parent->SetPrintSheetReference( m_checkReference->IsChecked() );
|
||||
GetPrintOptions();
|
||||
|
||||
EndDialog( wxID_CANCEL );
|
||||
}
|
||||
|
@ -187,8 +194,7 @@ void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event )
|
|||
{
|
||||
SCH_EDIT_FRAME* parent = GetParent();
|
||||
|
||||
parent->SetPrintMonochrome( m_checkMonochrome->IsChecked() );
|
||||
parent->SetPrintSheetReference( m_checkReference->IsChecked() );
|
||||
GetPrintOptions();
|
||||
|
||||
// Pass two printout objects: for preview, and possible printing.
|
||||
wxString title = _( "Preview" );
|
||||
|
@ -216,8 +222,7 @@ void DIALOG_PRINT_USING_PRINTER::OnPrintButtonClick( wxCommandEvent& event )
|
|||
{
|
||||
SCH_EDIT_FRAME* parent = GetParent();
|
||||
|
||||
parent->SetPrintMonochrome( m_checkMonochrome->IsChecked() );
|
||||
parent->SetPrintSheetReference( m_checkReference->IsChecked() );
|
||||
GetPrintOptions();
|
||||
|
||||
wxPrintDialogData printDialogData( parent->GetPageSetupData().GetPrintData() );
|
||||
printDialogData.SetMaxPage( g_RootSheet->CountSheets() );
|
||||
|
|
|
@ -26,6 +26,8 @@ private:
|
|||
void OnPrintPreview( wxCommandEvent& event );
|
||||
void OnPrintButtonClick( wxCommandEvent& event );
|
||||
void OnButtonCancelClick( wxCommandEvent& event ){ Close(); }
|
||||
|
||||
void GetPrintOptions();
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 16 2008)
|
||||
// C++ code generated with wxFormBuilder (version Mar 17 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -19,16 +19,22 @@ DIALOG_PRINT_USING_PRINTER_BASE::DIALOG_PRINT_USING_PRINTER_BASE( wxWindow* pare
|
|||
wxBoxSizer* bleftSizer;
|
||||
bleftSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticText1 = new wxStaticText( this, wxID_ANY, _("Print options:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText1->Wrap( -1 );
|
||||
m_staticText1->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) );
|
||||
|
||||
bleftSizer->Add( m_staticText1, 0, wxTOP|wxRIGHT, 5 );
|
||||
|
||||
m_checkReference = new wxCheckBox( this, wxID_ANY, _("Print sheet &reference and title block"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_checkReference->SetValue(true);
|
||||
|
||||
m_checkReference->SetToolTip( _("Print (or not) the Frame references.") );
|
||||
|
||||
bleftSizer->Add( m_checkReference, 0, wxALL, 5 );
|
||||
bleftSizer->Add( m_checkReference, 0, wxALL, 10 );
|
||||
|
||||
m_checkMonochrome = new wxCheckBox( this, wxID_ANY, _("Print in &black and white only"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_checkMonochrome->SetValue(true);
|
||||
bleftSizer->Add( m_checkMonochrome, 0, wxBOTTOM|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
bleftSizer->Add( m_checkMonochrome, 0, wxALL, 5 );
|
||||
|
||||
bMainSizer->Add( bleftSizer, 1, wxBOTTOM|wxEXPAND|wxLEFT|wxTOP, 12 );
|
||||
|
||||
|
@ -47,11 +53,12 @@ DIALOG_PRINT_USING_PRINTER_BASE::DIALOG_PRINT_USING_PRINTER_BASE( wxWindow* pare
|
|||
m_buttonQuit = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bbuttonsSizer->Add( m_buttonQuit, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bMainSizer->Add( bbuttonsSizer, 0, wxALL, 12 );
|
||||
|
||||
|
||||
this->SetSizer( bMainSizer );
|
||||
this->Layout();
|
||||
bMainSizer->Fit( this );
|
||||
|
||||
// Connect Events
|
||||
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnCloseWindow ) );
|
||||
|
@ -71,4 +78,5 @@ DIALOG_PRINT_USING_PRINTER_BASE::~DIALOG_PRINT_USING_PRINTER_BASE()
|
|||
m_buttonPreview->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPrintPreview ), NULL, this );
|
||||
m_buttonPrint->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPrintButtonClick ), NULL, this );
|
||||
m_buttonQuit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnButtonCancelClick ), NULL, this );
|
||||
|
||||
}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<wxFormBuilder_Project>
|
||||
<FileVersion major="1" minor="10" />
|
||||
<FileVersion major="1" minor="11" />
|
||||
<object class="Project" expanded="1">
|
||||
<property name="class_decoration"></property>
|
||||
<property name="code_generation">C++</property>
|
||||
<property name="disconnect_events">1</property>
|
||||
<property name="disconnect_mode">source_name</property>
|
||||
<property name="disconnect_php_events">0</property>
|
||||
<property name="disconnect_python_events">0</property>
|
||||
<property name="embedded_files_path">res</property>
|
||||
<property name="encoding">UTF-8</property>
|
||||
|
@ -19,6 +20,7 @@
|
|||
<property name="path">.</property>
|
||||
<property name="precompiled_header"></property>
|
||||
<property name="relative_path">1</property>
|
||||
<property name="skip_php_events">1</property>
|
||||
<property name="skip_python_events">1</property>
|
||||
<property name="use_enum">1</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
|
@ -27,8 +29,11 @@
|
|||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
|
@ -51,7 +56,6 @@
|
|||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="layer"></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -65,11 +69,9 @@
|
|||
<property name="pane_size"></property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="row"></property>
|
||||
<property name="show">1</property>
|
||||
<property name="size">-1,-1</property>
|
||||
<property name="size">388,185</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="title">Print</property>
|
||||
|
@ -134,6 +136,93 @@
|
|||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font">,90,92,-1,70,0</property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Print options:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticText1</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">10</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
|
@ -141,7 +230,10 @@
|
|||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
|
@ -163,7 +255,6 @@
|
|||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Print sheet &reference and title block</property>
|
||||
<property name="layer"></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -178,9 +269,7 @@
|
|||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="row"></property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
|
@ -221,21 +310,24 @@
|
|||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="border">10</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="checked">1</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
|
@ -251,7 +343,6 @@
|
|||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Print in &black and white only</property>
|
||||
<property name="layer"></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -266,9 +357,7 @@
|
|||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="row"></property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
|
@ -328,7 +417,10 @@
|
|||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
|
@ -350,7 +442,6 @@
|
|||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Page Setup</property>
|
||||
<property name="layer"></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -365,9 +456,7 @@
|
|||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="row"></property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
|
@ -416,7 +505,10 @@
|
|||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
|
@ -438,7 +530,6 @@
|
|||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Preview</property>
|
||||
<property name="layer"></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -453,9 +544,7 @@
|
|||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="row"></property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
|
@ -504,7 +593,10 @@
|
|||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
|
@ -526,7 +618,6 @@
|
|||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Print</property>
|
||||
<property name="layer"></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -541,9 +632,7 @@
|
|||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="row"></property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
|
@ -592,7 +681,10 @@
|
|||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
|
@ -614,7 +706,6 @@
|
|||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_CANCEL</property>
|
||||
<property name="label">Close</property>
|
||||
<property name="layer"></property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -629,9 +720,7 @@
|
|||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="row"></property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
|
|
|
@ -1,21 +1,23 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 16 2008)
|
||||
// C++ code generated with wxFormBuilder (version Mar 17 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __dialog_print_using_printer_base__
|
||||
#define __dialog_print_using_printer_base__
|
||||
#ifndef __DIALOG_PRINT_USING_PRINTER_BASE_H__
|
||||
#define __DIALOG_PRINT_USING_PRINTER_BASE_H__
|
||||
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
|
||||
#include <wx/string.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
@ -30,6 +32,7 @@ class DIALOG_PRINT_USING_PRINTER_BASE : public wxDialog
|
|||
private:
|
||||
|
||||
protected:
|
||||
wxStaticText* m_staticText1;
|
||||
wxCheckBox* m_checkReference;
|
||||
wxCheckBox* m_checkMonochrome;
|
||||
wxButton* m_buttonPageSetup;
|
||||
|
@ -47,9 +50,10 @@ class DIALOG_PRINT_USING_PRINTER_BASE : public wxDialog
|
|||
|
||||
|
||||
public:
|
||||
DIALOG_PRINT_USING_PRINTER_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Print"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
|
||||
DIALOG_PRINT_USING_PRINTER_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Print"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 388,185 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_PRINT_USING_PRINTER_BASE();
|
||||
|
||||
};
|
||||
|
||||
#endif //__dialog_print_using_printer_base__
|
||||
#endif //__DIALOG_PRINT_USING_PRINTER_BASE_H__
|
||||
|
|
|
@ -85,9 +85,12 @@ HIERARCHY_TREE::HIERARCHY_TREE( HIERARCHY_NAVIG_DLG* parent ) :
|
|||
m_Parent = parent;
|
||||
|
||||
// Make an image list containing small icons
|
||||
imageList = new wxImageList( 16, 15, true, 2 );
|
||||
// All icons are expected having the same size.
|
||||
wxBitmap tree_nosel_bm( KiBitmap( tree_nosel_xpm ) );
|
||||
imageList = new wxImageList( tree_nosel_bm.GetWidth(),
|
||||
tree_nosel_bm.GetHeight(), true, 2 );
|
||||
|
||||
imageList->Add( KiBitmap( tree_nosel_xpm ) );
|
||||
imageList->Add( tree_nosel_bm );
|
||||
imageList->Add( KiBitmap( tree_sel_xpm ) );
|
||||
|
||||
AssignImageList( imageList );
|
||||
|
@ -147,37 +150,32 @@ HIERARCHY_NAVIG_DLG::HIERARCHY_NAVIG_DLG( SCH_EDIT_FRAME* parent, wxDC* DC, cons
|
|||
|
||||
cellule = m_Tree->AddRoot( _( "Root" ), 0, 1 );
|
||||
m_Tree->SetItemBold( cellule, true );
|
||||
|
||||
SCH_SHEET_PATH list;
|
||||
list.Push( g_RootSheet );
|
||||
m_Tree->SetItemData( cellule, new TreeItemData( list ) );
|
||||
|
||||
wxRect itemrect;
|
||||
#ifdef __UNIX__
|
||||
itemrect.SetWidth( 100 );
|
||||
itemrect.SetHeight( 20 );
|
||||
#else
|
||||
m_Tree->GetBoundingRect( cellule, itemrect );
|
||||
#endif
|
||||
m_TreeSize.x = itemrect.GetWidth() + 10;
|
||||
m_TreeSize.y = 20;
|
||||
|
||||
if( m_Parent->GetCurrentSheet().Last() == g_RootSheet )
|
||||
m_Tree->SelectItem( cellule ); //root.
|
||||
|
||||
maxposx = 15;
|
||||
BuildSheetsTree( &list, &cellule );
|
||||
|
||||
if( m_nbsheets > 1 )
|
||||
{
|
||||
m_Tree->Expand( cellule );
|
||||
|
||||
wxRect itemrect;
|
||||
m_Tree->GetBoundingRect( cellule, itemrect );
|
||||
|
||||
// Set dialog window size to be large enough
|
||||
m_TreeSize.x = itemrect.GetWidth() + 20;
|
||||
m_TreeSize.x = max( m_TreeSize.x, 250 );
|
||||
|
||||
// Readjust the size of the frame to an optimal value.
|
||||
m_TreeSize.y += m_nbsheets * itemrect.GetHeight();
|
||||
m_TreeSize.x = MIN( m_TreeSize.x, 250 );
|
||||
m_TreeSize.y = MIN( m_TreeSize.y, 350 );
|
||||
m_TreeSize.y = m_nbsheets * itemrect.GetHeight();
|
||||
m_TreeSize.y += 10;
|
||||
|
||||
SetClientSize( m_TreeSize );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
HIERARCHY_NAVIG_DLG::~HIERARCHY_NAVIG_DLG()
|
||||
|
|
|
@ -62,6 +62,7 @@ EXTERN_BITMAP( add_hierarchical_label_xpm )
|
|||
EXTERN_BITMAP( add_hierarchical_subsheet_xpm )
|
||||
EXTERN_BITMAP( add_hierar_pin_xpm )
|
||||
EXTERN_BITMAP( add_junction_xpm )
|
||||
EXTERN_BITMAP( add_keepout_area_xpm )
|
||||
EXTERN_BITMAP( add_line2bus_xpm )
|
||||
EXTERN_BITMAP( add_line_label_xpm )
|
||||
EXTERN_BITMAP( add_line_xpm )
|
||||
|
|
|
@ -679,6 +679,8 @@ public:
|
|||
int width = -1 );
|
||||
virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
|
||||
int width = -1 );
|
||||
virtual void Arc( const wxPoint& aCenter, int aStAngle, int aEndAngle, int aRadius,
|
||||
FILL_T aFill, int aWidth = -1 );
|
||||
virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
|
||||
FILL_T aFill, int aWidth = -1);
|
||||
|
||||
|
|
|
@ -439,6 +439,13 @@ public:
|
|||
|
||||
bool OnHotkeyEditItem( int aIdCommand );
|
||||
|
||||
/**
|
||||
* Function OnHotkeyCopyItem
|
||||
* returns the copy event id for copyable items.
|
||||
* @return Event id of a suitable copy event, zero when no copyable item found.
|
||||
*/
|
||||
int OnHotkeyCopyItem();
|
||||
|
||||
/**
|
||||
* Function OnHotkeyMoveItem
|
||||
* Moves or drag the item (footprint, track, text .. ) found under the mouse cursor
|
||||
|
@ -911,9 +918,9 @@ public:
|
|||
// Handling texts on the board
|
||||
void Rotate_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
||||
void FlipTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC );
|
||||
TEXTE_PCB* Create_Texte_Pcb( wxDC* DC );
|
||||
TEXTE_PCB* CreateTextePcb( wxDC* aDC, TEXTE_PCB* aText = NULL );
|
||||
void Delete_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
||||
void StartMoveTextePcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
||||
void StartMoveTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC, bool aErase = true );
|
||||
void Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC );
|
||||
void InstallTextPCBOptionsFrame( TEXTE_PCB* TextPCB, wxDC* DC );
|
||||
|
||||
|
|
|
@ -74,6 +74,8 @@ set(PCBNEW_DIALOGS
|
|||
dialogs/dialog_graphic_item_properties_for_Modedit.cpp
|
||||
dialogs/dialog_global_deletion.cpp
|
||||
dialogs/dialog_global_deletion_base.cpp
|
||||
dialogs/dialog_keepout_area_properties.cpp
|
||||
dialogs/dialog_keepout_area_properties_base.cpp
|
||||
dialogs/dialog_layers_setup.cpp
|
||||
dialogs/dialog_layers_setup_base.cpp
|
||||
dialogs/dialog_netlist.cpp
|
||||
|
|
|
@ -440,7 +440,7 @@ int PCB_EDIT_FRAME::GenPlaceBoard()
|
|||
m_messagePanel->SetMessage( 14, _( "Cells." ), msg, YELLOW );
|
||||
|
||||
/* Choose the number of board sides. */
|
||||
Nb_Sides = TWO_SIDES;
|
||||
RoutingMatrix.m_RoutingLayersCount = 2;
|
||||
|
||||
RoutingMatrix.InitRoutingMatrix();
|
||||
|
||||
|
@ -450,7 +450,7 @@ int PCB_EDIT_FRAME::GenPlaceBoard()
|
|||
|
||||
Route_Layer_BOTTOM = LAYER_N_FRONT;
|
||||
|
||||
if( Nb_Sides == TWO_SIDES )
|
||||
if( RoutingMatrix.m_RoutingLayersCount > 1 )
|
||||
Route_Layer_BOTTOM = LAYER_N_BACK;
|
||||
|
||||
Route_Layer_TOP = LAYER_N_FRONT;
|
||||
|
@ -618,7 +618,7 @@ int PCB_EDIT_FRAME::GetOptimalModulePlacement( MODULE* aModule, wxDC* aDC )
|
|||
*/
|
||||
TstOtherSide = false;
|
||||
|
||||
if( Nb_Sides == TWO_SIDES )
|
||||
if( RoutingMatrix.m_RoutingLayersCount > 1 )
|
||||
{
|
||||
D_PAD* Pad;
|
||||
int otherLayerMask = LAYER_BACK;
|
||||
|
@ -967,7 +967,7 @@ void CreateKeepOutRectangle( int ux0, int uy0, int ux1, int uy1,
|
|||
if( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) )
|
||||
trace = 1; /* Trace on bottom layer. */
|
||||
|
||||
if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && Nb_Sides )
|
||||
if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && RoutingMatrix.m_RoutingLayersCount )
|
||||
trace |= 2; /* Trace on top layer. */
|
||||
|
||||
if( trace == 0 )
|
||||
|
|
|
@ -47,12 +47,6 @@
|
|||
#include <autorout.h>
|
||||
|
||||
|
||||
int Nb_Sides; /* Number of layer for autorouting (0 or 1) */
|
||||
int OpenNodes; /* total number of nodes opened */
|
||||
int ClosNodes; /* total number of nodes closed */
|
||||
int MoveNodes; /* total number of nodes moved */
|
||||
int MaxNodes; /* maximum number of nodes opened at one time */
|
||||
|
||||
MATRIX_ROUTING_HEAD RoutingMatrix; // routing matrix (grid) to route 2-sided boards
|
||||
|
||||
/* init board, route traces*/
|
||||
|
@ -175,10 +169,10 @@ void PCB_EDIT_FRAME::Autoroute( wxDC* DC, int mode )
|
|||
m_messagePanel->EraseMsgBox();
|
||||
|
||||
/* Map the board */
|
||||
Nb_Sides = ONE_SIDE;
|
||||
RoutingMatrix.m_RoutingLayersCount = 1;
|
||||
|
||||
if( Route_Layer_TOP != Route_Layer_BOTTOM )
|
||||
Nb_Sides = TWO_SIDES;
|
||||
RoutingMatrix.m_RoutingLayersCount = 2;
|
||||
|
||||
if( RoutingMatrix.InitRoutingMatrix() < 0 )
|
||||
{
|
||||
|
@ -195,10 +189,7 @@ void PCB_EDIT_FRAME::Autoroute( wxDC* DC, int mode )
|
|||
|
||||
// DisplayRoutingMatrix( m_canvas, DC );
|
||||
|
||||
if( Nb_Sides == TWO_SIDES )
|
||||
Solve( DC, TWO_SIDES ); /* double face */
|
||||
else
|
||||
Solve( DC, ONE_SIDE ); /* simple face */
|
||||
Solve( DC, RoutingMatrix.m_RoutingLayersCount );
|
||||
|
||||
/* Free memory. */
|
||||
FreeQueue();
|
||||
|
@ -249,7 +240,7 @@ void DisplayRoutingMatrix( EDA_DRAW_PANEL* panel, wxDC* DC )
|
|||
if( dcell0 & HOLE )
|
||||
color = GREEN;
|
||||
|
||||
// if( Nb_Sides )
|
||||
// if( RoutingMatrix.m_RoutingLayersCount )
|
||||
// dcell1 = GetCell( row, col, TOP );
|
||||
|
||||
if( dcell1 & HOLE )
|
||||
|
|
|
@ -46,7 +46,8 @@ class BOARD;
|
|||
|
||||
|
||||
/* Autorouter commands. */
|
||||
enum CommandOpt {
|
||||
enum AUTOPLACEROUTE_OPTIONS
|
||||
{
|
||||
PLACE_ALL,
|
||||
PLACE_OUT_OF_BOARD,
|
||||
PLACE_INCREMENTAL,
|
||||
|
@ -58,13 +59,7 @@ enum CommandOpt {
|
|||
ROUTE_PAD
|
||||
};
|
||||
|
||||
|
||||
#define ONE_SIDE 0
|
||||
#define TWO_SIDES 1
|
||||
|
||||
#define MAX_SIDES_COUNT 2
|
||||
|
||||
extern int Nb_Sides; /* Number of layers for autorouting (0 or 1) */
|
||||
#define MAX_ROUTING_LAYERS_COUNT 2
|
||||
|
||||
#define FORCE_PADS 1 /* Force placement of pads for any Netcode */
|
||||
|
||||
|
@ -88,20 +83,23 @@ typedef char DIR_CELL;
|
|||
class MATRIX_ROUTING_HEAD
|
||||
{
|
||||
public:
|
||||
MATRIX_CELL* m_BoardSide[MAX_SIDES_COUNT]; // the image map of 2 board sides
|
||||
DIST_CELL* m_DistSide[MAX_SIDES_COUNT]; // the image map of 2 board sides: distance to
|
||||
// cells
|
||||
DIR_CELL* m_DirSide[MAX_SIDES_COUNT]; // the image map of 2 board sides: pointers back to
|
||||
// source
|
||||
MATRIX_CELL* m_BoardSide[MAX_ROUTING_LAYERS_COUNT]; // the image map of 2 board sides
|
||||
DIST_CELL* m_DistSide[MAX_ROUTING_LAYERS_COUNT]; // the image map of 2 board sides:
|
||||
// distance to cells
|
||||
DIR_CELL* m_DirSide[MAX_ROUTING_LAYERS_COUNT]; // the image map of 2 board sides:
|
||||
// pointers back to source
|
||||
bool m_InitMatrixDone;
|
||||
int m_Layers; // Layer count (1 2 )
|
||||
int m_RoutingLayersCount; // Number of layers for autorouting (0 or 1)
|
||||
int m_GridRouting; // Size of grid for autoplace/autoroute
|
||||
EDA_RECT m_BrdBox; // Actual board bounding box
|
||||
int m_Nrows, m_Ncols; // Matrix size
|
||||
int m_MemSize; // Memory requirement, just for statistics
|
||||
int m_RouteCount; // Number of routes
|
||||
|
||||
private:
|
||||
void (MATRIX_ROUTING_HEAD::* m_opWriteCell)( int aRow, int aCol, int aSide, MATRIX_CELL aCell); // a pointeur to the current selected cell op
|
||||
// a pointer to the current selected cell operation
|
||||
void (MATRIX_ROUTING_HEAD::* m_opWriteCell)( int aRow, int aCol,
|
||||
int aSide, MATRIX_CELL aCell);
|
||||
|
||||
public:
|
||||
MATRIX_ROUTING_HEAD();
|
||||
|
@ -114,7 +112,7 @@ public:
|
|||
|
||||
/**
|
||||
* function GetBrdCoordOrigin
|
||||
* @returns the board coordinate corresponding to the
|
||||
* @return the board coordinate corresponding to the
|
||||
* routing matrix origin ( board coordinate offset )
|
||||
*/
|
||||
wxPoint GetBrdCoordOrigin()
|
||||
|
@ -156,6 +154,12 @@ public:
|
|||
void SetDist( int aRow, int aCol, int aSide, DIST_CELL );
|
||||
int GetDir( int aRow, int aCol, int aSide );
|
||||
void SetDir( int aRow, int aCol, int aSide, int aDir);
|
||||
|
||||
// calculate distance (with penalty) of a trace through a cell
|
||||
int CalcDist(int x,int y,int z ,int side );
|
||||
|
||||
// calculate approximate distance (manhattan distance)
|
||||
int GetApxDist( int r1, int c1, int r2, int c2 );
|
||||
};
|
||||
|
||||
extern MATRIX_ROUTING_HEAD RoutingMatrix; /* 2-sided board */
|
||||
|
@ -220,10 +224,6 @@ int SetWork( int, int, int , int, int, RATSNEST_ITEM *, int );
|
|||
void GetWork( int *, int *, int *, int *, int *, RATSNEST_ITEM ** );
|
||||
void SortWork(); /* order the work items; shortest first */
|
||||
|
||||
/* DIST.CPP */
|
||||
int GetApxDist( int r1, int c1, int r2, int c2 );
|
||||
int CalcDist(int x,int y,int z ,int side );
|
||||
|
||||
/* routing_matrix.cpp */
|
||||
int Build_Work( BOARD * Pcb );
|
||||
void PlaceCells( BOARD * Pcb, int net_code, int flag = 0 );
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
/* calculate approximate distance (manhattan distance)
|
||||
*/
|
||||
int GetApxDist( int r1, int c1, int r2, int c2 )
|
||||
int MATRIX_ROUTING_HEAD::GetApxDist( int r1, int c1, int r2, int c2 )
|
||||
{
|
||||
int d1, d2; /* row and column deltas */
|
||||
|
||||
|
@ -135,7 +135,7 @@ static int dir_penalty_BOTTOM[10][10] =
|
|||
|
||||
/* calculate distance (with penalty) of a trace through a cell
|
||||
*/
|
||||
int CalcDist(int x,int y,int z ,int side )
|
||||
int MATRIX_ROUTING_HEAD::CalcDist(int x,int y,int z ,int side )
|
||||
{
|
||||
int adjust, ldist;
|
||||
|
||||
|
@ -158,7 +158,7 @@ int CalcDist(int x,int y,int z ,int side )
|
|||
|
||||
ldist = dist[x-1][y-1] + penalty[x-1][y-1] + adjust;
|
||||
|
||||
if( Nb_Sides )
|
||||
if( m_RouteCount > 1 )
|
||||
{
|
||||
if( side == BOTTOM )
|
||||
ldist += dir_penalty_TOP[x-1][y-1];
|
||||
|
|
|
@ -71,14 +71,14 @@ static void TraceCircle( int ux0, int uy0, int ux1, int uy1, int lg, int layer,
|
|||
if( layer < 0 ) \
|
||||
{ \
|
||||
RoutingMatrix.WriteCell( dy, dx, BOTTOM, color ); \
|
||||
if( Nb_Sides ) \
|
||||
if( RoutingMatrix.m_RoutingLayersCount > 1 ) \
|
||||
RoutingMatrix.WriteCell( dy, dx, TOP, color ); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
if( layer == Route_Layer_BOTTOM ) \
|
||||
RoutingMatrix.WriteCell( dy, dx, BOTTOM, color ); \
|
||||
if( Nb_Sides ) \
|
||||
if( RoutingMatrix.m_RoutingLayersCount > 1 ) \
|
||||
if( layer == Route_Layer_TOP ) \
|
||||
RoutingMatrix.WriteCell( dy, dx, TOP, color ); \
|
||||
} \
|
||||
|
@ -156,7 +156,7 @@ void TraceFilledCircle( int cx, int cy, int radius,
|
|||
trace = 1; // Trace on BOTTOM
|
||||
|
||||
if( aLayerMask & GetLayerMask( Route_Layer_TOP ) )
|
||||
if( Nb_Sides )
|
||||
if( RoutingMatrix.m_RoutingLayersCount > 1 )
|
||||
trace |= 2; // Trace on TOP
|
||||
|
||||
if( trace == 0 )
|
||||
|
@ -475,7 +475,7 @@ void TraceFilledRectangle( int ux0, int uy0, int ux1, int uy1,
|
|||
if( ( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) ) )
|
||||
trace = 1; // Trace on BOTTOM
|
||||
|
||||
if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && Nb_Sides )
|
||||
if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && RoutingMatrix.m_RoutingLayersCount > 1 )
|
||||
trace |= 2; // Trace on TOP
|
||||
|
||||
if( trace == 0 )
|
||||
|
@ -542,7 +542,7 @@ void TraceFilledRectangle( int ux0, int uy0, int ux1, int uy1,
|
|||
|
||||
if( aLayerMask & GetLayerMask( Route_Layer_TOP ) )
|
||||
{
|
||||
if( Nb_Sides )
|
||||
if( RoutingMatrix.m_RoutingLayersCount > 1 )
|
||||
trace |= 2; // Trace on TOP
|
||||
}
|
||||
|
||||
|
|
|
@ -46,6 +46,23 @@
|
|||
#include <class_pcb_text.h>
|
||||
|
||||
|
||||
MATRIX_ROUTING_HEAD::MATRIX_ROUTING_HEAD()
|
||||
{
|
||||
m_BoardSide[0] = m_BoardSide[1] = NULL;
|
||||
m_DistSide[0] = m_DistSide[1] = NULL;
|
||||
m_DirSide[0] = m_DirSide[1] = NULL;
|
||||
m_InitMatrixDone = false;
|
||||
m_Nrows = m_Ncols = 0;
|
||||
m_MemSize = 0;
|
||||
m_RoutingLayersCount = 1;
|
||||
}
|
||||
|
||||
|
||||
MATRIX_ROUTING_HEAD::~MATRIX_ROUTING_HEAD()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
bool MATRIX_ROUTING_HEAD::ComputeMatrixSize( BOARD* aPcb, bool aUseBoardEdgesOnly )
|
||||
{
|
||||
aPcb->ComputeBoundingBox( aUseBoardEdgesOnly );
|
||||
|
@ -80,22 +97,6 @@ bool MATRIX_ROUTING_HEAD::ComputeMatrixSize( BOARD* aPcb, bool aUseBoardEdgesOnl
|
|||
}
|
||||
|
||||
|
||||
MATRIX_ROUTING_HEAD::MATRIX_ROUTING_HEAD()
|
||||
{
|
||||
m_BoardSide[0] = m_BoardSide[1] = NULL;
|
||||
m_DistSide[0] = m_DistSide[1] = NULL;
|
||||
m_DirSide[0] = m_DirSide[1] = NULL;
|
||||
m_InitMatrixDone = false;
|
||||
m_Layers = MAX_SIDES_COUNT;
|
||||
m_Nrows = m_Ncols = 0;
|
||||
m_MemSize = 0;
|
||||
}
|
||||
|
||||
|
||||
MATRIX_ROUTING_HEAD::~MATRIX_ROUTING_HEAD()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
int MATRIX_ROUTING_HEAD::InitRoutingMatrix()
|
||||
{
|
||||
|
@ -109,7 +110,7 @@ int MATRIX_ROUTING_HEAD::InitRoutingMatrix()
|
|||
// give a small margin for memory allocation:
|
||||
ii = (RoutingMatrix.m_Nrows + 1) * (RoutingMatrix.m_Ncols + 1);
|
||||
|
||||
for( kk = 0; kk < m_Layers; kk++ )
|
||||
for( kk = 0; kk < m_RoutingLayersCount; kk++ )
|
||||
{
|
||||
m_BoardSide[kk] = NULL;
|
||||
m_DistSide[kk] = NULL;
|
||||
|
@ -137,7 +138,7 @@ int MATRIX_ROUTING_HEAD::InitRoutingMatrix()
|
|||
return -1;
|
||||
}
|
||||
|
||||
m_MemSize = m_Layers * ii * ( sizeof(MATRIX_CELL) + sizeof(DIST_CELL) + sizeof(char) );
|
||||
m_MemSize = m_RouteCount * ii * ( sizeof(MATRIX_CELL) + sizeof(DIST_CELL) + sizeof(char) );
|
||||
|
||||
return m_MemSize;
|
||||
}
|
||||
|
@ -149,7 +150,7 @@ void MATRIX_ROUTING_HEAD::UnInitRoutingMatrix()
|
|||
|
||||
m_InitMatrixDone = false;
|
||||
|
||||
for( ii = 0; ii < MAX_SIDES_COUNT; ii++ )
|
||||
for( ii = 0; ii < MAX_ROUTING_LAYERS_COUNT; ii++ )
|
||||
{
|
||||
// de-allocate Dir matrix
|
||||
if( m_DirSide[ii] )
|
||||
|
@ -179,14 +180,17 @@ void MATRIX_ROUTING_HEAD::UnInitRoutingMatrix()
|
|||
|
||||
/**
|
||||
* Function PlaceCells
|
||||
* initializes the cell board is set and VIA_IMPOSSIBLE HOLE according to the setbacks.
|
||||
* The elements of net_code = net_code will not be occupied as places but only
|
||||
* VIA_IMPOSSIBLE
|
||||
* For single-sided Routing 1:
|
||||
* BOTTOM side is used and Route_Layer_BOTTOM = Route_Layer_TOP
|
||||
* Initialize the matrix routing by setting obstacles for each occupied cell
|
||||
* a cell set to HOLE is an obstacle for tracks and vias
|
||||
* a cell set to VIA_IMPOSSIBLE is an obstacle for vias only.
|
||||
* a cell set to CELL_is_EDGE is a frontier.
|
||||
* Tracks and vias having the same net code as net_code are skipped
|
||||
* (htey do not are obstacles)
|
||||
*
|
||||
* According to the bits = 1 parameter flag:
|
||||
* If FORCE_PADS: all pads will be placed even those same net_code.
|
||||
* For single-sided Routing 1:
|
||||
* BOTTOM side is used, and Route_Layer_BOTTOM = Route_Layer_TOP
|
||||
*
|
||||
* If flag == FORCE_PADS: all pads will be put in matrix as obstacles.
|
||||
*/
|
||||
void PlaceCells( BOARD* aPcb, int net_code, int flag )
|
||||
{
|
||||
|
@ -347,8 +351,6 @@ int Build_Work( BOARD* Pcb )
|
|||
int demi_pas = RoutingMatrix.m_GridRouting / 2;
|
||||
wxString msg;
|
||||
|
||||
EDA_RECT bbbox = Pcb->GetBoundingBox();
|
||||
|
||||
InitWork(); /* clear work list */
|
||||
int cellCount = 0;
|
||||
|
||||
|
@ -356,7 +358,7 @@ int Build_Work( BOARD* Pcb )
|
|||
{
|
||||
pt_rats = &Pcb->m_FullRatsnest[ii];
|
||||
|
||||
/* We consider her only ratsnest that are active ( obviously not yet routed)
|
||||
/* We consider here only ratsnest that are active ( obviously not yet routed)
|
||||
* and routables (that are not yet attempt to be routed and fail
|
||||
*/
|
||||
if( (pt_rats->m_Status & CH_ACTIF) == 0 )
|
||||
|
@ -373,45 +375,47 @@ int Build_Work( BOARD* Pcb )
|
|||
current_net_code = pt_pad->GetNet();
|
||||
pt_ch = pt_rats;
|
||||
|
||||
r1 = ( pt_pad->GetPosition().y - bbbox.GetY() + demi_pas ) / RoutingMatrix.m_GridRouting;
|
||||
r1 = ( pt_pad->GetPosition().y - RoutingMatrix.m_BrdBox.GetY() + demi_pas )
|
||||
/ RoutingMatrix.m_GridRouting;
|
||||
|
||||
if( r1 < 0 || r1 >= RoutingMatrix.m_Nrows )
|
||||
{
|
||||
msg.Printf( wxT( "error : row = %d ( padY %d pcbY %d) " ), r1,
|
||||
pt_pad->GetPosition().y, bbbox.GetY() );
|
||||
pt_pad->GetPosition().y, RoutingMatrix.m_BrdBox.GetY() );
|
||||
wxMessageBox( msg );
|
||||
return 0;
|
||||
}
|
||||
|
||||
c1 = ( pt_pad->GetPosition().x - bbbox.GetX() + demi_pas ) / RoutingMatrix.m_GridRouting;
|
||||
c1 = ( pt_pad->GetPosition().x - RoutingMatrix.m_BrdBox.GetX() + demi_pas ) / RoutingMatrix.m_GridRouting;
|
||||
|
||||
if( c1 < 0 || c1 >= RoutingMatrix.m_Ncols )
|
||||
{
|
||||
msg.Printf( wxT( "error : col = %d ( padX %d pcbX %d) " ), c1,
|
||||
pt_pad->GetPosition().x, bbbox.GetX() );
|
||||
pt_pad->GetPosition().x, RoutingMatrix.m_BrdBox.GetX() );
|
||||
wxMessageBox( msg );
|
||||
return 0;
|
||||
}
|
||||
|
||||
pt_pad = pt_rats->m_PadEnd;
|
||||
|
||||
r2 = ( pt_pad->GetPosition().y - bbbox.GetY()
|
||||
r2 = ( pt_pad->GetPosition().y - RoutingMatrix.m_BrdBox.GetY()
|
||||
+ demi_pas ) / RoutingMatrix.m_GridRouting;
|
||||
|
||||
if( r2 < 0 || r2 >= RoutingMatrix.m_Nrows )
|
||||
{
|
||||
msg.Printf( wxT( "error : row = %d ( padY %d pcbY %d) " ), r2,
|
||||
pt_pad->GetPosition().y, bbbox.GetY() );
|
||||
pt_pad->GetPosition().y, RoutingMatrix.m_BrdBox.GetY() );
|
||||
wxMessageBox( msg );
|
||||
return 0;
|
||||
}
|
||||
|
||||
c2 = ( pt_pad->GetPosition().x - bbbox.GetX() + demi_pas ) / RoutingMatrix.m_GridRouting;
|
||||
c2 = ( pt_pad->GetPosition().x - RoutingMatrix.m_BrdBox.GetX() + demi_pas )
|
||||
/ RoutingMatrix.m_GridRouting;
|
||||
|
||||
if( c2 < 0 || c2 >= RoutingMatrix.m_Ncols )
|
||||
{
|
||||
msg.Printf( wxT( "error : col = %d ( padX %d pcbX %d) " ), c2,
|
||||
pt_pad->GetPosition().x, bbbox.GetX() );
|
||||
pt_pad->GetPosition().x, RoutingMatrix.m_BrdBox.GetX() );
|
||||
wxMessageBox( msg );
|
||||
return 0;
|
||||
}
|
||||
|
@ -424,7 +428,7 @@ int Build_Work( BOARD* Pcb )
|
|||
return cellCount;
|
||||
}
|
||||
|
||||
// Initialize WriteCell to make the aLogicOp
|
||||
// Initialize m_opWriteCell member to make the aLogicOp
|
||||
void MATRIX_ROUTING_HEAD::SetCellOperation( int aLogicOp )
|
||||
{
|
||||
switch( aLogicOp )
|
||||
|
|
|
@ -86,6 +86,10 @@ static int s_Clearance; // Clearance value used in autorouter
|
|||
|
||||
static PICKED_ITEMS_LIST s_ItemsListPicker;
|
||||
|
||||
int OpenNodes; /* total number of nodes opened */
|
||||
int ClosNodes; /* total number of nodes closed */
|
||||
int MoveNodes; /* total number of nodes moved */
|
||||
int MaxNodes; /* maximum number of nodes opened at one time */
|
||||
|
||||
#define NOSUCCESS 0
|
||||
#define STOP_FROM_ESC -1
|
||||
|
@ -263,7 +267,7 @@ static long newmask[8] =
|
|||
* -1 if escape (stop being routed) request
|
||||
* -2 if default memory allocation
|
||||
*/
|
||||
int PCB_EDIT_FRAME::Solve( wxDC* DC, int two_sides )
|
||||
int PCB_EDIT_FRAME::Solve( wxDC* DC, int aLayersCount )
|
||||
{
|
||||
int current_net_code;
|
||||
int row_source, col_source, row_target, col_target;
|
||||
|
@ -272,6 +276,7 @@ int PCB_EDIT_FRAME::Solve( wxDC* DC, int two_sides )
|
|||
bool stop = false;
|
||||
wxString msg;
|
||||
int routedCount = 0; // routed ratsnest count
|
||||
bool two_sides = aLayersCount == 2;
|
||||
|
||||
m_canvas->SetAbortRequest( false );
|
||||
|
||||
|
@ -522,7 +527,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
|
|||
}
|
||||
|
||||
InitQueue(); /* initialize the search queue */
|
||||
apx_dist = GetApxDist( row_source, col_source, row_target, col_target );
|
||||
apx_dist = RoutingMatrix.GetApxDist( row_source, col_source, row_target, col_target );
|
||||
|
||||
/* Initialize first search. */
|
||||
if( two_sides ) /* Preferred orientation. */
|
||||
|
@ -713,7 +718,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
|
|||
}
|
||||
|
||||
olddir = RoutingMatrix.GetDir( r, c, side );
|
||||
newdist = d + CalcDist( ndir[i], olddir,
|
||||
newdist = d + RoutingMatrix.CalcDist( ndir[i], olddir,
|
||||
( olddir == FROM_OTHERSIDE ) ?
|
||||
RoutingMatrix.GetDir( r, c, 1 - side ) : 0, side );
|
||||
|
||||
|
@ -725,7 +730,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
|
|||
RoutingMatrix.SetDist( nr, nc, side, newdist );
|
||||
|
||||
if( SetQueue( nr, nc, side, newdist,
|
||||
GetApxDist( nr, nc, row_target, col_target ),
|
||||
RoutingMatrix.GetApxDist( nr, nc, row_target, col_target ),
|
||||
row_target, col_target ) == 0 )
|
||||
{
|
||||
return ERR_MEMORY;
|
||||
|
@ -736,7 +741,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
|
|||
RoutingMatrix.SetDir( nr, nc, side, ndir[i] );
|
||||
RoutingMatrix.SetDist( nr, nc, side, newdist );
|
||||
ReSetQueue( nr, nc, side, newdist,
|
||||
GetApxDist( nr, nc, row_target, col_target ),
|
||||
RoutingMatrix.GetApxDist( nr, nc, row_target, col_target ),
|
||||
row_target, col_target );
|
||||
}
|
||||
}
|
||||
|
@ -781,7 +786,7 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe,
|
|||
if( skip ) /* neighboring hole or trace? */
|
||||
continue; /* yes, can't drill via here */
|
||||
|
||||
newdist = d + CalcDist( FROM_OTHERSIDE, olddir, 0, side );
|
||||
newdist = d + RoutingMatrix.CalcDist( FROM_OTHERSIDE, olddir, 0, side );
|
||||
|
||||
/* if (a) not visited yet,
|
||||
* or (b) we have found a better path,
|
||||
|
|
|
@ -41,9 +41,9 @@
|
|||
#include <cell.h>
|
||||
|
||||
|
||||
struct CWORK // a unit of work is a source-target (a ratsnet item) to connect
|
||||
struct CWORK // a unit of work is a source-target to connect
|
||||
// this is a ratsnest item in the routing matrix world
|
||||
{
|
||||
struct CWORK* m_Next;
|
||||
int m_FromRow; // source row
|
||||
int m_FromCol; // source column
|
||||
int m_ToRow; // target row
|
||||
|
@ -53,34 +53,22 @@ struct CWORK // a unit of work is a source-target (a ratsnet item) to connect
|
|||
int m_ApxDist; // approximate distance
|
||||
int m_Cost; // cost for sort by length
|
||||
int m_Priority; // route priority
|
||||
|
||||
// the function that calculates the cost of this ratsnest:
|
||||
void CalculateCost();
|
||||
};
|
||||
|
||||
|
||||
// pointers to the first and last item of work to do
|
||||
static CWORK* Head = NULL;
|
||||
static CWORK* Tail = NULL;
|
||||
static CWORK* Current = NULL;
|
||||
// the list of ratsnests
|
||||
static std::vector <CWORK> WorkList;
|
||||
static unsigned Current = 0;
|
||||
|
||||
|
||||
// initialize the work list
|
||||
void InitWork()
|
||||
{
|
||||
CWORK* ptr;
|
||||
|
||||
while( ( ptr = Head ) != NULL )
|
||||
{
|
||||
Head = ptr->m_Next;
|
||||
delete ptr;
|
||||
}
|
||||
|
||||
Tail = Current = NULL;
|
||||
}
|
||||
|
||||
|
||||
// initialize the work list
|
||||
void ReInitWork()
|
||||
{
|
||||
Current = Head;
|
||||
WorkList.clear();
|
||||
Current = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -89,41 +77,25 @@ void ReInitWork()
|
|||
* 1 if OK
|
||||
* 0 if memory allocation failed
|
||||
*/
|
||||
static int GetCost( int r1, int c1, int r2, int c2 );
|
||||
|
||||
int SetWork( int r1, int c1,
|
||||
int n_c,
|
||||
int r2, int c2,
|
||||
RATSNEST_ITEM* pt_ch, int pri )
|
||||
{
|
||||
CWORK* p;
|
||||
|
||||
if( ( p = (CWORK*) operator new( sizeof(CWORK), std::nothrow ) ) != NULL )
|
||||
{
|
||||
p->m_FromRow = r1;
|
||||
p->m_FromCol = c1;
|
||||
p->m_NetCode = n_c;
|
||||
p->m_ToRow = r2;
|
||||
p->m_ToCol = c2;
|
||||
p->m_Ratsnest = pt_ch;
|
||||
p->m_ApxDist = GetApxDist( r1, c1, r2, c2 );
|
||||
p->m_Cost = GetCost( r1, c1, r2, c2 );
|
||||
p->m_Priority = pri;
|
||||
p->m_Next = NULL;
|
||||
|
||||
if( Head ) /* attach at end */
|
||||
Tail->m_Next = p;
|
||||
else /* first in list */
|
||||
Head = Current = p;
|
||||
|
||||
Tail = p;
|
||||
CWORK item;
|
||||
item.m_FromRow = r1;
|
||||
item.m_FromCol = c1;
|
||||
item.m_NetCode = n_c;
|
||||
item.m_ToRow = r2;
|
||||
item.m_ToCol = c2;
|
||||
item.m_Ratsnest = pt_ch;
|
||||
item.m_ApxDist = RoutingMatrix.GetApxDist( r1, c1, r2, c2 );
|
||||
item.CalculateCost();
|
||||
item.m_Priority = pri;
|
||||
WorkList.push_back( item );
|
||||
return 1;
|
||||
}
|
||||
else /* can't get any more memory */
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* fetch a unit of work from the work list */
|
||||
|
@ -132,15 +104,15 @@ void GetWork( int* r1, int* c1,
|
|||
int* r2, int* c2,
|
||||
RATSNEST_ITEM** pt_ch )
|
||||
{
|
||||
if( Current )
|
||||
if( Current < WorkList.size() )
|
||||
{
|
||||
*r1 = Current->m_FromRow;
|
||||
*c1 = Current->m_FromCol;
|
||||
*n_c = Current->m_NetCode;
|
||||
*r2 = Current->m_ToRow;
|
||||
*c2 = Current->m_ToCol;
|
||||
*pt_ch = Current->m_Ratsnest;
|
||||
Current = Current->m_Next;
|
||||
*r1 = WorkList[Current].m_FromRow;
|
||||
*c1 = WorkList[Current].m_FromCol;
|
||||
*n_c = WorkList[Current].m_NetCode;
|
||||
*r2 = WorkList[Current].m_ToRow;
|
||||
*c2 = WorkList[Current].m_ToCol;
|
||||
*pt_ch = WorkList[Current].m_Ratsnest;
|
||||
Current++;
|
||||
}
|
||||
else /* none left */
|
||||
{
|
||||
|
@ -151,64 +123,18 @@ void GetWork( int* r1, int* c1,
|
|||
}
|
||||
|
||||
|
||||
/* order the work items; shortest (low cost) first */
|
||||
// order the work items; shortest (low cost) first:
|
||||
bool sort_by_cost( const CWORK& ref, const CWORK& item )
|
||||
{
|
||||
if( ref.m_Priority == item.m_Priority )
|
||||
return ref.m_Cost < item.m_Cost;
|
||||
|
||||
return ref.m_Priority >= item.m_Priority;
|
||||
}
|
||||
|
||||
void SortWork()
|
||||
{
|
||||
CWORK* p;
|
||||
CWORK* q0; /* put PRIORITY PAD_CONNECTs in q0 */
|
||||
CWORK* q1; /* sort other PAD_CONNECTs in q1 */
|
||||
CWORK* r;
|
||||
|
||||
q0 = q1 = NULL;
|
||||
|
||||
while( (p = Head) != NULL ) /* prioritize each work item */
|
||||
{
|
||||
Head = Head->m_Next;
|
||||
|
||||
if( p->m_Priority ) /* put at end of priority list */
|
||||
{
|
||||
p->m_Next = NULL;
|
||||
|
||||
if( (r = q0) == NULL ) /* empty list? */
|
||||
{
|
||||
q0 = p;
|
||||
}
|
||||
else /* attach at end */
|
||||
{
|
||||
while( r->m_Next ) /* search for end */
|
||||
r = r->m_Next;
|
||||
|
||||
r->m_Next = p; /* attach */
|
||||
}
|
||||
}
|
||||
else if( ( ( r = q1 ) == NULL ) || ( p->m_Cost < q1->m_Cost ) )
|
||||
{
|
||||
p->m_Next = q1;
|
||||
q1 = p;
|
||||
}
|
||||
else /* find proper position in list */
|
||||
{
|
||||
while( r->m_Next && p->m_Cost >= r->m_Next->m_Cost )
|
||||
r = r->m_Next;
|
||||
|
||||
p->m_Next = r->m_Next;
|
||||
r->m_Next = p;
|
||||
}
|
||||
}
|
||||
|
||||
if( (p = q0) != NULL ) /* any priority PAD_CONNECTs? */
|
||||
{
|
||||
while( q0->m_Next )
|
||||
q0 = q0->m_Next;
|
||||
|
||||
q0->m_Next = q1;
|
||||
}
|
||||
else
|
||||
p = q1;
|
||||
|
||||
/* reposition Head and Tail */
|
||||
for( Head = Current = Tail = p; Tail && Tail->m_Next; Tail = Tail->m_Next )
|
||||
;
|
||||
sort( WorkList.begin(), WorkList.end(), sort_by_cost );
|
||||
}
|
||||
|
||||
|
||||
|
@ -216,13 +142,13 @@ void SortWork()
|
|||
* cost = (| dx | + | dy |) * disability
|
||||
* disability = 1 if dx or dy = 0, max if | dx | # | dy |
|
||||
*/
|
||||
static int GetCost( int r1, int c1, int r2, int c2 )
|
||||
void CWORK::CalculateCost()
|
||||
{
|
||||
int dx, dy, mx, my;
|
||||
double incl = 1.0;
|
||||
|
||||
dx = abs( c2 - c1 );
|
||||
dy = abs( r2 - r1 );
|
||||
dx = abs( m_ToCol - m_FromCol );
|
||||
dy = abs( m_ToRow - m_FromRow );
|
||||
mx = dx;
|
||||
my = dy;
|
||||
|
||||
|
@ -234,5 +160,5 @@ static int GetCost( int r1, int c1, int r2, int c2 )
|
|||
if( mx )
|
||||
incl += (2 * (double) my / mx);
|
||||
|
||||
return (int) ( ( dx + dy ) * incl );
|
||||
m_Cost = (int) ( ( dx + dy ) * incl );
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ BOARD::BOARD() :
|
|||
|
||||
for( int layer = 0; layer < LAYER_COUNT; ++layer )
|
||||
{
|
||||
m_Layer[layer].m_Name = GetDefaultLayerName( layer );
|
||||
m_Layer[layer].m_Name = GetDefaultLayerName( layer, true );
|
||||
|
||||
if( layer <= LAST_COPPER_LAYER )
|
||||
m_Layer[layer].m_Type = LT_SIGNAL;
|
||||
|
@ -355,7 +355,7 @@ bool BOARD::SetLayer( int aIndex, const LAYER& aLayer )
|
|||
}
|
||||
|
||||
|
||||
wxString BOARD::GetLayerName( int aLayerIndex ) const
|
||||
wxString BOARD::GetLayerName( int aLayerIndex, bool aTranslate ) const
|
||||
{
|
||||
if( !IsValidLayerIndex( aLayerIndex ) )
|
||||
return wxEmptyString;
|
||||
|
@ -365,14 +365,51 @@ wxString BOARD::GetLayerName( int aLayerIndex ) const
|
|||
{
|
||||
// default names were set in BOARD::BOARD() but they may be
|
||||
// over-ridden by BOARD::SetLayerName()
|
||||
// For non translated name, return the actual copper layer names,
|
||||
// otherwise, return the native layer names
|
||||
if( aTranslate || aLayerIndex < FIRST_NO_COPPER_LAYER )
|
||||
return m_Layer[aLayerIndex].m_Name;
|
||||
}
|
||||
|
||||
return GetDefaultLayerName( aLayerIndex );
|
||||
return GetDefaultLayerName( aLayerIndex, aTranslate );
|
||||
}
|
||||
|
||||
|
||||
wxString BOARD::GetDefaultLayerName( int aLayerNumber )
|
||||
// Default layer names are statically initialized,
|
||||
// because we want the English name and the translation
|
||||
// The English name is stored here, and to get the tranlation
|
||||
// wxGetTranslation must be called explicitely
|
||||
static const wxChar * layer_FRONT_name = _( "Front" );
|
||||
static const wxChar * layer_INNER1_name = _( "Inner1" );
|
||||
static const wxChar * layer_INNER2_name = _( "Inner2" );
|
||||
static const wxChar * layer_INNER3_name = _( "Inner3" );
|
||||
static const wxChar * layer_INNER4_name = _( "Inner4" );
|
||||
static const wxChar * layer_INNER5_name = _( "Inner5" );
|
||||
static const wxChar * layer_INNER6_name = _( "Inner6" );
|
||||
static const wxChar * layer_INNER7_name = _( "Inner7" );
|
||||
static const wxChar * layer_INNER8_name = _( "Inner8" );
|
||||
static const wxChar * layer_INNER9_name = _( "Inner9" );
|
||||
static const wxChar * layer_INNER10_name = _( "Inner10" );
|
||||
static const wxChar * layer_INNER11_name = _( "Inner11" );
|
||||
static const wxChar * layer_INNER12_name = _( "Inner12" );
|
||||
static const wxChar * layer_INNER13_name = _( "Inner13" );
|
||||
static const wxChar * layer_INNER14_name = _( "Inner14" );
|
||||
static const wxChar * layer_BACK_name = _( "Back" );
|
||||
static const wxChar * layer_ADHESIVE_BACK_name = _( "Adhes_Back" );
|
||||
static const wxChar * layer_ADHESIVE_FRONT_name = _( "Adhes_Front" );
|
||||
static const wxChar * layer_SOLDERPASTE_BACK_namet = _( "SoldP_Back" );
|
||||
static const wxChar * layer_SOLDERPASTE_FRONT_name = _( "SoldP_Front" );
|
||||
static const wxChar * layer_SILKSCREEN_BACK_name = _( "SilkS_Back" );
|
||||
static const wxChar * layer_SILKSCREEN_FRONT_name = _( "SilkS_Front" );
|
||||
static const wxChar * layer_SOLDERMASK_BACK_name = _( "Mask_Back" );
|
||||
static const wxChar * layer_SOLDERMASK_FRONT_name = _( "Mask_Front" );
|
||||
static const wxChar * layer_DRAW_name = _( "Drawings" );
|
||||
static const wxChar * layer_COMMENT_name = _( "Comments" );
|
||||
static const wxChar * layer_ECO1_name = _( "Eco1" );
|
||||
static const wxChar * layer_ECO2_name = _( "Eco2" );
|
||||
static const wxChar * layer_EDGE_name = _( "PCB_Edges" );
|
||||
|
||||
wxString BOARD::GetDefaultLayerName( int aLayerNumber, bool aTranslate )
|
||||
{
|
||||
const wxChar* txt;
|
||||
|
||||
|
@ -382,39 +419,49 @@ wxString BOARD::GetDefaultLayerName( int aLayerNumber )
|
|||
// Use a switch to explicitly show the mapping more clearly
|
||||
switch( aLayerNumber )
|
||||
{
|
||||
case LAYER_N_FRONT: txt = _( "Front" ); break;
|
||||
case LAYER_N_2: txt = _( "Inner2" ); break;
|
||||
case LAYER_N_3: txt = _( "Inner3" ); break;
|
||||
case LAYER_N_4: txt = _( "Inner4" ); break;
|
||||
case LAYER_N_5: txt = _( "Inner5" ); break;
|
||||
case LAYER_N_6: txt = _( "Inner6" ); break;
|
||||
case LAYER_N_7: txt = _( "Inner7" ); break;
|
||||
case LAYER_N_8: txt = _( "Inner8" ); break;
|
||||
case LAYER_N_9: txt = _( "Inner9" ); break;
|
||||
case LAYER_N_10: txt = _( "Inner10" ); break;
|
||||
case LAYER_N_11: txt = _( "Inner11" ); break;
|
||||
case LAYER_N_12: txt = _( "Inner12" ); break;
|
||||
case LAYER_N_13: txt = _( "Inner13" ); break;
|
||||
case LAYER_N_14: txt = _( "Inner14" ); break;
|
||||
case LAYER_N_15: txt = _( "Inner15" ); break;
|
||||
case LAYER_N_BACK: txt = _( "Back" ); break;
|
||||
case ADHESIVE_N_BACK: txt = _( "Adhes_Back" ); break;
|
||||
case ADHESIVE_N_FRONT: txt = _( "Adhes_Front" ); break;
|
||||
case SOLDERPASTE_N_BACK: txt = _( "SoldP_Back" ); break;
|
||||
case SOLDERPASTE_N_FRONT: txt = _( "SoldP_Front" ); break;
|
||||
case SILKSCREEN_N_BACK: txt = _( "SilkS_Back" ); break;
|
||||
case SILKSCREEN_N_FRONT: txt = _( "SilkS_Front" ); break;
|
||||
case SOLDERMASK_N_BACK: txt = _( "Mask_Back" ); break;
|
||||
case SOLDERMASK_N_FRONT: txt = _( "Mask_Front" ); break;
|
||||
case DRAW_N: txt = _( "Drawings" ); break;
|
||||
case COMMENT_N: txt = _( "Comments" ); break;
|
||||
case ECO1_N: txt = _( "Eco1" ); break;
|
||||
case ECO2_N: txt = _( "Eco2" ); break;
|
||||
case EDGE_N: txt = _( "PCB_Edges" ); break;
|
||||
default: txt = _( "BAD INDEX" ); break;
|
||||
case LAYER_N_FRONT: txt = layer_FRONT_name; break;
|
||||
case LAYER_N_2: txt = layer_INNER1_name; break;
|
||||
case LAYER_N_3: txt = layer_INNER2_name; break;
|
||||
case LAYER_N_4: txt = layer_INNER3_name; break;
|
||||
case LAYER_N_5: txt = layer_INNER4_name; break;
|
||||
case LAYER_N_6: txt = layer_INNER5_name; break;
|
||||
case LAYER_N_7: txt = layer_INNER6_name; break;
|
||||
case LAYER_N_8: txt = layer_INNER7_name; break;
|
||||
case LAYER_N_9: txt = layer_INNER8_name; break;
|
||||
case LAYER_N_10: txt = layer_INNER9_name; break;
|
||||
case LAYER_N_11: txt = layer_INNER10_name; break;
|
||||
case LAYER_N_12: txt = layer_INNER11_name; break;
|
||||
case LAYER_N_13: txt = layer_INNER12_name; break;
|
||||
case LAYER_N_14: txt = layer_INNER13_name; break;
|
||||
case LAYER_N_15: txt = layer_INNER14_name; break;
|
||||
case LAYER_N_BACK: txt = layer_BACK_name; break;
|
||||
case ADHESIVE_N_BACK: txt =layer_ADHESIVE_BACK_name; break;
|
||||
case ADHESIVE_N_FRONT: txt = layer_ADHESIVE_FRONT_name; break;
|
||||
case SOLDERPASTE_N_BACK: txt = layer_SOLDERPASTE_BACK_namet; break;
|
||||
case SOLDERPASTE_N_FRONT: txt = layer_SOLDERPASTE_FRONT_name; break;
|
||||
case SILKSCREEN_N_BACK: txt = layer_SILKSCREEN_BACK_name; break;
|
||||
case SILKSCREEN_N_FRONT: txt = layer_SILKSCREEN_FRONT_name; break;
|
||||
case SOLDERMASK_N_BACK: txt = layer_SOLDERMASK_BACK_name; break;
|
||||
case SOLDERMASK_N_FRONT: txt = layer_SOLDERMASK_FRONT_name; break;
|
||||
case DRAW_N: txt = layer_DRAW_name; break;
|
||||
case COMMENT_N: txt = layer_COMMENT_name; break;
|
||||
case ECO1_N: txt = layer_ECO1_name; break;
|
||||
case ECO2_N: txt = layer_ECO2_name; break;
|
||||
case EDGE_N: txt = layer_EDGE_name; break;
|
||||
default: txt = wxT( "BAD_INDEX" ); break;
|
||||
}
|
||||
|
||||
return wxString( txt );
|
||||
wxString name;
|
||||
if( aTranslate )
|
||||
{
|
||||
name = wxGetTranslation( txt );
|
||||
name.Trim( true );
|
||||
name.Trim( false );
|
||||
}
|
||||
else
|
||||
name = txt;
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1334,14 +1381,11 @@ NETINFO_ITEM* BOARD::FindNet( int aNetcode ) const
|
|||
NETINFO_ITEM* net = m_NetInfo.GetNetItem( aNetcode );
|
||||
|
||||
#if defined(DEBUG)
|
||||
if( net ) // item can be NULL if anetcode is not valid
|
||||
if( net && aNetcode != net->GetNet()) // item can be NULL if anetcode is not valid
|
||||
{
|
||||
if( aNetcode != net->GetNet() )
|
||||
{
|
||||
printf( "FindNet() anetcode %d != GetNet() %d (net: %s)\n",
|
||||
wxLogError( wxT( "FindNet() anetcode %d != GetNet() %d (net: %s)\n" ),
|
||||
aNetcode, net->GetNet(), TO_UTF8( net->GetNetname() ) );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return net;
|
||||
|
|
|
@ -303,10 +303,12 @@ public:
|
|||
* be different than the default if the user has renamed any copper layers.
|
||||
*
|
||||
* @param aLayerNumber is the layer number to fetch
|
||||
* @param aTranslate = true to return the translated version
|
||||
* = false to get the native version
|
||||
* @return wxString - containing the layer name or "BAD INDEX" if aLayerNumber
|
||||
* is not legal
|
||||
*/
|
||||
static wxString GetDefaultLayerName( int aLayerNumber );
|
||||
static wxString GetDefaultLayerName( int aLayerNumber, bool aTranslate );
|
||||
|
||||
/**
|
||||
* Function ReturnFlippedLayerNumber
|
||||
|
@ -619,10 +621,13 @@ public:
|
|||
* Function GetLayerName
|
||||
* returns the name of the layer given by aLayerIndex.
|
||||
*
|
||||
* @param aLayerIndex A layer index, like LAYER_N_BACK, etc.
|
||||
* @param aLayerIndex = A layer index, like LAYER_N_BACK, etc.
|
||||
* @param aTranslate = true to return the translated version (default)
|
||||
* = false to get the native English name
|
||||
* (Useful to build filenames from layer names)
|
||||
* @return wxString - the layer name.
|
||||
*/
|
||||
wxString GetLayerName( int aLayerIndex ) const;
|
||||
wxString GetLayerName( int aLayerIndex, bool aTranslate = true ) const;
|
||||
|
||||
/**
|
||||
* Function SetLayerName
|
||||
|
@ -1048,16 +1053,6 @@ public:
|
|||
*/
|
||||
ZONE_CONTAINER* InsertArea( int netcode, int iarea, int layer, int x, int y, int hatch );
|
||||
|
||||
/**
|
||||
* Function CompleteArea
|
||||
* complete copper area contour by adding a line from last to first corner
|
||||
* if there is only 1 or 2 corners, remove (delete) the area
|
||||
* @param area_to_complete = area to complete or remove
|
||||
* @param style = style of last corner
|
||||
* @return 1 if Ok, 0 if area removed
|
||||
*/
|
||||
int CompleteArea( ZONE_CONTAINER* area_to_complete, int style );
|
||||
|
||||
/**
|
||||
* Function TestAreaPolygon
|
||||
* Test an area for self-intersection.
|
||||
|
|
|
@ -112,7 +112,6 @@ void DRAWSEGMENT::Flip( const wxPoint& aCentre )
|
|||
SetLayer( BOARD::ReturnFlippedLayerNumber( GetLayer() ) );
|
||||
}
|
||||
|
||||
|
||||
const wxPoint DRAWSEGMENT::GetArcEnd() const
|
||||
{
|
||||
wxPoint endPoint; // start of arc
|
||||
|
@ -134,44 +133,22 @@ const wxPoint DRAWSEGMENT::GetArcEnd() const
|
|||
return endPoint; // after rotation, the end of the arc.
|
||||
}
|
||||
|
||||
|
||||
/* use GetArcStart() now
|
||||
const wxPoint DRAWSEGMENT::GetStart() const
|
||||
const double DRAWSEGMENT::GetArcAngleStart() const
|
||||
{
|
||||
switch( m_Shape )
|
||||
{
|
||||
case S_ARC:
|
||||
return m_End; // the start of the arc is held in field m_End, center point is in m_Start.
|
||||
// due to the Y axis orient atan2 needs - y value
|
||||
double angleStart = atan2( (double)(GetArcStart().y - GetCenter().y),
|
||||
(double)(GetArcStart().x - GetCenter().x) );
|
||||
// angleStart is in radians, convert it in 1/10 degrees
|
||||
angleStart = angleStart / M_PI * 1800.0;
|
||||
|
||||
case S_SEGMENT:
|
||||
default:
|
||||
return m_Start;
|
||||
// Normalize it to 0 ... 360 deg, to avoid discontinuity for angles near 180 deg
|
||||
// because 180 deg and -180 are very near angles when ampping betewwen -180 ... 180 deg.
|
||||
// and this is not easy to handle in calculations
|
||||
if( angleStart < 0 )
|
||||
angleStart += 3600.0;
|
||||
|
||||
return angleStart;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const wxPoint DRAWSEGMENT::GetEnd() const
|
||||
{
|
||||
wxPoint endPoint; // start of arc
|
||||
|
||||
switch( m_Shape )
|
||||
{
|
||||
case S_ARC:
|
||||
// rotate the starting point of the arc, given by m_End, through the
|
||||
// angle m_Angle to get the ending point of the arc.
|
||||
// m_Start is the arc centre
|
||||
endPoint = m_End; // m_End = start point of arc
|
||||
RotatePoint( &endPoint, m_Start, -m_Angle );
|
||||
return endPoint; // after rotation, the end of the arc.
|
||||
break;
|
||||
|
||||
case S_SEGMENT:
|
||||
default:
|
||||
return m_End;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void DRAWSEGMENT::SetAngle( double aAngle )
|
||||
{
|
||||
|
@ -450,14 +427,12 @@ EDA_RECT DRAWSEGMENT::GetBoundingBox() const
|
|||
|
||||
bool DRAWSEGMENT::HitTest( const wxPoint& aPosition )
|
||||
{
|
||||
/* Calculate coordinates to test relative to segment origin. */
|
||||
wxPoint relPos = aPosition - m_Start;
|
||||
|
||||
switch( m_Shape )
|
||||
{
|
||||
case S_CIRCLE:
|
||||
case S_ARC:
|
||||
{
|
||||
wxPoint relPos = aPosition - GetCenter();
|
||||
int radius = GetRadius();
|
||||
int dist = (int) hypot( (double) relPos.x, (double) relPos.y );
|
||||
|
||||
|
@ -466,19 +441,36 @@ bool DRAWSEGMENT::HitTest( const wxPoint& aPosition )
|
|||
if( m_Shape == S_CIRCLE )
|
||||
return true;
|
||||
|
||||
wxPoint startVec = wxPoint( m_End.x - m_Start.x, m_End.y - m_Start.y );
|
||||
wxPoint endVec = m_End - m_Start;
|
||||
RotatePoint( &endVec, -m_Angle );
|
||||
// For arcs, the test point angle must be >= arc angle start
|
||||
// and <= arc angle end
|
||||
// However angle values > 360 deg are not easy to handle
|
||||
// so we calculate the relative angle between arc start point and teast point
|
||||
// this relative arc should be < arc angle if arc angle > 0 (CW arc)
|
||||
// and > arc angle if arc angle < 0 (CCW arc)
|
||||
double arc_angle_start = GetArcAngleStart(); // Always 0.0 ... 360 deg, in 0.1 deg
|
||||
|
||||
// Check dot products
|
||||
if( (long long)relPos.x*startVec.x + (long long)relPos.y*startVec.y < 0 )
|
||||
return false;
|
||||
double arc_hittest = atan2( (double) relPos.y, (double) relPos.x );
|
||||
arc_hittest = arc_hittest / M_PI * 1800; // angles are in 1/10 deg
|
||||
|
||||
if( (long long)relPos.x*endVec.x + (long long)relPos.y*endVec.y < 0 )
|
||||
return false;
|
||||
// Calculate relative angle between the starting point of the arc, and the test point
|
||||
arc_hittest -= arc_angle_start;
|
||||
|
||||
// Normalise arc_hittest between 0 ... 360 deg
|
||||
NORMALIZE_ANGLE_POS( arc_hittest );
|
||||
|
||||
// Check angle: inside the arc angle when it is > 0
|
||||
// and outside the not drawn arc when it is < 0
|
||||
if( GetAngle() >= 0.0 )
|
||||
{
|
||||
if( arc_hittest <= GetAngle() )
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( arc_hittest >= (3600.0 + GetAngle()) )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -120,6 +120,12 @@ public:
|
|||
const wxPoint& GetArcStart() const { return m_End; }
|
||||
const wxPoint GetArcEnd() const;
|
||||
|
||||
/**
|
||||
* function GetArcAngleStart()
|
||||
* @return the angle of the stating point of this arc, between 0 and 3600 in 0.1 deg
|
||||
*/
|
||||
const double GetArcAngleStart() const;
|
||||
|
||||
/**
|
||||
* Function GetRadius
|
||||
* returns the radius of this item
|
||||
|
|
|
@ -102,8 +102,21 @@ wxString DRC_ITEM::GetErrorText() const
|
|||
case DRCE_NETCLASS_uVIADRILLSIZE:
|
||||
return wxString( _("NetClass uVia Drill < global limit"));
|
||||
|
||||
case DRCE_VIA_INSIDE_KEEPOUT:
|
||||
return wxString( _("Via inside a keepout area"));
|
||||
|
||||
case DRCE_TRACK_INSIDE_KEEPOUT:
|
||||
return wxString( _("Track inside a keepout area"));
|
||||
|
||||
case DRCE_PAD_INSIDE_KEEPOUT:
|
||||
return wxString( _("Pad inside a keepout area"));
|
||||
|
||||
default:
|
||||
return wxString( wxT("PROGRAM BUG, PLEASE LEAVE THE ROOM.") );
|
||||
{
|
||||
wxString msg;
|
||||
msg.Printf( wxT( "Unknown DRC error code %d" ), m_ErrorCode );
|
||||
return ( msg );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,9 +56,13 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* aBoard ) :
|
|||
m_IsFilled = false; // fill status : true when the zone is filled
|
||||
m_FillMode = 0; // How to fill areas: 0 = use filled polygons, != 0 fill with segments
|
||||
m_priority = 0;
|
||||
smoothedPoly = NULL;
|
||||
cornerSmoothingType = ZONE_SETTINGS::SMOOTHING_NONE;
|
||||
cornerRadius = 0;
|
||||
m_smoothedPoly = NULL;
|
||||
m_cornerSmoothingType = ZONE_SETTINGS::SMOOTHING_NONE;
|
||||
SetIsKeepout( false );
|
||||
SetDoNotAllowCopperPour( false ); // has meaning only if m_isKeepout == true
|
||||
SetDoNotAllowVias( true ); // has meaning only if m_isKeepout == true
|
||||
SetDoNotAllowTracks( true ); // has meaning only if m_isKeepout == true
|
||||
m_cornerRadius = 0;
|
||||
utility = 0; // flags used in polygon calculations
|
||||
utility2 = 0; // flags used in polygon calculations
|
||||
m_Poly = new CPolyLine(); // Outlines
|
||||
|
@ -87,8 +91,15 @@ ZONE_CONTAINER::ZONE_CONTAINER( const ZONE_CONTAINER& aZone ) :
|
|||
m_FilledPolysList = aZone.m_FilledPolysList;
|
||||
m_FillSegmList = aZone.m_FillSegmList;
|
||||
|
||||
cornerSmoothingType = aZone.cornerSmoothingType;
|
||||
cornerRadius = aZone.cornerRadius;
|
||||
m_isKeepout = aZone.m_isKeepout;
|
||||
m_doNotAllowCopperPour = aZone.m_doNotAllowCopperPour;
|
||||
m_doNotAllowVias = aZone.m_doNotAllowVias;
|
||||
m_doNotAllowTracks = aZone.m_doNotAllowTracks;
|
||||
|
||||
m_cornerSmoothingType = aZone.m_cornerSmoothingType;
|
||||
m_cornerRadius = aZone.m_cornerRadius;
|
||||
|
||||
|
||||
utility = aZone.utility;
|
||||
utility2 = aZone.utility;
|
||||
}
|
||||
|
@ -221,10 +232,8 @@ void ZONE_CONTAINER::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, int aDrawMode, const
|
|||
|
||||
for( unsigned ic = 0; ic < m_Poly->m_HatchLines.size(); ic++ )
|
||||
{
|
||||
seg_start.x = m_Poly->m_HatchLines[ic].xi + offset.x;
|
||||
seg_start.y = m_Poly->m_HatchLines[ic].yi + offset.y;
|
||||
seg_end.x = m_Poly->m_HatchLines[ic].xf + offset.x;
|
||||
seg_end.y = m_Poly->m_HatchLines[ic].yf + offset.y;
|
||||
seg_start = m_Poly->m_HatchLines[ic].m_Start + offset;
|
||||
seg_end = m_Poly->m_HatchLines[ic].m_End + offset;
|
||||
lines.push_back( seg_start );
|
||||
lines.push_back( seg_end );
|
||||
}
|
||||
|
|
|
@ -48,7 +48,6 @@ class PCB_EDIT_FRAME;
|
|||
class BOARD;
|
||||
class ZONE_CONTAINER;
|
||||
|
||||
|
||||
/**
|
||||
* Struct SEGMENT
|
||||
* is a simple container used when filling areas with segments
|
||||
|
@ -499,24 +498,24 @@ public:
|
|||
*/
|
||||
CPolyLine* GetSmoothedPoly() const
|
||||
{
|
||||
if( smoothedPoly )
|
||||
return smoothedPoly;
|
||||
if( m_smoothedPoly )
|
||||
return m_smoothedPoly;
|
||||
else
|
||||
return m_Poly;
|
||||
};
|
||||
|
||||
void SetCornerSmoothingType( int aType ) { cornerSmoothingType = aType; };
|
||||
void SetCornerSmoothingType( int aType ) { m_cornerSmoothingType = aType; };
|
||||
|
||||
int GetCornerSmoothingType() const { return cornerSmoothingType; };
|
||||
int GetCornerSmoothingType() const { return m_cornerSmoothingType; };
|
||||
|
||||
void SetCornerRadius( unsigned int aRadius )
|
||||
{
|
||||
cornerRadius = aRadius;
|
||||
if( cornerRadius > (unsigned int) Mils2iu( MAX_ZONE_CORNER_RADIUS_MILS ) )
|
||||
cornerRadius = Mils2iu( MAX_ZONE_CORNER_RADIUS_MILS );
|
||||
m_cornerRadius = aRadius;
|
||||
if( m_cornerRadius > (unsigned int) Mils2iu( MAX_ZONE_CORNER_RADIUS_MILS ) )
|
||||
m_cornerRadius = Mils2iu( MAX_ZONE_CORNER_RADIUS_MILS );
|
||||
};
|
||||
|
||||
unsigned int GetCornerRadius() const { return cornerRadius; };
|
||||
unsigned int GetCornerRadius() const { return m_cornerRadius; };
|
||||
|
||||
void AddPolygon( std::vector< wxPoint >& aPolygon );
|
||||
|
||||
|
@ -536,6 +535,20 @@ public:
|
|||
|
||||
virtual EDA_ITEM* Clone() const;
|
||||
|
||||
/**
|
||||
* Accessors to parameters used in Keepout zones:
|
||||
*/
|
||||
bool GetIsKeepout() const { return m_isKeepout; }
|
||||
bool GetDoNotAllowCopperPour() const { return m_doNotAllowCopperPour; }
|
||||
bool GetDoNotAllowVias() const { return m_doNotAllowVias; }
|
||||
bool GetDoNotAllowTracks() const { return m_doNotAllowTracks; }
|
||||
|
||||
void SetIsKeepout( bool aEnable ) { m_isKeepout = aEnable; }
|
||||
void SetDoNotAllowCopperPour( bool aEnable ) { m_doNotAllowCopperPour = aEnable; }
|
||||
void SetDoNotAllowVias( bool aEnable ) { m_doNotAllowVias = aEnable; }
|
||||
void SetDoNotAllowTracks( bool aEnable ) { m_doNotAllowTracks = aEnable; }
|
||||
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
|
@ -574,13 +587,28 @@ public:
|
|||
|
||||
private:
|
||||
wxString m_Netname; // Net Name
|
||||
CPolyLine* smoothedPoly; // Corner-smoothed version of m_Poly
|
||||
int cornerSmoothingType;
|
||||
unsigned int cornerRadius;
|
||||
// Priority: when a zone outline is inside and other zone, if its priority is higher
|
||||
// the other zone priority, it will be created inside.
|
||||
// if priorities are equal, a DRC error is set
|
||||
CPolyLine* m_smoothedPoly; // Corner-smoothed version of m_Poly
|
||||
int m_cornerSmoothingType;
|
||||
unsigned int m_cornerRadius;
|
||||
|
||||
/* Priority: when a zone outline is inside and other zone, if its priority is higher
|
||||
* the other zone priority, it will be created inside.
|
||||
* if priorities are equal, a DRC error is set
|
||||
*/
|
||||
unsigned m_priority;
|
||||
|
||||
/* A zone outline can be a keepout zone.
|
||||
* It will be never filled, and DRC should test for pads, tracks and vias
|
||||
*/
|
||||
bool m_isKeepout;
|
||||
|
||||
/* For keepout zones only:
|
||||
* what is not allowed inside the keepout ( pads, tracks and vias )
|
||||
*/
|
||||
bool m_doNotAllowCopperPour;
|
||||
bool m_doNotAllowVias;
|
||||
bool m_doNotAllowTracks;
|
||||
|
||||
ZoneConnection m_PadConnection;
|
||||
|
||||
/* set of filled polygons used to draw a zone as a filled area.
|
||||
|
|
|
@ -39,8 +39,10 @@ ZONE_SETTINGS::ZONE_SETTINGS()
|
|||
{
|
||||
m_ZonePriority = 0;
|
||||
m_FillMode = 0; // Mode for filling zone : 1 use segments, 0 use polygons
|
||||
m_ZoneClearance = 200; // Clearance value
|
||||
m_ZoneMinThickness = 100; // Min thickness value in filled areas
|
||||
// Clearance value
|
||||
m_ZoneClearance = Mils2iu( ZONE_CLEARANCE_MIL );
|
||||
// Min thickness value in filled areas (this is the minimum width of copper to fill solid areas) :
|
||||
m_ZoneMinThickness = Mils2iu( ZONE_THICKNESS_MIL );
|
||||
m_NetcodeSelection = 0; // Net code selection for the current zone
|
||||
m_CurrentZone_Layer = 0; // Layer used to create the current zone
|
||||
m_Zone_HatchingStyle = CPolyLine::DIAGONAL_EDGE; // Option to show the zone area (outlines only, short hatches or full hatches
|
||||
|
@ -49,15 +51,22 @@ ZONE_SETTINGS::ZONE_SETTINGS()
|
|||
// ARC_APPROX_SEGMENTS_COUNT_LOW_DEF
|
||||
// or ARC_APPROX_SEGMENTS_COUNT_HIGHT_DEF segments
|
||||
|
||||
m_ThermalReliefGap = 200; // tickness of the gap in thermal reliefs
|
||||
m_ThermalReliefCopperBridge = 200; // tickness of the copper bridge in thermal reliefs
|
||||
// tickness of the gap in thermal reliefs:
|
||||
m_ThermalReliefGap = Mils2iu( ZONE_THERMAL_RELIEF_GAP_MIL );
|
||||
// tickness of the copper bridge in thermal reliefs:
|
||||
m_ThermalReliefCopperBridge = Mils2iu( ZONE_THERMAL_RELIEF_COPPER_WIDTH_MIL );
|
||||
|
||||
m_PadConnection = THERMAL_PAD; // How pads are covered by copper in zone
|
||||
|
||||
m_Zone_45_Only = false;
|
||||
|
||||
cornerSmoothingType = SMOOTHING_NONE;
|
||||
cornerRadius = 0;
|
||||
m_cornerSmoothingType = SMOOTHING_NONE;
|
||||
m_cornerRadius = 0;
|
||||
|
||||
SetIsKeepout( false );
|
||||
SetDoNotAllowCopperPour( false );
|
||||
SetDoNotAllowVias( true );
|
||||
SetDoNotAllowTracks( true );
|
||||
}
|
||||
|
||||
|
||||
|
@ -74,8 +83,12 @@ ZONE_SETTINGS& ZONE_SETTINGS::operator << ( const ZONE_CONTAINER& aSource )
|
|||
m_ThermalReliefGap = aSource.m_ThermalReliefGap;
|
||||
m_ThermalReliefCopperBridge = aSource.m_ThermalReliefCopperBridge;
|
||||
m_PadConnection = aSource.GetPadConnection();
|
||||
cornerSmoothingType = aSource.GetCornerSmoothingType();
|
||||
cornerRadius = aSource.GetCornerRadius();
|
||||
m_cornerSmoothingType = aSource.GetCornerSmoothingType();
|
||||
m_cornerRadius = aSource.GetCornerRadius();
|
||||
m_isKeepout = aSource.GetIsKeepout();
|
||||
m_keepoutDoNotAllowCopperPour = aSource.GetDoNotAllowCopperPour();
|
||||
m_keepoutDoNotAllowVias = aSource.GetDoNotAllowVias();
|
||||
m_keepoutDoNotAllowTracks = aSource.GetDoNotAllowTracks();
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
@ -91,8 +104,12 @@ void ZONE_SETTINGS::ExportSetting( ZONE_CONTAINER& aTarget, bool aFullExport ) c
|
|||
aTarget.m_ThermalReliefGap = m_ThermalReliefGap;
|
||||
aTarget.m_ThermalReliefCopperBridge = m_ThermalReliefCopperBridge;
|
||||
aTarget.SetPadConnection( m_PadConnection );
|
||||
aTarget.SetCornerSmoothingType( cornerSmoothingType );
|
||||
aTarget.SetCornerRadius( cornerRadius );
|
||||
aTarget.SetCornerSmoothingType( m_cornerSmoothingType );
|
||||
aTarget.SetCornerRadius( m_cornerRadius );
|
||||
aTarget.SetIsKeepout( GetIsKeepout() );
|
||||
aTarget.SetDoNotAllowCopperPour( GetDoNotAllowCopperPour() );
|
||||
aTarget.SetDoNotAllowVias( GetDoNotAllowVias() );
|
||||
aTarget.SetDoNotAllowTracks( GetDoNotAllowTracks() );
|
||||
|
||||
if( aFullExport )
|
||||
{
|
||||
|
|
|
@ -18,6 +18,8 @@ class ZONE_CONTAINER;
|
|||
/**
|
||||
* Class ZONE_SETTINGS
|
||||
* handles zones parameters.
|
||||
* Because a zone can be on copper or non copper layers, and can be also
|
||||
* a keepout area, some parameters are irrelevant depending on the type of zone
|
||||
*/
|
||||
class ZONE_SETTINGS
|
||||
{
|
||||
|
@ -51,10 +53,23 @@ public:
|
|||
bool m_Zone_45_Only;
|
||||
|
||||
private:
|
||||
int cornerSmoothingType; ///< Corner smoothing type
|
||||
unsigned int cornerRadius; ///< Corner chamfer distance / fillet radius
|
||||
int m_cornerSmoothingType; ///< Corner smoothing type
|
||||
unsigned int m_cornerRadius; ///< Corner chamfer distance / fillet radius
|
||||
ZoneConnection m_PadConnection;
|
||||
|
||||
/* A zone outline can be a keepout zone.
|
||||
* It will be never filled, and DRC should test for pads, tracks and vias
|
||||
*/
|
||||
bool m_isKeepout;
|
||||
|
||||
/* For keepout zones only:
|
||||
* what is not allowed inside the keepout ( pads, tracks and vias )
|
||||
*/
|
||||
bool m_keepoutDoNotAllowCopperPour;
|
||||
bool m_keepoutDoNotAllowVias;
|
||||
bool m_keepoutDoNotAllowTracks;
|
||||
|
||||
|
||||
public:
|
||||
ZONE_SETTINGS();
|
||||
|
||||
|
@ -77,25 +92,37 @@ public:
|
|||
*/
|
||||
void ExportSetting( ZONE_CONTAINER& aTarget, bool aFullExport = true ) const;
|
||||
|
||||
void SetCornerSmoothingType( int aType) { cornerSmoothingType = aType; }
|
||||
void SetCornerSmoothingType( int aType) { m_cornerSmoothingType = aType; }
|
||||
|
||||
int GetCornerSmoothingType() const { return cornerSmoothingType; }
|
||||
int GetCornerSmoothingType() const { return m_cornerSmoothingType; }
|
||||
|
||||
void SetCornerRadius( int aRadius )
|
||||
{
|
||||
if( aRadius > Mils2iu( MAX_ZONE_CORNER_RADIUS_MILS ) )
|
||||
cornerRadius = Mils2iu( MAX_ZONE_CORNER_RADIUS_MILS );
|
||||
m_cornerRadius = Mils2iu( MAX_ZONE_CORNER_RADIUS_MILS );
|
||||
else if( aRadius < 0 )
|
||||
cornerRadius = 0;
|
||||
m_cornerRadius = 0;
|
||||
else
|
||||
cornerRadius = aRadius;
|
||||
m_cornerRadius = aRadius;
|
||||
};
|
||||
|
||||
unsigned int GetCornerRadius() const { return cornerRadius; }
|
||||
unsigned int GetCornerRadius() const { return m_cornerRadius; }
|
||||
|
||||
ZoneConnection GetPadConnection() const { return m_PadConnection; }
|
||||
void SetPadConnection( ZoneConnection aPadConnection ) { m_PadConnection = aPadConnection; }
|
||||
|
||||
/**
|
||||
* Accessors to parameters used in Keepout zones:
|
||||
*/
|
||||
const bool GetIsKeepout() const { return m_isKeepout; }
|
||||
const bool GetDoNotAllowCopperPour() const { return m_keepoutDoNotAllowCopperPour; }
|
||||
const bool GetDoNotAllowVias() const { return m_keepoutDoNotAllowVias; }
|
||||
const bool GetDoNotAllowTracks() const { return m_keepoutDoNotAllowTracks; }
|
||||
|
||||
void SetIsKeepout( bool aEnable ) { m_isKeepout = aEnable; }
|
||||
void SetDoNotAllowCopperPour( bool aEnable ) { m_keepoutDoNotAllowCopperPour = aEnable; }
|
||||
void SetDoNotAllowVias( bool aEnable ) { m_keepoutDoNotAllowVias = aEnable; }
|
||||
void SetDoNotAllowTracks( bool aEnable ) { m_keepoutDoNotAllowTracks = aEnable; }
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -133,6 +133,7 @@ BOARD_ITEM* PCB_BASE_FRAME::PcbGeneralLocateAndDisplay( int aHotKeyCode )
|
|||
break;
|
||||
|
||||
case ID_PCB_ZONES_BUTT:
|
||||
case ID_PCB_KEEPOUT_AREA_BUTT:
|
||||
scanList = GENERAL_COLLECTOR::Zones;
|
||||
break;
|
||||
|
||||
|
|
|
@ -1,25 +1,47 @@
|
|||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: dialog_copper_zones.cpp
|
||||
// Author: jean-pierre Charras
|
||||
// Created: 09/oct/2008
|
||||
// Licence: GNU License
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
/**
|
||||
* @file dialog_copper_zones.cpp
|
||||
*/
|
||||
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
|
||||
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <wx/imaglist.h>
|
||||
#include <fctsys.h>
|
||||
#include <appl_wxstruct.h>
|
||||
#include <confirm.h>
|
||||
#include <PolyLine.h>
|
||||
#include <pcbnew.h>
|
||||
#include <wxPcbStruct.h>
|
||||
#include <trigo.h>
|
||||
#include <zones.h>
|
||||
#include <base_units.h>
|
||||
|
||||
#include <class_zone_settings.h>
|
||||
#include <class_board.h>
|
||||
#include <dialog_copper_zones_base.h>
|
||||
|
||||
#include <wx/imaglist.h> // needed for wx/listctrl.h, in wxGTK 2.8.12
|
||||
#include <wx/listctrl.h>
|
||||
|
||||
|
||||
|
@ -54,8 +76,6 @@ private:
|
|||
static wxString m_netNameShowFilter; ///< the filter to show nets (default * "*").
|
||||
///< static to keep this pattern for an entire pcbnew session
|
||||
|
||||
wxListView* m_LayerSelectionCtrl;
|
||||
|
||||
/**
|
||||
* Function initDialog
|
||||
* fills in the dialog controls using the current settings.
|
||||
|
@ -133,16 +153,6 @@ DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE( PCB_BASE_FRAME* aParent, ZONE_SETTINGS*
|
|||
|
||||
SetReturnCode( ZONE_ABORT ); // Will be changed on buttons click
|
||||
|
||||
m_LayerSelectionCtrl = new wxListView( this, wxID_ANY,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
wxLC_NO_HEADER | wxLC_REPORT
|
||||
| wxLC_SINGLE_SEL | wxRAISED_BORDER );
|
||||
wxListItem col0;
|
||||
col0.SetId( 0 );
|
||||
m_LayerSelectionCtrl->InsertColumn( 0, col0 );
|
||||
m_layerSizer->Add( m_LayerSelectionCtrl, 1,
|
||||
wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
|
||||
|
||||
// Fix static text widget minimum width to a suitable value so that
|
||||
// resizing the dialog is not necessary when changing the corner smoothing type.
|
||||
// Depends on the default text in the widget.
|
||||
|
@ -151,8 +161,6 @@ DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE( PCB_BASE_FRAME* aParent, ZONE_SETTINGS*
|
|||
initDialog();
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
|
||||
Center();
|
||||
}
|
||||
|
||||
|
||||
|
@ -177,10 +185,14 @@ void DIALOG_COPPER_ZONE::initDialog()
|
|||
|
||||
switch( m_settings.GetPadConnection() )
|
||||
{
|
||||
case PAD_NOT_IN_ZONE: // Pads are not covered
|
||||
case THT_THERMAL: // Thermals only for THT pads
|
||||
m_PadInZoneOpt->SetSelection( 2 );
|
||||
break;
|
||||
|
||||
case PAD_NOT_IN_ZONE: // Pads are not covered
|
||||
m_PadInZoneOpt->SetSelection( 3 );
|
||||
break;
|
||||
|
||||
default:
|
||||
case THERMAL_PAD: // Use thermal relief for pads
|
||||
m_PadInZoneOpt->SetSelection( 1 );
|
||||
|
@ -191,7 +203,9 @@ void DIALOG_COPPER_ZONE::initDialog()
|
|||
break;
|
||||
}
|
||||
|
||||
if( m_settings.GetPadConnection() != THERMAL_PAD )
|
||||
// Antipad and spokes are significant only for thermals
|
||||
if( m_settings.GetPadConnection() != THERMAL_PAD &&
|
||||
m_settings.GetPadConnection() != THT_THERMAL )
|
||||
{
|
||||
m_AntipadSizeValue->Enable( false );
|
||||
m_CopperWidthValue->Enable( false );
|
||||
|
@ -231,6 +245,10 @@ void DIALOG_COPPER_ZONE::initDialog()
|
|||
m_ArcApproximationOpt->SetSelection(
|
||||
m_settings.m_ArcToSegmentsCount == ARC_APPROX_SEGMENTS_COUNT_HIGHT_DEF ? 1 : 0 );
|
||||
|
||||
// Create one column in m_LayerSelectionCtrl
|
||||
wxListItem col0;
|
||||
col0.SetId( 0 );
|
||||
m_LayerSelectionCtrl->InsertColumn( 0, col0 );
|
||||
// Build copper layer list and append to layer widget
|
||||
int layerCount = board->GetCopperLayerCount();
|
||||
int layerNumber, itemIndex, layerColor;
|
||||
|
@ -319,11 +337,16 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
|
|||
{
|
||||
switch( m_PadInZoneOpt->GetSelection() )
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
// Pads are not covered
|
||||
m_settings.SetPadConnection( PAD_NOT_IN_ZONE );
|
||||
break;
|
||||
|
||||
case 2:
|
||||
// Use thermal relief for THT pads
|
||||
m_settings.SetPadConnection( THT_THERMAL );
|
||||
break;
|
||||
|
||||
case 1:
|
||||
// Use thermal relief for pads
|
||||
m_settings.SetPadConnection( THERMAL_PAD );
|
||||
|
@ -370,20 +393,25 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
|
|||
|
||||
// Test if this is a reasonable value for this parameter
|
||||
// A too large value can hang Pcbnew
|
||||
#define CLEARANCE_MAX_VALUE 100*IU_PER_MILS
|
||||
#define CLEARANCE_MAX_VALUE ZONE_CLEARANCE_MAX_VALUE_MIL*IU_PER_MILS
|
||||
if( m_settings.m_ZoneClearance > CLEARANCE_MAX_VALUE )
|
||||
{
|
||||
DisplayError( this, _( "Clearance must be smaller than 0.5\" / 12.7 mm." ) );
|
||||
wxString msg;
|
||||
msg.Printf( _( "Clearance must be smaller than %f\" / %f mm." ),
|
||||
ZONE_CLEARANCE_MAX_VALUE_MIL / 1000.0, ZONE_CLEARANCE_MAX_VALUE_MIL * 0.0254 );
|
||||
DisplayError( this, msg );
|
||||
return false;
|
||||
}
|
||||
|
||||
txtvalue = m_ZoneMinThicknessCtrl->GetValue();
|
||||
m_settings.m_ZoneMinThickness = ReturnValueFromString( g_UserUnit, txtvalue );
|
||||
|
||||
if( m_settings.m_ZoneMinThickness < (1*IU_PER_MILS) )
|
||||
if( m_settings.m_ZoneMinThickness < (ZONE_THICKNESS_MIN_VALUE_MIL*IU_PER_MILS) )
|
||||
{
|
||||
DisplayError( this,
|
||||
_( "Minimum width must be larger than 0.001\" / 0.0254 mm." ) );
|
||||
wxString msg;
|
||||
msg.Printf( _( "Minimum width must be larger than %f\" / %f mm." ),
|
||||
ZONE_THICKNESS_MIN_VALUE_MIL / 1000.0, ZONE_THICKNESS_MIN_VALUE_MIL * 0.0254 );
|
||||
DisplayError( this, msg );
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -402,9 +430,20 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
|
|||
|
||||
m_settings.m_ThermalReliefCopperBridge = ReturnValueFromTextCtrl( *m_CopperWidthValue );
|
||||
|
||||
m_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, (long) m_settings.m_ThermalReliefGap );
|
||||
if( m_Config )
|
||||
{
|
||||
m_Config->Write( ZONE_CLEARANCE_WIDTH_STRING_KEY,
|
||||
(double) m_settings.m_ZoneClearance / IU_PER_MILS );
|
||||
|
||||
m_Config->Write( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY, (long) m_settings.m_ThermalReliefCopperBridge );
|
||||
m_Config->Write( ZONE_MIN_THICKNESS_WIDTH_STRING_KEY,
|
||||
(double) m_settings.m_ZoneMinThickness / IU_PER_MILS );
|
||||
|
||||
m_Config->Write( ZONE_THERMAL_RELIEF_GAP_STRING_KEY,
|
||||
(double) m_settings.m_ThermalReliefGap / IU_PER_MILS );
|
||||
|
||||
m_Config->Write( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY,
|
||||
(double) m_settings.m_ThermalReliefCopperBridge / IU_PER_MILS );
|
||||
}
|
||||
|
||||
if( m_settings.m_ThermalReliefCopperBridge <= m_settings.m_ZoneMinThickness )
|
||||
{
|
||||
|
@ -528,6 +567,7 @@ void DIALOG_COPPER_ZONE::OnPadsInZoneClick( wxCommandEvent& event )
|
|||
m_CopperWidthValue->Enable( false );
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case 1:
|
||||
m_AntipadSizeValue->Enable( true );
|
||||
m_CopperWidthValue->Enable( true );
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||
// C++ code generated with wxFormBuilder (version Mar 17 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -32,12 +32,16 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
|||
wxBoxSizer* m_OptionsBoxSizer;
|
||||
m_OptionsBoxSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer* m_layerSizer;
|
||||
m_layerSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticText17 = new wxStaticText( this, wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText17->Wrap( -1 );
|
||||
m_layerSizer->Add( m_staticText17, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_LayerSelectionCtrl = new wxListView( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ALIGN_LEFT|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_SMALL_ICON );
|
||||
m_layerSizer->Add( m_LayerSelectionCtrl, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_OptionsBoxSizer->Add( m_layerSizer, 1, wxEXPAND, 5 );
|
||||
|
||||
|
@ -128,7 +132,7 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
|||
|
||||
m_cornerSmoothingTitle = new wxStaticText( this, wxID_ANY, _("Chamfer distance (mm):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cornerSmoothingTitle->Wrap( -1 );
|
||||
bSizer9->Add( m_cornerSmoothingTitle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
bSizer9->Add( m_cornerSmoothingTitle, 0, wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_cornerSmoothingCtrl = new wxTextCtrl( this, ID_M_CORNERSMOOTHINGCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizer9->Add( m_cornerSmoothingCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
@ -143,7 +147,7 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
|||
m_staticText13->Wrap( -1 );
|
||||
m_LeftBox->Add( m_staticText13, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
wxString m_PadInZoneOptChoices[] = { _("Solid"), _("Thermal relief"), _("None") };
|
||||
wxString m_PadInZoneOptChoices[] = { _("Solid"), _("Thermal relief"), _("THT thermal"), _("None") };
|
||||
int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
|
||||
m_PadInZoneOpt = new wxChoice( this, ID_M_PADINZONEOPT, wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 0 );
|
||||
m_PadInZoneOpt->SetSelection( 0 );
|
||||
|
@ -183,7 +187,7 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
|||
m_staticText171->Wrap( -1 );
|
||||
m_staticText171->SetToolTip( _("On each copper layer, zones are filled by priority order.\nSo when a zone is inside an other zone:\n* If its priority is highter: its outlines are removed from the other layer.\n* If its priority is equal: a DRC error is set.") );
|
||||
|
||||
m_MiddleBox->Add( m_staticText171, 0, wxRIGHT|wxLEFT, 5 );
|
||||
m_MiddleBox->Add( m_staticText171, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_PriorityLevelCtrl = new wxSpinCtrl( this, ID_M_PRIORITYLEVELCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 0 );
|
||||
m_MiddleBox->Add( m_PriorityLevelCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
@ -238,7 +242,7 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
|||
m_ExportableSetupSizer->Add( bSizer81, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_MainBoxSizer->Add( m_ExportableSetupSizer, 1, wxALL|wxEXPAND, 5 );
|
||||
m_MainBoxSizer->Add( m_ExportableSetupSizer, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizer10;
|
||||
bSizer10 = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
|
|
@ -25,28 +25,62 @@
|
|||
<property name="use_enum">1</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Dialog" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center"></property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="event_handler">impl_virtual</property>
|
||||
<property name="extra_style"></property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">ID_DIALOG_COPPER_ZONE_BASE</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">DIALOG_COPPER_ZONE_BASE</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">550,500</property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size">567,500</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||
<property name="title">Zone Properties</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -108,7 +142,7 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">m_layerSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
|
||||
|
@ -163,6 +197,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -192,6 +230,111 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxListCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_LayerSelectionCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxLC_ALIGN_LEFT|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_SMALL_ICON</property>
|
||||
<property name="subclass">wxListView; </property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnListBeginDrag"></event>
|
||||
<event name="OnListBeginLabelEdit"></event>
|
||||
<event name="OnListBeginRDrag"></event>
|
||||
<event name="OnListCacheHint"></event>
|
||||
<event name="OnListColBeginDrag"></event>
|
||||
<event name="OnListColClick"></event>
|
||||
<event name="OnListColDragging"></event>
|
||||
<event name="OnListColEndDrag"></event>
|
||||
<event name="OnListColRightClick"></event>
|
||||
<event name="OnListDeleteAllItems"></event>
|
||||
<event name="OnListDeleteItem"></event>
|
||||
<event name="OnListEndLabelEdit"></event>
|
||||
<event name="OnListInsertItem"></event>
|
||||
<event name="OnListItemActivated"></event>
|
||||
<event name="OnListItemDeselected"></event>
|
||||
<event name="OnListItemFocused"></event>
|
||||
<event name="OnListItemMiddleClick"></event>
|
||||
<event name="OnListItemRightClick"></event>
|
||||
<event name="OnListItemSelected"></event>
|
||||
<event name="OnListKeyDown"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
|
@ -257,6 +400,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -442,6 +589,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -613,6 +764,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -787,6 +942,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -1002,7 +1161,7 @@
|
|||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Settings</property>
|
||||
|
@ -1074,6 +1233,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -1248,6 +1411,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">Minimun thickness of filled areas.</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -1422,6 +1589,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -1541,7 +1712,7 @@
|
|||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxLEFT|wxRIGHT|wxTOP</property>
|
||||
<property name="flag">wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
|
@ -1593,6 +1764,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -1778,6 +1953,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -1825,7 +2004,7 @@
|
|||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"Solid" "Thermal relief" "None"</property>
|
||||
<property name="choices">"Solid" "Thermal relief" "THT thermal" "None"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
|
@ -1961,6 +2140,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -2135,6 +2318,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -2270,7 +2457,7 @@
|
|||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
|
@ -2322,6 +2509,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">On each copper layer, zones are filled by priority order.
So when a zone is inside an other zone:
* If its priority is highter: its outlines are removed from the other layer.
* If its priority is equal: a DRC error is set.</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -2407,6 +2598,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
|
@ -2492,6 +2687,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -2663,6 +2862,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -2845,6 +3048,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
@ -3016,6 +3223,10 @@
|
|||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||
// C++ code generated with wxFormBuilder (version Mar 17 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -18,6 +18,7 @@
|
|||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/listctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/listbox.h>
|
||||
#include <wx/choice.h>
|
||||
|
@ -71,8 +72,8 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
|
|||
};
|
||||
|
||||
wxBoxSizer* m_MainBoxSizer;
|
||||
wxBoxSizer* m_layerSizer;
|
||||
wxStaticText* m_staticText17;
|
||||
wxListView* m_LayerSelectionCtrl;
|
||||
wxStaticText* m_staticText2;
|
||||
wxListBox* m_ListNetNameSelection;
|
||||
wxStaticText* m_staticText16;
|
||||
|
@ -124,7 +125,7 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
|
|||
|
||||
public:
|
||||
|
||||
DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id = ID_DIALOG_COPPER_ZONE_BASE, const wxString& title = _("Zone Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 550,500 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id = ID_DIALOG_COPPER_ZONE_BASE, const wxString& title = _("Zone Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 567,500 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_COPPER_ZONE_BASE();
|
||||
|
||||
};
|
||||
|
|
|
@ -165,6 +165,7 @@ void DIALOG_DRC_CONTROL::OnStartdrcClick( wxCommandEvent& event )
|
|||
m_tester->SetSettings( true, // Pad to pad DRC test enabled
|
||||
true, // unconnected pdas DRC test enabled
|
||||
true, // DRC test for zones enabled
|
||||
true, // DRC test for keepout areas enabled
|
||||
reportName, m_CreateRptCtrl->IsChecked() );
|
||||
|
||||
DelDRCMarkers();
|
||||
|
@ -243,6 +244,7 @@ void DIALOG_DRC_CONTROL::OnListUnconnectedClick( wxCommandEvent& event )
|
|||
m_tester->SetSettings( true, // Pad to pad DRC test enabled
|
||||
true, // unconnected pdas DRC test enabled
|
||||
true, // DRC test for zones enabled
|
||||
true, // DRC test for keepout areas enabled
|
||||
reportName, m_CreateRptCtrl->IsChecked() );
|
||||
|
||||
DelDRCMarkers();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Aug 24 2011)
|
||||
// C++ code generated with wxFormBuilder (version Apr 10 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -32,6 +32,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_button4 = new wxButton( m_PanelProperties, wxID_ANY, _("Edit"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
|
||||
sbSizerRef->Add( m_button4, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
|
||||
bSizer13->Add( sbSizerRef, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizerValue;
|
||||
|
@ -43,6 +44,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_button5 = new wxButton( m_PanelProperties, wxID_ANY, _("Edit"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );
|
||||
sbSizerValue->Add( m_button5, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
|
||||
bSizer13->Add( sbSizerValue, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxString m_LayerCtrlChoices[] = { _("Top"), _("Bottom") };
|
||||
|
@ -67,6 +69,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_OrientValue = new wxTextCtrl( m_PanelProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbSizerOrientation->Add( m_OrientValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
|
||||
bSizer13->Add( sbSizerOrientation, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizerPosition;
|
||||
|
@ -75,7 +78,6 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
wxFlexGridSizer* fgSizer2;
|
||||
fgSizer2 = new wxFlexGridSizer( 2, 2, 0, 0 );
|
||||
fgSizer2->AddGrowableCol( 1 );
|
||||
fgSizer2->AddGrowableRow( 2 );
|
||||
fgSizer2->SetFlexibleDirection( wxHORIZONTAL );
|
||||
fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
@ -93,10 +95,13 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_ModPositionY = new wxTextCtrl( m_PanelProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer2->Add( m_ModPositionY, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
sbSizerPosition->Add( fgSizer2, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizer13->Add( sbSizerPosition, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_PanelPropertiesBoxSizer->Add( bSizer13, 1, wxEXPAND, 5 );
|
||||
|
||||
m_PropRightSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
@ -122,6 +127,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_AutoPlaceCtrl->SetSelection( 0 );
|
||||
bSizer12->Add( m_AutoPlaceCtrl, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_PropRightSizer->Add( bSizer12, 1, wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizerAutoplace;
|
||||
|
@ -137,6 +143,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_CostRot90Ctrl = new wxSlider( m_PanelProperties, wxID_ANY, 0, 0, 10, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_LABELS );
|
||||
bSizerRotOpt->Add( m_CostRot90Ctrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
sbSizerAutoplace->Add( bSizerRotOpt, 1, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizerMoveOpt;
|
||||
|
@ -149,8 +156,10 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_CostRot180Ctrl = new wxSlider( m_PanelProperties, wxID_ANY, 0, 0, 10, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_LABELS );
|
||||
bSizerMoveOpt->Add( m_CostRot180Ctrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
sbSizerAutoplace->Add( bSizerMoveOpt, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_PropRightSizer->Add( sbSizerAutoplace, 1, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizerLocalProperties;
|
||||
|
@ -172,6 +181,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_ZoneConnectionChoice->SetSelection( 0 );
|
||||
bSizer10->Add( m_ZoneConnectionChoice, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizer11->Add( bSizer10, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||
|
||||
m_staticTextInfo = new wxStaticText( m_PanelProperties, wxID_ANY, _("Set clearances to 0 to use global values"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
|
@ -180,10 +190,12 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
|
||||
bSizer11->Add( m_staticTextInfo, 0, wxALIGN_CENTER_HORIZONTAL|wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
sbSizerLocalProperties->Add( bSizer11, 0, 0, 5 );
|
||||
|
||||
wxFlexGridSizer* fgSizerClearances;
|
||||
fgSizerClearances = new wxFlexGridSizer( 5, 3, 0, 0 );
|
||||
fgSizerClearances->AddGrowableCol( 1 );
|
||||
fgSizerClearances->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerClearances->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
|
@ -194,20 +206,20 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
fgSizerClearances->Add( m_staticTextNetClearance, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||
|
||||
m_NetClearanceValueCtrl = new wxTextCtrl( m_PanelProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerClearances->Add( m_NetClearanceValueCtrl, 0, wxALL|wxEXPAND, 5 );
|
||||
fgSizerClearances->Add( m_NetClearanceValueCtrl, 1, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_NetClearanceUnits = new wxStaticText( m_PanelProperties, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_NetClearanceUnits->Wrap( -1 );
|
||||
fgSizerClearances->Add( m_NetClearanceUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticline1 = new wxStaticLine( m_PanelProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
fgSizerClearances->Add( m_staticline1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
fgSizerClearances->Add( m_staticline1, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_staticline2 = new wxStaticLine( m_PanelProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
fgSizerClearances->Add( m_staticline2, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
fgSizerClearances->Add( m_staticline2, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_staticline3 = new wxStaticLine( m_PanelProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
fgSizerClearances->Add( m_staticline3, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
fgSizerClearances->Add( m_staticline3, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_MaskClearanceTitle = new wxStaticText( m_PanelProperties, wxID_ANY, _("Solder mask clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_MaskClearanceTitle->Wrap( -1 );
|
||||
|
@ -216,7 +228,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
fgSizerClearances->Add( m_MaskClearanceTitle, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SolderMaskMarginCtrl = new wxTextCtrl( m_PanelProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerClearances->Add( m_SolderMaskMarginCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
|
||||
fgSizerClearances->Add( m_SolderMaskMarginCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
|
||||
|
||||
m_SolderMaskMarginUnits = new wxStaticText( m_PanelProperties, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SolderMaskMarginUnits->Wrap( -1 );
|
||||
|
@ -229,7 +241,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
fgSizerClearances->Add( m_staticTextSolderPaste, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_SolderPasteMarginCtrl = new wxTextCtrl( m_PanelProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerClearances->Add( m_SolderPasteMarginCtrl, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
fgSizerClearances->Add( m_SolderPasteMarginCtrl, 1, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_SolderPasteMarginUnits = new wxStaticText( m_PanelProperties, wxID_ANY, _("Inch"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SolderPasteMarginUnits->Wrap( -1 );
|
||||
|
@ -242,18 +254,22 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
fgSizerClearances->Add( m_staticTextRatio, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SolderPasteMarginRatioCtrl = new wxTextCtrl( m_PanelProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerClearances->Add( m_SolderPasteMarginRatioCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
|
||||
fgSizerClearances->Add( m_SolderPasteMarginRatioCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
|
||||
|
||||
m_SolderPasteRatioMarginUnits = new wxStaticText( m_PanelProperties, wxID_ANY, _("%"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SolderPasteRatioMarginUnits->Wrap( -1 );
|
||||
fgSizerClearances->Add( m_SolderPasteRatioMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
sbSizerLocalProperties->Add( fgSizerClearances, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_PropRightSizer->Add( sbSizerLocalProperties, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_PanelPropertiesBoxSizer->Add( m_PropRightSizer, 0, 0, 5 );
|
||||
|
||||
|
||||
m_PanelProperties->SetSizer( m_PanelPropertiesBoxSizer );
|
||||
m_PanelProperties->Layout();
|
||||
m_PanelPropertiesBoxSizer->Fit( m_PanelProperties );
|
||||
|
@ -274,6 +290,7 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
|
||||
m_Sizer3DValues = new wxStaticBoxSizer( new wxStaticBox( m_Panel3D, wxID_ANY, _("3D Scale and Position") ), wxVERTICAL );
|
||||
|
||||
|
||||
bLowerSizer3D->Add( m_Sizer3DValues, 1, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizer3DButtons;
|
||||
|
@ -288,10 +305,13 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_buttonRemove = new wxButton( m_Panel3D, ID_REMOVE_3D_SHAPE, _("Remove 3D Shape"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizer3DButtons->Add( m_buttonRemove, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bLowerSizer3D->Add( bSizer3DButtons, 0, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
bSizerMain3D->Add( bLowerSizer3D, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_Panel3D->SetSizer( bSizerMain3D );
|
||||
m_Panel3D->Layout();
|
||||
bSizerMain3D->Fit( m_Panel3D );
|
||||
|
@ -305,8 +325,10 @@ DIALOG_MODULE_BOARD_EDITOR_BASE::DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* pare
|
|||
m_sdbSizerStdButtonsCancel = new wxButton( this, wxID_CANCEL );
|
||||
m_sdbSizerStdButtons->AddButton( m_sdbSizerStdButtonsCancel );
|
||||
m_sdbSizerStdButtons->Realize();
|
||||
|
||||
m_GeneralBoxSizer->Add( m_sdbSizerStdButtons, 0, wxEXPAND|wxALIGN_RIGHT|wxALL, 5 );
|
||||
|
||||
|
||||
this->SetSizer( m_GeneralBoxSizer );
|
||||
this->Layout();
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Aug 24 2011)
|
||||
// C++ code generated with wxFormBuilder (version Apr 10 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -120,7 +120,7 @@ class DIALOG_MODULE_BOARD_EDITOR_BASE : public wxDialog
|
|||
public:
|
||||
wxStaticBoxSizer* m_Sizer3DValues;
|
||||
|
||||
DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Module properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 550,800 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
DIALOG_MODULE_BOARD_EDITOR_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Module properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 544,599 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||
~DIALOG_MODULE_BOARD_EDITOR_BASE();
|
||||
|
||||
};
|
||||
|
|
|
@ -0,0 +1,277 @@
|
|||
/**
|
||||
* @file dialog_keepout_area_properties.cpp
|
||||
*/
|
||||
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jean-pierre.charras@ujf-grenoble.fr
|
||||
* Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <fctsys.h>
|
||||
#include <appl_wxstruct.h>
|
||||
#include <confirm.h>
|
||||
#include <pcbnew.h>
|
||||
#include <wxPcbStruct.h>
|
||||
#include <zones.h>
|
||||
#include <base_units.h>
|
||||
|
||||
#include <class_zone_settings.h>
|
||||
#include <class_board.h>
|
||||
#include <dialog_keepout_area_properties_base.h>
|
||||
|
||||
#include <wx/imaglist.h> // needed for wx/listctrl.h, in wxGTK 2.8.12
|
||||
#include <wx/listctrl.h>
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Class DIALOG_KEEPOUT_AREA_PROPERTIES
|
||||
* is the derived class from dialog_copper_zone_frame created by wxFormBuilder
|
||||
*/
|
||||
class DIALOG_KEEPOUT_AREA_PROPERTIES : public DIALOG_KEEPOUT_AREA_PROPERTIES_BASE
|
||||
{
|
||||
public:
|
||||
DIALOG_KEEPOUT_AREA_PROPERTIES( PCB_BASE_FRAME* aParent, ZONE_SETTINGS* aSettings );
|
||||
|
||||
private:
|
||||
PCB_BASE_FRAME* m_Parent;
|
||||
wxConfig* m_Config; ///< Current config
|
||||
ZONE_SETTINGS m_zonesettings;
|
||||
ZONE_SETTINGS* m_ptr;
|
||||
|
||||
std::vector<int> m_LayerId; ///< Handle the real layer number from layer
|
||||
///< name position in m_LayerSelectionCtrl
|
||||
|
||||
/**
|
||||
* Function initDialog
|
||||
* fills in the dialog controls using the current settings.
|
||||
*/
|
||||
void initDialog();
|
||||
|
||||
void OnOkClick( wxCommandEvent& event );
|
||||
void OnCancelClick( wxCommandEvent& event );
|
||||
void OnSize( wxSizeEvent& event );
|
||||
|
||||
/**
|
||||
* Function AcceptOptionsForKeepOut
|
||||
* Test validity of options, and copy options in m_zonesettings, for keepout zones
|
||||
* @return bool - false if incorrect options, true if ok.
|
||||
*/
|
||||
bool AcceptOptionsForKeepOut();
|
||||
|
||||
/**
|
||||
* Function makeLayerBitmap
|
||||
* creates the colored rectangle bitmaps used in the layer selection widget.
|
||||
* @param aColor is the color to fill the rectangle with.
|
||||
*/
|
||||
wxBitmap makeLayerBitmap( int aColor );
|
||||
};
|
||||
|
||||
|
||||
#define LAYER_BITMAP_SIZE_X 20
|
||||
#define LAYER_BITMAP_SIZE_Y 10
|
||||
|
||||
ZONE_EDIT_T InvokeKeepoutAreaEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings )
|
||||
{
|
||||
DIALOG_KEEPOUT_AREA_PROPERTIES dlg( aCaller, aSettings );
|
||||
|
||||
ZONE_EDIT_T result = ZONE_EDIT_T( dlg.ShowModal() );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
DIALOG_KEEPOUT_AREA_PROPERTIES::DIALOG_KEEPOUT_AREA_PROPERTIES( PCB_BASE_FRAME* aParent, ZONE_SETTINGS* aSettings ) :
|
||||
DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( aParent )
|
||||
{
|
||||
m_Parent = aParent;
|
||||
m_Config = wxGetApp().GetSettings();
|
||||
|
||||
m_ptr = aSettings;
|
||||
m_zonesettings = *aSettings;
|
||||
|
||||
SetReturnCode( ZONE_ABORT ); // Will be changed on button OK ckick
|
||||
|
||||
initDialog();
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_KEEPOUT_AREA_PROPERTIES::initDialog()
|
||||
{
|
||||
BOARD* board = m_Parent->GetBoard();
|
||||
|
||||
wxString msg;
|
||||
|
||||
if( m_zonesettings.m_Zone_45_Only )
|
||||
m_OrientEdgesOpt->SetSelection( 1 );
|
||||
|
||||
switch( m_zonesettings.m_Zone_HatchingStyle )
|
||||
{
|
||||
case CPolyLine::NO_HATCH:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||
break;
|
||||
|
||||
case CPolyLine::DIAGONAL_EDGE:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
||||
break;
|
||||
|
||||
case CPolyLine::DIAGONAL_FULL:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 2 );
|
||||
break;
|
||||
}
|
||||
|
||||
// Create one column in m_LayerSelectionCtrl
|
||||
wxListItem col0;
|
||||
col0.SetId( 0 );
|
||||
m_LayerSelectionCtrl->InsertColumn( 0, col0 );
|
||||
// Build copper layer list and append to layer widget
|
||||
int layerCount = board->GetCopperLayerCount();
|
||||
int layerNumber, itemIndex, layerColor;
|
||||
wxImageList* imageList = new wxImageList( LAYER_BITMAP_SIZE_X, LAYER_BITMAP_SIZE_Y );
|
||||
m_LayerSelectionCtrl->AssignImageList( imageList, wxIMAGE_LIST_SMALL );
|
||||
for( int ii = 0; ii < layerCount; ii++ )
|
||||
{
|
||||
layerNumber = LAYER_N_BACK;
|
||||
|
||||
if( layerCount <= 1 || ii < layerCount - 1 )
|
||||
layerNumber = ii;
|
||||
else if( ii == layerCount - 1 )
|
||||
layerNumber = LAYER_N_FRONT;
|
||||
|
||||
m_LayerId.insert( m_LayerId.begin(), layerNumber );
|
||||
|
||||
msg = board->GetLayerName( layerNumber );
|
||||
layerColor = board->GetLayerColor( layerNumber );
|
||||
imageList->Add( makeLayerBitmap( layerColor ) );
|
||||
itemIndex = m_LayerSelectionCtrl->InsertItem( 0, msg, ii );
|
||||
|
||||
if( m_zonesettings.m_CurrentZone_Layer == layerNumber )
|
||||
m_LayerSelectionCtrl->Select( itemIndex );
|
||||
}
|
||||
|
||||
// Init keepout parameters:
|
||||
m_cbTracksCtrl->SetValue( m_zonesettings.GetDoNotAllowTracks() );
|
||||
m_cbViasCtrl->SetValue( m_zonesettings.GetDoNotAllowVias() );
|
||||
m_cbCopperPourCtrl->SetValue( m_zonesettings.GetDoNotAllowCopperPour() );
|
||||
}
|
||||
|
||||
void DIALOG_KEEPOUT_AREA_PROPERTIES::OnCancelClick( wxCommandEvent& event )
|
||||
{
|
||||
EndModal( ZONE_ABORT );
|
||||
}
|
||||
|
||||
void DIALOG_KEEPOUT_AREA_PROPERTIES::OnOkClick( wxCommandEvent& event )
|
||||
{
|
||||
if( AcceptOptionsForKeepOut() )
|
||||
{
|
||||
*m_ptr = m_zonesettings;
|
||||
EndModal( ZONE_OK );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_KEEPOUT_AREA_PROPERTIES::OnSize( wxSizeEvent& event )
|
||||
{
|
||||
Layout();
|
||||
|
||||
// Set layer list column width to widget width minus a few pixels
|
||||
m_LayerSelectionCtrl->SetColumnWidth( 0, m_LayerSelectionCtrl->GetSize().x - 5 );
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
bool DIALOG_KEEPOUT_AREA_PROPERTIES::AcceptOptionsForKeepOut()
|
||||
{
|
||||
// Init keepout parameters:
|
||||
m_zonesettings.SetIsKeepout( true );
|
||||
m_zonesettings.SetDoNotAllowTracks( m_cbTracksCtrl->GetValue() );
|
||||
m_zonesettings.SetDoNotAllowVias( m_cbViasCtrl->GetValue() );
|
||||
m_zonesettings.SetDoNotAllowCopperPour( m_cbCopperPourCtrl->GetValue() );
|
||||
|
||||
// Test for not allowed items: should have at least one item not allowed:
|
||||
if( ! m_zonesettings.GetDoNotAllowTracks() &&
|
||||
! m_zonesettings.GetDoNotAllowVias() &&
|
||||
! m_zonesettings.GetDoNotAllowCopperPour() )
|
||||
{
|
||||
DisplayError( NULL,
|
||||
_("Tracks, vias and pads are allowed. The keepout is useless" ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the layer selection for this zone
|
||||
int ii = m_LayerSelectionCtrl->GetFirstSelected();
|
||||
|
||||
if( ii < 0 )
|
||||
{
|
||||
DisplayError( NULL, _( "No layer selected." ) );
|
||||
return false;
|
||||
}
|
||||
|
||||
m_zonesettings.m_CurrentZone_Layer = m_LayerId[ii];
|
||||
switch( m_OutlineAppearanceCtrl->GetSelection() )
|
||||
{
|
||||
case 0:
|
||||
m_zonesettings.m_Zone_HatchingStyle = CPolyLine::NO_HATCH;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
m_zonesettings.m_Zone_HatchingStyle = CPolyLine::DIAGONAL_EDGE;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
m_zonesettings.m_Zone_HatchingStyle = CPolyLine::DIAGONAL_FULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if( m_Config )
|
||||
{
|
||||
m_Config->Write( ZONE_NET_OUTLINES_HATCH_OPTION_KEY,
|
||||
(long) m_zonesettings.m_Zone_HatchingStyle );
|
||||
}
|
||||
|
||||
if( m_OrientEdgesOpt->GetSelection() == 0 )
|
||||
m_zonesettings.m_Zone_45_Only = false;
|
||||
else
|
||||
m_zonesettings.m_Zone_45_Only = true;
|
||||
|
||||
m_zonesettings.m_ZonePriority = 0; //m_PriorityLevelCtrl->GetValue();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxBitmap DIALOG_KEEPOUT_AREA_PROPERTIES::makeLayerBitmap( int aColor )
|
||||
{
|
||||
wxBitmap bitmap( LAYER_BITMAP_SIZE_X, LAYER_BITMAP_SIZE_Y );
|
||||
wxBrush brush;
|
||||
wxMemoryDC iconDC;
|
||||
|
||||
iconDC.SelectObject( bitmap );
|
||||
brush.SetColour( MakeColour( aColor ) );
|
||||
brush.SetStyle( wxSOLID );
|
||||
iconDC.SetBrush( brush );
|
||||
iconDC.DrawRectangle( 0, 0, LAYER_BITMAP_SIZE_X, LAYER_BITMAP_SIZE_Y );
|
||||
|
||||
return bitmap;
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 10 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "dialog_keepout_area_properties_base.h"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
BEGIN_EVENT_TABLE( DIALOG_KEEPOUT_AREA_PROPERTIES_BASE, DIALOG_SHIM )
|
||||
EVT_BUTTON( wxID_CANCEL, DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::_wxFB_OnCancelClick )
|
||||
EVT_BUTTON( wxID_OK, DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::_wxFB_OnOkClick )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
||||
{
|
||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||
|
||||
wxBoxSizer* m_MainSizer;
|
||||
m_MainSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxBoxSizer* m_UpperSizer;
|
||||
m_UpperSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer* m_layersListSizer;
|
||||
m_layersListSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextLayerSelection->Wrap( -1 );
|
||||
m_layersListSizer->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_LayerSelectionCtrl = new wxListView( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ALIGN_LEFT|wxLC_ICON|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_SMALL_ICON );
|
||||
m_layersListSizer->Add( m_LayerSelectionCtrl, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_UpperSizer->Add( m_layersListSizer, 1, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizerRight;
|
||||
bSizerRight = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxStaticBoxSizer* m_OutilinesBoxOpt;
|
||||
m_OutilinesBoxOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Outlines Options:") ), wxVERTICAL );
|
||||
|
||||
wxString m_OrientEdgesOptChoices[] = { _("Any"), _("H, V and 45 deg") };
|
||||
int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
|
||||
m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone Edges Orient"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_OrientEdgesOpt->SetSelection( 0 );
|
||||
m_OutilinesBoxOpt->Add( m_OrientEdgesOpt, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") };
|
||||
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineAppearanceCtrl = new wxRadioBox( this, wxID_ANY, _("Outlines Appearence"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
||||
m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerRight->Add( m_OutilinesBoxOpt, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizerCutoutOpts;
|
||||
sbSizerCutoutOpts = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Keepout Options:") ), wxVERTICAL );
|
||||
|
||||
m_cbTracksCtrl = new wxCheckBox( this, wxID_ANY, _("No Tracks"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbSizerCutoutOpts->Add( m_cbTracksCtrl, 0, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
m_cbViasCtrl = new wxCheckBox( this, wxID_ANY, _("No Vias"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbSizerCutoutOpts->Add( m_cbViasCtrl, 0, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
m_cbCopperPourCtrl = new wxCheckBox( this, wxID_ANY, _("No Copper Pour"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbSizerCutoutOpts->Add( m_cbCopperPourCtrl, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerRight->Add( sbSizerCutoutOpts, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
|
||||
m_UpperSizer->Add( bSizerRight, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||
|
||||
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
m_MainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
|
||||
|
||||
m_sdbSizerButtons = new wxStdDialogButtonSizer();
|
||||
m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
|
||||
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK );
|
||||
m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL );
|
||||
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
|
||||
m_sdbSizerButtons->Realize();
|
||||
|
||||
m_MainSizer->Add( m_sdbSizerButtons, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
this->SetSizer( m_MainSizer );
|
||||
this->Layout();
|
||||
|
||||
this->Centre( wxBOTH );
|
||||
}
|
||||
|
||||
DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::~DIALOG_KEEPOUT_AREA_PROPERTIES_BASE()
|
||||
{
|
||||
}
|
|
@ -0,0 +1,897 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<wxFormBuilder_Project>
|
||||
<FileVersion major="1" minor="11" />
|
||||
<object class="Project" expanded="1">
|
||||
<property name="class_decoration"></property>
|
||||
<property name="code_generation">C++</property>
|
||||
<property name="disconnect_events">1</property>
|
||||
<property name="disconnect_mode">source_name</property>
|
||||
<property name="disconnect_php_events">0</property>
|
||||
<property name="disconnect_python_events">0</property>
|
||||
<property name="embedded_files_path">res</property>
|
||||
<property name="encoding">UTF-8</property>
|
||||
<property name="event_generation">table</property>
|
||||
<property name="file">dialog_keepout_area_properties_base</property>
|
||||
<property name="first_id">1000</property>
|
||||
<property name="help_provider">none</property>
|
||||
<property name="internationalize">1</property>
|
||||
<property name="name">dialog_keepout_areas_properties_base</property>
|
||||
<property name="namespace"></property>
|
||||
<property name="path">.</property>
|
||||
<property name="precompiled_header"></property>
|
||||
<property name="relative_path">1</property>
|
||||
<property name="skip_php_events">1</property>
|
||||
<property name="skip_python_events">1</property>
|
||||
<property name="use_enum">1</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Dialog" expanded="1">
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||
<property name="bg"></property>
|
||||
<property name="center">wxBOTH</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="event_handler">impl_virtual</property>
|
||||
<property name="extra_style"></property>
|
||||
<property name="fg"></property>
|
||||
<property name="font"></property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">DIALOG_KEEPOUT_AREA_PROPERTIES_BASE</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">308,355</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||
<property name="title">Keepout Area Properties</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style">wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER</property>
|
||||
<event name="OnActivate"></event>
|
||||
<event name="OnActivateApp"></event>
|
||||
<event name="OnAuiFindManager"></event>
|
||||
<event name="OnAuiPaneButton"></event>
|
||||
<event name="OnAuiPaneClose"></event>
|
||||
<event name="OnAuiPaneMaximize"></event>
|
||||
<event name="OnAuiPaneRestore"></event>
|
||||
<event name="OnAuiRender"></event>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnClose"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnHibernate"></event>
|
||||
<event name="OnIconize"></event>
|
||||
<event name="OnIdle"></event>
|
||||
<event name="OnInitDialog"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_MainSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALIGN_CENTER_HORIZONTAL</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_UpperSizer</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_layersListSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Layer selection:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextLayerSelection</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxListCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_LayerSelectionCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxLC_ALIGN_LEFT|wxLC_ICON|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_SMALL_ICON</property>
|
||||
<property name="subclass">wxListView; </property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnListBeginDrag"></event>
|
||||
<event name="OnListBeginLabelEdit"></event>
|
||||
<event name="OnListBeginRDrag"></event>
|
||||
<event name="OnListCacheHint"></event>
|
||||
<event name="OnListColBeginDrag"></event>
|
||||
<event name="OnListColClick"></event>
|
||||
<event name="OnListColDragging"></event>
|
||||
<event name="OnListColEndDrag"></event>
|
||||
<event name="OnListColRightClick"></event>
|
||||
<event name="OnListDeleteAllItems"></event>
|
||||
<event name="OnListDeleteItem"></event>
|
||||
<event name="OnListEndLabelEdit"></event>
|
||||
<event name="OnListInsertItem"></event>
|
||||
<event name="OnListItemActivated"></event>
|
||||
<event name="OnListItemDeselected"></event>
|
||||
<event name="OnListItemFocused"></event>
|
||||
<event name="OnListItemMiddleClick"></event>
|
||||
<event name="OnListItemRightClick"></event>
|
||||
<event name="OnListItemSelected"></event>
|
||||
<event name="OnListKeyDown"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerRight</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Outlines Options:</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_OutilinesBoxOpt</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"Any" "H, V and 45 deg"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Zone Edges Orient</property>
|
||||
<property name="majorDimension">1</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OrientEdgesOpt</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">0</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRadioBox"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"Line" "Hatched Outline" "Full Hatched"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Outlines Appearence</property>
|
||||
<property name="majorDimension">1</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OutlineAppearanceCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">1</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRadioBox"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Keepout Options:</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">sbSizerCutoutOpts</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">No Tracks</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbTracksCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">No Vias</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbViasCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">No Copper Pour</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbCopperPourCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnCheckBox"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND | wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticLine" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticline1</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxLI_HORIZONTAL</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStdDialogButtonSizer" expanded="1">
|
||||
<property name="Apply">0</property>
|
||||
<property name="Cancel">1</property>
|
||||
<property name="ContextHelp">0</property>
|
||||
<property name="Help">0</property>
|
||||
<property name="No">0</property>
|
||||
<property name="OK">1</property>
|
||||
<property name="Save">0</property>
|
||||
<property name="Yes">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_sdbSizerButtons</property>
|
||||
<property name="permission">protected</property>
|
||||
<event name="OnApplyButtonClick"></event>
|
||||
<event name="OnCancelButtonClick">OnCancelClick</event>
|
||||
<event name="OnContextHelpButtonClick"></event>
|
||||
<event name="OnHelpButtonClick"></event>
|
||||
<event name="OnNoButtonClick"></event>
|
||||
<event name="OnOKButtonClick">OnOkClick</event>
|
||||
<event name="OnSaveButtonClick"></event>
|
||||
<event name="OnYesButtonClick"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</wxFormBuilder_Project>
|
|
@ -0,0 +1,70 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 10 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
|
||||
#define __DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
|
||||
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
#include "dialog_shim.h"
|
||||
#include <wx/string.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/listctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/radiobox.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class DIALOG_KEEPOUT_AREA_PROPERTIES_BASE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class DIALOG_KEEPOUT_AREA_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
{
|
||||
DECLARE_EVENT_TABLE()
|
||||
private:
|
||||
|
||||
// Private event handlers
|
||||
void _wxFB_OnCancelClick( wxCommandEvent& event ){ OnCancelClick( event ); }
|
||||
void _wxFB_OnOkClick( wxCommandEvent& event ){ OnOkClick( event ); }
|
||||
|
||||
|
||||
protected:
|
||||
wxStaticText* m_staticTextLayerSelection;
|
||||
wxListView* m_LayerSelectionCtrl;
|
||||
wxRadioBox* m_OrientEdgesOpt;
|
||||
wxRadioBox* m_OutlineAppearanceCtrl;
|
||||
wxCheckBox* m_cbTracksCtrl;
|
||||
wxCheckBox* m_cbViasCtrl;
|
||||
wxCheckBox* m_cbCopperPourCtrl;
|
||||
wxStaticLine* m_staticline1;
|
||||
wxStdDialogButtonSizer* m_sdbSizerButtons;
|
||||
wxButton* m_sdbSizerButtonsOK;
|
||||
wxButton* m_sdbSizerButtonsCancel;
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
|
||||
public:
|
||||
|
||||
DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Keepout Area Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 308,355 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER );
|
||||
~DIALOG_KEEPOUT_AREA_PROPERTIES_BASE();
|
||||
|
||||
};
|
||||
|
||||
#endif //__DIALOG_KEEPOUT_AREA_PROPERTIES_BASE_H__
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||
// C++ code generated with wxFormBuilder (version Apr 10 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -10,8 +10,8 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
BEGIN_EVENT_TABLE( DialogNonCopperZonesPropertiesBase, DIALOG_SHIM )
|
||||
EVT_BUTTON( wxID_OK, DialogNonCopperZonesPropertiesBase::_wxFB_OnOkClick )
|
||||
EVT_BUTTON( wxID_CANCEL, DialogNonCopperZonesPropertiesBase::_wxFB_OnCancelClick )
|
||||
EVT_BUTTON( wxID_OK, DialogNonCopperZonesPropertiesBase::_wxFB_OnOkClick )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
||||
|
@ -24,24 +24,21 @@ DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow
|
|||
wxBoxSizer* m_UpperSizer;
|
||||
m_UpperSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxStaticBoxSizer* sbLeftSizer_;
|
||||
sbLeftSizer_ = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Zone Fill Options:") ), wxVERTICAL );
|
||||
wxBoxSizer* bSizerLeft;
|
||||
bSizerLeft = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxString m_FillModeCtrlChoices[] = { _("Use polygons"), _("Use segments") };
|
||||
int m_FillModeCtrlNChoices = sizeof( m_FillModeCtrlChoices ) / sizeof( wxString );
|
||||
m_FillModeCtrl = new wxRadioBox( this, wxID_ANY, _("Filling Mode:"), wxDefaultPosition, wxDefaultSize, m_FillModeCtrlNChoices, m_FillModeCtrlChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_FillModeCtrl->SetSelection( 0 );
|
||||
sbLeftSizer_->Add( m_FillModeCtrl, 0, wxALL|wxEXPAND, 5 );
|
||||
m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextLayerSelection->Wrap( -1 );
|
||||
bSizerLeft->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_MinThicknessValueTitle = new wxStaticText( this, wxID_ANY, _("Zone min thickness value"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_MinThicknessValueTitle->Wrap( -1 );
|
||||
sbLeftSizer_->Add( m_MinThicknessValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbLeftSizer_->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
m_LayerSelectionCtrl = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
||||
bSizerLeft->Add( m_LayerSelectionCtrl, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_UpperSizer->Add( sbLeftSizer_, 0, 0, 5 );
|
||||
m_UpperSizer->Add( bSizerLeft, 1, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizerRight;
|
||||
bSizerRight = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxStaticBoxSizer* m_OutilinesBoxOpt;
|
||||
m_OutilinesBoxOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Outlines Options:") ), wxVERTICAL );
|
||||
|
@ -50,39 +47,41 @@ DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow
|
|||
int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
|
||||
m_OrientEdgesOpt = new wxRadioBox( this, wxID_ANY, _("Zone Edges Orient"), wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_OrientEdgesOpt->SetSelection( 0 );
|
||||
m_OutilinesBoxOpt->Add( m_OrientEdgesOpt, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
m_OutilinesBoxOpt->Add( m_OrientEdgesOpt, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched Outline"), _("Full Hatched") };
|
||||
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineAppearanceCtrl = new wxRadioBox( this, wxID_ANY, _("Outlines Appearence"), wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
||||
m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_UpperSizer->Add( m_OutilinesBoxOpt, 0, 0, 5 );
|
||||
bSizerRight->Add( m_OutilinesBoxOpt, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxBoxSizer* m_ButtonsSizer;
|
||||
m_ButtonsSizer = new wxBoxSizer( wxVERTICAL );
|
||||
m_MinThicknessValueTitle = new wxStaticText( this, wxID_ANY, _("Zone min thickness value"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_MinThicknessValueTitle->Wrap( -1 );
|
||||
bSizerRight->Add( m_MinThicknessValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_buttonOk = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_buttonOk->SetDefault();
|
||||
m_ButtonsSizer->Add( m_buttonOk, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||
|
||||
m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ButtonsSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizerRight->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_UpperSizer->Add( m_ButtonsSizer, 1, wxALIGN_CENTER_VERTICAL, 5 );
|
||||
m_UpperSizer->Add( bSizerRight, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||
|
||||
m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextLayerSelection->Wrap( -1 );
|
||||
m_MainSizer->Add( m_staticTextLayerSelection, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
m_MainSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
|
||||
|
||||
m_LayerSelectionCtrl = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
||||
m_MainSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
m_sdbSizerButtons = new wxStdDialogButtonSizer();
|
||||
m_sdbSizerButtonsOK = new wxButton( this, wxID_OK );
|
||||
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK );
|
||||
m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL );
|
||||
m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel );
|
||||
m_sdbSizerButtons->Realize();
|
||||
|
||||
m_MainSizer->Add( m_sdbSizerButtons, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
this->SetSizer( m_MainSizer );
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<property name="minimum_size"></property>
|
||||
<property name="name">DialogNonCopperZonesPropertiesBase</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">416,287</property>
|
||||
<property name="size">369,317</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||
<property name="title">Non Copper Zones Properties</property>
|
||||
|
@ -102,19 +102,210 @@
|
|||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag"></property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerLeft</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Layer selection:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextLayerSelection</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxListBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices"></property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_LayerSelectionCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnListBox"></event>
|
||||
<event name="OnListBoxDClick"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerRight</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Zone Fill Options:</property>
|
||||
<property name="label">Outlines Options:</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">sbLeftSizer_</property>
|
||||
<property name="name">m_OutilinesBoxOpt</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
|
@ -130,7 +321,7 @@
|
|||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"Use polygons" "Use segments"</property>
|
||||
<property name="choices">"Any" "H, V and 45 deg"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
|
@ -145,7 +336,7 @@
|
|||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Filling Mode:</property>
|
||||
<property name="label">Zone Edges Orient</property>
|
||||
<property name="majorDimension">1</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
|
@ -154,7 +345,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_FillModeCtrl</property>
|
||||
<property name="name">m_OrientEdgesOpt</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -202,6 +393,98 @@
|
|||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"Line" "Hatched Outline" "Full Hatched"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Outlines Appearence</property>
|
||||
<property name="majorDimension">1</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OutlineAppearanceCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">1</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRadioBox"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
|
@ -378,394 +661,13 @@
|
|||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag"></property>
|
||||
<property name="flag">wxEXPAND | wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Outlines Options:</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_OutilinesBoxOpt</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"Any" "H, V and 45 deg"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Zone Edges Orient</property>
|
||||
<property name="majorDimension">1</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OrientEdgesOpt</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">0</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRadioBox"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices">"Line" "Hatched Outline" "Full Hatched"</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Outlines Appearence</property>
|
||||
<property name="majorDimension">1</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OutlineAppearanceCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">1</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRadioBox"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">m_ButtonsSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_OK</property>
|
||||
<property name="label">OK</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_buttonOk</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnButtonClick">OnOkClick</event>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_HORIZONTAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default">0</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_CANCEL</property>
|
||||
<property name="label">Cancel</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_buttonCancel</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnButtonClick">OnCancelClick</event>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<object class="wxStaticLine" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
|
@ -793,7 +695,6 @@
|
|||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Layer selection:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
|
@ -801,7 +702,7 @@
|
|||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextLayerSelection</property>
|
||||
<property name="name">m_staticline1</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -811,14 +712,13 @@
|
|||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="style">wxLI_HORIZONTAL</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
|
@ -846,90 +746,28 @@
|
|||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxListBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="choices"></property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<object class="wxStdDialogButtonSizer" expanded="1">
|
||||
<property name="Apply">0</property>
|
||||
<property name="Cancel">1</property>
|
||||
<property name="ContextHelp">0</property>
|
||||
<property name="Help">0</property>
|
||||
<property name="No">0</property>
|
||||
<property name="OK">1</property>
|
||||
<property name="Save">0</property>
|
||||
<property name="Yes">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_LayerSelectionCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="name">m_sdbSizerButtons</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnListBox"></event>
|
||||
<event name="OnListBoxDClick"></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="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
<event name="OnApplyButtonClick"></event>
|
||||
<event name="OnCancelButtonClick">OnCancelClick</event>
|
||||
<event name="OnContextHelpButtonClick"></event>
|
||||
<event name="OnHelpButtonClick"></event>
|
||||
<event name="OnNoButtonClick"></event>
|
||||
<event name="OnOKButtonClick">OnOkClick</event>
|
||||
<event name="OnSaveButtonClick"></event>
|
||||
<event name="OnYesButtonClick"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||
// C++ code generated with wxFormBuilder (version Apr 10 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -13,17 +13,18 @@
|
|||
#include <wx/intl.h>
|
||||
#include "dialog_shim.h"
|
||||
#include <wx/string.h>
|
||||
#include <wx/radiobox.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/listbox.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/radiobox.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
@ -37,29 +38,30 @@ class DialogNonCopperZonesPropertiesBase : public DIALOG_SHIM
|
|||
private:
|
||||
|
||||
// Private event handlers
|
||||
void _wxFB_OnOkClick( wxCommandEvent& event ){ OnOkClick( event ); }
|
||||
void _wxFB_OnCancelClick( wxCommandEvent& event ){ OnCancelClick( event ); }
|
||||
void _wxFB_OnOkClick( wxCommandEvent& event ){ OnOkClick( event ); }
|
||||
|
||||
|
||||
protected:
|
||||
wxRadioBox* m_FillModeCtrl;
|
||||
wxStaticText* m_MinThicknessValueTitle;
|
||||
wxTextCtrl* m_ZoneMinThicknessCtrl;
|
||||
wxRadioBox* m_OrientEdgesOpt;
|
||||
wxRadioBox* m_OutlineAppearanceCtrl;
|
||||
wxButton* m_buttonOk;
|
||||
wxButton* m_buttonCancel;
|
||||
wxStaticText* m_staticTextLayerSelection;
|
||||
wxListBox* m_LayerSelectionCtrl;
|
||||
wxRadioBox* m_OrientEdgesOpt;
|
||||
wxRadioBox* m_OutlineAppearanceCtrl;
|
||||
wxStaticText* m_MinThicknessValueTitle;
|
||||
wxTextCtrl* m_ZoneMinThicknessCtrl;
|
||||
wxStaticLine* m_staticline1;
|
||||
wxStdDialogButtonSizer* m_sdbSizerButtons;
|
||||
wxButton* m_sdbSizerButtonsOK;
|
||||
wxButton* m_sdbSizerButtonsCancel;
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
|
||||
public:
|
||||
|
||||
DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 416,287 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER );
|
||||
DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 369,317 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER );
|
||||
~DialogNonCopperZonesPropertiesBase();
|
||||
|
||||
};
|
||||
|
|
|
@ -479,6 +479,7 @@ void DIALOG_PAD_PROPERTIES::initValues()
|
|||
wxCommandEvent cmd_event;
|
||||
setPadLayersList( m_dummyPad->GetLayerMask() );
|
||||
OnDrillShapeSelected( cmd_event );
|
||||
OnPadShapeSelection( cmd_event );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -135,27 +135,9 @@ void DIALOG_PCB_TEXT_PROPERTIES::MyInit()
|
|||
}
|
||||
}
|
||||
|
||||
switch( (int) m_SelectedPCBText->GetOrientation() )
|
||||
{
|
||||
default:
|
||||
m_OrientationCtrl->SetSelection( 0 );
|
||||
break;
|
||||
|
||||
case 900:
|
||||
case -2700:
|
||||
m_OrientationCtrl->SetSelection( 1 );
|
||||
break;
|
||||
|
||||
case 1800:
|
||||
case -1800:
|
||||
m_OrientationCtrl->SetSelection( 2 );
|
||||
break;
|
||||
|
||||
case 2700:
|
||||
case -900:
|
||||
m_OrientationCtrl->SetSelection( 3 );
|
||||
break;
|
||||
}
|
||||
wxString orientationStr;
|
||||
orientationStr << m_SelectedPCBText->GetOrientation();
|
||||
m_OrientationCtrl->SetValue( orientationStr );
|
||||
|
||||
if( m_SelectedPCBText->m_Mirror )
|
||||
m_DisplayCtrl->SetSelection( 1 );
|
||||
|
@ -263,7 +245,10 @@ void DIALOG_PCB_TEXT_PROPERTIES::OnOkClick( wxCommandEvent& event )
|
|||
m_SelectedPCBText->m_Mirror = (m_DisplayCtrl->GetSelection() == 1) ? true : false;
|
||||
|
||||
// Set the text orientation
|
||||
m_SelectedPCBText->m_Orient = m_OrientationCtrl->GetSelection() * 900;
|
||||
long orientation;
|
||||
m_OrientationCtrl->GetValue().ToLong( &orientation );
|
||||
orientation = orientation % 3600;
|
||||
m_SelectedPCBText->SetOrientation( orientation );
|
||||
|
||||
// Set whether the PCB text is slanted (it is not italics, as italics has additional curves in style)
|
||||
m_SelectedPCBText->m_Italic = m_StyleCtrl->GetSelection() ? 1 : 0;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 19 2012)
|
||||
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -29,121 +29,106 @@ DIALOG_PCB_TEXT_PROPERTIES_BASE::DIALOG_PCB_TEXT_PROPERTIES_BASE( wxWindow* pare
|
|||
|
||||
bSizer9->Add( m_TextContentCtrl, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizerLower;
|
||||
bSizerLower = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer* bSizerLeft;
|
||||
bSizerLeft = new wxBoxSizer( wxVERTICAL );
|
||||
wxFlexGridSizer* fgSizer1;
|
||||
fgSizer1 = new wxFlexGridSizer( 6, 4, 0, 0 );
|
||||
fgSizer1->AddGrowableCol( 0 );
|
||||
fgSizer1->AddGrowableCol( 1 );
|
||||
fgSizer1->AddGrowableCol( 2 );
|
||||
fgSizer1->AddGrowableCol( 3 );
|
||||
fgSizer1->SetFlexibleDirection( wxBOTH );
|
||||
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_SizeXLabel = new wxStaticText( this, wxID_ANY, _("Size X"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXLabel->Wrap( -1 );
|
||||
bSizerLeft->Add( m_SizeXLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_SizeXCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizerLeft->Add( m_SizeXCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_SizeYLabel = new wxStaticText( this, wxID_ANY, _("Size Y"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYLabel->Wrap( -1 );
|
||||
bSizerLeft->Add( m_SizeYLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_SizeYCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizerLeft->Add( m_SizeYCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_ThicknessLabel = new wxStaticText( this, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ThicknessLabel->Wrap( -1 );
|
||||
bSizerLeft->Add( m_ThicknessLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_ThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizerLeft->Add( m_ThicknessCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
|
||||
bSizerLower->Add( bSizerLeft, 1, 0, 5 );
|
||||
|
||||
wxBoxSizer* bSizerRight;
|
||||
bSizerRight = new wxBoxSizer( wxVERTICAL );
|
||||
fgSizer1->Add( m_SizeXLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_PositionXLabel = new wxStaticText( this, wxID_ANY, _("Position X"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PositionXLabel->Wrap( -1 );
|
||||
bSizerRight->Add( m_PositionXLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_PositionXCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizerRight->Add( m_PositionXCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_PositionYLabel = new wxStaticText( this, wxID_ANY, _("Position Y"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PositionYLabel->Wrap( -1 );
|
||||
bSizerRight->Add( m_PositionYLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_PositionYCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizerRight->Add( m_PositionYCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
fgSizer1->Add( m_PositionXLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_LayerLabel = new wxStaticText( this, wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_LayerLabel->Wrap( -1 );
|
||||
bSizerRight->Add( m_LayerLabel, 0, wxLEFT|wxRIGHT, 5 );
|
||||
fgSizer1->Add( m_LayerLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_staticText10 = new wxStaticText( this, wxID_ANY, _("Display:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText10->Wrap( -1 );
|
||||
fgSizer1->Add( m_staticText10, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_SizeXCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_SizeXCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_PositionXCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_PositionXCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxArrayString m_LayerSelectionCtrlChoices;
|
||||
m_LayerSelectionCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_LayerSelectionCtrlChoices, 0 );
|
||||
m_LayerSelectionCtrl->SetSelection( 0 );
|
||||
m_LayerSelectionCtrl->SetToolTip( _("Select the layer on which text should lay.") );
|
||||
|
||||
bSizerRight->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
bSizerLower->Add( bSizerRight, 1, 0, 5 );
|
||||
|
||||
wxBoxSizer* bSizer5;
|
||||
bSizer5 = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticText8 = new wxStaticText( this, wxID_ANY, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText8->Wrap( -1 );
|
||||
bSizer5->Add( m_staticText8, 0, wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
wxString m_OrientationCtrlChoices[] = { _("0"), _("90"), _("180"), _("-90") };
|
||||
int m_OrientationCtrlNChoices = sizeof( m_OrientationCtrlChoices ) / sizeof( wxString );
|
||||
m_OrientationCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_OrientationCtrlNChoices, m_OrientationCtrlChoices, 0 );
|
||||
m_OrientationCtrl->SetSelection( 0 );
|
||||
bSizer5->Add( m_OrientationCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_staticText9 = new wxStaticText( this, wxID_ANY, _("Style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText9->Wrap( -1 );
|
||||
bSizer5->Add( m_staticText9, 0, wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
wxString m_StyleCtrlChoices[] = { _("Normal"), _("Italic") };
|
||||
int m_StyleCtrlNChoices = sizeof( m_StyleCtrlChoices ) / sizeof( wxString );
|
||||
m_StyleCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_StyleCtrlNChoices, m_StyleCtrlChoices, 0 );
|
||||
m_StyleCtrl->SetSelection( 0 );
|
||||
bSizer5->Add( m_StyleCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
|
||||
bSizerLower->Add( bSizer5, 0, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizer6;
|
||||
bSizer6 = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_staticText10 = new wxStaticText( this, wxID_ANY, _("Display:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText10->Wrap( -1 );
|
||||
bSizer6->Add( m_staticText10, 0, wxLEFT|wxRIGHT, 5 );
|
||||
fgSizer1->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxString m_DisplayCtrlChoices[] = { _("Normal"), _("Mirrored") };
|
||||
int m_DisplayCtrlNChoices = sizeof( m_DisplayCtrlChoices ) / sizeof( wxString );
|
||||
m_DisplayCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_DisplayCtrlNChoices, m_DisplayCtrlChoices, 0 );
|
||||
m_DisplayCtrl->SetSelection( 0 );
|
||||
bSizer6->Add( m_DisplayCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
fgSizer1->Add( m_DisplayCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_SizeYLabel = new wxStaticText( this, wxID_ANY, _("Size Y"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYLabel->Wrap( -1 );
|
||||
fgSizer1->Add( m_SizeYLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_PositionYLabel = new wxStaticText( this, wxID_ANY, _("Position Y"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_PositionYLabel->Wrap( -1 );
|
||||
fgSizer1->Add( m_PositionYLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_staticText9 = new wxStaticText( this, wxID_ANY, _("Style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText9->Wrap( -1 );
|
||||
fgSizer1->Add( m_staticText9, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_staticText11 = new wxStaticText( this, wxID_ANY, _("Justification:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText11->Wrap( -1 );
|
||||
bSizer6->Add( m_staticText11, 0, wxLEFT|wxRIGHT, 5 );
|
||||
fgSizer1->Add( m_staticText11, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_SizeYCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_SizeYCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_PositionYCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_PositionYCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
wxString m_StyleCtrlChoices[] = { _("Normal"), _("Italic") };
|
||||
int m_StyleCtrlNChoices = sizeof( m_StyleCtrlChoices ) / sizeof( wxString );
|
||||
m_StyleCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_StyleCtrlNChoices, m_StyleCtrlChoices, 0 );
|
||||
m_StyleCtrl->SetSelection( 0 );
|
||||
fgSizer1->Add( m_StyleCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
wxString m_justifyChoiceChoices[] = { _("Left"), _("Center"), _("Right") };
|
||||
int m_justifyChoiceNChoices = sizeof( m_justifyChoiceChoices ) / sizeof( wxString );
|
||||
m_justifyChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_justifyChoiceNChoices, m_justifyChoiceChoices, 0 );
|
||||
m_justifyChoice->SetSelection( 0 );
|
||||
bSizer6->Add( m_justifyChoice, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
fgSizer1->Add( m_justifyChoice, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_ThicknessLabel = new wxStaticText( this, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ThicknessLabel->Wrap( -1 );
|
||||
fgSizer1->Add( m_ThicknessLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
m_orientationLabel = new wxStaticText( this, wxID_ANY, _("Orientation (0.1 deg):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_orientationLabel->Wrap( -1 );
|
||||
fgSizer1->Add( m_orientationLabel, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||
|
||||
|
||||
bSizerLower->Add( bSizer6, 0, wxEXPAND, 5 );
|
||||
fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizer9->Add( bSizerLower, 0, wxEXPAND, 5 );
|
||||
fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_ThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_ThicknessCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||
|
||||
m_OrientationCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_OrientationCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
bSizer9->Add( fgSizer1, 1, wxEXPAND, 5 );
|
||||
|
||||
m_StandardSizer = new wxStdDialogButtonSizer();
|
||||
m_StandardSizerOK = new wxButton( this, wxID_OK );
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Mar 19 2012)
|
||||
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
|
@ -19,8 +19,8 @@
|
|||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/choice.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
||||
|
@ -38,25 +38,25 @@ class DIALOG_PCB_TEXT_PROPERTIES_BASE : public DIALOG_SHIM
|
|||
wxStaticText* m_TextLabel;
|
||||
wxTextCtrl* m_TextContentCtrl;
|
||||
wxStaticText* m_SizeXLabel;
|
||||
wxTextCtrl* m_SizeXCtrl;
|
||||
wxStaticText* m_SizeYLabel;
|
||||
wxTextCtrl* m_SizeYCtrl;
|
||||
wxStaticText* m_ThicknessLabel;
|
||||
wxTextCtrl* m_ThicknessCtrl;
|
||||
wxStaticText* m_PositionXLabel;
|
||||
wxTextCtrl* m_PositionXCtrl;
|
||||
wxStaticText* m_PositionYLabel;
|
||||
wxTextCtrl* m_PositionYCtrl;
|
||||
wxStaticText* m_LayerLabel;
|
||||
wxChoice* m_LayerSelectionCtrl;
|
||||
wxStaticText* m_staticText8;
|
||||
wxChoice* m_OrientationCtrl;
|
||||
wxStaticText* m_staticText9;
|
||||
wxChoice* m_StyleCtrl;
|
||||
wxStaticText* m_staticText10;
|
||||
wxTextCtrl* m_SizeXCtrl;
|
||||
wxTextCtrl* m_PositionXCtrl;
|
||||
wxChoice* m_LayerSelectionCtrl;
|
||||
wxChoice* m_DisplayCtrl;
|
||||
wxStaticText* m_SizeYLabel;
|
||||
wxStaticText* m_PositionYLabel;
|
||||
wxStaticText* m_staticText9;
|
||||
wxStaticText* m_staticText11;
|
||||
wxTextCtrl* m_SizeYCtrl;
|
||||
wxTextCtrl* m_PositionYCtrl;
|
||||
wxChoice* m_StyleCtrl;
|
||||
wxChoice* m_justifyChoice;
|
||||
wxStaticText* m_ThicknessLabel;
|
||||
wxStaticText* m_orientationLabel;
|
||||
wxTextCtrl* m_ThicknessCtrl;
|
||||
wxTextCtrl* m_OrientationCtrl;
|
||||
wxStdDialogButtonSizer* m_StandardSizer;
|
||||
wxButton* m_StandardSizerOK;
|
||||
wxButton* m_StandardSizerCancel;
|
||||
|
@ -69,7 +69,7 @@ class DIALOG_PCB_TEXT_PROPERTIES_BASE : public DIALOG_SHIM
|
|||
|
||||
public:
|
||||
|
||||
DIALOG_PCB_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 433,465 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSYSTEM_MENU );
|
||||
DIALOG_PCB_TEXT_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 433,450 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSYSTEM_MENU );
|
||||
~DIALOG_PCB_TEXT_PROPERTIES_BASE();
|
||||
|
||||
};
|
||||
|
|
121
pcbnew/drc.cpp
121
pcbnew/drc.cpp
|
@ -136,6 +136,14 @@ int DRC::Drc( TRACK* aRefSegm, TRACK* aList )
|
|||
return BAD_DRC;
|
||||
}
|
||||
|
||||
if( !doTrackKeepoutDrc( aRefSegm ) )
|
||||
{
|
||||
wxASSERT( m_currentMarker );
|
||||
|
||||
m_currentMarker->DisplayInfo( m_mainWindow );
|
||||
return BAD_DRC;
|
||||
}
|
||||
|
||||
return OK_DRC;
|
||||
}
|
||||
|
||||
|
@ -252,6 +260,18 @@ void DRC::RunTests( wxTextCtrl* aMessages )
|
|||
testUnconnected();
|
||||
}
|
||||
|
||||
// find and gather vias, tracks, pads inside keepout areas.
|
||||
if( m_doKeepoutTest )
|
||||
{
|
||||
if( aMessages )
|
||||
{
|
||||
aMessages->AppendText( _( "Keepout areas ...\n" ) );
|
||||
aMessages->Refresh();
|
||||
}
|
||||
|
||||
testKeepoutAreas();
|
||||
}
|
||||
|
||||
// update the m_ui listboxes
|
||||
updatePointers();
|
||||
|
||||
|
@ -556,6 +576,107 @@ void DRC::testZones()
|
|||
}
|
||||
|
||||
|
||||
void DRC::testKeepoutAreas()
|
||||
{
|
||||
// Test keepout areas for vias, tracks and pads inside keepout areas
|
||||
for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ )
|
||||
{
|
||||
ZONE_CONTAINER* area = m_pcb->GetArea( ii );
|
||||
|
||||
if( !area->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
for( TRACK* segm = m_pcb->m_Track; segm != NULL; segm = segm->Next() )
|
||||
{
|
||||
if( segm->Type() == PCB_TRACE_T )
|
||||
{
|
||||
if( ! area->GetDoNotAllowTracks() )
|
||||
continue;
|
||||
|
||||
if( segm->GetLayer() != area->GetLayer() )
|
||||
continue;
|
||||
|
||||
if( area->m_Poly->Distance( segm->GetStart(), segm->GetEnd(), segm->GetWidth() ) == 0 )
|
||||
{
|
||||
m_currentMarker = fillMarker( segm, NULL,
|
||||
DRCE_TRACK_INSIDE_KEEPOUT, m_currentMarker );
|
||||
m_pcb->Add( m_currentMarker );
|
||||
m_currentMarker = 0;
|
||||
}
|
||||
}
|
||||
else if( segm->Type() == PCB_VIA_T )
|
||||
{
|
||||
if( ! area->GetDoNotAllowVias() )
|
||||
continue;
|
||||
|
||||
if( ! ((SEGVIA*)segm)->IsOnLayer( area->GetLayer() ) )
|
||||
continue;
|
||||
|
||||
if( area->m_Poly->Distance( segm->GetPosition() ) < segm->GetWidth()/2 )
|
||||
{
|
||||
m_currentMarker = fillMarker( segm, NULL,
|
||||
DRCE_VIA_INSIDE_KEEPOUT, m_currentMarker );
|
||||
m_pcb->Add( m_currentMarker );
|
||||
m_currentMarker = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Test pads: TODO
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function doTrackKeepoutDrc
|
||||
* tests the current segment or via.
|
||||
* aRefSeg is the segment to test
|
||||
* return true if no DRC err
|
||||
*/
|
||||
bool DRC::doTrackKeepoutDrc( TRACK* aRefSeg )
|
||||
{
|
||||
// Test keepout areas for vias, tracks and pads inside keepout areas
|
||||
for( int ii = 0; ii < m_pcb->GetAreaCount(); ii++ )
|
||||
{
|
||||
ZONE_CONTAINER* area = m_pcb->GetArea( ii );
|
||||
|
||||
if( !area->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
if( aRefSeg->Type() == PCB_TRACE_T )
|
||||
{
|
||||
if( ! area->GetDoNotAllowTracks() )
|
||||
continue;
|
||||
|
||||
if( aRefSeg->GetLayer() != area->GetLayer() )
|
||||
continue;
|
||||
|
||||
if( area->m_Poly->Distance( aRefSeg->GetStart(), aRefSeg->GetEnd(), aRefSeg->GetWidth() ) == 0 )
|
||||
{
|
||||
m_currentMarker = fillMarker( aRefSeg, NULL,
|
||||
DRCE_TRACK_INSIDE_KEEPOUT, m_currentMarker );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if( aRefSeg->Type() == PCB_VIA_T )
|
||||
{
|
||||
if( ! area->GetDoNotAllowVias() )
|
||||
continue;
|
||||
|
||||
if( ! ((SEGVIA*)aRefSeg)->IsOnLayer( area->GetLayer() ) )
|
||||
continue;
|
||||
|
||||
if( area->m_Poly->Distance( aRefSeg->GetPosition() ) < aRefSeg->GetWidth()/2 )
|
||||
{
|
||||
m_currentMarker = fillMarker( aRefSeg, NULL,
|
||||
DRCE_VIA_INSIDE_KEEPOUT, m_currentMarker );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool DRC::doPadToPadsDrc( D_PAD* aRefPad, D_PAD** aStart, D_PAD** aEnd, int x_limit )
|
||||
{
|
||||
int layerMask = aRefPad->GetLayerMask() & ALL_CU_LAYERS;
|
||||
|
|
|
@ -32,7 +32,6 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
|
||||
#define OK_DRC 0
|
||||
#define BAD_DRC 1
|
||||
|
||||
|
@ -73,6 +72,9 @@
|
|||
#define DRCE_NETCLASS_VIADRILLSIZE 33 ///< netclass has ViaDrillSize < board.m_designSettings->m_ViasMinDrill
|
||||
#define DRCE_NETCLASS_uVIASIZE 34 ///< netclass has ViaSize < board.m_designSettings->m_MicroViasMinSize
|
||||
#define DRCE_NETCLASS_uVIADRILLSIZE 35 ///< netclass has ViaSize < board.m_designSettings->m_MicroViasMinDrill
|
||||
#define DRCE_VIA_INSIDE_KEEPOUT 36 ///< Via in inside a keepout area
|
||||
#define DRCE_TRACK_INSIDE_KEEPOUT 37 ///< Track in inside a keepout area
|
||||
#define DRCE_PAD_INSIDE_KEEPOUT 38 ///< Pad in inside a keepout area
|
||||
|
||||
|
||||
class EDA_DRAW_PANEL;
|
||||
|
@ -155,15 +157,14 @@ private:
|
|||
bool m_doPad2PadTest;
|
||||
bool m_doUnconnectedTest;
|
||||
bool m_doZonesTest;
|
||||
bool m_doKeepoutTest;
|
||||
bool m_doCreateRptFile;
|
||||
|
||||
wxString m_rptFilename;
|
||||
|
||||
// int m_errorCount;
|
||||
|
||||
MARKER_PCB* m_currentMarker;
|
||||
|
||||
bool m_aboartDRC;
|
||||
bool m_abortDRC;
|
||||
bool m_drcInProgress;
|
||||
|
||||
/* In DRC functions, many calculations are using coordinates relative
|
||||
|
@ -182,7 +183,7 @@ private:
|
|||
int m_segmLength; // length of the reference segment
|
||||
|
||||
/* variables used in checkLine to test DRC segm to segm:
|
||||
* define the area relative to the ref segment that does not contains anu other segment
|
||||
* define the area relative to the ref segment that does not contains any other segment
|
||||
*/
|
||||
int m_xcliplo;
|
||||
int m_ycliplo;
|
||||
|
@ -278,6 +279,7 @@ private:
|
|||
|
||||
void testZones();
|
||||
|
||||
void testKeepoutAreas();
|
||||
|
||||
//-----<single "item" tests>-----------------------------------------
|
||||
|
||||
|
@ -305,6 +307,15 @@ private:
|
|||
*/
|
||||
bool doTrackDrc( TRACK* aRefSeg, TRACK* aStart, bool doPads = true );
|
||||
|
||||
/**
|
||||
* Function doTrackKeepoutDrc
|
||||
* tests the current segment or via.
|
||||
* @param aRefSeg The segment to test
|
||||
* @return bool - true if no poblems, else false and m_currentMarker is
|
||||
* filled in with the problem information.
|
||||
*/
|
||||
bool doTrackKeepoutDrc( TRACK* aRefSeg );
|
||||
|
||||
|
||||
/**
|
||||
* Function doEdgeZoneDrc
|
||||
|
@ -412,7 +423,10 @@ public:
|
|||
{
|
||||
updatePointers();
|
||||
|
||||
return doTrackDrc( aRefSeg, aList ) ? OK_DRC : BAD_DRC;
|
||||
if( ! doTrackDrc( aRefSeg, aList ) )
|
||||
return BAD_DRC;
|
||||
|
||||
return doTrackKeepoutDrc( aRefSeg ) ? OK_DRC : BAD_DRC;
|
||||
}
|
||||
|
||||
|
||||
|
@ -443,11 +457,13 @@ public:
|
|||
* @param aSaveReport A boolean telling whether to generate disk file report.
|
||||
*/
|
||||
void SetSettings( bool aPad2PadTest, bool aUnconnectedTest,
|
||||
bool aZonesTest, const wxString& aReportName, bool aSaveReport )
|
||||
bool aZonesTest, bool aKeepoutTest,
|
||||
const wxString& aReportName, bool aSaveReport )
|
||||
{
|
||||
m_doPad2PadTest = aPad2PadTest;
|
||||
m_doUnconnectedTest = aUnconnectedTest;
|
||||
m_doZonesTest = aZonesTest;
|
||||
m_doKeepoutTest = aKeepoutTest;
|
||||
m_rptFilename = aReportName;
|
||||
m_doCreateRptFile = aSaveReport;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
#include <class_module.h>
|
||||
#include <class_track.h>
|
||||
#include <class_zone.h>
|
||||
#include <class_pcb_text.h>
|
||||
#include <modview_frame.h>
|
||||
#include <class_pcb_layer_box_selector.h>
|
||||
|
||||
|
@ -83,6 +84,7 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
|||
case ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR:
|
||||
case ID_POPUP_PCB_ROTATE_TEXTEPCB:
|
||||
case ID_POPUP_PCB_FLIP_TEXTEPCB:
|
||||
case ID_POPUP_PCB_COPY_TEXTEPCB:
|
||||
case ID_POPUP_PCB_EDIT_TEXTEPCB:
|
||||
case ID_POPUP_PCB_EDIT_MIRE:
|
||||
case ID_POPUP_PCB_ROTATE_TEXTMODULE:
|
||||
|
@ -939,6 +941,12 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
|||
m_canvas->MoveCursorToCrossHair();
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_COPY_TEXTEPCB:
|
||||
CreateTextePcb( &dc, (TEXTE_PCB*) GetCurItem() );
|
||||
m_canvas->MoveCursorToCrossHair();
|
||||
m_canvas->SetAutoPanRequest( true );
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_FLIP_TEXTEPCB:
|
||||
FlipTextePcb( (TEXTE_PCB*) GetCurItem(), &dc );
|
||||
m_canvas->MoveCursorToCrossHair();
|
||||
|
@ -1335,6 +1343,10 @@ void PCB_EDIT_FRAME::OnSelectTool( wxCommandEvent& aEvent )
|
|||
|
||||
break;
|
||||
|
||||
case ID_PCB_KEEPOUT_AREA_BUTT:
|
||||
SetToolID( id, wxCURSOR_PENCIL, _( "Add keepout" ) );
|
||||
break;
|
||||
|
||||
case ID_PCB_MIRE_BUTT:
|
||||
SetToolID( id, wxCURSOR_PENCIL, _( "Add layer alignment target" ) );
|
||||
break;
|
||||
|
|
|
@ -121,27 +121,24 @@ void PCB_EDIT_FRAME::Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
|
|||
}
|
||||
|
||||
|
||||
/* Initialize parameters to move a pcb text
|
||||
*/
|
||||
void PCB_EDIT_FRAME::StartMoveTextePcb( TEXTE_PCB* TextePcb, wxDC* DC )
|
||||
void PCB_EDIT_FRAME::StartMoveTextePcb( TEXTE_PCB* aTextePcb, wxDC* aDC, bool aErase )
|
||||
{
|
||||
if( TextePcb == NULL )
|
||||
if( aTextePcb == NULL )
|
||||
return;
|
||||
|
||||
// if it is an existing item: prepare a copy to undo/abort command
|
||||
if( !TextePcb->IsNew() )
|
||||
s_TextCopy.Copy( TextePcb );
|
||||
if( !aTextePcb->IsNew() )
|
||||
s_TextCopy.Copy( aTextePcb );
|
||||
|
||||
TextePcb->Draw( m_canvas, DC, GR_XOR );
|
||||
TextePcb->SetFlags( IS_MOVED );
|
||||
TextePcb->DisplayInfo( this );
|
||||
aTextePcb->SetFlags( IS_MOVED );
|
||||
aTextePcb->DisplayInfo( this );
|
||||
|
||||
GetScreen()->SetCrossHairPosition( TextePcb->GetPosition() );
|
||||
GetScreen()->SetCrossHairPosition( aTextePcb->GetPosition() );
|
||||
m_canvas->MoveCursorToCrossHair();
|
||||
|
||||
m_canvas->SetMouseCapture( Move_Texte_Pcb, Abort_Edit_Pcb_Text );
|
||||
SetCurItem( TextePcb );
|
||||
m_canvas->CallMouseCapture( DC, wxDefaultPosition, false );
|
||||
SetCurItem( aTextePcb );
|
||||
m_canvas->CallMouseCapture( aDC, wxDefaultPosition, aErase );
|
||||
}
|
||||
|
||||
|
||||
|
@ -157,7 +154,7 @@ static void Move_Texte_Pcb( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aP
|
|||
if( aErase )
|
||||
TextePcb->Draw( aPanel, aDC, GR_XOR );
|
||||
|
||||
TextePcb->m_Pos = aPanel->GetScreen()->GetCrossHairPosition();
|
||||
TextePcb->SetPosition( aPanel->GetScreen()->GetCrossHairPosition() );
|
||||
|
||||
TextePcb->Draw( aPanel, aDC, GR_XOR );
|
||||
}
|
||||
|
@ -177,40 +174,46 @@ void PCB_EDIT_FRAME::Delete_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC )
|
|||
}
|
||||
|
||||
|
||||
TEXTE_PCB* PCB_EDIT_FRAME::Create_Texte_Pcb( wxDC* DC )
|
||||
TEXTE_PCB* PCB_EDIT_FRAME::CreateTextePcb( wxDC* aDC, TEXTE_PCB* aText )
|
||||
{
|
||||
TEXTE_PCB* TextePcb;
|
||||
TEXTE_PCB* textePcb = new TEXTE_PCB( GetBoard() );
|
||||
|
||||
TextePcb = new TEXTE_PCB( GetBoard() );
|
||||
|
||||
/* Add text to the board item list. */
|
||||
GetBoard()->Add( TextePcb );
|
||||
|
||||
/* Update text properties. */
|
||||
TextePcb->SetFlags( IS_NEW );
|
||||
TextePcb->SetLayer( ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer );
|
||||
TextePcb->m_Mirror = false;
|
||||
|
||||
if( TextePcb->GetLayer() == LAYER_N_BACK )
|
||||
TextePcb->m_Mirror = true;
|
||||
|
||||
TextePcb->m_Size = GetBoard()->GetDesignSettings().m_PcbTextSize;
|
||||
TextePcb->m_Pos = GetScreen()->GetCrossHairPosition();
|
||||
TextePcb->m_Thickness = GetBoard()->GetDesignSettings().m_PcbTextWidth;
|
||||
|
||||
InstallTextPCBOptionsFrame( TextePcb, DC );
|
||||
|
||||
if( TextePcb->m_Text.IsEmpty() )
|
||||
if( aText )
|
||||
{
|
||||
TextePcb->DeleteStructure();
|
||||
TextePcb = NULL;
|
||||
textePcb->Copy( aText );
|
||||
GetBoard()->Add( textePcb );
|
||||
textePcb->SetFlags( IS_NEW );
|
||||
StartMoveTextePcb( textePcb, aDC, false ); // Don't erase aText when copying
|
||||
}
|
||||
else
|
||||
{
|
||||
StartMoveTextePcb( TextePcb, DC );
|
||||
GetBoard()->Add( textePcb );
|
||||
textePcb->SetFlags( IS_NEW );
|
||||
int layer = ( (PCB_SCREEN*) GetScreen() )->m_Active_Layer;
|
||||
textePcb->SetLayer( layer );
|
||||
|
||||
if( layer == LAYER_N_BACK
|
||||
|| layer == SILKSCREEN_N_BACK )
|
||||
textePcb->SetMirrored( true );
|
||||
|
||||
textePcb->SetSize( GetBoard()->GetDesignSettings().m_PcbTextSize );
|
||||
textePcb->SetPosition( GetScreen()->GetCrossHairPosition() );
|
||||
textePcb->SetThickness( GetBoard()->GetDesignSettings().m_PcbTextWidth );
|
||||
|
||||
InstallTextPCBOptionsFrame( textePcb, aDC );
|
||||
|
||||
if( textePcb->GetText().IsEmpty() )
|
||||
{
|
||||
textePcb->DeleteStructure();
|
||||
textePcb = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
StartMoveTextePcb( textePcb, aDC );
|
||||
}
|
||||
}
|
||||
|
||||
return TextePcb;
|
||||
return textePcb;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -424,17 +424,39 @@ void EXCELLON_WRITER::WriteCoordinates( char* aLine, double aCoordX, double aCoo
|
|||
int xpad = m_precision.m_lhs + m_precision.m_rhs;
|
||||
int ypad = xpad;
|
||||
|
||||
/* I need to come up with an algorithm that handles any lhs:rhs format.*/
|
||||
/* one idea is to take more inputs for xpad/ypad when metric is used. */
|
||||
|
||||
switch( DIALOG_GENDRILL::m_ZerosFormat )
|
||||
{
|
||||
default:
|
||||
case DECIMAL_FORMAT:
|
||||
sprintf( aLine, "X%.3fY%.3f\n", aCoordX, aCoordY );
|
||||
/* In Excellon files, resolution is 1/1000 mm or 1/10000 inch (0.1 mil)
|
||||
* Although in decimal format, Excellon specifications do not specify
|
||||
* clearly the resolution. However it seems to be 1/1000mm or 0.1 mil
|
||||
* like in non decimal formats, so we trunk coordinates to 3 or 4 digits in mantissa
|
||||
* Decimal format just prohibit useless leading 0:
|
||||
* 0.45 or .45 is right, but 00.54 is incorrect.
|
||||
*/
|
||||
if( m_unitsDecimal )
|
||||
{
|
||||
// resolution is 1/1000 mm
|
||||
xs.Printf( wxT( "%.3f" ), aCoordX );
|
||||
ys.Printf( wxT( "%.3f" ), aCoordY );
|
||||
}
|
||||
else
|
||||
{
|
||||
// resolution is 1/10000 inch
|
||||
xs.Printf( wxT( "%.4f" ), aCoordX );
|
||||
ys.Printf( wxT( "%.4f" ), aCoordY );
|
||||
}
|
||||
|
||||
//Remove useless trailing 0
|
||||
while( xs.Last() == '0' )
|
||||
xs.RemoveLast();
|
||||
while( ys.Last() == '0' )
|
||||
ys.RemoveLast();
|
||||
sprintf( aLine, "X%sY%s\n", TO_UTF8( xs ), TO_UTF8( ys ) );
|
||||
break;
|
||||
|
||||
case SUPPRESS_LEADING: /* that should work now */
|
||||
case SUPPRESS_LEADING:
|
||||
for( int i = 0; i< m_precision.m_rhs; i++ )
|
||||
{
|
||||
aCoordX *= 10; aCoordY *= 10;
|
||||
|
|
|
@ -399,6 +399,7 @@ bool MODULE::Read_GPCB_Descr( const wxString& CmpFullFileName )
|
|||
// format: Pad [x1 y1 x2 y2 thickness clearance mask "name" "pad_number" flags]
|
||||
pad = new D_PAD( this );
|
||||
pad->SetShape( PAD_RECT );
|
||||
pad->SetAttribute( PAD_SMD );
|
||||
pad->SetLayerMask( LAYER_FRONT | SOLDERMASK_LAYER_FRONT | SOLDERPASTE_LAYER_FRONT );
|
||||
|
||||
// Set shape from flags
|
||||
|
|
|
@ -70,6 +70,7 @@ static EDA_HOTKEY HkEditBoardItem( wxT( "Edit Item" ), HK_EDIT_ITEM, 'E' );
|
|||
static EDA_HOTKEY HkFlipItem( wxT( "Flip Item" ), HK_FLIP_ITEM, 'F' );
|
||||
static EDA_HOTKEY HkRotateItem( wxT( "Rotate Item" ), HK_ROTATE_ITEM, 'R' );
|
||||
static EDA_HOTKEY HkMoveItem( wxT( "Move Item" ), HK_MOVE_ITEM, 'M' );
|
||||
static EDA_HOTKEY HkCopyItem( wxT( "Copy Item" ), HK_COPY_ITEM, 'C' );
|
||||
static EDA_HOTKEY HkDragFootprint( wxT( "Drag Footprint" ), HK_DRAG_ITEM, 'G' );
|
||||
static EDA_HOTKEY HkGetAndMoveFootprint( wxT( "Get and Move Footprint" ),
|
||||
HK_GET_AND_MOVE_FOOTPRINT, 'T' );
|
||||
|
@ -209,7 +210,7 @@ EDA_HOTKEY* board_edit_Hotkey_List[] =
|
|||
&HkAddNewTrack, &HkAddVia, &HkAddMicroVia,
|
||||
&HkSwitchTrackPosture,
|
||||
&HkDragTrackKeepSlope,
|
||||
&HkPlaceItem,
|
||||
&HkPlaceItem, &HkCopyItem,
|
||||
&HkEndTrack, &HkMoveItem, &HkFlipItem,
|
||||
&HkRotateItem, &HkDragFootprint,
|
||||
&HkGetAndMoveFootprint, &HkLock_Unlock_Footprint, &HkSavefile,
|
||||
|
|
|
@ -15,6 +15,7 @@ enum hotkey_id_commnand {
|
|||
HK_BACK_SPACE,
|
||||
HK_ROTATE_ITEM,
|
||||
HK_FLIP_ITEM,
|
||||
HK_COPY_ITEM,
|
||||
HK_MOVE_ITEM,
|
||||
HK_DRAG_ITEM,
|
||||
HK_GET_AND_MOVE_FOOTPRINT,
|
||||
|
|
|
@ -620,6 +620,10 @@ void PCB_EDIT_FRAME::OnHotKey( wxDC* aDC, int aHotkeyCode, const wxPoint& aPosit
|
|||
OnHotkeyMoveItem( HK_MOVE_ITEM );
|
||||
break;
|
||||
|
||||
case HK_COPY_ITEM:
|
||||
evt_type = OnHotkeyCopyItem();
|
||||
break;
|
||||
|
||||
case HK_ROTATE_ITEM: // Rotation
|
||||
OnHotkeyRotateItem( HK_ROTATE_ITEM );
|
||||
break;
|
||||
|
@ -715,6 +719,7 @@ bool PCB_EDIT_FRAME::OnHotkeyDeleteItem( wxDC* aDC )
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool PCB_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand )
|
||||
{
|
||||
BOARD_ITEM* item = GetCurItem();
|
||||
|
@ -810,6 +815,37 @@ bool PCB_EDIT_FRAME::OnHotkeyEditItem( int aIdCommand )
|
|||
}
|
||||
|
||||
|
||||
int PCB_EDIT_FRAME::OnHotkeyCopyItem()
|
||||
{
|
||||
BOARD_ITEM* item = GetCurItem();
|
||||
bool itemCurrentlyEdited = item && item->GetFlags();
|
||||
|
||||
if( itemCurrentlyEdited )
|
||||
return 0;
|
||||
|
||||
item = PcbGeneralLocateAndDisplay();
|
||||
|
||||
if( item == NULL )
|
||||
return 0;
|
||||
|
||||
SetCurItem( item );
|
||||
|
||||
int eventId = 0;
|
||||
|
||||
switch( item->Type() )
|
||||
{
|
||||
case PCB_TEXT_T:
|
||||
eventId = ID_POPUP_PCB_COPY_TEXTEPCB;
|
||||
break;
|
||||
default:
|
||||
eventId = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return eventId;
|
||||
}
|
||||
|
||||
|
||||
bool PCB_EDIT_FRAME::OnHotkeyMoveItem( int aIdCommand )
|
||||
{
|
||||
BOARD_ITEM* item = GetCurItem();
|
||||
|
|
|
@ -134,11 +134,7 @@ void PCB_IO::Format( BOARD_ITEM* aItem, int aNestLevel ) const
|
|||
|
||||
void PCB_IO::formatLayer( const BOARD_ITEM* aItem ) const
|
||||
{
|
||||
#if 1
|
||||
m_out->Print( 0, " (layer %s)", m_out->Quotew( aItem->GetLayerName() ).c_str() );
|
||||
#else
|
||||
m_out->Print( 0, " (layer %d)", aItem->GetLayer() );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -181,15 +177,9 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const
|
|||
{
|
||||
if( mask & aBoard->GetEnabledLayers() )
|
||||
{
|
||||
#if USE_LAYER_NAMES
|
||||
m_out->Print( aNestLevel+1, "(%d %s %s", layer,
|
||||
m_out->Quotew( aBoard->GetLayerName( layer ) ).c_str(),
|
||||
LAYER::ShowType( aBoard->GetLayerType( layer ) ) );
|
||||
#else
|
||||
m_out->Print( aNestLevel+1, "(%d %s %s", layer,
|
||||
m_out->Quotew( aBoard->GetLayerName( layer ) ).c_str(),
|
||||
LAYER::ShowType( aBoard->GetLayerType( layer ) ) );
|
||||
#endif
|
||||
|
||||
if( !( aBoard->GetVisibleLayers() & mask ) )
|
||||
m_out->Print( 0, " hide" );
|
||||
|
@ -209,13 +199,8 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const
|
|||
{
|
||||
if( mask & aBoard->GetEnabledLayers() )
|
||||
{
|
||||
#if USE_LAYER_NAMES
|
||||
m_out->Print( aNestLevel+1, "(%d %s user", layer,
|
||||
m_out->Quotew( aBoard->GetLayerName( layer ) ).c_str() );
|
||||
#else
|
||||
m_out->Print( aNestLevel+1, "(%d %s user", layer,
|
||||
m_out->Quotew( aBoard->GetLayerName( layer ) ).c_str() );
|
||||
#endif
|
||||
|
||||
if( !( aBoard->GetVisibleLayers() & mask ) )
|
||||
m_out->Print( 0, " hide" );
|
||||
|
@ -325,9 +310,7 @@ void PCB_IO::format( BOARD* aBoard, int aNestLevel ) const
|
|||
m_out->Print( aNestLevel+1, "(visible_elements %X)\n",
|
||||
aBoard->GetDesignSettings().GetVisibleElements() );
|
||||
|
||||
#if SAVE_PCB_PLOT_PARAMS
|
||||
aBoard->GetPlotOptions().Format( m_out, aNestLevel+1 );
|
||||
#endif
|
||||
|
||||
m_out->Print( aNestLevel, ")\n\n" );
|
||||
|
||||
|
@ -770,8 +753,11 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
|
|||
if( aPad->GetDrillShape() == PAD_OVAL )
|
||||
m_out->Print( 0, " oval" );
|
||||
|
||||
m_out->Print( 0, " (size %s)", (sz.GetHeight() != sz.GetWidth()) ? FMT_IU( sz ).c_str() :
|
||||
FMT_IU( sz.GetWidth() ).c_str() );
|
||||
if( sz.GetWidth() > 0 )
|
||||
m_out->Print( 0, " %s", FMT_IU( sz.GetWidth() ).c_str() );
|
||||
|
||||
if( sz.GetHeight() > 0 && sz.GetWidth() != sz.GetHeight() )
|
||||
m_out->Print( 0, " %s", FMT_IU( sz.GetHeight() ).c_str() );
|
||||
|
||||
if( (aPad->GetOffset().x != 0) || (aPad->GetOffset().y != 0) )
|
||||
m_out->Print( 0, " (offset %s)", FMT_IU( aPad->GetOffset() ).c_str() );
|
||||
|
@ -789,18 +775,18 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
|
|||
{
|
||||
if( layerMask & 1 )
|
||||
{
|
||||
#if 1
|
||||
m_out->Print( 0, " %s", m_out->Quotew( m_board->GetLayerName( layer ) ).c_str() );
|
||||
#else
|
||||
m_out->Print( 0, " %d", layer );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
m_out->Print( 0, ")\n" );
|
||||
|
||||
// Unconnected pad is default net so don't save it.
|
||||
if( aPad->GetNet() != 0 )
|
||||
{
|
||||
m_out->Print( aNestLevel+1, "(net %d %s)\n",
|
||||
aPad->GetNet(), m_out->Quotew( aPad->GetNetname() ).c_str() );
|
||||
}
|
||||
|
||||
if( aPad->GetDieLength() != 0 )
|
||||
m_out->Print( aNestLevel+1, "(die_length %s)\n",
|
||||
|
@ -944,13 +930,9 @@ void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const
|
|||
if( aTrack->GetDrill() != UNDEFINED_DRILL_DIAMETER )
|
||||
m_out->Print( 0, " (drill %s)", FMT_IU( aTrack->GetDrill() ).c_str() );
|
||||
|
||||
#if 1
|
||||
m_out->Print( 0, " (layers %s %s)",
|
||||
m_out->Quotew( m_board->GetLayerName( layer1 ) ).c_str(),
|
||||
m_out->Quotew( m_board->GetLayerName( layer2 ) ).c_str() );
|
||||
#else
|
||||
m_out->Print( 0, " (layers %d %d)", layer1, layer2 );
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -958,11 +940,7 @@ void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const
|
|||
FMT_IU( aTrack->GetStart() ).c_str(), FMT_IU( aTrack->GetEnd() ).c_str(),
|
||||
FMT_IU( aTrack->GetWidth() ).c_str() );
|
||||
|
||||
#if 1
|
||||
m_out->Print( 0, " (layer %s)", m_out->Quotew( aTrack->GetLayerName() ).c_str() );
|
||||
#else
|
||||
m_out->Print( 0, " (layer %d)", aTrack->GetLayer() );
|
||||
#endif
|
||||
}
|
||||
|
||||
m_out->Print( 0, " (net %d)", aTrack->GetNet() );
|
||||
|
@ -1012,6 +990,10 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
|
|||
case THERMAL_PAD: // Default option not saved or loaded.
|
||||
break;
|
||||
|
||||
case THT_THERMAL:
|
||||
m_out->Print( 0, " thru_hole_only" );
|
||||
break;
|
||||
|
||||
case PAD_IN_ZONE:
|
||||
m_out->Print( 0, " yes" );
|
||||
break;
|
||||
|
@ -1027,6 +1009,14 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
|
|||
m_out->Print( aNestLevel+1, "(min_thickness %s)\n",
|
||||
FMT_IU( aZone->GetMinThickness() ).c_str() );
|
||||
|
||||
if( aZone->GetIsKeepout() )
|
||||
{
|
||||
m_out->Print( aNestLevel+1, "(keepout (tracks %s) (vias %s) (copperpour %s))\n",
|
||||
aZone->GetDoNotAllowTracks() ? "not_allowed" : "allowed",
|
||||
aZone->GetDoNotAllowVias() ? "not_allowed" : "allowed",
|
||||
aZone->GetDoNotAllowCopperPour() ? "not_allowed" : "allowed" );
|
||||
}
|
||||
|
||||
m_out->Print( aNestLevel+1, "(fill" );
|
||||
|
||||
// Default is not filled.
|
||||
|
@ -1197,7 +1187,9 @@ BOARD* PCB_IO::Load( const wxString& aFileName, BOARD* aAppendToMe, PROPERTIES*
|
|||
|
||||
if( !file.IsOpened() )
|
||||
{
|
||||
THROW_IO_ERROR( _( "Unable to read file \"" ) + aFileName + wxT( "\"" ) );
|
||||
wxString msg;
|
||||
msg.Printf( _( "Unable to read file \"%s\"" ), GetChars( aFileName ) );
|
||||
THROW_IO_ERROR( msg );
|
||||
}
|
||||
|
||||
PCB_PARSER parser( new FILE_LINE_READER( file.fp(), aFileName ), aAppendToMe );
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2007-2012 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.fr
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see change_log.txt for contributors.
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jp.charras@wanadoo.fr
|
||||
* Copyright (C) 1992-2012 KiCad Developers, see change_log.txt for contributors.
|
||||
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -106,10 +106,16 @@ typedef LEGACY_PLUGIN::BIU BIU;
|
|||
#define SZ( x ) (sizeof(x)-1)
|
||||
|
||||
|
||||
static const char delims[] = " \t\r\n";
|
||||
|
||||
|
||||
static bool inline isSpace( int c ) { return strchr( delims, c ) != 0; }
|
||||
|
||||
|
||||
//-----<BOARD Load Functions>---------------------------------------------------
|
||||
|
||||
/// C string compare test for a specific length of characters.
|
||||
#define TESTLINE( x ) ( !strnicmp( line, x, SZ( x ) ) && isspace( line[SZ( x )] ) )
|
||||
#define TESTLINE( x ) ( !strnicmp( line, x, SZ( x ) ) && isSpace( line[SZ( x )] ) )
|
||||
|
||||
/// C sub-string compare test for a specific length of characters.
|
||||
#define TESTSUBSTR( x ) ( !strnicmp( line, x, SZ( x ) ) )
|
||||
|
@ -141,7 +147,6 @@ static inline unsigned ReadLine( LINE_READER* rdr, const char* caller )
|
|||
#define READLINE( rdr ) ReadLine( rdr, __FUNCTION__ )
|
||||
#endif
|
||||
|
||||
static const char delims[] = " \t\r\n";
|
||||
|
||||
using namespace std; // auto_ptr
|
||||
|
||||
|
@ -355,12 +360,6 @@ void LEGACY_PLUGIN::loadGENERAL()
|
|||
{
|
||||
#if defined( USE_PCBNEW_NANOMETRES )
|
||||
diskToBiu = IU_PER_MM;
|
||||
|
||||
#elif defined(DEBUG)
|
||||
// mm to deci-mils:
|
||||
// advanced testing of round tripping only, not supported in non DEBUG build
|
||||
diskToBiu = IU_PER_MM;
|
||||
|
||||
#else
|
||||
THROW_IO_ERROR( _( "May not load millimeter *.brd file into 'Pcbnew compiled for deci-mils'" ) );
|
||||
#endif
|
||||
|
@ -1107,8 +1106,10 @@ void LEGACY_PLUGIN::loadPAD( MODULE* aModule )
|
|||
data = data + ReadDelimitedText( mypadname, data, sizeof(mypadname) ) + 1; // +1 trailing whitespace
|
||||
|
||||
// sscanf( PtLine, " %s %d %d %d %d %d", BufCar, &m_Size.x, &m_Size.y, &m_DeltaSize.x, &m_DeltaSize.y, &m_Orient );
|
||||
|
||||
while( isSpace( *data ) )
|
||||
++data;
|
||||
int padshape = *data++;
|
||||
|
||||
BIU size_x = biuParse( data, &data );
|
||||
BIU size_y = biuParse( data, &data );
|
||||
BIU delta_x = biuParse( data, &data );
|
||||
|
@ -1719,13 +1720,11 @@ void LEGACY_PLUGIN::loadPCB_LINE()
|
|||
THROW_IO_ERROR( "Missing '$EndDRAWSEGMENT'" );
|
||||
}
|
||||
|
||||
|
||||
void LEGACY_PLUGIN::loadNETINFO_ITEM()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
NETINFO_ITEM* net = new NETINFO_ITEM( m_board );
|
||||
m_board->AppendNet( net );
|
||||
|
||||
while( READLINE( m_reader ) )
|
||||
{
|
||||
|
@ -1744,8 +1743,16 @@ void LEGACY_PLUGIN::loadNETINFO_ITEM()
|
|||
}
|
||||
|
||||
else if( TESTLINE( "$EndEQUIPOT" ) )
|
||||
{
|
||||
// net 0 should be already in list, so store this net
|
||||
// if it is not the net 0, or if the net 0 does not exists.
|
||||
if( net->GetNet() > 0 || m_board->FindNet( 0 ) == NULL )
|
||||
m_board->AppendNet( net );
|
||||
else
|
||||
delete net;
|
||||
return; // preferred exit
|
||||
}
|
||||
}
|
||||
|
||||
THROW_IO_ERROR( "Missing '$EndEQUIPOT'" );
|
||||
}
|
||||
|
@ -2141,8 +2148,11 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
|||
}
|
||||
|
||||
zc->SetTimeStamp( timestamp );
|
||||
zc->SetNet( netcode );
|
||||
zc->SetNetName( FROM_UTF8( buf ) );
|
||||
// Init the net code only, not the netname, to be sure
|
||||
// the zone net name is the name read in file.
|
||||
// (When mismatch, the user will be prompted in DRC, to fix the actual name)
|
||||
zc->BOARD_CONNECTED_ITEM::SetNet( netcode );
|
||||
zc->SetNetName( FROM_UTF8( buf ) ); // init the net name here
|
||||
}
|
||||
|
||||
else if( TESTLINE( "ZLayer" ) ) // layer found
|
||||
|
@ -2195,6 +2205,34 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
|||
zc->SetCornerRadius( cornerRadius );
|
||||
}
|
||||
|
||||
else if( TESTLINE( "ZKeepout" ) )
|
||||
{
|
||||
zc->SetIsKeepout( true );
|
||||
// e.g. "ZKeepout tracks N vias N pads Y"
|
||||
data = strtok( line + SZ( "ZKeepout" ), delims );
|
||||
|
||||
while( data )
|
||||
{
|
||||
if( !strcmp( data, "tracks" ) )
|
||||
{
|
||||
data = strtok( NULL, delims );
|
||||
zc->SetDoNotAllowTracks( data && *data == 'N' );
|
||||
}
|
||||
else if( !strcmp( data, "vias" ) )
|
||||
{
|
||||
data = strtok( NULL, delims );
|
||||
zc->SetDoNotAllowVias( data && *data == 'N' );
|
||||
}
|
||||
else if( !strcmp( data, "copperpour" ) )
|
||||
{
|
||||
data = strtok( NULL, delims );
|
||||
zc->SetDoNotAllowCopperPour( data && *data == 'N' );
|
||||
}
|
||||
|
||||
data = strtok( NULL, delims );
|
||||
}
|
||||
}
|
||||
|
||||
else if( TESTLINE( "ZOptions" ) )
|
||||
{
|
||||
// e.g. "ZOptions 0 32 F 200 200"
|
||||
|
@ -2229,6 +2267,7 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
|||
{
|
||||
case 'I': popt = PAD_IN_ZONE; break;
|
||||
case 'T': popt = THERMAL_PAD; break;
|
||||
case 'H': popt = THT_THERMAL; break;
|
||||
case 'X': popt = PAD_NOT_IN_ZONE; break;
|
||||
|
||||
default:
|
||||
|
@ -2563,15 +2602,16 @@ void LEGACY_PLUGIN::loadPCB_TARGET()
|
|||
}
|
||||
|
||||
|
||||
#define SPBUFZ 50 // wire all usages of this together.
|
||||
|
||||
int LEGACY_PLUGIN::biuSprintf( char* buf, BIU aValue ) const
|
||||
{
|
||||
double engUnits = biuToDisk * aValue;
|
||||
int len;
|
||||
|
||||
if( engUnits != 0.0 && fabs( engUnits ) <= 0.0001 )
|
||||
if( engUnits != 0.0 && fabsl( engUnits ) <= 0.0001 )
|
||||
{
|
||||
// printf( "f: " );
|
||||
len = sprintf( buf, "%.10f", engUnits );
|
||||
len = snprintf( buf, SPBUFZ, "%.10f", engUnits );
|
||||
|
||||
while( --len > 0 && buf[len] == '0' )
|
||||
buf[len] = '\0';
|
||||
|
@ -2580,8 +2620,16 @@ int LEGACY_PLUGIN::biuSprintf( char* buf, BIU aValue ) const
|
|||
}
|
||||
else
|
||||
{
|
||||
// printf( "g: " );
|
||||
len = sprintf( buf, "%.10g", engUnits );
|
||||
// The %.10g is about optimal since we are dealing with a bounded
|
||||
// range on aValue, and we can be sure that there will never
|
||||
// be a reason to have more than 6 digits to the right of the
|
||||
// decimal point because we are converting from integer
|
||||
// (signed whole numbers) nanometers to mm. A value of
|
||||
// 0.000001 is one nanometer, the smallest positive nonzero value
|
||||
// that we can ever have here. If you ever see a board file with
|
||||
// more digits to the right of the decimal point than 6, this is a
|
||||
// possibly a bug in a formatting string nearby.
|
||||
len = snprintf( buf, SPBUFZ, "%.10g", engUnits );
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
@ -2589,7 +2637,7 @@ int LEGACY_PLUGIN::biuSprintf( char* buf, BIU aValue ) const
|
|||
|
||||
std::string LEGACY_PLUGIN::fmtBIU( BIU aValue ) const
|
||||
{
|
||||
char temp[50];
|
||||
char temp[SPBUFZ];
|
||||
|
||||
int len = biuSprintf( temp, aValue );
|
||||
|
||||
|
@ -2603,7 +2651,8 @@ std::string LEGACY_PLUGIN::fmtDEG( double aAngle ) const
|
|||
|
||||
// @todo a hook site to convert from tenths degrees to degrees for BOARD_FORMAT_VERSION 2.
|
||||
|
||||
int len = sprintf( temp, "%.10g", aAngle );
|
||||
// MINGW: snprintf() comes from gcc folks, sprintf() comes from Microsoft.
|
||||
int len = snprintf( temp, sizeof( temp ), "%.10g", aAngle );
|
||||
|
||||
return std::string( temp, len );
|
||||
}
|
||||
|
@ -2611,7 +2660,7 @@ std::string LEGACY_PLUGIN::fmtDEG( double aAngle ) const
|
|||
|
||||
std::string LEGACY_PLUGIN::fmtBIUPair( BIU first, BIU second ) const
|
||||
{
|
||||
char temp[100];
|
||||
char temp[2*SPBUFZ+2];
|
||||
char* cp = temp;
|
||||
|
||||
cp += biuSprintf( cp, first );
|
||||
|
@ -2651,20 +2700,11 @@ BIU LEGACY_PLUGIN::biuParse( const char* aValue, const char** nptrptr )
|
|||
if( nptrptr )
|
||||
*nptrptr = nptr;
|
||||
|
||||
#if defined(DEBUG)
|
||||
fval *= diskToBiu;
|
||||
|
||||
if( diskToBiu == 10000/25.4 )
|
||||
{
|
||||
// this is the special reverse trip mm -> deci-mils testing run,
|
||||
// only available in DEBUG mode.
|
||||
return BIU( KiROUND( fval * diskToBiu ) );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// There should be no rounding issues here, since the values in the file initially
|
||||
// came from integers via biuFmt(). In fact this product should be an integer, exactly.
|
||||
return BIU( fval * diskToBiu );
|
||||
// fval is up into the whole number realm here, and should be bounded
|
||||
// within INT_MIN to INT_MAX since BIU's are nanometers.
|
||||
return KiROUND( fval );
|
||||
}
|
||||
|
||||
|
||||
|
@ -2706,20 +2746,20 @@ void LEGACY_PLUGIN::init( PROPERTIES* aProperties )
|
|||
|
||||
// conversion factor for saving RAM BIUs to KICAD legacy file format.
|
||||
#if defined( USE_PCBNEW_NANOMETRES )
|
||||
biuToDisk = 1/IU_PER_MM; // BIUs are nanometers & file is mm
|
||||
biuToDisk = 1.0/IU_PER_MM; // BIUs are nanometers & file is mm
|
||||
#else
|
||||
biuToDisk = 1.0; // BIUs are deci-mils
|
||||
#endif
|
||||
|
||||
// conversion factor for loading KICAD legacy file format into BIUs in RAM
|
||||
|
||||
// Conversion factor for loading KICAD legacy file format into BIUs in RAM
|
||||
// Start by assuming the *.brd file is in deci-mils.
|
||||
// if we see "Units mm" in the $GENERAL section, set diskToBiu to 1000000.0
|
||||
// If we see "Units mm" in the $GENERAL section, set diskToBiu to 1000000.0
|
||||
// then, during the file loading process, to start a conversion from
|
||||
// mm to nanometers.
|
||||
// mm to nanometers. The deci-mil legacy files have no such "Units" marker
|
||||
// so we must assume the file is in deci-mils until told otherwise.
|
||||
|
||||
diskToBiu = IU_PER_DECIMILS; // BIUs are nanometers if USE_PCBNEW_NANOMETRES
|
||||
// or BIUs are deci-mils
|
||||
diskToBiu = IU_PER_DECIMILS; // BIUs are nanometers if defined(USE_PCBNEW_NANOMETRES)
|
||||
// else are deci-mils
|
||||
}
|
||||
|
||||
|
||||
|
@ -3537,6 +3577,7 @@ void LEGACY_PLUGIN::saveZONE_CONTAINER( const ZONE_CONTAINER* me ) const
|
|||
default:
|
||||
case PAD_IN_ZONE: padoption = 'I'; break;
|
||||
case THERMAL_PAD: padoption = 'T'; break;
|
||||
case THT_THERMAL: padoption = 'H'; break; // H is for 'hole' since it reliefs holes only
|
||||
case PAD_NOT_IN_ZONE: padoption = 'X'; break;
|
||||
}
|
||||
|
||||
|
@ -3553,6 +3594,14 @@ void LEGACY_PLUGIN::saveZONE_CONTAINER( const ZONE_CONTAINER* me ) const
|
|||
fmtBIU( me->GetThermalReliefGap() ).c_str(),
|
||||
fmtBIU( me->GetThermalReliefCopperBridge() ).c_str() );
|
||||
|
||||
if( me->GetIsKeepout() )
|
||||
{
|
||||
fprintf( m_fp, "ZKeepout tracks %c vias %c copperpour %c\n",
|
||||
me->GetDoNotAllowTracks() ? 'N' : 'Y',
|
||||
me->GetDoNotAllowVias() ? 'N' : 'Y',
|
||||
me->GetDoNotAllowCopperPour() ? 'N' : 'Y' );
|
||||
}
|
||||
|
||||
fprintf( m_fp, "ZSmoothing %d %s\n",
|
||||
me->GetCornerSmoothingType(),
|
||||
fmtBIU( me->GetCornerRadius() ).c_str() );
|
||||
|
@ -3857,12 +3906,6 @@ void FPL_CACHE::ReadAndVerifyHeader( LINE_READER* aReader )
|
|||
{
|
||||
#if defined( USE_PCBNEW_NANOMETRES )
|
||||
m_owner->diskToBiu = IU_PER_MM;
|
||||
|
||||
#elif defined(DEBUG)
|
||||
// mm to deci-mils:
|
||||
// advanced testing of round tripping only, not supported in non DEBUG build
|
||||
m_owner->diskToBiu = IU_PER_MM;
|
||||
|
||||
#else
|
||||
THROW_IO_ERROR( _( "May not load millimeter legacy library file into 'Pcbnew compiled for deci-mils'" ) );
|
||||
#endif
|
||||
|
|
|
@ -126,12 +126,14 @@ protected:
|
|||
int m_loading_format_version; ///< which BOARD_FORMAT_VERSION am I Load()ing?
|
||||
FPL_CACHE* m_cache;
|
||||
|
||||
|
||||
/// initialize PLUGIN like a constructor would, and futz with fresh BOARD if needed.
|
||||
void init( PROPERTIES* aProperties );
|
||||
|
||||
double biuToDisk; ///< convert from BIUs to disk engineering units with this scale factor
|
||||
double diskToBiu; ///< convert from disk engineering units to BIUs with this scale factor
|
||||
double biuToDisk; ///< convert from BIUs to disk engineering units
|
||||
///< with this scale factor
|
||||
|
||||
double diskToBiu; ///< convert from disk engineering units to BIUs
|
||||
///< with this scale factor
|
||||
|
||||
/**
|
||||
* Function biuParse
|
||||
|
|
|
@ -370,6 +370,10 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
|
|||
AddMenuItem( placeMenu, ID_PCB_ZONES_BUTT,
|
||||
_( "&Zone" ), _( "Add filled zones" ), KiBitmap( add_zone_xpm ) );
|
||||
|
||||
// Keepout areas
|
||||
AddMenuItem( placeMenu, ID_PCB_KEEPOUT_AREA_BUTT,
|
||||
_( "&Zone" ), _( "Add keepout areas" ), KiBitmap( add_keepout_area_xpm ) );
|
||||
|
||||
// Text
|
||||
AddMenuItem( placeMenu, ID_PCB_ADD_TEXT_BUTT,
|
||||
_( "Te&xt" ), _( "Add text on copper layers or graphic text" ),
|
||||
|
|
|
@ -291,37 +291,13 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
|
|||
break;
|
||||
|
||||
case ID_PCB_ZONES_BUTT:
|
||||
|
||||
/* ZONE Tool is selected. Determine action for a left click:
|
||||
case ID_PCB_KEEPOUT_AREA_BUTT:
|
||||
/* ZONE or KEEPOUT Tool is selected. Determine action for a left click:
|
||||
* this can be start a new zone or select and move an existing zone outline corner
|
||||
* if found near the mouse cursor
|
||||
*/
|
||||
if( (DrawStruct == NULL) || (DrawStruct->GetFlags() == 0) )
|
||||
{
|
||||
#if 0 // Set to 1 to automatically edit a zone found under the mouse
|
||||
// there is no current item, try to find something under the mouse cursor
|
||||
DrawStruct = PcbGeneralLocateAndDisplay();
|
||||
bool hit_on_corner = false;
|
||||
|
||||
if( DrawStruct && (DrawStruct->Type() == PCB_ZONE_AREA_T) )
|
||||
{
|
||||
// We have a hit under mouse (a zone outline corner or segment)
|
||||
// test for a corner only because want to move corners only.
|
||||
ZONE_CONTAINER* edge_zone = (ZONE_CONTAINER*) DrawStruct;
|
||||
|
||||
if( edge_zone->HitTestForCorner( GetScreen()->RefPos( true ) ) ) // corner located!
|
||||
hit_on_corner = true;
|
||||
}
|
||||
|
||||
if( hit_on_corner )
|
||||
{
|
||||
m_canvas->MoveCursorToCrossHair();
|
||||
ZONE_CONTAINER* zone_cont = (ZONE_CONTAINER*) GetCurItem();
|
||||
m_canvas->SetAutoPanRequest( true );
|
||||
Start_Move_Zone_Corner( aDC, zone_cont, zone_cont->m_CornerSelection, false );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if( Begin_Zone( aDC ) )
|
||||
{
|
||||
m_canvas->SetAutoPanRequest( true );
|
||||
|
@ -346,7 +322,7 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
|
|||
case ID_PCB_ADD_TEXT_BUTT:
|
||||
if( (DrawStruct == NULL) || (DrawStruct->GetFlags() == 0) )
|
||||
{
|
||||
SetCurItem( Create_Texte_Pcb( aDC ) );
|
||||
SetCurItem( CreateTextePcb( aDC ) );
|
||||
m_canvas->MoveCursorToCrossHair();
|
||||
m_canvas->SetAutoPanRequest( true );
|
||||
}
|
||||
|
@ -521,6 +497,7 @@ void PCB_EDIT_FRAME::OnLeftDClick( wxDC* aDC, const wxPoint& aPosition )
|
|||
break;
|
||||
|
||||
case ID_PCB_ZONES_BUTT:
|
||||
case ID_PCB_KEEPOUT_AREA_BUTT:
|
||||
if( End_Zone( aDC ) )
|
||||
{
|
||||
m_canvas->SetAutoPanRequest( false );
|
||||
|
|
|
@ -329,6 +329,12 @@ bool PCB_EDIT_FRAME::OnRightClick( const wxPoint& aMousePos, wxMenu* aPopMenu )
|
|||
aPopMenu->AppendSeparator();
|
||||
break;
|
||||
|
||||
case ID_PCB_KEEPOUT_AREA_BUTT:
|
||||
AddMenuItem( aPopMenu, ID_POPUP_PCB_SELECT_LAYER,
|
||||
_( "Select Working Layer" ), KiBitmap( select_w_layer_xpm ) );
|
||||
aPopMenu->AppendSeparator();
|
||||
break;
|
||||
|
||||
case ID_TRACK_BUTT:
|
||||
if ( ! locate_track ) // This menu is already added when a track is located
|
||||
AddMenuItem( aPopMenu, Append_Track_Width_List( GetBoard() ),
|
||||
|
@ -601,7 +607,9 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu*
|
|||
{
|
||||
wxMenu* zones_menu = new wxMenu();
|
||||
|
||||
AddMenuItem( aPopMenu, zones_menu, -1, _( "Zones" ), KiBitmap( add_zone_xpm ) );
|
||||
AddMenuItem( aPopMenu, zones_menu, -1,
|
||||
edge_zone->GetIsKeepout() ? _("Keepout Area") : _( "Zones" ),
|
||||
KiBitmap( add_zone_xpm ) );
|
||||
|
||||
if( edge_zone->HitTestForCorner( GetScreen()->RefPos( true ) ) )
|
||||
{
|
||||
|
@ -632,6 +640,7 @@ void PCB_EDIT_FRAME::createPopUpMenuForZones( ZONE_CONTAINER* edge_zone, wxMenu*
|
|||
|
||||
zones_menu->AppendSeparator();
|
||||
|
||||
if( ! edge_zone->GetIsKeepout() )
|
||||
AddMenuItem( zones_menu, ID_POPUP_PCB_FILL_ZONE, _( "Fill Zone" ),
|
||||
KiBitmap( fill_zone_xpm ) );
|
||||
|
||||
|
@ -839,6 +848,9 @@ void PCB_EDIT_FRAME::createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu )
|
|||
msg = AddHotkeyName( _( "Move" ), g_Board_Editor_Hokeys_Descr, HK_MOVE_ITEM );
|
||||
AddMenuItem( sub_menu_Text, ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST,
|
||||
msg, KiBitmap( move_text_xpm ) );
|
||||
msg = AddHotkeyName( _( "Copy" ), g_Board_Editor_Hokeys_Descr, HK_COPY_ITEM );
|
||||
AddMenuItem( sub_menu_Text, ID_POPUP_PCB_COPY_TEXTEPCB,
|
||||
msg, KiBitmap( copyblock_xpm ) );
|
||||
}
|
||||
|
||||
msg = AddHotkeyName( _( "Rotate" ), g_Board_Editor_Hokeys_Descr, HK_ROTATE_ITEM );
|
||||
|
@ -847,6 +859,8 @@ void PCB_EDIT_FRAME::createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu )
|
|||
AddMenuItem( sub_menu_Text, ID_POPUP_PCB_FLIP_TEXTEPCB, msg, KiBitmap( invert_module_xpm ) );
|
||||
msg = AddHotkeyName( _( "Edit" ), g_Board_Editor_Hokeys_Descr, HK_EDIT_ITEM );
|
||||
AddMenuItem( sub_menu_Text, ID_POPUP_PCB_EDIT_TEXTEPCB, msg, KiBitmap( edit_text_xpm ) );
|
||||
if( !flags )
|
||||
{
|
||||
AddMenuItem( sub_menu_Text, ID_POPUP_PCB_RESET_TEXT_SIZE,
|
||||
_( "Reset Size" ), KiBitmap( reset_text_xpm ) );
|
||||
|
||||
|
@ -854,6 +868,7 @@ void PCB_EDIT_FRAME::createPopUpMenuForTexts( TEXTE_PCB* Text, wxMenu* menu )
|
|||
msg = AddHotkeyName( _( "Delete" ), g_Board_Editor_Hokeys_Descr, HK_DELETE );
|
||||
AddMenuItem( sub_menu_Text, ID_POPUP_PCB_DELETE_TEXTEPCB, msg, KiBitmap( delete_text_xpm ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PCB_EDIT_FRAME::createPopUpMenuForMarkers( MARKER_PCB* aMarker, wxMenu* aPopMenu )
|
||||
|
|
|
@ -431,7 +431,7 @@ void PCB_PARSER::parseHeader() throw( IO_ERROR, PARSE_ERROR )
|
|||
Expecting( GetTokenText( T_version ) );
|
||||
|
||||
// Get the file version.
|
||||
m_board->SetFileFormatVersionAtLoad( NeedNUMBER( GetTokenText( T_version ) ) );
|
||||
m_board->SetFileFormatVersionAtLoad( parseInt( GetTokenText( T_version ) ) );
|
||||
|
||||
// Skip the host name and host build version information.
|
||||
NeedRIGHT();
|
||||
|
@ -489,23 +489,45 @@ void PCB_PARSER::parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR )
|
|||
wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as a PAGE_INFO." ) );
|
||||
|
||||
T token;
|
||||
bool isPortrait = false;
|
||||
PAGE_INFO pageInfo;
|
||||
|
||||
NeedSYMBOL();
|
||||
|
||||
wxString pageType = FromUTF8();
|
||||
|
||||
if( !pageInfo.SetType( pageType ) )
|
||||
{
|
||||
wxString err;
|
||||
err.Printf( _( "page type \"%s\" is not valid " ), GetChars( FromUTF8() ) );
|
||||
THROW_PARSE_ERROR( err, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
|
||||
}
|
||||
|
||||
if( pageType == PAGE_INFO::Custom )
|
||||
{
|
||||
PAGE_INFO::SetCustomWidthMils( Iu2Mils( NeedNUMBER( "width" ) ) );
|
||||
PAGE_INFO::SetCustomHeightMils( Iu2Mils( NeedNUMBER( "height" ) ) );
|
||||
double width = parseDouble( "width" ); // width in mm
|
||||
|
||||
// Perform some controls to avoid crashes if the size is edited by hands
|
||||
if( width < 100.0 )
|
||||
width = 100.0;
|
||||
else if( width > 1200.0 )
|
||||
width = 1200.0;
|
||||
|
||||
double height = parseDouble( "height" ); // height in mm
|
||||
|
||||
if( height < 100.0 )
|
||||
height = 100.0;
|
||||
else if( height > 1200.0 )
|
||||
height = 1200.0;
|
||||
|
||||
pageInfo.SetWidthMils( Mm2mils( width ) );
|
||||
pageInfo.SetHeightMils( Mm2mils( height ) );
|
||||
}
|
||||
|
||||
token = NextTok();
|
||||
|
||||
if( token == T_portrait )
|
||||
{
|
||||
isPortrait = true;
|
||||
pageInfo.SetPortrait( true );
|
||||
NeedRIGHT();
|
||||
}
|
||||
else if( token != T_RIGHT )
|
||||
|
@ -513,15 +535,6 @@ void PCB_PARSER::parsePAGE_INFO() throw( IO_ERROR, PARSE_ERROR )
|
|||
Expecting( "portrait|)" );
|
||||
}
|
||||
|
||||
PAGE_INFO pageInfo;
|
||||
|
||||
if( !pageInfo.SetType( pageType, isPortrait ) )
|
||||
{
|
||||
wxString err;
|
||||
err.Printf( _( "page type \"%s\" is not valid " ), GetChars( FromUTF8() ) );
|
||||
THROW_PARSE_ERROR( err, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
|
||||
}
|
||||
|
||||
m_board->SetPageSettings( pageInfo );
|
||||
}
|
||||
|
||||
|
@ -566,7 +579,7 @@ void PCB_PARSER::parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR )
|
|||
|
||||
case T_comment:
|
||||
{
|
||||
int commentNumber = NeedNUMBER( "comment" );
|
||||
int commentNumber = parseInt( "comment" );
|
||||
|
||||
switch( commentNumber )
|
||||
{
|
||||
|
@ -592,7 +605,7 @@ void PCB_PARSER::parseTITLE_BLOCK() throw( IO_ERROR, PARSE_ERROR )
|
|||
|
||||
default:
|
||||
wxString err;
|
||||
err.Printf( _( "%d is not a valid title block comment number" ), commentNumber );
|
||||
err.Printf( wxT( "%d is not a valid title block comment number" ), commentNumber );
|
||||
THROW_PARSE_ERROR( err, CurSource(), CurLine(), CurLineNumber(), CurOffset() );
|
||||
}
|
||||
|
||||
|
@ -685,35 +698,18 @@ void PCB_PARSER::parseLayers() throw( IO_ERROR, PARSE_ERROR )
|
|||
|
||||
int PCB_PARSER::lookUpLayer() throw( PARSE_ERROR, IO_ERROR )
|
||||
{
|
||||
#if USE_LAYER_NAMES
|
||||
wxString name = FromUTF8();
|
||||
const LAYER_HASH_MAP::iterator it = m_layerMap.find( name );
|
||||
|
||||
if( it == m_layerMap.end() )
|
||||
{
|
||||
wxString error;
|
||||
error.Printf( _( "Layer '%s' in file <%s> at line %d, position %d was not defined in the layers section" ),
|
||||
error.Printf( wxT( "Layer '%s' in file <%s> at line %d, position %d was not defined in the layers section" ),
|
||||
GetChars( name ), GetChars( CurSource() ), CurLineNumber(), CurOffset() );
|
||||
THROW_IO_ERROR( error );
|
||||
}
|
||||
|
||||
return m_layerMap[ name ];
|
||||
#else
|
||||
if( CurTok() != T_NUMBER )
|
||||
Expecting( T_NUMBER );
|
||||
|
||||
int layerIndex = parseInt();
|
||||
|
||||
if( !m_board->IsLayerEnabled( layerIndex ) )
|
||||
{
|
||||
wxString error;
|
||||
error.Printf( _( "Layer index %d in file <%s> at line %d, offset %d was not defined in the layers section" ),
|
||||
layerIndex, GetChars( CurSource() ), CurLineNumber(), CurOffset() );
|
||||
THROW_IO_ERROR( error );
|
||||
}
|
||||
|
||||
return layerIndex;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -928,8 +924,8 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR )
|
|||
|
||||
case T_aux_axis_origin:
|
||||
{
|
||||
int x = parseBoardUnits( "auxilary origin X" );
|
||||
int y = parseBoardUnits( "auxilary origin Y" );
|
||||
int x = parseBoardUnits( "auxiliary origin X" );
|
||||
int y = parseBoardUnits( "auxiliary origin Y" );
|
||||
// x, y are not evaluated left to right, since they are push on stack right to left
|
||||
m_board->SetOriginAxisPosition( wxPoint( x, y ) );
|
||||
NeedRIGHT();
|
||||
|
@ -941,7 +937,6 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR )
|
|||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
#if SAVE_PCB_PLOT_PARAMS
|
||||
case T_pcbplotparams:
|
||||
{
|
||||
PCB_PLOT_PARAMS plotParams;
|
||||
|
@ -949,9 +944,11 @@ void PCB_PARSER::parseSetup() throw( IO_ERROR, PARSE_ERROR )
|
|||
|
||||
plotParams.Parse( &parser );
|
||||
m_board->SetPlotOptions( plotParams );
|
||||
|
||||
// I don't know why but this seems to fix a problem in PCB_PLOT_PARAMS::Parse().
|
||||
NextTok();
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
Unexpected( CurText() );
|
||||
|
@ -990,11 +987,17 @@ void PCB_PARSER::parseNETINFO_ITEM() throw( IO_ERROR, PARSE_ERROR )
|
|||
wxString name = FromUTF8();
|
||||
NeedRIGHT();
|
||||
|
||||
// net 0 should be already in list, so store this net
|
||||
// if it is not the net 0, or if the net 0 does not exists.
|
||||
// (TODO: a better test.)
|
||||
if( number > 0 || m_board->FindNet( 0 ) == NULL )
|
||||
{
|
||||
NETINFO_ITEM* net = new NETINFO_ITEM( m_board );
|
||||
net->SetNet( number );
|
||||
net->SetNetname( name );
|
||||
m_board->AppendNet( net );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PCB_PARSER::parseNETCLASS() throw( IO_ERROR, PARSE_ERROR )
|
||||
|
@ -1515,13 +1518,13 @@ MODULE* PCB_PARSER::parseMODULE() throw( IO_ERROR, PARSE_ERROR )
|
|||
break;
|
||||
|
||||
case T_descr:
|
||||
NeedSYMBOL();
|
||||
NeedSYMBOLorNUMBER(); // some symbols can be 0508, so a number is also a symbol here
|
||||
module->SetDescription( FromUTF8() );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_tags:
|
||||
NeedSYMBOL();
|
||||
NeedSYMBOLorNUMBER(); // some symbols can be 0508, so a number is also a symbol here
|
||||
module->SetKeywords( FromUTF8() );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
@ -1775,6 +1778,7 @@ EDGE_MODULE* PCB_PARSER::parseEDGE_MODULE() throw( IO_ERROR, PARSE_ERROR )
|
|||
pt.y = parseBoardUnits( "Y coordinate" );
|
||||
segment->SetStart0( pt );
|
||||
NeedRIGHT();
|
||||
NeedLEFT();
|
||||
token = NextTok();
|
||||
|
||||
if( token != T_end )
|
||||
|
@ -2022,6 +2026,9 @@ D_PAD* PCB_PARSER::parseD_PAD() throw( IO_ERROR, PARSE_ERROR )
|
|||
|
||||
case T_drill:
|
||||
{
|
||||
bool haveWidth = false;
|
||||
wxSize drillSize = pad->GetDrillSize();
|
||||
|
||||
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
|
||||
{
|
||||
if( token == T_LEFT )
|
||||
|
@ -2033,23 +2040,21 @@ D_PAD* PCB_PARSER::parseD_PAD() throw( IO_ERROR, PARSE_ERROR )
|
|||
pad->SetDrillShape( PAD_OVAL );
|
||||
break;
|
||||
|
||||
case T_size:
|
||||
case T_NUMBER:
|
||||
{
|
||||
int width = parseBoardUnits( "drill width" );
|
||||
int height = width;
|
||||
token = NextTok();
|
||||
if( !haveWidth )
|
||||
{
|
||||
drillSize.SetWidth( parseBoardUnits() );
|
||||
|
||||
if( token == T_NUMBER )
|
||||
{
|
||||
height = parseBoardUnits();
|
||||
NeedRIGHT();
|
||||
// If height is not defined the width and height are the same.
|
||||
drillSize.SetHeight( drillSize.GetWidth() );
|
||||
haveWidth = true;
|
||||
}
|
||||
else if( token != T_RIGHT )
|
||||
else
|
||||
{
|
||||
Expecting( ") or number" );
|
||||
drillSize.SetHeight( parseBoardUnits() );
|
||||
}
|
||||
|
||||
pad->SetDrillSize( wxSize( width, height ) );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2064,6 +2069,7 @@ D_PAD* PCB_PARSER::parseD_PAD() throw( IO_ERROR, PARSE_ERROR )
|
|||
}
|
||||
}
|
||||
|
||||
pad->SetDrillSize( drillSize );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2286,12 +2292,12 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
|
|||
wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
|
||||
wxT( " as ZONE_CONTAINER." ) );
|
||||
|
||||
int hatchStyle = CPolyLine::NO_HATCH; // Fix compil warning
|
||||
int hatchPitch = 0; // Fix compil warning
|
||||
int hatchStyle = CPolyLine::NO_HATCH; // Fix compile warning
|
||||
int hatchPitch = 0; // Fix compile warning
|
||||
wxPoint pt;
|
||||
T token;
|
||||
|
||||
// bigger scope since each filled_polygon is concatonated in here
|
||||
// bigger scope since each filled_polygon is concatenated in here
|
||||
std::vector< CPolyPt > pts;
|
||||
|
||||
auto_ptr< ZONE_CONTAINER > zone( new ZONE_CONTAINER( m_board ) );
|
||||
|
@ -2306,7 +2312,10 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
|
|||
switch( token )
|
||||
{
|
||||
case T_net:
|
||||
zone->SetNet( parseInt( "net number" ) );
|
||||
// Init the net code only, not the netname, to be sure
|
||||
// the zone net name is the name read in file.
|
||||
// (When mismatch, the user will be prompted in DRC, to fix the actual name)
|
||||
zone->BOARD_CONNECTED_ITEM::SetNet( parseInt( "net number" ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
|
@ -2365,6 +2374,10 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
|
|||
zone->SetPadConnection( PAD_NOT_IN_ZONE );
|
||||
break;
|
||||
|
||||
case T_thru_hole_only:
|
||||
zone->SetPadConnection( THT_THERMAL );
|
||||
break;
|
||||
|
||||
case T_clearance:
|
||||
zone->SetZoneClearance( parseBoardUnits( "zone clearance" ) );
|
||||
NeedRIGHT();
|
||||
|
@ -2451,6 +2464,49 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER() throw( IO_ERROR, PARSE_ERROR )
|
|||
|
||||
break;
|
||||
|
||||
case T_keepout:
|
||||
zone->SetIsKeepout( true );
|
||||
|
||||
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
|
||||
{
|
||||
if( token == T_LEFT )
|
||||
token = NextTok();
|
||||
|
||||
switch( token )
|
||||
{
|
||||
case T_tracks:
|
||||
token = NextTok();
|
||||
|
||||
if( token != T_allowed && token != T_not_allowed )
|
||||
Expecting( "allowed or not_allowed" );
|
||||
zone->SetDoNotAllowTracks( token == T_not_allowed );
|
||||
break;
|
||||
|
||||
case T_vias:
|
||||
token = NextTok();
|
||||
|
||||
if( token != T_allowed && token != T_not_allowed )
|
||||
Expecting( "allowed or not_allowed" );
|
||||
zone->SetDoNotAllowVias( token == T_not_allowed );
|
||||
break;
|
||||
|
||||
case T_copperpour:
|
||||
token = NextTok();
|
||||
|
||||
if( token != T_allowed && token != T_not_allowed )
|
||||
Expecting( "allowed or not_allowed" );
|
||||
zone->SetDoNotAllowCopperPour( token == T_not_allowed );
|
||||
break;
|
||||
|
||||
default:
|
||||
Expecting( "tracks, vias or copperpour" );
|
||||
}
|
||||
|
||||
NeedRIGHT();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case T_polygon:
|
||||
{
|
||||
std::vector< wxPoint > corners;
|
||||
|
|
|
@ -54,12 +54,9 @@ class ZONE_CONTAINER;
|
|||
WX_DECLARE_STRING_HASH_MAP( int, LAYER_HASH_MAP );
|
||||
|
||||
|
||||
#define USE_LAYER_NAMES 1 // Set to 0 to format and parse layers by index number.
|
||||
#define SAVE_PCB_PLOT_PARAMS 0 // Set to 1 to save and load the PCB plot dialog data.
|
||||
|
||||
/**
|
||||
* Class PCB_PARSER
|
||||
* reads a Pcbnew s-expression fromatted #LINE_READER object and returns the appropriate
|
||||
* reads a Pcbnew s-expression formatted #LINE_READER object and returns the appropriate
|
||||
* #BOARD_ITEM object.
|
||||
*/
|
||||
class PCB_PARSER : public PCB_LEXER
|
||||
|
@ -124,7 +121,7 @@ class PCB_PARSER : public PCB_LEXER
|
|||
* parses a coordinate pair (xy X Y) in board units (mm).
|
||||
*
|
||||
* The parser checks if the previous token was T_LEFT and parses the remainder of
|
||||
* the token syntax. This is used when parsing a list of coorinate points. This
|
||||
* the token syntax. This is used when parsing a list of coordinate points. This
|
||||
* way the parser can be used in either case.
|
||||
*
|
||||
* @throw PARSE_ERROR if the coordinate pair syntax is incorrect.
|
||||
|
|
|
@ -26,6 +26,7 @@ enum pcbnew_ids
|
|||
ID_PCB_MODULE_BUTT,
|
||||
ID_TRACK_BUTT,
|
||||
ID_PCB_ZONES_BUTT,
|
||||
ID_PCB_KEEPOUT_AREA_BUTT,
|
||||
ID_PCB_ADD_LINE_BUTT,
|
||||
ID_PCB_CIRCLE_BUTT,
|
||||
ID_PCB_ARC_BUTT,
|
||||
|
@ -66,6 +67,7 @@ enum pcbnew_ids
|
|||
|
||||
ID_POPUP_PCB_MOVE_TEXTEPCB_REQUEST,
|
||||
ID_POPUP_PCB_ROTATE_TEXTEPCB,
|
||||
ID_POPUP_PCB_COPY_TEXTEPCB,
|
||||
ID_POPUP_PCB_FLIP_TEXTEPCB,
|
||||
ID_POPUP_PCB_EDIT_TEXTEPCB,
|
||||
ID_POPUP_PCB_DELETE_TEXTEPCB,
|
||||
|
|
|
@ -111,7 +111,7 @@ private:
|
|||
};
|
||||
|
||||
|
||||
const int UNITS_MILS = 1000;
|
||||
//const int UNITS_MILS = 1000;
|
||||
|
||||
DIALOG_PLOT::DIALOG_PLOT( PCB_EDIT_FRAME* aParent ) :
|
||||
DIALOG_PLOT_BASE( aParent ),
|
||||
|
@ -725,9 +725,10 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
|
|||
fn = m_parent->GetScreen()->GetFileName();
|
||||
fn.SetPath( outputDir.GetPath() );
|
||||
|
||||
// Create file name.
|
||||
wxString layername = m_board->GetLayerName( layer );
|
||||
layername.Trim( true ); layername.Trim( false ); // remove leading and trailing spaces if any
|
||||
// Create file name (from the English layer name for non copper layers).
|
||||
wxString layername = m_board->GetLayerName( layer, false );
|
||||
// remove leading and trailing spaces if any
|
||||
layername.Trim( true ); layername.Trim( false );
|
||||
fn.SetName( fn.GetName() + wxT( "-" ) + layername );
|
||||
|
||||
// Use Gerber Extensions based on layer number
|
||||
|
|
|
@ -1135,7 +1135,8 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
|
|||
}
|
||||
|
||||
|
||||
//-----<zone containers become planes>--------------------------------
|
||||
//-----<zone containers (not keepout areas) become planes>--------------------------------
|
||||
// Note: only zones are output here, keepout areas be be created later
|
||||
{
|
||||
int netlessZones = 0;
|
||||
|
||||
|
@ -1146,6 +1147,9 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
|
|||
{
|
||||
ZONE_CONTAINER* item = (ZONE_CONTAINER*) items[i];
|
||||
|
||||
if( item->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
COPPER_PLANE* plane = new COPPER_PLANE( pcb->structure );
|
||||
pcb->structure->planes.push_back( plane );
|
||||
|
||||
|
@ -1214,7 +1218,80 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
|
|||
}
|
||||
}
|
||||
|
||||
// keepouts could go here, there are none in Kicad at this time.
|
||||
//-----<zone containers flagged keepout areas become keepout>--------------------------------
|
||||
{
|
||||
static const KICAD_T scanZONEs[] = { PCB_ZONE_AREA_T, EOT };
|
||||
items.Collect( aBoard, scanZONEs );
|
||||
|
||||
for( int i=0; i<items.GetCount(); ++i )
|
||||
{
|
||||
ZONE_CONTAINER* item = (ZONE_CONTAINER*) items[i];
|
||||
|
||||
if( ! item->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
// keepout areas have a type. types are
|
||||
// T_place_keepout, T_via_keepout, T_wire_keepout,
|
||||
// T_bend_keepout, T_elongate_keepout, T_keepout.
|
||||
// Pcbnew knows only T_keepout, T_via_keepout and T_wire_keepout
|
||||
DSN_T keepout_type;
|
||||
|
||||
if( item->GetDoNotAllowVias() && item->GetDoNotAllowTracks() )
|
||||
keepout_type = T_keepout;
|
||||
else if( item->GetDoNotAllowVias() )
|
||||
keepout_type = T_via_keepout;
|
||||
else if( item->GetDoNotAllowTracks() )
|
||||
keepout_type = T_wire_keepout;
|
||||
else
|
||||
keepout_type = T_keepout;
|
||||
|
||||
KEEPOUT* keepout = new KEEPOUT( pcb->structure, keepout_type );
|
||||
pcb->structure->keepouts.push_back( keepout );
|
||||
|
||||
PATH* mainPolygon = new PATH( keepout, T_polygon );
|
||||
keepout->SetShape( mainPolygon );
|
||||
|
||||
mainPolygon->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ];
|
||||
|
||||
int count = item->m_Poly->corner.size();
|
||||
int ndx = 0; // used in 2 for() loops below
|
||||
for( ; ndx<count; ++ndx )
|
||||
{
|
||||
wxPoint point( item->m_Poly->corner[ndx].x,
|
||||
item->m_Poly->corner[ndx].y );
|
||||
mainPolygon->AppendPoint( mapPt(point) );
|
||||
|
||||
// this was the end of the main polygon
|
||||
if( item->m_Poly->corner[ndx].end_contour )
|
||||
break;
|
||||
}
|
||||
|
||||
WINDOW* window = 0;
|
||||
PATH* cutout = 0;
|
||||
|
||||
// handle the cutouts
|
||||
for( ++ndx; ndx<count; ++ndx )
|
||||
{
|
||||
if( item->m_Poly->corner[ndx-1].end_contour )
|
||||
{
|
||||
window = new WINDOW( keepout );
|
||||
keepout->AddWindow( window );
|
||||
|
||||
cutout = new PATH( window, T_polygon );
|
||||
window->SetShape( cutout );
|
||||
|
||||
cutout->layer_id = layerIds[ kicadLayer2pcb[ item->GetLayer() ] ];
|
||||
}
|
||||
|
||||
wxASSERT( window );
|
||||
wxASSERT( cutout );
|
||||
|
||||
wxPoint point(item->m_Poly->corner[ndx].x,
|
||||
item->m_Poly->corner[ndx].y );
|
||||
cutout->AppendPoint( mapPt(point) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----<build the images, components, and netlist>-----------------------
|
||||
{
|
||||
|
|
|
@ -429,6 +429,10 @@ void PCB_EDIT_FRAME::ReCreateVToolbar()
|
|||
m_drawToolBar->AddTool( ID_PCB_ZONES_BUTT, wxEmptyString, KiBitmap( add_zone_xpm ),
|
||||
_( "Add filled zones" ), wxITEM_CHECK );
|
||||
|
||||
m_drawToolBar->AddTool( ID_PCB_KEEPOUT_AREA_BUTT, wxEmptyString,
|
||||
KiBitmap( add_keepout_area_xpm ),
|
||||
_( "Add keepout areas" ), wxITEM_CHECK );
|
||||
|
||||
m_drawToolBar->AddSeparator();
|
||||
m_drawToolBar->AddTool( ID_PCB_ADD_LINE_BUTT, wxEmptyString, KiBitmap( add_dashed_line_xpm ),
|
||||
_( "Add graphic line or polygon" ), wxITEM_CHECK );
|
||||
|
|
|
@ -69,35 +69,35 @@ int ZONE_CONTAINER::BuildFilledPolysListData( BOARD* aPcb, std::vector <CPolyPt>
|
|||
return 0;
|
||||
|
||||
// Make a smoothed polygon out of the user-drawn polygon if required
|
||||
if( smoothedPoly )
|
||||
if( m_smoothedPoly )
|
||||
{
|
||||
delete smoothedPoly;
|
||||
smoothedPoly = NULL;
|
||||
delete m_smoothedPoly;
|
||||
m_smoothedPoly = NULL;
|
||||
}
|
||||
|
||||
switch( cornerSmoothingType )
|
||||
switch( m_cornerSmoothingType )
|
||||
{
|
||||
case ZONE_SETTINGS::SMOOTHING_CHAMFER:
|
||||
smoothedPoly = m_Poly->Chamfer( cornerRadius );
|
||||
m_smoothedPoly = m_Poly->Chamfer( m_cornerRadius );
|
||||
break;
|
||||
case ZONE_SETTINGS::SMOOTHING_FILLET:
|
||||
smoothedPoly = m_Poly->Fillet( cornerRadius, m_ArcToSegmentsCount );
|
||||
m_smoothedPoly = m_Poly->Fillet( m_cornerRadius, m_ArcToSegmentsCount );
|
||||
break;
|
||||
default:
|
||||
smoothedPoly = new CPolyLine;
|
||||
smoothedPoly->Copy( m_Poly );
|
||||
m_smoothedPoly = new CPolyLine;
|
||||
m_smoothedPoly->Copy( m_Poly );
|
||||
break;
|
||||
}
|
||||
|
||||
smoothedPoly->MakeKboolPoly( -1, -1, NULL, true );
|
||||
m_smoothedPoly->MakeKboolPoly( -1, -1, NULL, true );
|
||||
int count = 0;
|
||||
while( smoothedPoly->GetKboolEngine()->StartPolygonGet() )
|
||||
while( m_smoothedPoly->GetKboolEngine()->StartPolygonGet() )
|
||||
{
|
||||
CPolyPt corner( 0, 0, false );
|
||||
while( smoothedPoly->GetKboolEngine()->PolygonHasMorePoints() )
|
||||
while( m_smoothedPoly->GetKboolEngine()->PolygonHasMorePoints() )
|
||||
{
|
||||
corner.x = (int) smoothedPoly->GetKboolEngine()->GetPolygonXPoint();
|
||||
corner.y = (int) smoothedPoly->GetKboolEngine()->GetPolygonYPoint();
|
||||
corner.x = (int) m_smoothedPoly->GetKboolEngine()->GetPolygonXPoint();
|
||||
corner.y = (int) m_smoothedPoly->GetKboolEngine()->GetPolygonYPoint();
|
||||
corner.end_contour = false;
|
||||
if( aCornerBuffer )
|
||||
aCornerBuffer->push_back( corner );
|
||||
|
@ -117,10 +117,10 @@ int ZONE_CONTAINER::BuildFilledPolysListData( BOARD* aPcb, std::vector <CPolyPt>
|
|||
m_FilledPolysList.pop_back();
|
||||
m_FilledPolysList.push_back( corner );
|
||||
}
|
||||
smoothedPoly->GetKboolEngine()->EndPolygonGet();
|
||||
m_smoothedPoly->GetKboolEngine()->EndPolygonGet();
|
||||
}
|
||||
|
||||
smoothedPoly->FreeKboolEngine();
|
||||
m_smoothedPoly->FreeKboolEngine();
|
||||
|
||||
/* For copper layers, we now must add holes in the Polygon list.
|
||||
* holes are pads and tracks with their clearance area
|
||||
|
|
|
@ -11,6 +11,17 @@
|
|||
#define ZONE_NET_FILTER_STRING_KEY wxT( "Zone_Filter_Opt" )
|
||||
#define ZONE_THERMAL_RELIEF_GAP_STRING_KEY wxT( "Zone_TH_Gap" )
|
||||
#define ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY wxT( "Zone_TH_Copper_Width" )
|
||||
#define ZONE_CLEARANCE_WIDTH_STRING_KEY wxT( "Zone_Clearance" )
|
||||
#define ZONE_MIN_THICKNESS_WIDTH_STRING_KEY wxT( "Zone_Thickness" )
|
||||
|
||||
// Default values in mils for parameters in ZONE_CONTAINER
|
||||
#define ZONE_THERMAL_RELIEF_GAP_MIL 20 // default value for ZONE_SETTINGS::m_ThermalReliefGap
|
||||
#define ZONE_THERMAL_RELIEF_COPPER_WIDTH_MIL 20 // default value for ZONE_SETTINGS::m_ThermalReliefCopperBridge
|
||||
#define ZONE_THICKNESS_MIL 10 // default value for ZONE_SETTINGS::m_ZoneMinThickness
|
||||
#define ZONE_THICKNESS_MIN_VALUE_MIL 1 // minimum acceptable value for ZONE_SETTINGS::m_ZoneMinThickness
|
||||
#define ZONE_CLEARANCE_MIL 20 // default value for ZONE_SETTINGS::m_ZoneClearance
|
||||
#define ZONE_CLEARANCE_MAX_VALUE_MIL 500 // maximum acceptable value for ZONE_SETTINGS::m_ZoneClearance
|
||||
|
||||
|
||||
/// Exit codes for zone editing dialogs
|
||||
enum ZONE_EDIT_T {
|
||||
|
@ -25,7 +36,8 @@ enum ZoneConnection {
|
|||
UNDEFINED_CONNECTION = -1,
|
||||
PAD_NOT_IN_ZONE, ///< Pads are not covered
|
||||
THERMAL_PAD, ///< Use thermal relief for pads
|
||||
PAD_IN_ZONE ///< pads are covered by copper
|
||||
PAD_IN_ZONE, ///< pads are covered by copper
|
||||
THT_THERMAL ///< Thermal relief only for THT pads
|
||||
};
|
||||
|
||||
class ZONE_CONTAINER;
|
||||
|
@ -56,4 +68,15 @@ ZONE_EDIT_T InvokeNonCopperZonesEditor( PCB_BASE_FRAME* aParent, ZONE_CONTAINER*
|
|||
*/
|
||||
ZONE_EDIT_T InvokeCopperZonesEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings );
|
||||
|
||||
/**
|
||||
* Function InvokeKeepoutAreaEditor
|
||||
* invokes up a modal dialog window for copper zone editing.
|
||||
*
|
||||
* @param aCaller is the PCB_BASE_FRAME calling parent window for the modal dialog,
|
||||
* and it gives access to the BOARD through PCB_BASE_FRAME::GetBoard().
|
||||
* @param aSettings points to the ZONE_SETTINGS to edit.
|
||||
* @return ZONE_EDIT_T - tells if user aborted, changed only one zone, or all of them.
|
||||
*/
|
||||
ZONE_EDIT_T InvokeKeepoutAreaEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings );
|
||||
|
||||
#endif // ZONES_H_
|
||||
|
|
|
@ -83,7 +83,7 @@ void PCB_EDIT_FRAME::Add_Similar_Zone( wxDC* DC, ZONE_CONTAINER* aZone )
|
|||
|
||||
// Use the general event handler to set others params (like toolbar)
|
||||
wxCommandEvent evt;
|
||||
evt.SetId( ID_PCB_ZONES_BUTT );
|
||||
evt.SetId( aZone->GetIsKeepout() ? ID_PCB_KEEPOUT_AREA_BUTT : ID_PCB_ZONES_BUTT );
|
||||
OnSelectTool( evt );
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ void PCB_EDIT_FRAME::Add_Zone_Cutout( wxDC* DC, ZONE_CONTAINER* aZone )
|
|||
|
||||
// Use the general event handle to set others params (like toolbar)
|
||||
wxCommandEvent evt;
|
||||
evt.SetId( ID_PCB_ZONES_BUTT );
|
||||
evt.SetId( aZone->GetIsKeepout() ? ID_PCB_KEEPOUT_AREA_BUTT : ID_PCB_ZONES_BUTT );
|
||||
OnSelectTool( evt );
|
||||
}
|
||||
|
||||
|
@ -116,7 +116,16 @@ void PCB_EDIT_FRAME::duplicateZone( wxDC* aDC, ZONE_CONTAINER* aZone )
|
|||
ZONE_SETTINGS zoneSettings;
|
||||
zoneSettings << *aZone;
|
||||
|
||||
if( InvokeCopperZonesEditor( this, &zoneSettings ) )
|
||||
bool success;
|
||||
|
||||
if( aZone->GetIsKeepout() )
|
||||
success = InvokeKeepoutAreaEditor( this, &zoneSettings );
|
||||
else if( aZone->IsOnCopperLayer() )
|
||||
success = InvokeCopperZonesEditor( this, &zoneSettings );
|
||||
else
|
||||
success = InvokeNonCopperZonesEditor( this, aZone, &zoneSettings );
|
||||
|
||||
if( success )
|
||||
{
|
||||
zoneSettings.ExportSetting( *newZone );
|
||||
newZone->m_Poly->Hatch();
|
||||
|
@ -510,7 +519,17 @@ int PCB_EDIT_FRAME::Begin_Zone( wxDC* DC )
|
|||
|
||||
// If no zone contour in progress, a new zone is being created:
|
||||
if( !GetBoard()->m_CurrentZoneContour )
|
||||
{
|
||||
if( GetToolId() == ID_PCB_KEEPOUT_AREA_BUTT &&
|
||||
getActiveLayer() >= FIRST_NON_COPPER_LAYER )
|
||||
{
|
||||
DisplayError( this,
|
||||
_( "Error: a keepout area is allowed only on copper layers" ) );
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
GetBoard()->m_CurrentZoneContour = new ZONE_CONTAINER( GetBoard() );
|
||||
}
|
||||
|
||||
ZONE_CONTAINER* zone = GetBoard()->m_CurrentZoneContour;
|
||||
|
||||
|
@ -536,21 +555,38 @@ int PCB_EDIT_FRAME::Begin_Zone( wxDC* DC )
|
|||
zone->SetNet( zoneInfo.m_NetcodeSelection );
|
||||
zone->SetNetNameFromNetCode( );
|
||||
}
|
||||
double tmp = ZONE_THERMAL_RELIEF_GAP_MIL;
|
||||
wxGetApp().GetSettings()->Read( ZONE_THERMAL_RELIEF_GAP_STRING_KEY, &tmp );
|
||||
zoneInfo.m_ThermalReliefGap = KiROUND( tmp * IU_PER_MILS);
|
||||
|
||||
wxGetApp().GetSettings()->Read( ZONE_THERMAL_RELIEF_GAP_STRING_KEY,
|
||||
&zoneInfo.m_ThermalReliefGap );
|
||||
|
||||
tmp = ZONE_THERMAL_RELIEF_COPPER_WIDTH_MIL;
|
||||
wxGetApp().GetSettings()->Read( ZONE_THERMAL_RELIEF_COPPER_WIDTH_STRING_KEY,
|
||||
&zoneInfo.m_ThermalReliefCopperBridge );
|
||||
&tmp );
|
||||
zoneInfo.m_ThermalReliefCopperBridge = KiROUND( tmp * IU_PER_MILS );
|
||||
|
||||
tmp = ZONE_CLEARANCE_MIL;
|
||||
wxGetApp().GetSettings()->Read( ZONE_CLEARANCE_WIDTH_STRING_KEY,
|
||||
&tmp );
|
||||
zoneInfo.m_ZoneClearance = KiROUND( tmp * IU_PER_MILS );
|
||||
|
||||
tmp = ZONE_THICKNESS_MIL;
|
||||
wxGetApp().GetSettings()->Read( ZONE_MIN_THICKNESS_WIDTH_STRING_KEY,
|
||||
&tmp );
|
||||
zoneInfo.m_ZoneMinThickness = KiROUND( tmp * IU_PER_MILS );
|
||||
|
||||
zoneInfo.m_CurrentZone_Layer = zone->GetLayer();
|
||||
|
||||
if( GetToolId() == ID_PCB_KEEPOUT_AREA_BUTT )
|
||||
{
|
||||
zoneInfo.SetIsKeepout( true );
|
||||
edited = InvokeKeepoutAreaEditor( this, &zoneInfo );
|
||||
}
|
||||
else
|
||||
edited = InvokeCopperZonesEditor( this, &zoneInfo );
|
||||
}
|
||||
else // Put a zone on a non copper layer (technical layer)
|
||||
{
|
||||
zoneInfo.m_NetcodeSelection = 0; // No net for non copper zones
|
||||
|
||||
edited = InvokeNonCopperZonesEditor( this, zone, &zoneInfo );
|
||||
}
|
||||
|
||||
|
@ -579,7 +615,8 @@ int PCB_EDIT_FRAME::Begin_Zone( wxDC* DC )
|
|||
}
|
||||
|
||||
// Show the Net for zones on copper layers
|
||||
if( zoneInfo.m_CurrentZone_Layer < FIRST_NO_COPPER_LAYER )
|
||||
if( zoneInfo.m_CurrentZone_Layer < FIRST_NO_COPPER_LAYER &&
|
||||
! zoneInfo.GetIsKeepout() )
|
||||
{
|
||||
if( s_CurrentZone )
|
||||
{
|
||||
|
@ -803,7 +840,13 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* aZone )
|
|||
s_PickedList.ClearListAndDeleteItems();
|
||||
SaveCopyOfZones(s_PickedList, GetBoard(), -1, -1 );
|
||||
|
||||
if( aZone->GetLayer() < FIRST_NO_COPPER_LAYER )
|
||||
if( aZone->GetIsKeepout() )
|
||||
{
|
||||
// edit a keepout area on a copper layer
|
||||
zoneInfo << *aZone;
|
||||
edited = InvokeKeepoutAreaEditor( this, &zoneInfo );
|
||||
}
|
||||
else if( aZone->GetLayer() < FIRST_NO_COPPER_LAYER )
|
||||
{
|
||||
// edit a zone on a copper layer
|
||||
|
||||
|
|
|
@ -87,6 +87,13 @@ void PCB_EDIT_FRAME::Delete_OldZone_Fill( SEGZONE* aZone, time_t aTimestamp )
|
|||
|
||||
int PCB_EDIT_FRAME::Fill_Zone( ZONE_CONTAINER* aZone )
|
||||
{
|
||||
aZone->ClearFilledPolysList();
|
||||
aZone->UnFill();
|
||||
|
||||
// Cannot fill keepout zones:
|
||||
if( aZone->GetIsKeepout() )
|
||||
return 1;
|
||||
|
||||
wxString msg;
|
||||
|
||||
ClearMsgPanel();
|
||||
|
@ -105,8 +112,6 @@ int PCB_EDIT_FRAME::Fill_Zone( ZONE_CONTAINER* aZone )
|
|||
|
||||
wxBusyCursor dummy; // Shows an hourglass cursor (removed by its destructor)
|
||||
|
||||
aZone->ClearFilledPolysList();
|
||||
aZone->UnFill();
|
||||
aZone->BuildFilledPolysListData( GetBoard() );
|
||||
|
||||
OnModify();
|
||||
|
@ -142,6 +147,9 @@ int PCB_EDIT_FRAME::Fill_All_Zones( wxWindow * aActiveWindow, bool aVerbose )
|
|||
for( ii = 0; ii < areaCount; ii++ )
|
||||
{
|
||||
ZONE_CONTAINER* zoneContainer = GetBoard()->GetArea( ii );
|
||||
if( zoneContainer->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
msg.Printf( FORMAT_STRING, ii+1, areaCount, GetChars( zoneContainer->GetNetName() ) );
|
||||
|
||||
if( progressDialog )
|
||||
|
|
|
@ -353,17 +353,20 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
|
|||
}
|
||||
}
|
||||
|
||||
// Add zones outlines having an higher priority
|
||||
// Add zones outlines having an higher priority and keepout
|
||||
for( int ii = 0; ii < GetBoard()->GetAreaCount(); ii++ )
|
||||
{
|
||||
ZONE_CONTAINER* zone = GetBoard()->GetArea( ii );
|
||||
if( zone->GetLayer() != GetLayer() )
|
||||
continue;
|
||||
|
||||
if( zone->GetPriority() <= GetPriority() )
|
||||
if( !zone->GetIsKeepout() && zone->GetPriority() <= GetPriority() )
|
||||
continue;
|
||||
|
||||
// A highter priority zone is found: remove its area
|
||||
if( zone->GetIsKeepout() && ! zone->GetDoNotAllowCopperPour() )
|
||||
continue;
|
||||
|
||||
// A highter priority zone or keepout area is found: remove its area
|
||||
item_boundingbox = zone->GetBoundingBox();
|
||||
if( !item_boundingbox.Intersects( zone_boundingbox ) )
|
||||
continue;
|
||||
|
@ -372,11 +375,19 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
|
|||
// However if the zone has the same net as the current zone,
|
||||
// do not add clearance.
|
||||
// the zone will be connected to the current zone, but filled areas
|
||||
// will use different parameters (clearnce, thermal shapes )
|
||||
// will use different parameters (clearance, thermal shapes )
|
||||
bool addclearance = GetNet() != zone->GetNet();
|
||||
int clearance = zone_clearance;
|
||||
|
||||
if( zone->GetIsKeepout() )
|
||||
{
|
||||
addclearance = true;
|
||||
clearance = m_ZoneMinThickness / 2;
|
||||
}
|
||||
|
||||
zone->TransformShapeWithClearanceToPolygon(
|
||||
cornerBufferPolysToSubstract,
|
||||
zone_clearance, s_CircleToSegmentsCount,
|
||||
clearance, s_CircleToSegmentsCount,
|
||||
s_Correction, addclearance );
|
||||
}
|
||||
|
||||
|
@ -385,7 +396,13 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
|
|||
{
|
||||
for( D_PAD* pad = module->m_Pads; pad != NULL; pad = pad->Next() )
|
||||
{
|
||||
if( GetPadConnection( pad ) != THERMAL_PAD )
|
||||
// Rejects non-standard pads with tht-only thermal reliefs
|
||||
if( GetPadConnection( pad ) == THT_THERMAL
|
||||
&& pad->GetAttribute() != PAD_STANDARD )
|
||||
continue;
|
||||
|
||||
if( GetPadConnection( pad ) != THERMAL_PAD
|
||||
&& GetPadConnection( pad ) != THT_THERMAL )
|
||||
continue;
|
||||
|
||||
if( !pad->IsOnLayer( GetLayer() ) )
|
||||
|
|
|
@ -78,7 +78,13 @@ void BuildUnconnectedThermalStubsPolygonList( std::vector<CPolyPt>& aCornerBuffe
|
|||
{
|
||||
for( D_PAD* pad = module->m_Pads; pad != NULL; pad = pad->Next() )
|
||||
{
|
||||
if( aZone->GetPadConnection( pad ) != THERMAL_PAD )
|
||||
// Rejects non-standard pads with tht-only thermal reliefs
|
||||
if( aZone->GetPadConnection( pad ) == THT_THERMAL
|
||||
&& pad->GetAttribute() != PAD_STANDARD )
|
||||
continue;
|
||||
|
||||
if( aZone->GetPadConnection( pad ) != THERMAL_PAD
|
||||
&& aZone->GetPadConnection( pad ) != THT_THERMAL )
|
||||
continue;
|
||||
|
||||
// check
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009 Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
||||
* Copyright (C) 2009 Jean-Pierre Charras <jp.charras@wanadoo.fr>
|
||||
* Copyright (C) 2007 KiCad Developers, see change_log.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -70,7 +70,28 @@ bool ZONE_CONTAINER::IsSame( const ZONE_CONTAINER& aZoneToCompare )
|
|||
if( m_Netname != aZoneToCompare.m_Netname )
|
||||
return false;
|
||||
|
||||
// Compare zone specfic parameters
|
||||
if( GetPriority() != aZoneToCompare.GetPriority() )
|
||||
return false;
|
||||
|
||||
// Compare zone specific parameters
|
||||
if( GetIsKeepout() != aZoneToCompare.GetIsKeepout() )
|
||||
return false;
|
||||
|
||||
if( GetIsKeepout() )
|
||||
{
|
||||
if( GetDoNotAllowCopperPour() != aZoneToCompare.GetDoNotAllowCopperPour() )
|
||||
return false;
|
||||
|
||||
if( GetDoNotAllowVias() != aZoneToCompare.GetDoNotAllowVias() )
|
||||
return false;
|
||||
|
||||
if( GetDoNotAllowTracks() != aZoneToCompare.GetDoNotAllowTracks() )
|
||||
return false;
|
||||
}
|
||||
|
||||
if( m_ArcToSegmentsCount != aZoneToCompare.m_ArcToSegmentsCount )
|
||||
return false;
|
||||
|
||||
if( m_ZoneClearance != aZoneToCompare.m_ZoneClearance )
|
||||
return false;
|
||||
|
||||
|
@ -80,9 +101,6 @@ bool ZONE_CONTAINER::IsSame( const ZONE_CONTAINER& aZoneToCompare )
|
|||
if( m_FillMode != aZoneToCompare.m_FillMode )
|
||||
return false;
|
||||
|
||||
if( m_ArcToSegmentsCount != aZoneToCompare.m_ArcToSegmentsCount )
|
||||
return false;
|
||||
|
||||
if( m_PadConnection != aZoneToCompare.m_PadConnection )
|
||||
return false;
|
||||
|
||||
|
@ -92,8 +110,6 @@ bool ZONE_CONTAINER::IsSame( const ZONE_CONTAINER& aZoneToCompare )
|
|||
if( m_ThermalReliefCopperBridge != aZoneToCompare.m_ThermalReliefCopperBridge )
|
||||
return false;
|
||||
|
||||
if( GetPriority() != aZoneToCompare.GetPriority() )
|
||||
return false;
|
||||
|
||||
// Compare outlines
|
||||
wxASSERT( m_Poly ); // m_Poly == NULL Should never happen
|
||||
|
|
|
@ -29,7 +29,7 @@ private:
|
|||
PCB_BASE_FRAME* m_Parent;
|
||||
ZONE_CONTAINER* m_zone;
|
||||
ZONE_SETTINGS* m_ptr;
|
||||
ZONE_SETTINGS m_settings;
|
||||
ZONE_SETTINGS m_settings; // working copy of zone settings
|
||||
|
||||
void OnOkClick( wxCommandEvent& event );
|
||||
void OnCancelClick( wxCommandEvent& event );
|
||||
|
@ -76,8 +76,6 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
|
|||
{
|
||||
SetReturnCode( ZONE_ABORT ); // Will be changed on button click
|
||||
|
||||
m_FillModeCtrl->SetSelection( m_settings.m_FillMode ? 1 : 0 );
|
||||
|
||||
AddUnitSymbol( *m_MinThicknessValueTitle, g_UserUnit );
|
||||
wxString msg = ReturnStringFromValue( g_UserUnit, m_settings.m_ZoneMinThickness );
|
||||
m_ZoneMinThicknessCtrl->SetValue( msg );
|
||||
|
@ -132,11 +130,11 @@ void DIALOG_NON_COPPER_ZONES_EDITOR::OnOkClick( wxCommandEvent& event )
|
|||
if( m_settings.m_ZoneMinThickness < 10 )
|
||||
{
|
||||
DisplayError( this,
|
||||
_( "Error :\nyou must choose a copper min thickness value bigger than 0.001 inch (or 0.0254 mm)" ) );
|
||||
_( "Error :\nyou must choose a min thickness value bigger than 0.001 inch (or 0.0254 mm)" ) );
|
||||
return;
|
||||
}
|
||||
|
||||
m_settings.m_FillMode = (m_FillModeCtrl->GetSelection() == 0) ? 0 : 1;
|
||||
m_settings.m_FillMode = 0; // Use always polygon fill mode
|
||||
|
||||
switch( m_OutlineAppearanceCtrl->GetSelection() )
|
||||
{
|
||||
|
|
|
@ -124,30 +124,6 @@ ZONE_CONTAINER* BOARD::InsertArea( int netcode, int iarea, int layer, int x, int
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function CompleteArea
|
||||
* complete copper area contour by adding a line from last to first corner
|
||||
* if there is only 1 or 2 corners, remove (delete) the area
|
||||
* @param area_to_complete = area to complete or remove
|
||||
* @param style = style of last corner
|
||||
* @return 1 if Ok, 0 if area removed
|
||||
*/
|
||||
int BOARD::CompleteArea( ZONE_CONTAINER* area_to_complete, int style )
|
||||
{
|
||||
if( area_to_complete->m_Poly->GetNumCorners() > 2 )
|
||||
{
|
||||
area_to_complete->m_Poly->Close( style );
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
Delete( area_to_complete );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function TestAreaPolygon
|
||||
* Test an area for self-intersection.
|
||||
|
@ -285,7 +261,7 @@ int BOARD::TestAreaPolygon( ZONE_CONTAINER* CurrArea )
|
|||
* @param bMessageBoxInt == true, shows message when clipping occurs.
|
||||
* @param bMessageBoxArc == true, shows message when clipping can't be done due to arcs.
|
||||
* @param bRetainArcs = true to handle arcs (not really used in KiCad)
|
||||
* @return:
|
||||
* @return
|
||||
* -1 if arcs intersect other sides, so polygon can't be clipped
|
||||
* 0 if no intersecting sides
|
||||
* 1 if intersecting sides
|
||||
|
@ -478,9 +454,13 @@ int BOARD::CombineAllAreasInNet( PICKED_ITEMS_LIST* aDeletedList, int aNetCode,
|
|||
|
||||
if( area2->GetNet() != aNetCode )
|
||||
continue;
|
||||
|
||||
if( curr_area->GetPriority() != area2->GetPriority() )
|
||||
continue;
|
||||
|
||||
if( curr_area->GetIsKeepout() != area2->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
if( curr_area->GetLayer() == area2->GetLayer()
|
||||
&& curr_area->utility2 != -1 && area2->utility2 != -1 )
|
||||
{
|
||||
|
@ -549,9 +529,14 @@ bool BOARD::TestAreaIntersections( ZONE_CONTAINER* area_to_test )
|
|||
if( area_to_test->GetLayer() != area2->GetLayer() )
|
||||
continue;
|
||||
|
||||
// test for different priorities
|
||||
if( area_to_test->GetPriority() != area2->GetPriority() )
|
||||
continue;
|
||||
|
||||
// test for different types
|
||||
if( area_to_test->GetIsKeepout() != area2->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
CPolyLine* poly2 = area2->m_Poly;
|
||||
|
||||
// test bounding rects
|
||||
|
@ -936,6 +921,10 @@ int BOARD::CombineAreas( PICKED_ITEMS_LIST* aDeletedList, ZONE_CONTAINER* area_r
|
|||
}
|
||||
|
||||
|
||||
/* Tests area outlines for DRC: areas inside other areas or too close.
|
||||
* aArea_To_Examine: area to compare with other areas,
|
||||
* or if NULL then all areas are compared to all others.
|
||||
*/
|
||||
int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_Examine,
|
||||
bool aCreate_Markers )
|
||||
{
|
||||
|
@ -951,38 +940,42 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
|
|||
if( !Area_Ref->IsOnCopperLayer() )
|
||||
continue;
|
||||
|
||||
// If testing only a single area, then skip all others
|
||||
// When testing only a single area, skip all others
|
||||
if( aArea_To_Examine && (aArea_To_Examine != Area_Ref) )
|
||||
continue;
|
||||
|
||||
for( int ia2 = 0; ia2 < GetAreaCount(); ia2++ )
|
||||
{
|
||||
ZONE_CONTAINER* Area_To_Test = GetArea( ia2 );
|
||||
CPolyLine* testSmoothedPoly = Area_To_Test->GetSmoothedPoly();
|
||||
ZONE_CONTAINER* area_to_test = GetArea( ia2 );
|
||||
CPolyLine* testSmoothedPoly = area_to_test->GetSmoothedPoly();
|
||||
|
||||
if( Area_Ref == Area_To_Test )
|
||||
if( Area_Ref == area_to_test )
|
||||
continue;
|
||||
|
||||
// test for same layer
|
||||
if( Area_Ref->GetLayer() != Area_To_Test->GetLayer() )
|
||||
if( Area_Ref->GetLayer() != area_to_test->GetLayer() )
|
||||
continue;
|
||||
|
||||
// Test for same net
|
||||
if( Area_Ref->GetNet() == Area_To_Test->GetNet() && Area_Ref->GetNet() >= 0 )
|
||||
if( Area_Ref->GetNet() == area_to_test->GetNet() && Area_Ref->GetNet() >= 0 )
|
||||
continue;
|
||||
|
||||
// test for different priorities
|
||||
if( Area_Ref->GetPriority() != Area_To_Test->GetPriority() )
|
||||
if( Area_Ref->GetPriority() != area_to_test->GetPriority() )
|
||||
continue;
|
||||
|
||||
// Examine a candidate zone: compare Area_To_Test to Area_Ref
|
||||
// test for different types
|
||||
if( Area_Ref->GetIsKeepout() != area_to_test->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
// Examine a candidate zone: compare area_to_test to Area_Ref
|
||||
|
||||
// Get clearance used in zone to zone test. The policy used to
|
||||
// obtain that value is now part of the zone object itself by way of
|
||||
// ZONE_CONTAINER::GetClearance().
|
||||
int zone2zoneClearance = Area_Ref->GetClearance( Area_To_Test );
|
||||
int zone2zoneClearance = Area_Ref->GetClearance( area_to_test );
|
||||
|
||||
// test for some corners of Area_Ref inside Area_To_Test
|
||||
// test for some corners of Area_Ref inside area_to_test
|
||||
for( int ic = 0; ic < refSmoothedPoly->GetNumCorners(); ic++ )
|
||||
{
|
||||
int x = refSmoothedPoly->GetX( ic );
|
||||
|
@ -994,7 +987,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
|
|||
if( aCreate_Markers )
|
||||
{
|
||||
wxString msg1 = Area_Ref->GetSelectMenuText();
|
||||
wxString msg2 = Area_To_Test->GetSelectMenuText();
|
||||
wxString msg2 = area_to_test->GetSelectMenuText();
|
||||
MARKER_PCB* marker = new MARKER_PCB( COPPERAREA_INSIDE_COPPERAREA,
|
||||
wxPoint( x, y ),
|
||||
msg1, wxPoint( x, y ),
|
||||
|
@ -1006,7 +999,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
|
|||
}
|
||||
}
|
||||
|
||||
// test for some corners of Area_To_Test inside Area_Ref
|
||||
// test for some corners of area_to_test inside Area_Ref
|
||||
for( int ic2 = 0; ic2 < testSmoothedPoly->GetNumCorners(); ic2++ )
|
||||
{
|
||||
int x = testSmoothedPoly->GetX( ic2 );
|
||||
|
@ -1017,7 +1010,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
|
|||
// COPPERAREA_COPPERAREA error: copper area corner inside copper area ref
|
||||
if( aCreate_Markers )
|
||||
{
|
||||
wxString msg1 = Area_To_Test->GetSelectMenuText();
|
||||
wxString msg1 = area_to_test->GetSelectMenuText();
|
||||
wxString msg2 = Area_Ref->GetSelectMenuText();
|
||||
MARKER_PCB* marker = new MARKER_PCB( COPPERAREA_INSIDE_COPPERAREA,
|
||||
wxPoint( x, y ),
|
||||
|
@ -1094,7 +1087,7 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
|
|||
if( aCreate_Markers )
|
||||
{
|
||||
wxString msg1 = Area_Ref->GetSelectMenuText();
|
||||
wxString msg2 = Area_To_Test->GetSelectMenuText();
|
||||
wxString msg2 = area_to_test->GetSelectMenuText();
|
||||
MARKER_PCB* marker = new MARKER_PCB( COPPERAREA_CLOSE_TO_COPPERAREA,
|
||||
wxPoint( x, y ),
|
||||
msg1, wxPoint( x, y ),
|
||||
|
@ -1115,14 +1108,13 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function doEdgeZoneDrc
|
||||
* tests a segment in ZONE_CONTAINER * aArea:
|
||||
/* tests a segment in ZONE_CONTAINER * aArea:
|
||||
* Test Edge inside other areas
|
||||
* Test Edge too close other areas
|
||||
* @param aArea The current area.
|
||||
* @param aCornerIndex The first corner of the segment to test.
|
||||
* @return bool - false if DRC error or true if OK
|
||||
* aArea is the current area.
|
||||
* aCornerIndex is the index of the first corner (starting point)
|
||||
* of the edge segment to test.
|
||||
* return false if DRC error or true if OK
|
||||
*/
|
||||
|
||||
bool DRC::doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex )
|
||||
|
@ -1160,30 +1152,31 @@ bool DRC::doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex )
|
|||
// iterate through all areas
|
||||
for( int ia2 = 0; ia2 < m_pcb->GetAreaCount(); ia2++ )
|
||||
{
|
||||
ZONE_CONTAINER* Area_To_Test = m_pcb->GetArea( ia2 );
|
||||
int zone_clearance = max( Area_To_Test->m_ZoneClearance,
|
||||
ZONE_CONTAINER* area_to_test = m_pcb->GetArea( ia2 );
|
||||
int zone_clearance = max( area_to_test->m_ZoneClearance,
|
||||
aArea->m_ZoneClearance );
|
||||
|
||||
// test for same layer
|
||||
if( Area_To_Test->GetLayer() != aArea->GetLayer() )
|
||||
if( area_to_test->GetLayer() != aArea->GetLayer() )
|
||||
continue;
|
||||
|
||||
// Test for same net
|
||||
if( ( aArea->GetNet() == Area_To_Test->GetNet() ) && (aArea->GetNet() >= 0) )
|
||||
if( ( aArea->GetNet() == area_to_test->GetNet() ) && (aArea->GetNet() >= 0) )
|
||||
continue;
|
||||
|
||||
// test for same priority
|
||||
if( Area_To_Test->GetPriority() != aArea->GetPriority() )
|
||||
if( area_to_test->GetPriority() != aArea->GetPriority() )
|
||||
continue;
|
||||
|
||||
// test for ending line inside Area_To_Test
|
||||
int x = end.x;
|
||||
int y = end.y;
|
||||
// test for same type
|
||||
if( area_to_test->GetIsKeepout() != aArea->GetIsKeepout() )
|
||||
continue;
|
||||
|
||||
if( Area_To_Test->m_Poly->TestPointInside( x, y ) )
|
||||
// test for ending line inside area_to_test
|
||||
if( area_to_test->m_Poly->TestPointInside( end.x, end.y ) )
|
||||
{
|
||||
// COPPERAREA_COPPERAREA error: corner inside copper area
|
||||
m_currentMarker = fillMarker( aArea, wxPoint( x, y ),
|
||||
m_currentMarker = fillMarker( aArea, end,
|
||||
COPPERAREA_INSIDE_COPPERAREA,
|
||||
m_currentMarker );
|
||||
return false;
|
||||
|
@ -1196,35 +1189,35 @@ bool DRC::doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex )
|
|||
int ax2 = end.x;
|
||||
int ay2 = end.y;
|
||||
|
||||
for( int icont2 = 0; icont2 < Area_To_Test->m_Poly->GetNumContours(); icont2++ )
|
||||
for( int icont2 = 0; icont2 < area_to_test->m_Poly->GetNumContours(); icont2++ )
|
||||
{
|
||||
int ic_start2 = Area_To_Test->m_Poly->GetContourStart( icont2 );
|
||||
int ic_end2 = Area_To_Test->m_Poly->GetContourEnd( icont2 );
|
||||
int ic_start2 = area_to_test->m_Poly->GetContourStart( icont2 );
|
||||
int ic_end2 = area_to_test->m_Poly->GetContourEnd( icont2 );
|
||||
|
||||
for( int ic2 = ic_start2; ic2<=ic_end2; ic2++ )
|
||||
{
|
||||
int bx1 = Area_To_Test->m_Poly->GetX( ic2 );
|
||||
int by1 = Area_To_Test->m_Poly->GetY( ic2 );
|
||||
int bx1 = area_to_test->m_Poly->GetX( ic2 );
|
||||
int by1 = area_to_test->m_Poly->GetY( ic2 );
|
||||
int bx2, by2;
|
||||
|
||||
if( ic2 == ic_end2 )
|
||||
{
|
||||
bx2 = Area_To_Test->m_Poly->GetX( ic_start2 );
|
||||
by2 = Area_To_Test->m_Poly->GetY( ic_start2 );
|
||||
bx2 = area_to_test->m_Poly->GetX( ic_start2 );
|
||||
by2 = area_to_test->m_Poly->GetY( ic_start2 );
|
||||
}
|
||||
else
|
||||
{
|
||||
bx2 = Area_To_Test->m_Poly->GetX( ic2 + 1 );
|
||||
by2 = Area_To_Test->m_Poly->GetY( ic2 + 1 );
|
||||
bx2 = area_to_test->m_Poly->GetX( ic2 + 1 );
|
||||
by2 = area_to_test->m_Poly->GetY( ic2 + 1 );
|
||||
}
|
||||
|
||||
int bstyle = Area_To_Test->m_Poly->GetSideStyle( ic2 );
|
||||
int x, y;
|
||||
int bstyle = area_to_test->m_Poly->GetSideStyle( ic2 );
|
||||
int x, y; // variables containing the intersecting point coordinates
|
||||
int d = GetClearanceBetweenSegments( bx1, by1, bx2, by2, bstyle,
|
||||
0,
|
||||
ax1, ay1, ax2, ay2, astyle,
|
||||
0,
|
||||
zone_clearance,
|
||||
0,
|
||||
&x, &y );
|
||||
|
||||
if( d < zone_clearance )
|
||||
|
|
|
@ -14,18 +14,6 @@
|
|||
#include <bezier_curves.h>
|
||||
#include <polygon_test_point_inside.h>
|
||||
|
||||
|
||||
#define to_int( x ) KiROUND( (x) )
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN( x1, x2 ) ( (x1) > (x2) ? (x2) : (x1) )
|
||||
#endif
|
||||
#ifndef MAX
|
||||
#define MAX( x1, x2 ) ( (x1) > (x2) ? (x1) : (x2) )
|
||||
#endif
|
||||
|
||||
#define pi M_PI
|
||||
|
||||
CPolyLine::CPolyLine()
|
||||
{
|
||||
m_hatchStyle = NO_HATCH;
|
||||
|
@ -282,7 +270,10 @@ int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector<
|
|||
delete m_Kbool_Poly_Engine;
|
||||
m_Kbool_Poly_Engine = NULL;
|
||||
}
|
||||
if( !GetClosed() && (aStart_contour == (GetNumContours() - 1) || aStart_contour == -1) )
|
||||
|
||||
int polycount = GetNumContours();
|
||||
|
||||
if( !GetClosed() && (aStart_contour == (polycount - 1) || aStart_contour == -1) )
|
||||
return 1; // error
|
||||
|
||||
int n_arcs = 0;
|
||||
|
@ -292,11 +283,11 @@ int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector<
|
|||
if( aStart_contour == -1 )
|
||||
{
|
||||
first_contour = 0;
|
||||
last_contour = GetNumContours() - 1;
|
||||
last_contour = polycount - 1;
|
||||
}
|
||||
if( aEnd_contour == -1 )
|
||||
{
|
||||
last_contour = GetNumContours() - 1;
|
||||
last_contour = polycount - 1;
|
||||
}
|
||||
if( arc_array )
|
||||
arc_array->clear();
|
||||
|
@ -389,30 +380,30 @@ int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector<
|
|||
// first quadrant, draw second quadrant of ellipse
|
||||
xo = x2;
|
||||
yo = y1;
|
||||
theta1 = pi;
|
||||
theta2 = pi / 2.0;
|
||||
theta1 = M_PI;
|
||||
theta2 = M_PI / 2.0;
|
||||
}
|
||||
else if( x2 < x1 && y2 > y1 )
|
||||
{
|
||||
// second quadrant, draw third quadrant of ellipse
|
||||
xo = x1;
|
||||
yo = y2;
|
||||
theta1 = 3.0 * pi / 2.0;
|
||||
theta2 = pi;
|
||||
theta1 = 3.0 * M_PI / 2.0;
|
||||
theta2 = M_PI;
|
||||
}
|
||||
else if( x2 < x1 && y2 < y1 )
|
||||
{
|
||||
// third quadrant, draw fourth quadrant of ellipse
|
||||
xo = x2;
|
||||
yo = y1;
|
||||
theta1 = 2.0 * pi;
|
||||
theta2 = 3.0 * pi / 2.0;
|
||||
theta1 = 2.0 * M_PI;
|
||||
theta2 = 3.0 * M_PI / 2.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
xo = x1; // fourth quadrant, draw first quadrant of ellipse
|
||||
yo = y2;
|
||||
theta1 = pi / 2.0;
|
||||
theta1 = M_PI / 2.0;
|
||||
theta2 = 0.0;
|
||||
}
|
||||
}
|
||||
|
@ -423,29 +414,29 @@ int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector<
|
|||
{
|
||||
xo = x1; // first quadrant, draw fourth quadrant of ellipse
|
||||
yo = y2;
|
||||
theta1 = 3.0 * pi / 2.0;
|
||||
theta2 = 2.0 * pi;
|
||||
theta1 = 3.0 * M_PI / 2.0;
|
||||
theta2 = 2.0 * M_PI;
|
||||
}
|
||||
else if( x2 < x1 && y2 > y1 )
|
||||
{
|
||||
xo = x2; // second quadrant
|
||||
yo = y1;
|
||||
theta1 = 0.0;
|
||||
theta2 = pi / 2.0;
|
||||
theta2 = M_PI / 2.0;
|
||||
}
|
||||
else if( x2 < x1 && y2 < y1 )
|
||||
{
|
||||
xo = x1; // third quadrant
|
||||
yo = y2;
|
||||
theta1 = pi / 2.0;
|
||||
theta2 = pi;
|
||||
theta1 = M_PI / 2.0;
|
||||
theta2 = M_PI;
|
||||
}
|
||||
else
|
||||
{
|
||||
xo = x2; // fourth quadrant
|
||||
yo = y1;
|
||||
theta1 = pi;
|
||||
theta2 = 3.0 * pi / 2.0;
|
||||
theta1 = M_PI;
|
||||
theta2 = 3.0 * M_PI / 2.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -658,7 +649,8 @@ int CPolyLine::RestoreArcs( std::vector<CArc> * arc_array, std::vector<CPolyLine
|
|||
poly = this;
|
||||
else
|
||||
poly = (*pa)[ip - 1];
|
||||
for( int icont = 0; icont<poly->GetNumContours(); icont++ )
|
||||
int polycount = poly->GetNumContours();
|
||||
for( int icont = 0; icont < polycount; icont++ )
|
||||
{
|
||||
int ic_start = poly->GetContourStart( icont );
|
||||
int ic_end = poly->GetContourEnd( icont );
|
||||
|
@ -877,12 +869,13 @@ void CPolyLine::RemoveContour( int icont )
|
|||
int istart = GetContourStart( icont );
|
||||
int iend = GetContourEnd( icont );
|
||||
|
||||
if( icont == 0 && GetNumContours() == 1 )
|
||||
int polycount = GetNumContours();
|
||||
if( icont == 0 && polycount == 1 )
|
||||
{
|
||||
// remove the only contour
|
||||
wxASSERT( 0 );
|
||||
}
|
||||
else if( icont == GetNumContours() - 1 )
|
||||
else if( icont == polycount - 1 )
|
||||
{
|
||||
// remove last contour
|
||||
corner.erase( corner.begin() + istart, corner.end() );
|
||||
|
@ -911,7 +904,8 @@ CPolyLine* CPolyLine::Chamfer( unsigned int aDistance )
|
|||
return newPoly;
|
||||
}
|
||||
|
||||
for( int contour = 0; contour < GetNumContours(); contour++ )
|
||||
int polycount = GetNumContours();
|
||||
for( int contour = 0; contour < polycount; contour++ )
|
||||
{
|
||||
unsigned int startIndex = GetContourStart( contour );
|
||||
unsigned int endIndex = GetContourEnd( contour );
|
||||
|
@ -986,7 +980,8 @@ CPolyLine* CPolyLine::Fillet( unsigned int aRadius, unsigned int aSegments )
|
|||
return newPoly;
|
||||
}
|
||||
|
||||
for( int contour = 0; contour < GetNumContours(); contour++ )
|
||||
int polycount = GetNumContours();
|
||||
for( int contour = 0; contour < polycount; contour++ )
|
||||
{
|
||||
unsigned int startIndex = GetContourStart( contour );
|
||||
unsigned int endIndex = GetContourEnd( contour );
|
||||
|
@ -1199,10 +1194,10 @@ CRect CPolyLine::GetCornerBounds( int icont )
|
|||
int iend = GetContourEnd( icont );
|
||||
for( int i = istart; i<=iend; i++ )
|
||||
{
|
||||
r.left = MIN( r.left, corner[i].x );
|
||||
r.right = MAX( r.right, corner[i].x );
|
||||
r.bottom = MIN( r.bottom, corner[i].y );
|
||||
r.top = MAX( r.top, corner[i].y );
|
||||
r.left = min( r.left, corner[i].x );
|
||||
r.right = max( r.right, corner[i].x );
|
||||
r.bottom = min( r.bottom, corner[i].y );
|
||||
r.top = max( r.top, corner[i].y );
|
||||
}
|
||||
|
||||
return r;
|
||||
|
@ -1309,7 +1304,7 @@ int CPolyLine::GetContourSize( int icont )
|
|||
void CPolyLine::SetSideStyle( int is, int style )
|
||||
{
|
||||
UnHatch();
|
||||
CPoint p1, p2;
|
||||
wxPoint p1, p2;
|
||||
if( is == (int) (corner.size() - 1) )
|
||||
{
|
||||
p1.x = corner[corner.size() - 1].x;
|
||||
|
@ -1349,8 +1344,8 @@ int CPolyLine::GetClosed()
|
|||
|
||||
// Creates hatch lines inside the outline of the complex polygon
|
||||
//
|
||||
// sort function used in ::Hatch to sort points by descending CPoint.x values
|
||||
bool sort_ends_by_descending_X( const CPoint& ref, const CPoint& tst )
|
||||
// sort function used in ::Hatch to sort points by descending wxPoint.x values
|
||||
bool sort_ends_by_descending_X( const wxPoint& ref, const wxPoint& tst )
|
||||
{
|
||||
return tst.x < ref.x;
|
||||
}
|
||||
|
@ -1420,7 +1415,7 @@ void CPolyLine::Hatch()
|
|||
#define MAXPTS 200 // Usually we store only few values per one hatch line
|
||||
// depending on the compexity of the zone outline
|
||||
|
||||
static std::vector <CPoint> pointbuffer;
|
||||
static std::vector <wxPoint> pointbuffer;
|
||||
pointbuffer.clear();
|
||||
pointbuffer.reserve(MAXPTS+2);
|
||||
|
||||
|
@ -1458,12 +1453,12 @@ void CPolyLine::Hatch()
|
|||
}
|
||||
if( ok )
|
||||
{
|
||||
CPoint point( (int) x, (int) y);
|
||||
wxPoint point( (int) x, (int) y);
|
||||
pointbuffer.push_back( point );
|
||||
}
|
||||
if( ok == 2 )
|
||||
{
|
||||
CPoint point( (int) x2, (int) y2);
|
||||
wxPoint point( (int) x2, (int) y2);
|
||||
pointbuffer.push_back( point );
|
||||
}
|
||||
if( pointbuffer.size() >= MAXPTS ) // overflow
|
||||
|
@ -1495,10 +1490,7 @@ void CPolyLine::Hatch()
|
|||
// else push 2 small lines
|
||||
if( m_hatchStyle == DIAGONAL_FULL || fabs( dx ) < 2 * hatch_line_len )
|
||||
{
|
||||
m_HatchLines.push_back( CSegment( pointbuffer[ip].x,
|
||||
pointbuffer[ip].y,
|
||||
pointbuffer[ip + 1].x,
|
||||
pointbuffer[ip + 1].y ) );
|
||||
m_HatchLines.push_back( CSegment( pointbuffer[ip], pointbuffer[ip + 1] ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1517,11 +1509,11 @@ void CPolyLine::Hatch()
|
|||
|
||||
m_HatchLines.push_back( CSegment( pointbuffer[ip].x,
|
||||
pointbuffer[ip].y,
|
||||
to_int( x1 ), to_int( y1 ) ) );
|
||||
KiROUND( x1 ), KiROUND( y1 ) ) );
|
||||
|
||||
m_HatchLines.push_back( CSegment( pointbuffer[ip + 1].x,
|
||||
pointbuffer[ip + 1].y,
|
||||
to_int( x2 ), to_int( y2 ) ) );
|
||||
KiROUND( x2 ), KiROUND( y2 ) ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1538,7 +1530,7 @@ bool CPolyLine::TestPointInside( int px, int py )
|
|||
}
|
||||
|
||||
// Test all polygons.
|
||||
// Since the first is the main outline, and other are hole,
|
||||
// Since the first is the main outline, and other are holes,
|
||||
// if the tested point is inside only one contour, it is inside the whole polygon
|
||||
// (in fact inside the main outline, and outside all holes).
|
||||
// if inside 2 contours (the main outline + an hole), it is outside the poly.
|
||||
|
@ -1636,8 +1628,8 @@ void CPolyLine::AppendArc( int xi, int yi, int xf, int yf, int xc, int yc, int n
|
|||
// generate arc
|
||||
for( int ic = 0; ic<num; ic++ )
|
||||
{
|
||||
int x = to_int( xc + r * cos( theta ) );
|
||||
int y = to_int( yc + r * sin( theta ) );
|
||||
int x = KiROUND( xc + r * cos( theta ) );
|
||||
int y = KiROUND( yc + r * sin( theta ) );
|
||||
AppendCorner( x, y, STRAIGHT, 0 );
|
||||
theta += th_d;
|
||||
}
|
||||
|
@ -1646,7 +1638,8 @@ void CPolyLine::AppendArc( int xi, int yi, int xf, int yf, int xc, int yc, int n
|
|||
}
|
||||
|
||||
// Bezier Support
|
||||
void CPolyLine::AppendBezier(int x1, int y1, int x2, int y2, int x3, int y3) {
|
||||
void CPolyLine::AppendBezier(int x1, int y1, int x2, int y2, int x3, int y3)
|
||||
{
|
||||
std::vector<wxPoint> bezier_points;
|
||||
|
||||
bezier_points = Bezier2Poly(x1,y1,x2,y2,x3,y3);
|
||||
|
@ -1654,10 +1647,128 @@ void CPolyLine::AppendBezier(int x1, int y1, int x2, int y2, int x3, int y3) {
|
|||
AppendCorner( bezier_points[i].x, bezier_points[i].y);
|
||||
}
|
||||
|
||||
void CPolyLine::AppendBezier(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4){
|
||||
void CPolyLine::AppendBezier(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
|
||||
{
|
||||
std::vector<wxPoint> bezier_points;
|
||||
|
||||
bezier_points = Bezier2Poly(x1,y1,x2,y2,x3,y3,x4,y4);
|
||||
for( unsigned int i = 0; i < bezier_points.size() ; i++)
|
||||
AppendCorner( bezier_points[i].x, bezier_points[i].y);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Function Distance
|
||||
* Calculates the distance between a segment and a polygon (with holes):
|
||||
* param aStart is the starting point of the segment.
|
||||
* param aEnd is the ending point of the segment.
|
||||
* param aWidth is the width of the segment.
|
||||
* return distance between the segment and outline.
|
||||
* 0 if segment intersects or is inside
|
||||
*/
|
||||
int CPolyLine::Distance( wxPoint aStart, wxPoint aEnd, int aWidth )
|
||||
{
|
||||
// We calculate the min dist between the segment and each outline segment
|
||||
// However, if the segment to test is inside the outline, and does not cross
|
||||
// any edge, it can be seen outside the polygon.
|
||||
// Therefore test if a segment end is inside ( testing only one end is enough )
|
||||
if( TestPointInside( aStart.x, aStart.y ) )
|
||||
return 0;
|
||||
|
||||
int distance = INT_MAX;
|
||||
int polycount = GetNumContours();
|
||||
|
||||
for( int icont = 0; icont < polycount; icont++ )
|
||||
{
|
||||
int ic_start = GetContourStart( icont );
|
||||
int ic_end = GetContourEnd( icont );
|
||||
|
||||
// now test spacing between area outline and segment
|
||||
for( int ic2 = ic_start; ic2 <= ic_end; ic2++ )
|
||||
{
|
||||
int bx1 = GetX( ic2 );
|
||||
int by1 = GetY( ic2 );
|
||||
int bx2, by2;
|
||||
|
||||
if( ic2 == ic_end )
|
||||
{
|
||||
bx2 = GetX( ic_start );
|
||||
by2 = GetY( ic_start );
|
||||
}
|
||||
else
|
||||
{
|
||||
bx2 = GetX( ic2 + 1 );
|
||||
by2 = GetY( ic2 + 1 );
|
||||
}
|
||||
|
||||
int bstyle = GetSideStyle( ic2 );
|
||||
int d = GetClearanceBetweenSegments( bx1, by1, bx2, by2, bstyle, 0,
|
||||
aStart.x, aStart.y, aEnd.x, aEnd.y,
|
||||
CPolyLine::STRAIGHT, aWidth,
|
||||
1, // min clearance, should be > 0
|
||||
NULL, NULL );
|
||||
if( distance > d )
|
||||
distance = d;
|
||||
if( distance <= 0 )
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return distance;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function Distance
|
||||
* Calculates the distance between a point and polygon (with holes):
|
||||
* param aPoint is the coordinate of the point.
|
||||
* return distance between the point and outline.
|
||||
* 0 if the point is inside
|
||||
*/
|
||||
int CPolyLine::Distance( const wxPoint& aPoint )
|
||||
{
|
||||
// We calculate the dist between the point and each outline segment
|
||||
// If the point is inside the outline, the dist is 0.
|
||||
if( TestPointInside( aPoint.x, aPoint.y ) )
|
||||
return 0;
|
||||
|
||||
int distance = INT_MAX;
|
||||
int polycount = GetNumContours();
|
||||
|
||||
for( int icont = 0; icont < polycount; icont++ )
|
||||
{
|
||||
int ic_start = GetContourStart( icont );
|
||||
int ic_end = GetContourEnd( icont );
|
||||
|
||||
// now test spacing between area outline and segment
|
||||
for( int ic2 = ic_start; ic2 <= ic_end; ic2++ )
|
||||
{
|
||||
int bx1 = GetX( ic2 );
|
||||
int by1 = GetY( ic2 );
|
||||
int bx2, by2;
|
||||
|
||||
if( ic2 == ic_end )
|
||||
{
|
||||
bx2 = GetX( ic_start );
|
||||
by2 = GetY( ic_start );
|
||||
}
|
||||
else
|
||||
{
|
||||
bx2 = GetX( ic2 + 1 );
|
||||
by2 = GetY( ic2 + 1 );
|
||||
}
|
||||
|
||||
// Here we expect only straight lines for vertices
|
||||
// (no arcs, not yet supported in Pcbnew)
|
||||
int d = KiROUND( GetPointToLineSegmentDistance( aPoint.x, aPoint.y,
|
||||
bx1, by1, bx2, by2 ) );
|
||||
|
||||
|
||||
if( distance > d )
|
||||
distance = d;
|
||||
if( distance <= 0 )
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return distance;
|
||||
}
|
||||
|
|
|
@ -49,25 +49,22 @@ public:
|
|||
int left, right, top, bottom;
|
||||
};
|
||||
|
||||
|
||||
class CPoint
|
||||
{
|
||||
public:
|
||||
int x, y;
|
||||
public:
|
||||
CPoint( void ) { x = y = 0; };
|
||||
CPoint( int i, int j ) { x = i; y = j; };
|
||||
};
|
||||
|
||||
|
||||
class CSegment
|
||||
{
|
||||
public:
|
||||
int xi, yi, xf, yf;
|
||||
wxPoint m_Start;
|
||||
wxPoint m_End;
|
||||
|
||||
CSegment() { };
|
||||
CSegment( const wxPoint & aStart, const wxPoint & aEnd )
|
||||
{
|
||||
m_Start = aStart;
|
||||
m_End = aEnd;
|
||||
}
|
||||
CSegment( int x0, int y0, int x1, int y1 )
|
||||
{
|
||||
xi = x0; yi = y0; xf = x1; yf = y1;
|
||||
m_Start.x = x0; m_Start.y = y0;
|
||||
m_End.x = x1; m_End.y = y1;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -282,6 +279,25 @@ public:
|
|||
void AppendBezier(int x1, int y1, int x2, int y2, int x3, int y3);
|
||||
void AppendBezier(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
|
||||
|
||||
/**
|
||||
* Function Distance
|
||||
* Calculates the distance between a point and the zone:
|
||||
* @param aPoint the coordinate of the point.
|
||||
* @return int = distance between the point and outline.
|
||||
* 0 if the point is inside
|
||||
*/
|
||||
int Distance( const wxPoint& aPoint );
|
||||
|
||||
/**
|
||||
* Function Distance
|
||||
* Calculates the distance between a segment and the zone:
|
||||
* @param aStart the starting point of the segment.
|
||||
* @param aEnd the ending point of the segment.
|
||||
* @param aWidth the width of the segment.
|
||||
* @return int = distance between the segment and outline.
|
||||
* 0 if segment intersects or is inside
|
||||
*/
|
||||
int Distance( wxPoint aStart, wxPoint aEnd, int aWidth );
|
||||
|
||||
private:
|
||||
int m_layer; // layer to draw on
|
||||
|
|
|
@ -60,6 +60,10 @@ target_link_libraries( container_test
|
|||
${wxWidgets_LIBRARIES}
|
||||
)
|
||||
|
||||
add_executable( test-nm-biu-to-ascii-mm-round-tripping
|
||||
EXCLUDE_FROM_ALL
|
||||
test-nm-biu-to-ascii-mm-round-tripping.cpp
|
||||
)
|
||||
|
||||
add_executable( parser_gen
|
||||
EXCLUDE_FROM_ALL
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
|
||||
/*
|
||||
A test program to which explores the ability to round trip a nanometer
|
||||
internal unit in the form of a 32 bit int, out to ASCII floating point
|
||||
millimeters and back in without variation. It tests all 4 billion values
|
||||
that an int can hold, and converts to ASCII and back and verifies integrity
|
||||
of the round tripped value.
|
||||
|
||||
Author: Dick Hollenbeck
|
||||
*/
|
||||
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <string>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
static inline int KiROUND( double v )
|
||||
{
|
||||
return int( v < 0 ? v - 0.5 : v + 0.5 );
|
||||
}
|
||||
|
||||
|
||||
typedef int BIU;
|
||||
|
||||
#define BIU_PER_MM 1e6
|
||||
|
||||
|
||||
//double scale = BIU_PER_MM;
|
||||
//double scale = UM_PER_BIU;
|
||||
double scale = 1.0/BIU_PER_MM;
|
||||
|
||||
|
||||
std::string biuFmt( BIU aValue )
|
||||
{
|
||||
double engUnits = aValue * scale;
|
||||
char temp[48];
|
||||
int len;
|
||||
|
||||
if( engUnits != 0.0 && fabsl( engUnits ) <= 0.0001 )
|
||||
{
|
||||
len = snprintf( temp, sizeof( temp ), "%.10f", engUnits );
|
||||
|
||||
while( --len > 0 && temp[len] == '0' )
|
||||
temp[len] = '\0';
|
||||
|
||||
++len;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = snprintf( temp, sizeof( temp ), "%.10g", engUnits );
|
||||
}
|
||||
|
||||
return std::string( temp, len );;
|
||||
}
|
||||
|
||||
|
||||
int parseBIU( const char* s )
|
||||
{
|
||||
double d = strtod( s, NULL );
|
||||
return KiROUND( double( d * BIU_PER_MM ) );
|
||||
// return int( d * BIU_PER_MM );
|
||||
}
|
||||
|
||||
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
unsigned mismatches = 0;
|
||||
|
||||
if( argc > 1 )
|
||||
{
|
||||
// take a value on the command line and round trip it back to ASCII.
|
||||
|
||||
int i = parseBIU( argv[1] );
|
||||
|
||||
printf( "%s: i:%d\n", __func__, i );
|
||||
|
||||
std::string s = biuFmt( i );
|
||||
|
||||
printf( "%s: s:%s\n", __func__, s.c_str() );
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// printf( "sizeof(long double): %zd\n", sizeof( long double ) );
|
||||
|
||||
// Emperically prove that we can round trip all 4 billion 32 bit integers representative
|
||||
// of nanometers out to textual floating point millimeters, and back without error using
|
||||
// the above two functions.
|
||||
// for( int i = INT_MIN; int64_t( i ) <= int64_t( INT_MAX ); ++i )
|
||||
for( int64_t j = INT_MIN; j <= int64_t( INT_MAX ); ++j )
|
||||
{
|
||||
int i = int( j );
|
||||
|
||||
std::string s = biuFmt( int( i ) );
|
||||
|
||||
int r = parseBIU( s.c_str() );
|
||||
|
||||
if( r != i )
|
||||
{
|
||||
printf( "i:%d biuFmt:%s r:%d\n", i, s.c_str(), r );
|
||||
++mismatches;
|
||||
}
|
||||
|
||||
if( !( i & 0xFFFFFF ) )
|
||||
{
|
||||
printf( " %08x", i );
|
||||
fflush( stdout );
|
||||
}
|
||||
}
|
||||
|
||||
printf( "mismatches:%u\n", mismatches );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -99,6 +99,9 @@ indent_class = true # false/true
|
|||
# Whether to indent the stuff after a leading class colon
|
||||
indent_class_colon = false # false/true
|
||||
|
||||
# Virtual indent from the ':' for member initializers. Default is 2
|
||||
indent_ctor_init_leading = 2 # number
|
||||
|
||||
# Additional indenting for constructor initializer list
|
||||
indent_ctor_init = 0 # number
|
||||
|
||||
|
@ -221,6 +224,12 @@ sp_arith = force # ignore/add/remove/force
|
|||
# Add or remove space around assignment operator '=', '+=', etc
|
||||
sp_assign = force # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around '=' in C++11 lambda capture specifications. Overrides sp_assign
|
||||
sp_cpp_lambda_assign = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space after the capture specification in C++11 lambda.
|
||||
sp_cpp_lambda_paren = ignore # ignore/add/remove/force
|
||||
|
||||
# Add or remove space around assignment operator '=' in a prototype
|
||||
sp_assign_default = ignore # ignore/add/remove/force
|
||||
|
||||
|
@ -326,6 +335,10 @@ sp_angle_word = ignore # ignore/add/remove/force
|
|||
# Add or remove space between '>' and '>' in '>>' (template stuff C++/C# only). Default=Add
|
||||
sp_angle_shift = add # ignore/add/remove/force
|
||||
|
||||
# Permit removal of the space between '>>' in 'foo<bar<int> >' (C++11 only). Default=False
|
||||
# sp_angle_shift cannot remove the space without this option.
|
||||
sp_permit_cpp11_shift = false # false/true
|
||||
|
||||
# Add or remove space before '(' of 'if', 'for', 'switch', and 'while'
|
||||
sp_before_sparen = remove # ignore/add/remove/force
|
||||
|
||||
|
|
Loading…
Reference in New Issue