Added outline display mode for pads, vias & tracks
This commit is contained in:
parent
850c0a8473
commit
664692b2e6
|
@ -43,6 +43,7 @@ RENDER_SETTINGS::RENDER_SETTINGS()
|
||||||
m_hiContrastEnabled = false;
|
m_hiContrastEnabled = false;
|
||||||
m_hiContrastFactor = 0.2;
|
m_hiContrastFactor = 0.2;
|
||||||
m_activeLayer = 0;
|
m_activeLayer = 0;
|
||||||
|
m_outlineWidth = 60000;
|
||||||
|
|
||||||
// Store the predefined colors used in KiCad in format used by GAL
|
// Store the predefined colors used in KiCad in format used by GAL
|
||||||
for( int i = 0; i < NBCOLOR; i++ )
|
for( int i = 0; i < NBCOLOR; i++ )
|
||||||
|
|
|
@ -132,6 +132,7 @@ protected:
|
||||||
float m_selectFactor; /// Specifies how color of selected items is changed
|
float m_selectFactor; /// Specifies how color of selected items is changed
|
||||||
float m_layerOpacity; /// Determines opacity of all layers, so every can be seen
|
float m_layerOpacity; /// Determines opacity of all layers, so every can be seen
|
||||||
/// at the same time
|
/// at the same time
|
||||||
|
float m_outlineWidth; /// Line width used when drawing outlines
|
||||||
|
|
||||||
/// Map of colors that were usually used for display
|
/// Map of colors that were usually used for display
|
||||||
std::map<EDA_COLOR_T, COLOR4D> m_legacyColorMap;
|
std::map<EDA_COLOR_T, COLOR4D> m_legacyColorMap;
|
||||||
|
|
|
@ -211,14 +211,17 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard )
|
||||||
view->Add( zone );
|
view->Add( zone );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply layer coloring scheme
|
// Apply layer coloring scheme & display options
|
||||||
if( view->GetPainter() )
|
if( view->GetPainter() )
|
||||||
{
|
{
|
||||||
KiGfx::PCB_RENDER_SETTINGS* colorSettings = new KiGfx::PCB_RENDER_SETTINGS();
|
KiGfx::PCB_RENDER_SETTINGS* settings = new KiGfx::PCB_RENDER_SETTINGS();
|
||||||
|
|
||||||
// Load layers' colors from PCB data
|
// Load layers' colors from PCB data
|
||||||
colorSettings->ImportLegacyColors( m_Pcb->GetColorsSettings() );
|
settings->ImportLegacyColors( m_Pcb->GetColorsSettings() );
|
||||||
view->GetPainter()->ApplySettings( colorSettings );
|
view->GetPainter()->ApplySettings( settings );
|
||||||
|
|
||||||
|
// Load display options (such as filled/outline display of items)
|
||||||
|
settings->LoadDisplayOptions( DisplayOpt );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set rendering order of layers (check m_galLayerOrder to see the order)
|
// Set rendering order of layers (check m_galLayerOrder to see the order)
|
||||||
|
@ -489,7 +492,20 @@ void PCB_BASE_FRAME::OnTogglePolarCoords( wxCommandEvent& aEvent )
|
||||||
void PCB_BASE_FRAME::OnTogglePadDrawMode( wxCommandEvent& aEvent )
|
void PCB_BASE_FRAME::OnTogglePadDrawMode( wxCommandEvent& aEvent )
|
||||||
{
|
{
|
||||||
m_DisplayPadFill = DisplayOpt.DisplayPadFill = !m_DisplayPadFill;
|
m_DisplayPadFill = DisplayOpt.DisplayPadFill = !m_DisplayPadFill;
|
||||||
m_canvas->Refresh();
|
|
||||||
|
#ifdef KICAD_GAL
|
||||||
|
// Apply new display options to the GAL canvas
|
||||||
|
KiGfx::PCB_PAINTER* painter =
|
||||||
|
static_cast<KiGfx::PCB_PAINTER*> ( m_galCanvas->GetView()->GetPainter() );
|
||||||
|
KiGfx::PCB_RENDER_SETTINGS* settings =
|
||||||
|
static_cast<KiGfx::PCB_RENDER_SETTINGS*> ( painter->GetSettings() );
|
||||||
|
settings->LoadDisplayOptions( DisplayOpt );
|
||||||
|
|
||||||
|
if( IsGalCanvasActive() )
|
||||||
|
m_galCanvas->Refresh();
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
m_canvas->Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,12 @@ using namespace KiGfx;
|
||||||
|
|
||||||
PCB_RENDER_SETTINGS::PCB_RENDER_SETTINGS()
|
PCB_RENDER_SETTINGS::PCB_RENDER_SETTINGS()
|
||||||
{
|
{
|
||||||
|
// By default everything should be displayed as filled
|
||||||
|
for( unsigned int i = 0; i < END_PCB_VISIBLE_LIST; ++i )
|
||||||
|
{
|
||||||
|
m_sketchModeSelect[i] = false;
|
||||||
|
}
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,10 +67,10 @@ void PCB_RENDER_SETTINGS::ImportLegacyColors( COLORS_DESIGN_SETTINGS* aSettings
|
||||||
m_itemColors[i] = m_legacyColorMap[aSettings->GetItemColor( i )];
|
m_itemColors[i] = m_legacyColorMap[aSettings->GetItemColor( i )];
|
||||||
}
|
}
|
||||||
|
|
||||||
m_itemColors[VIA_HOLES_VISIBLE] = COLOR4D( 0.5f, 0.4f, 0.0f, 1.0f );
|
m_itemColors[VIA_HOLES_VISIBLE] = COLOR4D( 0.5, 0.4, 0.0, 1.0 );
|
||||||
m_itemColors[PAD_HOLES_VISIBLE] = COLOR4D( 0.0f, 0.5f, 0.5f, 1.0f );
|
m_itemColors[PAD_HOLES_VISIBLE] = COLOR4D( 0.0, 0.5, 0.5, 1.0 );
|
||||||
m_itemColors[VIAS_VISIBLE] = COLOR4D( 0.7f, 0.7f, 0.7f, 1.0f );
|
m_itemColors[VIAS_VISIBLE] = COLOR4D( 0.7, 0.7, 0.7, 1.0 );
|
||||||
m_itemColors[PADS_VISIBLE] = COLOR4D( 0.7f, 0.7f, 0.7f, 1.0f );
|
m_itemColors[PADS_VISIBLE] = COLOR4D( 0.7, 0.7, 0.7, 1.0 );
|
||||||
|
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
@ -73,6 +79,11 @@ void PCB_RENDER_SETTINGS::ImportLegacyColors( COLORS_DESIGN_SETTINGS* aSettings
|
||||||
void PCB_RENDER_SETTINGS::LoadDisplayOptions( const DISPLAY_OPTIONS& aOptions )
|
void PCB_RENDER_SETTINGS::LoadDisplayOptions( const DISPLAY_OPTIONS& aOptions )
|
||||||
{
|
{
|
||||||
m_hiContrastEnabled = aOptions.ContrastModeDisplay;
|
m_hiContrastEnabled = aOptions.ContrastModeDisplay;
|
||||||
|
|
||||||
|
// Whether to draw tracks, vias & pads filled or as outlines
|
||||||
|
m_sketchModeSelect[PADS_VISIBLE] = !aOptions.DisplayPadFill;
|
||||||
|
m_sketchModeSelect[VIAS_VISIBLE] = !aOptions.DisplayViaFill;
|
||||||
|
m_sketchModeSelect[TRACKS_VISIBLE] = !aOptions.DisplayPcbTrackFill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,9 +228,38 @@ void PCB_PAINTER::draw( const TRACK* aTrack )
|
||||||
|
|
||||||
m_gal->SetLineCap( LINE_CAP_ROUND );
|
m_gal->SetLineCap( LINE_CAP_ROUND );
|
||||||
m_gal->SetLineJoin( LINE_JOIN_ROUND );
|
m_gal->SetLineJoin( LINE_JOIN_ROUND );
|
||||||
m_gal->SetLineWidth( aTrack->GetWidth() );
|
|
||||||
m_gal->SetStrokeColor( strokeColor );
|
m_gal->SetStrokeColor( strokeColor );
|
||||||
m_gal->DrawLine( start, end );
|
if( m_pcbSettings->m_sketchModeSelect[TRACKS_VISIBLE] )
|
||||||
|
{
|
||||||
|
// Outline mode
|
||||||
|
VECTOR2D line = end - start;
|
||||||
|
double length = line.EuclideanNorm();
|
||||||
|
int width = aTrack->GetWidth();
|
||||||
|
|
||||||
|
m_gal->SetLineWidth( m_pcbSettings->m_outlineWidth );
|
||||||
|
m_gal->SetIsFill( false );
|
||||||
|
m_gal->SetIsStroke( true );
|
||||||
|
m_gal->Save();
|
||||||
|
|
||||||
|
m_gal->Translate( start );
|
||||||
|
m_gal->Rotate( line.Angle() );
|
||||||
|
m_gal->DrawLine( VECTOR2D( 0, width / 2 ),
|
||||||
|
VECTOR2D( length, width / 2 ) );
|
||||||
|
m_gal->DrawLine( VECTOR2D( 0, -width / 2 ),
|
||||||
|
VECTOR2D( length, -width / 2 ) );
|
||||||
|
m_gal->DrawArc( VECTOR2D( 0, 0 ), width / 2, M_PI / 2, 3 * M_PI / 2 );
|
||||||
|
m_gal->DrawArc( VECTOR2D( length, 0 ), width / 2, M_PI / 2, -M_PI / 2 );
|
||||||
|
|
||||||
|
m_gal->Restore();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Filled mode
|
||||||
|
m_gal->SetIsFill( true );
|
||||||
|
m_gal->SetIsStroke( false );
|
||||||
|
m_gal->SetLineWidth( aTrack->GetWidth() );
|
||||||
|
m_gal->DrawLine( start, end );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -227,36 +267,69 @@ void PCB_PAINTER::draw( const SEGVIA* aVia, int aLayer )
|
||||||
{
|
{
|
||||||
VECTOR2D center( aVia->GetStart() );
|
VECTOR2D center( aVia->GetStart() );
|
||||||
double radius;
|
double radius;
|
||||||
COLOR4D fillColor;
|
COLOR4D color;
|
||||||
|
|
||||||
// Choose drawing settings depending on if we are drawing via's pad or hole
|
// Choose drawing settings depending on if we are drawing via's pad or hole
|
||||||
if( aLayer == ITEM_GAL_LAYER( VIAS_VISIBLE ) )
|
if( aLayer == ITEM_GAL_LAYER( VIAS_VISIBLE ) )
|
||||||
{
|
{
|
||||||
radius = aVia->GetWidth() / 2.0f;
|
radius = aVia->GetWidth() / 2.0;
|
||||||
}
|
}
|
||||||
else if( aLayer == ITEM_GAL_LAYER( VIA_HOLES_VISIBLE ) )
|
else if( aLayer == ITEM_GAL_LAYER( VIA_HOLES_VISIBLE ) )
|
||||||
{
|
{
|
||||||
radius = aVia->GetDrillValue() / 2.0f;
|
radius = aVia->GetDrillValue() / 2.0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fillColor = getLayerColor( aLayer, aVia->GetNet() );
|
color = getLayerColor( aLayer, aVia->GetNet() );
|
||||||
|
|
||||||
m_gal->SetIsStroke( false );
|
if( m_pcbSettings->m_sketchModeSelect[VIAS_VISIBLE] )
|
||||||
m_gal->SetIsFill( true );
|
{
|
||||||
m_gal->SetFillColor( fillColor );
|
// Outline mode
|
||||||
m_gal->DrawCircle( center, radius );
|
m_gal->SetIsFill( false );
|
||||||
|
m_gal->SetIsStroke( true );
|
||||||
|
m_gal->SetLineWidth( m_pcbSettings->m_outlineWidth );
|
||||||
|
m_gal->SetStrokeColor( color );
|
||||||
|
m_gal->DrawCircle( center, radius );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Filled mode
|
||||||
|
m_gal->SetIsFill( true );
|
||||||
|
m_gal->SetIsStroke( false );
|
||||||
|
m_gal->SetFillColor( color );
|
||||||
|
m_gal->DrawCircle( center, radius );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
|
void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
|
||||||
{
|
{
|
||||||
COLOR4D fillColor;
|
COLOR4D color;
|
||||||
VECTOR2D size;
|
VECTOR2D size;
|
||||||
PAD_SHAPE_T shape;
|
PAD_SHAPE_T shape;
|
||||||
double m, n;
|
double m, n;
|
||||||
|
|
||||||
|
color = getLayerColor( aLayer, aPad->GetNet() );
|
||||||
|
|
||||||
|
if( m_pcbSettings->m_sketchModeSelect[PADS_VISIBLE] )
|
||||||
|
{
|
||||||
|
// Outline mode
|
||||||
|
m_gal->SetIsFill( false );
|
||||||
|
m_gal->SetIsStroke( true );
|
||||||
|
m_gal->SetLineCap( LINE_CAP_ROUND );
|
||||||
|
m_gal->SetLineJoin( LINE_JOIN_MITER );
|
||||||
|
m_gal->SetLineWidth( m_pcbSettings->m_outlineWidth );
|
||||||
|
m_gal->SetStrokeColor( color );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Filled mode
|
||||||
|
m_gal->SetIsFill( true );
|
||||||
|
m_gal->SetIsStroke( false );
|
||||||
|
m_gal->SetFillColor( color );
|
||||||
|
}
|
||||||
|
|
||||||
m_gal->Save();
|
m_gal->Save();
|
||||||
m_gal->Translate( VECTOR2D( aPad->GetPosition() ) );
|
m_gal->Translate( VECTOR2D( aPad->GetPosition() ) );
|
||||||
m_gal->Rotate( -aPad->GetOrientation() * M_PI / 1800.0 ); // orientation is in tenths of degree
|
m_gal->Rotate( -aPad->GetOrientation() * M_PI / 1800.0 ); // orientation is in tenths of degree
|
||||||
|
@ -265,23 +338,17 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
|
||||||
if( aLayer == ITEM_GAL_LAYER( PAD_HOLES_VISIBLE ) )
|
if( aLayer == ITEM_GAL_LAYER( PAD_HOLES_VISIBLE ) )
|
||||||
{
|
{
|
||||||
// Drawing hole
|
// Drawing hole
|
||||||
size = VECTOR2D( aPad->GetDrillSize() ) / 2.0f;
|
size = VECTOR2D( aPad->GetDrillSize() ) / 2.0;
|
||||||
shape = aPad->GetDrillShape();
|
shape = aPad->GetDrillShape();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Drawing every kind of pad
|
// Drawing every kind of pad
|
||||||
m_gal->Translate( VECTOR2D( aPad->GetOffset() ) );
|
m_gal->Translate( VECTOR2D( aPad->GetOffset() ) );
|
||||||
size = VECTOR2D( aPad->GetSize() ) / 2.0f;
|
size = VECTOR2D( aPad->GetSize() ) / 2.0;
|
||||||
shape = aPad->GetShape();
|
shape = aPad->GetShape();
|
||||||
}
|
}
|
||||||
|
|
||||||
fillColor = getLayerColor( aLayer, aPad->GetNet() );
|
|
||||||
|
|
||||||
m_gal->SetIsFill( true );
|
|
||||||
m_gal->SetIsStroke( false );
|
|
||||||
m_gal->SetFillColor( fillColor );
|
|
||||||
|
|
||||||
switch( shape )
|
switch( shape )
|
||||||
{
|
{
|
||||||
case PAD_OVAL:
|
case PAD_OVAL:
|
||||||
|
@ -290,18 +357,42 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
|
||||||
m = ( size.y - size.x );
|
m = ( size.y - size.x );
|
||||||
n = size.x;
|
n = size.x;
|
||||||
|
|
||||||
m_gal->DrawCircle( VECTOR2D( 0, -m ), n );
|
if( m_pcbSettings->m_sketchModeSelect[PADS_VISIBLE] )
|
||||||
m_gal->DrawCircle( VECTOR2D( 0, m ), n );
|
{
|
||||||
m_gal->DrawRectangle( VECTOR2D( -n, -m ), VECTOR2D( n, m ) );
|
// Outline mode
|
||||||
|
m_gal->DrawArc( VECTOR2D( 0, -m ), n, -M_PI, 0 );
|
||||||
|
m_gal->DrawArc( VECTOR2D( 0, m ), n, M_PI, 0 );
|
||||||
|
m_gal->DrawLine( VECTOR2D( -n, -m ), VECTOR2D( -n, m ) );
|
||||||
|
m_gal->DrawLine( VECTOR2D( n, -m ), VECTOR2D( n, m ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Filled mode
|
||||||
|
m_gal->DrawCircle( VECTOR2D( 0, -m ), n );
|
||||||
|
m_gal->DrawCircle( VECTOR2D( 0, m ), n );
|
||||||
|
m_gal->DrawRectangle( VECTOR2D( -n, -m ), VECTOR2D( n, m ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m = ( size.x - size.y );
|
m = ( size.x - size.y );
|
||||||
n = size.y;
|
n = size.y;
|
||||||
|
|
||||||
m_gal->DrawCircle( VECTOR2D( -m, 0 ), n );
|
if( m_pcbSettings->m_sketchModeSelect[PADS_VISIBLE] )
|
||||||
m_gal->DrawCircle( VECTOR2D( m, 0 ), n );
|
{
|
||||||
m_gal->DrawRectangle( VECTOR2D( -m, -n ), VECTOR2D( m, n ) );
|
// Outline mode
|
||||||
|
m_gal->DrawArc( VECTOR2D( -m, 0 ), n, M_PI / 2, 3 * M_PI / 2 );
|
||||||
|
m_gal->DrawArc( VECTOR2D( m, 0 ), n, M_PI / 2, -M_PI / 2 );
|
||||||
|
m_gal->DrawLine( VECTOR2D( -m, -n ), VECTOR2D( m, -n ) );
|
||||||
|
m_gal->DrawLine( VECTOR2D( -m, n ), VECTOR2D( m, n ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Filled mode
|
||||||
|
m_gal->DrawCircle( VECTOR2D( -m, 0 ), n );
|
||||||
|
m_gal->DrawCircle( VECTOR2D( m, 0 ), n );
|
||||||
|
m_gal->DrawRectangle( VECTOR2D( -m, -n ), VECTOR2D( m, n ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue