From 98ba50f80e4eb29796df2b286eb31920a66d2a08 Mon Sep 17 00:00:00 2001 From: charras Date: Wed, 3 Feb 2010 14:05:17 +0000 Subject: [PATCH] Use layer_widget in Gerbview Added sample gerber files for test (gerbview has problem with 2 files) --- gerbview/CMakeLists.txt | 2 + gerbview/class_gerbview_layer_widget.cpp | 246 +++ gerbview/class_gerbview_layer_widget.h | 83 + gerbview/edit.cpp | 17 +- .../gerber_test_files/apertures_rotated.gbr | 1109 +++++++++++++ .../apertures_rotated_and_arcs_in_tracks.gbr | 1417 +++++++++++++++++ ...lygons.gbr => test_polygons_with_arcs.gbr} | 0 ...gbr => test_polygons_with_arcs_simple.gbr} | 0 gerbview/gerberframe.cpp | 158 +- gerbview/gerbview.cpp | 4 +- gerbview/gerbview.h | 9 +- gerbview/gerbview_config.cpp | 4 - gerbview/gerbview_config.h | 9 - .../gerbview_dialog_display_options_frame.cpp | 10 +- gerbview/gerbview_id.h | 16 +- gerbview/onrightclick.cpp | 4 - gerbview/options.cpp | 38 +- .../{set_color.cpp => set_color.cpp.unused} | 0 gerbview/{set_color.h => set_color.h.unused} | 0 gerbview/tool_gerber.cpp | 82 +- gerbview/tracepcb.cpp | 2 +- gerbview/wxGerberFrame.h | 67 + ...heyCyrillic.h => HersheyCyrillic.h.unused} | 0 ...hershey_fonts.h => hershey_fonts.h.unused} | 0 include/id.h | 1 - internat/fr/kicad.mo | Bin 224683 -> 224843 bytes internat/fr/kicad.po | 895 ++++++----- pcbnew/CMakeLists.txt | 1 + pcbnew/class_pcb_layer_widget.cpp | 347 ++++ pcbnew/class_pcb_layer_widget.h | 81 + pcbnew/dialog_general_options.cpp | 25 +- pcbnew/menubar_pcbframe.cpp | 2 +- pcbnew/pcbframe.cpp | 348 +--- 33 files changed, 4013 insertions(+), 964 deletions(-) create mode 100644 gerbview/class_gerbview_layer_widget.cpp create mode 100644 gerbview/class_gerbview_layer_widget.h create mode 100644 gerbview/gerber_test_files/apertures_rotated.gbr create mode 100644 gerbview/gerber_test_files/apertures_rotated_and_arcs_in_tracks.gbr rename gerbview/gerber_test_files/{test_polygons.gbr => test_polygons_with_arcs.gbr} (100%) rename gerbview/gerber_test_files/{test_polygons_simple.gbr => test_polygons_with_arcs_simple.gbr} (100%) rename gerbview/{set_color.cpp => set_color.cpp.unused} (100%) rename gerbview/{set_color.h => set_color.h.unused} (100%) rename include/{HersheyCyrillic.h => HersheyCyrillic.h.unused} (100%) rename include/{hershey_fonts.h => hershey_fonts.h.unused} (100%) create mode 100644 pcbnew/class_pcb_layer_widget.cpp create mode 100644 pcbnew/class_pcb_layer_widget.h diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index 0dac90ea10..4ff0fc1b6b 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -18,6 +18,7 @@ endif(APPLE) set(GERBVIEW_SRCS block.cpp + class_gerbview_layer_widget.cpp controle.cpp dcode.cpp deltrack.cpp @@ -50,6 +51,7 @@ set(GERBVIEW_SRCS set(GERBVIEW_EXTRA_SRCS ../share/setpage.cpp + ../pcbnew/layer_widget.cpp ../pcbnew/printout_controler.cpp ) diff --git a/gerbview/class_gerbview_layer_widget.cpp b/gerbview/class_gerbview_layer_widget.cpp new file mode 100644 index 0000000000..69772be65c --- /dev/null +++ b/gerbview/class_gerbview_layer_widget.cpp @@ -0,0 +1,246 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr + * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck + * Copyright (C) 2010 Kicad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +/*********************************************************/ +/* class_gerbview_layer_widget.cpp - gerbview layers manager. */ +/*********************************************************/ + +#include "fctsys.h" +#include "common.h" +#include "class_drawpanel.h" +#include "pcbstruct.h" +#include "gerbview.h" +#include "wxGerberFrame.h" +#include "layer_widget.h" +#include "class_gerbview_layer_widget.h" + + +/** + * Class GERBER_LAYER_WIDGET + * is here to implement the abtract functions of LAYER_WIDGET so they + * may be tied into the WinEDA_GerberFrame's data and so we can add a popup + * menu which is specific to PCBNEW's needs. + */ + + +GERBER_LAYER_WIDGET::GERBER_LAYER_WIDGET( WinEDA_GerberFrame* aParent, wxWindow* aFocusOwner, int aPointSize ) : + LAYER_WIDGET( aParent, aFocusOwner, aPointSize ), + myframe( aParent ) +{ + BOARD* board = myframe->GetBoard(); + + // Fixed "Rendering" tab rows within the LAYER_WIDGET, only the initial color + // is changed before appending to the LAYER_WIDGET. This is an automatic variable + // not a static variable, change the color & state after copying from code to renderRows + // on the stack. + LAYER_WIDGET::ROW renderRows[2] = { + +#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width + + // text id color tooltip checked + RR( _( "Grid" ), GERBER_GRID_VISIBLE, WHITE, _( "Show the (x,y) grid dots" ) ), + RR( _( "DCodes" ), DCODES_VISIBLE, WHITE, _( "Show DCodes identification" ) ), + }; + + for( unsigned row=0; rowGetVisibleElementColor( renderRows[row].id ); + } + renderRows[row].state = board->IsElementVisible( renderRows[row].id ); + } + + AppendRenderRows( renderRows, DIM(renderRows) ); + + //------------------------------------------------------ + // handle the popup menu over the layer window. + m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN, + wxMouseEventHandler( GERBER_LAYER_WIDGET::onRightDownLayers ), NULL, this ); + + // since Popupmenu() calls this->ProcessEvent() we must call this->Connect() + // and not m_LayerScrolledWindow->Connect() + Connect( ID_SHOW_ALL_COPPERS, ID_SHOW_NO_COPPERS, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler( GERBER_LAYER_WIDGET::onPopupSelection ), NULL, this ); + + // install the right click handler into each control at end of ReFill() + // using installRightLayerClickHandler +} + + +void GERBER_LAYER_WIDGET::installRightLayerClickHandler() +{ + int rowCount = GetLayerRowCount(); + for( int row=0; rowConnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( + GERBER_LAYER_WIDGET::onRightDownLayers ), NULL, this ); + } + } +} + + +void GERBER_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event ) +{ + wxMenu menu; + + // menu text is capitalized: + // http://library.gnome.org/devel/hig-book/2.20/design-text-labels.html.en#layout-capitalization + menu.Append( new wxMenuItem( &menu, ID_SHOW_ALL_COPPERS, + _("Show All Layers") ) ); + + menu.Append( new wxMenuItem( &menu, ID_SHOW_NO_COPPERS, + _( "Hide All Layers" ) ) ); + + PopupMenu( &menu ); + + passOnFocus(); +} + +void GERBER_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event ) +{ + int rowCount; + int menuId = event.GetId(); + bool visible; + + switch( menuId ) + { + case ID_SHOW_ALL_COPPERS: + visible = true; + goto L_change_coppers; + + case ID_SHOW_NO_COPPERS: + visible = false; + L_change_coppers: + int lastCu = -1; + rowCount = GetLayerRowCount(); + for( int row=rowCount-1; row>=0; --row ) + { + wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 ); + int layer = getDecodedId( cb->GetId() ); + if( IsValidCopperLayerIndex( layer ) ) + { + lastCu = row; + break; + } + } + + for( int row=0; rowGetId() ); + + if( IsValidCopperLayerIndex( layer ) ) + { + cb->SetValue( visible ); + + bool isLastCopperLayer = (row==lastCu); + + OnLayerVisible( layer, visible, isLastCopperLayer ); + + if( isLastCopperLayer ) + break; + } + } + break; + } +} + + +void GERBER_LAYER_WIDGET::ReFill() +{ + BOARD* brd = myframe->GetBoard(); + int layer; + ClearLayerRows(); + for( layer = 0; layer < LAYER_COUNT; layer++ ) + { + wxString msg; + msg.Printf( _("Layer %d"), layer+1 ); + AppendLayerRow( LAYER_WIDGET::ROW( msg, layer, brd->GetLayerColor( layer ), wxEmptyString, true ) ); + } + + installRightLayerClickHandler(); +} + +//------------------------------------------------ + +void GERBER_LAYER_WIDGET::OnLayerColorChange( int aLayer, int aColor ) +{ + myframe->GetBoard()->SetLayerColor( aLayer, aColor ); + myframe->DrawPanel->Refresh(); +} + +bool GERBER_LAYER_WIDGET::OnLayerSelect( int aLayer ) +{ + // the layer change from the GERBER_LAYER_WIDGET can be denied by returning + // false from this function. +// myframe->setActiveLayer( aLayer, false ); +// myframe->syncLayerBox(); + if(DisplayOpt.ContrastModeDisplay) + myframe->DrawPanel->Refresh(); + + return true; +} + +void GERBER_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal ) +{ + BOARD* brd = myframe->GetBoard(); + + int visibleLayers = brd->GetVisibleLayers(); + + if( isVisible ) + visibleLayers |= (1 << aLayer); + else + visibleLayers &= ~(1 << aLayer); + + brd->SetVisibleLayers( visibleLayers ); + + if( isFinal ) + myframe->DrawPanel->Refresh(); +} + +void GERBER_LAYER_WIDGET::OnRenderColorChange( int aId, int aColor ) +{ + myframe->GetBoard()->SetVisibleElementColor( aId, aColor ); + myframe->DrawPanel->Refresh(); +} + +void GERBER_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled ) +{ + BOARD* brd = myframe->GetBoard(); + brd->SetElementVisibility( aId, isEnabled ); + + myframe->DrawPanel->Refresh(); +} + +//----------------------------------------------- + + diff --git a/gerbview/class_gerbview_layer_widget.h b/gerbview/class_gerbview_layer_widget.h new file mode 100644 index 0000000000..caf9d3a5aa --- /dev/null +++ b/gerbview/class_gerbview_layer_widget.h @@ -0,0 +1,83 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr + * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck + * Copyright (C) 2010 Kicad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +/************************************************************/ +/* class_gerber_layer_widget.h : header for the layers manager */ +/************************************************************/ + +#ifndef _CLASS_GERBER_LAYER_WIDGET_H_ +#define _CLASS_GERBER_LAYER_WIDGET_H_ + +#include "layer_widget.h" + +/** + * Class GERBER_LAYER_WIDGET + * is here to implement the abtract functions of LAYER_WIDGET so they + * may be tied into the WinEDA_GerberFrame's data and so we can add a popup + * menu which is specific to PCBNEW's needs. + */ +class GERBER_LAYER_WIDGET : public LAYER_WIDGET +{ + WinEDA_GerberFrame* myframe; + + // popup menu ids. +#define ID_SHOW_ALL_COPPERS wxID_HIGHEST +#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1) + + /** + * Function OnRightDownLayers + * puts up a popup menu for the layer panel. + */ + void onRightDownLayers( wxMouseEvent& event ); + + void onPopupSelection( wxCommandEvent& event ); + + /// this is for the popup menu, the right click handler has to be installed + /// on every child control within the layer panel. + void installRightLayerClickHandler(); + +public: + + /** + * Constructor + * @param aPointSize is the font point size to use within the widget. This + * effectively sets the overal size of the widget via the row height and bitmap + * button sizes. + */ + GERBER_LAYER_WIDGET( WinEDA_GerberFrame* aParent, wxWindow* aFocusOwner, int aPointSize = 10 ); + + void ReFill(); + + //---------------- + void OnLayerColorChange( int aLayer, int aColor ); + bool OnLayerSelect( int aLayer ); + void OnLayerVisible( int aLayer, bool isVisible, bool isFinal ); + void OnRenderColorChange( int aId, int aColor ); + void OnRenderEnable( int aId, bool isEnabled ); + //--------------- +}; + +#endif // _CLASS_GERBER_LAYER_WIDGET_H_ diff --git a/gerbview/edit.cpp b/gerbview/edit.cpp index 4b052c8349..9684209d60 100644 --- a/gerbview/edit.cpp +++ b/gerbview/edit.cpp @@ -49,7 +49,7 @@ void WinEDA_GerberFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) break; - case ID_PCB_DELETE_ITEM_BUTT: + case ID_GERBVIEW_DELETE_ITEM_BUTT: DrawStruct = GerberGeneralLocateAndDisplay(); if( DrawStruct == NULL ) break; @@ -126,7 +126,7 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event ) Files_io( event ); break; - case ID_PCB_GLOBAL_DELETE: + case ID_GERBVIEW_GLOBAL_DELETE: Erase_Current_Layer( TRUE ); break; @@ -152,20 +152,11 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_POPUP_CANCEL_CURRENT_COMMAND: break; - case ID_POPUP_PCB_DELETE_TRACKSEG: - DrawPanel->MouseToCursorSchema(); - if( GetScreen()->GetCurItem() == NULL ) - break; - Delete_Segment( &dc, (TRACK*) GetScreen()->GetCurItem() ); - GetScreen()->SetCurItem( NULL ); - GetScreen()->SetModify(); - break; - - case ID_PCB_DELETE_ITEM_BUTT: + case ID_GERBVIEW_DELETE_ITEM_BUTT: SetToolID( id, wxCURSOR_BULLSEYE, wxT( "Delete item" ) ); break; - case ID_TOOLBARH_PCB_SELECT_LAYER: + case ID_TOOLBARH_GERBVIEW_SELECT_LAYER: GetScreen()->m_Active_Layer = m_SelLayerBox->GetChoice(); DrawPanel->Refresh( TRUE ); break; diff --git a/gerbview/gerber_test_files/apertures_rotated.gbr b/gerbview/gerber_test_files/apertures_rotated.gbr new file mode 100644 index 0000000000..3f1e72768b --- /dev/null +++ b/gerbview/gerber_test_files/apertures_rotated.gbr @@ -0,0 +1,1109 @@ +%ICAS*% +%FSLAX44Y44*% +%OFA0B0*% +%SFA1B1*% +%MOMM*% +%AMFRECTNOHOLE10* +21,1,1.5748,2.2860,0.0000,0.0000,0* +% +%AMFRECTNOHOLE11* +21,1,0.5080,1.1430,0.0000,0.0000,180* +% +%AMFRECTNOHOLE12* +21,1,1.5240,2.0320,0.0000,0.0000,180* +% +%AMFRECTNOHOLE13* +21,1,1.5240,2.0320,0.0000,0.0000,270* +% +%AMFRECTNOHOLE14* +21,1,1.5240,2.0320,0.0000,0.0000,90* +% +%AMFRECTNOHOLE15* +21,1,0.8890,1.3970,0.0000,0.0000,270* +% +%ADD10FRECTNOHOLE10*% +%ADD11FRECTNOHOLE11*% +%ADD12FRECTNOHOLE12*% +%ADD13FRECTNOHOLE13*% +%ADD14FRECTNOHOLE14*% +%ADD15FRECTNOHOLE15*% +%ADD17C,0.3048X0.0000X0.0000*% +%ADD19C,1.6764X0.0000X0.0000*% +%ADD22C,2.2860X0.0000X0.0000*% +%LNBottom*% +G54D10* +X2279650Y-1339850D3* +X1809750Y-1339850D3* +G54D11* +X2355850Y-1435100D3* +X2343150Y-1371600D3* +X2355850Y-1371600D3* +X2368550Y-1371600D3* +X2381250Y-1371600D3* +X2393950Y-1371600D3* +X2406650Y-1371600D3* +X2419350Y-1371600D3* +X2432050Y-1371600D3* +X2432050Y-1435100D3* +X2419350Y-1435100D3* +X2406650Y-1435100D3* +X2393950Y-1435100D3* +X2381250Y-1435100D3* +X2368550Y-1435100D3* +X2343150Y-1435100D3* +X1885950Y-1435100D3* +X1873250Y-1371600D3* +X1885950Y-1371600D3* +X1898650Y-1371600D3* +X1911350Y-1371600D3* +X1924050Y-1371600D3* +X1936750Y-1371600D3* +X1949450Y-1371600D3* +X1962150Y-1371600D3* +X1962150Y-1435100D3* +X1949450Y-1435100D3* +X1936750Y-1435100D3* +X1924050Y-1435100D3* +X1911350Y-1435100D3* +X1898650Y-1435100D3* +X1873250Y-1435100D3* +G54D12* +X2024380Y-1430020D3* +X1991360Y-1430020D3* +G54D13* +X2272030Y-1418590D3* +X2272030Y-1451610D3* +G54D14* +X2101850Y-1369060D3* +X2101850Y-1336040D3* +X2228850Y-1369060D3* +X2228850Y-1336040D3* +X2190750Y-1369060D3* +X2190750Y-1336040D3* +X2152650Y-1369060D3* +X2152650Y-1336040D3* +G54D15* +X1986280Y-1386205D3* +X1986280Y-1405255D3* +X2321560Y-1384935D3* +X2321560Y-1403985D3* +X2059940Y-1339215D3* +X2059940Y-1358265D3* +G54D17* +X1873250Y-1439291D2* +X1873250Y-1435100D1* +X1873250Y-1441867D2* +X1873250Y-1439291D1* +X1874738Y-1443355D2* +X1873250Y-1441867D1* +X1881450Y-1445546D2* +X1874738Y-1443355D1* +X1883990Y-1445546D2* +X1881450Y-1445546D1* +X1887910Y-1445546D2* +X1883990Y-1445546D1* +X1890068Y-1444625D2* +X1887910Y-1445546D1* +X1892300Y-1442393D2* +X1890068Y-1444625D1* +X1892300Y-1427807D2* +X1892300Y-1442393D1* +X1894532Y-1425575D2* +X1892300Y-1427807D1* +X1896690Y-1424654D2* +X1894532Y-1425575D1* +X1900610Y-1424654D2* +X1896690Y-1424654D1* +X1902768Y-1425575D2* +X1900610Y-1424654D1* +X1905000Y-1427807D2* +X1902768Y-1425575D1* +X1905000Y-1442393D2* +X1905000Y-1427807D1* +X1907232Y-1444625D2* +X1905000Y-1442393D1* +X1909390Y-1445546D2* +X1907232Y-1444625D1* +X1922090Y-1445546D2* +X1909390Y-1445546D1* +X1926010Y-1445546D2* +X1922090Y-1445546D1* +X1928168Y-1444625D2* +X1926010Y-1445546D1* +X1930400Y-1442393D2* +X1928168Y-1444625D1* +X1930400Y-1427807D2* +X1930400Y-1442393D1* +X1932632Y-1425575D2* +X1930400Y-1427807D1* +X1937330Y-1424654D2* +X1932632Y-1425575D1* +X1941250Y-1424654D2* +X1937330Y-1424654D1* +X1948180Y-1424686D2* +X1941250Y-1424654D1* +X1949450Y-1430909D2* +X1949450Y-1435100D1* +X1949450Y-1428333D2* +X1949450Y-1430909D1* +X1948180Y-1424686D2* +X1949450Y-1428333D1* +X2419350Y-1430909D2* +X2419350Y-1435100D1* +X2419350Y-1428333D2* +X2419350Y-1430909D1* +X2417862Y-1426845D2* +X2419350Y-1428333D1* +X2411150Y-1424654D2* +X2417862Y-1426845D1* +X2408610Y-1424654D2* +X2411150Y-1424654D1* +X2404690Y-1424654D2* +X2408610Y-1424654D1* +X2402532Y-1425575D2* +X2404690Y-1424654D1* +X2400300Y-1427807D2* +X2402532Y-1425575D1* +X2400300Y-1447822D2* +X2400300Y-1427807D1* +X2398931Y-1451126D2* +X2400300Y-1447822D1* +X2389021Y-1461036D2* +X2398931Y-1451126D1* +X2385717Y-1462405D2* +X2389021Y-1461036D1* +X2378280Y-1463326D2* +X2385717Y-1462405D1* +X2363900Y-1463326D2* +X2378280Y-1463326D1* +X2358820Y-1463326D2* +X2363900Y-1463326D1* +X2355177Y-1461817D2* +X2358820Y-1463326D1* +X2345008Y-1451648D2* +X2355177Y-1461817D1* +X2343499Y-1448005D2* +X2345008Y-1451648D1* +X2343150Y-1445023D2* +X2343499Y-1448005D1* +X2343150Y-1439291D2* +X2343150Y-1445023D1* +X2343150Y-1435100D2* +X2343150Y-1439291D1* +X2223421Y-1342136D2* +X2228850Y-1336040D1* +X2223421Y-1345620D2* +X2223421Y-1342136D1* +X2223262Y-1348486D2* +X2223421Y-1345620D1* +X2110486Y-1338929D2* +X2101850Y-1336040D1* +X2113970Y-1338929D2* +X2110486Y-1338929D1* +X2140530Y-1348391D2* +X2113970Y-1338929D1* +X2175252Y-1356856D2* +X2140530Y-1348391D1* +X2195572Y-1356856D2* +X2175252Y-1356856D1* +X2206248Y-1356856D2* +X2195572Y-1356856D1* +X2206467Y-1356765D2* +X2206248Y-1356856D1* +X2223262Y-1348486D2* +X2206467Y-1356765D1* +X2093214Y-1338929D2* +X2101850Y-1336040D1* +X2089730Y-1338929D2* +X2093214Y-1338929D1* +X2072640Y-1343914D2* +X2089730Y-1338929D1* +X2057686Y-1361186D2* +X2059940Y-1358265D1* +X2057686Y-1364670D2* +X2057686Y-1361186D1* +X2054915Y-1367441D2* +X2057686Y-1364670D1* +X1999062Y-1404116D2* +X2054915Y-1367441D1* +X1998687Y-1404271D2* +X1999062Y-1404116D1* +X1995106Y-1405255D2* +X1998687Y-1404271D1* +X1991741Y-1405255D2* +X1995106Y-1405255D1* +X1986280Y-1405255D2* +X1991741Y-1405255D1* +X2062194Y-1355344D2* +X2059940Y-1358265D1* +X2062194Y-1351860D2* +X2062194Y-1355344D1* +X2064965Y-1349089D2* +X2062194Y-1351860D1* +X2068885Y-1348391D2* +X2064965Y-1349089D1* +X2071656Y-1345620D2* +X2068885Y-1348391D1* +X2072640Y-1343914D2* +X2071656Y-1345620D1* +X2065401Y-1339215D2* +X2059940Y-1339215D1* +X2068766Y-1339215D2* +X2065401Y-1339215D1* +X2071370Y-1341819D2* +X2068766Y-1339215D1* +X2072640Y-1343914D2* +X2071370Y-1341819D1* +X2316099Y-1403985D2* +X2321560Y-1403985D1* +X2308957Y-1403985D2* +X2316099Y-1403985D1* +X2308220Y-1403680D2* +X2308957Y-1403985D1* +X2303742Y-1401492D2* +X2308220Y-1403680D1* +X2240970Y-1356709D2* +X2303742Y-1401492D1* +X2223262Y-1348486D2* +X2240970Y-1356709D1* +X2323814Y-1406906D2* +X2321560Y-1403985D1* +X2323814Y-1410390D2* +X2323814Y-1406906D1* +X2335879Y-1431345D2* +X2323814Y-1410390D1* +X2338650Y-1434116D2* +X2335879Y-1431345D1* +X2340610Y-1434116D2* +X2338650Y-1434116D1* +X2342134Y-1434116D2* +X2340610Y-1434116D1* +X2343150Y-1435100D2* +X2342134Y-1434116D1* +X1980819Y-1405255D2* +X1986280Y-1405255D1* +X1977454Y-1405255D2* +X1980819Y-1405255D1* +X1948180Y-1424686D2* +X1977454Y-1405255D1* +X2030476Y-1426210D2* +X2024380Y-1430020D1* +X2057095Y-1426210D2* +X2030476Y-1426210D1* +X2057095Y-1422400D2* +X2057095Y-1426210D1* +X2158079Y-1375156D2* +X2152650Y-1369060D1* +X2158079Y-1378640D2* +X2158079Y-1375156D1* +X2162099Y-1416050D2* +X2158079Y-1378640D1* +X2162099Y-1422400D2* +X2162099Y-1416050D1* +X2232101Y-1375156D2* +X2228850Y-1369060D1* +X2232101Y-1416050D2* +X2232101Y-1375156D1* +X2232101Y-1422400D2* +X2232101Y-1416050D1* +X2161286Y-1338929D2* +X2152650Y-1336040D1* +X2164770Y-1338929D2* +X2161286Y-1338929D1* +X2178691Y-1348244D2* +X2164770Y-1338929D1* +X2199011Y-1348244D2* +X2178691Y-1348244D1* +X2202809Y-1348244D2* +X2199011Y-1348244D1* +X2205494Y-1345559D2* +X2202809Y-1348244D1* +X2213959Y-1326460D2* +X2205494Y-1345559D1* +X2216730Y-1323689D2* +X2213959Y-1326460D1* +X2220650Y-1323689D2* +X2216730Y-1323689D1* +X2240970Y-1323689D2* +X2220650Y-1323689D1* +X2243741Y-1326460D2* +X2240970Y-1323689D1* +X2267045Y-1353240D2* +X2243741Y-1326460D1* +X2302606Y-1389893D2* +X2267045Y-1353240D1* +X2309617Y-1396904D2* +X2302606Y-1389893D1* +X2329637Y-1396904D2* +X2309617Y-1396904D1* +X2331181Y-1398448D2* +X2329637Y-1396904D1* +X2349500Y-1427807D2* +X2331181Y-1398448D1* +X2349500Y-1442393D2* +X2349500Y-1427807D1* +X2352544Y-1446612D2* +X2349500Y-1442393D1* +X2360213Y-1454281D2* +X2352544Y-1446612D1* +X2360588Y-1454436D2* +X2360213Y-1454281D1* +X2373288Y-1454436D2* +X2360588Y-1454436D1* +X2384132Y-1454436D2* +X2373288Y-1454436D1* +X2384507Y-1454281D2* +X2384132Y-1454436D1* +X2392176Y-1446612D2* +X2384507Y-1454281D1* +X2392331Y-1446237D2* +X2392176Y-1446612D1* +X2393950Y-1441867D2* +X2392331Y-1446237D1* +X2393950Y-1439291D2* +X2393950Y-1441867D1* +X2393950Y-1435100D2* +X2393950Y-1439291D1* +X2144014Y-1333151D2* +X2152650Y-1336040D1* +X2140530Y-1333151D2* +X2144014Y-1333151D1* +X2113970Y-1323689D2* +X2140530Y-1333151D1* +X2093650Y-1323689D2* +X2113970Y-1323689D1* +X2089730Y-1323689D2* +X2093650Y-1323689D1* +X2050995Y-1330039D2* +X2089730Y-1323689D1* +X2048224Y-1332810D2* +X2050995Y-1330039D1* +X1997996Y-1392610D2* +X2048224Y-1332810D1* +X1995225Y-1395381D2* +X1997996Y-1392610D1* +X1973873Y-1396079D2* +X1995225Y-1395381D1* +X1973498Y-1396234D2* +X1973873Y-1396079D1* +X1931474Y-1416700D2* +X1973498Y-1396234D1* +X1924050Y-1424146D2* +X1931474Y-1416700D1* +X1924050Y-1429385D2* +X1924050Y-1424146D1* +X1924050Y-1430909D2* +X1924050Y-1429385D1* +X1924050Y-1435100D2* +X1924050Y-1430909D1* +X2432050Y-1439291D2* +X2432050Y-1435100D1* +X2432050Y-1441867D2* +X2432050Y-1439291D1* +X2419949Y-1456684D2* +X2432050Y-1441867D1* +X2407279Y-1469354D2* +X2419949Y-1456684D1* +X2399792Y-1476714D2* +X2407279Y-1469354D1* +X2399384Y-1476986D2* +X2399792Y-1476714D1* +X2389669Y-1481010D2* +X2399384Y-1476986D1* +X2389187Y-1481106D2* +X2389669Y-1481010D1* +X2368233Y-1481106D2* +X2389187Y-1481106D1* +X2355533Y-1481106D2* +X2368233Y-1481106D1* +X1908468Y-1454436D2* +X2355533Y-1481106D1* +X1908093Y-1454281D2* +X1908468Y-1454436D1* +X1904602Y-1450975D2* +X1908093Y-1454281D1* +X1898650Y-1445023D2* +X1904602Y-1450975D1* +X1898650Y-1440815D2* +X1898650Y-1445023D1* +X1898650Y-1439291D2* +X1898650Y-1440815D1* +X1898650Y-1435100D2* +X1898650Y-1439291D1* +X2432050Y-1342898D2* +X2432050Y-1339850D1* +X2416093Y-1352419D2* +X2432050Y-1342898D1* +X2408424Y-1360088D2* +X2416093Y-1352419D1* +X2408269Y-1360463D2* +X2408424Y-1360088D1* +X2406650Y-1364833D2* +X2408269Y-1360463D1* +X2406650Y-1367409D2* +X2406650Y-1364833D1* +X2406650Y-1371600D2* +X2406650Y-1367409D1* +X2381250Y-1342898D2* +X2381250Y-1339850D1* +X2381250Y-1367409D2* +X2381250Y-1342898D1* +X2381250Y-1371600D2* +X2381250Y-1367409D1* +X2330450Y-1342898D2* +X2330450Y-1339850D1* +X2354362Y-1363345D2* +X2330450Y-1342898D1* +X2355850Y-1364833D2* +X2354362Y-1363345D1* +X2355850Y-1365885D2* +X2355850Y-1364833D1* +X2355850Y-1367409D2* +X2355850Y-1365885D1* +X2355850Y-1371600D2* +X2355850Y-1367409D1* +X2282793Y-1349756D2* +X2279650Y-1339850D1* +X2282793Y-1353240D2* +X2282793Y-1349756D1* +X2311940Y-1390471D2* +X2282793Y-1353240D1* +X2313484Y-1392015D2* +X2311940Y-1390471D1* +X2333503Y-1392015D2* +X2313484Y-1392015D1* +X2340515Y-1399027D2* +X2333503Y-1392015D1* +X2355850Y-1424146D2* +X2340515Y-1399027D1* +X2355850Y-1429385D2* +X2355850Y-1424146D1* +X2355850Y-1430909D2* +X2355850Y-1429385D1* +X2355850Y-1435100D2* +X2355850Y-1430909D1* +X2457450Y-1260602D2* +X2457450Y-1263650D1* +X2419782Y-1181100D2* +X2457450Y-1260602D1* +X2419782Y-1174750D2* +X2419782Y-1181100D1* +X2406650Y-1260602D2* +X2406650Y-1263650D1* +X2349779Y-1181100D2* +X2406650Y-1260602D1* +X2349779Y-1174750D2* +X2349779Y-1181100D1* +X2355850Y-1260602D2* +X2355850Y-1263650D1* +X2279802Y-1181100D2* +X2355850Y-1260602D1* +X2279802Y-1174750D2* +X2279802Y-1181100D1* +X2305050Y-1260602D2* +X2305050Y-1263650D1* +X2209800Y-1181100D2* +X2305050Y-1260602D1* +X2209800Y-1174750D2* +X2209800Y-1181100D1* +X2279650Y-1260602D2* +X2279650Y-1263650D1* +X2174799Y-1181100D2* +X2279650Y-1260602D1* +X2174799Y-1174750D2* +X2174799Y-1181100D1* +X2330450Y-1260602D2* +X2330450Y-1263650D1* +X2244801Y-1181100D2* +X2330450Y-1260602D1* +X2244801Y-1174750D2* +X2244801Y-1181100D1* +X2381250Y-1260602D2* +X2381250Y-1263650D1* +X2314804Y-1181100D2* +X2381250Y-1260602D1* +X2314804Y-1174750D2* +X2314804Y-1181100D1* +X2432050Y-1260602D2* +X2432050Y-1263650D1* +X2384781Y-1181100D2* +X2432050Y-1260602D1* +X2384781Y-1174750D2* +X2384781Y-1181100D1* +X2482850Y-1260602D2* +X2482850Y-1263650D1* +X2454783Y-1181100D2* +X2482850Y-1260602D1* +X2454783Y-1174750D2* +X2454783Y-1181100D1* +X2342134Y-1370616D2* +X2343150Y-1371600D1* +X2338650Y-1370616D2* +X2342134Y-1370616D1* +X2334342Y-1367024D2* +X2338650Y-1370616D1* +X2305050Y-1342898D2* +X2334342Y-1367024D1* +X2305050Y-1339850D2* +X2305050Y-1342898D1* +X2355850Y-1342898D2* +X2355850Y-1339850D1* +X2366776Y-1360088D2* +X2355850Y-1342898D1* +X2366931Y-1360463D2* +X2366776Y-1360088D1* +X2368550Y-1364833D2* +X2366931Y-1360463D1* +X2368550Y-1367409D2* +X2368550Y-1364833D1* +X2368550Y-1371600D2* +X2368550Y-1367409D1* +X2406650Y-1342898D2* +X2406650Y-1339850D1* +X2395724Y-1360088D2* +X2406650Y-1342898D1* +X2395569Y-1360463D2* +X2395724Y-1360088D1* +X2393950Y-1364833D2* +X2395569Y-1360463D1* +X2393950Y-1367409D2* +X2393950Y-1364833D1* +X2393950Y-1371600D2* +X2393950Y-1367409D1* +X2457450Y-1342898D2* +X2457450Y-1339850D1* +X2437560Y-1355933D2* +X2457450Y-1342898D1* +X2420838Y-1363345D2* +X2437560Y-1355933D1* +X2419350Y-1364833D2* +X2420838Y-1363345D1* +X2419350Y-1365885D2* +X2419350Y-1364833D1* +X2419350Y-1367409D2* +X2419350Y-1365885D1* +X2419350Y-1371600D2* +X2419350Y-1367409D1* +X1962150Y-1342898D2* +X1962150Y-1339850D1* +X1946193Y-1352419D2* +X1962150Y-1342898D1* +X1938524Y-1360088D2* +X1946193Y-1352419D1* +X1938369Y-1360463D2* +X1938524Y-1360088D1* +X1936750Y-1364833D2* +X1938369Y-1360463D1* +X1936750Y-1367409D2* +X1936750Y-1364833D1* +X1936750Y-1371600D2* +X1936750Y-1367409D1* +X1911350Y-1342898D2* +X1911350Y-1339850D1* +X1911350Y-1367409D2* +X1911350Y-1342898D1* +X1911350Y-1371600D2* +X1911350Y-1367409D1* +X1860550Y-1342898D2* +X1860550Y-1339850D1* +X1884462Y-1363345D2* +X1860550Y-1342898D1* +X1885950Y-1364833D2* +X1884462Y-1363345D1* +X1885950Y-1365885D2* +X1885950Y-1364833D1* +X1885950Y-1367409D2* +X1885950Y-1365885D1* +X1885950Y-1371600D2* +X1885950Y-1367409D1* +X1816100Y-1346549D2* +X1809750Y-1339850D1* +X1819584Y-1346549D2* +X1816100Y-1346549D1* +X1822355Y-1349320D2* +X1819584Y-1346549D1* +X1885950Y-1428333D2* +X1822355Y-1349320D1* +X1885950Y-1430909D2* +X1885950Y-1428333D1* +X1885950Y-1435100D2* +X1885950Y-1430909D1* +X1987550Y-1260602D2* +X1987550Y-1263650D1* +X2045132Y-1181100D2* +X1987550Y-1260602D1* +X2045132Y-1174750D2* +X2045132Y-1181100D1* +X1936750Y-1260602D2* +X1936750Y-1263650D1* +X1975129Y-1181100D2* +X1936750Y-1260602D1* +X1975129Y-1174750D2* +X1975129Y-1181100D1* +X1885950Y-1260602D2* +X1885950Y-1263650D1* +X1905152Y-1181100D2* +X1885950Y-1260602D1* +X1905152Y-1174750D2* +X1905152Y-1181100D1* +X1835150Y-1260602D2* +X1835150Y-1263650D1* +X1835150Y-1181100D2* +X1835150Y-1260602D1* +X1835150Y-1174750D2* +X1835150Y-1181100D1* +X1809750Y-1260602D2* +X1809750Y-1263650D1* +X1800149Y-1181100D2* +X1809750Y-1260602D1* +X1800149Y-1174750D2* +X1800149Y-1181100D1* +X1860550Y-1260602D2* +X1860550Y-1263650D1* +X1870151Y-1181100D2* +X1860550Y-1260602D1* +X1870151Y-1174750D2* +X1870151Y-1181100D1* +X1911350Y-1260602D2* +X1911350Y-1263650D1* +X1940154Y-1181100D2* +X1911350Y-1260602D1* +X1940154Y-1174750D2* +X1940154Y-1181100D1* +X1962150Y-1260602D2* +X1962150Y-1263650D1* +X2010131Y-1181100D2* +X1962150Y-1260602D1* +X2010131Y-1174750D2* +X2010131Y-1181100D1* +X2012950Y-1260602D2* +X2012950Y-1263650D1* +X2080133Y-1181100D2* +X2012950Y-1260602D1* +X2080133Y-1174750D2* +X2080133Y-1181100D1* +X1872234Y-1370616D2* +X1873250Y-1371600D1* +X1868750Y-1370616D2* +X1872234Y-1370616D1* +X1835150Y-1342898D2* +X1868750Y-1370616D1* +X1835150Y-1339850D2* +X1835150Y-1342898D1* +X1885950Y-1342898D2* +X1885950Y-1339850D1* +X1896876Y-1360088D2* +X1885950Y-1342898D1* +X1897031Y-1360463D2* +X1896876Y-1360088D1* +X1898650Y-1364833D2* +X1897031Y-1360463D1* +X1898650Y-1367409D2* +X1898650Y-1364833D1* +X1898650Y-1371600D2* +X1898650Y-1367409D1* +X1936750Y-1342898D2* +X1936750Y-1339850D1* +X1925824Y-1360088D2* +X1936750Y-1342898D1* +X1925669Y-1360463D2* +X1925824Y-1360088D1* +X1924050Y-1364833D2* +X1925669Y-1360463D1* +X1924050Y-1367409D2* +X1924050Y-1364833D1* +X1924050Y-1371600D2* +X1924050Y-1367409D1* +X1987550Y-1342898D2* +X1987550Y-1339850D1* +X1967660Y-1355933D2* +X1987550Y-1342898D1* +X1950938Y-1363345D2* +X1967660Y-1355933D1* +X1949450Y-1364833D2* +X1950938Y-1363345D1* +X1949450Y-1365885D2* +X1949450Y-1364833D1* +X1949450Y-1367409D2* +X1949450Y-1365885D1* +X1949450Y-1371600D2* +X1949450Y-1367409D1* +X1985264Y-1434116D2* +X1991360Y-1430020D1* +X1963166Y-1434116D2* +X1985264Y-1434116D1* +X1962150Y-1435100D2* +X1963166Y-1434116D1* +X2196179Y-1329944D2* +X2190750Y-1336040D1* +X2196179Y-1326460D2* +X2196179Y-1329944D1* +X2198950Y-1323689D2* +X2196179Y-1326460D1* +X2212893Y-1314954D2* +X2198950Y-1323689D1* +X2213268Y-1314799D2* +X2212893Y-1314954D1* +X2224112Y-1314799D2* +X2213268Y-1314799D1* +X2244432Y-1314799D2* +X2224112Y-1314799D1* +X2289484Y-1323689D2* +X2244432Y-1314799D1* +X2292255Y-1326460D2* +X2289484Y-1323689D1* +X2292255Y-1330380D2* +X2292255Y-1326460D1* +X2292096Y-1331513D2* +X2292255Y-1330380D1* +X2292096Y-1337609D2* +X2292096Y-1331513D1* +X2292150Y-1348318D2* +X2292096Y-1337609D1* +X2299630Y-1355798D2* +X2292150Y-1348318D1* +X2338558Y-1379765D2* +X2299630Y-1355798D1* +X2339292Y-1380497D2* +X2338558Y-1379765D1* +X2342449Y-1382831D2* +X2339292Y-1380497D1* +X2354144Y-1394526D2* +X2342449Y-1382831D1* +X2366215Y-1415477D2* +X2354144Y-1394526D1* +X2368550Y-1421115D2* +X2366215Y-1415477D1* +X2368550Y-1429385D2* +X2368550Y-1421115D1* +X2368550Y-1430909D2* +X2368550Y-1429385D1* +X2368550Y-1435100D2* +X2368550Y-1430909D1* +X2263394Y-1453801D2* +X2272030Y-1451610D1* +X2154403Y-1453801D2* +X2263394Y-1453801D1* +X1944950Y-1445546D2* +X2154403Y-1453801D1* +X1938238Y-1443355D2* +X1944950Y-1445546D1* +X1936750Y-1441867D2* +X1938238Y-1443355D1* +X1936750Y-1440815D2* +X1936750Y-1441867D1* +X1936750Y-1439291D2* +X1936750Y-1440815D1* +X1936750Y-1435100D2* +X1936750Y-1439291D1* +X2280666Y-1454499D2* +X2272030Y-1451610D1* +X2284150Y-1454499D2* +X2280666Y-1454499D1* +X2357051Y-1472216D2* +X2284150Y-1454499D1* +X2374969Y-1472216D2* +X2357051Y-1472216D1* +X2377924Y-1471764D2* +X2374969Y-1472216D1* +X2386980Y-1468755D2* +X2377924Y-1471764D1* +X2392618Y-1466420D2* +X2386980Y-1468755D1* +X2404315Y-1454723D2* +X2392618Y-1466420D1* +X2406650Y-1449085D2* +X2404315Y-1454723D1* +X2406650Y-1440815D2* +X2406650Y-1449085D1* +X2406650Y-1439291D2* +X2406650Y-1440815D1* +X2406650Y-1435100D2* +X2406650Y-1439291D1* +X2196179Y-1375156D2* +X2190750Y-1369060D1* +X2196179Y-1378640D2* +X2196179Y-1375156D1* +X2197100Y-1416050D2* +X2196179Y-1378640D1* +X2197100Y-1422400D2* +X2197100Y-1416050D1* +X2263394Y-1421479D2* +X2272030Y-1418590D1* +X2259910Y-1421479D2* +X2263394Y-1421479D1* +X2257139Y-1424250D2* +X2259910Y-1421479D1* +X2247720Y-1435986D2* +X2257139Y-1424250D1* +X2239337Y-1444369D2* +X2247720Y-1435986D1* +X2238028Y-1444911D2* +X2239337Y-1444369D1* +X2226174Y-1444911D2* +X2238028Y-1444911D1* +X2156172Y-1444911D2* +X2226174Y-1444911D1* +X2154863Y-1444369D2* +X2156172Y-1444911D1* +X2127098Y-1428750D2* +X2154863Y-1444369D1* +X2127098Y-1422400D2* +X2127098Y-1428750D1* +X2012950Y-1336802D2* +X2012950Y-1339850D1* +X2115134Y-1181100D2* +X2012950Y-1336802D1* +X2115134Y-1174750D2* +X2115134Y-1181100D1* +X2012950Y-1342898D2* +X2012950Y-1339850D1* +X1982470Y-1376426D2* +X2012950Y-1342898D1* +X2482850Y-1336802D2* +X2482850Y-1339850D1* +X2495963Y-1272019D2* +X2482850Y-1336802D1* +X2495963Y-1261377D2* +X2495963Y-1272019D1* +X2495963Y-1255281D2* +X2495963Y-1261377D1* +X2489784Y-1181100D2* +X2495963Y-1255281D1* +X2489784Y-1174750D2* +X2489784Y-1181100D1* +X1962150Y-1375791D2* +X1962150Y-1371600D1* +X1962150Y-1378367D2* +X1962150Y-1375791D1* +X1960662Y-1379855D2* +X1962150Y-1378367D1* +X1923377Y-1408383D2* +X1960662Y-1379855D1* +X1913208Y-1418552D2* +X1923377Y-1408383D1* +X1911699Y-1422195D2* +X1913208Y-1418552D1* +X1911350Y-1428333D2* +X1911699Y-1422195D1* +X1911350Y-1430909D2* +X1911350Y-1428333D1* +X1911350Y-1435100D2* +X1911350Y-1430909D1* +X1963166Y-1372584D2* +X1962150Y-1371600D1* +X1966650Y-1372584D2* +X1963166Y-1372584D1* +X1982470Y-1376426D2* +X1966650Y-1372584D1* +X2432050Y-1375791D2* +X2432050Y-1371600D1* +X2432050Y-1378367D2* +X2432050Y-1375791D1* +X2430562Y-1379855D2* +X2432050Y-1378367D1* +X2382738Y-1426845D2* +X2430562Y-1379855D1* +X2381250Y-1428333D2* +X2382738Y-1426845D1* +X2381250Y-1429385D2* +X2381250Y-1428333D1* +X2381250Y-1430909D2* +X2381250Y-1429385D1* +X2381250Y-1435100D2* +X2381250Y-1430909D1* +X2433066Y-1370616D2* +X2432050Y-1371600D1* +X2436550Y-1370616D2* +X2433066Y-1370616D1* +X2462960Y-1355933D2* +X2436550Y-1370616D1* +X2482850Y-1342898D2* +X2462960Y-1355933D1* +X2482850Y-1339850D2* +X2482850Y-1342898D1* +X2489784Y-1168400D2* +X2489784Y-1174750D1* +X2462019Y-1152781D2* +X2489784Y-1168400D1* +X2460710Y-1152239D2* +X2462019Y-1152781D1* +X2180726Y-1152239D2* +X2460710Y-1152239D1* +X2168872Y-1152239D2* +X2180726Y-1152239D1* +X2115134Y-1168400D2* +X2168872Y-1152239D1* +X2115134Y-1174750D2* +X2115134Y-1168400D1* +X2096421Y-1375156D2* +X2101850Y-1369060D1* +X2096421Y-1378640D2* +X2096421Y-1375156D1* +X2092096Y-1416050D2* +X2096421Y-1378640D1* +X2092096Y-1422400D2* +X2092096Y-1416050D1* +X2327021Y-1384935D2* +X2321560Y-1384935D1* +X2334163Y-1384935D2* +X2327021Y-1384935D1* +X2334900Y-1385240D2* +X2334163Y-1384935D1* +X2339073Y-1387885D2* +X2334900Y-1385240D1* +X2349090Y-1397902D2* +X2339073Y-1387885D1* +X2361218Y-1420512D2* +X2349090Y-1397902D1* +X2362200Y-1422883D2* +X2361218Y-1420512D1* +X2362200Y-1442393D2* +X2362200Y-1422883D1* +X2364432Y-1444625D2* +X2362200Y-1442393D1* +X2366590Y-1445546D2* +X2364432Y-1444625D1* +X2369130Y-1445546D2* +X2366590Y-1445546D1* +X2373050Y-1445546D2* +X2369130Y-1445546D1* +X2379762Y-1443355D2* +X2373050Y-1445546D1* +X2381250Y-1441867D2* +X2379762Y-1443355D1* +X2381250Y-1440815D2* +X2381250Y-1441867D1* +X2381250Y-1439291D2* +X2381250Y-1440815D1* +X2381250Y-1435100D2* +X2381250Y-1439291D1* +X1984026Y-1383284D2* +X1986280Y-1386205D1* +X1984026Y-1379800D2* +X1984026Y-1383284D1* +X1982470Y-1376426D2* +X1984026Y-1379800D1* +G54D19* +X2279650Y-1260602D2* +X2279650Y-1266698D1* +X2305050Y-1260602D2* +X2305050Y-1266698D1* +X2330450Y-1260602D2* +X2330450Y-1266698D1* +X2355850Y-1260602D2* +X2355850Y-1266698D1* +X2381250Y-1260602D2* +X2381250Y-1266698D1* +X2406650Y-1260602D2* +X2406650Y-1266698D1* +X2432050Y-1260602D2* +X2432050Y-1266698D1* +X2457450Y-1260602D2* +X2457450Y-1266698D1* +X2482850Y-1260602D2* +X2482850Y-1266698D1* +X2482850Y-1336802D2* +X2482850Y-1342898D1* +X2457450Y-1336802D2* +X2457450Y-1342898D1* +X2432050Y-1336802D2* +X2432050Y-1342898D1* +X2406650Y-1336802D2* +X2406650Y-1342898D1* +X2381250Y-1336802D2* +X2381250Y-1342898D1* +X2355850Y-1336802D2* +X2355850Y-1342898D1* +X2330450Y-1336802D2* +X2330450Y-1342898D1* +X2305050Y-1336802D2* +X2305050Y-1342898D1* +X1809750Y-1260602D2* +X1809750Y-1266698D1* +X1835150Y-1260602D2* +X1835150Y-1266698D1* +X1860550Y-1260602D2* +X1860550Y-1266698D1* +X1885950Y-1260602D2* +X1885950Y-1266698D1* +X1911350Y-1260602D2* +X1911350Y-1266698D1* +X1936750Y-1260602D2* +X1936750Y-1266698D1* +X1962150Y-1260602D2* +X1962150Y-1266698D1* +X1987550Y-1260602D2* +X1987550Y-1266698D1* +X2012950Y-1260602D2* +X2012950Y-1266698D1* +X2012950Y-1336802D2* +X2012950Y-1342898D1* +X1987550Y-1336802D2* +X1987550Y-1342898D1* +X1962150Y-1336802D2* +X1962150Y-1342898D1* +X1936750Y-1336802D2* +X1936750Y-1342898D1* +X1911350Y-1336802D2* +X1911350Y-1342898D1* +X1885950Y-1336802D2* +X1885950Y-1342898D1* +X1860550Y-1336802D2* +X1860550Y-1342898D1* +X1835150Y-1336802D2* +X1835150Y-1342898D1* +G54D22* +X2162099Y-1428750D2* +X2162099Y-1416050D1* +X2197100Y-1428750D2* +X2197100Y-1416050D1* +X2232101Y-1428750D2* +X2232101Y-1416050D1* +X2127098Y-1428750D2* +X2127098Y-1416050D1* +X2057095Y-1428750D2* +X2057095Y-1416050D1* +X2092096Y-1428750D2* +X2092096Y-1416050D1* +X2244801Y-1168400D2* +X2244801Y-1181100D1* +X2209800Y-1168400D2* +X2209800Y-1181100D1* +X2174799Y-1168400D2* +X2174799Y-1181100D1* +X2279802Y-1168400D2* +X2279802Y-1181100D1* +X2314804Y-1168400D2* +X2314804Y-1181100D1* +X2489784Y-1168400D2* +X2489784Y-1181100D1* +X2454783Y-1168400D2* +X2454783Y-1181100D1* +X2349779Y-1168400D2* +X2349779Y-1181100D1* +X2384781Y-1168400D2* +X2384781Y-1181100D1* +X2419782Y-1168400D2* +X2419782Y-1181100D1* +X1870151Y-1168400D2* +X1870151Y-1181100D1* +X1835150Y-1168400D2* +X1835150Y-1181100D1* +X1800149Y-1168400D2* +X1800149Y-1181100D1* +X1905152Y-1168400D2* +X1905152Y-1181100D1* +X1940154Y-1168400D2* +X1940154Y-1181100D1* +X2115134Y-1168400D2* +X2115134Y-1181100D1* +X2080133Y-1168400D2* +X2080133Y-1181100D1* +X1975129Y-1168400D2* +X1975129Y-1181100D1* +X2010131Y-1168400D2* +X2010131Y-1181100D1* +X2045132Y-1168400D2* +X2045132Y-1181100D1* +M02* diff --git a/gerbview/gerber_test_files/apertures_rotated_and_arcs_in_tracks.gbr b/gerbview/gerber_test_files/apertures_rotated_and_arcs_in_tracks.gbr new file mode 100644 index 0000000000..a335a2768b --- /dev/null +++ b/gerbview/gerber_test_files/apertures_rotated_and_arcs_in_tracks.gbr @@ -0,0 +1,1417 @@ +%ICAS*% +%FSLAX44Y44*% +%OFA0B0*% +%SFA1B1*% +%MOMM*% +%AMFRECTNOHOLE10* +21,1,1.5748,2.2860,0.0000,0.0000,0* +% +%AMFRECTNOHOLE11* +21,1,0.5080,1.1430,0.0000,0.0000,180* +% +%AMFRECTNOHOLE12* +21,1,1.5240,2.0320,0.0000,0.0000,180* +% +%AMFRECTNOHOLE13* +21,1,1.5240,2.0320,0.0000,0.0000,270* +% +%AMFRECTNOHOLE14* +21,1,1.5240,2.0320,0.0000,0.0000,90* +% +%AMFRECTNOHOLE15* +21,1,0.8890,1.3970,0.0000,0.0000,270* +% +%ADD10FRECTNOHOLE10*% +%ADD11FRECTNOHOLE11*% +%ADD12FRECTNOHOLE12*% +%ADD13FRECTNOHOLE13*% +%ADD14FRECTNOHOLE14*% +%ADD15FRECTNOHOLE15*% +%ADD17C,0.3048X0.0000X0.0000*% +%ADD19C,1.6764X0.0000X0.0000*% +%ADD22C,2.2860X0.0000X0.0000*% +%LNBottom_arc*% +G54D10* +X2279650Y-1339850D3* +X1809750Y-1339850D3* +G54D11* +X2355850Y-1435100D3* +X2343150Y-1371600D3* +X2355850Y-1371600D3* +X2368550Y-1371600D3* +X2381250Y-1371600D3* +X2393950Y-1371600D3* +X2406650Y-1371600D3* +X2419350Y-1371600D3* +X2432050Y-1371600D3* +X2432050Y-1435100D3* +X2419350Y-1435100D3* +X2406650Y-1435100D3* +X2393950Y-1435100D3* +X2381250Y-1435100D3* +X2368550Y-1435100D3* +X2343150Y-1435100D3* +X1885950Y-1435100D3* +X1873250Y-1371600D3* +X1885950Y-1371600D3* +X1898650Y-1371600D3* +X1911350Y-1371600D3* +X1924050Y-1371600D3* +X1936750Y-1371600D3* +X1949450Y-1371600D3* +X1962150Y-1371600D3* +X1962150Y-1435100D3* +X1949450Y-1435100D3* +X1936750Y-1435100D3* +X1924050Y-1435100D3* +X1911350Y-1435100D3* +X1898650Y-1435100D3* +X1873250Y-1435100D3* +G54D12* +X2024380Y-1430020D3* +X1991360Y-1430020D3* +G54D13* +X2272030Y-1418590D3* +X2272030Y-1451610D3* +G54D14* +X2101850Y-1369060D3* +X2101850Y-1336040D3* +X2228850Y-1369060D3* +X2228850Y-1336040D3* +X2190750Y-1369060D3* +X2190750Y-1336040D3* +X2152650Y-1369060D3* +X2152650Y-1336040D3* +G54D15* +X1986280Y-1386205D3* +X1986280Y-1405255D3* +X2321560Y-1384935D3* +X2321560Y-1403985D3* +X2059940Y-1339215D3* +X2059940Y-1358265D3* +G54D17* +X1947035Y-1424656D2* +X1948180Y-1424686D1* +G75* +G01X1947035Y-1424656D2* +G03X1946910Y-1424654I-125J-4729D1* +G74* +X1939290Y-1424654D2* +X1946910Y-1424654D1* +G75* +G01X1939290Y-1424654D2* +G03X1938432Y-1424732I0J-4731D1* +G74* +X1933519Y-1425638D2* +X1938432Y-1424732D1* +G75* +G01X1933519Y-1425638D2* +G03X1930400Y-1429385I691J-3747D1* +G74* +X1930400Y-1440815D2* +X1930400Y-1429385D1* +G75* +G01X1927972Y-1444366D2* +G03X1930400Y-1440815I-1382J3551D1* +G74* +X1925765Y-1445224D2* +X1927972Y-1444366D1* +G75* +G01X1924050Y-1445546D2* +G03X1925765Y-1445224I0J4731D1* +G74* +X1911350Y-1445546D2* +X1924050Y-1445546D1* +G75* +G01X1909635Y-1445224D2* +G03X1911350Y-1445546I1715J4409D1* +G74* +X1907428Y-1444366D2* +X1909635Y-1445224D1* +G75* +G01X1905000Y-1440815D2* +G03X1907428Y-1444366I3810J0D1* +G74* +X1905000Y-1429385D2* +X1905000Y-1440815D1* +G75* +G01X1905000Y-1429385D2* +G03X1902572Y-1425834I-3810J0D1* +G74* +X1900365Y-1424976D2* +X1902572Y-1425834D1* +G75* +G01X1900365Y-1424976D2* +G03X1896935Y-1424976I-1715J-4409D1* +G74* +X1894728Y-1425834D2* +X1896935Y-1424976D1* +G75* +G01X1894728Y-1425834D2* +G03X1892300Y-1429385I1382J-3551D1* +G74* +X1892300Y-1440815D2* +X1892300Y-1429385D1* +G75* +G01X1889872Y-1444366D2* +G03X1892300Y-1440815I-1382J3551D1* +G74* +X1887665Y-1445224D2* +X1889872Y-1444366D1* +G75* +G01X1885950Y-1445546D2* +G03X1887665Y-1445224I0J4731D1* +G74* +X1883410Y-1445546D2* +X1885950Y-1445546D1* +G75* +G01X1882050Y-1445346D2* +G03X1883410Y-1445546I1360J4531D1* +G74* +X1875060Y-1443248D2* +X1882050Y-1445346D1* +G75* +G01X1873250Y-1440815D2* +G03X1875060Y-1443248I2540J0D1* +G74* +X1873250Y-1439291D2* +X1873250Y-1440815D1* +X1873250Y-1435100D2* +X1873250Y-1439291D1* +X1949348Y-1428671D2* +X1948180Y-1424686D1* +G75* +G01X1949450Y-1429385D2* +G03X1949348Y-1428671I-2540J0D1* +G74* +X1949450Y-1430909D2* +X1949450Y-1429385D1* +X1949450Y-1435100D2* +X1949450Y-1430909D1* +X2343150Y-1439291D2* +X2343150Y-1440815D1* +X2343150Y-1435100D2* +X2343150Y-1439291D1* +G75* +G01X2343150Y-1440815D2* +G03X2343586Y-1444115I12700J0D1* +G74* +X2344272Y-1446664D2* +X2343586Y-1444115D1* +G75* +G01X2344272Y-1446664D2* +G03X2366010Y-1463326I21738J5849D1* +G74* +X2371090Y-1463326D2* +X2366010Y-1463326D1* +G75* +G01X2371090Y-1463326D2* +G03X2373811Y-1463161I0J22511D1* +G74* +X2381320Y-1462247D2* +X2373811Y-1463161D1* +G75* +G01X2381320Y-1462247D2* +G03X2400300Y-1440815I-2610J21432D1* +G74* +X2400300Y-1429385D2* +X2400300Y-1440815D1* +G75* +G01X2402728Y-1425834D2* +G03X2400300Y-1429385I1382J-3551D1* +G74* +X2404935Y-1424976D2* +X2402728Y-1425834D1* +G75* +G01X2406650Y-1424654D2* +G03X2404935Y-1424976I0J-4731D1* +G74* +X2409190Y-1424654D2* +X2406650Y-1424654D1* +G75* +G01X2410550Y-1424854D2* +G03X2409190Y-1424654I-1360J-4531D1* +G74* +X2417540Y-1426952D2* +X2410550Y-1424854D1* +G75* +G01X2419350Y-1429385D2* +G03X2417540Y-1426952I-2540J0D1* +G74* +X2419350Y-1430909D2* +X2419350Y-1429385D1* +X2419350Y-1435100D2* +X2419350Y-1430909D1* +X2223421Y-1343660D2* +X2223262Y-1348486D1* +X2223421Y-1342136D2* +X2223421Y-1343660D1* +X2228850Y-1336040D2* +X2223421Y-1342136D1* +X2206079Y-1355801D2* +X2223262Y-1348486D1* +G75* +G01X2200910Y-1356856D2* +G03X2206079Y-1355801I0J13196D1* +G74* +X2180590Y-1356856D2* +X2200910Y-1356856D1* +G75* +G01X2177658Y-1356526D2* +G03X2180590Y-1356856I2932J12866D1* +G74* +X2141439Y-1348273D2* +X2177658Y-1356526D1* +G75* +G01X2141021Y-1348157D2* +G03X2141439Y-1348273I1469J4497D1* +G74* +X2113479Y-1339163D2* +X2141021Y-1348157D1* +G75* +G01X2113479Y-1339163D2* +G03X2112010Y-1338929I-1469J-4497D1* +G74* +X2110486Y-1338929D2* +X2112010Y-1338929D1* +X2101850Y-1336040D2* +X2110486Y-1338929D1* +X2090454Y-1339093D2* +X2072640Y-1343914D1* +G75* +G01X2091690Y-1338929D2* +G03X2090454Y-1339093I0J-4731D1* +G74* +X2093214Y-1338929D2* +X2091690Y-1338929D1* +X2101850Y-1336040D2* +X2093214Y-1338929D1* +X1991741Y-1405255D2* +X1993265Y-1405255D1* +X1986280Y-1405255D2* +X1991741Y-1405255D1* +G75* +G01X1993265Y-1405255D2* +G03X1995173Y-1404825I0J4445D1* +G74* +X1999113Y-1402952D2* +X1995173Y-1404825D1* +G75* +G01X1999113Y-1402952D2* +G03X2000651Y-1402095I-5848J12302D1* +G74* +X2055520Y-1366685D2* +X2000651Y-1402095D1* +G75* +G01X2055520Y-1366685D2* +G03X2057686Y-1362710I-2565J3975D1* +G74* +X2057686Y-1361186D2* +X2057686Y-1362710D1* +X2059940Y-1358265D2* +X2057686Y-1361186D1* +X2070716Y-1346491D2* +X2072640Y-1343914D1* +G75* +G01X2068648Y-1348066D2* +G03X2070716Y-1346491I-1723J4406D1* +G74* +X2065202Y-1349414D2* +X2068648Y-1348066D1* +G75* +G01X2065202Y-1349414D2* +G03X2062194Y-1353820I1723J-4406D1* +G74* +X2062194Y-1355344D2* +X2062194Y-1353820D1* +X2059940Y-1358265D2* +X2062194Y-1355344D1* +X2070500Y-1341018D2* +X2072640Y-1343914D1* +G75* +G01X2070500Y-1341018D2* +G03X2066925Y-1339215I-3575J-2642D1* +G74* +X2065401Y-1339215D2* +X2066925Y-1339215D1* +X2059940Y-1339215D2* +X2065401Y-1339215D1* +X2241086Y-1357189D2* +X2223262Y-1348486D1* +G75* +G01X2241707Y-1357553D2* +G03X2241086Y-1357189I-2697J-3887D1* +G74* +X2303714Y-1400585D2* +X2241707Y-1357553D1* +G75* +G01X2303714Y-1400585D2* +G03X2314575Y-1403985I10861J15650D1* +G74* +X2316099Y-1403985D2* +X2314575Y-1403985D1* +X2321560Y-1403985D2* +X2316099Y-1403985D1* +X2342134Y-1434116D2* +X2340610Y-1434116D1* +X2343150Y-1435100D2* +X2342134Y-1434116D1* +G75* +G01X2336510Y-1431746D2* +G03X2340610Y-1434116I4100J2361D1* +G74* +X2324445Y-1410791D2* +X2336510Y-1431746D1* +G75* +G01X2323814Y-1408430D2* +G03X2324445Y-1410791I4731J0D1* +G74* +X2323814Y-1406906D2* +X2323814Y-1408430D1* +X2321560Y-1403985D2* +X2323814Y-1406906D1* +X1976867Y-1405977D2* +X1948180Y-1424686D1* +G75* +G01X1979295Y-1405255D2* +G03X1976867Y-1405977I0J-4445D1* +G74* +X1980819Y-1405255D2* +X1979295Y-1405255D1* +X1986280Y-1405255D2* +X1980819Y-1405255D1* +X2057095Y-1422400D2* +X2057095Y-1426210D1* +X2032000Y-1426210D2* +X2057095Y-1426210D1* +X2030476Y-1426210D2* +X2032000Y-1426210D1* +X2024380Y-1430020D2* +X2030476Y-1426210D1* +X2162099Y-1422400D2* +X2162099Y-1416050D1* +X2158104Y-1377164D2* +X2162099Y-1416050D1* +G75* +G01X2158079Y-1376680D2* +G03X2158104Y-1377164I4731J0D1* +G74* +X2158079Y-1375156D2* +X2158079Y-1376680D1* +X2152650Y-1369060D2* +X2158079Y-1375156D1* +X2232101Y-1422400D2* +X2232101Y-1416050D1* +X2232101Y-1376680D2* +X2232101Y-1416050D1* +X2232101Y-1375156D2* +X2232101Y-1376680D1* +X2228850Y-1369060D2* +X2232101Y-1375156D1* +X2393950Y-1439291D2* +X2393950Y-1440815D1* +X2393950Y-1435100D2* +X2393950Y-1439291D1* +G75* +G01X2393626Y-1442056D2* +G03X2393950Y-1440815I-2216J1241D1* +G74* +X2390595Y-1447470D2* +X2393626Y-1442056D1* +G75* +G01X2378710Y-1454436D2* +G03X2390595Y-1447470I0J13621D1* +G74* +X2366010Y-1454436D2* +X2378710Y-1454436D1* +G75* +G01X2355488Y-1449464D2* +G03X2366010Y-1454436I10522J8649D1* +G74* +X2350367Y-1443234D2* +X2355488Y-1449464D1* +G75* +G01X2349500Y-1440815D2* +G03X2350367Y-1443234I3810J0D1* +G74* +X2349500Y-1429385D2* +X2349500Y-1440815D1* +G75* +G01X2349500Y-1429385D2* +G03X2348927Y-1427376I-3810J0D1* +G74* +X2330785Y-1398150D2* +X2348927Y-1427376D1* +G75* +G01X2330785Y-1398150D2* +G03X2328545Y-1396904I-2240J-1390D1* +G74* +X2314575Y-1396904D2* +X2328545Y-1396904D1* +G75* +G01X2305992Y-1393277D2* +G03X2314575Y-1396904I8583J8342D1* +G74* +X2268383Y-1354577D2* +X2305992Y-1393277D1* +G75* +G01X2268227Y-1354409D2* +G03X2268383Y-1354577I3549J3129D1* +G74* +X2242559Y-1325291D2* +X2268227Y-1354409D1* +G75* +G01X2242559Y-1325291D2* +G03X2239010Y-1323689I-3549J-3129D1* +G74* +X2218690Y-1323689D2* +X2239010Y-1323689D1* +G75* +G01X2218690Y-1323689D2* +G03X2214436Y-1326349I0J-4731D1* +G74* +X2205031Y-1345667D2* +X2214436Y-1326349D1* +G75* +G01X2200910Y-1348244D2* +G03X2205031Y-1345667I0J4584D1* +G74* +X2180590Y-1348244D2* +X2200910Y-1348244D1* +G75* +G01X2178188Y-1347565D2* +G03X2180590Y-1348244I2402J3905D1* +G74* +X2165289Y-1339630D2* +X2178188Y-1347565D1* +G75* +G01X2165289Y-1339630D2* +G03X2162810Y-1338929I-2479J-4030D1* +G74* +X2161286Y-1338929D2* +X2162810Y-1338929D1* +X2152650Y-1336040D2* +X2161286Y-1338929D1* +X1924050Y-1430909D2* +X1924050Y-1429385D1* +X1924050Y-1435100D2* +X1924050Y-1430909D1* +G75* +G01X1931192Y-1417966D2* +G03X1924050Y-1429385I5558J-11419D1* +G74* +X1973334Y-1397453D2* +X1931192Y-1417966D1* +G75* +G01X1978636Y-1396095D2* +G03X1973334Y-1397453I659J-13605D1* +G74* +X1993494Y-1395375D2* +X1978636Y-1396095D1* +G75* +G01X1993494Y-1395375D2* +G03X1996876Y-1393706I-229J4725D1* +G74* +X2049344Y-1331714D2* +X1996876Y-1393706D1* +G75* +G01X2052190Y-1330101D2* +G03X2049344Y-1331714I765J-4669D1* +G74* +X2090925Y-1323751D2* +X2052190Y-1330101D1* +G75* +G01X2091690Y-1323689D2* +G03X2090925Y-1323751I0J-4731D1* +G74* +X2112010Y-1323689D2* +X2091690Y-1323689D1* +G75* +G01X2113479Y-1323923D2* +G03X2112010Y-1323689I-1469J-4497D1* +G74* +X2141021Y-1332917D2* +X2113479Y-1323923D1* +G75* +G01X2141021Y-1332917D2* +G03X2142490Y-1333151I1469J4497D1* +G74* +X2144014Y-1333151D2* +X2142490Y-1333151D1* +X2152650Y-1336040D2* +X2144014Y-1333151D1* +X1898650Y-1439291D2* +X1898650Y-1440815D1* +X1898650Y-1435100D2* +X1898650Y-1439291D1* +G75* +G01X1898650Y-1440815D2* +G03X1906745Y-1452651I12700J0D1* +G74* +X1908951Y-1453509D2* +X1906745Y-1452651D1* +G75* +G01X1908951Y-1453509D2* +G03X1913087Y-1454412I4939J12694D1* +G74* +X2363633Y-1481036D2* +X1913087Y-1454412D1* +G75* +G01X2363633Y-1481036D2* +G03X2366010Y-1481106I2377J40221D1* +G74* +X2378710Y-1481106D2* +X2366010Y-1481106D1* +G75* +G01X2378710Y-1481106D2* +G03X2406914Y-1469589I0J40291D1* +G74* +X2413391Y-1463240D2* +X2406914Y-1469589D1* +G75* +G01X2413391Y-1463240D2* +G03X2415196Y-1461314I-21981J22425D1* +G74* +X2431434Y-1442473D2* +X2415196Y-1461314D1* +G75* +G01X2431434Y-1442473D2* +G03X2432050Y-1440815I-1924J1658D1* +G74* +X2432050Y-1439291D2* +X2432050Y-1440815D1* +X2432050Y-1435100D2* +X2432050Y-1439291D1* +X2406650Y-1367409D2* +X2406650Y-1365885D1* +X2406650Y-1371600D2* +X2406650Y-1367409D1* +G75* +G01X2406974Y-1364644D2* +G03X2406650Y-1365885I2216J-1241D1* +G74* +X2410005Y-1359230D2* +X2406974Y-1364644D1* +G75* +G01X2414404Y-1354505D2* +G03X2410005Y-1359230I7486J-11380D1* +G74* +X2432050Y-1342898D2* +X2414404Y-1354505D1* +X2432050Y-1339850D2* +X2432050Y-1342898D1* +X2381250Y-1367409D2* +X2381250Y-1365885D1* +X2381250Y-1371600D2* +X2381250Y-1367409D1* +X2381250Y-1342898D2* +X2381250Y-1365885D1* +X2381250Y-1339850D2* +X2381250Y-1342898D1* +X2355850Y-1367409D2* +X2355850Y-1365885D1* +X2355850Y-1371600D2* +X2355850Y-1367409D1* +G75* +G01X2355850Y-1365885D2* +G03X2354965Y-1363958I-2540J0D1* +G74* +X2330450Y-1342898D2* +X2354965Y-1363958D1* +X2330450Y-1339850D2* +X2330450Y-1342898D1* +X2355850Y-1430909D2* +X2355850Y-1429385D1* +X2355850Y-1435100D2* +X2355850Y-1430909D1* +G75* +G01X2355850Y-1429385D2* +G03X2353999Y-1422782I-12700J0D1* +G74* +X2338770Y-1397762D2* +X2353999Y-1422782D1* +G75* +G01X2338770Y-1397762D2* +G03X2328545Y-1392015I-10225J-6223D1* +G74* +X2314575Y-1392015D2* +X2328545Y-1392015D1* +G75* +G01X2312497Y-1391000D2* +G03X2314575Y-1392015I2078J1620D1* +G74* +X2283793Y-1354189D2* +X2312497Y-1391000D1* +G75* +G01X2282793Y-1351280D2* +G03X2283793Y-1354189I4731J0D1* +G74* +X2282793Y-1349756D2* +X2282793Y-1351280D1* +X2279650Y-1339850D2* +X2282793Y-1349756D1* +X2419782Y-1174750D2* +X2419782Y-1181100D1* +X2457450Y-1260602D2* +X2419782Y-1181100D1* +X2457450Y-1263650D2* +X2457450Y-1260602D1* +X2349779Y-1174750D2* +X2349779Y-1181100D1* +X2406650Y-1260602D2* +X2349779Y-1181100D1* +X2406650Y-1263650D2* +X2406650Y-1260602D1* +X2279802Y-1174750D2* +X2279802Y-1181100D1* +X2355850Y-1260602D2* +X2279802Y-1181100D1* +X2355850Y-1263650D2* +X2355850Y-1260602D1* +X2209800Y-1174750D2* +X2209800Y-1181100D1* +X2305050Y-1260602D2* +X2209800Y-1181100D1* +X2305050Y-1263650D2* +X2305050Y-1260602D1* +X2174799Y-1174750D2* +X2174799Y-1181100D1* +X2279650Y-1260602D2* +X2174799Y-1181100D1* +X2279650Y-1263650D2* +X2279650Y-1260602D1* +X2244801Y-1174750D2* +X2244801Y-1181100D1* +X2330450Y-1260602D2* +X2244801Y-1181100D1* +X2330450Y-1263650D2* +X2330450Y-1260602D1* +X2314804Y-1174750D2* +X2314804Y-1181100D1* +X2381250Y-1260602D2* +X2314804Y-1181100D1* +X2381250Y-1263650D2* +X2381250Y-1260602D1* +X2384781Y-1174750D2* +X2384781Y-1181100D1* +X2432050Y-1260602D2* +X2384781Y-1181100D1* +X2432050Y-1263650D2* +X2432050Y-1260602D1* +X2454783Y-1174750D2* +X2454783Y-1181100D1* +X2482850Y-1260602D2* +X2454783Y-1181100D1* +X2482850Y-1263650D2* +X2482850Y-1260602D1* +X2305050Y-1339850D2* +X2305050Y-1342898D1* +X2337614Y-1369546D2* +X2305050Y-1342898D1* +G75* +G01X2337614Y-1369546D2* +G03X2340610Y-1370616I2996J3661D1* +G74* +X2342134Y-1370616D2* +X2340610Y-1370616D1* +X2343150Y-1371600D2* +X2342134Y-1370616D1* +X2368550Y-1367409D2* +X2368550Y-1365885D1* +X2368550Y-1371600D2* +X2368550Y-1367409D1* +G75* +G01X2368550Y-1365885D2* +G03X2368226Y-1364644I-2540J0D1* +G74* +X2365195Y-1359230D2* +X2368226Y-1364644D1* +X2365195Y-1359230D2* +X2365132Y-1359120D1* +X2355850Y-1342898D2* +X2365132Y-1359120D1* +X2355850Y-1339850D2* +X2355850Y-1342898D1* +X2393950Y-1367409D2* +X2393950Y-1365885D1* +X2393950Y-1371600D2* +X2393950Y-1367409D1* +G75* +G01X2394274Y-1364644D2* +G03X2393950Y-1365885I2216J-1241D1* +G74* +X2397305Y-1359230D2* +X2394274Y-1364644D1* +X2397368Y-1359120D2* +X2397305Y-1359230D1* +X2406650Y-1342898D2* +X2397368Y-1359120D1* +X2406650Y-1339850D2* +X2406650Y-1342898D1* +X2419350Y-1367409D2* +X2419350Y-1365885D1* +X2419350Y-1371600D2* +X2419350Y-1367409D1* +G75* +G01X2420712Y-1363635D2* +G03X2419350Y-1365885I1178J-2250D1* +G74* +X2438132Y-1354515D2* +X2420712Y-1363635D1* +G75* +G01X2438132Y-1354515D2* +G03X2438820Y-1354128I-6082J11617D1* +G74* +X2457450Y-1342898D2* +X2438820Y-1354128D1* +X2457450Y-1339850D2* +X2457450Y-1342898D1* +X1936750Y-1367409D2* +X1936750Y-1365885D1* +X1936750Y-1371600D2* +X1936750Y-1367409D1* +G75* +G01X1937074Y-1364644D2* +G03X1936750Y-1365885I2216J-1241D1* +G74* +X1940105Y-1359230D2* +X1937074Y-1364644D1* +G75* +G01X1944504Y-1354505D2* +G03X1940105Y-1359230I7486J-11380D1* +G74* +X1962150Y-1342898D2* +X1944504Y-1354505D1* +X1962150Y-1339850D2* +X1962150Y-1342898D1* +X1911350Y-1367409D2* +X1911350Y-1365885D1* +X1911350Y-1371600D2* +X1911350Y-1367409D1* +X1911350Y-1342898D2* +X1911350Y-1365885D1* +X1911350Y-1339850D2* +X1911350Y-1342898D1* +X1885950Y-1367409D2* +X1885950Y-1365885D1* +X1885950Y-1371600D2* +X1885950Y-1367409D1* +G75* +G01X1885950Y-1365885D2* +G03X1885065Y-1363958I-2540J0D1* +G74* +X1860550Y-1342898D2* +X1885065Y-1363958D1* +X1860550Y-1339850D2* +X1860550Y-1342898D1* +X1885950Y-1430909D2* +X1885950Y-1429385D1* +X1885950Y-1435100D2* +X1885950Y-1430909D1* +G75* +G01X1885950Y-1429385D2* +G03X1885387Y-1427791I-2540J0D1* +G74* +X1821307Y-1348311D2* +X1885387Y-1427791D1* +G75* +G01X1821307Y-1348311D2* +G03X1817624Y-1346549I-3683J-2969D1* +G74* +X1816100Y-1346549D2* +X1817624Y-1346549D1* +X1809750Y-1339850D2* +X1816100Y-1346549D1* +X2045132Y-1174750D2* +X2045132Y-1181100D1* +X1987550Y-1260602D2* +X2045132Y-1181100D1* +X1987550Y-1263650D2* +X1987550Y-1260602D1* +X1975129Y-1174750D2* +X1975129Y-1181100D1* +X1936750Y-1260602D2* +X1975129Y-1181100D1* +X1936750Y-1263650D2* +X1936750Y-1260602D1* +X1905152Y-1174750D2* +X1905152Y-1181100D1* +X1885950Y-1260602D2* +X1905152Y-1181100D1* +X1885950Y-1263650D2* +X1885950Y-1260602D1* +X1835150Y-1174750D2* +X1835150Y-1181100D1* +X1835150Y-1260602D2* +X1835150Y-1181100D1* +X1835150Y-1263650D2* +X1835150Y-1260602D1* +X1800149Y-1174750D2* +X1800149Y-1181100D1* +X1809750Y-1260602D2* +X1800149Y-1181100D1* +X1809750Y-1263650D2* +X1809750Y-1260602D1* +X1870151Y-1174750D2* +X1870151Y-1181100D1* +X1860550Y-1260602D2* +X1870151Y-1181100D1* +X1860550Y-1263650D2* +X1860550Y-1260602D1* +X1940154Y-1174750D2* +X1940154Y-1181100D1* +X1911350Y-1260602D2* +X1940154Y-1181100D1* +X1911350Y-1263650D2* +X1911350Y-1260602D1* +X2010131Y-1174750D2* +X2010131Y-1181100D1* +X1962150Y-1260602D2* +X2010131Y-1181100D1* +X1962150Y-1263650D2* +X1962150Y-1260602D1* +X2080133Y-1174750D2* +X2080133Y-1181100D1* +X2012950Y-1260602D2* +X2080133Y-1181100D1* +X2012950Y-1263650D2* +X2012950Y-1260602D1* +X1835150Y-1339850D2* +X1835150Y-1342898D1* +X1867714Y-1369546D2* +X1835150Y-1342898D1* +G75* +G01X1867714Y-1369546D2* +G03X1870710Y-1370616I2996J3661D1* +G74* +X1872234Y-1370616D2* +X1870710Y-1370616D1* +X1873250Y-1371600D2* +X1872234Y-1370616D1* +X1898650Y-1367409D2* +X1898650Y-1365885D1* +X1898650Y-1371600D2* +X1898650Y-1367409D1* +G75* +G01X1898650Y-1365885D2* +G03X1898326Y-1364644I-2540J0D1* +G74* +X1895295Y-1359230D2* +X1898326Y-1364644D1* +X1895295Y-1359230D2* +X1895232Y-1359120D1* +X1885950Y-1342898D2* +X1895232Y-1359120D1* +X1885950Y-1339850D2* +X1885950Y-1342898D1* +X1924050Y-1367409D2* +X1924050Y-1365885D1* +X1924050Y-1371600D2* +X1924050Y-1367409D1* +G75* +G01X1924374Y-1364644D2* +G03X1924050Y-1365885I2216J-1241D1* +G74* +X1927405Y-1359230D2* +X1924374Y-1364644D1* +X1927468Y-1359120D2* +X1927405Y-1359230D1* +X1936750Y-1342898D2* +X1927468Y-1359120D1* +X1936750Y-1339850D2* +X1936750Y-1342898D1* +X1949450Y-1367409D2* +X1949450Y-1365885D1* +X1949450Y-1371600D2* +X1949450Y-1367409D1* +G75* +G01X1950812Y-1363635D2* +G03X1949450Y-1365885I1178J-2250D1* +G74* +X1968232Y-1354515D2* +X1950812Y-1363635D1* +G75* +G01X1968232Y-1354515D2* +G03X1968920Y-1354128I-6082J11617D1* +G74* +X1987550Y-1342898D2* +X1968920Y-1354128D1* +X1987550Y-1339850D2* +X1987550Y-1342898D1* +X1963166Y-1434116D2* +X1964690Y-1434116D1* +X1962150Y-1435100D2* +X1963166Y-1434116D1* +X1983740Y-1434116D2* +X1964690Y-1434116D1* +X1985264Y-1434116D2* +X1983740Y-1434116D1* +X1991360Y-1430020D2* +X1985264Y-1434116D1* +X2368550Y-1430909D2* +X2368550Y-1429385D1* +X2368550Y-1435100D2* +X2368550Y-1430909D1* +G75* +G01X2368550Y-1429385D2* +G03X2365950Y-1417614I-27940J0D1* +G74* +X2355802Y-1395769D2* +X2365950Y-1417614D1* +G75* +G01X2355802Y-1395769D2* +G03X2339520Y-1380452I-27257J-12661D1* +G74* +X2339398Y-1380404D2* +X2339520Y-1380452D1* +G75* +G01X2338811Y-1380103D2* +G03X2339398Y-1380404I1799J2788D1* +G74* +X2298026Y-1353782D2* +X2338811Y-1380103D1* +G75* +G01X2292096Y-1342898D2* +G03X2298026Y-1353782I12954J0D1* +G74* +X2292096Y-1336802D2* +X2292096Y-1342898D1* +G75* +G01X2292112Y-1336162D2* +G03X2292096Y-1336802I12938J-640D1* +G74* +X2292249Y-1333385D2* +X2292112Y-1336162D1* +G75* +G01X2292249Y-1333385D2* +G03X2292255Y-1333151I-4725J234D1* +G74* +X2292255Y-1328420D2* +X2292255Y-1333151D1* +G75* +G01X2292255Y-1328420D2* +G03X2288391Y-1323769I-4731J0D1* +G74* +X2241506Y-1315030D2* +X2288391Y-1323769D1* +G75* +G01X2241506Y-1315030D2* +G03X2239010Y-1314799I-2496J-13390D1* +G74* +X2218690Y-1314799D2* +X2239010Y-1314799D1* +G75* +G01X2218690Y-1314799D2* +G03X2211879Y-1316624I0J-13621D1* +G74* +X2198544Y-1324323D2* +X2211879Y-1316624D1* +G75* +G01X2198544Y-1324323D2* +G03X2196179Y-1328420I2366J-4097D1* +G74* +X2196179Y-1329944D2* +X2196179Y-1328420D1* +X2190750Y-1336040D2* +X2196179Y-1329944D1* +X1936750Y-1439291D2* +X1936750Y-1440815D1* +X1936750Y-1435100D2* +X1936750Y-1439291D1* +G75* +G01X1936750Y-1440815D2* +G03X1938560Y-1443248I2540J0D1* +G74* +X1945550Y-1445346D2* +X1938560Y-1443248D1* +G75* +G01X1945550Y-1445346D2* +G03X1946728Y-1445543I1360J4531D1* +G74* +X2161137Y-1453783D2* +X1946728Y-1445543D1* +G75* +G01X2161137Y-1453783D2* +G03X2162099Y-1453801I962J25033D1* +G74* +X2261870Y-1453801D2* +X2162099Y-1453801D1* +X2263394Y-1453801D2* +X2261870Y-1453801D1* +X2272030Y-1451610D2* +X2263394Y-1453801D1* +X2406650Y-1439291D2* +X2406650Y-1440815D1* +X2406650Y-1435100D2* +X2406650Y-1439291D1* +G75* +G01X2391400Y-1465707D2* +G03X2406650Y-1440815I-12690J24892D1* +G74* +X2385352Y-1468790D2* +X2391400Y-1465707D1* +G75* +G01X2371090Y-1472216D2* +G03X2385352Y-1468790I0J31401D1* +G74* +X2366010Y-1472216D2* +X2371090Y-1472216D1* +G75* +G01X2359209Y-1471471D2* +G03X2366010Y-1472216I6801J30656D1* +G74* +X2283215Y-1454611D2* +X2359209Y-1471471D1* +G75* +G01X2283215Y-1454611D2* +G03X2282190Y-1454499I-1025J-4619D1* +G74* +X2280666Y-1454499D2* +X2282190Y-1454499D1* +X2272030Y-1451610D2* +X2280666Y-1454499D1* +X2197100Y-1422400D2* +X2197100Y-1416050D1* +X2196180Y-1376791D2* +X2197100Y-1416050D1* +G75* +G01X2196179Y-1376680D2* +G03X2196180Y-1376791I4731J0D1* +G74* +X2196179Y-1375156D2* +X2196179Y-1376680D1* +X2190750Y-1369060D2* +X2196179Y-1375156D1* +X2127098Y-1422400D2* +X2127098Y-1428750D1* +X2154637Y-1443085D2* +X2127098Y-1428750D1* +G75* +G01X2154637Y-1443085D2* +G03X2162099Y-1444911I7462J14335D1* +G74* +X2232101Y-1444911D2* +X2162099Y-1444911D1* +G75* +G01X2232101Y-1444911D2* +G03X2244343Y-1439300I0J16161D1* +G74* +X2258286Y-1423121D2* +X2244343Y-1439300D1* +G75* +G01X2261870Y-1421479D2* +G03X2258286Y-1423121I0J-4731D1* +G74* +X2263394Y-1421479D2* +X2261870Y-1421479D1* +X2272030Y-1418590D2* +X2263394Y-1421479D1* +X2115134Y-1174750D2* +X2115134Y-1181100D1* +X2012950Y-1336802D2* +X2115134Y-1181100D1* +X2012950Y-1339850D2* +X2012950Y-1336802D1* +X2012950Y-1342898D2* +X1982470Y-1376426D1* +X2012950Y-1339850D2* +X2012950Y-1342898D1* +X2489784Y-1174750D2* +X2489784Y-1181100D1* +X2495923Y-1259579D2* +X2489784Y-1181100D1* +G75* +G01X2495963Y-1260602D2* +G03X2495923Y-1259579I-13113J0D1* +G74* +X2495963Y-1266698D2* +X2495963Y-1260602D1* +G75* +G01X2495732Y-1269151D2* +G03X2495963Y-1266698I-12882J2453D1* +G74* +X2482850Y-1336802D2* +X2495732Y-1269151D1* +X2482850Y-1339850D2* +X2482850Y-1336802D1* +X1911350Y-1430909D2* +X1911350Y-1429385D1* +X1911350Y-1435100D2* +X1911350Y-1430909D1* +G75* +G01X1911394Y-1428916D2* +G03X1911350Y-1429385I2496J-469D1* +G74* +X1912086Y-1425231D2* +X1911394Y-1428916D1* +G75* +G01X1920235Y-1411738D2* +G03X1912086Y-1425231I13975J-17647D1* +G74* +X1961187Y-1379306D2* +X1920235Y-1411738D1* +G75* +G01X1961187Y-1379306D2* +G03X1962150Y-1377315I-1577J1991D1* +G74* +X1962150Y-1375791D2* +X1962150Y-1377315D1* +X1962150Y-1371600D2* +X1962150Y-1375791D1* +X1965718Y-1372697D2* +X1982470Y-1376426D1* +G75* +G01X1965718Y-1372697D2* +G03X1964690Y-1372584I-1028J-4618D1* +G74* +X1963166Y-1372584D2* +X1964690Y-1372584D1* +X1962150Y-1371600D2* +X1963166Y-1372584D1* +X2381250Y-1430909D2* +X2381250Y-1429385D1* +X2381250Y-1435100D2* +X2381250Y-1430909D1* +G75* +G01X2382009Y-1427574D2* +G03X2381250Y-1429385I1781J-1811D1* +G74* +X2431291Y-1379126D2* +X2382009Y-1427574D1* +G75* +G01X2431291Y-1379126D2* +G03X2432050Y-1377315I-1781J1811D1* +G74* +X2432050Y-1375791D2* +X2432050Y-1377315D1* +X2432050Y-1371600D2* +X2432050Y-1375791D1* +X2482850Y-1339850D2* +X2482850Y-1342898D1* +X2464220Y-1354128D2* +X2482850Y-1342898D1* +G75* +G01X2464041Y-1354234D2* +G03X2464220Y-1354128I-6591J11336D1* +G74* +X2436968Y-1369975D2* +X2464041Y-1354234D1* +G75* +G01X2434590Y-1370616D2* +G03X2436968Y-1369975I0J4731D1* +G74* +X2433066Y-1370616D2* +X2434590Y-1370616D1* +X2432050Y-1371600D2* +X2433066Y-1370616D1* +X2115134Y-1174750D2* +X2115134Y-1168400D1* +X2170422Y-1152843D2* +X2115134Y-1168400D1* +G75* +G01X2174799Y-1152239D2* +G03X2170422Y-1152843I0J-16161D1* +G74* +X2454783Y-1152239D2* +X2174799Y-1152239D1* +G75* +G01X2462245Y-1154065D2* +G03X2454783Y-1152239I-7462J-14335D1* +G74* +X2489784Y-1168400D2* +X2462245Y-1154065D1* +X2489784Y-1174750D2* +X2489784Y-1168400D1* +X2092096Y-1422400D2* +X2092096Y-1416050D1* +X2096392Y-1377200D2* +X2092096Y-1416050D1* +G75* +G01X2096392Y-1377200D2* +G03X2096421Y-1376680I-4702J520D1* +G74* +X2096421Y-1375156D2* +X2096421Y-1376680D1* +X2101850Y-1369060D2* +X2096421Y-1375156D1* +X2381250Y-1439291D2* +X2381250Y-1440815D1* +X2381250Y-1435100D2* +X2381250Y-1439291D1* +G75* +G01X2379440Y-1443248D2* +G03X2381250Y-1440815I-730J2433D1* +G74* +X2372450Y-1445346D2* +X2379440Y-1443248D1* +G75* +G01X2371090Y-1445546D2* +G03X2372450Y-1445346I0J4731D1* +G74* +X2368550Y-1445546D2* +X2371090Y-1445546D1* +G75* +G01X2366835Y-1445224D2* +G03X2368550Y-1445546I1715J4409D1* +G74* +X2364628Y-1444366D2* +X2366835Y-1445224D1* +G75* +G01X2362200Y-1440815D2* +G03X2364628Y-1444366I3810J0D1* +G74* +X2362200Y-1429385D2* +X2362200Y-1440815D1* +G75* +G01X2362200Y-1429385D2* +G03X2360110Y-1420710I-19050J0D1* +G74* +X2348587Y-1398179D2* +X2360110Y-1420710D1* +G75* +G01X2348587Y-1398179D2* +G03X2342670Y-1390902I-20042J-10251D1* +G74* +X2340499Y-1389152D2* +X2342670Y-1390902D1* +G75* +G01X2340499Y-1389152D2* +G03X2328545Y-1384935I-11954J-14833D1* +G74* +X2327021Y-1384935D2* +X2328545Y-1384935D1* +X2321560Y-1384935D2* +X2327021Y-1384935D1* +X1983771Y-1380228D2* +X1982470Y-1376426D1* +G75* +G01X1984026Y-1381760D2* +G03X1983771Y-1380228I-4731J0D1* +G74* +X1984026Y-1383284D2* +X1984026Y-1381760D1* +X1986280Y-1386205D2* +X1984026Y-1383284D1* +G54D19* +X2279650Y-1260602D2* +X2279650Y-1266698D1* +X2305050Y-1260602D2* +X2305050Y-1266698D1* +X2330450Y-1260602D2* +X2330450Y-1266698D1* +X2355850Y-1260602D2* +X2355850Y-1266698D1* +X2381250Y-1260602D2* +X2381250Y-1266698D1* +X2406650Y-1260602D2* +X2406650Y-1266698D1* +X2432050Y-1260602D2* +X2432050Y-1266698D1* +X2457450Y-1260602D2* +X2457450Y-1266698D1* +X2482850Y-1260602D2* +X2482850Y-1266698D1* +X2482850Y-1336802D2* +X2482850Y-1342898D1* +X2457450Y-1336802D2* +X2457450Y-1342898D1* +X2432050Y-1336802D2* +X2432050Y-1342898D1* +X2406650Y-1336802D2* +X2406650Y-1342898D1* +X2381250Y-1336802D2* +X2381250Y-1342898D1* +X2355850Y-1336802D2* +X2355850Y-1342898D1* +X2330450Y-1336802D2* +X2330450Y-1342898D1* +X2305050Y-1336802D2* +X2305050Y-1342898D1* +X1809750Y-1260602D2* +X1809750Y-1266698D1* +X1835150Y-1260602D2* +X1835150Y-1266698D1* +X1860550Y-1260602D2* +X1860550Y-1266698D1* +X1885950Y-1260602D2* +X1885950Y-1266698D1* +X1911350Y-1260602D2* +X1911350Y-1266698D1* +X1936750Y-1260602D2* +X1936750Y-1266698D1* +X1962150Y-1260602D2* +X1962150Y-1266698D1* +X1987550Y-1260602D2* +X1987550Y-1266698D1* +X2012950Y-1260602D2* +X2012950Y-1266698D1* +X2012950Y-1336802D2* +X2012950Y-1342898D1* +X1987550Y-1336802D2* +X1987550Y-1342898D1* +X1962150Y-1336802D2* +X1962150Y-1342898D1* +X1936750Y-1336802D2* +X1936750Y-1342898D1* +X1911350Y-1336802D2* +X1911350Y-1342898D1* +X1885950Y-1336802D2* +X1885950Y-1342898D1* +X1860550Y-1336802D2* +X1860550Y-1342898D1* +X1835150Y-1336802D2* +X1835150Y-1342898D1* +G54D22* +X2162099Y-1428750D2* +X2162099Y-1416050D1* +X2197100Y-1428750D2* +X2197100Y-1416050D1* +X2232101Y-1428750D2* +X2232101Y-1416050D1* +X2127098Y-1428750D2* +X2127098Y-1416050D1* +X2057095Y-1428750D2* +X2057095Y-1416050D1* +X2092096Y-1428750D2* +X2092096Y-1416050D1* +X2244801Y-1168400D2* +X2244801Y-1181100D1* +X2209800Y-1168400D2* +X2209800Y-1181100D1* +X2174799Y-1168400D2* +X2174799Y-1181100D1* +X2279802Y-1168400D2* +X2279802Y-1181100D1* +X2314804Y-1168400D2* +X2314804Y-1181100D1* +X2489784Y-1168400D2* +X2489784Y-1181100D1* +X2454783Y-1168400D2* +X2454783Y-1181100D1* +X2349779Y-1168400D2* +X2349779Y-1181100D1* +X2384781Y-1168400D2* +X2384781Y-1181100D1* +X2419782Y-1168400D2* +X2419782Y-1181100D1* +X1870151Y-1168400D2* +X1870151Y-1181100D1* +X1835150Y-1168400D2* +X1835150Y-1181100D1* +X1800149Y-1168400D2* +X1800149Y-1181100D1* +X1905152Y-1168400D2* +X1905152Y-1181100D1* +X1940154Y-1168400D2* +X1940154Y-1181100D1* +X2115134Y-1168400D2* +X2115134Y-1181100D1* +X2080133Y-1168400D2* +X2080133Y-1181100D1* +X1975129Y-1168400D2* +X1975129Y-1181100D1* +X2010131Y-1168400D2* +X2010131Y-1181100D1* +X2045132Y-1168400D2* +X2045132Y-1181100D1* +M02* diff --git a/gerbview/gerber_test_files/test_polygons.gbr b/gerbview/gerber_test_files/test_polygons_with_arcs.gbr similarity index 100% rename from gerbview/gerber_test_files/test_polygons.gbr rename to gerbview/gerber_test_files/test_polygons_with_arcs.gbr diff --git a/gerbview/gerber_test_files/test_polygons_simple.gbr b/gerbview/gerber_test_files/test_polygons_with_arcs_simple.gbr similarity index 100% rename from gerbview/gerber_test_files/test_polygons_simple.gbr rename to gerbview/gerber_test_files/test_polygons_with_arcs_simple.gbr diff --git a/gerbview/gerberframe.cpp b/gerbview/gerberframe.cpp index 9963637e93..76a81ef876 100644 --- a/gerbview/gerberframe.cpp +++ b/gerbview/gerberframe.cpp @@ -57,9 +57,9 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) ID_CONFIG_AND_PREFERENCES_END, WinEDA_GerberFrame::Process_Config ) - EVT_MENU( ID_COLORS_SETUP, WinEDA_GerberFrame::Process_Config ) + EVT_MENU( ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, WinEDA_GerberFrame::OnSelectOptionToolbar ) EVT_MENU( ID_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberGeneralOptionsFrame ) - EVT_MENU( ID_PCB_DISPLAY_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog ) + EVT_MENU( ID_GERBVIEW_DISPLAY_OPTIONS_SETUP, WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog ) EVT_MENU_RANGE( ID_LANGUAGE_CHOICE, ID_LANGUAGE_CHOICE_END, WinEDA_DrawFrame::SetLanguage ) @@ -74,7 +74,7 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) // menu Miscellaneous - EVT_MENU( ID_PCB_GLOBAL_DELETE, + EVT_MENU( ID_GERBVIEW_GLOBAL_DELETE, WinEDA_GerberFrame::Process_Special_Functions ) // Menu Help @@ -88,7 +88,7 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) EVT_TOOL( wxID_UNDO, WinEDA_GerberFrame::Process_Special_Functions ) EVT_TOOL( ID_GEN_PRINT, WinEDA_GerberFrame::ToPrinter ) EVT_TOOL( ID_FIND_ITEMS, WinEDA_GerberFrame::Process_Special_Functions ) - EVT_KICAD_CHOICEBOX( ID_TOOLBARH_PCB_SELECT_LAYER, + EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBVIEW_SELECT_LAYER, WinEDA_GerberFrame::Process_Special_Functions ) EVT_KICAD_CHOICEBOX( ID_TOOLBARH_GERBER_SELECT_TOOL, @@ -96,7 +96,7 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) // Vertical toolbar: EVT_TOOL( ID_NO_SELECT_BUTT, WinEDA_GerberFrame::Process_Special_Functions ) - EVT_TOOL( ID_PCB_DELETE_ITEM_BUTT, + EVT_TOOL( ID_GERBVIEW_DELETE_ITEM_BUTT, WinEDA_GerberFrame::Process_Special_Functions ) EVT_MENU_RANGE( ID_POPUP_GENERAL_START_RANGE, ID_POPUP_GENERAL_END_RANGE, @@ -109,6 +109,8 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) // Option toolbar EVT_TOOL_RANGE( ID_TB_OPTIONS_START, ID_TB_OPTIONS_END, WinEDA_GerberFrame::OnSelectOptionToolbar ) + EVT_TOOL( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, + WinEDA_GerberFrame::OnSelectOptionToolbar ) END_EVENT_TABLE() @@ -120,6 +122,7 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, WinEDA_BasePcbFrame( father, GERBER_FRAME, title, pos, size, style ) { m_FrameName = wxT( "GerberFrame" ); + m_show_layer_manager_tools = true; m_Draw_Axis = true; // true to show X and Y axis on screen m_Draw_Sheet_Ref = FALSE; // TRUE for reference drawings. @@ -136,8 +139,20 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, SetBaseScreen( ScreenPcb ); ActiveScreen = ScreenPcb; - LoadSettings(); + SetBoard( new BOARD( NULL, this ) ); + GetBoard()->SetEnabledLayers( FULL_LAYERS ); // All 32 layers enabled at first. + // Create the PCB_LAYER_WIDGET *after* SetBoard(): + wxFont font = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); + int pointSize = font.GetPointSize(); + int screenHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ); + if( screenHeight <= 900 ) + pointSize = (pointSize * 8) / 10; + m_LayersManager = new GERBER_LAYER_WIDGET( this, DrawPanel, pointSize ); + + // LoadSettings() *after* creating m_LayersManager, because LoadSettings() + // initialize parameters in m_LayersManager + LoadSettings(); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); GetScreen()->SetGrid( ID_POPUP_GRID_LEVEL_1000 + m_LastGridSizeId ); @@ -146,7 +161,6 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, ReCreateVToolbar(); ReCreateOptToolbar(); -#if defined(KICAD_AUIMANAGER) m_auimgr.SetManagedWindow( this ); wxAuiPaneInfo horiz; @@ -162,13 +176,23 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, vert.TopDockable( false ).BottomDockable( false ); horiz.LeftDockable( false ).RightDockable( false ); + // LAYER_WIDGET is floatable, but initially docked at far right + wxAuiPaneInfo lyrs; + lyrs.MinSize( m_LayersManager->GetBestSize() ); // updated in ReFillLayerWidget + lyrs.BestSize( m_LayersManager->GetBestSize() ); + lyrs.CloseButton( false ); + lyrs.Caption( _( "Visibles" ) ); + lyrs.IsFloatable(); + if( m_HToolBar ) m_auimgr.AddPane( m_HToolBar, wxAuiPaneInfo( horiz ).Name( wxT( "m_HToolBar" ) ).Top().Row( 0 ) ); if( m_VToolBar ) m_auimgr.AddPane( m_VToolBar, - wxAuiPaneInfo( vert ).Name( wxT( "m_VToolBar" ) ).Right() ); + wxAuiPaneInfo( vert ).Name( wxT( "m_VToolBar" ) ).Right().Row( 1 ) ); + + m_auimgr.AddPane( m_LayersManager, lyrs.Name( wxT( "m_LayersManagerToolBar" ) ).Right().Row( 0 ) ); if( m_OptionsToolBar ) m_auimgr.AddPane( m_OptionsToolBar, @@ -183,7 +207,8 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, wxAuiPaneInfo( horiz ).Name( wxT( "MsgPanel" ) ).Bottom() ); m_auimgr.Update(); -#endif + + ReFillLayerWidget(); // this is near end because contents establish size } @@ -197,34 +222,6 @@ WinEDA_GerberFrame::~WinEDA_GerberFrame() void WinEDA_GerberFrame::OnCloseWindow( wxCloseEvent& Event ) { - PCB_SCREEN* screen = ScreenPcb; - -#if 0 // unused currently - while( screen ) - { - if( screen->IsModify() ) - break; - screen = screen->Next(); - } - - if( screen ) - { - if( !IsOK( this, _( "Layer modified, Continue ?" ) ) ) - { - Event.Veto(); - return; - } - } -#endif - - while( screen ) // Modify delete flag to prevent further message. - { - screen->ClrModify(); - screen = screen->Next(); - } - - SetBaseScreen( ActiveScreen = ScreenPcb ); - SaveSettings(); Destroy(); } @@ -307,15 +304,23 @@ void WinEDA_GerberFrame::SetToolbars() g_DisplayPolygonsModeSketch == 0 ? 0 : 1 ); m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_DCODES, - DisplayOpt.DisplayPadNum ); - } + IsElementVisible( DCODES_VISIBLE) ); + + m_OptionsToolBar->ToggleTool( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, + m_show_layer_manager_tools ); + if( m_show_layer_manager_tools ) + GetMenuBar()->SetLabel(ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, + _("Hide &Layers Manager" ) ); + else + GetMenuBar()->SetLabel(ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, + _("Show &Layers Manager" ) ); + +} DisplayUnitsMsg(); -#if defined(KICAD_AUIMANAGER) if( m_auimgr.GetManagedWindow() ) m_auimgr.Update(); -#endif } @@ -356,6 +361,10 @@ void WinEDA_GerberFrame::LoadSettings() { m_Draw_Sheet_Ref = true; } + + long tmp; + config->Read( GerbviewShowDCodes, &tmp, 1); + SetElementVisibility( DCODES_VISIBLE, tmp); } /**************************************/ @@ -384,4 +393,71 @@ void WinEDA_GerberFrame::SaveSettings() } } config->Write( GerbviewShowPageSizeOption, pageSize_opt ); + config->Write( GerbviewShowDCodes, IsElementVisible( DCODES_VISIBLE) ); +} + + +void WinEDA_GerberFrame::ReFillLayerWidget() +{ + m_LayersManager->ReFill(); + + wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_LayersManager ); + + wxSize bestz = m_LayersManager->GetBestSize(); + + lyrs.MinSize( bestz ); + lyrs.BestSize( bestz ); + lyrs.FloatingSize( bestz ); + + if( lyrs.IsDocked() ) + m_auimgr.Update(); + else + m_LayersManager->SetSize( bestz ); +} + +/** Function IsGridVisible() , virtual + * @return true if the grid must be shown + */ +bool WinEDA_GerberFrame::IsGridVisible() +{ + return IsElementVisible(GERBER_GRID_VISIBLE); +} + +/** Function SetGridVisibility() , virtual + * It may be overloaded by derived classes + * if you want to store/retrieve the grid visiblity in configuration. + * @param aVisible = true if the grid must be shown + */ +void WinEDA_GerberFrame::SetGridVisibility(bool aVisible) +{ + SetElementVisibility(GERBER_GRID_VISIBLE, aVisible); +} + +/** Function GetGridColor() , virtual + * @return the color of the grid + */ +int WinEDA_GerberFrame::GetGridColor() +{ + return GetBoard()->GetVisibleElementColor( GERBER_GRID_VISIBLE ); +} + +/** Function SetGridColor() , virtual + * @param aColor = the new color of the grid + */ +void WinEDA_GerberFrame::SetGridColor(int aColor) +{ + GetBoard()->SetVisibleElementColor( GERBER_GRID_VISIBLE, aColor ); +} + +/** + * Function SetElementVisibility + * changes the visibility of an element category + * @param aGERBER_VISIBLE is from the enum by the same name + * @param aNewState = The new visibility state of the element category + * @see enum aGERBER_VISIBLE + */ +void WinEDA_GerberFrame::SetElementVisibility( int aGERBER_VISIBLE, bool aNewState ) +{ + GetBoard()->SetElementVisibility( aGERBER_VISIBLE, aNewState ); + m_LayersManager->SetRenderState( aGERBER_VISIBLE, aNewState ); } diff --git a/gerbview/gerbview.cpp b/gerbview/gerbview.cpp index 3654fa3a93..1dc65894e9 100644 --- a/gerbview/gerbview.cpp +++ b/gerbview/gerbview.cpp @@ -41,6 +41,7 @@ const wxString GerbviewProjectFileWildcard( _( "GerbView project files (.cnf)|*. // Config keywords const wxString GerbviewShowPageSizeOption( wxT( "ShowPageSizeOpt" ) ); +extern const wxString GerbviewShowDCodes( wxT( "ShowDCodesOpt" ) ); GERBER* g_GERBER_List[32]; @@ -105,9 +106,6 @@ bool WinEDA_App::OnInit() /* Gerbview mainframe title */ frame->SetTitle( GetTitle() + wxT( " " ) + GetBuildVersion() ); - frame->SetBoard( new BOARD( NULL, frame ) ); - frame->GetBoard()->SetEnabledLayers( FULL_LAYERS ); // All 32 layers enabled at first. - // Initialize some display options DisplayOpt.DisplayPadIsol = false; // Pad clearance has no meaning diff --git a/gerbview/gerbview.h b/gerbview/gerbview.h index 9f3b4250dd..d5ee91865f 100644 --- a/gerbview/gerbview.h +++ b/gerbview/gerbview.h @@ -29,11 +29,11 @@ typedef enum * Enum ITEM_VISIBLE * is a set of visible PCB elements. */ -enum ITEM_VISIBLE +enum GERBER_VISIBLE { - DCODES_VISIBLE, - - END_ITEM_VISIBLE_LIST // sentinel + DCODES_VISIBLE = 1, // visible item id cannot be 0 because this id is used as wxWidget id + GERBER_GRID_VISIBLE, + END_GERBER_VISIBLE_LIST // sentinel }; extern wxString g_PhotoFilenameExt; @@ -52,6 +52,7 @@ extern Ki_PageDescr* g_GerberPageSizeList[]; // Config keywords extern const wxString GerbviewShowPageSizeOption; +extern const wxString GerbviewShowDCodes; /** * Enum APERTURE_T diff --git a/gerbview/gerbview_config.cpp b/gerbview/gerbview_config.cpp index bb994337c1..b2d3d03400 100644 --- a/gerbview/gerbview_config.cpp +++ b/gerbview/gerbview_config.cpp @@ -33,10 +33,6 @@ void WinEDA_GerberFrame::Process_Config( wxCommandEvent& event ) switch( id ) { - case ID_COLORS_SETUP: - DisplayColorSetupFrame( this, pos ); - break; - case ID_CONFIG_REQ: { InstallConfigFrame( pos ); diff --git a/gerbview/gerbview_config.h b/gerbview/gerbview_config.h index 79472a2c32..22bfb26987 100644 --- a/gerbview/gerbview_config.h +++ b/gerbview/gerbview_config.h @@ -73,14 +73,6 @@ static PARAM_CFG_INT ViaFillCfg TRUE ); -static PARAM_CFG_BOOL PadShowNumCfg // Show DCodes -( - INSETUP, - wxT("PadSNum"), - &DisplayOpt.DisplayPadNum, - TRUE -); - static PARAM_CFG_SETCOLOR ColorLayer0Cfg ( INSETUP, @@ -379,7 +371,6 @@ PARAM_CFG_BASE * ParamCfgList[] = & SegmFillCfg, & PadFillCfg, & ViaFillCfg, //TODO: Will adding this line break tha pcbnew file compatibility? - & PadShowNumCfg, & ColorLayer0Cfg, & ColorLayer1Cfg, & ColorLayer2Cfg, diff --git a/gerbview/gerbview_dialog_display_options_frame.cpp b/gerbview/gerbview_dialog_display_options_frame.cpp index 7cb7f6088e..dc0f191982 100644 --- a/gerbview/gerbview_dialog_display_options_frame.cpp +++ b/gerbview/gerbview_dialog_display_options_frame.cpp @@ -19,11 +19,11 @@ class DIALOG_DISPLAY_OPTIONS : public DIALOG_DISPLAY_OPTIONS_BASE { private: - WinEDA_BasePcbFrame* m_Parent; + WinEDA_GerberFrame* m_Parent; public: - DIALOG_DISPLAY_OPTIONS( WinEDA_BasePcbFrame* parent ); + DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame* parent ); ~DIALOG_DISPLAY_OPTIONS() {}; private: @@ -40,7 +40,7 @@ void WinEDA_GerberFrame::InstallGerberDisplayOptionsDialog( wxCommandEvent& even DrawPanel->Refresh(); } -DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_BasePcbFrame *parent) : +DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_GerberFrame *parent) : DIALOG_DISPLAY_OPTIONS_BASE( parent, wxID_ANY ) { m_Parent = parent; @@ -76,7 +76,7 @@ DIALOG_DISPLAY_OPTIONS::DIALOG_DISPLAY_OPTIONS( WinEDA_BasePcbFrame *parent) : } } - m_OptDisplayDCodes->SetValue( DisplayOpt.DisplayPadNum ); + m_OptDisplayDCodes->SetValue( m_Parent->IsElementVisible( DCODES_VISIBLE ) ); GetSizer()->Fit( this ); GetSizer()->SetSizeHints( this ); @@ -113,7 +113,7 @@ void DIALOG_DISPLAY_OPTIONS::OnOKBUttonClick( wxCommandEvent& event ) else g_DisplayPolygonsModeSketch = 0; - DisplayOpt.DisplayPadNum = m_OptDisplayDCodes->GetValue(); + m_Parent->SetElementVisibility( DCODES_VISIBLE, m_OptDisplayDCodes->GetValue() ); m_Parent->m_DisplayPadFill = m_Parent->m_DisplayViaFill = DisplayOpt.DisplayViaFill; diff --git a/gerbview/gerbview_id.h b/gerbview/gerbview_id.h index 2d0dccc93a..d35952e436 100644 --- a/gerbview/gerbview_id.h +++ b/gerbview/gerbview_id.h @@ -15,11 +15,17 @@ enum gerbview_ids { ID_MAIN_MENUBAR = ID_END_LIST, - ID_TOOLBARH_PCB_SELECT_LAYER, - ID_PCB_DELETE_ITEM_BUTT, - ID_PCB_GLOBAL_DELETE, - ID_POPUP_PCB_DELETE_TRACKSEG, - ID_PCB_DISPLAY_OPTIONS_SETUP + ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, + + ID_TOOLBARH_GERBVIEW_SELECT_LAYER, + ID_GERBVIEW_DELETE_ITEM_BUTT, + ID_GERBVIEW_GLOBAL_DELETE, + ID_POPUP_GERBVIEW_DELETE_TRACKSEG, + ID_GERBVIEW_DISPLAY_OPTIONS_SETUP, + ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, + ID_TB_OPTIONS_SHOW_DCODES, + + ID_GERBER_END_LIST }; #endif /* __GERBVIEW_IDS_H__ */ diff --git a/gerbview/onrightclick.cpp b/gerbview/onrightclick.cpp index c290d71eb7..e483262e65 100644 --- a/gerbview/onrightclick.cpp +++ b/gerbview/onrightclick.cpp @@ -80,10 +80,6 @@ bool WinEDA_GerberFrame::OnRightClick( const wxPoint& MousePos, switch( DrawStruct->Type() ) { case TYPE_TRACK: - -// PopMenu->AppendSeparator(); -// PopMenu->Append(ID_POPUP_PCB_EDIT_TRACK, _("Edit")); -// PopMenu->Append(ID_POPUP_PCB_DELETE_TRACKSEG, _("Delete")); break; diff --git a/gerbview/options.cpp b/gerbview/options.cpp index ff2c8d8f18..afccca0afa 100644 --- a/gerbview/options.cpp +++ b/gerbview/options.cpp @@ -16,7 +16,7 @@ #include "gerbview.h" #include "protos.h" -#include +#include "gerbview_id.h" /** Function OnSelectOptionToolbar @@ -25,11 +25,24 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event ) { int id = event.GetId(); + bool state; + + switch( id ) + { + case ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG: + state = ! m_show_layer_manager_tools; + id = ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR; + break; + + default: + state = m_OptionsToolBar->GetToolState( id ); + break; + } switch( id ) { case ID_TB_OPTIONS_SHOW_GRID: - SetGridVisibility( m_OptionsToolBar->GetToolState( id ) ); + SetGridVisibility( state ); DrawPanel->Refresh( TRUE ); break; @@ -45,17 +58,17 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event ) case ID_TB_OPTIONS_SHOW_POLAR_COORD: Affiche_Message( wxEmptyString ); - DisplayOpt.DisplayPolarCood = m_OptionsToolBar->GetToolState( id ); + DisplayOpt.DisplayPolarCood = state; UpdateStatusBar(); break; case ID_TB_OPTIONS_SELECT_CURSOR: - m_CursorShape = m_OptionsToolBar->GetToolState( id ); + m_CursorShape = state; DrawPanel->Refresh( TRUE ); break; case ID_TB_OPTIONS_SHOW_PADS_SKETCH: - if( m_OptionsToolBar->GetToolState( id ) ) + if( state ) { DisplayOpt.DisplayPadFill = m_DisplayPadFill = false; } @@ -67,7 +80,7 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event ) break; case ID_TB_OPTIONS_SHOW_VIAS_SKETCH: - if( m_OptionsToolBar->GetToolState( id ) ) + if( state ) { DisplayOpt.DisplayViaFill = m_DisplayViaFill = false; } @@ -79,7 +92,7 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event ) break; case ID_TB_OPTIONS_SHOW_TRACKS_SKETCH: - if( m_OptionsToolBar->GetToolState( id ) ) + if(state ) { m_DisplayPcbTrackFill = FALSE; DisplayOpt.DisplayPcbTrackFill = FALSE; @@ -93,7 +106,7 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event ) break; case ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH: - if( m_OptionsToolBar->GetToolState( id ) ) // Polygons filled asked + if( state ) // Polygons filled asked g_DisplayPolygonsModeSketch = 1; else g_DisplayPolygonsModeSketch = 0; @@ -101,10 +114,17 @@ void WinEDA_GerberFrame::OnSelectOptionToolbar( wxCommandEvent& event ) break; case ID_TB_OPTIONS_SHOW_DCODES: - DisplayOpt.DisplayPadNum = m_OptionsToolBar->GetToolState( id ); + SetElementVisibility( DCODES_VISIBLE, state ); DrawPanel->Refresh( TRUE ); break; + case ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR: + // show/hide auxiliary Vertical layers and visibility manager toolbar + m_show_layer_manager_tools = state; + m_auimgr.GetPane( wxT( "m_LayersManagerToolBar" ) ).Show( m_show_layer_manager_tools ); + m_auimgr.Update(); + break; + default: DisplayError( this, wxT( "WinEDA_PcbFrame::OnSelectOptionToolbar error" ) ); diff --git a/gerbview/set_color.cpp b/gerbview/set_color.cpp.unused similarity index 100% rename from gerbview/set_color.cpp rename to gerbview/set_color.cpp.unused diff --git a/gerbview/set_color.h b/gerbview/set_color.h.unused similarity index 100% rename from gerbview/set_color.h rename to gerbview/set_color.h.unused diff --git a/gerbview/tool_gerber.cpp b/gerbview/tool_gerber.cpp index 121e6b5816..0f3d3cebbf 100644 --- a/gerbview/tool_gerber.cpp +++ b/gerbview/tool_gerber.cpp @@ -73,17 +73,18 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void ) wxGetApp().m_fileHistory.AddFilesToMenu( filesMenu ); - // Configuration: + // Configuration and preferences: wxMenu* configmenu = new wxMenu; ADD_MENUITEM_WITH_HELP( configmenu, ID_CONFIG_REQ, _( "&File Ext" ), _( "Set files extensions" ), config_xpm ); - ADD_MENUITEM_WITH_HELP( configmenu, ID_COLORS_SETUP, _( "&Colors" ), - _( "Select colors and display for layers" ), - palette_xpm ); + ADD_MENUITEM_WITH_HELP( configmenu, ID_MENU_GERBVIEW_SHOW_HIDE_LAYERS_MANAGER_DIALOG, + _( "Hide &Layers Manager" ), + _( "Show/hide the layers manager toolbar" ), + layers_manager_xpm ); ADD_MENUITEM_WITH_HELP( configmenu, ID_OPTIONS_SETUP, _( "&Options" ), _( "Select general options" ), preference_xpm ); - ADD_MENUITEM_WITH_HELP( configmenu, ID_PCB_DISPLAY_OPTIONS_SETUP, + ADD_MENUITEM_WITH_HELP( configmenu, ID_GERBVIEW_DISPLAY_OPTIONS_SETUP, _( "Display" ), _( "Select how items are displayed" ), display_options_xpm ); @@ -98,11 +99,6 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void ) configmenu->AppendSeparator(); AddHotkeyConfigMenu( configmenu ); -/* wxMenu *drill_menu = new wxMenu; - * postprocess_menu->Append(ID_PCB_GEN_DRILL_FILE, "Create &Drill file", - * "Gen Drill (EXCELLON] file and/or Drill sheet"); - */ - wxMenu* miscellaneous_menu = new wxMenu; ADD_MENUITEM_WITH_HELP( miscellaneous_menu, ID_GERBVIEW_SHOW_LIST_DCODES, _( "&List DCodes" ), @@ -112,7 +108,7 @@ void WinEDA_GerberFrame::ReCreateMenuBar( void ) _( "Show source file for the current layer" ), tools_xpm ); miscellaneous_menu->AppendSeparator(); - ADD_MENUITEM_WITH_HELP( miscellaneous_menu, ID_PCB_GLOBAL_DELETE, + ADD_MENUITEM_WITH_HELP( miscellaneous_menu, ID_GERBVIEW_GLOBAL_DELETE, _( "&Delete Layer" ), _( "Delete current layer" ), general_deletions_xpm ); @@ -155,10 +151,6 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void ) m_HToolBar = new WinEDA_Toolbar( TOOLBAR_MAIN, this, ID_H_TOOLBAR, TRUE ); -#if !defined(KICAD_AUIMANAGER) - SetToolBar( (wxToolBar*)m_HToolBar ); -#endif - // Set up toolbar m_HToolBar->AddTool( ID_NEW_BOARD, wxEmptyString, wxBitmap( new_xpm ), @@ -168,33 +160,9 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void ) wxBitmap( open_xpm ), _( "Open existing Layer" ) ); -#if 0 - m_HToolBar->AddTool( ID_SAVE_PROJECT, wxEmptyString, - wxBitmap( save_button ), - _( "Save" ) ); - - m_HToolBar->AddSeparator(); - m_HToolBar->AddTool( ID_SHEET_SET, wxEmptyString, - wxBitmap( sheetset_xpm ), - _( "page settings (size, texts)" ) ); - -#endif m_HToolBar->AddSeparator(); -#if 0 - m_HToolBar->AddTool( wxID_CUT, wxEmptyString, - wxBitmap( cut_button ), - _( "Cut selected item" ) ); - - m_HToolBar->AddTool( wxID_COPY, wxEmptyString, - wxBitmap( copy_button ), - _( "Copy selected item" ) ); - - m_HToolBar->AddTool( wxID_PASTE, wxEmptyString, - wxBitmap( paste_xpm ), - _( "Paste" ) ); -#endif m_HToolBar->AddTool( wxID_UNDO, wxEmptyString, wxBitmap( undelete_xpm ), @@ -243,7 +211,7 @@ void WinEDA_GerberFrame::ReCreateHToolbar( void ) } m_SelLayerBox = new WinEDAChoiceBox( m_HToolBar, - ID_TOOLBARH_PCB_SELECT_LAYER, + ID_TOOLBARH_GERBVIEW_SELECT_LAYER, wxDefaultPosition, wxSize( 150, -1 ), choices ); m_SelLayerBox->SetSelection( GetScreen()->m_Active_Layer ); @@ -288,29 +256,8 @@ void WinEDA_GerberFrame::ReCreateVToolbar( void ) m_VToolBar->AddTool( ID_NO_SELECT_BUTT, wxEmptyString, wxBitmap( cursor_xpm ) ); m_VToolBar->ToggleTool( ID_NO_SELECT_BUTT, TRUE ); - -#if 0 m_VToolBar->AddSeparator(); - m_VToolBar->AddTool( ID_COMPONENT_BUTT, wxEmptyString, - wxBitmap( component_button ), - _( "Add flashes" ) ); - - m_VToolBar->AddTool( ID_BUS_BUTT, wxEmptyString, - wxBitmap( bus_button ), - _( "Add lines" ) ); - - m_VToolBar->AddTool( ID_JUNCTION_BUTT, wxEmptyString, - wxBitmap( junction_xpm ), - _( "Add layer alignment target" ) ); - - m_VToolBar->AddSeparator(); - m_VToolBar->AddTool( ID_PCB_ADD_TEXT_BUTT, wxEmptyString, - wxBitmap( tool_text_xpm ), - _( "Add text" ) ); - -#endif - m_VToolBar->AddSeparator(); - m_VToolBar->AddTool( ID_PCB_DELETE_ITEM_BUTT, wxEmptyString, + m_VToolBar->AddTool( ID_GERBVIEW_DELETE_ITEM_BUTT, wxEmptyString, wxBitmap( delete_body_xpm ), _( "Delete items" ) ); @@ -369,7 +316,16 @@ void WinEDA_GerberFrame::ReCreateOptToolbar( void ) wxBitmap( show_dcodenumber_xpm ), _( "Show dcode number" ), wxITEM_CHECK ); - m_OptionsToolBar->Realize(); + // Tools to show/hide toolbars: + m_OptionsToolBar->AddSeparator(); + m_OptionsToolBar->AddTool( ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR, + wxEmptyString, + wxBitmap( layers_manager_xpm ), + _( + "Show/hide the layers manager toolbar" ), + wxITEM_CHECK ); + + m_OptionsToolBar->Realize(); SetToolbars(); } diff --git a/gerbview/tracepcb.cpp b/gerbview/tracepcb.cpp index 5e44a646a7..81d489be1f 100644 --- a/gerbview/tracepcb.cpp +++ b/gerbview/tracepcb.cpp @@ -189,7 +189,7 @@ void WinEDA_GerberFrame::Trace_Gerber( wxDC* DC, int draw_mode, int printmasklay SetPenMinWidth( tmp ); - if( DisplayOpt.DisplayPadNum ) + if( IsElementVisible( DCODES_VISIBLE) ) Affiche_DCodes_Pistes( DrawPanel, DC, GetBoard(), GR_COPY ); GetScreen()->ClrRefreshReq(); diff --git a/gerbview/wxGerberFrame.h b/gerbview/wxGerberFrame.h index 5b229692b2..9c95d6c7b7 100644 --- a/gerbview/wxGerberFrame.h +++ b/gerbview/wxGerberFrame.h @@ -7,6 +7,7 @@ #include "id.h" +#include "class_gerbview_layer_widget.h" /** @@ -37,10 +38,18 @@ class WinEDA_GerberFrame: this is the main window used in gerbview class WinEDA_GerberFrame : public WinEDA_BasePcbFrame { + friend class PCB_LAYER_WIDGET; + +protected: + GERBER_LAYER_WIDGET* m_LayersManager; + public: WinEDAChoiceBox* m_SelLayerBox; WinEDAChoiceBox* m_SelLayerTool; +private: + bool m_show_layer_manager_tools; + public: WinEDA_GerberFrame( wxWindow* father, const wxString& title, const wxPoint& pos, const wxSize& size, @@ -50,6 +59,64 @@ public: void Update_config(); void OnCloseWindow( wxCloseEvent& Event ); + + /** Function IsGridVisible() , virtual + * @return true if the grid must be shown + */ + virtual bool IsGridVisible(); + + /** Function SetGridVisibility() , virtual + * It may be overloaded by derived classes + * if you want to store/retrieve the grid visiblity in configuration. + * @param aVisible = true if the grid must be shown + */ + virtual void SetGridVisibility(bool aVisible); + + /** Function GetGridColor() , virtual + * @return the color of the grid + */ + virtual int GetGridColor(); + + /** Function SetGridColor() , virtual + * @param aColor = the new color of the grid + */ + virtual void SetGridColor(int aColor); + + /** + * Function IsElementVisible + * tests whether a given element category is visible. Keep this as an + * inline function. + * @param aGERBER_VISIBLE is from the enum by the same name + * @return bool - true if the element is visible. + * @see enum PCB_VISIBLE + */ + bool IsElementVisible( int aGERBER_VISIBLE ) + { + return GetBoard()->IsElementVisible( aGERBER_VISIBLE ); + } + + /** + * Function SetElementVisibility + * changes the visibility of an element category + * @param aGERBER_VISIBLE is from the enum by the same name + * @param aNewState = The new visibility state of the element category + * @see enum PCB_VISIBLE + */ + void SetElementVisibility( int aGERBER_VISIBLE, bool aNewState ); + + /** + * Function SetVisibleAlls + * Set the status of all visible element categories and layers to VISIBLE + */ + void SetVisibleAlls( ); + + /** + * Function ReFillLayerWidget + * changes out all the layers in m_Layers and may be called upon + * loading a new BOARD. + */ + void ReFillLayerWidget(); + /** * Load applications settings specific to the PCBNew. * diff --git a/include/HersheyCyrillic.h b/include/HersheyCyrillic.h.unused similarity index 100% rename from include/HersheyCyrillic.h rename to include/HersheyCyrillic.h.unused diff --git a/include/hershey_fonts.h b/include/hershey_fonts.h.unused similarity index 100% rename from include/hershey_fonts.h rename to include/hershey_fonts.h.unused diff --git a/include/id.h b/include/id.h index c48f7f6741..463719572a 100644 --- a/include/id.h +++ b/include/id.h @@ -231,7 +231,6 @@ enum main_id ID_TB_OPTIONS_SHOW_TRACKS_SKETCH, ID_TB_OPTIONS_SHOW_MODULE_TEXT_SKETCH, ID_TB_OPTIONS_SHOW_MODULE_EDGE_SKETCH, - ID_TB_OPTIONS_SHOW_DCODES, ID_TB_OPTIONS_SHOW_HIGH_CONTRAST_MODE, ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1, ID_TB_OPTIONS_SHOW_POLYGONS_SKETCH, diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 84d9babe1e3294277bbd5452f1184b497a6c6856..1b22756ad0c0d96c2a7ba09e56bd0a29775f61b6 100644 GIT binary patch delta 63656 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 diff --git a/internat/fr/kicad.po b/internat/fr/kicad.po index 9655870a2b..74056cc77a 100644 --- a/internat/fr/kicad.po +++ b/internat/fr/kicad.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: kicad\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-01 11:23+0100\n" -"PO-Revision-Date: 2010-02-01 11:24+0100\n" +"POT-Creation-Date: 2010-02-03 08:57+0100\n" +"PO-Revision-Date: 2010-02-03 09:01+0100\n" "Last-Translator: \n" "Language-Team: kicad team \n" "MIME-Version: 1.0\n" @@ -1931,216 +1931,23 @@ msgstr "Nb Segms" msgid "Error: Unexpected end of file !" msgstr "Erreur: Fin de fichier inattendue !" -#: pcbnew/pcbframe.cpp:114 -msgid "Through Via" -msgstr "Via Traversante" - -#: pcbnew/pcbframe.cpp:114 -msgid "Show through vias" -msgstr "Afficher vias traversantes" - -#: pcbnew/pcbframe.cpp:115 -msgid "Bl/Buried Via" -msgstr "Via Av/Enterrée" - -#: pcbnew/pcbframe.cpp:115 -msgid "Show blind or buried vias" -msgstr "Afficher vias enterrées/aveugles" - -#: pcbnew/pcbframe.cpp:116 -msgid "Micro Via" -msgstr "Micro Via" - -#: pcbnew/pcbframe.cpp:116 -msgid "Show micro vias" -msgstr "Afficher micro vias" - -#: pcbnew/pcbframe.cpp:117 -msgid "Ratsnest" -msgstr "Chevelu" - -#: pcbnew/pcbframe.cpp:117 -msgid "Show unconnected nets as a ratsnest" -msgstr "Afficher les connexions maquantes comme chevelul" - -#: pcbnew/pcbframe.cpp:119 -msgid "Pads Front" -msgstr "Pad Dessus" - -#: pcbnew/pcbframe.cpp:119 -msgid "Show footprint pads on board's front" -msgstr "Afficher les pads placés sur le dessus du ciruit imprimé" - -#: pcbnew/pcbframe.cpp:120 -msgid "Pads Back" -msgstr "Pads Dessous" - -#: pcbnew/pcbframe.cpp:120 -msgid "Show footprint pads on board's back" -msgstr "Afficher les pads placés sur le dessous du ciruit imprimé" - -#: pcbnew/pcbframe.cpp:122 -msgid "Text Front" -msgstr "Texte Dessus" - -#: pcbnew/pcbframe.cpp:122 -#: pcbnew/pcbframe.cpp:123 -msgid "Show footprint text on board's back" -msgstr "Afficher les textes sur modules situés sur le dessous du ciruit imprimé" - -#: pcbnew/pcbframe.cpp:123 -msgid "Text Back" -msgstr "Texte Dessous" - -#: pcbnew/pcbframe.cpp:124 -msgid "Hidden Text" -msgstr "Texte Invisible" - -#: pcbnew/pcbframe.cpp:124 -msgid "Show footprint text marked as invisible" -msgstr "Afficher les textes sur modules marqués comme invisibles" - -#: pcbnew/pcbframe.cpp:126 -msgid "Anchors" -msgstr "Ancres" - -#: pcbnew/pcbframe.cpp:126 -msgid "Show footprint and text origins as a cross" -msgstr "Afficher origines des textes et modules par une croix" - -#: pcbnew/pcbframe.cpp:127 -msgid "Show the (x,y) grid dots" -msgstr "Afficher les points de grille" - -#: pcbnew/pcbframe.cpp:128 -msgid "No-Connects" -msgstr "Non Connectés" - -#: pcbnew/pcbframe.cpp:128 -msgid "Show a marker on pads which have no net connected" -msgstr "Afficher un marqueur sur pads qui ne sont pad connectés" - -#: pcbnew/pcbframe.cpp:129 -msgid "Modules Front" -msgstr "Modules Dessus" - -#: pcbnew/pcbframe.cpp:129 -msgid "Show footprints that are on board's front" -msgstr "Afficher les modules situés sur le dessus du ciruit imprimé" - -#: pcbnew/pcbframe.cpp:130 -msgid "Modules Back" -msgstr "Modules Dessous" - -#: pcbnew/pcbframe.cpp:130 -msgid "Show footprints that are on board's back" -msgstr "Afficher les modules situés sur le dessous du ciruit imprimé" - -#: pcbnew/pcbframe.cpp:131 -msgid "Values" -msgstr "Valeurs" - -#: pcbnew/pcbframe.cpp:131 -msgid "Show footprint's values" -msgstr "Afficher les valeurs des modules" - -#: pcbnew/pcbframe.cpp:132 -msgid "References" -msgstr "Références" - -#: pcbnew/pcbframe.cpp:132 -msgid "Show footprint's references" -msgstr "Afficher les références des modules" - -#: pcbnew/pcbframe.cpp:185 -msgid "Show All Cu" -msgstr "Afficher toutes couches cuivre" - -#: pcbnew/pcbframe.cpp:188 -msgid "Hide All Cu" -msgstr "Cacher Cu" - -#: pcbnew/pcbframe.cpp:262 -msgid "Front copper layer" -msgstr "Couche cuivre dessus" - -#: pcbnew/pcbframe.cpp:270 -msgid "An innner copper layer" -msgstr "Couche interne" - -#: pcbnew/pcbframe.cpp:278 -msgid "Back copper layer" -msgstr "Couche cuivre dessous" - -#: pcbnew/pcbframe.cpp:286 -msgid "Adhesive on board's front" -msgstr "Afficher couche adhésive situés sur le dessus du ciruit imprimé" - -#: pcbnew/pcbframe.cpp:287 -msgid "Adhesive on board's back" -msgstr "Couche adhésive sur le dessous du circuit imprimé" - -#: pcbnew/pcbframe.cpp:288 -msgid "Solder paste on board's front" -msgstr "Couche de pâte à souder sur dessus du circuit imprimé" - -#: pcbnew/pcbframe.cpp:289 -msgid "Solder paste on board's back" -msgstr "Couche de pate à souder sur dessous du circuit imprimé" - -#: pcbnew/pcbframe.cpp:290 -msgid "Silkscreen on board's front" -msgstr "Sérigraphie sur le dessus du ciruit imprimé" - -#: pcbnew/pcbframe.cpp:291 -msgid "Silkscreen on board's back" -msgstr "Sérigraphie sur le dessous du ciruit imprimé " - -#: pcbnew/pcbframe.cpp:292 -msgid "Solder mask on board's front" -msgstr "Couche masque soudure sur le dessus du ciruit imprimée" - -#: pcbnew/pcbframe.cpp:293 -msgid "Solder mask on board's back" -msgstr "Couche masque soudure sur le dessous du ciruit imprimée" - -#: pcbnew/pcbframe.cpp:294 -msgid "Explanatory drawings" -msgstr "Couche dessins explicatifs" - -#: pcbnew/pcbframe.cpp:295 -msgid "Explanatory comments" -msgstr "Couche commentaires" - -#: pcbnew/pcbframe.cpp:296 -msgid "TDB" -msgstr "" - -#: pcbnew/pcbframe.cpp:297 -msgid "TBD" -msgstr "" - -#: pcbnew/pcbframe.cpp:298 -msgid "Board's perimeter definition" -msgstr "Couche de définition des contours du circuit imprimé" - -#: pcbnew/pcbframe.cpp:675 +#: pcbnew/pcbframe.cpp:335 msgid "Visibles" msgstr "Visibles" -#: pcbnew/pcbframe.cpp:766 +#: pcbnew/pcbframe.cpp:426 msgid "Board modified, Save before exit ?" msgstr "Circuit Imprimé modifié, Sauver avant de quitter ?" -#: pcbnew/pcbframe.cpp:767 +#: pcbnew/pcbframe.cpp:427 msgid "Confirmation" msgstr "Confirmation" -#: pcbnew/pcbframe.cpp:806 +#: pcbnew/pcbframe.cpp:466 msgid "3D Frame already opened" msgstr "Fenêtre 3D déjà ouverte" -#: pcbnew/pcbframe.cpp:810 +#: pcbnew/pcbframe.cpp:470 msgid "3D Viewer" msgstr "Visu 3D" @@ -2301,6 +2108,199 @@ msgstr "Pour une liste de pads non connecté, clic droit pour ouvrir un menu" msgid "Unconnected" msgstr "Non connecté" +#: pcbnew/class_pcb_layer_widget.cpp:69 +msgid "Through Via" +msgstr "Via Traversante" + +#: pcbnew/class_pcb_layer_widget.cpp:69 +msgid "Show through vias" +msgstr "Afficher vias traversantes" + +#: pcbnew/class_pcb_layer_widget.cpp:70 +msgid "Bl/Buried Via" +msgstr "Via Av/Enterrée" + +#: pcbnew/class_pcb_layer_widget.cpp:70 +msgid "Show blind or buried vias" +msgstr "Afficher vias enterrées/aveugles" + +#: pcbnew/class_pcb_layer_widget.cpp:71 +msgid "Micro Via" +msgstr "Micro Via" + +#: pcbnew/class_pcb_layer_widget.cpp:71 +msgid "Show micro vias" +msgstr "Afficher micro vias" + +#: pcbnew/class_pcb_layer_widget.cpp:72 +msgid "Ratsnest" +msgstr "Chevelu" + +#: pcbnew/class_pcb_layer_widget.cpp:72 +msgid "Show unconnected nets as a ratsnest" +msgstr "Afficher les connexions maquantes comme chevelul" + +#: pcbnew/class_pcb_layer_widget.cpp:74 +msgid "Pads Front" +msgstr "Pad Dessus" + +#: pcbnew/class_pcb_layer_widget.cpp:74 +msgid "Show footprint pads on board's front" +msgstr "Afficher les pads placés sur le dessus du ciruit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:75 +msgid "Pads Back" +msgstr "Pads Dessous" + +#: pcbnew/class_pcb_layer_widget.cpp:75 +msgid "Show footprint pads on board's back" +msgstr "Afficher les pads placés sur le dessous du ciruit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:77 +msgid "Text Front" +msgstr "Texte Dessus" + +#: pcbnew/class_pcb_layer_widget.cpp:77 +#: pcbnew/class_pcb_layer_widget.cpp:78 +msgid "Show footprint text on board's back" +msgstr "Afficher les textes sur modules situés sur le dessous du ciruit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:78 +msgid "Text Back" +msgstr "Texte Dessous" + +#: pcbnew/class_pcb_layer_widget.cpp:79 +msgid "Hidden Text" +msgstr "Texte Invisible" + +#: pcbnew/class_pcb_layer_widget.cpp:79 +msgid "Show footprint text marked as invisible" +msgstr "Afficher les textes sur modules marqués comme invisibles" + +#: pcbnew/class_pcb_layer_widget.cpp:81 +msgid "Anchors" +msgstr "Ancres" + +#: pcbnew/class_pcb_layer_widget.cpp:81 +msgid "Show footprint and text origins as a cross" +msgstr "Afficher origines des textes et modules par une croix" + +#: pcbnew/class_pcb_layer_widget.cpp:82 +msgid "Show the (x,y) grid dots" +msgstr "Afficher les points de grille" + +#: pcbnew/class_pcb_layer_widget.cpp:83 +msgid "No-Connects" +msgstr "Non Connectés" + +#: pcbnew/class_pcb_layer_widget.cpp:83 +msgid "Show a marker on pads which have no net connected" +msgstr "Afficher un marqueur sur pads qui ne sont pad connectés" + +#: pcbnew/class_pcb_layer_widget.cpp:84 +msgid "Modules Front" +msgstr "Modules Dessus" + +#: pcbnew/class_pcb_layer_widget.cpp:84 +msgid "Show footprints that are on board's front" +msgstr "Afficher les modules situés sur le dessus du ciruit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:85 +msgid "Modules Back" +msgstr "Modules Dessous" + +#: pcbnew/class_pcb_layer_widget.cpp:85 +msgid "Show footprints that are on board's back" +msgstr "Afficher les modules situés sur le dessous du ciruit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:86 +msgid "Values" +msgstr "Valeurs" + +#: pcbnew/class_pcb_layer_widget.cpp:86 +msgid "Show footprint's values" +msgstr "Afficher les valeurs des modules" + +#: pcbnew/class_pcb_layer_widget.cpp:87 +msgid "References" +msgstr "Références" + +#: pcbnew/class_pcb_layer_widget.cpp:87 +msgid "Show footprint's references" +msgstr "Afficher les références des modules" + +#: pcbnew/class_pcb_layer_widget.cpp:140 +msgid "Show All Cu" +msgstr "Afficher toutes couches cuivre" + +#: pcbnew/class_pcb_layer_widget.cpp:143 +msgid "Hide All Cu" +msgstr "Cacher Cu" + +#: pcbnew/class_pcb_layer_widget.cpp:217 +msgid "Front copper layer" +msgstr "Couche cuivre dessus" + +#: pcbnew/class_pcb_layer_widget.cpp:225 +msgid "An innner copper layer" +msgstr "Couche interne" + +#: pcbnew/class_pcb_layer_widget.cpp:233 +msgid "Back copper layer" +msgstr "Couche cuivre dessous" + +#: pcbnew/class_pcb_layer_widget.cpp:241 +msgid "Adhesive on board's front" +msgstr "Afficher couche adhésive situés sur le dessus du ciruit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:242 +msgid "Adhesive on board's back" +msgstr "Couche adhésive sur le dessous du circuit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:243 +msgid "Solder paste on board's front" +msgstr "Couche de pâte à souder sur dessus du circuit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:244 +msgid "Solder paste on board's back" +msgstr "Couche de pate à souder sur dessous du circuit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:245 +msgid "Silkscreen on board's front" +msgstr "Sérigraphie sur le dessus du ciruit imprimé" + +#: pcbnew/class_pcb_layer_widget.cpp:246 +msgid "Silkscreen on board's back" +msgstr "Sérigraphie sur le dessous du ciruit imprimé " + +#: pcbnew/class_pcb_layer_widget.cpp:247 +msgid "Solder mask on board's front" +msgstr "Couche masque soudure sur le dessus du ciruit imprimée" + +#: pcbnew/class_pcb_layer_widget.cpp:248 +msgid "Solder mask on board's back" +msgstr "Couche masque soudure sur le dessous du ciruit imprimée" + +#: pcbnew/class_pcb_layer_widget.cpp:249 +msgid "Explanatory drawings" +msgstr "Couche dessins explicatifs" + +#: pcbnew/class_pcb_layer_widget.cpp:250 +msgid "Explanatory comments" +msgstr "Couche commentaires" + +#: pcbnew/class_pcb_layer_widget.cpp:251 +msgid "TDB" +msgstr "" + +#: pcbnew/class_pcb_layer_widget.cpp:252 +msgid "TBD" +msgstr "" + +#: pcbnew/class_pcb_layer_widget.cpp:253 +msgid "Board's perimeter definition" +msgstr "Couche de définition des contours du circuit imprimé" + #: pcbnew/moduleframe.cpp:254 msgid "Module Editor: Module modified! Continue?" msgstr "Editeur de Module: Module modifié! Continuer ?" @@ -3958,28 +3958,28 @@ msgstr "Contours_PCB" msgid "BAD INDEX" msgstr "BAD INDEX" -#: pcbnew/class_board.cpp:907 +#: pcbnew/class_board.cpp:893 #: pcbnew/class_module.cpp:867 msgid "Pads" msgstr "Pads" -#: pcbnew/class_board.cpp:910 +#: pcbnew/class_board.cpp:896 msgid "Vias" msgstr "Vias" -#: pcbnew/class_board.cpp:913 +#: pcbnew/class_board.cpp:899 msgid "Nodes" msgstr "Nodes" -#: pcbnew/class_board.cpp:916 +#: pcbnew/class_board.cpp:902 msgid "Nets" msgstr "Nets" -#: pcbnew/class_board.cpp:924 +#: pcbnew/class_board.cpp:910 msgid "Links" msgstr "Liens" -#: pcbnew/class_board.cpp:927 +#: pcbnew/class_board.cpp:913 msgid "Connect" msgstr "Connect" @@ -7022,7 +7022,7 @@ msgstr "Epaiss. ligne par défaut" msgid "Plot: %s\n" msgstr "Trace: %s\n" -#: eeschema/libframe.cpp:292 +#: eeschema/libframe.cpp:291 msgid "" "Component was modified!\n" "Discard changes?" @@ -7030,7 +7030,7 @@ msgstr "" "Le composant a été modifié\n" "Perdre les changements" -#: eeschema/libframe.cpp:305 +#: eeschema/libframe.cpp:304 #, c-format msgid "" "Library \"%s\" was modified!\n" @@ -7039,40 +7039,40 @@ msgstr "" "Librairie \"%s\" modifiée!\n" "Perdre les changements ?" -#: eeschema/libframe.cpp:415 +#: eeschema/libframe.cpp:414 #, c-format msgid "Part %c" msgstr "Composant %c" -#: eeschema/libframe.cpp:677 +#: eeschema/libframe.cpp:676 msgid "Add pin" msgstr "Addition de \"pins\"" -#: eeschema/libframe.cpp:681 +#: eeschema/libframe.cpp:680 msgid "Set pin options" msgstr "Choix options de pin" -#: eeschema/libframe.cpp:698 +#: eeschema/libframe.cpp:697 msgid "Add rectangle" msgstr "Ajout de rectangle" -#: eeschema/libframe.cpp:702 +#: eeschema/libframe.cpp:701 msgid "Add circle" msgstr "Ajout de cercle" -#: eeschema/libframe.cpp:706 +#: eeschema/libframe.cpp:705 msgid "Add arc" msgstr "Ajout d'arc" -#: eeschema/libframe.cpp:710 +#: eeschema/libframe.cpp:709 msgid "Add line" msgstr "Addition de lignes" -#: eeschema/libframe.cpp:714 +#: eeschema/libframe.cpp:713 msgid "Set anchor position" msgstr "Ajuster Position Ancre" -#: eeschema/libframe.cpp:724 +#: eeschema/libframe.cpp:723 msgid "Export" msgstr "Exporter" @@ -7111,19 +7111,19 @@ msgstr "Labels" msgid "Hierar." msgstr "Hiérar." -#: eeschema/eelayer.cpp:239 +#: eeschema/eelayer.cpp:238 msgid "White" msgstr "Blanc" -#: eeschema/eelayer.cpp:240 +#: eeschema/eelayer.cpp:239 msgid "Black" msgstr "Noir" -#: eeschema/eelayer.cpp:243 +#: eeschema/eelayer.cpp:242 msgid "Background Color:" msgstr "Couleur du Fond:" -#: eeschema/eelayer.cpp:275 +#: eeschema/eelayer.cpp:274 msgid "Apply" msgstr "Appliquer" @@ -8361,27 +8361,6 @@ msgstr "> %-28.28s PinSheet %-7.7s (Feuille %s) pos: %3.3f, %3.3f\n" msgid "#End labels\n" msgstr "#End labels\n" -#: eeschema/eeschema.cpp:131 -msgid "Eeschema is already running, Continue?" -msgstr "Eeschema est en cours d'exécution. Continuer ?" - -#: eeschema/class_libentry.cpp:59 -msgid "none" -msgstr "rien" - -#: eeschema/class_libentry.cpp:321 -msgid "value" -msgstr "valeur" - -#: eeschema/class_libentry.cpp:321 -msgid "reference" -msgstr "référence" - -#: eeschema/class_libentry.cpp:323 -#, c-format -msgid "An attempt was made to remove the %s field from component %s in library %s." -msgstr "Une tentative a été faite pour supprimer le champ %s du composant %s en librairie %s." - #: eeschema/tool_sch.cpp:34 #: eeschema/menubar.cpp:45 msgid "New schematic project" @@ -8412,6 +8391,7 @@ msgid "Navigate schematic hierarchy" msgstr "Navigateur de hiérarchie" #: eeschema/tool_sch.cpp:84 +#: eeschema/menubar.cpp:92 msgid "Print schematic" msgstr "Impression des feuilles de schéma" @@ -8464,12 +8444,12 @@ msgid "Place a bus" msgstr "Placer un bus" #: eeschema/tool_sch.cpp:179 -#: eeschema/menubar.cpp:294 +#: eeschema/menubar.cpp:296 msgid "Place a wire to bus entry" msgstr "Placer une Entrée de Bus (type fil vers bus)" #: eeschema/tool_sch.cpp:183 -#: eeschema/menubar.cpp:301 +#: eeschema/menubar.cpp:303 msgid "Place a bus to bus entry" msgstr "Placer une Entrée de Bus (type bus vers bus)" @@ -8478,7 +8458,7 @@ msgid "Place no connect flag" msgstr "Placer symbole de non connexion" #: eeschema/tool_sch.cpp:192 -#: eeschema/menubar.cpp:313 +#: eeschema/menubar.cpp:315 msgid "Place net name" msgstr "Place nom de net" @@ -8495,7 +8475,7 @@ msgid "Place a junction" msgstr "Placer une jonction" #: eeschema/tool_sch.cpp:206 -#: eeschema/menubar.cpp:336 +#: eeschema/menubar.cpp:338 msgid "Place a hierarchical label. This label will be seen as a pin sheet in the sheet symbol" msgstr "Placer un label hiérachique. Ce label sera vu comme une pin dans la feuille mère symbole" @@ -8524,7 +8504,7 @@ msgid "Turn grid off" msgstr "Ne pas afficher la grille" #: eeschema/tool_sch.cpp:270 -#: eeschema/schframe.cpp:497 +#: eeschema/schframe.cpp:505 msgid "Show hidden pins" msgstr "Force affichage des pins invisibles" @@ -8532,6 +8512,51 @@ msgstr "Force affichage des pins invisibles" msgid "HV orientation for wires and bus" msgstr "Force direction H, V pour les fils et bus" +#: eeschema/eeschema_config.cpp:333 +msgid "Save Project Settings" +msgstr "Sauver Optionsr Projet" + +#: eeschema/eeschema.cpp:131 +msgid "Eeschema is already running, Continue?" +msgstr "Eeschema est en cours d'exécution. Continuer ?" + +#: eeschema/class_libentry.cpp:59 +msgid "none" +msgstr "rien" + +#: eeschema/class_libentry.cpp:321 +msgid "value" +msgstr "valeur" + +#: eeschema/class_libentry.cpp:321 +msgid "reference" +msgstr "référence" + +#: eeschema/class_libentry.cpp:323 +#, c-format +msgid "An attempt was made to remove the %s field from component %s in library %s." +msgstr "Une tentative a été faite pour supprimer le champ %s du composant %s en librairie %s." + +#: eeschema/schframe.cpp:358 +msgid "Schematic modified, Save before exit ?" +msgstr "Schématique modifiée, Sauver avant de quitter ?" + +#: eeschema/schframe.cpp:493 +msgid "Draw wires and buses in any direction" +msgstr "Tracer les fils et bus avec direction quelconque" + +#: eeschema/schframe.cpp:494 +msgid "Draw horizontal and vertical wires and buses only" +msgstr "Autoriser fils et bus verticaux et horizontaux seulement" + +#: eeschema/schframe.cpp:504 +msgid "Do not show hidden pins" +msgstr "Ne pas affichager les pins invisibles" + +#: eeschema/schframe.cpp:596 +msgid "Schematic" +msgstr "Schématique" + #: eeschema/find.cpp:210 msgid "Pin " msgstr "Pin " @@ -8745,279 +8770,255 @@ msgstr "Ouvrir un projet schématique existant" msgid "Open a recent opened schematic project" msgstr "Ouvrir un projet schématique récemment ouvert" -#: eeschema/menubar.cpp:69 +#: eeschema/menubar.cpp:70 msgid "&Save Whole Schematic Project\tCtrl+S" msgstr "Sauver Tout le Projet Schématique\tCtrl+S" -#: eeschema/menubar.cpp:70 +#: eeschema/menubar.cpp:71 msgid "Save all sheets in the schematic project" msgstr "Sauver toutes les feuilles du projet schématique" -#: eeschema/menubar.cpp:74 -msgid "&Save Current Sheet Only" -msgstr "Sauver la Feuille &Courante:" - #: eeschema/menubar.cpp:75 +msgid "Save &Current Sheet Only" +msgstr "Sauver la Feuille &Courante Seule" + +#: eeschema/menubar.cpp:76 msgid "Save only current schematic sheet" msgstr "Sauver seulement la feuille active" -#: eeschema/menubar.cpp:81 +#: eeschema/menubar.cpp:82 msgid "Save Current Sheet &as\tShift+Ctrl+S" msgstr "Sauver Feuille Courante &sous\tShift+Ctrl+S" -#: eeschema/menubar.cpp:82 +#: eeschema/menubar.cpp:83 msgid "Save current schematic sheet as..." msgstr "Sauver la feuille active sous ..." -#: eeschema/menubar.cpp:90 +#: eeschema/menubar.cpp:91 #, fuzzy msgid "P&rint\tCtrl+P" msgstr "&Ouvrir\tCtrl+O" -#: eeschema/menubar.cpp:91 -msgid "Print schematic sheet" -msgstr "Impression des feuilles de schéma" - -#: eeschema/menubar.cpp:98 +#: eeschema/menubar.cpp:99 msgid "Plot PostScript" msgstr "Tracé Postscript" -#: eeschema/menubar.cpp:99 +#: eeschema/menubar.cpp:100 msgid "Plot schematic sheet in PostScript format" msgstr "Tracer les feuilles schématiques en format Postscript" -#: eeschema/menubar.cpp:104 +#: eeschema/menubar.cpp:105 msgid "Plot HPGL" msgstr "Tracé HPGL" -#: eeschema/menubar.cpp:105 +#: eeschema/menubar.cpp:106 msgid "Plot schematic sheet in HPGL format" msgstr "Tracer les feuilles schématiques en format HPGL" -#: eeschema/menubar.cpp:110 +#: eeschema/menubar.cpp:111 msgid "Plot SVG" msgstr "Tracé SVG" -#: eeschema/menubar.cpp:111 +#: eeschema/menubar.cpp:112 msgid "Plot schematic sheet in SVG format" msgstr "Tracer les feuilles schématiques en format SVG" -#: eeschema/menubar.cpp:116 +#: eeschema/menubar.cpp:117 msgid "Plot DXF" msgstr "Tracé DXF" -#: eeschema/menubar.cpp:117 +#: eeschema/menubar.cpp:118 msgid "Plot schematic sheet in DXF format" msgstr "Tracer les feuilles schématiques en format DXF" -#: eeschema/menubar.cpp:125 +#: eeschema/menubar.cpp:126 msgid "Plot to Clipboard" msgstr "Tracé dans Presse papier" -#: eeschema/menubar.cpp:126 +#: eeschema/menubar.cpp:127 msgid "Export drawings to clipboard" msgstr " Exporter le dessin dans le presse-papier" -#: eeschema/menubar.cpp:134 +#: eeschema/menubar.cpp:135 msgid "Plot schematic sheet in HPGL, PostScript or SVG format" msgstr "Tracer les feuilles schématiques en format HPGL, POSTSCRIPT ou SVG" -#: eeschema/menubar.cpp:141 +#: eeschema/menubar.cpp:143 msgid "Quit EESchema" msgstr "Quitter EESchema" -#: eeschema/menubar.cpp:182 +#: eeschema/menubar.cpp:184 msgid "&Find\tCtrl+F" msgstr "&Chercher\tCtrl+F" -#: eeschema/menubar.cpp:191 +#: eeschema/menubar.cpp:193 msgid "Backannotate" msgstr "Rétro Annotation" -#: eeschema/menubar.cpp:192 +#: eeschema/menubar.cpp:194 msgid "Back annotated footprint fields" msgstr "Rétroannotation des champs modules" -#: eeschema/menubar.cpp:238 +#: eeschema/menubar.cpp:240 msgid "Fit the schematic sheet on the screen" msgstr "Ajuster la feuille de schéma à l'écran" -#: eeschema/menubar.cpp:254 +#: eeschema/menubar.cpp:256 msgid "Redraw the schematic view" msgstr "Redessin de l'écran" -#: eeschema/menubar.cpp:268 +#: eeschema/menubar.cpp:270 msgid "&Component" msgstr "&Composant" -#: eeschema/menubar.cpp:269 +#: eeschema/menubar.cpp:271 msgid "Place the component" msgstr "Placer le Composant" -#: eeschema/menubar.cpp:274 +#: eeschema/menubar.cpp:276 msgid "&Power port" msgstr "Power Symbole" -#: eeschema/menubar.cpp:275 +#: eeschema/menubar.cpp:277 msgid "Place the power port" msgstr "Placer le Symbole Power" -#: eeschema/menubar.cpp:280 +#: eeschema/menubar.cpp:282 msgid "&Wire" msgstr "&Fil" -#: eeschema/menubar.cpp:281 +#: eeschema/menubar.cpp:283 msgid "Place the wire" msgstr "Place fil" -#: eeschema/menubar.cpp:286 +#: eeschema/menubar.cpp:288 msgid "&Bus" msgstr "&Bus" -#: eeschema/menubar.cpp:287 +#: eeschema/menubar.cpp:289 msgid "Place bus" msgstr "Place bus" -#: eeschema/menubar.cpp:293 +#: eeschema/menubar.cpp:295 msgid "W&ire to bus entry" msgstr "Entrées de bus (type fil vers bus)" -#: eeschema/menubar.cpp:300 +#: eeschema/menubar.cpp:302 msgid "B&us to bus entry" msgstr "Entrées de bus (type bus vers bus)" -#: eeschema/menubar.cpp:306 +#: eeschema/menubar.cpp:308 msgid "No connect flag" msgstr "Symbole de Non Connexion" -#: eeschema/menubar.cpp:307 +#: eeschema/menubar.cpp:309 msgid "Place a no connect flag" msgstr "Placer un Symbole de Non Connexion" -#: eeschema/menubar.cpp:312 +#: eeschema/menubar.cpp:314 msgid "Net name" msgstr "Net Name" -#: eeschema/menubar.cpp:318 +#: eeschema/menubar.cpp:320 msgid "Global label" msgstr "Label Global" -#: eeschema/menubar.cpp:319 +#: eeschema/menubar.cpp:321 msgid "Place a global label. Warning: all global labels with the same name are connected in whole hierarchy" msgstr "Placer un label global. Attention: tous les labels globaux avec le même nom sont connectés dans toute la hiérarchie" -#: eeschema/menubar.cpp:325 +#: eeschema/menubar.cpp:327 msgid "Junction" msgstr "Jonction" -#: eeschema/menubar.cpp:326 +#: eeschema/menubar.cpp:328 msgid "Place junction" msgstr "Place jonction" -#: eeschema/menubar.cpp:335 +#: eeschema/menubar.cpp:337 msgid "Hierarchical label" msgstr "Label Hiérarchique" -#: eeschema/menubar.cpp:343 +#: eeschema/menubar.cpp:345 msgid "Hierarchical sheet" msgstr "Feuille Hiérrachique" -#: eeschema/menubar.cpp:344 +#: eeschema/menubar.cpp:346 msgid "Create a hierarchical sheet" msgstr "Créer une Feuille Hiérachique" -#: eeschema/menubar.cpp:350 +#: eeschema/menubar.cpp:352 msgid "Import Hierarchical Label" msgstr "Importer Label Hiérarchique" -#: eeschema/menubar.cpp:351 +#: eeschema/menubar.cpp:353 msgid "Place a pin sheet created by importing a hierarchical label from sheet" msgstr "Placer une pin hiérarchique créée par importation d'un label hiérarchique de la feuille" -#: eeschema/menubar.cpp:358 +#: eeschema/menubar.cpp:360 msgid "Add Hierarchical Pin to Sheet" msgstr "Ajouter Pins de Hiérarchie dans feuille" -#: eeschema/menubar.cpp:359 +#: eeschema/menubar.cpp:361 msgid "Place a hierarchical pin to sheet" msgstr "Addition de pins de hiérarchie dans les feuilles symboles de hiérarchie" -#: eeschema/menubar.cpp:369 +#: eeschema/menubar.cpp:371 msgid "Graphic line or polygon" msgstr "Ligne ou polygone graphique" -#: eeschema/menubar.cpp:370 +#: eeschema/menubar.cpp:372 msgid "Place graphic lines or polygons" msgstr "Placer lignes ou polygones graphiques" -#: eeschema/menubar.cpp:377 +#: eeschema/menubar.cpp:379 msgid "Graphic text" msgstr "Texte graphique" -#: eeschema/menubar.cpp:378 +#: eeschema/menubar.cpp:380 msgid "Place graphic text for comment" msgstr "Placer textes graphiques en commentaire." -#: eeschema/menubar.cpp:392 +#: eeschema/menubar.cpp:394 msgid "Library preferences" msgstr "Préférences pour Librairie" -#: eeschema/menubar.cpp:397 +#: eeschema/menubar.cpp:399 msgid "&Colors" msgstr "&Couleurs" -#: eeschema/menubar.cpp:398 +#: eeschema/menubar.cpp:400 msgid "Color preferences" msgstr "Préférences de couleurs" -#: eeschema/menubar.cpp:403 +#: eeschema/menubar.cpp:405 msgid "&Options" msgstr "&Options" -#: eeschema/menubar.cpp:404 +#: eeschema/menubar.cpp:406 msgid "Eeschema general options and preferences" msgstr "Options et préférences générales de Eeschema" -#: eeschema/menubar.cpp:418 +#: eeschema/menubar.cpp:420 msgid "&Save preferences" msgstr "&Sauver Préférences" -#: eeschema/menubar.cpp:424 +#: eeschema/menubar.cpp:426 msgid "&Read preferences" msgstr "&Lire Préférences" -#: eeschema/menubar.cpp:436 +#: eeschema/menubar.cpp:438 msgid "Open the eeschema manual" msgstr "Ouvrir la documentation de eeschema" -#: eeschema/menubar.cpp:444 +#: eeschema/menubar.cpp:446 msgid "About eeschema schematic designer" msgstr "Au sujet de Eeschema (outil de conception schématique)" -#: eeschema/menubar.cpp:457 +#: eeschema/menubar.cpp:459 msgid "&Place" msgstr "&Placer" -#: eeschema/schframe.cpp:350 -msgid "Schematic modified, Save before exit ?" -msgstr "Schématique modifiée, Sauver avant de quitter ?" - -#: eeschema/schframe.cpp:485 -msgid "Draw wires and buses in any direction" -msgstr "Tracer les fils et bus avec direction quelconque" - -#: eeschema/schframe.cpp:486 -msgid "Draw horizontal and vertical wires and buses only" -msgstr "Autoriser fils et bus verticaux et horizontaux seulement" - -#: eeschema/schframe.cpp:496 -msgid "Do not show hidden pins" -msgstr "Ne pas affichager les pins invisibles" - -#: eeschema/schframe.cpp:588 -msgid "Schematic" -msgstr "Schématique" - #: eeschema/files-io.cpp:71 msgid "Clear schematic hierarchy?" msgstr "Effacer la hiérarchie schématique?" @@ -9830,31 +9831,39 @@ msgid "Text Shape:" msgstr "Aspect Texte:" #: eeschema/dialog_bodygraphictext_properties_base.cpp:82 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:56 msgid "Align left" msgstr "Alignement à gauche" #: eeschema/dialog_bodygraphictext_properties_base.cpp:82 #: eeschema/dialog_bodygraphictext_properties_base.cpp:88 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:56 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:69 msgid "Align center" msgstr "Alignement au centre" #: eeschema/dialog_bodygraphictext_properties_base.cpp:82 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:56 msgid "Align right" msgstr "Alignement à droite" #: eeschema/dialog_bodygraphictext_properties_base.cpp:84 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:58 msgid "Horiz. Justify" msgstr "Justification Horiz." #: eeschema/dialog_bodygraphictext_properties_base.cpp:88 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:69 msgid "Align bottom" msgstr "Alignement en bas" #: eeschema/dialog_bodygraphictext_properties_base.cpp:88 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:69 msgid "Align top" msgstr "Alignement au sommet" #: eeschema/dialog_bodygraphictext_properties_base.cpp:90 +#: eeschema/dialog_edit_libentry_fields_in_lib_base.cpp:71 msgid "Vert. Justify" msgstr "Vert. Justifié" @@ -9943,12 +9952,10 @@ msgid "Datasheet" msgstr "Documentation" #: eeschema/dialog_SVG_print_base.cpp:25 -#: eeschema/dialog_print_using_printer_base.cpp:25 msgid "Default Pen Size" msgstr "Dimension Plume par Défaut" #: eeschema/dialog_SVG_print_base.cpp:30 -#: eeschema/dialog_print_using_printer_base.cpp:30 msgid "Selection of the default pen thickness used to draw items, when their thickness is set to 0." msgstr "Valeur de la dimension de la plume utilisée par défaut pour tracer les éléments, lorsque leur épaisseur est à 0." @@ -9960,17 +9967,34 @@ msgstr "Imprimer Page Courante" msgid "Print All" msgstr "Imprimer Tout" -#: eeschema/dialog_print_using_printer_base.cpp:52 -msgid "Current" -msgstr "Courant" +#: eeschema/dialog_print_using_printer_base.cpp:22 +msgid "Print sheet &reference and title block" +msgstr "Imprimer ca&rtouche" -#: eeschema/dialog_print_using_printer_base.cpp:52 -msgid "All" -msgstr "Tout" +#: eeschema/dialog_print_using_printer_base.cpp:29 +msgid "Print in &black and white only" +msgstr "Imprimer en &noir et blanc seulement" -#: eeschema/eeschema_config.cpp:328 -msgid "Save Project Settings" -msgstr "Sauver Optionsr Projet" +#: eeschema/dialog_print_using_printer_base.cpp:38 +msgid "Page Setup" +msgstr "Options Page" + +#: eeschema/dialog_print_using_printer.cpp:241 +msgid "Print Schematic" +msgstr "Impression Schématique" + +#: eeschema/dialog_print_using_printer.cpp:246 +msgid "An error occurred attempting to print the schematic." +msgstr "Une erreur s'est produite lors de l'impression." + +#: eeschema/dialog_print_using_printer.cpp:247 +msgid "Printing" +msgstr "Impression" + +#: eeschema/dialog_print_using_printer.cpp:260 +#, c-format +msgid "Print page %d" +msgstr "Imprimer page %d" #: eeschema/eelibs_read_libraryfiles.cpp:61 msgid "\n" @@ -9984,23 +10008,6 @@ msgstr " erreur!" msgid "The following libraries could not be found:" msgstr "Les librairies suivantes n'ont pas pu être trouvées:" -#: eeschema/dialog_print_using_printer.cpp:113 -msgid "Error initializing printer information." -msgstr "Erreur init info imprimante" - -#: eeschema/dialog_print_using_printer.cpp:239 -msgid "Printer error!" -msgstr "Problème d'imprimante!" - -#: eeschema/dialog_print_using_printer.cpp:308 -msgid "There was a problem printing." -msgstr "Il y a un problème d'impression." - -#: eeschema/dialog_print_using_printer.cpp:322 -#, c-format -msgid "Print page %d" -msgstr "Imprimer page %d" - #: eeschema/class_BodyItem_Text.cpp:85 #, c-format msgid "text only had %d parameters of the required 8" @@ -10203,6 +10210,11 @@ msgstr "Filtrage Modules" msgid "Undefined" msgstr "Non Défini" +#: eeschema/classes_body_items.cpp:68 +#: eeschema/classes_body_items.cpp:74 +msgid "All" +msgstr "Tout" + #: eeschema/classes_body_items.cpp:76 msgid "no" msgstr "non" @@ -10435,9 +10447,6 @@ msgstr "Taille du te&xte:" #: eeschema/dialog_sch_sheet_props_base.cpp:42 #: eeschema/dialog_sch_sheet_props_base.cpp:63 -#: eeschema/dialog_lib_edit_pin_base.cpp:41 -#: eeschema/dialog_lib_edit_pin_base.cpp:64 -#: eeschema/dialog_lib_edit_pin_base.cpp:87 msgid "units" msgstr "unités" @@ -10897,7 +10906,7 @@ msgstr "Clock Active Bas" msgid "Active Low Output" msgstr "Sortie Active Bas" -#: cvpcb/cvframe.cpp:284 +#: cvpcb/cvframe.cpp:285 msgid "" "Net and component list modified.\n" "Save before exit ?" @@ -10905,26 +10914,26 @@ msgstr "" "Netlist et liste composants modifiés,\n" "Sauver avant de quitter ?" -#: cvpcb/cvframe.cpp:308 +#: cvpcb/cvframe.cpp:309 msgid "Problem when saving files, exit anyway ?" msgstr "Problème en sauvant les fichiers, quitter quand même" -#: cvpcb/cvframe.cpp:434 +#: cvpcb/cvframe.cpp:435 msgid "Delete selections" msgstr "Effacement des associations existantes" -#: cvpcb/cvframe.cpp:448 +#: cvpcb/cvframe.cpp:449 #: cvpcb/init.cpp:65 #: cvpcb/init.cpp:115 #, c-format msgid "Components: %d (free: %d)" msgstr "Composants: %d (libres: %d)" -#: cvpcb/cvframe.cpp:470 +#: cvpcb/cvframe.cpp:471 msgid "unnamed" msgstr "non nommé" -#: cvpcb/cvframe.cpp:472 +#: cvpcb/cvframe.cpp:473 msgid "Open Net List" msgstr "Ouvrir Fichier Netliste" @@ -11028,11 +11037,11 @@ msgstr "Cvpcb est en cours d'exécution. Continuer ?" msgid " [no file]" msgstr " [pas de fichier]" -#: cvpcb/setvisu.cpp:47 +#: cvpcb/setvisu.cpp:48 msgid "Footprint: " msgstr "Module: " -#: cvpcb/setvisu.cpp:50 +#: cvpcb/setvisu.cpp:51 msgid "Lib: " msgstr "Lib: " @@ -11124,22 +11133,22 @@ msgstr "Modules (Tous): %d" msgid "Footprints (filtered): %d" msgstr "Modules (filtrés): %d" -#: cvpcb/loadcmp.cpp:46 +#: cvpcb/loadcmp.cpp:47 #, c-format msgid "PCB foot print library file <%s> could not be found in the default search paths." msgstr "Le fichier librairie de modules PCB <%s> n'a pas pu être trouvé dans les chemins de recherche par défaut." -#: cvpcb/loadcmp.cpp:57 +#: cvpcb/loadcmp.cpp:58 #, c-format msgid "Could not open PCB foot print library file <%s>." msgstr "Ne peut ouvrir le fichier librairie de modules PCB <%s>." -#: cvpcb/loadcmp.cpp:70 +#: cvpcb/loadcmp.cpp:71 #, c-format msgid "<%s> is not a valid Kicad PCB foot print library." msgstr "<%s> in'est pas un fichier de module PCB Kicad valide." -#: cvpcb/loadcmp.cpp:131 +#: cvpcb/loadcmp.cpp:132 #, c-format msgid "Module %s not found" msgstr "Module %s non trouvé" @@ -11216,62 +11225,42 @@ msgstr "Montre la liste filtrée des modules pour le composant courant" msgid "Display the full footprint list (without filtering)" msgstr "Montre la liste complète des modules" -#: cvpcb/displayframe.cpp:156 -msgid "Display Options" -msgstr "Options d'Affichage" - -#: cvpcb/displayframe.cpp:162 -msgid "Zoom in (F1)" -msgstr "Zoom + (F1)" - -#: cvpcb/displayframe.cpp:166 -msgid "Zoom out (F2)" -msgstr "Zoom - (F2)" - -#: cvpcb/displayframe.cpp:170 -msgid "Redraw view (F3)" -msgstr "Redessin de l'écran (F3)" - -#: cvpcb/displayframe.cpp:174 -msgid "Zoom auto (Home)" -msgstr "Zoom Automatique (Home)" - -#: cvpcb/dialog_display_options.cpp:150 -#: cvpcb/dialog_display_options.cpp:162 +#: cvpcb/dialog_display_options.cpp:151 +#: cvpcb/dialog_display_options.cpp:163 msgid "&Line" msgstr "&Ligne" -#: cvpcb/dialog_display_options.cpp:151 -#: cvpcb/dialog_display_options.cpp:163 +#: cvpcb/dialog_display_options.cpp:152 +#: cvpcb/dialog_display_options.cpp:164 msgid "&Filled" msgstr "&Plein" -#: cvpcb/dialog_display_options.cpp:152 -#: cvpcb/dialog_display_options.cpp:164 +#: cvpcb/dialog_display_options.cpp:153 +#: cvpcb/dialog_display_options.cpp:165 msgid "&Sketch" msgstr "&Contour" -#: cvpcb/dialog_display_options.cpp:154 +#: cvpcb/dialog_display_options.cpp:155 msgid "Edges:" msgstr "Contours:" -#: cvpcb/dialog_display_options.cpp:177 +#: cvpcb/dialog_display_options.cpp:178 msgid "Fill &pad" msgstr "&Pad Plein" -#: cvpcb/dialog_display_options.cpp:183 +#: cvpcb/dialog_display_options.cpp:184 msgid "Fill &via" msgstr "&Via Pleine" -#: cvpcb/dialog_display_options.cpp:189 +#: cvpcb/dialog_display_options.cpp:190 msgid "Show pad &number" msgstr "Afficher le n° de &pad" -#: cvpcb/dialog_display_options.cpp:193 +#: cvpcb/dialog_display_options.cpp:194 msgid "Display pad number" msgstr "Afficher numéro des pastilles" -#: cvpcb/dialog_display_options.cpp:220 +#: cvpcb/dialog_display_options.cpp:221 msgid "&Apply" msgstr "&Appliquer" @@ -11279,6 +11268,26 @@ msgstr "&Appliquer" msgid "Footprint alias files" msgstr "Fichier Alias Modules" +#: cvpcb/class_DisplayFootprintsFrame.cpp:157 +msgid "Display Options" +msgstr "Options d'Affichage" + +#: cvpcb/class_DisplayFootprintsFrame.cpp:163 +msgid "Zoom in (F1)" +msgstr "Zoom + (F1)" + +#: cvpcb/class_DisplayFootprintsFrame.cpp:167 +msgid "Zoom out (F2)" +msgstr "Zoom - (F2)" + +#: cvpcb/class_DisplayFootprintsFrame.cpp:171 +msgid "Redraw view (F3)" +msgstr "Redessin de l'écran (F3)" + +#: cvpcb/class_DisplayFootprintsFrame.cpp:175 +msgid "Zoom auto (Home)" +msgstr "Zoom Automatique (Home)" + #: kicad/kicad.cpp:78 #: kicad/prjconfig.cpp:108 msgid "Working dir: " @@ -11809,20 +11818,20 @@ msgstr "Ext. Fichiers Gerber" msgid "D code File Ext:" msgstr "Ext. Fichiers DCodes:" -#: gerbview/set_color.cpp:247 -#: gerbview/set_color.cpp:273 +#: gerbview/set_color.cpp:249 +#: gerbview/set_color.cpp:275 msgid "Show None" msgstr "Rien Afficher" -#: gerbview/set_color.cpp:256 +#: gerbview/set_color.cpp:258 msgid "Show All" msgstr "Tout Afficher" -#: gerbview/set_color.cpp:268 +#: gerbview/set_color.cpp:270 msgid "Switch on all of the Gerber layers" msgstr "Affiche toutes les couches Gerber" -#: gerbview/set_color.cpp:276 +#: gerbview/set_color.cpp:278 msgid "Switch off all of the Gerber layers" msgstr "N'affiche pas les couches Gerber" @@ -11852,7 +11861,7 @@ msgstr "Effacer couche %d" msgid "GerbView project files (.cnf)|*.cnf" msgstr "Fichiers projet GerbView (.cnf)|*.cnf" -#: gerbview/gerbview.cpp:91 +#: gerbview/gerbview.cpp:92 msgid "GerbView is already running. Continue?" msgstr "Gerbview est en cours d'exécution. Continuer ?" @@ -12178,9 +12187,21 @@ msgstr " Afficher Limites de Page" msgid "Show D codes" msgstr "Montrer DCodes" -#: gerbview/gerberframe.cpp:212 -msgid "Layer modified, Continue ?" -msgstr "Couche modifiée, Continuer ?" +#: gerbview/class_gerbview_layer_widget.cpp:64 +msgid "DCodes" +msgstr "DCodes" + +#: gerbview/class_gerbview_layer_widget.cpp:64 +msgid "Show DCodes identification" +msgstr "" + +#: gerbview/class_gerbview_layer_widget.cpp:118 +msgid "Show All Layers" +msgstr "Monter Toutes les Couches" + +#: gerbview/class_gerbview_layer_widget.cpp:121 +msgid "Hide All Layers" +msgstr "Cacher Toutes les Couches" #: common/gestfich.cpp:446 #, c-format @@ -12364,27 +12385,27 @@ msgstr "Fichiers \"Portable document format\" (*.pdf)|*.pdf" msgid "All files (*)|*" msgstr "Tous les fichiers (*)|*" -#: common/common.cpp:228 +#: common/common.cpp:227 msgid " (\"):" msgstr " (\"):" -#: common/common.cpp:250 +#: common/common.cpp:249 msgid "inches" msgstr "Pouces" -#: common/common.cpp:258 +#: common/common.cpp:257 msgid "centimeters" msgstr "centimètres" -#: common/common.cpp:261 +#: common/common.cpp:260 msgid "Unknown" msgstr "Inconnu" -#: common/common.cpp:339 +#: common/common.cpp:338 msgid " \"" msgstr " \"" -#: common/drawframe.cpp:330 +#: common/drawframe.cpp:332 msgid "??" msgstr "??" @@ -12945,19 +12966,19 @@ msgstr "ERC Warning" msgid "Erc Error" msgstr "ERC Erreur" -#: eeschema/eelayer.h:255 +#: eeschema/eelayer.h:246 msgid "Device" msgstr "Composant" -#: eeschema/eelayer.h:261 +#: eeschema/eelayer.h:252 msgid "Sheets" msgstr "Feuilles" -#: eeschema/eelayer.h:267 +#: eeschema/eelayer.h:258 msgid "Erc Mark" msgstr "Marqueur ERC" -#: eeschema/eelayer.h:273 +#: eeschema/eelayer.h:264 msgid "Other" msgstr "Autre" @@ -13181,6 +13202,18 @@ msgstr "Options d'Affichage" msgid "Page Settings" msgstr "Ajustage opt Page" +#~ msgid "Print schematic sheet" +#~ msgstr "Impression des feuilles de schéma" +#~ msgid "Current" +#~ msgstr "Courant" +#~ msgid "Error initializing printer information." +#~ msgstr "Erreur init info imprimante" +#~ msgid "Printer error!" +#~ msgstr "Problème d'imprimante!" +#~ msgid "There was a problem printing." +#~ msgstr "Il y a un problème d'impression." +#~ msgid "Layer modified, Continue ?" +#~ msgstr "Couche modifiée, Continuer ?" #~ msgid "Switch on all of the copper layers" #~ msgstr "Affiche toutes les couches cuivre" #~ msgid "Switch off all of the copper layers" @@ -13249,8 +13282,6 @@ msgstr "Ajustage opt Page" #~ msgstr "Sauver sous..." #~ msgid "Show board in the 3D viewer" #~ msgstr "Visualisation du circuit en 3D" -#~ msgid "Show All Copper Layers" -#~ msgstr "Monter Toutes les Couches Cuivre." #~ msgid "Show No Copper Layers" #~ msgstr "Monter aucune Couche Cuivre." #~ msgid "Click here to select this layer" @@ -13355,8 +13386,6 @@ msgstr "Ajustage opt Page" #~ msgstr "&Style:" #~ msgid "On-board, copper" #~ msgstr "PCB, cuivre" -#~ msgid "All Layers On" -#~ msgstr "Toutes Couches Actives" #~ msgid "Single Side" #~ msgstr "Simple Face" #~ msgid "Single Side, SMD on Back" diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index fbaff54a82..f09724149c 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -27,6 +27,7 @@ set(PCBNEW_SRCS block.cpp block_module_editor.cpp build_BOM_from_board.cpp + class_pcb_layer_widget.cpp clean.cpp # cleaningoptions_dialog.cpp connect.cpp diff --git a/pcbnew/class_pcb_layer_widget.cpp b/pcbnew/class_pcb_layer_widget.cpp new file mode 100644 index 0000000000..146b1addc1 --- /dev/null +++ b/pcbnew/class_pcb_layer_widget.cpp @@ -0,0 +1,347 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr + * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck + * Copyright (C) 2010 Kicad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +/******************************************************/ +/* class_pcb_layer_widget.cpp - Pcbnew layers manager */ +/******************************************************/ + +#include "fctsys.h" +#include "appl_wxstruct.h" +#include "common.h" +#include "class_drawpanel.h" +#include "confirm.h" +#include "pcbnew.h" +#include "wxPcbStruct.h" +#include "pcbstruct.h" // enum PCB_VISIBLE +#include "collectors.h" +#include "bitmaps.h" +#include "pcbnew_id.h" +#include "layer_widget.h" +#include "class_pcb_layer_widget.h" + + +/** + * Class PCB_LAYER_WIDGET + * is here to implement the abtract functions of LAYER_WIDGET so they + * may be tied into the WinEDA_PcbFrame's data and so we can add a popup + * menu which is specific to PCBNEW's needs. + */ + + +PCB_LAYER_WIDGET::PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize ) : + LAYER_WIDGET( aParent, aFocusOwner, aPointSize ), + myframe( aParent ) +{ + BOARD* board = myframe->GetBoard(); + + // Fixed "Rendering" tab rows within the LAYER_WIDGET, only the initial color + // is changed before appending to the LAYER_WIDGET. This is an automatic variable + // not a static variable, change the color & state after copying from code to renderRows + // on the stack. + LAYER_WIDGET::ROW renderRows[16] = { + +#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width + + // text id color tooltip checked + RR( _( "Through Via" ), VIA_THROUGH_VISIBLE, WHITE, _( "Show through vias" ) ), + RR( _( "Bl/Buried Via" ), VIA_BBLIND_VISIBLE, WHITE, _( "Show blind or buried vias" ) ), + RR( _( "Micro Via" ), VIA_MICROVIA_VISIBLE, WHITE, _( "Show micro vias") ), + RR( _( "Ratsnest" ), RATSNEST_VISIBLE, WHITE, _( "Show unconnected nets as a ratsnest") ), + + RR( _( "Pads Front" ), PAD_FR_VISIBLE, WHITE, _( "Show footprint pads on board's front" ) ), + RR( _( "Pads Back" ), PAD_BK_VISIBLE, WHITE, _( "Show footprint pads on board's back" ) ), + + RR( _( "Text Front" ), MOD_TEXT_FR_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ), + RR( _( "Text Back" ), MOD_TEXT_BK_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ), + RR( _( "Hidden Text" ), MOD_TEXT_INVISIBLE, WHITE, _( "Show footprint text marked as invisible" ) ), + + RR( _( "Anchors" ), ANCHOR_VISIBLE, WHITE, _( "Show footprint and text origins as a cross" ) ), + RR( _( "Grid" ), GRID_VISIBLE, WHITE, _( "Show the (x,y) grid dots" ) ), + RR( _( "No-Connects" ), NO_CONNECTS_VISIBLE, -1, _( "Show a marker on pads which have no net connected" ) ), + RR( _( "Modules Front" ), MOD_FR_VISIBLE, -1, _( "Show footprints that are on board's front") ), + RR( _( "Modules Back" ), MOD_BK_VISIBLE, -1, _( "Show footprints that are on board's back") ), + RR( _( "Values" ), MOD_VALUES_VISIBLE, -1, _( "Show footprint's values") ), + RR( _( "References" ), MOD_REFERENCES_VISIBLE, -1, _( "Show footprint's references") ), + }; + + for( unsigned row=0; rowGetVisibleElementColor( renderRows[row].id ); + } + renderRows[row].state = board->IsElementVisible( renderRows[row].id ); + } + + AppendRenderRows( renderRows, DIM(renderRows) ); + + //------------------------------------------------------ + // handle the popup menu over the layer window. + m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN, + wxMouseEventHandler( PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this ); + + // since Popupmenu() calls this->ProcessEvent() we must call this->Connect() + // and not m_LayerScrolledWindow->Connect() + Connect( ID_SHOW_ALL_COPPERS, ID_SHOW_NO_COPPERS, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this ); + + // install the right click handler into each control at end of ReFill() + // using installRightLayerClickHandler +} + + +void PCB_LAYER_WIDGET::installRightLayerClickHandler() +{ + int rowCount = GetLayerRowCount(); + for( int row=0; rowConnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( + PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this ); + } + } +} + + +void PCB_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event ) +{ + wxMenu menu; + + // menu text is capitalized: + // http://library.gnome.org/devel/hig-book/2.20/design-text-labels.html.en#layout-capitalization + menu.Append( new wxMenuItem( &menu, ID_SHOW_ALL_COPPERS, + _("Show All Cu") ) ); + + menu.Append( new wxMenuItem( &menu, ID_SHOW_NO_COPPERS, + _( "Hide All Cu" ) ) ); + + PopupMenu( &menu ); + + passOnFocus(); +} + +void PCB_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event ) +{ + int rowCount; + int menuId = event.GetId(); + bool visible; + + switch( menuId ) + { + case ID_SHOW_ALL_COPPERS: + visible = true; + goto L_change_coppers; + + case ID_SHOW_NO_COPPERS: + visible = false; + L_change_coppers: + int lastCu = -1; + rowCount = GetLayerRowCount(); + for( int row=rowCount-1; row>=0; --row ) + { + wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 ); + int layer = getDecodedId( cb->GetId() ); + if( IsValidCopperLayerIndex( layer ) ) + { + lastCu = row; + break; + } + } + + for( int row=0; rowGetId() ); + + if( IsValidCopperLayerIndex( layer ) ) + { + cb->SetValue( visible ); + + bool isLastCopperLayer = (row==lastCu); + + OnLayerVisible( layer, visible, isLastCopperLayer ); + + if( isLastCopperLayer ) + break; + } + } + break; + } +} + + +void PCB_LAYER_WIDGET::ReFill() +{ + BOARD* brd = myframe->GetBoard(); + int layer; + + int enabledLayers = brd->GetEnabledLayers(); + +// m_Layers->Freeze(); // no screen updates until done modifying + + ClearLayerRows(); + + // show all coppers first, with front on top, back on bottom, then technical layers + + layer = LAYER_N_FRONT; + if( enabledLayers & (1 << layer) ) + { + AppendLayerRow( LAYER_WIDGET::ROW( + brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Front copper layer"), true ) ); + } + + for( layer = LAYER_N_FRONT-1; layer >= 1; --layer ) + { + if( enabledLayers & (1 << layer) ) + { + AppendLayerRow( LAYER_WIDGET::ROW( + brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("An innner copper layer"), true ) ); + } + } + + layer = LAYER_N_BACK; + if( enabledLayers & (1 << layer) ) + { + AppendLayerRow( LAYER_WIDGET::ROW( + brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Back copper layer"), true ) ); + } + + // technical layers are shown in this order: + static const struct { + int layerId; + wxString tooltip; + } techLayerSeq[] = { + { ADHESIVE_N_FRONT, _( "Adhesive on board's front" ) }, + { ADHESIVE_N_BACK, _( "Adhesive on board's back" ) }, + { SOLDERPASTE_N_FRONT, _( "Solder paste on board's front" )}, + { SOLDERPASTE_N_BACK, _( "Solder paste on board's back" ) }, + { SILKSCREEN_N_FRONT, _( "Silkscreen on board's front" ) }, + { SILKSCREEN_N_BACK, _( "Silkscreen on board's back" ) }, + { SOLDERMASK_N_FRONT, _( "Solder mask on board's front" ) }, + { SOLDERMASK_N_BACK, _( "Solder mask on board's back" ) }, + { DRAW_N, _( "Explanatory drawings" ) }, + { COMMENT_N, _( "Explanatory comments" ) }, + { ECO1_N, _( "TDB" ) }, + { ECO2_N, _( "TBD" ) }, + { EDGE_N, _( "Board's perimeter definition" ) }, + }; + + for( unsigned i=0; iGetLayerName( layer ), layer, brd->GetLayerColor( layer ), + techLayerSeq[i].tooltip, true ) ); + } + + installRightLayerClickHandler(); + +// m_Layers->Thaw(); +} + +//------------------------------------------------ + +void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, int aColor ) +{ + myframe->GetBoard()->SetLayerColor( aLayer, aColor ); + myframe->DrawPanel->Refresh(); +} + +bool PCB_LAYER_WIDGET::OnLayerSelect( int aLayer ) +{ + // the layer change from the PCB_LAYER_WIDGET can be denied by returning + // false from this function. + myframe->setActiveLayer( aLayer, false ); + myframe->syncLayerBox(); + if(DisplayOpt.ContrastModeDisplay) + myframe->DrawPanel->Refresh(); + + return true; +} + +void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal ) +{ + BOARD* brd = myframe->GetBoard(); + + int visibleLayers = brd->GetVisibleLayers(); + + if( isVisible ) + visibleLayers |= (1 << aLayer); + else + visibleLayers &= ~(1 << aLayer); + + brd->SetVisibleLayers( visibleLayers ); + + if( isFinal ) + myframe->DrawPanel->Refresh(); +} + +void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, int aColor ) +{ + myframe->GetBoard()->SetVisibleElementColor( aId, aColor ); + myframe->DrawPanel->Refresh(); +} + +void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled ) +{ + BOARD* brd = myframe->GetBoard(); + + /* @todo: + + move: + + GRID_VISIBLE, ? maybe not this one + into m_VisibleElements and get rid of globals. + */ + + switch( aId ) + { + // see todo above, don't really want anything except IsElementVisible() here. + + case GRID_VISIBLE: + // @todo, make read/write accessors for grid control so the write accessor can fire updates to + // grid state listeners. I think the grid state should be kept in the BOARD. + brd->SetElementVisibility( aId, isEnabled ); // set visibilty flag also in list, and myframe->m_Draw_Grid + break; + + default: + brd->SetElementVisibility( aId, isEnabled ); + } + + myframe->DrawPanel->Refresh(); +} + +//----------------------------------------------- + + diff --git a/pcbnew/class_pcb_layer_widget.h b/pcbnew/class_pcb_layer_widget.h new file mode 100644 index 0000000000..5510a4418e --- /dev/null +++ b/pcbnew/class_pcb_layer_widget.h @@ -0,0 +1,81 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 2004-2010 Jean-Pierre Charras, jean-pierre.charras@gpisa-lab.inpg.fr + * Copyright (C) 2010 SoftPLC Corporation, Dick Hollenbeck + * Copyright (C) 2010 Kicad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +/************************************************************/ +/* class_pcb_layer_widget.h : header for the layers manager */ +/************************************************************/ + +#ifndef _CLASS_PCB_LAYER_WIDGET_H_ +#define _CLASS_PCB_LAYER_WIDGET_H_ + +/** + * Class PCB_LAYER_WIDGET + * is here to implement the abtract functions of LAYER_WIDGET so they + * may be tied into the WinEDA_PcbFrame's data and so we can add a popup + * menu which is specific to PCBNEW's needs. + */ +class PCB_LAYER_WIDGET : public LAYER_WIDGET +{ + WinEDA_PcbFrame* myframe; + + // popup menu ids. +#define ID_SHOW_ALL_COPPERS wxID_HIGHEST +#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1) + + /** + * Function OnRightDownLayers + * puts up a popup menu for the layer panel. + */ + void onRightDownLayers( wxMouseEvent& event ); + + void onPopupSelection( wxCommandEvent& event ); + + /// this is for the popup menu, the right click handler has to be installed + /// on every child control within the layer panel. + void installRightLayerClickHandler(); + +public: + + /** + * Constructor + * @param aPointSize is the font point size to use within the widget. This + * effectively sets the overal size of the widget via the row height and bitmap + * button sizes. + */ + PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize = 10 ); + + void ReFill(); + + //---------------- + void OnLayerColorChange( int aLayer, int aColor ); + bool OnLayerSelect( int aLayer ); + void OnLayerVisible( int aLayer, bool isVisible, bool isFinal ); + void OnRenderColorChange( int aId, int aColor ); + void OnRenderEnable( int aId, bool isEnabled ); + //--------------- +}; + +#endif // _CLASS_PCB_LAYER_WIDGET_H_ diff --git a/pcbnew/dialog_general_options.cpp b/pcbnew/dialog_general_options.cpp index fd596519aa..574bdcbae4 100644 --- a/pcbnew/dialog_general_options.cpp +++ b/pcbnew/dialog_general_options.cpp @@ -44,18 +44,6 @@ void Dialog_GeneralOptions::init() wxString timevalue; timevalue << g_TimeOut / 60; m_SaveTime->SetValue( timevalue ); - -/* - * int layer_count[] = {1,2,4,6,8,10,12,14,16}; - * m_LayerNumber->SetSelection(1); - * for ( unsigned ii = 0; ii < sizeof(layer_count); ii++ ) - * { - * if ( g_DesignSettings.m_CopperLayerCount != layer_count[ii] ) - * continue; - * m_LayerNumber->SetSelection(ii); - * break; - * } - */ m_MaxShowLinks->SetValue( g_MaxLinksShowed ); m_DrcOn->SetValue( Drc_On ); @@ -249,21 +237,11 @@ void WinEDA_PcbFrame::OnSelectOptionToolbar( wxCommandEvent& event ) case ID_TB_OPTIONS_SHOW_EXTRA_VERTICAL_TOOLBAR1: m_show_microwave_tools = state; -#if !defined(KICAD_AUIMANAGER) - // show auxiliary Vertical toolbar (Microwave tool) - m_AuxVToolBar->Show(m_show_microwave_tools); - { - wxSizeEvent SizeEv( GetSize() ); - OnSize( SizeEv ); - } -#else m_auimgr.GetPane( wxT( "m_AuxVToolBar" ) ).Show( m_show_microwave_tools ); m_auimgr.Update(); -#endif break; - case ID_TB_OPTIONS_SHOW_MANAGE_LAYERS_VERTICAL_TOOLBAR: -#if defined(KICAD_AUIMANAGER) + case ID_TB_OPTIONS_SHOW_LAYERS_MANAGER_VERTICAL_TOOLBAR: // show auxiliary Vertical layers and visibility manager toolbar m_show_layer_manager_tools = state; m_auimgr.GetPane( wxT( "m_LayersManagerToolBar" ) ).Show( m_show_layer_manager_tools ); @@ -274,7 +252,6 @@ void WinEDA_PcbFrame::OnSelectOptionToolbar( wxCommandEvent& event ) else GetMenuBar()->SetLabel(ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG, _("Show &Layers Manager" ) ); -#endif break; default: diff --git a/pcbnew/menubar_pcbframe.cpp b/pcbnew/menubar_pcbframe.cpp index 0834f51188..06c900a3be 100644 --- a/pcbnew/menubar_pcbframe.cpp +++ b/pcbnew/menubar_pcbframe.cpp @@ -397,7 +397,7 @@ void WinEDA_PcbFrame::ReCreateMenuBar() item = new wxMenuItem( configmenu, ID_MENU_PCB_SHOW_HIDE_LAYERS_MANAGER_DIALOG, _( "Hide &Layers Manager" ), _( "Show/hide the layers manager toolbar" ) ); - item->SetBitmap( palette_xpm ); + item->SetBitmap( layers_manager_xpm ); configmenu->Append( item ); /* General */ diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 9dbee7193c..09bea6399d 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -45,350 +45,7 @@ #include "kbool/include/kbool/booleng.h" #include "layer_widget.h" #include "dialog_design_rules.h" - - - -/** - * Class PCB_LAYER_WIDGET - * is here to implement the abtract functions of LAYER_WIDGET so they - * may be tied into the WinEDA_PcbFrame's data and so we can add a popup - * menu which is specific to PCBNEW's needs. - */ -class PCB_LAYER_WIDGET : public LAYER_WIDGET -{ - WinEDA_PcbFrame* myframe; - - // popup menu ids. -#define ID_SHOW_ALL_COPPERS wxID_HIGHEST -#define ID_SHOW_NO_COPPERS (wxID_HIGHEST+1) - - /** - * Function OnRightDownLayers - * puts up a popup menu for the layer panel. - */ - void onRightDownLayers( wxMouseEvent& event ); - - void onPopupSelection( wxCommandEvent& event ); - - /// this is for the popup menu, the right click handler has to be installed - /// on every child control within the layer panel. - void installRightLayerClickHandler(); - -public: - - /** - * Constructor - * @param aPointSize is the font point size to use within the widget. This - * effectively sets the overal size of the widget via the row height and bitmap - * button sizes. - */ - PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize = 10 ); - - void ReFill(); - - //---------------- - void OnLayerColorChange( int aLayer, int aColor ); - bool OnLayerSelect( int aLayer ); - void OnLayerVisible( int aLayer, bool isVisible, bool isFinal ); - void OnRenderColorChange( int aId, int aColor ); - void OnRenderEnable( int aId, bool isEnabled ); - //--------------- -}; - - -PCB_LAYER_WIDGET::PCB_LAYER_WIDGET( WinEDA_PcbFrame* aParent, wxWindow* aFocusOwner, int aPointSize ) : - LAYER_WIDGET( aParent, aFocusOwner, aPointSize ), - myframe( aParent ) -{ - BOARD* board = myframe->GetBoard(); - - // Fixed "Rendering" tab rows within the LAYER_WIDGET, only the initial color - // is changed before appending to the LAYER_WIDGET. This is an automatic variable - // not a static variable, change the color & state after copying from code to renderRows - // on the stack. - LAYER_WIDGET::ROW renderRows[16] = { - -#define RR LAYER_WIDGET::ROW // Render Row abreviation to reduce source width - - // text id color tooltip checked - RR( _( "Through Via" ), VIA_THROUGH_VISIBLE, WHITE, _( "Show through vias" ) ), - RR( _( "Bl/Buried Via" ), VIA_BBLIND_VISIBLE, WHITE, _( "Show blind or buried vias" ) ), - RR( _( "Micro Via" ), VIA_MICROVIA_VISIBLE, WHITE, _( "Show micro vias") ), - RR( _( "Ratsnest" ), RATSNEST_VISIBLE, WHITE, _( "Show unconnected nets as a ratsnest") ), - - RR( _( "Pads Front" ), PAD_FR_VISIBLE, WHITE, _( "Show footprint pads on board's front" ) ), - RR( _( "Pads Back" ), PAD_BK_VISIBLE, WHITE, _( "Show footprint pads on board's back" ) ), - - RR( _( "Text Front" ), MOD_TEXT_FR_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ), - RR( _( "Text Back" ), MOD_TEXT_BK_VISIBLE, WHITE, _( "Show footprint text on board's back" ) ), - RR( _( "Hidden Text" ), MOD_TEXT_INVISIBLE, WHITE, _( "Show footprint text marked as invisible" ) ), - - RR( _( "Anchors" ), ANCHOR_VISIBLE, WHITE, _( "Show footprint and text origins as a cross" ) ), - RR( _( "Grid" ), GRID_VISIBLE, WHITE, _( "Show the (x,y) grid dots" ) ), - RR( _( "No-Connects" ), NO_CONNECTS_VISIBLE, -1, _( "Show a marker on pads which have no net connected" ) ), - RR( _( "Modules Front" ), MOD_FR_VISIBLE, -1, _( "Show footprints that are on board's front") ), - RR( _( "Modules Back" ), MOD_BK_VISIBLE, -1, _( "Show footprints that are on board's back") ), - RR( _( "Values" ), MOD_VALUES_VISIBLE, -1, _( "Show footprint's values") ), - RR( _( "References" ), MOD_REFERENCES_VISIBLE, -1, _( "Show footprint's references") ), - }; - - for( unsigned row=0; rowGetVisibleElementColor( renderRows[row].id ); - } - renderRows[row].state = board->IsElementVisible( renderRows[row].id ); - } - - AppendRenderRows( renderRows, DIM(renderRows) ); - - //------------------------------------------------------ - // handle the popup menu over the layer window. - m_LayerScrolledWindow->Connect( wxEVT_RIGHT_DOWN, - wxMouseEventHandler( PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this ); - - // since Popupmenu() calls this->ProcessEvent() we must call this->Connect() - // and not m_LayerScrolledWindow->Connect() - Connect( ID_SHOW_ALL_COPPERS, ID_SHOW_NO_COPPERS, wxEVT_COMMAND_MENU_SELECTED, - wxCommandEventHandler( PCB_LAYER_WIDGET::onPopupSelection ), NULL, this ); - - // install the right click handler into each control at end of ReFill() - // using installRightLayerClickHandler -} - - -void PCB_LAYER_WIDGET::installRightLayerClickHandler() -{ - int rowCount = GetLayerRowCount(); - for( int row=0; rowConnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( - PCB_LAYER_WIDGET::onRightDownLayers ), NULL, this ); - } - } -} - - -void PCB_LAYER_WIDGET::onRightDownLayers( wxMouseEvent& event ) -{ - wxMenu menu; - - // menu text is capitalized: - // http://library.gnome.org/devel/hig-book/2.20/design-text-labels.html.en#layout-capitalization - menu.Append( new wxMenuItem( &menu, ID_SHOW_ALL_COPPERS, - _("Show All Cu") ) ); - - menu.Append( new wxMenuItem( &menu, ID_SHOW_NO_COPPERS, - _( "Hide All Cu" ) ) ); - - PopupMenu( &menu ); - - passOnFocus(); -} - -void PCB_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event ) -{ - int rowCount; - int menuId = event.GetId(); - bool visible; - - switch( menuId ) - { - case ID_SHOW_ALL_COPPERS: - visible = true; - goto L_change_coppers; - - case ID_SHOW_NO_COPPERS: - visible = false; - L_change_coppers: - int lastCu = -1; - rowCount = GetLayerRowCount(); - for( int row=rowCount-1; row>=0; --row ) - { - wxCheckBox* cb = (wxCheckBox*) getLayerComp( row, 3 ); - int layer = getDecodedId( cb->GetId() ); - if( IsValidCopperLayerIndex( layer ) ) - { - lastCu = row; - break; - } - } - - for( int row=0; rowGetId() ); - - if( IsValidCopperLayerIndex( layer ) ) - { - cb->SetValue( visible ); - - bool isLastCopperLayer = (row==lastCu); - - OnLayerVisible( layer, visible, isLastCopperLayer ); - - if( isLastCopperLayer ) - break; - } - } - break; - } -} - - -void PCB_LAYER_WIDGET::ReFill() -{ - BOARD* brd = myframe->GetBoard(); - int layer; - - int enabledLayers = brd->GetEnabledLayers(); - -// m_Layers->Freeze(); // no screen updates until done modifying - - ClearLayerRows(); - - // show all coppers first, with front on top, back on bottom, then technical layers - - layer = LAYER_N_FRONT; - if( enabledLayers & (1 << layer) ) - { - AppendLayerRow( LAYER_WIDGET::ROW( - brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Front copper layer"), true ) ); - } - - for( layer = LAYER_N_FRONT-1; layer >= 1; --layer ) - { - if( enabledLayers & (1 << layer) ) - { - AppendLayerRow( LAYER_WIDGET::ROW( - brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("An innner copper layer"), true ) ); - } - } - - layer = LAYER_N_BACK; - if( enabledLayers & (1 << layer) ) - { - AppendLayerRow( LAYER_WIDGET::ROW( - brd->GetLayerName( layer ), layer, brd->GetLayerColor( layer ), _("Back copper layer"), true ) ); - } - - // technical layers are shown in this order: - static const struct { - int layerId; - wxString tooltip; - } techLayerSeq[] = { - { ADHESIVE_N_FRONT, _( "Adhesive on board's front" ) }, - { ADHESIVE_N_BACK, _( "Adhesive on board's back" ) }, - { SOLDERPASTE_N_FRONT, _( "Solder paste on board's front" )}, - { SOLDERPASTE_N_BACK, _( "Solder paste on board's back" ) }, - { SILKSCREEN_N_FRONT, _( "Silkscreen on board's front" ) }, - { SILKSCREEN_N_BACK, _( "Silkscreen on board's back" ) }, - { SOLDERMASK_N_FRONT, _( "Solder mask on board's front" ) }, - { SOLDERMASK_N_BACK, _( "Solder mask on board's back" ) }, - { DRAW_N, _( "Explanatory drawings" ) }, - { COMMENT_N, _( "Explanatory comments" ) }, - { ECO1_N, _( "TDB" ) }, - { ECO2_N, _( "TBD" ) }, - { EDGE_N, _( "Board's perimeter definition" ) }, - }; - - for( unsigned i=0; iGetLayerName( layer ), layer, brd->GetLayerColor( layer ), - techLayerSeq[i].tooltip, true ) ); - } - - installRightLayerClickHandler(); - -// m_Layers->Thaw(); -} - -//------------------------------------------------ - -void PCB_LAYER_WIDGET::OnLayerColorChange( int aLayer, int aColor ) -{ - myframe->GetBoard()->SetLayerColor( aLayer, aColor ); - myframe->DrawPanel->Refresh(); -} - -bool PCB_LAYER_WIDGET::OnLayerSelect( int aLayer ) -{ - // the layer change from the PCB_LAYER_WIDGET can be denied by returning - // false from this function. - myframe->setActiveLayer( aLayer, false ); - myframe->syncLayerBox(); - if(DisplayOpt.ContrastModeDisplay) - myframe->DrawPanel->Refresh(); - - return true; -} - -void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal ) -{ - BOARD* brd = myframe->GetBoard(); - - int visibleLayers = brd->GetVisibleLayers(); - - if( isVisible ) - visibleLayers |= (1 << aLayer); - else - visibleLayers &= ~(1 << aLayer); - - brd->SetVisibleLayers( visibleLayers ); - - if( isFinal ) - myframe->DrawPanel->Refresh(); -} - -void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, int aColor ) -{ - myframe->GetBoard()->SetVisibleElementColor( aId, aColor ); - myframe->DrawPanel->Refresh(); -} - -void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled ) -{ - BOARD* brd = myframe->GetBoard(); - - /* @todo: - - move: - - GRID_VISIBLE, ? maybe not this one - into m_VisibleElements and get rid of globals. - */ - - switch( aId ) - { - // see todo above, don't really want anything except IsElementVisible() here. - - case GRID_VISIBLE: - // @todo, make read/write accessors for grid control so the write accessor can fire updates to - // grid state listeners. I think the grid state should be kept in the BOARD. - brd->SetElementVisibility( aId, isEnabled ); // set visibilty flag also in list, and myframe->m_Draw_Grid - break; - - default: - brd->SetElementVisibility( aId, isEnabled ); - } - - myframe->DrawPanel->Refresh(); -} - -//----------------------------------------------- - +#include "class_pcb_layer_widget.h" @@ -634,6 +291,9 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, m_InternalUnits = PCB_INTERNAL_UNIT; // Unites internes = 1/10000 inch SetBaseScreen( ScreenPcb ); + + // LoadSettings() *after* creating m_LayersManager, because LoadSettings() + // initialize parameters in m_LayersManager LoadSettings(); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );