diff --git a/include/layers_id_colors_and_visibility.h b/include/layers_id_colors_and_visibility.h index b150666ee9..6bb09417c5 100644 --- a/include/layers_id_colors_and_visibility.h +++ b/include/layers_id_colors_and_visibility.h @@ -214,15 +214,35 @@ enum PCB_VISIBLE MOD_REFERENCES_VISIBLE, ///< show modules references (when texts are visibles) TRACKS_VISIBLE, - TRACKS_NETNAMES_VISIBLE, PADS_VISIBLE, - PADS_NETNAMES_VISIBLE, PADS_HOLES_VISIBLE, VIAS_HOLES_VISIBLE, + // Netname layers + LAYER_1_NETNAMES_VISIBLE, // Bottom layer + LAYER_2_NETNAMES_VISIBLE, + LAYER_3_NETNAMES_VISIBLE, + LAYER_4_NETNAMES_VISIBLE, + LAYER_5_NETNAMES_VISIBLE, + LAYER_6_NETNAMES_VISIBLE, + LAYER_7_NETNAMES_VISIBLE, + LAYER_8_NETNAMES_VISIBLE, + LAYER_9_NETNAMES_VISIBLE, + LAYER_10_NETNAMES_VISIBLE, + LAYER_11_NETNAMES_VISIBLE, + LAYER_12_NETNAMES_VISIBLE, + LAYER_13_NETNAMES_VISIBLE, + LAYER_14_NETNAMES_VISIBLE, + LAYER_15_NETNAMES_VISIBLE, + LAYER_16_NETNAMES_VISIBLE, // Top layer + PADS_NETNAMES_VISIBLE, + END_PCB_VISIBLE_LIST // sentinel }; +#define FIRST_NETNAME_LAYER ITEM_GAL_LAYER( LAYER_1_NETNAMES_VISIBLE ) +#define LAST_NETNAME_LAYER ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ) + /// macro for obtaining layer number for specific item (eg. pad or text) #define ITEM_GAL_LAYER(layer) (NB_LAYERS + layer) @@ -338,4 +358,32 @@ LAYER_NUM ExtractLayer( LAYER_MSK aMask ); */ wxString LayerMaskDescribe( const BOARD *aBoard, LAYER_MSK aMask ); +/** + * Returns a netname layer corresponding to the given layer. + */ +inline LAYER_NUM GetNetnameLayer( LAYER_NUM aLayer ) +{ + if( IsCopperLayer( aLayer ) ) + { + // Compute the offset in description layers + return FIRST_NETNAME_LAYER + ( aLayer - FIRST_COPPER_LAYER ); + } + else if( aLayer == ITEM_GAL_LAYER( PADS_VISIBLE ) ) + return ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ); + + // Fallback + return COMMENT_N; +} + +/** + * Function IsCopperLayer + * tests whether a layer is a netname layer + * @param aLayer = Layer to test + * @return true if aLayer is a valid netname layer + */ +inline bool IsNetnameLayer( LAYER_NUM aLayer ) +{ + return aLayer >= FIRST_NETNAME_LAYER && aLayer <= LAST_NETNAME_LAYER; +} + #endif // _LAYERS_ID_AND_VISIBILITY_H_ diff --git a/pcbnew/basepcbframe.cpp b/pcbnew/basepcbframe.cpp index e37983e063..e8accd2d7f 100644 --- a/pcbnew/basepcbframe.cpp +++ b/pcbnew/basepcbframe.cpp @@ -98,10 +98,24 @@ const int m_galLayerOrder[] = ITEM_GAL_LAYER( VIAS_HOLES_VISIBLE ), ITEM_GAL_LAYER( PADS_HOLES_VISIBLE ), ITEM_GAL_LAYER( VIAS_VISIBLE ), ITEM_GAL_LAYER( PADS_VISIBLE ), - ITEM_GAL_LAYER( TRACKS_NETNAMES_VISIBLE ), ITEM_GAL_LAYER( PAD_FR_VISIBLE ), - LAYER_N_FRONT, LAYER_N_15, LAYER_N_14, LAYER_N_13, - LAYER_N_12, LAYER_N_11, LAYER_N_10, LAYER_N_9, LAYER_N_8, LAYER_N_7, LAYER_N_6, - LAYER_N_5, LAYER_N_4, LAYER_N_3, LAYER_N_2, LAYER_N_BACK, ITEM_GAL_LAYER( PAD_BK_VISIBLE ), + ITEM_GAL_LAYER( PAD_FR_VISIBLE ), + ITEM_GAL_LAYER( LAYER_16_NETNAMES_VISIBLE ), LAYER_N_FRONT, + ITEM_GAL_LAYER( LAYER_15_NETNAMES_VISIBLE ), LAYER_N_15, + ITEM_GAL_LAYER( LAYER_14_NETNAMES_VISIBLE ), LAYER_N_14, + ITEM_GAL_LAYER( LAYER_13_NETNAMES_VISIBLE ), LAYER_N_13, + ITEM_GAL_LAYER( LAYER_12_NETNAMES_VISIBLE ), LAYER_N_12, + ITEM_GAL_LAYER( LAYER_11_NETNAMES_VISIBLE ), LAYER_N_11, + ITEM_GAL_LAYER( LAYER_10_NETNAMES_VISIBLE ), LAYER_N_10, + ITEM_GAL_LAYER( LAYER_9_NETNAMES_VISIBLE ), LAYER_N_9, + ITEM_GAL_LAYER( LAYER_8_NETNAMES_VISIBLE ), LAYER_N_8, + ITEM_GAL_LAYER( LAYER_7_NETNAMES_VISIBLE ), LAYER_N_7, + ITEM_GAL_LAYER( LAYER_6_NETNAMES_VISIBLE ), LAYER_N_6, + ITEM_GAL_LAYER( LAYER_5_NETNAMES_VISIBLE ), LAYER_N_5, + ITEM_GAL_LAYER( LAYER_4_NETNAMES_VISIBLE ), LAYER_N_4, + ITEM_GAL_LAYER( LAYER_3_NETNAMES_VISIBLE ), LAYER_N_3, + ITEM_GAL_LAYER( LAYER_2_NETNAMES_VISIBLE ), LAYER_N_2, + ITEM_GAL_LAYER( LAYER_1_NETNAMES_VISIBLE ), LAYER_N_BACK, + ITEM_GAL_LAYER( PAD_BK_VISIBLE ), SOLDERMASK_N_BACK, ADHESIVE_N_BACK, SOLDERPASTE_N_BACK, SILKSCREEN_N_BACK, ITEM_GAL_LAYER( MOD_TEXT_BK_VISIBLE ) @@ -227,7 +241,10 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard ) // Netnames are drawn only when scale is sufficient (level of details) // so there is no point in caching them - view->SetLayerCached( ITEM_GAL_LAYER( TRACKS_NETNAMES_VISIBLE ), false ); + for( LAYER_NUM layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; ++layer ) + { + view->SetLayerCached( GetNetnameLayer( layer ), false ); + } view->SetLayerCached( ITEM_GAL_LAYER( PADS_NETNAMES_VISIBLE ), false ); // Load layer & elements visibility settings diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index 05bd95d5c6..91029f30ae 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -754,7 +754,7 @@ void TRACK::ViewGetLayers( int aLayers[], int& aCount ) const { // Show the track and its netname on different layers aLayers[0] = GetLayer(); - aLayers[1] = ITEM_GAL_LAYER( TRACKS_NETNAMES_VISIBLE ); + aLayers[1] = GetNetnameLayer( aLayers[0] ); aCount = 2; } @@ -770,7 +770,7 @@ void TRACK::ViewGetRequiredLayers( int aLayers[], int& aCount ) const unsigned int TRACK::ViewGetLOD( int aLayer ) const { // Netnames will be shown only if zoom is appropriate - if( aLayer == ITEM_GAL_LAYER( TRACKS_NETNAMES_VISIBLE ) ) + if( aLayer == GetNetnameLayer( GetLayer() ) ) { return ( 20000000 / m_Width ); } diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index 00beb48e59..d4221b49e6 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -73,7 +73,13 @@ void PCB_RENDER_SETTINGS::ImportLegacyColors( COLORS_DESIGN_SETTINGS* aSettings m_itemColors[VIAS_VISIBLE] = COLOR4D( 0.7, 0.7, 0.7, 1.0 ); m_itemColors[PADS_VISIBLE] = COLOR4D( 0.7, 0.7, 0.7, 1.0 ); m_itemColors[PADS_NETNAMES_VISIBLE] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); - m_itemColors[TRACKS_NETNAMES_VISIBLE] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); + // Netnames for copper layers + for( LAYER_NUM layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; ++layer ) + { + // Quick, dirty hack, netnames layers should be stored in usual layers + m_itemColors[GetNetnameLayer( layer ) - NB_LAYERS] = COLOR4D( 0.8, 0.8, 0.8, 0.7 ); + } + Update(); } @@ -261,7 +267,7 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) m_gal->SetStrokeColor( color ); - if( aLayer == ITEM_GAL_LAYER( TRACKS_NETNAMES_VISIBLE) ) + if( IsNetnameLayer( aLayer ) ) { // If there is a net name - display it on the track if( netNumber != 0 ) @@ -289,7 +295,7 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) m_gal->StrokeText( netName, textPosition, textOrientation ); } } - else + else if( IsCopperLayer( aLayer )) { // Draw a regular track m_gal->SetIsStroke( true );