diff --git a/pcbnew/class_dimension.cpp b/pcbnew/class_dimension.cpp index 6a2cfb407b..6cd8c58bec 100644 --- a/pcbnew/class_dimension.cpp +++ b/pcbnew/class_dimension.cpp @@ -489,6 +489,18 @@ wxString DIMENSION::GetSelectMenuText() const } +void DIMENSION::ViewGetLayers( int aLayers[], int& aCount ) const +{ + // Layer that simply displays the text + aLayers[0] = m_Layer; + + // On the general purpose overlay there is a selection box displayed + aLayers[1] = ITEM_GAL_LAYER( GP_OVERLAY ); + + aCount = 2; +} + + EDA_ITEM* DIMENSION::Clone() const { return new DIMENSION( *this ); diff --git a/pcbnew/class_dimension.h b/pcbnew/class_dimension.h index a04920cce4..c92aae7433 100644 --- a/pcbnew/class_dimension.h +++ b/pcbnew/class_dimension.h @@ -144,6 +144,9 @@ public: EDA_ITEM* Clone() const; + /// @copydoc VIEW_ITEM::ViewGetLayers() + virtual void ViewGetLayers( int aLayers[], int& aCount ) const; + #if defined(DEBUG) virtual void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override #endif diff --git a/pcbnew/pcb_painter.cpp b/pcbnew/pcb_painter.cpp index 11a278e924..36ab6588ee 100644 --- a/pcbnew/pcb_painter.cpp +++ b/pcbnew/pcb_painter.cpp @@ -236,7 +236,7 @@ bool PCB_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer ) break; case PCB_DIMENSION_T: - draw( (DIMENSION*) aItem ); + draw( (DIMENSION*) aItem, aLayer ); break; case PCB_TARGET_T: @@ -784,29 +784,37 @@ void PCB_PAINTER::draw( const ZONE_CONTAINER* aZone ) } -void PCB_PAINTER::draw( const DIMENSION* aDimension ) +void PCB_PAINTER::draw( const DIMENSION* aDimension, int aLayer ) { - int layer = aDimension->GetLayer(); - COLOR4D strokeColor = GetColor( NULL, layer ); + if( aLayer == ITEM_GAL_LAYER( GP_OVERLAY ) ) + { + if( aDimension->IsSelected() ) + drawSelectionBox( aDimension ); + } + else + { + int layer = aDimension->GetLayer(); + COLOR4D strokeColor = GetColor( NULL, layer ); - m_gal->SetStrokeColor( strokeColor ); - m_gal->SetIsFill( false ); - m_gal->SetIsStroke( true ); - m_gal->SetLineWidth( aDimension->GetWidth() ); + m_gal->SetStrokeColor( strokeColor ); + m_gal->SetIsFill( false ); + m_gal->SetIsStroke( true ); + m_gal->SetLineWidth( aDimension->GetWidth() ); - // Draw an arrow - m_gal->DrawLine( VECTOR2D( aDimension->m_crossBarO ), VECTOR2D( aDimension->m_crossBarF ) ); - m_gal->DrawLine( VECTOR2D( aDimension->m_featureLineGO ), - VECTOR2D( aDimension->m_featureLineGF ) ); - m_gal->DrawLine( VECTOR2D( aDimension->m_featureLineDO ), - VECTOR2D( aDimension->m_featureLineDF ) ); - m_gal->DrawLine( VECTOR2D( aDimension->m_arrowD1O ), VECTOR2D( aDimension->m_arrowD1F ) ); - m_gal->DrawLine( VECTOR2D( aDimension->m_arrowD2O ), VECTOR2D( aDimension->m_arrowD2F ) ); - m_gal->DrawLine( VECTOR2D( aDimension->m_arrowG1O ), VECTOR2D( aDimension->m_arrowG1F ) ); - m_gal->DrawLine( VECTOR2D( aDimension->m_arrowG2O ), VECTOR2D( aDimension->m_arrowG2F ) ); + // Draw an arrow + m_gal->DrawLine( VECTOR2D( aDimension->m_crossBarO ), VECTOR2D( aDimension->m_crossBarF ) ); + m_gal->DrawLine( VECTOR2D( aDimension->m_featureLineGO ), + VECTOR2D( aDimension->m_featureLineGF ) ); + m_gal->DrawLine( VECTOR2D( aDimension->m_featureLineDO ), + VECTOR2D( aDimension->m_featureLineDF ) ); + m_gal->DrawLine( VECTOR2D( aDimension->m_arrowD1O ), VECTOR2D( aDimension->m_arrowD1F ) ); + m_gal->DrawLine( VECTOR2D( aDimension->m_arrowD2O ), VECTOR2D( aDimension->m_arrowD2F ) ); + m_gal->DrawLine( VECTOR2D( aDimension->m_arrowG1O ), VECTOR2D( aDimension->m_arrowG1F ) ); + m_gal->DrawLine( VECTOR2D( aDimension->m_arrowG2O ), VECTOR2D( aDimension->m_arrowG2F ) ); - // Draw text - draw( &aDimension->Text(), layer ); + // Draw text + draw( &aDimension->Text(), layer ); + } } diff --git a/pcbnew/pcb_painter.h b/pcbnew/pcb_painter.h index 14ae4e156e..952a042f39 100644 --- a/pcbnew/pcb_painter.h +++ b/pcbnew/pcb_painter.h @@ -145,7 +145,7 @@ protected: void draw( const TEXTE_PCB*, int ); void draw( const TEXTE_MODULE*, int ); void draw( const ZONE_CONTAINER* ); - void draw( const DIMENSION* ); + void draw( const DIMENSION*, int ); void draw( const PCB_TARGET* ); /// Draws a white semitransparent box indicating an item as selected