diff --git a/pcbnew/autorouter/graphpcb.cpp b/pcbnew/autorouter/graphpcb.cpp index 816502f452..06a7311c06 100644 --- a/pcbnew/autorouter/graphpcb.cpp +++ b/pcbnew/autorouter/graphpcb.cpp @@ -410,7 +410,9 @@ void TracePcbLine( int x0, int y0, int x1, int y1, int layer, int color, int op_ for( ; dx <= lim; ) { - if( ( dx >= 0 ) && ( dy >= 0 ) && ( dx < RoutingMatrix.m_Ncols ) && ( dy < RoutingMatrix.m_Nrows ) ) + if( ( dx >= 0 ) && ( dy >= 0 ) && + ( dx < RoutingMatrix.m_Ncols ) && + ( dy < RoutingMatrix.m_Nrows ) ) { OP_CELL( layer, dy, dx ); } @@ -475,7 +477,8 @@ void TraceFilledRectangle( int ux0, int uy0, int ux1, int uy1, if( ( aLayerMask & GetLayerMask( Route_Layer_BOTTOM ) ) ) trace = 1; // Trace on BOTTOM - if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && RoutingMatrix.m_RoutingLayersCount > 1 ) + if( ( aLayerMask & GetLayerMask( Route_Layer_TOP ) ) && + RoutingMatrix.m_RoutingLayersCount > 1 ) trace |= 2; // Trace on TOP if( trace == 0 ) diff --git a/pcbnew/autorouter/routing_matrix.cpp b/pcbnew/autorouter/routing_matrix.cpp index 76890732e2..510616e863 100644 --- a/pcbnew/autorouter/routing_matrix.cpp +++ b/pcbnew/autorouter/routing_matrix.cpp @@ -100,45 +100,47 @@ bool MATRIX_ROUTING_HEAD::ComputeMatrixSize( BOARD* aPcb, bool aUseBoardEdgesOnl int MATRIX_ROUTING_HEAD::InitRoutingMatrix() { - int ii, kk; - if( m_Nrows <= 0 || m_Ncols <= 0 ) return 0; m_InitMatrixDone = true; // we have been called // give a small margin for memory allocation: - ii = (RoutingMatrix.m_Nrows + 1) * (RoutingMatrix.m_Ncols + 1); + int ii = (RoutingMatrix.m_Nrows + 1) * (RoutingMatrix.m_Ncols + 1); - for( kk = 0; kk < m_RoutingLayersCount; kk++ ) + int side = BOTTOM; + for( int jj = 0; jj < m_RoutingLayersCount; jj++ ) // m_RoutingLayersCount = 1 or 2 { - m_BoardSide[kk] = NULL; - m_DistSide[kk] = NULL; - m_DirSide[kk] = NULL; + m_BoardSide[side] = NULL; + m_DistSide[side] = NULL; + m_DirSide[side] = NULL; /* allocate matrix & initialize everything to empty */ - m_BoardSide[kk] = (MATRIX_CELL*) operator new( ii * sizeof(MATRIX_CELL) ); - memset( m_BoardSide[kk], 0, ii * sizeof(MATRIX_CELL) ); + m_BoardSide[side] = (MATRIX_CELL*) operator new( ii * sizeof(MATRIX_CELL) ); + memset( m_BoardSide[side], 0, ii * sizeof(MATRIX_CELL) ); - if( m_BoardSide[kk] == NULL ) + if( m_BoardSide[side] == NULL ) return -1; // allocate Distances - m_DistSide[kk] = (DIST_CELL*) operator new( ii * sizeof(DIST_CELL) ); - memset( m_DistSide[kk], 0, ii * sizeof(DIST_CELL) ); + m_DistSide[side] = (DIST_CELL*) operator new( ii * sizeof(DIST_CELL) ); + memset( m_DistSide[side], 0, ii * sizeof(DIST_CELL) ); - if( m_DistSide[kk] == NULL ) + if( m_DistSide[side] == NULL ) return -1; // allocate Dir (chars) - m_DirSide[kk] = (char*) operator new( ii ); - memset( m_DirSide[kk], 0, ii ); + m_DirSide[side] = (char*) operator new( ii ); + memset( m_DirSide[side], 0, ii ); - if( m_DirSide[kk] == NULL ) + if( m_DirSide[side] == NULL ) return -1; + + side = TOP; } - m_MemSize = m_RouteCount * ii * ( sizeof(MATRIX_CELL) + sizeof(DIST_CELL) + sizeof(char) ); + m_MemSize = m_RouteCount * ii * ( sizeof(MATRIX_CELL) + + sizeof(DIST_CELL) + sizeof(char) ); return m_MemSize; } diff --git a/pcbnew/autorouter/solve.cpp b/pcbnew/autorouter/solve.cpp index 9dbabf705d..2455ef10ed 100644 --- a/pcbnew/autorouter/solve.cpp +++ b/pcbnew/autorouter/solve.cpp @@ -433,13 +433,16 @@ static int Autoroute_One_Track( PCB_EDIT_FRAME* pcbframe, /* clear direction flags */ i = RoutingMatrix.m_Nrows * RoutingMatrix.m_Ncols * sizeof(DIR_CELL); - memset( RoutingMatrix.m_DirSide[TOP], FROM_NOWHERE, i ); + + if( two_sides ) + memset( RoutingMatrix.m_DirSide[TOP], FROM_NOWHERE, i ); memset( RoutingMatrix.m_DirSide[BOTTOM], FROM_NOWHERE, i ); lastopen = lastclos = lastmove = 0; /* Set tab_masque[side] for final test of routing. */ - tab_mask[TOP] = topLayerMask; + if( two_sides ) + tab_mask[TOP] = topLayerMask; tab_mask[BOTTOM] = bottomLayerMask; /* Set active layers mask. */ @@ -1170,11 +1173,11 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, g_CurrentTrackSegment->SetLayer( 0x0F ); g_CurrentTrackSegment->SetStart(wxPoint( pcb->GetBoundingBox().GetX() + - ( RoutingMatrix.m_GridRouting * row ), + ( RoutingMatrix.m_GridRouting * row ), pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ))); g_CurrentTrackSegment->SetEnd( g_CurrentTrackSegment->GetStart() ); - + g_CurrentTrackSegment->SetWidth( pcb->GetCurrentViaSize() ); g_CurrentTrackSegment->SetShape( pcb->GetDesignSettings().m_CurrentViaType ); diff --git a/pcbnew/clean.cpp b/pcbnew/clean.cpp index be11aa9aa7..8b2a120cc8 100644 --- a/pcbnew/clean.cpp +++ b/pcbnew/clean.cpp @@ -112,21 +112,22 @@ void PCB_EDIT_FRAME::Clean_Pcb( wxDC* DC ) { DIALOG_CLEANING_OPTIONS dlg( this ); - if( dlg.ShowModal() == wxID_OK ) + if( dlg.ShowModal() != wxID_OK ) + return; + + wxBusyCursor( dummy ); + TRACKS_CLEANER cleaner( GetBoard() ); + cleaner.SetdeleteUnconnectedTracksOpt( dlg.deleteUnconnectedSegm ); + cleaner.SetMergeSegmentsOpt( dlg.mergeSegments ); + cleaner.SetCleanViasOpt( dlg.cleanVias ); + + if( cleaner.CleanupBoard() ) { - wxBusyCursor( dummy ); - TRACKS_CLEANER cleaner( GetBoard() ); - cleaner.SetdeleteUnconnectedTracksOpt( dlg.deleteUnconnectedSegm ); - cleaner.SetMergeSegmentsOpt( dlg.mergeSegments ); - cleaner.SetCleanViasOpt( dlg.cleanVias ); - if( cleaner.CleanupBoard() ) - { - // Clear undo and redo lists to avoid inconsistencies between lists - GetScreen()->ClearUndoRedoList(); - SetCurItem( NULL ); - Compile_Ratsnest( NULL, true ); - OnModify(); - } + // Clear undo and redo lists to avoid inconsistencies between lists + GetScreen()->ClearUndoRedoList(); + SetCurItem( NULL ); + Compile_Ratsnest( NULL, true ); + OnModify(); } m_canvas->Refresh( true ); diff --git a/pcbnew/dialogs/dialog_cleaning_options.cpp b/pcbnew/dialogs/dialog_cleaning_options.cpp index 1ad475b323..ea4ec22a5f 100644 --- a/pcbnew/dialogs/dialog_cleaning_options.cpp +++ b/pcbnew/dialogs/dialog_cleaning_options.cpp @@ -32,9 +32,9 @@ DIALOG_CLEANING_OPTIONS::DIALOG_CLEANING_OPTIONS( wxWindow* parent ): DIALOG_CLEANING_OPTIONS_BASE( parent ) { - m_cleanViasOpt->SetValue( cleanVias ); - m_mergeSegmOpt->SetValue( mergeSegments ); - m_deleteUnconnectedOpt->SetValue( deleteUnconnectedSegm ); + m_cleanViasOpt->SetValue( m_cleanVias ); + m_mergeSegmOpt->SetValue( m_mergeSegments ); + m_deleteUnconnectedOpt->SetValue( m_deleteUnconnectedSegm ); m_sdbSizerOK->SetDefault(); GetSizer()->SetSizeHints(this); @@ -42,7 +42,7 @@ DIALOG_CLEANING_OPTIONS::DIALOG_CLEANING_OPTIONS( wxWindow* parent ): } // Static members of DIALOG_CLEANING_OPTIONS -bool DIALOG_CLEANING_OPTIONS::cleanVias = true; -bool DIALOG_CLEANING_OPTIONS::mergeSegments = true; -bool DIALOG_CLEANING_OPTIONS::deleteUnconnectedSegm = true; +bool DIALOG_CLEANING_OPTIONS::m_cleanVias = true; +bool DIALOG_CLEANING_OPTIONS::m_mergeSegments = true; +bool DIALOG_CLEANING_OPTIONS::m_deleteUnconnectedSegm = true; diff --git a/pcbnew/dialogs/dialog_cleaning_options.h b/pcbnew/dialogs/dialog_cleaning_options.h index d32c969d7c..fcaa38a504 100644 --- a/pcbnew/dialogs/dialog_cleaning_options.h +++ b/pcbnew/dialogs/dialog_cleaning_options.h @@ -11,15 +11,16 @@ class DIALOG_CLEANING_OPTIONS: public DIALOG_CLEANING_OPTIONS_BASE { public: - static bool cleanVias; - static bool mergeSegments; - static bool deleteUnconnectedSegm; + static bool m_cleanVias; + static bool m_mergeSegments; + static bool m_deleteUnconnectedSegm; public: DIALOG_CLEANING_OPTIONS( wxWindow* parent ); ~DIALOG_CLEANING_OPTIONS() { + GetOpts( ); } private: @@ -33,17 +34,11 @@ private: EndModal( wxID_OK ); } - void OnCloseWindow( wxCloseEvent& event ) - { - GetOpts( ); - EndModal( wxID_CANCEL ); - } - void GetOpts( ) { - cleanVias = m_cleanViasOpt->GetValue( ); - mergeSegments = m_mergeSegmOpt->GetValue( ); - deleteUnconnectedSegm = m_deleteUnconnectedOpt->GetValue( ); + m_cleanVias = m_cleanViasOpt->GetValue( ); + m_mergeSegments = m_mergeSegmOpt->GetValue( ); + m_deleteUnconnectedSegm = m_deleteUnconnectedOpt->GetValue( ); } }; diff --git a/pcbnew/dialogs/dialog_cleaning_options_base.cpp b/pcbnew/dialogs/dialog_cleaning_options_base.cpp index 7668ae9603..4fe413fc6a 100644 --- a/pcbnew/dialogs/dialog_cleaning_options_base.cpp +++ b/pcbnew/dialogs/dialog_cleaning_options_base.cpp @@ -56,7 +56,6 @@ DIALOG_CLEANING_OPTIONS_BASE::DIALOG_CLEANING_OPTIONS_BASE( wxWindow* parent, wx this->Centre( wxBOTH ); // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_CLEANING_OPTIONS_BASE::OnCloseWindow ) ); m_sdbSizerCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CLEANING_OPTIONS_BASE::OnCancelClick ), NULL, this ); m_sdbSizerOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CLEANING_OPTIONS_BASE::OnOKClick ), NULL, this ); } @@ -64,7 +63,6 @@ DIALOG_CLEANING_OPTIONS_BASE::DIALOG_CLEANING_OPTIONS_BASE( wxWindow* parent, wx DIALOG_CLEANING_OPTIONS_BASE::~DIALOG_CLEANING_OPTIONS_BASE() { // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_CLEANING_OPTIONS_BASE::OnCloseWindow ) ); m_sdbSizerCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CLEANING_OPTIONS_BASE::OnCancelClick ), NULL, this ); m_sdbSizerOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_CLEANING_OPTIONS_BASE::OnOKClick ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_cleaning_options_base.fbp b/pcbnew/dialogs/dialog_cleaning_options_base.fbp index 85166997f9..6d69a0a9a8 100644 --- a/pcbnew/dialogs/dialog_cleaning_options_base.fbp +++ b/pcbnew/dialogs/dialog_cleaning_options_base.fbp @@ -59,7 +59,7 @@ - OnCloseWindow + diff --git a/pcbnew/dialogs/dialog_cleaning_options_base.h b/pcbnew/dialogs/dialog_cleaning_options_base.h index e43280135e..d4e61eea45 100644 --- a/pcbnew/dialogs/dialog_cleaning_options_base.h +++ b/pcbnew/dialogs/dialog_cleaning_options_base.h @@ -45,7 +45,6 @@ class DIALOG_CLEANING_OPTIONS_BASE : public DIALOG_SHIM wxButton* m_sdbSizerCancel; // Virtual event handlers, overide them in your derived class - virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnOKClick( wxCommandEvent& event ) { event.Skip(); }