Merge trunk @ 5357

This commit is contained in:
Garth Corral 2015-01-07 07:34:07 -08:00
commit d0aeb87927
47 changed files with 543 additions and 395 deletions

2
.gitconfig Normal file
View File

@ -0,0 +1,2 @@
[core]
excludesfile .bzrignore

View File

@ -165,6 +165,51 @@ bool BASE_SCREEN::SetPreviousZoom()
return false; return false;
} }
/* Build the list of human readable grid list.
* The list shows the grid size both in mils or mm.
* aMmFirst = true to have mm first and mils after
* false to have mils first and mm after
*/
int BASE_SCREEN::BuildGridsChoiceList( wxArrayString& aGridsList, bool aMmFirst) const
{
wxString msg;
wxRealPoint curr_grid_size = GetGridSize();
int idx = -1;
int idx_usergrid = -1;
for( size_t i = 0; i < GetGridCount(); i++ )
{
const GRID_TYPE& grid = m_grids[i];
double gridValueMils = To_User_Unit( INCHES, grid.m_Size.x ) * 1000;
double gridValue_mm = To_User_Unit( MILLIMETRES, grid.m_Size.x );
if( grid.m_Id == ID_POPUP_GRID_USER )
{
msg = _( "User Grid" );
idx_usergrid = i;
}
else
{
if( aMmFirst )
msg.Printf( _( "Grid: %.4f mm (%.2f mils)" ),
gridValue_mm, gridValueMils );
else
msg.Printf( _( "Grid: %.2f mils (%.4f mm)" ),
gridValueMils, gridValue_mm );
}
aGridsList.Add( msg );
if( curr_grid_size == grid.m_Size )
idx = i;
}
if( idx < 0 )
idx = idx_usergrid;
return idx;
}
void BASE_SCREEN::SetGridList( GRIDS& gridlist ) void BASE_SCREEN::SetGridList( GRIDS& gridlist )
{ {

View File

@ -1,9 +1,9 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2014 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2014-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -271,9 +271,9 @@ double RoundTo0( double x, double precision )
int remainder = ix % 10; // remainder is in precision mm int remainder = ix % 10; // remainder is in precision mm
if ( remainder <= 2 ) if( remainder <= 2 )
ix -= remainder; // truncate to the near number ix -= remainder; // truncate to the near number
else if (remainder >= 8 ) else if( remainder >= 8 )
ix += 10 - remainder; // round to near number ix += 10 - remainder; // round to near number
if ( x < 0 ) if ( x < 0 )
@ -305,6 +305,46 @@ wxConfigBase* GetNewConfig( const wxString& aProgName )
return cfg; return cfg;
} }
wxString GetKicadLockFilePath()
{
wxFileName lockpath;
lockpath.AssignDir( wxGetHomeDir() ); // Default wx behavior
#if defined( __WXMAC__ )
// In OSX use the standard per user cache directory
lockpath.AppendDir( wxT( "Library" ) );
lockpath.AppendDir( wxT( "Caches" ) );
lockpath.AppendDir( wxT( "kicad" ) );
#elif defined( __UNIX__ )
wxString envstr;
// Try first the standard XDG_RUNTIME_DIR, falling back to XDG_CACHE_HOME
if( wxGetEnv( wxT( "XDG_RUNTIME_DIR" ), &envstr ) && !envstr.IsEmpty() )
{
lockpath.AssignDir( envstr );
}
else if( wxGetEnv( wxT( "XDG_CACHE_HOME" ), &envstr ) && !envstr.IsEmpty() )
{
lockpath.AssignDir( envstr );
}
else
{
// If all fails, just use ~/.cache
lockpath.AppendDir( wxT( ".cache" ) );
}
lockpath.AppendDir( wxT( "kicad" ) );
#endif
#if defined( __WXMAC__ ) || defined( __UNIX__ )
if( !lockpath.DirExists() )
{
// Lockfiles should be only readable by the user
lockpath.Mkdir( 0700, wxPATH_MKDIR_FULL );
}
#endif
return lockpath.GetPath();
}
wxString GetKicadConfigPath() wxString GetKicadConfigPath()
{ {

View File

@ -128,6 +128,7 @@ EDA_DRAW_FRAME::EDA_DRAW_FRAME( KIWAY* aKiway, wxWindow* aParent,
m_snapToGrid = true; m_snapToGrid = true;
m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight(); m_MsgFrameHeight = EDA_MSG_PANEL::GetRequiredHeight();
m_movingCursorWithKeyboard = false; m_movingCursorWithKeyboard = false;
m_zoomLevelCoeff = 1.0;
m_auimgr.SetFlags(wxAUI_MGR_DEFAULT|wxAUI_MGR_LIVE_RESIZE); m_auimgr.SetFlags(wxAUI_MGR_DEFAULT|wxAUI_MGR_LIVE_RESIZE);
@ -613,16 +614,7 @@ bool EDA_DRAW_FRAME::HandleBlockEnd( wxDC* DC )
void EDA_DRAW_FRAME::UpdateStatusBar() void EDA_DRAW_FRAME::UpdateStatusBar()
{ {
wxString Line; SetStatusText( GetZoomLevelIndicator(), 1 );
BASE_SCREEN* screen = GetScreen();
if( !screen )
return;
// Display Zoom level: zoom = zoom_coeff/ZoomScalar
Line.Printf( wxT( "Z %g" ), screen->GetZoom() );
SetStatusText( Line, 1 );
// Absolute and relative cursor positions are handled by overloading this function and // Absolute and relative cursor positions are handled by overloading this function and
// handling the internal to user units conversion at the appropriate level. // handling the internal to user units conversion at the appropriate level.
@ -631,6 +623,22 @@ void EDA_DRAW_FRAME::UpdateStatusBar()
DisplayUnitsMsg(); DisplayUnitsMsg();
} }
const wxString EDA_DRAW_FRAME::GetZoomLevelIndicator() const
{
BASE_SCREEN* screen = GetScreen();
wxString Line;
if( screen )
{
// returns a human readable value which can be displayed as zoom
// level indicator in dialogs.
double level = m_zoomLevelCoeff / (double)screen->GetZoom();
Line.Printf( wxT( "Z %.2f" ), level );
}
return Line;
}
void EDA_DRAW_FRAME::LoadSettings( wxConfigBase* aCfg ) void EDA_DRAW_FRAME::LoadSettings( wxConfigBase* aCfg )
{ {

View File

@ -101,7 +101,7 @@ void FOOTPRINT_INFO::load()
std::auto_ptr<MODULE> m( fptable->FootprintLoad( m_nickname, m_fpname ) ); std::auto_ptr<MODULE> m( fptable->FootprintLoad( m_nickname, m_fpname ) );
m_pad_count = m->GetPadCount( MODULE::DO_NOT_INCLUDE_NPTH ); m_pad_count = m->GetPadCount( DO_NOT_INCLUDE_NPTH );
m_keywords = m->GetKeywords(); m_keywords = m->GetKeywords();
m_doc = m->GetDescription(); m_doc = m->GetDescription();

View File

@ -1,8 +1,8 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2014 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com> * Copyright (C) 2014-2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2014 KiCad Developers, see CHANGELOG.TXT for contributors. * Copyright (C) 2014-2015 KiCad Developers, see CHANGELOG.TXT for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -24,6 +24,7 @@
#include <wx/filename.h> #include <wx/filename.h>
#include <wx/snglinst.h> #include <wx/snglinst.h>
#include <common.h>
wxSingleInstanceChecker* LockFile( const wxString& aFileName ) wxSingleInstanceChecker* LockFile( const wxString& aFileName )
@ -41,7 +42,8 @@ wxSingleInstanceChecker* LockFile( const wxString& aFileName )
// We can have filenames coming from Windows, so also convert Windows separator // We can have filenames coming from Windows, so also convert Windows separator
lockFileName.Replace( wxT( "\\" ), wxT( "_" ) ); lockFileName.Replace( wxT( "\\" ), wxT( "_" ) );
wxSingleInstanceChecker* p = new wxSingleInstanceChecker( lockFileName ); wxSingleInstanceChecker* p = new wxSingleInstanceChecker( lockFileName,
GetKicadLockFilePath() );
if( p->IsAnotherRunning() ) if( p->IsAnotherRunning() )
{ {

View File

@ -1,9 +1,9 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com * Copyright (C) 2004-2015 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
* Copyright (C) 2008-2011 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -353,7 +353,7 @@ bool PGM_BASE::initPgm()
wxInitAllImageHandlers(); wxInitAllImageHandlers();
m_pgm_checker = new wxSingleInstanceChecker( pgm_name.GetName().Lower() + wxT( "-" ) + wxGetUserId() ); m_pgm_checker = new wxSingleInstanceChecker( pgm_name.GetName().Lower() + wxT( "-" ) + wxGetUserId(), GetKicadLockFilePath() );
if( m_pgm_checker->IsAnotherRunning() ) if( m_pgm_checker->IsAnotherRunning() )
{ {

View File

@ -251,7 +251,7 @@ void EDA_DRAW_FRAME::AddMenuZoomAndGrid( wxMenu* MasterMenu )
// Populate zoom submenu. // Populate zoom submenu.
for( int i = 0; i < maxZoomIds; i++ ) for( int i = 0; i < maxZoomIds; i++ )
{ {
msg.Printf( wxT( "%g" ), screen->m_ZoomList[i] ); msg.Printf( wxT( "%.2f" ), m_zoomLevelCoeff / screen->m_ZoomList[i] );
zoom_choice->Append( ID_POPUP_ZOOM_LEVEL_START + i, _( "Zoom: " ) + msg, zoom_choice->Append( ID_POPUP_ZOOM_LEVEL_START + i, _( "Zoom: " ) + msg,
wxEmptyString, wxITEM_CHECK ); wxEmptyString, wxITEM_CHECK );
@ -266,43 +266,16 @@ void EDA_DRAW_FRAME::AddMenuZoomAndGrid( wxMenu* MasterMenu )
AddMenuItem( MasterMenu, gridMenu, ID_POPUP_GRID_SELECT, AddMenuItem( MasterMenu, gridMenu, ID_POPUP_GRID_SELECT,
_( "Grid Select" ), KiBitmap( grid_select_xpm ) ); _( "Grid Select" ), KiBitmap( grid_select_xpm ) );
GRID_TYPE tmp; wxArrayString gridsList;
wxRealPoint grid = screen->GetGridSize(); int icurr = screen->BuildGridsChoiceList( gridsList, g_UserUnit != INCHES );
for( size_t i = 0; i < screen->GetGridCount(); i++ ) for( unsigned i = 0; i < gridsList.GetCount(); i++ )
{ {
tmp = screen->GetGrid( i ); GRID_TYPE& grid = screen->GetGrid( i );
double gridValueInch = To_User_Unit( INCHES, tmp.m_Size.x ); gridMenu->Append( grid.m_Id, gridsList[i], wxEmptyString, true );
double gridValue_mm = To_User_Unit( MILLIMETRES, tmp.m_Size.x );
if( tmp.m_Id == ID_POPUP_GRID_USER ) if( (int)i == icurr )
{ gridMenu->Check( grid.m_Id, true );
msg = _( "User Grid" );
}
else
{
switch( g_UserUnit )
{
case INCHES:
msg.Printf( wxT( "%.1f mils, (%.4f mm)" ),
gridValueInch * 1000, gridValue_mm );
break;
case MILLIMETRES:
msg.Printf( wxT( "%.4f mm, (%.1f mils)" ),
gridValue_mm, gridValueInch * 1000 );
break;
case UNSCALED_UNITS:
msg = wxT( "???" );
break;
}
}
gridMenu->Append( tmp.m_Id, msg, wxEmptyString, true );
if( grid == tmp.m_Size )
gridMenu->Check( tmp.m_Id, true );
} }
} }

View File

@ -442,17 +442,6 @@ bool CVPCB_MAINFRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, i
return false; return false;
m_NetlistFileName = aFileSet[0]; m_NetlistFileName = aFileSet[0];
ReadNetListAndLinkFiles();
UpdateTitle();
// Resize the components list box. This is needed in case the
// contents have shrunk compared to the previous netlist.
m_compListBox->UpdateWidth();
// OSX need it since some objects are "rebuild" just make aware AUI
// Fixes #1258081
m_auimgr.Update();
if( Kiface().IsSingle() ) if( Kiface().IsSingle() )
{ {
@ -470,6 +459,18 @@ bool CVPCB_MAINFRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, i
Prj().SetProjectFullName( pro.GetFullPath() ); Prj().SetProjectFullName( pro.GetFullPath() );
} }
ReadNetListAndLinkFiles();
UpdateTitle();
// Resize the components list box. This is needed in case the
// contents have shrunk compared to the previous netlist.
m_compListBox->UpdateWidth();
// OSX need it since some objects are "rebuild" just make aware AUI
// Fixes #1258081
m_auimgr.Update();
return true; return true;
} }

View File

@ -1,4 +1,4 @@
Cmp-Mod V01 Created by Cvpcb (2014-12-31 BZR 5344)-product date = 01/01/2015 18:25:40 Cmp-Mod V01 Created by Cvpcb (2014-12-31 BZR 5344)-product date = 01/01/2015 20:57:19
BeginCmp BeginCmp
TimeStamp = /4549F4BE; TimeStamp = /4549F4BE;
@ -102,7 +102,7 @@ BeginCmp
TimeStamp = /48B4F266; TimeStamp = /48B4F266;
Reference = U1; Reference = U1;
ValeurCmp = ECC83; ValeurCmp = ECC83;
IdModule = Valves:VALVE-ECC-83-1; IdModule = Valves:VALVE-ECC-83-2;
EndCmp EndCmp
EndListe EndListe

View File

@ -1,12 +1,12 @@
(kicad_pcb (version 4) (host pcbnew "(2014-12-31 BZR 5344)-product") (kicad_pcb (version 4) (host pcbnew "(2014-12-31 BZR 5344)-product")
(general (general
(links 20) (links 21)
(no_connects 0) (no_connects 1)
(area 118.759514 89.3318 168.710429 133.6802) (area 119.824499 90.614499 168.465501 132.905501)
(thickness 1.6002) (thickness 1.6002)
(drawings 4) (drawings 4)
(tracks 46) (tracks 49)
(zones 0) (zones 0)
(modules 15) (modules 15)
(nets 14) (nets 14)
@ -411,41 +411,6 @@
) )
) )
(module Valves:VALVE-ECC-83-1 (layer Dessus) (tedit 54A58223) (tstamp 54A5839D)
(at 149.3 109.2)
(path /48B4F266)
(fp_text reference U1 (at 1.27 -11.43) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value ECC83 (at 0 11.43) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 10.16 1.27) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole circle (at 3.4544 4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 8 "Net-(R1-Pad1)"))
(pad 2 thru_hole circle (at 5.60832 1.8288) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 5 "Net-(P1-Pad2)"))
(pad 3 thru_hole circle (at 5.60832 -1.8288) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 9 "Net-(R2-Pad1)"))
(pad 4 thru_hole circle (at 3.4544 -4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 6 "Net-(P4-Pad1)"))
(pad 5 thru_hole circle (at 0 -5.8928) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 6 "Net-(P4-Pad1)"))
(pad 6 thru_hole circle (at -3.4544 -4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 2 "Net-(C1-Pad1)"))
(pad 7 thru_hole circle (at -5.60832 -1.8288) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 8 "Net-(R1-Pad1)"))
(pad 8 thru_hole circle (at -5.60832 1.78816) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 4 "Net-(C2-Pad2)"))
(pad 9 thru_hole circle (at -3.4544 4.75488) (size 2.032 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
(net 7 "Net-(P4-Pad2)"))
(model Valves/VALVE-ECC-83-1.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(module connect:1pin (layer Dessus) (tedit 54A58223) (tstamp 54A583D2) (module connect:1pin (layer Dessus) (tedit 54A58223) (tstamp 54A583D2)
(at 123.19 93.98) (at 123.19 93.98)
(descr "module 1 pin (ou trou mecanique de percage)") (descr "module 1 pin (ou trou mecanique de percage)")
@ -510,57 +475,97 @@
(net 13 "Net-(P8-Pad1)")) (net 13 "Net-(P8-Pad1)"))
) )
(module Valves:VALVE-ECC-83-2 (layer Dessus) (tedit 54A5A61F) (tstamp 54A5A6B2)
(at 149.3 109.2)
(path /48B4F266)
(fp_text reference U1 (at 0 -11.43) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value ECC83 (at 0 11.43) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_circle (center 0 0) (end 10.16 1.27) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole oval (at 3.4544 4.75488 306) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 8 "Net-(R1-Pad1)"))
(pad 2 thru_hole oval (at 5.60832 1.8288 342) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 5 "Net-(P1-Pad2)"))
(pad 3 thru_hole oval (at 5.60832 -1.8288 18) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 9 "Net-(R2-Pad1)"))
(pad 4 thru_hole oval (at 3.4544 -4.75488 54) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 6 "Net-(P4-Pad1)"))
(pad 5 thru_hole oval (at 0 -5.8928 90) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 6 "Net-(P4-Pad1)"))
(pad 6 thru_hole oval (at -3.4544 -4.75488 306) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 2 "Net-(C1-Pad1)"))
(pad 7 thru_hole oval (at -5.60832 -1.8288 342) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 8 "Net-(R1-Pad1)"))
(pad 8 thru_hole oval (at -5.60832 1.78816 18) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 4 "Net-(C2-Pad2)"))
(pad 9 thru_hole oval (at -3.4544 4.75488 54) (size 2.032 3.048) (drill oval 1.016 2.032) (layers *.Cu *.Mask F.SilkS)
(net 7 "Net-(P4-Pad2)"))
(pad 2 thru_hole circle (at 0 0) (size 4.50088 4.50088) (drill 3.0988) (layers *.Cu *.Mask F.SilkS)
(net 5 "Net-(P1-Pad2)"))
(model Valves/VALVE-ECC-83-2.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(gr_line (start 168.275 132.715) (end 120.015 132.715) (angle 90) (layer Edge.Cuts) (width 0.381)) (gr_line (start 168.275 132.715) (end 120.015 132.715) (angle 90) (layer Edge.Cuts) (width 0.381))
(gr_line (start 168.275 90.805) (end 120.015 90.805) (angle 90) (layer Edge.Cuts) (width 0.381)) (gr_line (start 168.275 90.805) (end 120.015 90.805) (angle 90) (layer Edge.Cuts) (width 0.381))
(gr_line (start 168.275 90.805) (end 168.275 132.715) (angle 90) (layer Edge.Cuts) (width 0.381)) (gr_line (start 168.275 90.805) (end 168.275 132.715) (angle 90) (layer Edge.Cuts) (width 0.381))
(gr_line (start 120.015 90.805) (end 120.015 132.715) (angle 90) (layer Edge.Cuts) (width 0.381)) (gr_line (start 120.015 90.805) (end 120.015 132.715) (angle 90) (layer Edge.Cuts) (width 0.381))
(segment (start 165.1 123.825) (end 165.354 123.825) (width 0.8636) (layer Dessous) (net 1) (status 30)) (segment (start 165.1 123.825) (end 165.354 123.825) (width 0.8636) (layer Dessous) (net 1) (status 30))
(segment (start 125.73 101.6) (end 131.445 101.6) (width 0.8636) (layer Dessous) (net 2) (status 420))
(segment (start 123.19 102.87) (end 124.46 102.87) (width 0.8636) (layer Dessous) (net 2) (status 810))
(segment (start 142.90548 101.6) (end 145.7706 104.46512) (width 0.8636) (layer Dessous) (net 2) (status 420))
(segment (start 131.445 101.6) (end 142.90548 101.6) (width 0.8636) (layer Dessous) (net 2) (status 810))
(segment (start 124.46 102.87) (end 125.73 101.6) (width 0.8636) (layer Dessous) (net 2)) (segment (start 124.46 102.87) (end 125.73 101.6) (width 0.8636) (layer Dessous) (net 2))
(segment (start 124.46 114.935) (end 123.825 114.935) (width 0.8636) (layer Dessous) (net 3) (status 30)) (segment (start 131.445 101.6) (end 142.90548 101.6) (width 0.8636) (layer Dessous) (net 2) (status 810))
(segment (start 123.19 114.3) (end 123.19 111.125) (width 0.8636) (layer Dessous) (net 3) (status 20)) (segment (start 142.90548 101.6) (end 145.7706 104.46512) (width 0.8636) (layer Dessous) (net 2) (status 420))
(segment (start 123.825 114.935) (end 123.19 114.3) (width 0.8636) (layer Dessous) (net 3) (status 10)) (segment (start 123.19 102.87) (end 124.46 102.87) (width 0.8636) (layer Dessous) (net 2) (status 810))
(segment (start 131.445 108.585) (end 128.905 111.125) (width 0.8636) (layer Dessous) (net 3) (status 810)) (segment (start 125.73 101.6) (end 131.445 101.6) (width 0.8636) (layer Dessous) (net 2) (status 420))
(segment (start 128.905 111.125) (end 123.19 111.125) (width 0.8636) (layer Dessous) (net 3) (status 420)) (segment (start 128.905 111.125) (end 123.19 111.125) (width 0.8636) (layer Dessous) (net 3) (status 420))
(segment (start 142.875 116.205) (end 143.51 116.84) (width 0.8636) (layer Dessous) (net 4)) (segment (start 131.445 108.585) (end 128.905 111.125) (width 0.8636) (layer Dessous) (net 3) (status 810))
(segment (start 142.875 112.395) (end 142.875 116.205) (width 0.8636) (layer Dessous) (net 4)) (segment (start 123.825 114.935) (end 123.19 114.3) (width 0.8636) (layer Dessous) (net 3) (status 10))
(segment (start 143.61668 111.65332) (end 142.875 112.395) (width 0.8636) (layer Dessous) (net 4) (status 10)) (segment (start 123.19 114.3) (end 123.19 111.125) (width 0.8636) (layer Dessous) (net 3) (status 20))
(segment (start 140.97 128.905) (end 142.24 128.905) (width 0.8636) (layer Dessous) (net 4) (status 810)) (segment (start 124.46 114.935) (end 123.825 114.935) (width 0.8636) (layer Dessous) (net 3) (status 30))
(segment (start 142.24 128.905) (end 143.51 127.635) (width 0.8636) (layer Dessous) (net 4))
(segment (start 143.51 127.635) (end 143.51 116.84) (width 0.8636) (layer Dessous) (net 4))
(segment (start 143.61668 111.00816) (end 143.61668 111.65332) (width 0.8636) (layer Dessous) (net 4) (status 830))
(segment (start 131.445 128.905) (end 140.97 128.905) (width 0.8636) (layer Dessous) (net 4) (status C30)) (segment (start 131.445 128.905) (end 140.97 128.905) (width 0.8636) (layer Dessous) (net 4) (status C30))
(segment (start 161.925 113.03) (end 165.1 113.03) (width 0.8636) (layer Dessous) (net 5) (status 420)) (segment (start 143.61668 111.00816) (end 143.61668 111.65332) (width 0.8636) (layer Dessous) (net 4) (status 830))
(segment (start 159.9438 111.0488) (end 161.925 113.03) (width 0.8636) (layer Dessous) (net 5)) (segment (start 143.51 127.635) (end 143.51 116.84) (width 0.8636) (layer Dessous) (net 4))
(segment (start 165.1 113.03) (end 165.1 116.205) (width 0.8636) (layer Dessous) (net 5) (status C30)) (segment (start 142.24 128.905) (end 143.51 127.635) (width 0.8636) (layer Dessous) (net 4))
(segment (start 140.97 128.905) (end 142.24 128.905) (width 0.8636) (layer Dessous) (net 4) (status 810))
(segment (start 143.61668 111.65332) (end 142.875 112.395) (width 0.8636) (layer Dessous) (net 4) (status 10))
(segment (start 142.875 112.395) (end 142.875 116.205) (width 0.8636) (layer Dessous) (net 4))
(segment (start 142.875 116.205) (end 143.51 116.84) (width 0.8636) (layer Dessous) (net 4))
(segment (start 154.83332 111.0488) (end 159.9438 111.0488) (width 0.8636) (layer Dessous) (net 5) (status 810)) (segment (start 154.83332 111.0488) (end 159.9438 111.0488) (width 0.8636) (layer Dessous) (net 5) (status 810))
(segment (start 149.86 115.697) (end 149.86 107.33952) (width 0.8636) (layer Dessous) (net 6)) (segment (start 165.1 113.03) (end 165.1 116.205) (width 0.8636) (layer Dessous) (net 5) (status C30))
(segment (start 149.86 107.33952) (end 152.7544 104.44512) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A589AE) (status 20)) (segment (start 159.9438 111.0488) (end 161.925 113.03) (width 0.8636) (layer Dessous) (net 5))
(segment (start 149.86 115.697) (end 150.495 116.332) (width 0.8636) (layer Dessous) (net 6)) (segment (start 161.925 113.03) (end 165.1 113.03) (width 0.8636) (layer Dessous) (net 5) (status 420))
(segment (start 149.225 103.3272) (end 151.54148 103.3272) (width 0.8636) (layer Dessous) (net 6) (status 10)) (segment (start 152.7544 104.44512) (end 152.7544 105.5456) (width 0.8636) (layer Dessous) (net 6) (status C00000))
(segment (start 151.54148 103.3272) (end 152.6794 104.46512) (width 0.8636) (layer Dessous) (net 6) (status 420)) (segment (start 152.7544 105.5456) (end 152.5 105.8) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A703) (status 400000))
(segment (start 152.5 105.8) (end 152.5 110.7) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A705))
(segment (start 152.5 110.7) (end 149.86 113.34) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A707))
(segment (start 149.86 113.34) (end 149.86 115.697) (width 0.8636) (layer Dessous) (net 6) (tstamp 54A5A709))
(segment (start 150.495 128.905) (end 150.495 116.332) (width 0.8636) (layer Dessous) (net 6) (status 810)) (segment (start 150.495 128.905) (end 150.495 116.332) (width 0.8636) (layer Dessous) (net 6) (status 810))
(segment (start 147.955 128.905) (end 147.955 116.15928) (width 0.8636) (layer Dessous) (net 7) (status 810)) (segment (start 151.54148 103.3272) (end 152.6794 104.46512) (width 0.8636) (layer Dessous) (net 6) (status 420))
(segment (start 149.225 103.3272) (end 151.54148 103.3272) (width 0.8636) (layer Dessous) (net 6) (status 10))
(segment (start 149.86 115.697) (end 150.495 116.332) (width 0.8636) (layer Dessous) (net 6))
(segment (start 147.955 116.15928) (end 145.7706 113.97488) (width 0.8636) (layer Dessous) (net 7) (status 420)) (segment (start 147.955 116.15928) (end 145.7706 113.97488) (width 0.8636) (layer Dessous) (net 7) (status 420))
(segment (start 153.67 131.445) (end 154.94 130.175) (width 0.8636) (layer Dessous) (net 8)) (segment (start 147.955 128.905) (end 147.955 116.15928) (width 0.8636) (layer Dessous) (net 7) (status 810))
(segment (start 130.175 131.445) (end 153.67 131.445) (width 0.8636) (layer Dessous) (net 8))
(segment (start 128.905 130.175) (end 130.175 131.445) (width 0.8636) (layer Dessous) (net 8))
(segment (start 128.905 127) (end 128.905 130.175) (width 0.8636) (layer Dessous) (net 8))
(segment (start 154.94 130.175) (end 154.94 116.23548) (width 0.8636) (layer Dessous) (net 8))
(segment (start 154.94 116.23548) (end 152.6794 113.97488) (width 0.8636) (layer Dessous) (net 8) (status 420))
(segment (start 140.97 121.285) (end 140.97 123.825) (width 0.8636) (layer Dessous) (net 8) (status 810))
(segment (start 142.1638 107.3912) (end 140.97 108.585) (width 0.8636) (layer Dessous) (net 8))
(segment (start 140.97 108.585) (end 140.97 121.285) (width 0.8636) (layer Dessous) (net 8) (status 420))
(segment (start 143.61668 107.3912) (end 142.1638 107.3912) (width 0.8636) (layer Dessous) (net 8) (status 810))
(segment (start 130.175 125.73) (end 128.905 127) (width 0.8636) (layer Dessous) (net 8))
(segment (start 139.065 125.73) (end 130.175 125.73) (width 0.8636) (layer Dessous) (net 8))
(segment (start 140.97 123.825) (end 139.065 125.73) (width 0.8636) (layer Dessous) (net 8)) (segment (start 140.97 123.825) (end 139.065 125.73) (width 0.8636) (layer Dessous) (net 8))
(segment (start 154.83332 107.3912) (end 165.0238 107.3912) (width 0.8636) (layer Dessous) (net 9) (status 830)) (segment (start 139.065 125.73) (end 130.175 125.73) (width 0.8636) (layer Dessous) (net 8))
(segment (start 130.175 125.73) (end 128.905 127) (width 0.8636) (layer Dessous) (net 8))
(segment (start 143.61668 107.3912) (end 142.1638 107.3912) (width 0.8636) (layer Dessous) (net 8) (status 810))
(segment (start 140.97 108.585) (end 140.97 121.285) (width 0.8636) (layer Dessous) (net 8) (status 420))
(segment (start 142.1638 107.3912) (end 140.97 108.585) (width 0.8636) (layer Dessous) (net 8))
(segment (start 140.97 121.285) (end 140.97 123.825) (width 0.8636) (layer Dessous) (net 8) (status 810))
(segment (start 154.94 116.23548) (end 152.6794 113.97488) (width 0.8636) (layer Dessous) (net 8) (status 420))
(segment (start 154.94 130.175) (end 154.94 116.23548) (width 0.8636) (layer Dessous) (net 8))
(segment (start 128.905 127) (end 128.905 130.175) (width 0.8636) (layer Dessous) (net 8))
(segment (start 128.905 130.175) (end 130.175 131.445) (width 0.8636) (layer Dessous) (net 8))
(segment (start 130.175 131.445) (end 153.67 131.445) (width 0.8636) (layer Dessous) (net 8))
(segment (start 153.67 131.445) (end 154.94 130.175) (width 0.8636) (layer Dessous) (net 8))
(segment (start 165.0238 107.3912) (end 165.1 107.315) (width 0.8636) (layer Dessous) (net 9) (status 430)) (segment (start 165.0238 107.3912) (end 165.1 107.315) (width 0.8636) (layer Dessous) (net 9) (status 430))
(segment (start 154.83332 107.3912) (end 165.0238 107.3912) (width 0.8636) (layer Dessous) (net 9) (status 830))
(zone (net 1) (net_name GND) (layer Dessous) (tstamp 4EED96A1) (hatch edge 0.508) (zone (net 1) (net_name GND) (layer Dessous) (tstamp 4EED96A1) (hatch edge 0.508)
(connect_pads (clearance 0.635)) (connect_pads (clearance 0.635))
@ -618,53 +623,52 @@
(xy 151.54148 102.1334) (xy 151.165771 102.1334) (xy 151.110021 102.049964) (xy 150.533196 101.664542) (xy 149.852785 101.5292) (xy 151.54148 102.1334) (xy 151.165771 102.1334) (xy 151.110021 102.049964) (xy 150.533196 101.664542) (xy 149.852785 101.5292)
(xy 148.747215 101.5292) (xy 148.066804 101.664542) (xy 147.489979 102.049964) (xy 147.13985 102.573968) (xy 146.570951 102.364091) (xy 148.747215 101.5292) (xy 148.066804 101.664542) (xy 147.489979 102.049964) (xy 147.13985 102.573968) (xy 146.570951 102.364091)
(xy 145.877744 102.391328) (xy 145.540546 102.546778) (xy 143.749624 100.755856) (xy 143.362328 100.497073) (xy 142.90548 100.4062) (xy 145.877744 102.391328) (xy 145.540546 102.546778) (xy 143.749624 100.755856) (xy 143.362328 100.497073) (xy 142.90548 100.4062)
(xy 133.03253 100.4062) (xy 132.979992 100.279362) (xy 132.765638 100.065008) (xy 132.727151 100.049066) (xy 132.727151 96.701126) (xy 133.045192 100.4062) (xy 132.886808 100.165087) (xy 132.727151 100.057317) (xy 132.727151 96.701126) (xy 132.698867 96.196681)
(xy 132.698867 96.196681) (xy 132.560239 95.862003) (xy 132.375891 95.763326) (xy 132.201674 95.937543) (xy 132.201674 95.589109) (xy 132.560239 95.862003) (xy 132.375891 95.763326) (xy 132.201674 95.937543) (xy 132.201674 95.589109) (xy 132.102997 95.404761)
(xy 132.102997 95.404761) (xy 131.626126 95.237849) (xy 131.121681 95.266133) (xy 130.787003 95.404761) (xy 130.688326 95.589109) (xy 131.626126 95.237849) (xy 131.121681 95.266133) (xy 130.787003 95.404761) (xy 130.688326 95.589109) (xy 131.445 96.345783)
(xy 131.445 96.345783) (xy 132.201674 95.589109) (xy 132.201674 95.937543) (xy 131.619217 96.52) (xy 132.375891 97.276674) (xy 132.201674 95.589109) (xy 132.201674 95.937543) (xy 131.619217 96.52) (xy 132.375891 97.276674) (xy 132.560239 97.177997)
(xy 132.560239 97.177997) (xy 132.727151 96.701126) (xy 132.727151 100.049066) (xy 132.485571 99.949) (xy 132.201674 99.949) (xy 132.727151 96.701126) (xy 132.727151 100.057317) (xy 132.633568 99.994148) (xy 132.334 99.934072) (xy 132.201674 99.934072)
(xy 132.201674 97.450891) (xy 131.445 96.694217) (xy 131.270783 96.868434) (xy 131.270783 96.52) (xy 130.514109 95.763326) (xy 132.201674 97.450891) (xy 131.445 96.694217) (xy 131.270783 96.868434) (xy 131.270783 96.52) (xy 130.514109 95.763326)
(xy 130.329761 95.862003) (xy 130.162849 96.338874) (xy 130.191133 96.843319) (xy 130.329761 97.177997) (xy 130.514109 97.276674) (xy 130.329761 95.862003) (xy 130.162849 96.338874) (xy 130.191133 96.843319) (xy 130.329761 97.177997) (xy 130.514109 97.276674)
(xy 131.270783 96.52) (xy 131.270783 96.868434) (xy 130.688326 97.450891) (xy 130.787003 97.635239) (xy 131.263874 97.802151) (xy 131.270783 96.52) (xy 131.270783 96.868434) (xy 130.688326 97.450891) (xy 130.787003 97.635239) (xy 131.263874 97.802151)
(xy 131.768319 97.773867) (xy 132.102997 97.635239) (xy 132.201674 97.450891) (xy 132.201674 99.949) (xy 132.182429 99.949) (xy 131.768319 97.773867) (xy 132.102997 97.635239) (xy 132.201674 97.450891) (xy 132.201674 99.934072) (xy 130.556 99.934072)
(xy 130.404429 99.949) (xy 130.124362 100.065008) (xy 129.910008 100.279362) (xy 129.857469 100.4062) (xy 125.73 100.4062) (xy 130.265452 99.990445) (xy 130.010087 100.158192) (xy 129.842679 100.4062) (xy 125.73 100.4062) (xy 125.273152 100.497073)
(xy 125.273152 100.497073) (xy 124.885856 100.755856) (xy 124.345603 101.296108) (xy 124.345603 100.480745) (xy 124.315325 100.02704) (xy 124.885856 100.755856) (xy 124.345603 101.296108) (xy 124.345603 100.480745) (xy 124.315325 100.02704) (xy 124.19995 99.7485)
(xy 124.19995 99.7485) (xy 124.028783 99.665433) (xy 123.854567 99.839649) (xy 123.854567 99.491217) (xy 123.7715 99.32005) (xy 124.028783 99.665433) (xy 123.854567 99.839649) (xy 123.854567 99.491217) (xy 123.7715 99.32005) (xy 123.340745 99.174397)
(xy 123.340745 99.174397) (xy 122.88704 99.204675) (xy 122.6085 99.32005) (xy 122.525433 99.491217) (xy 123.19 100.155783) (xy 122.88704 99.204675) (xy 122.6085 99.32005) (xy 122.525433 99.491217) (xy 123.19 100.155783) (xy 123.854567 99.491217)
(xy 123.854567 99.491217) (xy 123.854567 99.839649) (xy 123.364217 100.33) (xy 124.028783 100.994567) (xy 124.19995 100.9115) (xy 123.854567 99.839649) (xy 123.364217 100.33) (xy 124.028783 100.994567) (xy 124.19995 100.9115) (xy 124.345603 100.480745)
(xy 124.345603 100.480745) (xy 124.345603 101.296108) (xy 124.239435 101.402276) (xy 124.103571 101.346) (xy 123.800429 101.346) (xy 124.345603 101.296108) (xy 124.250731 101.39098) (xy 123.952 101.331072) (xy 123.775808 101.331072) (xy 123.854567 101.168783)
(xy 123.756894 101.346) (xy 123.7715 101.33995) (xy 123.854567 101.168783) (xy 123.19 100.504217) (xy 123.015783 100.678433) (xy 123.19 100.504217) (xy 123.015783 100.678433) (xy 123.015783 100.33) (xy 122.351217 99.665433) (xy 122.18005 99.7485)
(xy 123.015783 100.33) (xy 122.351217 99.665433) (xy 122.18005 99.7485) (xy 122.034397 100.179255) (xy 122.064675 100.63296) (xy 122.034397 100.179255) (xy 122.064675 100.63296) (xy 122.18005 100.9115) (xy 122.351217 100.994567) (xy 123.015783 100.33)
(xy 122.18005 100.9115) (xy 122.351217 100.994567) (xy 123.015783 100.33) (xy 123.015783 100.678433) (xy 122.525433 101.168783) (xy 123.015783 100.678433) (xy 122.525433 101.168783) (xy 122.604191 101.331072) (xy 122.428 101.331072) (xy 122.137452 101.387445)
(xy 122.6085 101.33995) (xy 122.626392 101.346) (xy 122.276429 101.346) (xy 121.996362 101.462008) (xy 121.782008 101.676362) (xy 121.882087 101.555192) (xy 121.711148 101.808432) (xy 121.651072 102.108) (xy 121.651072 103.632) (xy 121.707445 103.922548)
(xy 121.666 101.956429) (xy 121.666 102.259571) (xy 121.666 103.783571) (xy 121.782008 104.063638) (xy 121.996362 104.277992) (xy 121.875192 104.177913) (xy 122.128432 104.348852) (xy 122.428 104.408928) (xy 123.952 104.408928) (xy 124.242548 104.352555)
(xy 122.276429 104.394) (xy 122.579571 104.394) (xy 124.103571 104.394) (xy 124.383638 104.277992) (xy 124.597992 104.063638) (xy 124.497913 104.184808) (xy 124.598142 104.036321) (xy 124.916847 103.972927) (xy 124.916848 103.972927) (xy 125.304144 103.714144)
(xy 124.610309 104.033901) (xy 124.916847 103.972927) (xy 124.916848 103.972927) (xy 125.304144 103.714144) (xy 126.224488 102.7938) (xy 126.224488 102.7938) (xy 129.844807 102.7938) (xy 130.003192 103.034913) (xy 130.256432 103.205852) (xy 130.556 103.265928)
(xy 129.857469 102.7938) (xy 129.910008 102.920638) (xy 130.124362 103.134992) (xy 130.404429 103.251) (xy 130.707571 103.251) (xy 132.334 103.265928) (xy 132.624548 103.209555) (xy 132.879913 103.041808) (xy 133.04732 102.7938) (xy 142.410992 102.7938)
(xy 132.485571 103.251) (xy 132.765638 103.134992) (xy 132.979992 102.920638) (xy 133.03253 102.7938) (xy 142.410992 102.7938)
(xy 143.768082 104.15089) (xy 143.642278 104.4919) (xy 143.665741 105.089099) (xy 143.055305 105.261261) (xy 142.510498 105.690752) (xy 143.768082 104.15089) (xy 143.642278 104.4919) (xy 143.665741 105.089099) (xy 143.055305 105.261261) (xy 142.510498 105.690752)
(xy 142.226761 106.1974) (xy 142.1638 106.1974) (xy 141.706952 106.288273) (xy 141.319656 106.547056) (xy 140.125856 107.740856) (xy 142.226761 106.1974) (xy 142.1638 106.1974) (xy 141.706952 106.288273) (xy 141.319656 106.547056) (xy 140.125856 107.740856)
(xy 139.867073 108.128152) (xy 139.7762 108.585) (xy 139.7762 120.413059) (xy 139.73257 120.456613) (xy 139.509754 120.993214) (xy 139.867073 108.128152) (xy 139.7762 108.585) (xy 139.7762 120.413059) (xy 139.73257 120.456613) (xy 139.509754 120.993214)
(xy 139.509247 121.574237) (xy 139.731126 122.111226) (xy 139.7762 122.156378) (xy 139.7762 123.330512) (xy 138.570512 124.5362) (xy 139.509247 121.574237) (xy 139.731126 122.111226) (xy 139.7762 122.156378) (xy 139.7762 123.330512) (xy 138.570512 124.5362)
(xy 133.096 124.5362) (xy 133.096 109.625571) (xy 133.096 109.322429) (xy 133.096 107.544429) (xy 132.979992 107.264362) (xy 133.110928 124.5362) (xy 133.110928 109.474) (xy 133.110928 107.696) (xy 133.054555 107.405452) (xy 132.886808 107.150087)
(xy 132.765638 107.050008) (xy 132.485571 106.934) (xy 132.182429 106.934) (xy 130.404429 106.934) (xy 130.124362 107.050008) (xy 132.633568 106.979148) (xy 132.334 106.919072) (xy 130.556 106.919072) (xy 130.265452 106.975445) (xy 130.010087 107.143192)
(xy 129.910008 107.264362) (xy 129.794 107.544429) (xy 129.794 107.847571) (xy 129.794 108.547712) (xy 128.410512 109.9312) (xy 129.839148 107.396432) (xy 129.779072 107.696) (xy 129.779072 108.56264) (xy 128.410512 109.9312) (xy 124.579767 109.9312)
(xy 124.59783 109.9312) (xy 124.383638 109.717008) (xy 124.345603 109.701253) (xy 124.345603 108.735745) (xy 124.315325 108.28204) (xy 124.504808 109.817087) (xy 124.345603 109.709622) (xy 124.345603 108.735745) (xy 124.315325 108.28204) (xy 124.19995 108.0035)
(xy 124.19995 108.0035) (xy 124.028783 107.920433) (xy 123.854567 108.094649) (xy 123.854567 107.746217) (xy 123.7715 107.57505) (xy 124.028783 107.920433) (xy 123.854567 108.094649) (xy 123.854567 107.746217) (xy 123.7715 107.57505) (xy 123.340745 107.429397)
(xy 123.340745 107.429397) (xy 122.88704 107.459675) (xy 122.6085 107.57505) (xy 122.525433 107.746217) (xy 123.19 108.410783) (xy 122.88704 107.459675) (xy 122.6085 107.57505) (xy 122.525433 107.746217) (xy 123.19 108.410783) (xy 123.854567 107.746217)
(xy 123.854567 107.746217) (xy 123.854567 108.094649) (xy 123.364217 108.585) (xy 124.028783 109.249567) (xy 124.19995 109.1665) (xy 123.854567 108.094649) (xy 123.364217 108.585) (xy 124.028783 109.249567) (xy 124.19995 109.1665) (xy 124.345603 108.735745)
(xy 124.345603 108.735745) (xy 124.345603 109.701253) (xy 124.103571 109.601) (xy 123.800429 109.601) (xy 123.756894 109.601) (xy 124.345603 109.709622) (xy 124.251568 109.646148) (xy 123.952 109.586072) (xy 123.775808 109.586072) (xy 123.854567 109.423783)
(xy 123.7715 109.59495) (xy 123.854567 109.423783) (xy 123.19 108.759217) (xy 123.015783 108.933433) (xy 123.015783 108.585) (xy 123.19 108.759217) (xy 123.015783 108.933433) (xy 123.015783 108.585) (xy 122.351217 107.920433) (xy 122.18005 108.0035)
(xy 122.351217 107.920433) (xy 122.18005 108.0035) (xy 122.034397 108.434255) (xy 122.064675 108.88796) (xy 122.18005 109.1665) (xy 122.034397 108.434255) (xy 122.064675 108.88796) (xy 122.18005 109.1665) (xy 122.351217 109.249567) (xy 123.015783 108.585)
(xy 122.351217 109.249567) (xy 123.015783 108.585) (xy 123.015783 108.933433) (xy 122.525433 109.423783) (xy 122.6085 109.59495) (xy 123.015783 108.933433) (xy 122.525433 109.423783) (xy 122.604191 109.586072) (xy 122.428 109.586072) (xy 122.137452 109.642445)
(xy 122.626392 109.601) (xy 122.276429 109.601) (xy 121.996362 109.717008) (xy 121.782008 109.931362) (xy 121.666 110.211429) (xy 121.882087 109.810192) (xy 121.711148 110.063432) (xy 121.651072 110.363) (xy 121.651072 111.887) (xy 121.707445 112.177548)
(xy 121.666 110.514571) (xy 121.666 112.038571) (xy 121.782008 112.318638) (xy 121.9962 112.53283) (xy 121.9962 114.3) (xy 121.875192 112.432913) (xy 121.9962 112.514594) (xy 121.9962 114.3) (xy 122.087073 114.756848) (xy 122.345856 115.144144)
(xy 122.087073 114.756848) (xy 122.345856 115.144144) (xy 122.980856 115.779144) (xy 123.368153 116.037927) (xy 123.529353 116.069991) (xy 122.980856 115.779144) (xy 123.368153 116.037927) (xy 123.529353 116.069991) (xy 123.631613 116.17243) (xy 124.168214 116.395246)
(xy 123.631613 116.17243) (xy 124.168214 116.395246) (xy 124.749237 116.395753) (xy 125.286226 116.173874) (xy 125.69743 115.763387) (xy 124.749237 116.395753) (xy 125.286226 116.173874) (xy 125.69743 115.763387) (xy 125.920246 115.226786) (xy 125.920753 114.645763)
(xy 125.920246 115.226786) (xy 125.920753 114.645763) (xy 125.698874 114.108774) (xy 125.288387 113.69757) (xy 124.751786 113.474754) (xy 125.698874 114.108774) (xy 125.288387 113.69757) (xy 124.751786 113.474754) (xy 124.3838 113.474432) (xy 124.3838 112.514767)
(xy 124.3838 113.474432) (xy 124.3838 112.53283) (xy 124.59783 112.3188) (xy 128.905 112.3188) (xy 129.361847 112.227927) (xy 124.497913 112.439808) (xy 124.579594 112.3188) (xy 128.905 112.3188) (xy 129.361847 112.227927) (xy 129.361848 112.227927)
(xy 129.361848 112.227927) (xy 129.749144 111.969144) (xy 131.482288 110.236) (xy 132.485571 110.236) (xy 132.765638 110.119992) (xy 129.749144 111.969144) (xy 131.46736 110.250928) (xy 132.334 110.250928) (xy 132.624548 110.194555) (xy 132.879913 110.026808)
(xy 132.979992 109.905638) (xy 133.096 109.625571) (xy 133.096 124.5362) (xy 130.175 124.5362) (xy 129.718152 124.627073) (xy 133.050852 109.773568) (xy 133.110928 109.474) (xy 133.110928 124.5362) (xy 130.175 124.5362) (xy 129.718152 124.627073)
(xy 129.330856 124.885856) (xy 128.060856 126.155856) (xy 127.802073 126.543152) (xy 127.7112 127) (xy 127.7112 130.175) (xy 129.330856 124.885856) (xy 128.060856 126.155856) (xy 127.802073 126.543152) (xy 127.7112 127) (xy 127.7112 130.175)
(xy 127.802073 130.631848) (xy 128.060856 131.019144) (xy 128.804212 131.7625) (xy 124.918382 131.7625) (xy 125.557257 131.12474) (xy 127.802073 130.631848) (xy 128.060856 131.019144) (xy 128.804212 131.7625) (xy 124.918382 131.7625) (xy 125.557257 131.12474)
(xy 125.983514 130.098199) (xy 125.984484 128.986677) (xy 125.560019 127.959394) (xy 125.552271 127.951632) (xy 125.552271 122.69054) (xy 125.983514 130.098199) (xy 125.984484 128.986677) (xy 125.560019 127.959394) (xy 125.552271 127.951632) (xy 125.552271 122.69054)

View File

@ -1,12 +1,12 @@
(export (version D) (export (version D)
(design (design
(source F:/kicad-launchpad/testing/demos/ecc83/ecc83-pp_v2.sch) (source F:/kicad-launchpad/testing/demos/ecc83/ecc83-pp_v2.sch)
(date "01/01/2015 18:25:50") (date "01/01/2015 20:57:24")
(tool "Eeschema (2014-12-31 BZR 5344)-product")) (tool "Eeschema (2014-12-31 BZR 5344)-product"))
(components (components
(comp (ref U1) (comp (ref U1)
(value ECC83) (value ECC83)
(footprint Valves:VALVE-ECC-83-1) (footprint Valves:VALVE-ECC-83-2)
(libsource (lib valves) (part ECC83)) (libsource (lib valves) (part ECC83))
(sheetpath (names /) (tstamps /)) (sheetpath (names /) (tstamps /))
(tstamp 48B4F266)) (tstamp 48B4F266))
@ -95,18 +95,6 @@
(sheetpath (names /) (tstamps /)) (sheetpath (names /) (tstamps /))
(tstamp 54A58391))) (tstamp 54A58391)))
(libparts (libparts
(libpart (lib device) (part C)
(description "Condensateur non polarise")
(footprints
(fp SM*)
(fp C?)
(fp C1-1))
(fields
(field (name Reference) C)
(field (name Value) C))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib device) (part R) (libpart (lib device) (part R)
(description Resistance) (description Resistance)
(footprints (footprints
@ -138,6 +126,18 @@
(pin (num 7) (name G) (type input)) (pin (num 7) (name G) (type input))
(pin (num 8) (name K) (type BiDi)) (pin (num 8) (name K) (type BiDi))
(pin (num 9) (name F2) (type power_in)))) (pin (num 9) (name F2) (type power_in))))
(libpart (lib device) (part C)
(description "Condensateur non polarise")
(footprints
(fp SM*)
(fp C?)
(fp C1-1))
(fields
(field (name Reference) C)
(field (name Value) C))
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib conn) (part CONN_1) (libpart (lib conn) (part CONN_1)
(description "1 pin") (description "1 pin")
(fields (fields

View File

@ -5,25 +5,6 @@ LIBS:valves
LIBS:conn LIBS:conn
LIBS:linear LIBS:linear
LIBS:regul LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:special
LIBS:microcontrollers
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:contrib
LIBS:ecc83-pp_v2-cache LIBS:ecc83-pp_v2-cache
EELAYER 25 0 EELAYER 25 0
EELAYER END EELAYER END
@ -105,7 +86,7 @@ U 3 1 48B4F266
P 2000 6100 P 2000 6100
F 0 "U1" H 2130 6410 50 0000 C CNN F 0 "U1" H 2130 6410 50 0000 C CNN
F 1 "ECC83" H 2350 5800 50 0000 C CNN F 1 "ECC83" H 2350 5800 50 0000 C CNN
F 2 "Valves:VALVE-ECC-83-1" H 2450 5650 50 0000 C CNN F 2 "Valves:VALVE-ECC-83-2" V 1750 6100 30 0000 C CNN
F 3 "" H 2000 6100 60 0001 C CNN F 3 "" H 2000 6100 60 0001 C CNN
3 2000 6100 3 2000 6100
1 0 0 -1 1 0 0 -1
@ -116,7 +97,7 @@ U 2 1 48B4F263
P 4950 4450 P 4950 4450
F 0 "U1" H 5080 4760 50 0000 C CNN F 0 "U1" H 5080 4760 50 0000 C CNN
F 1 "ECC83" H 5150 4100 50 0000 C CNN F 1 "ECC83" H 5150 4100 50 0000 C CNN
F 2 "Valves:VALVE-ECC-83-1" H 5150 4000 50 0000 C CNN F 2 "Valves:VALVE-ECC-83-2" H 5150 4000 30 0000 C CNN
F 3 "" H 4950 4450 60 0001 C CNN F 3 "" H 4950 4450 60 0001 C CNN
2 4950 4450 2 4950 4450
1 0 0 -1 1 0 0 -1
@ -127,7 +108,7 @@ U 1 1 48B4F256
P 5750 4450 P 5750 4450
F 0 "U1" H 5880 4760 50 0000 C CNN F 0 "U1" H 5880 4760 50 0000 C CNN
F 1 "ECC83" H 5500 4150 50 0000 C CNN F 1 "ECC83" H 5500 4150 50 0000 C CNN
F 2 "Valves:VALVE-ECC-83-1" H 5750 3950 50 0000 C CNN F 2 "Valves:VALVE-ECC-83-2" H 5750 3950 30 0000 C CNN
F 3 "" H 5750 4450 60 0001 C CNN F 3 "" H 5750 4450 60 0001 C CNN
1 5750 4450 1 5750 4450
-1 0 0 -1 -1 0 0 -1
@ -193,7 +174,7 @@ U 1 1 456A8ACC
P 2000 7100 P 2000 7100
F 0 "P4" V 1950 7100 40 0000 C CNN F 0 "P4" V 1950 7100 40 0000 C CNN
F 1 "CONN_2" V 2050 7100 40 0000 C CNN F 1 "CONN_2" V 2050 7100 40 0000 C CNN
F 2 "pin_array:pin_array_1x02" V 2150 7100 60 0000 C CNN F 2 "pin_array:pin_array_1x02" V 2150 7100 30 0000 C CNN
F 3 "" H 2000 7100 60 0001 C CNN F 3 "" H 2000 7100 60 0001 C CNN
1 2000 7100 1 2000 7100
0 1 1 0 0 1 1 0
@ -204,7 +185,7 @@ U 1 1 4549F4BE
P 6700 4050 P 6700 4050
F 0 "C1" H 6750 4150 50 0000 L CNN F 0 "C1" H 6750 4150 50 0000 L CNN
F 1 "10uF" H 6450 4150 50 0000 L CNN F 1 "10uF" H 6450 4150 50 0000 L CNN
F 2 "discret:C2V10" H 6700 4050 60 0000 C CNN F 2 "discret:C2V10" H 6700 3950 30 0000 C CNN
F 3 "" H 6700 4050 60 0001 C CNN F 3 "" H 6700 4050 60 0001 C CNN
1 6700 4050 1 6700 4050
1 0 0 -1 1 0 0 -1
@ -237,7 +218,7 @@ U 1 1 4549F4A5
P 7300 3950 P 7300 3950
F 0 "P3" V 7250 3950 40 0000 C CNN F 0 "P3" V 7250 3950 40 0000 C CNN
F 1 "POWER" V 7350 3950 40 0000 C CNN F 1 "POWER" V 7350 3950 40 0000 C CNN
F 2 "pin_array:pin_array_1x02" H 7300 4150 60 0000 C CNN F 2 "pin_array:pin_array_1x02" V 7450 3950 30 0000 C CNN
F 3 "" H 7300 3950 60 0001 C CNN F 3 "" H 7300 3950 60 0001 C CNN
1 7300 3950 1 7300 3950
1 0 0 -1 1 0 0 -1
@ -248,7 +229,7 @@ U 1 1 4549F46C
P 7300 4900 P 7300 4900
F 0 "P2" V 7250 4900 40 0000 C CNN F 0 "P2" V 7250 4900 40 0000 C CNN
F 1 "OUT" V 7350 4900 40 0000 C CNN F 1 "OUT" V 7350 4900 40 0000 C CNN
F 2 "pin_array:pin_array_1x02" H 7300 5100 60 0000 C CNN F 2 "pin_array:pin_array_1x02" V 7450 4900 30 0000 C CNN
F 3 "" H 7300 4900 60 0001 C CNN F 3 "" H 7300 4900 60 0001 C CNN
1 7300 4900 1 7300 4900
1 0 0 -1 1 0 0 -1
@ -259,7 +240,7 @@ U 1 1 4549F464
P 3800 4900 P 3800 4900
F 0 "P1" V 3750 4900 40 0000 C CNN F 0 "P1" V 3750 4900 40 0000 C CNN
F 1 "IN" V 3850 4900 40 0000 C CNN F 1 "IN" V 3850 4900 40 0000 C CNN
F 2 "pin_array:pin_array_1x02" H 3750 4700 60 0000 C CNN F 2 "pin_array:pin_array_1x02" V 3950 4900 30 0000 C CNN
F 3 "" H 3800 4900 60 0001 C CNN F 3 "" H 3800 4900 60 0001 C CNN
1 3800 4900 1 3800 4900
-1 0 0 1 -1 0 0 1
@ -270,7 +251,7 @@ U 1 1 4549F3BE
P 6500 4800 P 6500 4800
F 0 "C2" H 6550 4900 50 0000 L CNN F 0 "C2" H 6550 4900 50 0000 L CNN
F 1 "680nF" H 6550 4700 50 0000 L CNN F 1 "680nF" H 6550 4700 50 0000 L CNN
F 2 "discret:CP8" H 6400 4900 60 0000 C CNN F 2 "discret:CP8" V 6350 4800 30 0000 C CNN
F 3 "" H 6500 4800 60 0001 C CNN F 3 "" H 6500 4800 60 0001 C CNN
1 6500 4800 1 6500 4800
0 1 1 0 0 1 1 0
@ -314,7 +295,7 @@ U 1 1 4549F38A
P 6300 4250 P 6300 4250
F 0 "R1" V 6380 4250 50 0000 C CNN F 0 "R1" V 6380 4250 50 0000 C CNN
F 1 "1.5K" V 6300 4250 50 0000 C CNN F 1 "1.5K" V 6300 4250 50 0000 C CNN
F 2 "discret:R3" H 6400 4150 60 0000 C CNN F 2 "discret:R3" V 6450 4250 30 0000 C CNN
F 3 "" H 6300 4250 60 0001 C CNN F 3 "" H 6300 4250 60 0001 C CNN
1 6300 4250 1 6300 4250
1 0 0 -1 1 0 0 -1

View File

@ -419,8 +419,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
AddMenuItem( preferencesMenu, AddMenuItem( preferencesMenu,
ID_CONFIG_READ, ID_CONFIG_READ,
_( "&Read Preferences" ), _( "Load Prefe&rences" ),
_( "Read application preferences" ), _( "Load application preferences" ),
KiBitmap( read_setup_xpm ) ); KiBitmap( read_setup_xpm ) );
// Menu Tools: // Menu Tools:
@ -446,8 +446,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
// ERC // ERC
AddMenuItem( toolsMenu, AddMenuItem( toolsMenu,
ID_GET_ERC, ID_GET_ERC,
_( "Electric Rules &Checker" ), _( "Electrical Rules &Checker" ),
_( "Perform electrical rule check" ), _( "Perform electrical rules check" ),
KiBitmap( erc_xpm ) ); KiBitmap( erc_xpm ) );
AddMenuItem( toolsMenu, AddMenuItem( toolsMenu,

View File

@ -35,6 +35,10 @@ SCH_BASE_FRAME::SCH_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent,
EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition, EDA_DRAW_FRAME( aKiway, aParent, aWindowType, aTitle, aPosition,
aSize, aStyle, aFrameName ) aSize, aStyle, aFrameName )
{ {
m_zoomLevelCoeff = 11.0; // Adjusted to roughly displays zoom level = 1
// when the screen shows a 1:1 image
// obviously depends on the monitor,
// but this is an acceptable value
} }
@ -64,6 +68,10 @@ SCH_SCREEN* SCH_BASE_FRAME::GetScreen() const
return (SCH_SCREEN*) EDA_DRAW_FRAME::GetScreen(); return (SCH_SCREEN*) EDA_DRAW_FRAME::GetScreen();
} }
const wxString SCH_BASE_FRAME::GetZoomLevelIndicator() const
{
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
}
void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings ) void SCH_BASE_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
{ {

View File

@ -57,21 +57,13 @@
#define EESCHEMA_FILE_STAMP "EESchema" #define EESCHEMA_FILE_STAMP "EESchema"
/* Default Eeschema zoom values. Limited to 17 values to keep a decent size /* Default zoom values. Limited to these values to keep a decent size
* to menus * to menus
*/ */
/* Please, note: wxMSW before version 2.9 seems have
* problems with zoom values < 1 ( i.e. userscale > 1) and needs to be patched:
* edit file <wxWidgets>/src/msw/dc.cpp
* search for line static const int VIEWPORT_EXTENT = 1000;
* and replace by static const int VIEWPORT_EXTENT = 10000;
* see http://trac.wxwidgets.org/ticket/9554
* This is a workaround that is not a full fix, but remaining artifacts are acceptable
*/
static double SchematicZoomList[] = static double SchematicZoomList[] =
{ {
0.5, 0.7, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 8.0, 0.5, 0.7, 1.0, 1.5, 2.0, 3.0, 4.0, 6.0, 8.0, 11.0,
12.0, 16.0, 23.0, 32.0, 48.0, 64.0, 80.0, 128.0 13.0, 16.0, 20.0, 26.0, 32.0, 48.0, 64.0, 80.0, 128.0
}; };
#define MM_TO_SCH_UNITS 1000.0 / 25.4 //schematic internal unites are mils #define MM_TO_SCH_UNITS 1000.0 / 25.4 //schematic internal unites are mils

View File

@ -146,7 +146,7 @@ void SCH_EDIT_FRAME::ReCreateHToolbar()
HELP_ANNOTATE ); HELP_ANNOTATE );
m_mainToolBar->AddTool( ID_GET_ERC, wxEmptyString, KiBitmap( erc_xpm ), m_mainToolBar->AddTool( ID_GET_ERC, wxEmptyString, KiBitmap( erc_xpm ),
_( "Perform electrical rule check" ) ); _( "Perform electrical rules check" ) );
m_mainToolBar->AddTool( ID_GET_NETLIST, wxEmptyString, KiBitmap( netlist_xpm ), m_mainToolBar->AddTool( ID_GET_NETLIST, wxEmptyString, KiBitmap( netlist_xpm ),
_( "Generate netlist" ) ); _( "Generate netlist" ) );

View File

@ -46,6 +46,7 @@
static const double gbrZoomList[] = static const double gbrZoomList[] =
{ {
ZOOM_FACTOR( 0.5 ), ZOOM_FACTOR( 0.5 ),
ZOOM_FACTOR( 0.75 ),
ZOOM_FACTOR( 1.0 ), ZOOM_FACTOR( 1.0 ),
ZOOM_FACTOR( 1.5 ), ZOOM_FACTOR( 1.5 ),
ZOOM_FACTOR( 2.0 ), ZOOM_FACTOR( 2.0 ),
@ -58,7 +59,8 @@ static const double gbrZoomList[] =
ZOOM_FACTOR( 35.0 ), ZOOM_FACTOR( 35.0 ),
ZOOM_FACTOR( 50.0 ), ZOOM_FACTOR( 50.0 ),
ZOOM_FACTOR( 80.0 ), ZOOM_FACTOR( 80.0 ),
ZOOM_FACTOR( 120.0 ), ZOOM_FACTOR( 110.0 ),
ZOOM_FACTOR( 150.0 ),
ZOOM_FACTOR( 200.0 ), ZOOM_FACTOR( 200.0 ),
ZOOM_FACTOR( 350.0 ), ZOOM_FACTOR( 350.0 ),
ZOOM_FACTOR( 500.0 ), ZOOM_FACTOR( 500.0 ),

View File

@ -70,6 +70,11 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent ):
{ {
m_colorsSettings = &g_ColorsSettings; m_colorsSettings = &g_ColorsSettings;
m_gerberLayout = NULL; m_gerberLayout = NULL;
m_zoomLevelCoeff = ZOOM_FACTOR( 110 ); // Adjusted to roughly displays zoom level = 1
// when the screen shows a 1:1 image
// obviously depends on the monitor,
// but this is an acceptable value
PAGE_INFO pageInfo( wxT( "GERBER" ) ); PAGE_INFO pageInfo( wxT( "GERBER" ) );
SetPageSettings( pageInfo ); SetPageSettings( pageInfo );
@ -863,12 +868,12 @@ void GERBVIEW_FRAME::UpdateStatusBar()
{ {
case INCHES: case INCHES:
absformatter = wxT( "X %.6f Y %.6f" ); absformatter = wxT( "X %.6f Y %.6f" );
locformatter = wxT( "dx %.6f dy %.6f d %.6f" ); locformatter = wxT( "dx %.6f dy %.6f dist %.4f" );
break; break;
case MILLIMETRES: case MILLIMETRES:
absformatter = wxT( "X %.5f Y %.5f" ); absformatter = wxT( "X %.5f Y %.5f" );
locformatter = wxT( "dx %.5f dy %.5f d %.5f" ); locformatter = wxT( "dx %.5f dy %.5f dist %.3f" );
break; break;
case UNSCALED_UNITS: case UNSCALED_UNITS:
@ -894,3 +899,8 @@ void GERBVIEW_FRAME::UpdateStatusBar()
} }
} }
const wxString GERBVIEW_FRAME::GetZoomLevelIndicator() const
{
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
}

View File

@ -235,6 +235,14 @@ public:
double BestZoom(); double BestZoom();
void UpdateStatusBar(); void UpdateStatusBar();
/**
* Function GetZoomLevelIndicator
* returns a human readable value which can be displayed as zoom
* level indicator in dialogs.
* Virtual from the base class
*/
const wxString GetZoomLevelIndicator() const;
/** /**
* Function ReportMessage * Function ReportMessage
* Add a message (a string) in message list * Add a message (a string) in message list

View File

@ -452,6 +452,18 @@ public:
return m_grids; return m_grids;
} }
/**
* Function BuildGridsChoiceList().
* Build the human readable list of grid list, for menus or combo boxes
* the list shows the grid size both in mils or mm.
* @param aGridsList = a wxArrayString to populate
* @param aMmFirst = true to have mm first and mils after
* false to have mils first and mm after
* @return the index of the curr grid in list, if found or -1
*/
int BuildGridsChoiceList( wxArrayString& aGridsList, bool aMmFirst) const;
/** /**
* Function GetClass * Function GetClass
* returns the class name. * returns the class name.

View File

@ -1,10 +1,10 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2014-2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2007-2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com> * Copyright (C) 2007-2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2008-2015 Wayne Stambaugh <stambaughw@verizon.net>
* Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -278,7 +278,7 @@ bool EnsureTextCtrlWidth( wxTextCtrl* aCtrl, const wxString* aString = NULL );
* wxExecute()) * wxExecute())
*/ */
int ProcessExecute( const wxString& aCommandLine, int aFlags = wxEXEC_ASYNC, int ProcessExecute( const wxString& aCommandLine, int aFlags = wxEXEC_ASYNC,
wxProcess *callback = NULL ); wxProcess *callback = NULL );
/*******************/ /*******************/
@ -433,6 +433,12 @@ const wxString PrePendPath( const wxString& aEnvVar, const wxString& aPriorityPa
*/ */
wxConfigBase* GetNewConfig( const wxString& aProgName ); wxConfigBase* GetNewConfig( const wxString& aProgName );
/**
* Function GetKicadLockFilePath
* @return A wxString containing the path for lockfiles in Kicad
*/
wxString GetKicadLockFilePath();
/** /**
* Function GetKicadConfigPath * Function GetKicadConfigPath
* @return A wxString containing the config path for Kicad * @return A wxString containing the config path for Kicad

View File

@ -65,6 +65,9 @@ protected:
EDA_COLOR_T m_gridColor; // Grid color EDA_COLOR_T m_gridColor; // Grid color
EDA_COLOR_T m_drawBgColor; ///< the background color of the draw canvas EDA_COLOR_T m_drawBgColor; ///< the background color of the draw canvas
///< BLACK for Pcbnew, BLACK or WHITE for eeschema ///< BLACK for Pcbnew, BLACK or WHITE for eeschema
double m_zoomLevelCoeff; ///< a suitable value to convert the internal zoom scaling factor
// to a zoom level value which rougly gives 1.0 when the board/schematic
// is at scale = 1
/// The area to draw on. /// The area to draw on.
EDA_DRAW_PANEL* m_canvas; EDA_DRAW_PANEL* m_canvas;
@ -329,6 +332,17 @@ public:
*/ */
virtual void AddMenuZoomAndGrid( wxMenu* aMasterMenu ); virtual void AddMenuZoomAndGrid( wxMenu* aMasterMenu );
/**
* Function GetZoomLevelIndicator
* returns a human readable value which can be displayed as zoom
* level indicator in dialogs.
* this can be a percentage or other indicator.
* it is virtual because it could be different for pcbnew, gerbview or eeschema
* (different internal units and different purposes)
* note also adjust m_zoomLevelCoeff is the way to adjust the displayed value
*/
virtual const wxString GetZoomLevelIndicator() const;
void EraseMsgBox(); void EraseMsgBox();
void Process_PageSettings( wxCommandEvent& event ); void Process_PageSettings( wxCommandEvent& event );

View File

@ -200,12 +200,12 @@ public:
* @param aColor = text color * @param aColor = text color
* @param aDrawMode = GR_OR, GR_XOR.., -1 to use the current mode. * @param aDrawMode = GR_OR, GR_XOR.., -1 to use the current mode.
* @param aDisplay_mode = LINE, FILLED or SKETCH * @param aDisplay_mode = LINE, FILLED or SKETCH
* @param aAnchor_color = anchor color ( UNSPECIFIED = do not draw anchor ). * @param aAnchor_color = anchor color ( UNSPECIFIED_COLOR = do not draw anchor ).
*/ */
void Draw( EDA_RECT* aClipBox, wxDC* aDC, void Draw( EDA_RECT* aClipBox, wxDC* aDC,
const wxPoint& aOffset, EDA_COLOR_T aColor, const wxPoint& aOffset, EDA_COLOR_T aColor,
GR_DRAWMODE aDrawMode, EDA_DRAW_MODE_T aDisplay_mode = LINE, GR_DRAWMODE aDrawMode, EDA_DRAW_MODE_T aDisplay_mode = LINE,
EDA_COLOR_T aAnchor_color = UNSPECIFIED_COLOR ); EDA_COLOR_T aAnchor_color = EDA_COLOR_T(UNSPECIFIED_COLOR) );
/** /**
* Convert the text shape to a list of segment * Convert the text shape to a list of segment

View File

@ -54,6 +54,14 @@ public:
SCH_SCREEN* GetScreen() const; // overload EDA_DRAW_FRAME SCH_SCREEN* GetScreen() const; // overload EDA_DRAW_FRAME
/**
* Function GetZoomLevelIndicator
* returns a human readable value which can be displayed as zoom
* level indicator in dialogs.
* Virtual from the base class
*/
const wxString GetZoomLevelIndicator() const;
void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload EDA_DRAW_FRAME void SetPageSettings( const PAGE_INFO& aPageSettings ); // overload EDA_DRAW_FRAME
const PAGE_INFO& GetPageSettings () const; // overload EDA_DRAW_FRAME const PAGE_INFO& GetPageSettings () const; // overload EDA_DRAW_FRAME
const wxSize GetPageSizeIU() const; // overload EDA_DRAW_FRAME const wxSize GetPageSizeIU() const; // overload EDA_DRAW_FRAME

View File

@ -201,6 +201,14 @@ public:
*/ */
virtual double BestZoom(); virtual double BestZoom();
/**
* Function GetZoomLevelIndicator
* returns a human readable value which can be displayed as zoom
* level indicator in dialogs.
* Virtual from the base class
*/
const wxString GetZoomLevelIndicator() const;
virtual void Show3D_Frame( wxCommandEvent& event ); virtual void Show3D_Frame( wxCommandEvent& event );
// Read/write functions: // Read/write functions:

View File

@ -52,8 +52,10 @@ static const double pl_editorZoomList[] =
ZOOM_FACTOR( 50.0 ), ZOOM_FACTOR( 50.0 ),
ZOOM_FACTOR( 80.0 ), ZOOM_FACTOR( 80.0 ),
ZOOM_FACTOR( 120.0 ), ZOOM_FACTOR( 120.0 ),
ZOOM_FACTOR( 200.0 ), ZOOM_FACTOR( 160.0 ),
ZOOM_FACTOR( 350.0 ), ZOOM_FACTOR( 230.0 ),
ZOOM_FACTOR( 290.0 ),
ZOOM_FACTOR( 380.0 ),
ZOOM_FACTOR( 500.0 ), ZOOM_FACTOR( 500.0 ),
ZOOM_FACTOR( 750.0 ), ZOOM_FACTOR( 750.0 ),
ZOOM_FACTOR( 1000.0 ), ZOOM_FACTOR( 1000.0 ),

View File

@ -27,7 +27,6 @@
*/ */
#include <fctsys.h> #include <fctsys.h>
//#include <pgm_base.h>
#include <kiface_i.h> #include <kiface_i.h>
#include <class_drawpanel.h> #include <class_drawpanel.h>
#include <build_version.h> #include <build_version.h>
@ -58,6 +57,10 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, PL_EDITOR_FRAME_NAME ) wxDefaultPosition, wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, PL_EDITOR_FRAME_NAME )
{ {
m_FrameName = PL_EDITOR_FRAME_NAME; m_FrameName = PL_EDITOR_FRAME_NAME;
m_zoomLevelCoeff = 290.0; // Adjusted to roughly displays zoom level = 1
// when the screen shows a 1:1 image
// obviously depends on the monitor,
// but this is an acceptable value
m_showAxis = false; // true to show X and Y axis on screen m_showAxis = false; // true to show X and Y axis on screen
m_showGridAxis = true; m_showGridAxis = true;
@ -404,6 +407,9 @@ void PL_EDITOR_FRAME::UpdateStatusBar()
if( !screen ) if( !screen )
return; return;
// Display Zoom level:
EDA_DRAW_FRAME::UpdateStatusBar();
// coodinate origin can be the paper Top Left corner, // coodinate origin can be the paper Top Left corner,
// or each of 4 page corners // or each of 4 page corners
// We know the origin, and the orientation of axis // We know the origin, and the orientation of axis
@ -491,10 +497,6 @@ void PL_EDITOR_FRAME::UpdateStatusBar()
line.Printf( locformatter, dXpos, dYpos ); line.Printf( locformatter, dXpos, dYpos );
SetStatusText( line, 3 ); SetStatusText( line, 3 );
// Display Zoom level: zoom = zoom_coeff/ZoomScalar
line.Printf( wxT( "Z %.1f" ), screen->GetZoom() );
SetStatusText( line, 1 );
// Display corner reference for coord origin // Display corner reference for coord origin
line.Printf( _("coord origin: %s"), line.Printf( _("coord origin: %s"),
m_originSelectBox->GetString( m_originSelectChoice ). GetData() ); m_originSelectBox->GetString( m_originSelectChoice ). GetData() );
@ -773,3 +775,9 @@ void PL_EDITOR_FRAME::OnNewPageLayout()
Zoom_Automatique( true ); Zoom_Automatique( true );
m_canvas->Refresh(); m_canvas->Refresh();
} }
const wxString PL_EDITOR_FRAME::GetZoomLevelIndicator() const
{
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
}

View File

@ -108,6 +108,14 @@ public:
const PAGE_INFO& GetPageSettings () const; // overload EDA_DRAW_FRAME const PAGE_INFO& GetPageSettings () const; // overload EDA_DRAW_FRAME
const wxSize GetPageSizeIU() const; // overload EDA_DRAW_FRAME const wxSize GetPageSizeIU() const; // overload EDA_DRAW_FRAME
/**
* Function GetZoomLevelIndicator
* returns a human readable value which can be displayed as zoom
* level indicator in dialogs.
* Virtual from the base class
*/
const wxString GetZoomLevelIndicator() const;
PL_EDITOR_SCREEN* GetScreen() const // overload EDA_DRAW_FRAME PL_EDITOR_SCREEN* GetScreen() const // overload EDA_DRAW_FRAME
{ {
return (PL_EDITOR_SCREEN*) EDA_DRAW_FRAME::GetScreen(); return (PL_EDITOR_SCREEN*) EDA_DRAW_FRAME::GetScreen();

View File

@ -116,6 +116,11 @@ PCB_BASE_FRAME::PCB_BASE_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAME_T aFrame
m_FastGrid2 = 0; m_FastGrid2 = 0;
m_auxiliaryToolBar = NULL; m_auxiliaryToolBar = NULL;
m_zoomLevelCoeff = 110.0 * IU_PER_DECIMILS; // Adjusted to roughly displays zoom level = 1
// when the screen shows a 1:1 image
// obviously depends on the monitor,
// but this is an acceptable value
} }
@ -630,8 +635,6 @@ void PCB_BASE_FRAME::SetToolID( int aId, int aCursor, const wxString& aToolMsg )
*/ */
void PCB_BASE_FRAME::UpdateStatusBar() void PCB_BASE_FRAME::UpdateStatusBar()
{ {
EDA_DRAW_FRAME::UpdateStatusBar();
PCB_SCREEN* screen = GetScreen(); PCB_SCREEN* screen = GetScreen();
if( !screen ) if( !screen )
@ -644,6 +647,8 @@ void PCB_BASE_FRAME::UpdateStatusBar()
wxString line; wxString line;
wxString locformatter; wxString locformatter;
EDA_DRAW_FRAME::UpdateStatusBar();
if( DisplayOpt.DisplayPolarCood ) // display polar coordinates if( DisplayOpt.DisplayPolarCood ) // display polar coordinates
{ {
double theta, ro; double theta, ro;
@ -657,26 +662,16 @@ void PCB_BASE_FRAME::UpdateStatusBar()
wxString formatter; wxString formatter;
switch( g_UserUnit ) switch( g_UserUnit )
{ {
#if defined( USE_PCBNEW_NANOMETRE )
case INCHES: case INCHES:
formatter = wxT( "Ro %.6f Th %.1f" ); formatter = wxT( "Ro %.6f Th %.1f" );
break; break;
case MILLIMETRES: case MILLIMETRES:
formatter = wxT( "Ro %.6f Th %.1f" ); formatter = wxT( "Ro %.6f Th %.1f" );
break; break;
#else
case INCHES:
formatter = wxT( "Ro %.4f Th %.1f" );
break;
case MILLIMETRES:
formatter = wxT( "Ro %.3f Th %.1f" );
break;
#endif
case UNSCALED_UNITS: case UNSCALED_UNITS:
formatter = wxT( "Ro %f Th %f" ); formatter = wxT( "Ro %f Th %f" );
break; break;
} }
@ -696,17 +691,17 @@ void PCB_BASE_FRAME::UpdateStatusBar()
{ {
case INCHES: case INCHES:
absformatter = wxT( "X %.6f Y %.6f" ); absformatter = wxT( "X %.6f Y %.6f" );
locformatter = wxT( "dx %.6f dy %.6f d %.6f" ); locformatter = wxT( "dx %.6f dy %.6f dist %.4f" );
break; break;
case MILLIMETRES: case MILLIMETRES:
absformatter = wxT( "X %.6f Y %.6f" ); absformatter = wxT( "X %.6f Y %.6f" );
locformatter = wxT( "dx %.6f dy %.6f d %.6f" ); locformatter = wxT( "dx %.6f dy %.6f dist %.3f" );
break; break;
case UNSCALED_UNITS: case UNSCALED_UNITS:
absformatter = wxT( "X %f Y %f" ); absformatter = wxT( "X %f Y %f" );
locformatter = wxT( "dx %f dy %f d %f" ); locformatter = wxT( "dx %f dy %f dist %f" );
break; break;
} }
@ -800,6 +795,12 @@ void PCB_BASE_FRAME::OnModify()
} }
const wxString PCB_BASE_FRAME::GetZoomLevelIndicator() const
{
return EDA_DRAW_FRAME::GetZoomLevelIndicator();
}
void PCB_BASE_FRAME::updateGridSelectBox() void PCB_BASE_FRAME::updateGridSelectBox()
{ {
UpdateStatusBar(); UpdateStatusBar();
@ -810,42 +811,16 @@ void PCB_BASE_FRAME::updateGridSelectBox()
// Update grid values with the current units setting. // Update grid values with the current units setting.
m_gridSelectBox->Clear(); m_gridSelectBox->Clear();
wxArrayString gridsList;
wxString msg; int icurr = GetScreen()->BuildGridsChoiceList( gridsList, g_UserUnit != INCHES );
wxString format = _( "Grid:");
switch( g_UserUnit )
{
case INCHES: // the grid size is displayed in mils
case MILLIMETRES:
format += wxT( " %.6f" );
break;
case UNSCALED_UNITS:
format += wxT( " %f" );
break;
}
for( size_t i = 0; i < GetScreen()->GetGridCount(); i++ ) for( size_t i = 0; i < GetScreen()->GetGridCount(); i++ )
{ {
GRID_TYPE& grid = GetScreen()->GetGrid( i ); GRID_TYPE& grid = GetScreen()->GetGrid( i );
double value = To_User_Unit( g_UserUnit, grid.m_Size.x ); m_gridSelectBox->Append( gridsList[i], (void*) &grid.m_Id );
if( g_UserUnit == INCHES )
value *= 1000;
if( grid.m_Id != ID_POPUP_GRID_USER )
{
msg.Printf( format.GetData(), value );
StripTrailingZeros( msg );
}
else
msg = _( "User Grid" );
m_gridSelectBox->Append( msg, (void*) &grid.m_Id );
if( ( m_LastGridSizeId + ID_POPUP_GRID_LEVEL_1000 ) == GetScreen()->GetGrid( i ).m_Id )
m_gridSelectBox->SetSelection( i );
} }
m_gridSelectBox->SetSelection( icurr );
} }
void PCB_BASE_FRAME::updateZoomSelectBox() void PCB_BASE_FRAME::updateZoomSelectBox()
@ -856,19 +831,15 @@ void PCB_BASE_FRAME::updateZoomSelectBox()
wxString msg; wxString msg;
m_zoomSelectBox->Clear(); m_zoomSelectBox->Clear();
m_zoomSelectBox->Append( _( "Auto" ) ); m_zoomSelectBox->Append( _( "Zoom Auto" ) );
m_zoomSelectBox->SetSelection( 0 ); m_zoomSelectBox->SetSelection( 0 );
for( unsigned i = 0; i < GetScreen()->m_ZoomList.size(); ++i ) for( unsigned i = 0; i < GetScreen()->m_ZoomList.size(); ++i )
{ {
msg = _( "Zoom " ); msg = _( "Zoom " );
wxString value = wxString::Format( wxT( "%g" ), double level = m_zoomLevelCoeff / (double)GetScreen()->m_ZoomList[i];
wxString value = wxString::Format( wxT( "%.2f" ), level );
// @todo could do scaling here and show a "percentage"
GetScreen()->m_ZoomList[i]
);
msg += value; msg += value;
m_zoomSelectBox->Append( msg ); m_zoomSelectBox->Append( msg );

View File

@ -52,6 +52,12 @@ class BOARD;
class MSG_PANEL_ITEM; class MSG_PANEL_ITEM;
enum INCLUDE_NPTH_T
{
DO_NOT_INCLUDE_NPTH = false,
INCLUDE_NPTH = true
};
/** /**
* Enum MODULE_ATTR_T * Enum MODULE_ATTR_T
* is the set of attributes allowed within a MODULE, using MODULE::SetAttributes() * is the set of attributes allowed within a MODULE, using MODULE::SetAttributes()
@ -425,12 +431,6 @@ public:
*/ */
D_PAD* GetPad( const wxPoint& aPosition, LSET aLayerMask = LSET::AllLayersMask() ); D_PAD* GetPad( const wxPoint& aPosition, LSET aLayerMask = LSET::AllLayersMask() );
enum INCLUDE_NPTH_T
{
DO_NOT_INCLUDE_NPTH = false,
INCLUDE_NPTH = true
};
/** /**
* GetPadCount * GetPadCount
* returns the number of pads. * returns the number of pads.
@ -439,7 +439,7 @@ public:
* non-plated through holes when false. * non-plated through holes when false.
* @return the number of pads according to \a aIncludeNPTH. * @return the number of pads according to \a aIncludeNPTH.
*/ */
unsigned GetPadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH ) const; unsigned GetPadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T( INCLUDE_NPTH ) ) const;
double GetArea() const { return m_Surface; } double GetArea() const { return m_Surface; }

View File

@ -62,6 +62,8 @@
Zoom 5 and 10 can create artefacts when drawing (integer overflow in low level graphic Zoom 5 and 10 can create artefacts when drawing (integer overflow in low level graphic
functions ) functions )
*/ */
#define DEFAULT_ZOOM ZOOM_FACTOR( 120 )
static const double pcbZoomList[] = static const double pcbZoomList[] =
{ {
ZOOM_FACTOR( 0.1 ), ZOOM_FACTOR( 0.1 ),
@ -73,17 +75,18 @@ static const double pcbZoomList[] =
ZOOM_FACTOR( 2.0 ), ZOOM_FACTOR( 2.0 ),
ZOOM_FACTOR( 3.0 ), ZOOM_FACTOR( 3.0 ),
ZOOM_FACTOR( 4.5 ), ZOOM_FACTOR( 4.5 ),
ZOOM_FACTOR( 7.0 ), ZOOM_FACTOR( 6.0 ),
ZOOM_FACTOR( 10.0 ), ZOOM_FACTOR( 8.0 ),
ZOOM_FACTOR( 11.0 ),
ZOOM_FACTOR( 15.0 ), ZOOM_FACTOR( 15.0 ),
ZOOM_FACTOR( 22.0 ), ZOOM_FACTOR( 22.0 ),
ZOOM_FACTOR( 35.0 ), ZOOM_FACTOR( 35.0 ),
ZOOM_FACTOR( 50.0 ), ZOOM_FACTOR( 50.0 ),
ZOOM_FACTOR( 80.0 ), ZOOM_FACTOR( 80.0 ),
ZOOM_FACTOR( 120.0 ), ZOOM_FACTOR( 110.0 ),
ZOOM_FACTOR( 150.0 ),
ZOOM_FACTOR( 200.0 ), ZOOM_FACTOR( 200.0 ),
ZOOM_FACTOR( 300.0 ), ZOOM_FACTOR( 300.0 ),
/* /*
The largest distance that wx can support is INT_MAX, since it represents The largest distance that wx can support is INT_MAX, since it represents
distance often in a wxCoord or wxSize. As a scalar, a distance is always distance often in a wxCoord or wxSize. As a scalar, a distance is always
@ -179,7 +182,7 @@ PCB_SCREEN::PCB_SCREEN( const wxSize& aPageSizeIU ) :
m_Route_Layer_TOP = F_Cu; // default layers pair for vias (bottom to top) m_Route_Layer_TOP = F_Cu; // default layers pair for vias (bottom to top)
m_Route_Layer_BOTTOM = B_Cu; m_Route_Layer_BOTTOM = B_Cu;
SetZoom( ZOOM_FACTOR( 120 ) ); // a default value for zoom SetZoom( DEFAULT_ZOOM ); // a default value for zoom
InitDataPoints( aPageSizeIU ); InitDataPoints( aPageSizeIU );
} }

View File

@ -714,7 +714,7 @@ void WIZARD_FPLIB_TABLE::selectLibsGithub() // select a set of library on Git
wxArrayString urls; wxArrayString urls;
// Run the web viewer and open the default URL: the default path // Run the web viewer and open the default URL: the default path
// or our github library depos // or our github library repos
wxString defaultURL = m_currLibDescr->m_DefaultPath; wxString defaultURL = m_currLibDescr->m_DefaultPath;
if( defaultURL.IsEmpty() ) if( defaultURL.IsEmpty() )

View File

@ -22,7 +22,7 @@ WIZARD_FPLIB_TABLE_BASE::WIZARD_FPLIB_TABLE_BASE( wxWindow* parent, wxWindowID i
wxBoxSizer* bSizerPage1; wxBoxSizer* bSizerPage1;
bSizerPage1 = new wxBoxSizer( wxVERTICAL ); bSizerPage1 = new wxBoxSizer( wxVERTICAL );
wxString m_rbFpLibFormatChoices[] = { _("KiCad (*.Pretty folder containing .kicad_mod files)"), _("GitHub (.Pretty lib stored on GitHub depos)"), _("Legacy ( old *.mod lib file)"), _("Eagle V6 xml library file"), _("Geda footprint folder (folder containing *.fp files)") }; wxString m_rbFpLibFormatChoices[] = { _("KiCad (*.Pretty folder containing .kicad_mod files)"), _("GitHub (.Pretty lib stored on GitHub repos)"), _("Legacy ( old *.mod lib file)"), _("Eagle V6 xml library file"), _("Geda footprint folder (folder containing *.fp files)") };
int m_rbFpLibFormatNChoices = sizeof( m_rbFpLibFormatChoices ) / sizeof( wxString ); int m_rbFpLibFormatNChoices = sizeof( m_rbFpLibFormatChoices ) / sizeof( wxString );
m_rbFpLibFormat = new wxRadioBox( m_wizPage1, wxID_ANY, _("Library Format:"), wxDefaultPosition, wxDefaultSize, m_rbFpLibFormatNChoices, m_rbFpLibFormatChoices, 1, wxRA_SPECIFY_COLS ); m_rbFpLibFormat = new wxRadioBox( m_wizPage1, wxID_ANY, _("Library Format:"), wxDefaultPosition, wxDefaultSize, m_rbFpLibFormatNChoices, m_rbFpLibFormatChoices, 1, wxRA_SPECIFY_COLS );
m_rbFpLibFormat->SetSelection( 0 ); m_rbFpLibFormat->SetSelection( 0 );

View File

@ -153,7 +153,7 @@
<property name="caption"></property> <property name="caption"></property>
<property name="caption_visible">1</property> <property name="caption_visible">1</property>
<property name="center_pane">0</property> <property name="center_pane">0</property>
<property name="choices">&quot;KiCad (*.Pretty folder containing .kicad_mod files)&quot; &quot;GitHub (.Pretty lib stored on GitHub depos)&quot; &quot;Legacy ( old *.mod lib file)&quot; &quot;Eagle V6 xml library file&quot; &quot;Geda footprint folder (folder containing *.fp files)&quot;</property> <property name="choices">&quot;KiCad (*.Pretty folder containing .kicad_mod files)&quot; &quot;GitHub (.Pretty lib stored on GitHub repos)&quot; &quot;Legacy ( old *.mod lib file)&quot; &quot;Eagle V6 xml library file&quot; &quot;Geda footprint folder (folder containing *.fp files)&quot;</property>
<property name="close_button">1</property> <property name="close_button">1</property>
<property name="context_help"></property> <property name="context_help"></property>
<property name="context_menu">1</property> <property name="context_menu">1</property>

View File

@ -548,7 +548,7 @@ bool Export_IDF3( BOARD* aPcb, const wxString& aFullFileName, bool aUseThou )
idfBoard.SetLibraryVersion( 0 ); idfBoard.SetLibraryVersion( 0 );
std::ostringstream ostr; std::ostringstream ostr;
ostr << "Created by KiCad " << TO_UTF8( GetBuildVersion() ); ostr << "KiCad " << TO_UTF8( GetBuildVersion() );
idfBoard.SetIDFSource( ostr.str() ); idfBoard.SetIDFSource( ostr.str() );
try try

View File

@ -52,7 +52,7 @@ bool PCB_EDIT_FRAME::Clear_Pcb( bool aQuery )
GetScreen()->ClearUndoRedoList(); GetScreen()->ClearUndoRedoList();
GetScreen()->ClrModify(); GetScreen()->ClrModify();
// Items visibility flags will be set becuse a new board will be created. // Items visibility flags will be set because a new board will be created.
// Grid and ratsnest can be left to their previous state // Grid and ratsnest can be left to their previous state
bool showGrid = IsElementVisible( GRID_VISIBLE ); bool showGrid = IsElementVisible( GRID_VISIBLE );
bool showRats = IsElementVisible( RATSNEST_VISIBLE ); bool showRats = IsElementVisible( RATSNEST_VISIBLE );
@ -68,11 +68,7 @@ bool PCB_EDIT_FRAME::Clear_Pcb( bool aQuery )
// clear filename, to avoid overwriting an old file // clear filename, to avoid overwriting an old file
GetBoard()->SetFileName( wxEmptyString ); GetBoard()->SetFileName( wxEmptyString );
// preserve grid size accross call to InitDataPoints()
// wxRealPoint gridsize = GetScreen()->GetGridSize();
GetScreen()->InitDataPoints( GetPageSizeIU() ); GetScreen()->InitDataPoints( GetPageSizeIU() );
// GetScreen()->SetGrid( gridsize );
GetBoard()->ResetHighLight(); GetBoard()->ResetHighLight();
@ -82,9 +78,10 @@ bool PCB_EDIT_FRAME::Clear_Pcb( bool aQuery )
// Default copper layers count set to 2: double layer board // Default copper layers count set to 2: double layer board
GetBoard()->SetCopperLayerCount( 2 ); GetBoard()->SetCopperLayerCount( 2 );
// Update display // Update display (some options depend on the board setup)
GetBoard()->SetVisibleLayers( LSET().set() ); GetBoard()->SetVisibleLayers( LSET().set() );
ReCreateLayerBox();
ReCreateAuxiliaryToolbar();
ReFillLayerWidget(); ReFillLayerWidget();
Zoom_Automatique( false ); Zoom_Automatique( false );
@ -116,10 +113,7 @@ bool FOOTPRINT_EDIT_FRAME::Clear_Pcb( bool aQuery )
SetCurItem( NULL ); SetCurItem( NULL );
// preserve grid size accross call to InitDataPoints()
// wxRealPoint gridsize = GetScreen()->GetGridSize();
GetScreen()->InitDataPoints( GetPageSizeIU() ); GetScreen()->InitDataPoints( GetPageSizeIU() );
// GetScreen()->SetGrid( gridsize );
Zoom_Automatique( false ); Zoom_Automatique( false );

View File

@ -510,8 +510,8 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
KiBitmap( save_setup_xpm ) ); KiBitmap( save_setup_xpm ) );
AddMenuItem( configmenu, ID_CONFIG_READ, AddMenuItem( configmenu, ID_CONFIG_READ,
_( "&Read Preferences" ), _( "Load Prefe&rences" ),
_( "Read application preferences" ), _( "Load application preferences" ),
KiBitmap( read_setup_xpm ) ); KiBitmap( read_setup_xpm ) );
//----- Tools menu ---------------------------------------------------------- //----- Tools menu ----------------------------------------------------------

View File

@ -731,8 +731,7 @@ void PCB_EDIT_FRAME::ShowDesignRulesEditor( wxCommandEvent& event )
if( returncode == wxID_OK ) // New rules, or others changes. if( returncode == wxID_OK ) // New rules, or others changes.
{ {
ReCreateLayerBox(); ReCreateLayerBox();
updateTraceWidthSelectBox(); ReCreateAuxiliaryToolbar();
updateViaSizeSelectBox();
OnModify(); OnModify();
} }
} }
@ -876,8 +875,7 @@ void PCB_EDIT_FRAME::unitsChangeRefresh()
{ {
PCB_BASE_FRAME::unitsChangeRefresh(); // Update the grid size select box. PCB_BASE_FRAME::unitsChangeRefresh(); // Update the grid size select box.
updateTraceWidthSelectBox(); ReCreateAuxiliaryToolbar();
updateViaSizeSelectBox();
} }
@ -1064,8 +1062,7 @@ bool PCB_EDIT_FRAME::SetCurrentNetClass( const wxString& aNetClassName )
if( change ) if( change )
{ {
updateTraceWidthSelectBox(); ReCreateAuxiliaryToolbar();
updateViaSizeSelectBox();
} }
return change; return change;

View File

@ -31,7 +31,7 @@
%extend BOARD %extend BOARD
{ {
%pythoncode %pythoncode
{ %{
def GetModules(self): return self.m_Modules def GetModules(self): return self.m_Modules
def GetDrawings(self): return self.m_Drawings def GetDrawings(self): return self.m_Drawings
def GetTracks(self): return self.m_Track def GetTracks(self): return self.m_Track
@ -48,7 +48,7 @@
def Add(self,item): def Add(self,item):
item.thisown=0 item.thisown=0
self.AddNative(item) self.AddNative(item)
} %}
} }

View File

@ -31,7 +31,7 @@
%extend MODULE %extend MODULE
{ {
%pythoncode %pythoncode
{ %{
#def SaveToLibrary(self,filename): #def SaveToLibrary(self,filename):
# return SaveModuleToLibrary(filename,self) # return SaveModuleToLibrary(filename,self)
@ -51,7 +51,7 @@
elif type(itemC) in [ TEXTE_PCB, DIMENSION, TEXTE_MODULE, DRAWSEGMENT,EDGE_MODULE]: elif type(itemC) in [ TEXTE_PCB, DIMENSION, TEXTE_MODULE, DRAWSEGMENT,EDGE_MODULE]:
item.thisown = 0 item.thisown = 0
self.GraphicalItems().PushBack(item) self.GraphicalItems().PushBack(item)
} %}
} }

View File

@ -296,11 +296,11 @@ class HelpfulFootprintWizardPlugin(pcbnew.FootprintWizardPlugin,
fpid = pcbnew.FPID(self.module.GetValue()) # the name in library fpid = pcbnew.FPID(self.module.GetValue()) # the name in library
self.module.SetFPID(fpid) self.module.SetFPID(fpid)
self.BuildThisFootprint() # implementer's build function
self.SetModule3DModel() # add a 3d module if specified self.SetModule3DModel() # add a 3d module if specified
thick = self.GetTextThickness() thick = self.GetTextThickness()
self.module.Reference().SetThickness(thick) self.module.Reference().SetThickness(thick)
self.module.Value().SetThickness(thick) self.module.Value().SetThickness(thick)
self.BuildThisFootprint() # implementer's build function

View File

@ -51,8 +51,7 @@ void PCB_EDIT_FRAME::ToolOnRightClick( wxCommandEvent& event )
if( dlg.ShowModal() == wxID_OK ) if( dlg.ShowModal() == wxID_OK )
{ {
updateTraceWidthSelectBox(); ReCreateAuxiliaryToolbar();
updateViaSizeSelectBox();
} }
break; break;

View File

@ -46,13 +46,6 @@
#include <wx/wupdlock.h> #include <wx/wupdlock.h>
#ifdef __UNIX__
#define LISTBOX_WIDTH 150
#else
#define LISTBOX_WIDTH 130
#endif
#define SEL_LAYER_HELP _( \ #define SEL_LAYER_HELP _( \
"Show active layer selections\nand select layer pair for route and place via" ) "Show active layer selections\nand select layer pair for route and place via" )
@ -551,7 +544,20 @@ void PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar()
wxWindowUpdateLocker dummy( this ); wxWindowUpdateLocker dummy( this );
if( m_auxiliaryToolBar ) if( m_auxiliaryToolBar )
{
updateTraceWidthSelectBox();
updateViaSizeSelectBox();
// combobox sizes can have changed: apply new best sizes
wxAuiToolBarItem* item = m_auxiliaryToolBar->FindTool( ID_AUX_TOOLBAR_PCB_TRACK_WIDTH );
item->SetMinSize( m_SelTrackWidthBox->GetBestSize() );
item = m_auxiliaryToolBar->FindTool( ID_AUX_TOOLBAR_PCB_VIA_SIZE );
item->SetMinSize( m_SelViaSizeBox->GetBestSize() );
m_auxiliaryToolBar->Realize();
m_auimgr.Update();
return; return;
}
m_auxiliaryToolBar = new wxAuiToolBar( this, ID_AUX_TOOLBAR, wxDefaultPosition, wxDefaultSize, m_auxiliaryToolBar = new wxAuiToolBar( this, ID_AUX_TOOLBAR, wxDefaultPosition, wxDefaultSize,
wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_HORZ_LAYOUT ); wxAUI_TB_DEFAULT_STYLE | wxAUI_TB_HORZ_LAYOUT );
@ -562,19 +568,19 @@ void PCB_EDIT_FRAME::ReCreateAuxiliaryToolbar()
m_SelTrackWidthBox = new wxComboBox( m_auxiliaryToolBar, m_SelTrackWidthBox = new wxComboBox( m_auxiliaryToolBar,
ID_AUX_TOOLBAR_PCB_TRACK_WIDTH, ID_AUX_TOOLBAR_PCB_TRACK_WIDTH,
wxEmptyString, wxEmptyString,
wxPoint( -1, -1 ), wxDefaultPosition, wxDefaultSize,
wxSize( LISTBOX_WIDTH, -1 ),
0, NULL, wxCB_READONLY ); 0, NULL, wxCB_READONLY );
updateTraceWidthSelectBox();
m_auxiliaryToolBar->AddControl( m_SelTrackWidthBox ); m_auxiliaryToolBar->AddControl( m_SelTrackWidthBox );
m_auxiliaryToolBar->AddSeparator(); // m_auxiliaryToolBar->AddSeparator();
// Creates box to display and choose vias diameters: // Creates box to display and choose vias diameters:
m_SelViaSizeBox = new wxComboBox( m_auxiliaryToolBar, m_SelViaSizeBox = new wxComboBox( m_auxiliaryToolBar,
ID_AUX_TOOLBAR_PCB_VIA_SIZE, ID_AUX_TOOLBAR_PCB_VIA_SIZE,
wxEmptyString, wxEmptyString,
wxPoint( -1, -1 ), wxDefaultPosition, wxDefaultSize,
wxSize( (LISTBOX_WIDTH*12)/10, -1 ),
0, NULL, wxCB_READONLY ); 0, NULL, wxCB_READONLY );
updateViaSizeSelectBox();
m_auxiliaryToolBar->AddControl( m_SelViaSizeBox ); m_auxiliaryToolBar->AddControl( m_SelViaSizeBox );
m_auxiliaryToolBar->AddSeparator(); m_auxiliaryToolBar->AddSeparator();
@ -591,9 +597,9 @@ an existing track use its width\notherwise, use current width setting" ),
m_gridSelectBox = new wxComboBox( m_auxiliaryToolBar, m_gridSelectBox = new wxComboBox( m_auxiliaryToolBar,
ID_ON_GRID_SELECT, ID_ON_GRID_SELECT,
wxEmptyString, wxEmptyString,
wxPoint( -1, -1 ), wxDefaultPosition, wxDefaultSize,
wxSize( LISTBOX_WIDTH, -1 ),
0, NULL, wxCB_READONLY ); 0, NULL, wxCB_READONLY );
updateGridSelectBox();
m_auxiliaryToolBar->AddControl( m_gridSelectBox ); m_auxiliaryToolBar->AddControl( m_gridSelectBox );
// Add the box to display and select the current Zoom // Add the box to display and select the current Zoom
@ -601,19 +607,14 @@ an existing track use its width\notherwise, use current width setting" ),
m_zoomSelectBox = new wxComboBox( m_auxiliaryToolBar, m_zoomSelectBox = new wxComboBox( m_auxiliaryToolBar,
ID_ON_ZOOM_SELECT, ID_ON_ZOOM_SELECT,
wxEmptyString, wxEmptyString,
wxPoint( -1, -1 ), wxDefaultPosition, wxDefaultSize,
wxSize( LISTBOX_WIDTH, -1 ),
0, NULL, wxCB_READONLY ); 0, NULL, wxCB_READONLY );
m_auxiliaryToolBar->AddControl( m_zoomSelectBox );
updateZoomSelectBox(); updateZoomSelectBox();
updateGridSelectBox(); m_auxiliaryToolBar->AddControl( m_zoomSelectBox );
updateTraceWidthSelectBox();
updateViaSizeSelectBox();
// after adding the buttons to the toolbar, must call Realize() // after adding the buttons to the toolbar, must call Realize()
m_auxiliaryToolBar->Realize(); m_auxiliaryToolBar->Realize();
m_auxiliaryToolBar->AddSeparator(); // m_auxiliaryToolBar->AddSeparator();
} }
@ -623,13 +624,25 @@ void PCB_EDIT_FRAME::updateTraceWidthSelectBox()
return; return;
wxString msg; wxString msg;
bool mmFirst = g_UserUnit != INCHES;
m_SelTrackWidthBox->Clear(); m_SelTrackWidthBox->Clear();
for( unsigned ii = 0; ii < GetDesignSettings().m_TrackWidthList.size(); ii++ ) for( unsigned ii = 0; ii < GetDesignSettings().m_TrackWidthList.size(); ii++ )
{ {
msg = _( "Track " ) + CoordinateToString( GetDesignSettings().m_TrackWidthList[ii], true ); int size = GetDesignSettings().m_TrackWidthList[ii];
double valueMils = To_User_Unit( INCHES, size ) * 1000;
double value_mm = To_User_Unit( MILLIMETRES, size );
if( mmFirst )
msg.Printf( _( "Track: %.3f mm (%.2f mils)" ),
value_mm, valueMils );
else
msg.Printf( _( "Track: %.2f mils (%.3f mm)" ),
valueMils, value_mm );
// Mark the netclass track width value (the first in list)
if( ii == 0 ) if( ii == 0 )
msg << wxT( " *" ); msg << wxT( " *" );
@ -651,16 +664,42 @@ void PCB_EDIT_FRAME::updateViaSizeSelectBox()
wxString msg; wxString msg;
m_SelViaSizeBox->Clear(); m_SelViaSizeBox->Clear();
bool mmFirst = g_UserUnit != INCHES;
for( unsigned ii = 0; ii < GetDesignSettings().m_ViasDimensionsList.size(); ii++ ) for( unsigned ii = 0; ii < GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
{ {
msg = _( "Via " ); int diam = GetDesignSettings().m_ViasDimensionsList[ii].m_Diameter;
msg << CoordinateToString( GetDesignSettings().m_ViasDimensionsList[ii].m_Diameter, true );
if( GetDesignSettings().m_ViasDimensionsList[ii].m_Drill ) double valueMils = To_User_Unit( INCHES, diam ) * 1000;
msg << wxT("/ ") double value_mm = To_User_Unit( MILLIMETRES, diam );
<< CoordinateToString( GetDesignSettings().m_ViasDimensionsList[ii].m_Drill, true );
if( mmFirst )
msg.Printf( _( "Via: %.2f mm (%.1f mils)" ),
value_mm, valueMils );
else
msg.Printf( _( "Via: %.1f mils (%.2f mm)" ),
valueMils, value_mm );
int hole = GetDesignSettings().m_ViasDimensionsList[ii].m_Drill;
if( hole )
{
msg << wxT("/ ");
wxString hole_str;
double valueMils = To_User_Unit( INCHES, hole ) * 1000;
double value_mm = To_User_Unit( MILLIMETRES, hole );
if( mmFirst )
hole_str.Printf( _( "%.2f mm (%.1f mils)" ),
value_mm, valueMils );
else
hole_str.Printf( _( "%.1f mils (%.2f mm)" ),
valueMils, value_mm );
msg += hole_str;
}
// Mark the netclass via size value (the first in list)
if( ii == 0 ) if( ii == 0 )
msg << wxT( " *" ); msg << wxT( " *" );

View File

@ -37,9 +37,12 @@ if (len(lines)<4000):
txt = "" txt = ""
for l in lines: for l in lines:
if l.startswith("if version_info >= (2,6,0):"): if l.startswith("if version_info >= (2,6,0):"): # ok with swig version <= 3.0.2
l = l.replace("version_info >= (2,6,0)","False") l = l.replace("version_info >= (2,6,0)","False")
doneOk = True doneOk = True
elif l.startswith("if version_info >= (2, 6, 0):"): # needed with swig version 3.0.3
l = l.replace("version_info >= (2, 6, 0)","False")
doneOk = True
elif l.startswith("if False:"): # it was already patched? elif l.startswith("if False:"): # it was already patched?
doneOk = True doneOk = True
txt = txt + l txt = txt + l

View File

@ -27,7 +27,7 @@
%extend DLIST %extend DLIST
{ {
%pythoncode %pythoncode
{ %{
class DLISTIter: class DLISTIter:
def __init__(self,aList): def __init__(self,aList):
self.last = aList # last item is the start of list self.last = aList # last item is the start of list
@ -63,5 +63,5 @@
def __iter__(self): def __iter__(self):
return self.DLISTIter(self) return self.DLISTIter(self)
} %}
} }

View File

@ -136,7 +136,7 @@
const char* Cast_to_CChar() { return (self->c_str()); } const char* Cast_to_CChar() { return (self->c_str()); }
%pythoncode %pythoncode
{ %{
# Get the char buffer of the UTF8 string # Get the char buffer of the UTF8 string
def GetChars(self): def GetChars(self):
@ -147,6 +147,6 @@
def __str__(self): def __str__(self):
return self.GetChars() return self.GetChars()
} %}
} }