From ddffb23fb3cf9018ac2f3aee4aaf38f95028d2f4 Mon Sep 17 00:00:00 2001 From: Dick Hollenbeck Date: Wed, 25 Jun 2014 12:01:50 -0500 Subject: [PATCH] use LSET::any() whereever possible and avoid conversion to integral type --- TODO.txt | 9 +++++++++ include/layers_id_colors_and_visibility.h | 1 + pcbnew/class_track.cpp | 10 +++++++--- pcbnew/class_track.h | 2 +- pcbnew/connect.cpp | 15 +++++++++------ pcbnew/dragsegm.cpp | 2 +- pcbnew/drc_clearance_test_functions.cpp | 2 +- pcbnew/legacy_plugin.cpp | 12 +++++++++++- 8 files changed, 40 insertions(+), 13 deletions(-) diff --git a/TODO.txt b/TODO.txt index ee0b19e8a1..e24a546a3f 100644 --- a/TODO.txt +++ b/TODO.txt @@ -60,6 +60,8 @@ PCBNew *) Paste (module ...) from clipboard into module editor. + + Dick's Final TODO List: ====================== *) Get licensing cleaned up. @@ -75,3 +77,10 @@ Dick's Final TODO List: * Clear all/some? retained strings on project change. * Clear the FP_LIB_TABLE when the last KIWAY_PLAYER using it is closed. + +Known Cu32 problems: + +*) layer combo box does not show the first layer numbered 0. +*) ratsnest is broken + + diff --git a/include/layers_id_colors_and_visibility.h b/include/layers_id_colors_and_visibility.h index 0886481da8..8e9d9dc600 100644 --- a/include/layers_id_colors_and_visibility.h +++ b/include/layers_id_colors_and_visibility.h @@ -344,6 +344,7 @@ public: LAYER_ID ExtractLayer(); private: + }; diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index d449c614fd..59693fdc02 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -398,6 +398,8 @@ LSET VIA::GetLayerSet() const LSET layermask; + wxASSERT( top_layer <= bottom_layer ); + // LAYER_IDs are numbered from front to back, this is top to bottom. for( LAYER_NUM id = top_layer; id <= bottom_layer; ++id ) { @@ -422,7 +424,7 @@ void VIA::SetLayerPair( LAYER_ID aTopLayer, LAYER_ID aBottomLayer ) aBottomLayer = B_Cu; } - if( aBottomLayer > aTopLayer ) + if( aBottomLayer < aTopLayer ) EXCHG( aBottomLayer, aTopLayer ); m_Layer = aTopLayer; @@ -432,15 +434,15 @@ void VIA::SetLayerPair( LAYER_ID aTopLayer, LAYER_ID aBottomLayer ) void VIA::LayerPair( LAYER_ID* top_layer, LAYER_ID* bottom_layer ) const { - LAYER_ID b_layer = B_Cu; LAYER_ID t_layer = F_Cu; + LAYER_ID b_layer = B_Cu; if( GetViaType() != VIA_THROUGH ) { b_layer = m_BottomLayer; t_layer = m_Layer; - if( b_layer > t_layer ) + if( b_layer < t_layer ) EXCHG( b_layer, t_layer ); } @@ -615,6 +617,7 @@ void TRACK::DrawShortNetname( EDA_DRAW_PANEL* panel, } } + void TRACK::Draw( EDA_DRAW_PANEL* panel, wxDC* aDC, GR_DRAWMODE aDrawMode, const wxPoint& aOffset ) { @@ -679,6 +682,7 @@ void TRACK::Draw( EDA_DRAW_PANEL* panel, wxDC* aDC, GR_DRAWMODE aDrawMode, DrawShortNetname( panel, aDC, aDrawMode, color ); } + void SEGZONE::Draw( EDA_DRAW_PANEL* panel, wxDC* aDC, GR_DRAWMODE aDrawMode, const wxPoint& aOffset ) { diff --git a/pcbnew/class_track.h b/pcbnew/class_track.h index 32f61295cb..edb3d7a396 100644 --- a/pcbnew/class_track.h +++ b/pcbnew/class_track.h @@ -281,7 +281,7 @@ public: return wxT( "TRACK" ); } - /** + /** * Function GetClearance * returns the clearance in internal units. If \a aItem is not NULL then the * returned clearance is the greater of this object's clearance and diff --git a/pcbnew/connect.cpp b/pcbnew/connect.cpp index f03d19c6f1..481c7f9de3 100644 --- a/pcbnew/connect.cpp +++ b/pcbnew/connect.cpp @@ -75,7 +75,8 @@ void CONNECTIONS::SearchConnectionsPadsToIntersectingPads() for( unsigned ii = 0; ii < m_sortedPads.size(); ii++ ) { - D_PAD * pad = m_sortedPads[ii]; + D_PAD* pad = m_sortedPads[ii]; + pad->m_PadsConnected.clear(); candidates.clear(); @@ -84,12 +85,14 @@ void CONNECTIONS::SearchConnectionsPadsToIntersectingPads() // add pads to pad.m_PadsConnected, if they are connected for( unsigned jj = 0; jj < candidates.size(); jj++ ) { - CONNECTED_POINT * item = candidates[jj]; - D_PAD * candidate_pad = item->GetPad(); + CONNECTED_POINT* item = candidates[jj]; + + D_PAD* candidate_pad = item->GetPad(); + if( pad == candidate_pad ) continue; - if( (pad->GetLayerSet() & candidate_pad->GetLayerSet()) == 0 ) + if( !( pad->GetLayerSet() & candidate_pad->GetLayerSet() ).any() ) continue; if( pad->HitTest( item->GetPoint() ) ) { @@ -122,7 +125,7 @@ void CONNECTIONS::SearchTracksConnectedToPads( bool add_to_padlist, bool add_to_ { CONNECTED_POINT* cp_item = candidates[jj]; - if( (pad->GetLayerSet() & cp_item->GetTrack()->GetLayerSet()) == 0 ) + if( !( pad->GetLayerSet() & cp_item->GetTrack()->GetLayerSet() ).any() ) continue; if( pad->HitTest( cp_item->GetPoint() ) ) @@ -339,7 +342,7 @@ int CONNECTIONS::SearchConnectedTracks( const TRACK * aTrack ) { TRACK * ctrack = tracks_candidates[ii]->GetTrack(); - if( ( ctrack->GetLayerSet() & layerMask ) == 0 ) + if( !( ctrack->GetLayerSet() & layerMask ).any() ) continue; if( ctrack == aTrack ) diff --git a/pcbnew/dragsegm.cpp b/pcbnew/dragsegm.cpp index 8964f6c783..82764600aa 100644 --- a/pcbnew/dragsegm.cpp +++ b/pcbnew/dragsegm.cpp @@ -345,7 +345,7 @@ void Collect_TrackSegmentsToDrag( BOARD* aPcb, const wxPoint& aRefPos, LSET aLay if( track->GetNetCode() != aNetCode ) // not the same netcode: all candidates tested break; - if( ( aLayerMask & track->GetLayerSet() ) == 0 ) + if( !( aLayerMask & track->GetLayerSet() ).any() ) continue; // Cannot be connected, not on the same layer if( track->IsDragging() ) diff --git a/pcbnew/drc_clearance_test_functions.cpp b/pcbnew/drc_clearance_test_functions.cpp index 3578045d91..87acf726dd 100644 --- a/pcbnew/drc_clearance_test_functions.cpp +++ b/pcbnew/drc_clearance_test_functions.cpp @@ -354,7 +354,7 @@ bool DRC::doTrackDrc( TRACK* aRefSeg, TRACK* aStart, bool testPads ) continue; // No problem if segment are on different layers : - if( ( layerMask & track->GetLayerSet() ) == 0 ) + if( !( layerMask & track->GetLayerSet() ).any() ) continue; // the minimum distance = clearance plus half the reference track diff --git a/pcbnew/legacy_plugin.cpp b/pcbnew/legacy_plugin.cpp index 5ee8755212..e92c20454c 100644 --- a/pcbnew/legacy_plugin.cpp +++ b/pcbnew/legacy_plugin.cpp @@ -2356,7 +2356,6 @@ void LEGACY_PLUGIN::loadTrackList( int aStructType ) newTrack->SetEnd( wxPoint( end_x, end_y ) ); newTrack->SetWidth( width ); - newTrack->SetLayer( leg_layer2new( m_cu_count, layer_num ) ); if( makeType == PCB_VIA_T ) // Ensure layers are OK when possible: { @@ -2370,6 +2369,17 @@ void LEGACY_PLUGIN::loadTrackList( int aStructType ) if( via->GetViaType() == VIA_THROUGH ) via->SetLayerPair( F_Cu, B_Cu ); + else + { + LAYER_ID back = leg_layer2new( m_cu_count, (layer_num >> 4) & 0xf ); + LAYER_ID front = leg_layer2new( m_cu_count, layer_num & 0xf ); + + via->SetLayerPair( front, back ); + } + } + else + { + newTrack->SetLayer( leg_layer2new( m_cu_count, layer_num ) ); } newTrack->SetNetCode( getNetCode( net_code ) );