From aee56a936e580d35a120318176722556b402156b Mon Sep 17 00:00:00 2001 From: charras Date: Sat, 7 Feb 2009 08:33:25 +0000 Subject: [PATCH] Change grid size type from integer to double (using wxRealPoint insteed of wxSize). Mandatory in Pcbnew to handle without error metric grid used now for some footprints (BGA, connectors) Not fully tested --- CHANGELOG.txt | 15 +++++++++++---- common/base_screen.cpp | 30 ++++++++++++++++++------------ common/drawframe.cpp | 4 ++-- common/drawpanel.cpp | 27 ++++++++++----------------- common/zoom.cpp | 12 ++++++------ cvpcb/displayframe.cpp | 2 +- eeschema/class_screen.cpp | 16 ++++++++-------- eeschema/controle.cpp | 6 +++--- eeschema/dialog_options.cpp | 16 ++++++++-------- gerbview/controle.cpp | 2 +- gerbview/gerberframe.cpp | 12 +++++------- include/class_base_screen.h | 12 +++++++----- include/class_drawpanel.h | 4 ++-- pcbnew/classpcb.cpp | 28 ++++++++++++++-------------- pcbnew/controle.cpp | 7 +++++-- pcbnew/initpcb.cpp | 2 +- pcbnew/moduleframe.cpp | 21 ++++++++++++--------- pcbnew/pcbframe.cpp | 33 ++++++++++++++++++++------------- 18 files changed, 134 insertions(+), 115 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index d248d394f8..aa57c8cf42 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -5,6 +5,17 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2009-Feb-7 Jean-Pierre Charras +================================================================================ +++All: + change grid size type from integer to double (using wxRealPoint insteed of wxSize) + This is mandatory in Pcbnew to handle metric user grids without error + (was unusable before, using integer grid size). + A lot of footprints uses not metric grid. + TODO: + more refinements for user grid (mainly in read/wrire config). + + 2009-Feb-06 UPDATE Dick Hollenbeck ================================================================================ ++pcbnew @@ -20,10 +31,6 @@ email address. (near to to Wayne Stambaugh's changes: 15 values are not enought for pcbnew) removed minor problems in zoom box selection (removed blank line). Added user grid selection in modedit and refinements when user grid is selected. - TODO: - more refinements in user grid mode. - new grid implementation does not used floats when user grid is selected to calculate coordinates. - so it is unable to handle a metric grid. Todo: see what happened. ++eeschema: diff --git a/common/base_screen.cpp b/common/base_screen.cpp index 9f95cccbe2..d908233261 100644 --- a/common/base_screen.cpp +++ b/common/base_screen.cpp @@ -34,7 +34,7 @@ BASE_SCREEN::BASE_SCREEN( KICAD_T aType ) : EDA_BaseStruct( aType ) m_NumberOfScreen = 1; /* Hierarchy: Root: ScreenNumber = 1 */ m_ZoomScalar = 10; m_Zoom = 32 * m_ZoomScalar; - m_Grid = wxSize( 50, 50 ); /* Default grid size */ + m_Grid = wxRealPoint( 50, 50 ); /* Default grid size */ m_UserGridIsON = FALSE; m_Center = true; m_CurrentSheetDesc = &g_Sheet_A4; @@ -170,6 +170,12 @@ void BASE_SCREEN::Scale( wxPoint& pt ) pt.y = Scale( pt.y ); } +void BASE_SCREEN::Scale( wxRealPoint& pt ) +{ + pt.x = Scale( pt.x ); + pt.y = Scale( pt.y ); +} + void BASE_SCREEN::Scale( wxSize& sz ) { @@ -303,14 +309,14 @@ void BASE_SCREEN::SetGridList( GridArray& gridlist ) /**********************************************/ -void BASE_SCREEN::SetGrid( const wxSize& size ) +void BASE_SCREEN::SetGrid( const wxRealPoint& size ) /**********************************************/ { wxASSERT( !m_GridList.IsEmpty() ); size_t i; - wxSize nearest_grid = m_GridList[0].m_Size; + wxRealPoint nearest_grid = m_GridList[0].m_Size; for( i = 0; i < m_GridList.GetCount(); i++ ) { if( m_GridList[i].m_Size == size ) @@ -318,7 +324,7 @@ void BASE_SCREEN::SetGrid( const wxSize& size ) m_Grid = m_GridList[i].m_Size; return; } - + // keep trace of the nearest grill size, if the exact size is not found if ( size.x < m_GridList[i].m_Size.x ) nearest_grid = m_GridList[i].m_Size; @@ -326,8 +332,8 @@ void BASE_SCREEN::SetGrid( const wxSize& size ) m_Grid = nearest_grid; - wxLogWarning( _( "Grid size( %d, %d ) not in grid list, falling back to " \ - "grid size( %d, %d )." ), + wxLogWarning( _( "Grid size( %f, %f ) not in grid list, falling back to " \ + "grid size( %f, %f )." ), size.x, size.y, m_Grid.x, m_Grid.y ); } @@ -350,7 +356,7 @@ void BASE_SCREEN::SetGrid( int id ) m_Grid = m_GridList[0].m_Size; wxLogWarning( _( "Grid ID %d not in grid list, falling back to " \ - "grid size( %d, %d )." ), id, m_Grid.x, m_Grid.y ); + "grid size( %f, %f )." ), id, m_Grid.x, m_Grid.y ); } void BASE_SCREEN::AddGrid( const GRID_TYPE& grid ) @@ -381,7 +387,7 @@ void BASE_SCREEN::AddGrid( const GRID_TYPE& grid ) m_GridList.Add( grid ); } -void BASE_SCREEN::AddGrid( const wxSize& size, int id ) +void BASE_SCREEN::AddGrid( const wxRealPoint& size, int id ) { GRID_TYPE grid; @@ -393,7 +399,7 @@ void BASE_SCREEN::AddGrid( const wxSize& size, int id ) void BASE_SCREEN::AddGrid( const wxRealPoint& size, int units, int id ) { double x, y; - wxSize new_size; + wxRealPoint new_size; GRID_TYPE new_grid; if( units == MILLIMETRE ) @@ -412,8 +418,8 @@ void BASE_SCREEN::AddGrid( const wxRealPoint& size, int units, int id ) y = size.y; } - new_size = wxSize( (int) round( x * (double) GetInternalUnits() ), - (int) round( y * (double) GetInternalUnits() ) ); + new_size = wxRealPoint( x * (double) GetInternalUnits(), + y * (double) GetInternalUnits() ); new_grid.m_Id = id; new_grid.m_Size = new_size; @@ -421,7 +427,7 @@ void BASE_SCREEN::AddGrid( const wxRealPoint& size, int units, int id ) } /*********************************/ -wxSize BASE_SCREEN::GetGrid() +wxRealPoint BASE_SCREEN::GetGrid() /*********************************/ { return m_Grid; diff --git a/common/drawframe.cpp b/common/drawframe.cpp index 92a4f2135b..585513b5f6 100644 --- a/common/drawframe.cpp +++ b/common/drawframe.cpp @@ -262,9 +262,9 @@ void WinEDA_DrawFrame::OnSelectGrid( wxCommandEvent& event ) BASE_SCREEN* screen = GetBaseScreen(); screen->m_Curseur = DrawPanel->GetScreenCenterRealPosition(); - wxSize current_grid = screen->GetGrid(); + wxRealPoint current_grid = screen->GetGrid(); screen->SetGrid( event.GetSelection() + ID_POPUP_GRID_LEVEL_1000 ); - wxSize selected_grid = screen->GetGrid(); + wxRealPoint selected_grid = screen->GetGrid(); if( selected_grid != current_grid ) Recadre_Trace( FALSE ); diff --git a/common/drawpanel.cpp b/common/drawpanel.cpp index 16f08658ba..9a81762329 100644 --- a/common/drawpanel.cpp +++ b/common/drawpanel.cpp @@ -175,7 +175,7 @@ void WinEDA_DrawPanel::SetZoom( int zoom ) /************************************/ -wxSize WinEDA_DrawPanel::GetGrid() +wxRealPoint WinEDA_DrawPanel::GetGrid() /************************************/ { return GetScreen()->GetGrid(); @@ -685,11 +685,10 @@ void WinEDA_DrawPanel::DrawBackGround( wxDC* DC ) int Color = BLUE; BASE_SCREEN* screen = GetScreen(); int ii, jj, xg, yg, color; - wxSize pas_grille_affichee; + wxRealPoint pas_grille_affichee; bool drawgrid = FALSE; wxSize size; wxPoint org; - double pasx, pasy; color = g_GridColor; @@ -702,32 +701,29 @@ void WinEDA_DrawPanel::DrawBackGround( wxDC* DC ) pas_grille_affichee = screen->GetGrid(); - ii = screen->Scale( pas_grille_affichee.x ); - if( ii < 5 ) + double dgrid = screen->Scale( pas_grille_affichee.x ); + if( dgrid < 5 ) { pas_grille_affichee.x *= 2; - ii *= 2; + dgrid *= 2; } - if( ii < 5 ) + if( dgrid < 5 ) drawgrid = FALSE; // The gris is small - ii = screen->Scale( pas_grille_affichee.y ); - if( ii < 5 ) + dgrid = screen->Scale( pas_grille_affichee.y ); + if( ii < dgrid ) { pas_grille_affichee.y *= 2; - ii *= 2; + dgrid *= 2; } - if( ii < 5 ) + if( dgrid < 5 ) drawgrid = FALSE; // The gris is small GetViewStart( &org.x, &org.y ); GetScrollPixelsPerUnit( &ii, &jj ); - wxLogDebug( _T( "View start: %d, %d, scroll bar PPI: %d, %d" ), - org.x, org.y, ii, jj ); org.x *= ii; org.y *= jj; screen->m_StartVisu = org; - wxLogDebug( _T( "Scroll bar drawing position: %d. %d" ), org.x, org.y ); screen->Unscale( org ); org += screen->m_DrawOrg; @@ -735,9 +731,6 @@ void WinEDA_DrawPanel::DrawBackGround( wxDC* DC ) size = GetClientSize(); screen->Unscale( size ); - pasx = screen->m_Grid.x * m_Parent->m_InternalUnits; - pasy = screen->m_Grid.y * m_Parent->m_InternalUnits; - if( drawgrid ) { m_Parent->PutOnGrid( &org ); diff --git a/common/zoom.cpp b/common/zoom.cpp index abb5307f34..89b881c9d4 100644 --- a/common/zoom.cpp +++ b/common/zoom.cpp @@ -47,14 +47,14 @@ void WinEDA_DrawFrame::PutOnGrid( wxPoint* coord ) * @param coord = coordinate to adjust */ { - wxSize grid_size = GetBaseScreen()->GetGrid(); + wxRealPoint grid_size = GetBaseScreen()->GetGrid(); if( !GetBaseScreen()->m_UserGridIsON ) { - coord->x = ( (int) round( (double) coord->x / - (double) grid_size.x ) ) * grid_size.x; - coord->y = ( (int) round( (double) coord->y / - (double) grid_size.y ) ) * grid_size.y; + coord->x = ( (int) round( coord->x / + grid_size.x ) ) * grid_size.x; + coord->y = ( (int) round( coord->y / + grid_size.y ) ) * grid_size.y; } } @@ -193,7 +193,7 @@ void WinEDA_DrawPanel::AddMenuZoom( wxMenu* MasterMenu ) size_t i; int maxZoomIds; int zoom; - wxSize grid; + wxRealPoint grid; wxString msg; GRID_TYPE tmp; wxMenu* gridMenu; diff --git a/cvpcb/displayframe.cpp b/cvpcb/displayframe.cpp index 414b51b166..f94000b5bc 100644 --- a/cvpcb/displayframe.cpp +++ b/cvpcb/displayframe.cpp @@ -182,7 +182,7 @@ bool WinEDA_DisplayFrame::OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu void WinEDA_DisplayFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) /****************************************************************/ { - wxSize delta; + wxRealPoint delta; int flagcurseur = 0; wxPoint curpos, oldpos; wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED ); diff --git a/eeschema/class_screen.cpp b/eeschema/class_screen.cpp index eff74a3fc7..72faa90e05 100644 --- a/eeschema/class_screen.cpp +++ b/eeschema/class_screen.cpp @@ -82,7 +82,7 @@ void SCH_ITEM::Place( WinEDA_SchematicFrame* frame, wxDC* DC ) /* Default EESchema zoom values. Limited to 15 values to keep a decent size to menus */ static int SchematicZoomList[] = { - 10, 15, 20, 30, 40, 60, 80, 120, 160, 230, 320, 480, 640, 800, 1280 + 10, 15, 20, 30, 40, 60, 80, 120, 160, 230, 320, 480, 640, 800, 1280 }; #define SCHEMATIC_ZOOM_LIST_CNT ( sizeof( SchematicZoomList ) / \ @@ -91,12 +91,12 @@ static int SchematicZoomList[] = /* Default grid sizes for the schematic editor. */ static GRID_TYPE SchematicGridList[] = { - { ID_POPUP_GRID_LEVEL_50, wxSize( 50, 50 ) }, - { ID_POPUP_GRID_LEVEL_25, wxSize( 25, 25 ) }, - { ID_POPUP_GRID_LEVEL_10, wxSize( 10, 10 ) }, - { ID_POPUP_GRID_LEVEL_5, wxSize( 5, 5 ) }, - { ID_POPUP_GRID_LEVEL_2, wxSize( 2, 2 ) }, - { ID_POPUP_GRID_LEVEL_1, wxSize( 1, 1 ) } + { ID_POPUP_GRID_LEVEL_50, wxRealPoint( 50, 50 ) }, + { ID_POPUP_GRID_LEVEL_25, wxRealPoint( 25, 25 ) }, + { ID_POPUP_GRID_LEVEL_10, wxRealPoint( 10, 10 ) }, + { ID_POPUP_GRID_LEVEL_5, wxRealPoint( 5, 5 ) }, + { ID_POPUP_GRID_LEVEL_2, wxRealPoint( 2, 2 ) }, + { ID_POPUP_GRID_LEVEL_1, wxRealPoint( 1, 1 ) } }; #define SCHEMATIC_GRID_LIST_CNT ( sizeof( SchematicGridList ) / \ @@ -117,7 +117,7 @@ SCH_SCREEN::SCH_SCREEN( KICAD_T type ) : BASE_SCREEN( type ) for( i = 0; i < SCHEMATIC_GRID_LIST_CNT; i++ ) AddGrid( SchematicGridList[i] ); - SetGrid( wxSize( 50, 50 ) ); /* usual grid size */ + SetGrid( wxRealPoint( 50, 50 ) ); /* usual grid size */ m_UndoRedoCountMax = 10; // Undo/redo levels count. 10 is a reasonnable value m_RefCount = 0; m_Center = false; // Suitable for schematic only. for libedit and viewlib, must be set to true diff --git a/eeschema/controle.cpp b/eeschema/controle.cpp index c003ebdfdd..1b4f0020ec 100644 --- a/eeschema/controle.cpp +++ b/eeschema/controle.cpp @@ -223,7 +223,7 @@ SCH_ITEM* WinEDA_SchematicFrame:: SchematicGeneralLocateAndDisplay( const wxPoin void WinEDA_SchematicFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels ) /*************************************************************************************/ { - wxSize delta; + wxRealPoint delta; SCH_SCREEN* screen = GetScreen(); wxPoint curpos, oldpos; int hotkey = 0; @@ -317,7 +317,7 @@ void WinEDA_SchematicFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPi void WinEDA_LibeditFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels ) /*************************************************************************************/ { - wxSize delta; + wxRealPoint delta; SCH_SCREEN* screen = GetScreen(); wxPoint curpos, oldpos; int hotkey = 0; @@ -411,7 +411,7 @@ void WinEDA_LibeditFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixe void WinEDA_ViewlibFrame::GeneralControle( wxDC* DC, wxPoint MousePositionInPixels ) { - wxSize delta; + wxRealPoint delta; SCH_SCREEN* screen = GetScreen(); wxPoint curpos, oldpos; int hotkey = 0; diff --git a/eeschema/dialog_options.cpp b/eeschema/dialog_options.cpp index c106761d1d..0c15d41aa4 100644 --- a/eeschema/dialog_options.cpp +++ b/eeschema/dialog_options.cpp @@ -93,7 +93,7 @@ WinEDA_SetOptionsFrame::WinEDA_SetOptionsFrame( WinEDA_DrawFrame* parent, /* Init options */ if( screen ) { - switch( screen->GetGrid().x ) + switch( (int)screen->GetGrid().x ) { case 50: m_SelGridSize->SetSelection( 0 ); @@ -395,7 +395,7 @@ void WinEDA_SetOptionsFrame::OnCancelClick( wxCommandEvent& event ) void WinEDA_SetOptionsFrame::Accept( wxCommandEvent& event ) /**************************************************************************/ { - wxSize grid; + wxRealPoint grid; wxString msg; g_DrawMinimunLineWidth = m_DefaultDrawLineWidthCtrl->GetValue(); @@ -450,27 +450,27 @@ void WinEDA_SetOptionsFrame::Accept( wxCommandEvent& event ) break; case 0: - grid = wxSize( 50, 50 ); + grid = wxRealPoint( 50, 50 ); break; case 1: - grid = wxSize( 25, 25 ); + grid = wxRealPoint( 25, 25 ); break; case 2: - grid = wxSize( 10, 10 ); + grid = wxRealPoint( 10, 10 ); break; case 3: - grid = wxSize( 5, 5 ); + grid = wxRealPoint( 5, 5 ); break; case 4: - grid = wxSize( 2, 2 ); + grid = wxRealPoint( 2, 2 ); break; case 5: - grid = wxSize( 1, 1 ); + grid = wxRealPoint( 1, 1 ); break; } diff --git a/gerbview/controle.cpp b/gerbview/controle.cpp index ad261d3ed8..a806f74ffc 100644 --- a/gerbview/controle.cpp +++ b/gerbview/controle.cpp @@ -41,7 +41,7 @@ void WinEDA_GerberFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) * Remise a 0 de l'origine des coordonnees relatives */ { - wxSize delta; + wxRealPoint delta; wxPoint curpos, oldpos; int hotkey = 0; diff --git a/gerbview/gerberframe.cpp b/gerbview/gerberframe.cpp index 19b619438d..877c6355e3 100644 --- a/gerbview/gerberframe.cpp +++ b/gerbview/gerberframe.cpp @@ -305,17 +305,15 @@ void WinEDA_GerberFrame::SetToolbars() int WinEDA_GerberFrame::BestZoom() /*************************************/ { - int ii, jj, gridX, gridY; - int bestzoom; + double ii, jj; + double bestzoom; wxSize size; GetBoard()->ComputeBoundaryBox(); - gridX = GetScreen()->GetGrid().GetWidth() / 2; - gridY = GetScreen()->GetGrid().GetHeight() / 2; size = DrawPanel->GetClientSize(); - ii = ( GetBoard()->m_BoundaryBox.GetWidth() + gridX ) / size.x; - jj = ( GetBoard()->m_BoundaryBox.GetHeight() + gridY ) / size.y; - bestzoom = MAX( ii, jj ) + 1; + ii = GetBoard()->m_BoundaryBox.GetWidth() / size.x; + jj = GetBoard()->m_BoundaryBox.GetHeight() / size.y; + bestzoom = MAX( ii, jj ); GetScreen()->m_Curseur = GetBoard()->m_BoundaryBox.Centre(); return bestzoom * GetScreen()->m_ZoomScalar; } diff --git a/include/class_base_screen.h b/include/class_base_screen.h index 3053b6534c..1ece0e103b 100644 --- a/include/class_base_screen.h +++ b/include/class_base_screen.h @@ -77,7 +77,7 @@ class GRID_TYPE { public: int m_Id; - wxSize m_Size; + wxRealPoint m_Size; }; @@ -145,7 +145,7 @@ private: /* Valeurs du pas de grille et du zoom */ public: - wxSize m_Grid; /* Current grid. */ + wxRealPoint m_Grid; /* Current grid. */ GridArray m_GridList; bool m_UserGridIsON; @@ -240,6 +240,8 @@ public: int Scale( int coord ); void Scale( wxPoint& pt ); void Scale( wxSize& sz ); + void Scale( wxRealPoint& sz ); + int Unscale( int coord ); void Unscale( wxPoint& pt ); void Unscale( wxSize& sz ); @@ -250,12 +252,12 @@ public: void SetLastZoom(); /* ajuste le coeff de zoom au max */ //-------------------------------------------------------------- - wxSize GetGrid(); /* retourne la grille */ - void SetGrid( const wxSize& size ); + wxRealPoint GetGrid(); /* retourne la grille */ + void SetGrid( const wxRealPoint& size ); void SetGrid( int ); void SetGridList( GridArray& sizelist ); void AddGrid( const GRID_TYPE& grid ); - void AddGrid( const wxSize& size, int id ); + void AddGrid( const wxRealPoint& size, int id ); void AddGrid( const wxRealPoint& size, int units, int id ); diff --git a/include/class_drawpanel.h b/include/class_drawpanel.h index ecd0d9769c..9037951289 100644 --- a/include/class_drawpanel.h +++ b/include/class_drawpanel.h @@ -90,8 +90,8 @@ public: void SetZoom( int mode ); int GetZoom(); - void SetGrid( const wxSize& size ); - wxSize GetGrid(); + void SetGrid( const wxRealPoint& size ); + wxRealPoint GetGrid(); void AddMenuZoom( wxMenu* MasterMenu ); bool OnRightClick( wxMouseEvent& event ); diff --git a/pcbnew/classpcb.cpp b/pcbnew/classpcb.cpp index ffbf26218a..14ba500ae7 100644 --- a/pcbnew/classpcb.cpp +++ b/pcbnew/classpcb.cpp @@ -17,7 +17,7 @@ * 15 it better but does not allow a sufficient number of values * roughtly a 1.5 progression. * The last 2 values is handy when somebody uses a library import of a module - * (or foreign data) which has a bad coordinate + * (or foreign data) which has a bad coordinate * Also useful in Gerbview for this reason. */ static const int PcbZoomList[] = { 10, 15, 22, 30, 45, 70, 100, 150, 220, 350, 500, 800, 1200, @@ -28,18 +28,18 @@ static const int PcbZoomList[] = { 10, 15, 22, 30, 45, 70, 100, 150, 220, 350, 5 /* Default grid sizes for PCB editor screens. */ static GRID_TYPE PcbGridList[] = { - { ID_POPUP_GRID_LEVEL_1000, wxSize( 1000, 1000 ) }, - { ID_POPUP_GRID_LEVEL_500, wxSize( 500, 500 ) }, - { ID_POPUP_GRID_LEVEL_250, wxSize( 250, 250 ) }, - { ID_POPUP_GRID_LEVEL_200, wxSize( 200, 200 ) }, - { ID_POPUP_GRID_LEVEL_100, wxSize( 100, 100 ) }, - { ID_POPUP_GRID_LEVEL_50, wxSize( 50, 50 ) }, - { ID_POPUP_GRID_LEVEL_25, wxSize( 25, 25 ) }, - { ID_POPUP_GRID_LEVEL_20, wxSize( 20, 20 ) }, - { ID_POPUP_GRID_LEVEL_10, wxSize( 10, 10 ) }, - { ID_POPUP_GRID_LEVEL_5, wxSize( 5, 5 ) }, - { ID_POPUP_GRID_LEVEL_2, wxSize( 2, 2 ) }, - { ID_POPUP_GRID_LEVEL_1, wxSize( 1, 1 ) } + { ID_POPUP_GRID_LEVEL_1000, wxRealPoint( 1000, 1000 ) }, + { ID_POPUP_GRID_LEVEL_500, wxRealPoint( 500, 500 ) }, + { ID_POPUP_GRID_LEVEL_250, wxRealPoint( 250, 250 ) }, + { ID_POPUP_GRID_LEVEL_200, wxRealPoint( 200, 200 ) }, + { ID_POPUP_GRID_LEVEL_100, wxRealPoint( 100, 100 ) }, + { ID_POPUP_GRID_LEVEL_50, wxRealPoint( 50, 50 ) }, + { ID_POPUP_GRID_LEVEL_25, wxRealPoint( 25, 25 ) }, + { ID_POPUP_GRID_LEVEL_20, wxRealPoint( 20, 20 ) }, + { ID_POPUP_GRID_LEVEL_10, wxRealPoint( 10, 10 ) }, + { ID_POPUP_GRID_LEVEL_5, wxRealPoint( 5, 5 ) }, + { ID_POPUP_GRID_LEVEL_2, wxRealPoint( 2, 2 ) }, + { ID_POPUP_GRID_LEVEL_1, wxRealPoint( 1, 1 ) } }; #define PCB_GRID_LIST_CNT ( sizeof( PcbGridList ) / sizeof( GRID_TYPE ) ) @@ -58,7 +58,7 @@ PCB_SCREEN::PCB_SCREEN() : BASE_SCREEN( TYPE_SCREEN ) for( i = 0; i < PCB_GRID_LIST_CNT; i++ ) AddGrid( PcbGridList[i] ); - SetGrid( wxSize( 500, 500 ) ); /* Set the working grid size to a reasonnable value (in 1/10000 inch) */ + SetGrid( wxRealPoint( 500, 500 ) ); /* Set the working grid size to a reasonnable value (in 1/10000 inch) */ Init(); } diff --git a/pcbnew/controle.cpp b/pcbnew/controle.cpp index ea6412465b..cf3aedd33e 100644 --- a/pcbnew/controle.cpp +++ b/pcbnew/controle.cpp @@ -482,7 +482,7 @@ static bool Magnetize( BOARD* m_Pcb, WinEDA_PcbFrame* frame, void WinEDA_PcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) /*****************************************************************/ { - wxSize delta; + wxRealPoint delta; wxPoint curpos, oldpos; int hotkey = 0; @@ -581,8 +581,11 @@ void WinEDA_PcbFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) wxPoint on_grid = curpos; PutOnGrid( &on_grid ); + wxSize grid; + grid.x = (int) GetScreen()->GetGrid().x; + grid.y = (int) GetScreen()->GetGrid().y; if( Magnetize(m_Pcb, (WinEDA_PcbFrame *) this, m_ID_current_state, - GetScreen()->GetGrid(), on_grid, &curpos) ) + grid, on_grid, &curpos) ) { GetScreen()->m_Curseur = curpos; } diff --git a/pcbnew/initpcb.cpp b/pcbnew/initpcb.cpp index 9e75b03f78..9aea752d50 100644 --- a/pcbnew/initpcb.cpp +++ b/pcbnew/initpcb.cpp @@ -148,7 +148,7 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( bool query ) SetCurItem( NULL ); /* Init parametres de gestion */ - wxSize gridsize = GetScreen()->GetGrid(); + wxRealPoint gridsize = GetScreen()->GetGrid(); ((PCB_SCREEN*)GetScreen())->Init(); GetScreen()->SetGrid( gridsize ); diff --git a/pcbnew/moduleframe.cpp b/pcbnew/moduleframe.cpp index 057edaa7f5..dc002be9b6 100644 --- a/pcbnew/moduleframe.cpp +++ b/pcbnew/moduleframe.cpp @@ -18,6 +18,9 @@ #include "3d_viewer.h" +// Keys used in read/write config +#define MODEDIT_CURR_GRID_X wxT( "ModEditCurrGrid_X" ) +#define MODEDIT_CURR_GRID_Y wxT( "ModEditCurrGrid_Y" ) /********************************/ /* class WinEDA_ModuleEditFrame */ @@ -185,12 +188,12 @@ WinEDA_ModuleEditFrame::WinEDA_ModuleEditFrame( wxWindow* father, GetScreen()->SetCurItem( NULL ); GetSettings(); - wxSize GridSize( 500, 500 ); + wxRealPoint GridSize( 500, 500 ); if( config ) { - long SizeX, SizeY; - if( config->Read( wxT( "ModEditGrid_X" ), &SizeX ) - && config->Read( wxT( "ModEditGrid_Y" ), &SizeY ) ) + double SizeX, SizeY; + if( config->Read( MODEDIT_CURR_GRID_X, &SizeX ) + && config->Read( MODEDIT_CURR_GRID_Y, &SizeY ) ) { GridSize.x = SizeX; GridSize.y = SizeY; @@ -241,9 +244,9 @@ void WinEDA_ModuleEditFrame::OnCloseWindow( wxCloseEvent& Event ) SaveSettings(); if( config ) { - wxSize GridSize = GetScreen()->GetGrid(); - config->Write( wxT( "ModEditGrid_X" ), (long) GridSize.x ); - config->Write( wxT( "ModEditGrid_Y" ), (long) GridSize.y ); + wxRealPoint GridSize = GetScreen()->GetGrid(); + config->Write( MODEDIT_CURR_GRID_X, GridSize.x ); + config->Write( MODEDIT_CURR_GRID_Y, GridSize.y ); } Destroy(); } @@ -407,7 +410,7 @@ void WinEDA_ModuleEditFrame::Show3D_Frame( wxCommandEvent& event ) void WinEDA_ModuleEditFrame::GeneralControle( wxDC* DC, wxPoint Mouse ) { - wxSize delta; + wxRealPoint delta; wxPoint curpos, oldpos; int hotkey = 0; @@ -510,7 +513,7 @@ void WinEDA_ModuleEditFrame::OnSelectGrid( wxCommandEvent& event ) { if( m_SelGridBox == NULL ) return; // Should not occurs - + GetScreen()->AddGrid( g_UserGrid, g_UserGrid_Unit, ID_POPUP_GRID_USER ); WinEDA_DrawFrame::OnSelectGrid( event ); diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 98affccfff..f964e9a681 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -16,6 +16,13 @@ #include "3d_viewer.h" #include "kbool/include/kbool/booleng.h" +// Keys used in read/write config +#define PCB_CURR_GRID_X wxT( "PcbCurrGrid_X" ) +#define PCB_CURR_GRID_Y wxT( "PcbCurrGrid_Y" ) +#define PCB_MAGNETIC_PADS_OPT wxT( "PcbMagPadOpt" ) +#define PCB_MAGNETIC_TRACKS_OPT wxT( "PcbMagTrackOpt" ) +#define SHOW_MICROWAVE_TOOLS wxT( "ShowMicrowaveTools" ) + /*******************************/ /* class WinEDA_PcbFrame */ /*******************************/ @@ -231,20 +238,20 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, GetSettings(); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); - wxSize GridSize( 500, 500 ); + wxRealPoint GridSize( 500, 500 ); if( config ) { - long SizeX, SizeY; + double SizeX, SizeY; - if( config->Read( wxT( "PcbEditGrid_X" ), &SizeX ) - && config->Read( wxT( "PcbEditGrid_Y" ), &SizeY ) ) + if( config->Read( PCB_CURR_GRID_X, &SizeX ) + && config->Read( PCB_CURR_GRID_Y, &SizeY ) ) { GridSize.x = SizeX; GridSize.y = SizeY; } - config->Read( wxT( "PcbMagPadOpt" ), &g_MagneticPadOption ); - config->Read( wxT( "PcbMagTrackOpt" ), &g_MagneticTrackOption ); + config->Read( PCB_MAGNETIC_PADS_OPT, &g_MagneticPadOption ); + config->Read( PCB_MAGNETIC_TRACKS_OPT, &g_MagneticTrackOption ); } GetScreen()->SetGrid( GridSize ); @@ -257,7 +264,7 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, if( config ) { long display_microwave_tools = 0; - config->Read( wxT( "ShowMicrowaveTools" ), &display_microwave_tools ); + config->Read( SHOW_MICROWAVE_TOOLS, &display_microwave_tools ); if ( display_microwave_tools ) ReCreateAuxVToolbar(); } @@ -334,12 +341,12 @@ void WinEDA_PcbFrame::OnCloseWindow( wxCloseEvent& Event ) SaveSettings(); if( config ) { - wxSize GridSize = GetScreen()->GetGrid(); - config->Write( wxT( "PcbEditGrid_X" ), (long) GridSize.x ); - config->Write( wxT( "PcbEditGrid_Y" ), (long) GridSize.y ); - config->Write( wxT( "PcbMagPadOpt" ), (long) g_MagneticPadOption ); - config->Write( wxT( "PcbMagTrackOpt" ), (long) g_MagneticTrackOption ); - config->Write( wxT( "ShowMicrowaveTools" ), (long) m_AuxVToolBar ? 1 : 0 ); + wxRealPoint GridSize = GetScreen()->GetGrid(); + config->Write( PCB_CURR_GRID_X, GridSize.x ); + config->Write( PCB_CURR_GRID_Y, GridSize.y ); + config->Write( PCB_MAGNETIC_PADS_OPT, (long) g_MagneticPadOption ); + config->Write( PCB_MAGNETIC_TRACKS_OPT, (long) g_MagneticTrackOption ); + config->Write( SHOW_MICROWAVE_TOOLS, (long) m_AuxVToolBar ? 1 : 0 ); } Destroy(); }