207    int originalLayer = aLayer;
 
  225        const PAD*     
pad = 
dynamic_cast<const PAD*
>( aItem );
 
  227        int            holeLayer = aLayer;
 
  233            annularRingLayer = 
F_Cu;
 
  235            annularRingLayer = 
F_Cu;
 
  259            const PAD* 
pad = 
static_cast<const PAD*
>( aItem );
 
  262            if( 
pcbconfig()->m_Display.m_UseViaColorForNormalTHPadstacks
 
  306                if( visibleLayers.any() )
 
  307                    aLayer = visibleLayers.
Seq().back();
 
  357            netColor = ii->second;
 
  408        switch( originalLayer )
 
  413            const PAD* 
pad = 
static_cast<const PAD*
>( aItem );
 
  415            if( 
pad->IsOnLayer( primary ) && !
pad->FlashLayer( primary ) )
 
  436            if( 
via->GetLayerSet().test( primary ) == 0 )
 
  449            if( !
via->FlashLayer( primary ) )
 
  483                if( 
via->GetLayerSet().test( primary ) == 0 )
 
  519                        color = 
color.Mix( it->second, dim_factor_Edge_Cuts );
 
  532                    color = 
color.Mix( backgroundColor, dim_factor_Edge_Cuts );
 
  548        const BOARD*   board = 
via->GetBoard();
 
  552        if( ( 
via->GetLayerSet() & visibleLayers ).none() )
 
 
 
  603    if( aActualThickness == 0 )
 
  606    return aActualThickness;
 
 
  676    switch( item->
Type() )
 
  683        draw( 
static_cast<const PCB_ARC*
>( item ), aLayer );
 
  687        draw( 
static_cast<const PCB_VIA*
>( item ), aLayer );
 
  691        draw( 
static_cast<const PAD*
>( item ), aLayer );
 
  727        draw( 
static_cast<const ZONE*
>( item ), aLayer );
 
  769        m_gal->SetIsFill( 
false );
 
  770        m_gal->SetIsStroke( 
true );
 
  783        m_gal->SetLineWidth( 1 );
 
 
  810    int      track_width = aTrack->
GetWidth();
 
  834        m_gal->SetIsStroke( outline_mode );
 
  835        m_gal->SetIsFill( not outline_mode );
 
  844        m_gal->DrawSegment( start, 
end, track_width );
 
  857        m_gal->SetIsFill( 
false );
 
  858        m_gal->SetIsStroke( 
true );
 
 
  866                                           const wxString& aNetName )
 const 
  877    int num_char = aNetName.size();
 
  880    int         seg_minlength = aSeg.
GetWidth() * num_char;
 
  887    double    penWidth = textSize / 12.0;
 
  895    if( 
end.y == start.
y ) 
 
  900    else if( 
end.x == start.
x ) 
 
  911        num_names = std::max( num_names, 
KiROUND( aSeg.
GetSeg().
Length() / ( M_SQRT2 * min_size ) ) );
 
  914    m_gal->SetIsStroke( 
true );
 
  915    m_gal->SetIsFill( 
false );
 
  916    m_gal->SetStrokeColor( aColor );
 
  917    m_gal->SetLineWidth( penWidth );
 
  918    m_gal->SetFontBold( 
false );
 
  919    m_gal->SetFontItalic( 
false );
 
  920    m_gal->SetFontUnderlined( 
false );
 
  921    m_gal->SetTextMirrored( 
false );
 
  922    m_gal->SetGlyphSize( 
VECTOR2D( textSize * 0.55, textSize * 0.55 ) );
 
  926    int divisions = num_names + 1;
 
  928    for( 
int ii = 1; ii < divisions; ++ii )
 
  930        VECTOR2I textPosition = start + segV * ( (double) ii / divisions );
 
  932        if( viewport.
Contains( textPosition ) )
 
  933            m_gal->BitmapText( aNetName, textPosition, textOrientation );
 
 
  960        m_gal->SetIsStroke( outline_mode );
 
  961        m_gal->SetIsFill( not outline_mode );
 
  991            m_gal->SetIsFill( 
false );
 
  992            m_gal->SetIsStroke( 
true );
 
 1008    m_gal->SetIsFill( 
false );
 
 1009    m_gal->SetIsStroke( 
true );
 
 1011    m_gal->DrawPolygon( cornerBuffer );
 
 1020    m_gal->SetIsFill( 
false );
 
 1021    m_gal->SetIsStroke( 
true );
 
 1022    m_gal->SetStrokeColor( 
COLOR4D( 0.3, 0.2, 0.5, 1.0 ) );
 
 1024    for( 
int idx = 1; idx < arcSpine.
PointCount(); idx++ )
 
 
 1043    aVia->
LayerPair( &layerTop, &layerBottom );
 
 1049                 && ( layerTop != 
F_Cu || layerBottom != 
B_Cu ) );
 
 1061        if( !showNets && !showLayers )
 
 1065        double size = aVia->
GetWidth( currentLayer );
 
 1068        if( size > maxSize )
 
 1072        m_gal->Translate( position );
 
 1075        m_gal->ResetTextAttributes();
 
 1078        m_gal->SetFontBold( 
false );
 
 1079        m_gal->SetFontItalic( 
false );
 
 1080        m_gal->SetFontUnderlined( 
false );
 
 1081        m_gal->SetTextMirrored( 
false );
 
 1083        m_gal->SetIsStroke( 
true );
 
 1084        m_gal->SetIsFill( 
false );
 
 1098        switch( topLayerId )
 
 1100        case F_Cu: topLayer = 1; 
break;
 
 1102        default: topLayer = (topLayerId - 
B_Cu)/2 + 1; 
break;
 
 1105        switch( bottomLayerId )
 
 1107        case F_Cu: bottomLayer = 1; 
break;
 
 1109        default: bottomLayer = (bottomLayerId - 
B_Cu)/2 + 1; 
break;
 
 1113#if wxUSE_UNICODE_WCHAR 
 1114        layerIds << std::to_wstring( topLayer ) << 
L'-' << std::to_wstring( bottomLayer );
 
 1116        layerIds << std::to_string( topLayer ) << 
'-' << std::to_string( bottomLayer );
 
 1122        int minCharCnt = showLayers ? 6 : 3;
 
 1126        tsize = std::min( tsize, size );
 
 1133        if( showLayers && showNets )
 
 1134            textpos.
y += ( tsize * 1.3 )/ 2;
 
 1136        m_gal->SetGlyphSize( namesize );
 
 1137        m_gal->SetLineWidth( namesize.
x / 10.0 );
 
 1145                textpos.
y -= tsize * 1.3;
 
 1159    m_gal->SetIsStroke( 
true );
 
 1160    m_gal->SetIsFill( 
false );
 
 1173            m_gal->SetLineWidth( thickness );
 
 1174            radius -= thickness / 2.0;
 
 1178        m_gal->SetIsFill( 
true );
 
 1186        m_gal->SetIsStroke( 
false );
 
 1187        m_gal->SetIsFill( 
true );
 
 1191            m_gal->SetIsStroke( 
false );
 
 1192            m_gal->SetIsFill( 
true );
 
 1212        m_gal->SetIsFill( 
true );
 
 1213        m_gal->SetIsStroke( 
false );
 
 1215        m_gal->SetLineWidth( margin );
 
 1242            m_gal->SetLineWidth( annular_width );
 
 1243            radius -= annular_width / 2.0;
 
 1266        if( aVia->
FlashLayer( copperLayerForClearance ) )
 
 1272        m_gal->SetIsFill( 
false );
 
 1273        m_gal->SetIsStroke( 
true );
 
 
 1306                netname = wxT( 
"x" );
 
 1308                netname = wxT( 
"*" );
 
 1311        if( netname.IsEmpty() && padNumber.IsEmpty() )
 
 1346            for( 
const std::shared_ptr<PCB_SHAPE>& primitive : aPad->
GetPrimitives( pcbLayer ) )
 
 1350                    position = primitive->GetCenter();
 
 1352                    position += aPad->
ShapePos( pcbLayer );
 
 1354                    padsize.
x = abs( primitive->GetBotRight().x - primitive->GetTopLeft().x );
 
 1355                    padsize.
y = abs( primitive->GetBotRight().y - primitive->GetTopLeft().y );
 
 1369            double limit = std::min( aPad->
GetSize( pcbLayer ).
x,
 
 1370                                     aPad->
GetSize( pcbLayer ).
y ) * 1.1;
 
 1372            if( padsize.
x > limit && padsize.
y > limit )
 
 1380        double size = padsize.
y;
 
 1383        m_gal->Translate( position );
 
 1386        if( padsize.
x < ( padsize.
y * 0.95 ) )
 
 1390            std::swap( padsize.
x, padsize.
y );
 
 1394        if( size > maxSize )
 
 1398        m_gal->ResetTextAttributes();
 
 1401        m_gal->SetFontBold( 
false );
 
 1402        m_gal->SetFontItalic( 
false );
 
 1403        m_gal->SetFontUnderlined( 
false );
 
 1404        m_gal->SetTextMirrored( 
false );
 
 1406        m_gal->SetIsStroke( 
true );
 
 1407        m_gal->SetIsFill( 
false );
 
 1415        int Y_offset_numpad = 0;
 
 1416        int Y_offset_netname = 0;
 
 1418        if( !netname.IsEmpty() && !padNumber.IsEmpty() )
 
 1422            Y_offset_netname = size / 1.4;  
 
 1424            Y_offset_numpad = size / 1.7;
 
 1430        const double Xscale_for_stroked_font = 0.9;
 
 1432        if( !netname.IsEmpty() )
 
 1438            tsize = std::min( tsize, size );
 
 1451            VECTOR2D namesize( tsize*Xscale_for_stroked_font, tsize );
 
 1452            textpos.
y = std::min( tsize * 1.4, 
double( Y_offset_netname ) );
 
 1454            m_gal->SetGlyphSize( namesize );
 
 1455            m_gal->SetLineWidth( namesize.
x / 6.0 );
 
 1456            m_gal->SetFontBold( 
true );
 
 1460        if( !padNumber.IsEmpty() )
 
 1465            tsize = std::min( tsize, size );
 
 1469            tsize = std::min( tsize, size );
 
 1470            VECTOR2D numsize( tsize*Xscale_for_stroked_font, tsize );
 
 1471            textpos.
y = -Y_offset_numpad;
 
 1473            m_gal->SetGlyphSize( numsize );
 
 1474            m_gal->SetLineWidth( numsize.
x / 6.0 );
 
 1475            m_gal->SetFontBold( 
true );
 
 1485        m_gal->SetIsFill( 
true );
 
 1486        m_gal->SetIsStroke( 
false );
 
 1489        lineWidth = std::min( lineWidth, aPad->
GetSizeX() / 2.0 );
 
 1490        lineWidth = std::min( lineWidth, aPad->
GetSizeY() / 2.0 );
 
 1493        m_gal->SetMinLineWidth( lineWidth );
 
 1497        if( slot->GetSeg().A == slot->GetSeg().B )    
 
 1499            double holeRadius = slot->GetWidth() / 2.0;
 
 1500            m_gal->DrawHoleWall( slot->GetSeg().A, holeRadius, lineWidth );
 
 1504            int holeSize = slot->GetWidth() + ( 2 * lineWidth );
 
 1505            m_gal->DrawSegment( slot->GetSeg().A, slot->GetSeg().B, holeSize );
 
 1508        m_gal->SetMinLineWidth( 1.0 );
 
 1516        outline_mode = 
true;
 
 1518    bool drawShape = 
false;
 
 1532        outline_mode = 
true;
 
 1537        outline_mode = 
false;
 
 1545        m_gal->SetIsFill( 
false );
 
 1546        m_gal->SetIsStroke( 
true );
 
 1553        m_gal->SetIsFill( 
true );
 
 1554        m_gal->SetIsStroke( 
false );
 
 1567    else if( drawShape )
 
 1590                        expansion.
x = expansion.
y = 0;
 
 1604                margin = std::max( margin, getExpansion( layer ) );
 
 1611            margin = getExpansion( pcbLayer );
 
 1614        std::unique_ptr<PAD>            dummyPad;
 
 1615        std::shared_ptr<SHAPE_COMPOUND> shapes;
 
 1618        bool simpleShapes = !outline_mode;
 
 1624                     && ( margin.
x < 0 || margin.
y < 0 ) ) )
 
 1632                if( pad_size.
x + 2 * margin.
x <= 0 || pad_size.
y + 2 * margin.
y <= 0 )
 
 1637                int initial_radius = dummyPad->GetRoundRectCornerRadius( pcbLayer );
 
 1639                dummyPad->SetSize( pcbLayer, pad_size + margin + margin );
 
 1645                    int radius_margin = std::max( margin.
x, margin.
y );     
 
 1646                    dummyPad->SetRoundRectCornerRadius(
 
 1647                            pcbLayer, std::max( initial_radius + radius_margin, 0 ) );
 
 1650                shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>(
 
 1651                        dummyPad->GetEffectiveShape( pcbLayer ) );
 
 1652                margin.
x = margin.
y = 0;
 
 1656                shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>(
 
 1670                simpleShapes = 
false;
 
 1673            for( 
const SHAPE* shape : shapes->Shapes() )
 
 1678                switch( shape->Type() )
 
 1689                    simpleShapes = 
false;
 
 1695        const auto drawOneSimpleShape =
 
 1696                [&]( 
const SHAPE& aShape )
 
 1698                    switch( aShape.Type() )
 
 1703                        int                  effectiveWidth = seg.
GetWidth() + 2 * margin.
x;
 
 1705                        if( effectiveWidth > 0 )
 
 1714                        int                 effectiveRadius = 
circle.GetRadius() + margin.
x;
 
 1716                        if( effectiveRadius > 0 )
 
 1717                            m_gal->DrawCircle( 
circle.GetCenter(), effectiveRadius );
 
 1728                        if( effectiveMargin.
x < 0 )
 
 1733                            if( effectiveSize.
x > 0 && effectiveSize.
y > 0 )
 
 1734                                m_gal->DrawRectangle( pos - effectiveMargin, pos + effectiveSize );
 
 1736                        else if( effectiveMargin.
x > 0 )
 
 1742                            m_gal->DrawSegment( pos,
 
 1744                                                effectiveMargin.
x * 2 );
 
 1747                                                effectiveMargin.
x * 2 );
 
 1750                                                effectiveMargin.
x * 2 );
 
 1753                                                effectiveMargin.
x * 2 );
 
 1775                            for( 
int ii = 0; ii < poly.
PointCount(); ++ii )
 
 1780                            m_gal->DrawPolygon( outline );
 
 1793                                m_gal->DrawSegment( seg.
A, seg.
B, margin.
x * 2 );
 
 1808            for( 
const SHAPE* shape : shapes->Shapes() )
 
 1809                drawOneSimpleShape( *shape );
 
 1816            m_gal->DrawPolygon( polySet );
 
 1830        m_gal->SetIsStroke( 
true );
 
 1831        m_gal->SetIsFill( 
false );
 
 1838            auto shape = std::dynamic_pointer_cast<SHAPE_COMPOUND>( aPad->
GetEffectiveShape( pcbLayer ) );
 
 1840            if( shape && shape->Size() == 1 && shape->Shapes()[0]->Type() == 
SH_SEGMENT )
 
 1846            else if( shape && shape->Size() == 1 && shape->Shapes()[0]->Type() == 
SH_CIRCLE )
 
 1860                    m_gal->DrawPolygon( polySet );
 
 1866            m_gal->DrawSegment( slot->GetSeg().A, slot->GetSeg().B,
 
 
 1895            isHatchedFill = 
false;
 
 1913        if( netname.IsEmpty() )
 
 1940        m_gal->SetIsFill( 
false );
 
 1941        m_gal->SetIsStroke( 
true );
 
 1955                std::vector<VECTOR2I> pts;
 
 1957                offset = offset.
Resize( thickness / 2 );
 
 1959                pts.push_back( aShape->
GetStart() + offset );
 
 1960                pts.push_back( aShape->
GetStart() - offset );
 
 1961                pts.push_back( aShape->
GetEnd() - offset );
 
 1962                pts.push_back( aShape->
GetEnd() + offset );
 
 1965                m_gal->DrawLine( pts[0], pts[1] );
 
 1966                m_gal->DrawLine( pts[1], pts[2] );
 
 1967                m_gal->DrawLine( pts[2], pts[3] );
 
 1968                m_gal->DrawLine( pts[3], pts[0] );
 
 1969                m_gal->DrawLine( ( pts[0] + pts[1] ) / 2, ( pts[1] + pts[2] ) / 2 );
 
 1970                m_gal->DrawLine( ( pts[1] + pts[2] ) / 2, ( pts[2] + pts[3] ) / 2 );
 
 1971                m_gal->DrawLine( ( pts[2] + pts[3] ) / 2, ( pts[3] + pts[0] ) / 2 );
 
 1972                m_gal->DrawLine( ( pts[3] + pts[0] ) / 2, ( pts[0] + pts[1] ) / 2 );
 
 1974            else if( outline_mode )
 
 1980                m_gal->SetIsFill( 
true );
 
 1981                m_gal->SetIsStroke( 
false );
 
 2004                    m_gal->DrawPolygon( outline );
 
 2006                else if( outline_mode )
 
 2008                    m_gal->DrawSegmentChain( outline, thickness );
 
 2012                    m_gal->SetIsFill( 
true );
 
 2013                    m_gal->SetIsStroke( 
false );
 
 2017                        m_gal->DrawSegmentChain( outline, thickness );
 
 2026                            m_gal->DrawPolygon( deflated_shape );
 
 2030                            m_gal->DrawPolygon( outline );
 
 2042                    m_gal->DrawLine( pts[0], pts[1] );
 
 2043                    m_gal->DrawLine( pts[1], pts[2] );
 
 2044                    m_gal->DrawLine( pts[2], pts[3] );
 
 2045                    m_gal->DrawLine( pts[3], pts[0] );
 
 2046                    m_gal->DrawLine( pts[0], pts[2] );
 
 2047                    m_gal->DrawLine( pts[1], pts[3] );
 
 2049                else if( outline_mode )
 
 2051                    m_gal->DrawSegment( pts[0], pts[1], thickness );
 
 2052                    m_gal->DrawSegment( pts[1], pts[2], thickness );
 
 2053                    m_gal->DrawSegment( pts[2], pts[3], thickness );
 
 2054                    m_gal->DrawSegment( pts[3], pts[0], thickness );
 
 2058                    m_gal->SetIsFill( 
true );
 
 2059                    m_gal->SetIsStroke( 
false );
 
 2063                        m_gal->DrawSegment( pts[0], pts[1], thickness );
 
 2064                        m_gal->DrawSegment( pts[1], pts[2], thickness );
 
 2065                        m_gal->DrawSegment( pts[2], pts[3], thickness );
 
 2066                        m_gal->DrawSegment( pts[3], pts[0], thickness );
 
 2081                        m_gal->DrawPolygon( poly );
 
 2098                                       endAngle - startAngle, thickness, 
m_maxError );
 
 2102                m_gal->SetIsFill( 
true );
 
 2103                m_gal->SetIsStroke( 
false );
 
 2106                                       endAngle - startAngle, thickness, 
m_maxError );
 
 2121                m_gal->SetLineWidth( thickness );
 
 2129                else if( isSolidFill )
 
 2152                    m_gal->DrawSegmentChain( shape.
Outline( ii ), thickness );
 
 2156                m_gal->SetIsFill( 
true );
 
 2157                m_gal->SetIsStroke( 
false );
 
 2162                        m_gal->DrawSegmentChain( shape.
Outline( ii ), thickness );
 
 2172                        m_gal->DrawPolygon( deflated_shape );
 
 2183                        m_gal->DrawPolygon( shape );
 
 2194                std::vector<VECTOR2D> output;
 
 2195                std::vector<VECTOR2D> pointCtrl;
 
 2197                pointCtrl.push_back( aShape->
GetStart() );
 
 2200                pointCtrl.push_back( aShape->
GetEnd() );
 
 2211                m_gal->SetLineWidth( thickness );
 
 2237            m_gal->SetIsFill( 
true );
 
 2238            m_gal->SetIsStroke( 
false );
 
 2243        for( 
SHAPE* shape : shapes )
 
 2249                                       m_gal->DrawSegment( a, b, thickness );
 
 2253        for( 
SHAPE* shape : shapes )
 
 2259        m_gal->SetIsStroke( 
false );
 
 2260        m_gal->SetIsFill( 
true );
 
 
 2293    font->
Draw( 
m_gal, aText, pos, aAttrs, aFontMetrics );
 
 
 2308    if( img_scale != 1.0 )
 
 2314        m_gal->SetIsStroke( 
true );
 
 2317        m_gal->SetIsFill( 
false );
 
 2324        bm_size.
x /= img_scale;
 
 2325        bm_size.
y /= img_scale;
 
 2326        VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
 
 2329        m_gal->DrawRectangle( origin, 
end );
 
 
 2347        draw( 
static_cast<const PCB_TEXT*
>( aField ), aLayer );
 
 
 2355    if( resolvedText.Length() == 0 )
 
 2362        m_gal->SetIsFill( 
true );
 
 2363        m_gal->SetIsStroke( 
true );
 
 2370        m_gal->DrawPolygon( poly );
 
 2390        m_gal->SetIsStroke( 
false );
 
 2391        m_gal->SetIsFill( 
true );
 
 2392        m_gal->DrawPolygon( finalPoly );
 
 2412                textWidth.
x = -textWidth.
x;
 
 2419                textPos -= textWidth;
 
 2421                textPos += textWidth;
 
 2424            strokeText( resolvedText, textPos, attrs, metrics );
 
 2428        std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache = 
nullptr;
 
 2436            m_gal->DrawGlyphs( *cache );
 
 
 2469    wxString      resolvedText( aTextBox->
GetShownText( 
true ) );
 
 2476        m_gal->SetIsFill( 
true );
 
 2477        m_gal->SetIsStroke( 
false );
 
 2478        m_gal->SetFillColor( sh_color );
 
 2479        m_gal->SetStrokeColor( sh_color );
 
 2483        std::vector<VECTOR2I> pts = aTextBox->
GetCorners();
 
 2484        int line_thickness = std::max( thickness*3, 
pcbIUScale.mmToIU( 0.2 ) );
 
 2486        std::deque<VECTOR2D> dpts;
 
 2491        dpts.push_back( 
VECTOR2D( pts[0] ) );
 
 2493        m_gal->SetIsStroke( 
true );
 
 2494        m_gal->SetLineWidth( line_thickness );
 
 2495        m_gal->DrawPolygon( dpts );
 
 2500    m_gal->SetIsFill( 
true );
 
 2501    m_gal->SetIsStroke( 
false );
 
 2509                std::vector<VECTOR2I> pts = aTextBox->
GetCorners();
 
 2511                for( 
size_t ii = 0; ii < pts.size(); ++ii )
 
 2512                    m_gal->DrawSegment( pts[ii], pts[( ii + 1 ) % pts.size()], thickness );
 
 2519            for( 
SHAPE* shape : shapes )
 
 2524                                           m_gal->DrawSegment( a, b, thickness );
 
 2528            for( 
SHAPE* shape : shapes )
 
 2541        m_gal->SetFillColor( sh_color );
 
 2542        m_gal->SetStrokeColor( sh_color );
 
 2555        m_gal->SetIsStroke( 
false );
 
 2556        m_gal->SetIsFill( 
true );
 
 2557        m_gal->DrawPolygon( finalPoly );
 
 2561        if( resolvedText.Length() == 0 )
 
 2575        std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache = 
nullptr;
 
 2583            m_gal->DrawGlyphs( *cache );
 
 
 2599        if( cell->GetColSpan() > 0 || cell->GetRowSpan() > 0 )
 
 2611                m_gal->SetIsFill( 
false );
 
 2612                m_gal->SetIsStroke( 
true );
 
 2614                m_gal->SetLineWidth( lineWidth );
 
 2618                    m_gal->DrawLine( ptA, ptB );
 
 2629                                    m_gal->DrawLine( a+1, b );
 
 2631                                    m_gal->DrawLine( a, b );
 
 2639        if( aTable->
IsSelected() || cell->IsSelected() )
 
 2641            std::vector<VECTOR2I> corners = cell->GetCorners();
 
 2642            std::deque<VECTOR2D>  pts;
 
 2644            pts.insert( pts.end(), corners.begin(), corners.end() );
 
 2646            m_gal->SetFillColor( 
color.WithAlpha( 0.5 ) );
 
 2647            m_gal->SetIsFill( 
true );
 
 2648            m_gal->SetIsStroke( 
false );
 
 2649            m_gal->DrawPolygon( pts );
 
 
 2663        double anchorSize = 5.0 / 
m_gal->GetWorldScale();           
 
 2664        double anchorThickness = 1.0 / 
m_gal->GetWorldScale();      
 
 2667        m_gal->SetIsFill( 
false );
 
 2668        m_gal->SetIsStroke( 
true );
 
 2670        m_gal->SetLineWidth( anchorThickness );
 
 2681        m_gal->SetIsFill( 
true );
 
 2682        m_gal->SetIsStroke( 
false );
 
 2687        m_gal->DrawPolygon( poly );
 
 2693        m_gal->DrawRectangle( topLeft, botRight );
 
 2710        m_gal->SetIsFill( 
true );
 
 2711        m_gal->SetIsStroke( 
false );
 
 2715            m_gal->DrawPolygon( frontpoly );
 
 2718            m_gal->DrawPolygon( backpoly );
 
 
 2752        m_gal->DrawLine( topLeft, topLeft + width );
 
 2753        m_gal->DrawLine( topLeft + width, topLeft + width + height );
 
 2754        m_gal->DrawLine( topLeft + width + height, topLeft + height );
 
 2755        m_gal->DrawLine( topLeft + height, topLeft );
 
 2759        if( 
name.IsEmpty() )
 
 2763        int scaledSize = abs( 
KiROUND( 
m_gal->GetScreenWorldMatrix().GetScale().x * ptSize ) );
 
 2764        int unscaledSize = 
pcbIUScale.MilsToIU( ptSize );
 
 2767        int      textSize = ( scaledSize + ( unscaledSize * 2 ) ) / 3;
 
 2773            m_gal->DrawLine( topLeft, topLeft - titleHeight );
 
 2774            m_gal->DrawLine( topLeft - titleHeight, topLeft + width - titleHeight );
 
 2775            m_gal->DrawLine( topLeft + width - titleHeight, topLeft + width );
 
 
 2797        m_gal->SetIsFill( 
true );
 
 2798        m_gal->SetIsStroke( 
false );
 
 2822    std::deque<VECTOR2D> corners;
 
 2837            m_gal->SetIsFill( 
false );
 
 2838            m_gal->SetIsStroke( 
true );
 
 2855                int holes_count = outline->
HoleCount( ii );
 
 2857                for( 
int jj = 0; jj < holes_count; ++jj )
 
 2858                    m_gal->DrawPolyline( outline->
CHole( ii, jj ) );
 
 2863                m_gal->DrawLine( hatchLine.A, hatchLine.B );
 
 2875        if( polySet->OutlineCount() == 0 )  
 
 2880        m_gal->SetLineWidth( 0 );
 
 2884            m_gal->SetIsFill( 
true );
 
 2885            m_gal->SetIsStroke( 
false );
 
 2889            m_gal->SetIsFill( 
false );
 
 2890            m_gal->SetIsStroke( 
true );
 
 2897        if( 
m_gal->IsOpenGlEngine() && !polySet->IsTriangulationUpToDate() )
 
 2898            polySet->CacheTriangulation( 
true, 
true );
 
 
 2909    m_gal->SetIsFill( 
true );
 
 2910    m_gal->SetIsStroke( 
false );
 
 2922        m_gal->DrawPolygon( shape );
 
 
 2932    m_gal->SetIsFill( 
false );
 
 2933    m_gal->SetIsStroke( 
true );
 
 2944    for( 
const std::shared_ptr<SHAPE>& shape : aDimension->
GetShapes() )
 
 2946        switch( shape->Type() )
 
 2951            m_gal->DrawLine( seg.
A, seg.
B );
 
 2968    wxString        resolvedText = aDimension->
GetShownText( 
true );
 
 2979    std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache = 
nullptr;
 
 2986        for( 
const std::unique_ptr<KIFONT::GLYPH>& glyph : *cache )
 
 2987            m_gal->DrawGlyph( *glyph.get() );
 
 
 3003    m_gal->SetStrokeColor( strokeColor );
 
 3004    m_gal->SetIsFill( 
false );
 
 3005    m_gal->SetIsStroke( 
true );
 
 3008    m_gal->Translate( position );
 
 3014        size   = 2.0 * aTarget->
GetSize() / 3.0;
 
 3020        size   = aTarget->
GetSize() / 2.0;
 
 
 3039    double size = (double)aPoint->
GetSize() / 2;
 
 3059    m_gal->SetLineWidth( thickness );
 
 3060    m_gal->SetStrokeColor( crossColor );
 
 3061    m_gal->SetIsFill( 
false );
 
 3062    m_gal->SetIsStroke( 
true );
 
 3065    m_gal->Translate( position );
 
 3072    m_gal->SetStrokeColor( ringColor );
 
 
 3088    aMarker->
SetZoom( 1.0 / sqrt( 
m_gal->GetZoomFactor() ) );
 
 3107            m_gal->SetIsStroke( 
true );
 
 3113            m_gal->SetIsFill( 
true );
 
 3116        m_gal->DrawPolygon( polygon );
 
 3127            if( shape.GetStroke().GetWidth() == 1.0 )
 
 3129                m_gal->SetIsFill( 
false );
 
 3130                m_gal->SetIsStroke( 
true );
 
 3136                    m_gal->DrawLine( shape.GetStart(), shape.GetEnd() );
 
 3141                    shape.CalcArcAngles( startAngle, endAngle );
 
 3143                    m_gal->DrawArc( shape.GetCenter(), shape.GetRadius(), startAngle, shape.GetArcAngle() );
 
 3148                m_gal->SetIsFill( 
true );
 
 3149                m_gal->SetIsStroke( 
false );
 
 3150                m_gal->SetFillColor( 
color.WithAlpha( 0.5 ) );
 
 3154                    m_gal->DrawSegment( shape.GetStart(), shape.GetEnd(), shape.GetWidth() );
 
 3159                    shape.CalcArcAngles( startAngle, endAngle );
 
 3161                    m_gal->DrawArcSegment( shape.GetCenter(), shape.GetRadius(), startAngle, shape.GetArcAngle(),
 
 
 3188    m_gal->SetFillColor( outlineColor );
 
 3189    m_gal->AdvanceDepth();
 
 3190    m_gal->SetLineWidth( 0 );
 
 3191    m_gal->SetIsFill( 
true );
 
 3192    m_gal->SetIsStroke( 
false );
 
 
 
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
 
constexpr int ARC_HIGH_DEF
 
constexpr EDA_IU_SCALE pcbIUScale
 
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
 
@ NORMAL
Inactive layers are shown normally (no high-contrast mode)
 
@ HIDDEN
Inactive layers are hidden.
 
@ RATSNEST
Net/netclass colors are shown on ratsnest lines only.
 
@ ALL
Net/netclass colors are shown on all net copper.
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
 
Bezier curves to polygon converter.
 
void GetPoly(std::vector< VECTOR2I > &aOutput, int aMaxError=10)
Convert a Bezier curve to a polygon.
 
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
 
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
 
wxString GetNetname() const
 
const wxString & GetDisplayNetname() const
 
virtual int GetOwnClearance(PCB_LAYER_ID aLayer, wxString *aSource=nullptr) const
Return an item's "own" clearance in internal units.
 
Container for design settings for a BOARD object.
 
int GetHolePlatingThickness() const
Pad & via drills are finish size.
 
int m_SolderMaskExpansion
 
int GetLineThickness(PCB_LAYER_ID aLayer) const
Return the default graphic segment thickness from the layer class for the given layer.
 
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
 
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
 
virtual BOARD_ITEM * Duplicate(bool addToParentGroup, BOARD_COMMIT *aCommit=nullptr) const
Create a copy of this BOARD_ITEM.
 
virtual void TransformShapeToPolySet(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc) const
Convert the item shape to a polyset.
 
virtual bool IsConnected() const
Returns information if the object is derived from BOARD_CONNECTED_ITEM.
 
virtual bool IsKnockout() const
 
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
 
FOOTPRINT * GetParentFootprint() const
 
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
 
const KIFONT::METRICS & GetFontMetrics() const
 
BOARD_ITEM_CONTAINER * GetParent() const
 
bool IsSideSpecific() const
 
virtual bool IsOnCopperLayer() const
 
Information pertinent to a Pcbnew printed circuit board.
 
BOARD_USE GetBoardUse() const
Get what the board use is.
 
bool IsElementVisible(GAL_LAYER_ID aLayer) const
Test whether a given element category is visible.
 
const LSET & GetVisibleLayers() const
A proxy function that calls the correspondent function in m_BoardSettings.
 
int GetCopperLayerCount() const
 
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
 
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
 
constexpr const Vec & GetPosition() const
 
constexpr const Vec GetEnd() const
 
constexpr void SetOrigin(const Vec &pos)
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr size_type GetWidth() const
 
constexpr Vec Centre() const
 
constexpr size_type GetHeight() const
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr const Vec & GetOrigin() const
 
constexpr const SizeVec & GetSize() const
 
constexpr void SetEnd(coord_type x, coord_type y)
 
Color settings are a bit different than most of the settings objects in that there can be more than o...
 
COLOR4D GetColor(int aLayer) const
 
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
 
KICAD_T Type() const
Returns the type of object.
 
bool IsBrightened() const
 
const VECTOR2I & GetBezierC2() const
 
virtual VECTOR2I GetTopLeft() const
 
const SHAPE_POLY_SET & GetHatching() const
 
int GetRectangleWidth() const
 
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
 
void CalcArcAngles(EDA_ANGLE &aStartAngle, EDA_ANGLE &aEndAngle) const
Calc arc start and end angles such that aStartAngle < aEndAngle.
 
virtual VECTOR2I GetBotRight() const
 
bool IsHatchedFill() const
 
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
 
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
 
std::vector< VECTOR2I > GetRectCorners() const
 
const std::vector< VECTOR2I > & GetBezierPoints() const
 
const VECTOR2I & GetBezierC1() const
 
int GetRectangleHeight() const
 
int GetCornerRadius() const
 
const VECTOR2I & GetTextPos() const
 
virtual bool IsVisible() const
 
KIFONT::FONT * GetFont() const
 
std::vector< std::unique_ptr< KIFONT::GLYPH > > * GetRenderCache(const KIFONT::FONT *aFont, const wxString &forResolvedText, const VECTOR2I &aOffset={ 0, 0 }) const
 
BOX2I GetTextBox(const RENDER_SETTINGS *aSettings, int aLine=-1) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
 
GR_TEXT_H_ALIGN_T GetHorizJustify() const
 
virtual KIFONT::FONT * GetDrawFont(const RENDER_SETTINGS *aSettings) const
 
const TEXT_ATTRIBUTES & GetAttributes() const
 
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
 
APP_SETTINGS_BASE * KifaceSettings() const
 
FONT is an abstract base class for both outline and stroke fonts.
 
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
 
virtual bool IsStroke() const
 
void Draw(KIGFX::GAL *aGal, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aCursor, const TEXT_ATTRIBUTES &aAttributes, const METRICS &aFontMetrics) const
Draw a string.
 
virtual bool IsOutline() const
 
A color representation with 4 components: red, green, blue, alpha.
 
static const COLOR4D CLEAR
 
COLOR4D & Darken(double aFactor)
Makes the color darker by a given factor.
 
COLOR4D Inverted() const
Returns an inverted color, alpha remains the same.
 
COLOR4D & Brighten(double aFactor)
Makes the color brighter by a given factor.
 
static const COLOR4D WHITE
 
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
 
static const COLOR4D BLACK
 
Attribute save/restore for GAL attributes.
 
Abstract interface for drawing on a 2D-surface.
 
GAL * m_gal
Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.
 
PAINTER(GAL *aGal)
Initialize this object for painting on any of the polymorphic GRAPHICS_ABSTRACTION_LAYER* derivatives...
 
virtual SHAPE_SEGMENT getPadHoleShape(const PAD *aPad) const
Return hole shape for a pad (internal units).
 
PCB_PAINTER(GAL *aGal, FRAME_T aFrameType)
 
int getLineThickness(int aActualThickness) const
Get the thickness to draw for a line (e.g.
 
void renderNetNameForSegment(const SHAPE_SEGMENT &aSeg, const COLOR4D &aColor, const wxString &aNetName) const
 
PCB_VIEWERS_SETTINGS_BASE * viewer_settings()
 
void draw(const PCB_TRACK *aTrack, int aLayer)
 
virtual PAD_DRILL_SHAPE getDrillShape(const PAD *aPad) const
Return drill shape of a pad.
 
int m_holePlatingThickness
 
PCB_RENDER_SETTINGS m_pcbSettings
 
virtual int getViaDrillSize(const PCB_VIA *aVia) const
Return drill diameter for a via (internal units).
 
void strokeText(const wxString &aText, const VECTOR2I &aPosition, const TEXT_ATTRIBUTES &aAttrs, const KIFONT::METRICS &aFontMetrics)
 
virtual bool Draw(const VIEW_ITEM *aItem, int aLayer) override
Takes an instance of VIEW_ITEM and passes it to a function that knows how to draw the item.
 
double m_zoneOpacity
Opacity override for filled zones.
 
double m_trackOpacity
Opacity override for all tracks.
 
double m_imageOpacity
Opacity override for user images.
 
double m_viaOpacity
Opacity override for all types of via.
 
ZONE_DISPLAY_MODE m_ZoneDisplayMode
 
void LoadColors(const COLOR_SETTINGS *aSettings) override
 
double m_padOpacity
Opacity override for SMD pads and PTHs.
 
void SetBackgroundColor(const COLOR4D &aColor) override
Set the background color.
 
COLOR4D GetColor(const VIEW_ITEM *aItem, int aLayer) const override
Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer using curr...
 
HIGH_CONTRAST_MODE m_ContrastModeDisplay
 
std::map< int, KIGFX::COLOR4D > m_netColors
Set of net codes that should not have their ratsnest displayed.
 
NET_COLOR_MODE m_netColorMode
Overrides for specific netclass colors.
 
static const double MAX_FONT_SIZE
< Maximum font size for netnames (and other dynamically shown strings)
 
double m_filledShapeOpacity
Opacity override for graphic shapes.
 
bool m_ForceShowFieldsWhenFPSelected
 
bool GetShowPageLimits() const override
 
void LoadDisplayOptions(const PCB_DISPLAY_OPTIONS &aOptions)
Load settings related to display options (high-contrast mode, full or outline modes for vias/pads/tra...
 
bool m_ForcePadSketchModeOn
 
COLOR4D m_backgroundColor
 
PCB_LAYER_ID GetPrimaryHighContrastLayer() const
Return the board layer which is in high-contrast mode.
 
void SetGapLengthRatio(double aRatio)
 
PCB_LAYER_ID GetActiveLayer() const
 
std::map< int, COLOR4D > m_layerColorsHi
 
virtual void update()
Precalculates extra colors for layers (e.g.
 
void SetDashLengthRatio(double aRatio)
 
std::set< int > m_highlightNetcodes
 
std::map< int, COLOR4D > m_layerColorsDark
 
std::map< int, COLOR4D > m_layerColorsSel
 
std::set< int > m_highContrastLayers
 
std::map< int, COLOR4D > m_layerColors
 
bool m_hiContrastEnabled
Parameters for display modes.
 
An abstract base class for deriving all objects that can be added to a VIEW.
 
bool IsBOARD_ITEM() const
 
double GetForcedTransparency() const
 
LSET is a set of PCB_LAYER_IDs.
 
PCB_LAYER_ID ExtractLayer() const
Find the first set PCB_LAYER_ID.
 
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
 
static LSET AllCuMask(int aCuLayerCount)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
 
static const LSET & PhysicalLayersMask()
Return a mask holding all layers which are physically realized.
 
int MarkerScale() const
The scaling factor to convert polygonal shape coordinates to internal units.
 
void ShapeToPolygon(SHAPE_LINE_CHAIN &aPolygon, int aScale=-1) const
Return the shape polygon in internal units in a SHAPE_LINE_CHAIN the coordinates are relatives to the...
 
A collection of nets and the parameters used to route or test these nets.
 
COLOR4D GetPcbColor(bool aIsForSave=false) const
 
static const int UNCONNECTED
Constant that holds the "unconnected net" number (typically 0) all items "connected" to this net are ...
 
@ NORMAL
Shape is the same on all layers.
 
int GetOwnClearance(PCB_LAYER_ID aLayer, wxString *aSource=nullptr) const override
Return the pad's "own" clearance in internal units.
 
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
 
const std::vector< std::shared_ptr< PCB_SHAPE > > & GetPrimitives(PCB_LAYER_ID aLayer) const
Accessor to the basic shape list for custom-shaped pads.
 
bool FlashLayer(int aLayer, bool aOnlyCheckIfPermitted=false) const
Check to see whether the pad should be flashed on the specific layer.
 
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer, FLASHING flashPTHPads=FLASHING::DEFAULT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
 
const BOX2I GetBoundingBox() const override
The bounding box is cached, so this will be efficient most of the time.
 
PAD_ATTRIB GetAttribute() const
 
const wxString & GetPinFunction() const
 
const wxString & GetNumber() const
 
bool IsNoConnectPad() const
 
PAD_SHAPE GetShape(PCB_LAYER_ID aLayer) const
 
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc=ERROR_INSIDE, bool ignoreLineWidth=false) const override
Convert the pad shape to a closed polygon.
 
int GetSolderMaskExpansion(PCB_LAYER_ID aLayer) const
 
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
 
PAD_DRILL_SHAPE GetDrillShape() const
 
VECTOR2I GetSolderPasteMargin(PCB_LAYER_ID aLayer) const
Usually < 0 (mask shape smaller than pad)because the margin can be dependent on the pad size,...
 
VECTOR2I ShapePos(PCB_LAYER_ID aLayer) const
 
std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape() const override
Return a SHAPE_SEGMENT object representing the pad's hole.
 
const VECTOR2I & GetSize(PCB_LAYER_ID aLayer) const
 
DISPLAY_OPTIONS m_Display
 
EDA_ANGLE GetArcAngleStart() const
 
EDA_ANGLE GetAngle() const
 
const VECTOR2I & GetMid() const
 
virtual VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
 
void GetBoundingHull(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc=ERROR_INSIDE) const
 
const SHAPE_POLY_SET & GetOutline() const
 
int GetLineThickness() const
 
const std::vector< std::shared_ptr< SHAPE > > & GetShapes() const
 
double m_TrackOpacity
Opacity override for all tracks.
 
double m_FilledShapeOpacity
Opacity override for graphic shapes.
 
double m_ZoneOpacity
Opacity override for filled zone areas.
 
double m_ImageOpacity
Opacity override for user images.
 
double m_PadOpacity
Opacity override for SMD pads and PTHs.
 
double m_ViaOpacity
Opacity override for all types of via.
 
HIGH_CONTRAST_MODE m_ContrastModeDisplay
How inactive layers are displayed.
 
NET_COLOR_MODE m_NetColorMode
How to use color overrides on specific nets and netclasses.
 
ZONE_DISPLAY_MODE m_ZoneDisplayMode
 
A set of BOARD_ITEMs (i.e., without duplicates).
 
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
 
void SetZoom(double aZoomFactor) const
 
std::vector< PCB_SHAPE > GetShapes() const
 
GAL_LAYER_ID GetColorLayer() const
 
VECTOR2I GetPosition() const override
 
PCB_VIEWERS_SETTINGS_BASE * viewer_settings()
 
A PCB_POINT is a 0-dimensional point that is used to mark a position on a PCB, or more usually a foot...
 
VECTOR2I GetPosition() const override
 
Object to handle a bitmap image that can be inserted in a PCB.
 
REFERENCE_IMAGE & GetReferenceImage()
 
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
 
int GetWidth() const override
 
bool HasSolderMask() const
 
int GetSolderMaskExpansion() const
 
virtual std::vector< VECTOR2I > GetCorners() const
Return 4 corners for a rectangle or rotated rectangle (stored as a poly).
 
bool IsProxyItem() const override
 
STROKE_PARAMS GetStroke() const override
 
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
 
std::vector< PCB_TABLECELL * > GetCells() const
 
void DrawBorders(const std::function< void(const VECTOR2I &aPt1, const VECTOR2I &aPt2, const STROKE_PARAMS &aStroke)> &aCallback) const
 
VECTOR2I GetPosition() const override
 
bool IsBorderEnabled() const
Disables the border, this is done by changing the stroke internally.
 
void TransformTextToPolySet(SHAPE_POLY_SET &aBuffer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc) const
Function TransformTextToPolySet Convert the text to a polygonSet describing the actual character stro...
 
VECTOR2I GetDrawPos() const override
 
wxString GetShownText(bool aAllowExtraText, int aDepth=0) const override
Return the string actually shown after processing of the base text.
 
SHAPE_POLY_SET GetKnockoutCache(const KIFONT::FONT *aFont, const wxString &forResolvedText, int aMaxError) const
 
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc, bool aIgnoreLineWidth=false) const override
Convert the item shape to a closed polygon.
 
wxString GetShownText(bool aAllowExtraText, int aDepth=0) const override
Return the string actually shown after processing of the base text.
 
EDA_ANGLE GetDrawRotation() const override
 
int GetSolderMaskExpansion() const
 
const VECTOR2I & GetStart() const
 
const VECTOR2I & GetEnd() const
 
virtual int GetWidth() const
 
PCB_LAYER_ID BottomLayer() const
 
bool FlashLayer(int aLayer) const
Check to see whether the via should have a pad on the specific layer.
 
int GetWidth() const override
 
bool IsOnLayer(PCB_LAYER_ID aLayer) const override
Test to see if this object is on the given layer.
 
PCB_LAYER_ID TopLayer() const
 
int GetDrillValue() const
Calculate the drill value for vias (m_drill if > 0, or default drill value for the board).
 
VIATYPE GetViaType() const
 
void LayerPair(PCB_LAYER_ID *top_layer, PCB_LAYER_ID *bottom_layer) const
Return the 2 layers used by the via (the via actually uses all layers between these 2 layers)
 
VIEWERS_DISPLAY_OPTIONS m_ViewersDisplay
 
virtual COMMON_SETTINGS * GetCommonSettings() const
 
virtual SETTINGS_MANAGER & GetSettingsManager() const
 
A REFERENCE_IMAGE is a wrapper around a BITMAP_IMAGE that is displayed in an editor as a reference fo...
 
VECTOR2I GetPosition() const
 
const BITMAP_BASE & GetImage() const
Get the underlying image.
 
double GetImageScale() const
 
A round rectangle shape, based on a rectangle and a radius.
 
void TransformToPolygon(SHAPE_POLY_SET &aBuffer, int aMaxError) const
Get the polygonal representation of the roundrect.
 
VECTOR2I::extended_type ecoord
 
int Length() const
Return the length (this).
 
ecoord SquaredLength() const
 
T * GetAppSettings(const char *aFilename)
Return a handle to the a given settings by type.
 
const SHAPE_LINE_CHAIN ConvertToPolyline(int aMaxError=DefaultAccuracyForPCB(), int *aActualError=nullptr) const
Construct a SHAPE_LINE_CHAIN of segments from a given arc.
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
int PointCount() const
Return the number of points (vertices) in this line chain.
 
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
 
Represent a set of closed polygons.
 
bool IsTriangulationUpToDate() const
 
virtual void CacheTriangulation(bool aPartition=true, bool aSimplify=false)
Build a polygon triangulation, needed to draw a polygon on OpenGL and in some other calculations.
 
void Fracture()
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
 
void Inflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError, bool aSimplify=false)
Perform outline inflation/deflation.
 
int HoleCount(int aOutline) const
Returns the number of holes in a given outline.
 
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline)
 
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
 
int NewOutline()
Creates a new empty polygon in the set and returns its index.
 
void Deflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError)
 
const SHAPE_LINE_CHAIN & CHole(int aOutline, int aHole) const
 
int OutlineCount() const
Return the number of outlines in the set.
 
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
 
int GetWidth() const override
 
const VECTOR2I & GetPosition() const
 
const VECTOR2I GetSize() const
 
const SEG & GetSeg() const
 
int GetWidth() const override
 
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments.
 
const SHAPE_LINE_CHAIN & Vertices() const
Return the list of vertices defining this simple polygon.
 
virtual const SEG GetSegment(int aIndex) const override
 
const VECTOR2I & CPoint(int aIndex) const
Return a const reference to a given point in the polygon.
 
int PointCount() const
Return the number of points (vertices) in this polygon.
 
virtual size_t GetSegmentCount() const override
 
An abstract shape on 2D plane.
 
Simple container to manage line stroke parameters.
 
LINE_STYLE GetLineStyle() const
 
static void Stroke(const SHAPE *aShape, LINE_STYLE aLineStyle, int aWidth, const KIGFX::RENDER_SETTINGS *aRenderSettings, const std::function< void(const VECTOR2I &a, const VECTOR2I &b)> &aStroker)
 
GR_TEXT_H_ALIGN_T m_Halign
 
GR_TEXT_V_ALIGN_T m_Valign
 
VECTOR2< T > Resize(T aNewLength) const
Return a vector of the same direction, but length specified in aNewLength.
 
Handle a list of polygons defining a copper zone.
 
const std::vector< SEG > & GetHatchLines() const
 
const std::shared_ptr< SHAPE_POLY_SET > & GetFilledPolysList(PCB_LAYER_ID aLayer) const
 
SHAPE_POLY_SET * Outline()
 
virtual bool IsOnLayer(PCB_LAYER_ID) const override
Test to see if this object is on the given layer.
 
bool IsTeardropArea() const
 
ZONE_BORDER_DISPLAY_STYLE GetHatchStyle() const
 
void TransformArcToPolygon(SHAPE_POLY_SET &aBuffer, const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd, int aWidth, int aError, ERROR_LOC aErrorLoc)
Convert arc to multiple straight segments.
 
@ CHAMFER_ALL_CORNERS
All angles are chamfered.
 
@ ROUND_ALL_CORNERS
All angles are rounded.
 
static constexpr EDA_ANGLE ANGLE_90
 
static constexpr EDA_ANGLE ANGLE_VERTICAL
 
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
 
#define IGNORE_PARENT_GROUP
 
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
 
FRAME_T
The set of EDA_BASE_FRAME derivatives, typically stored in EDA_BASE_FRAME::m_Ident.
 
@ FRAME_FOOTPRINT_PREVIEW
 
@ FRAME_FOOTPRINT_CHOOSER
 
a few functions useful in geometry calculations.
 
int GetPenSizeForNormal(int aTextSize)
 
double m_HoleWallPaintingMultiplier
What factor to use when painting via and PTH pad hole walls, so that the painted hole wall can be ove...
 
bool IsSolderMaskLayer(int aLayer)
 
@ LAYER_PAD_FR_NETNAMES
Additional netnames layers (not associated with a PCB layer).
 
@ NETNAMES_LAYER_ID_START
 
bool IsPcbLayer(int aLayer)
Test whether a layer is a valid layer for Pcbnew.
 
bool IsPadCopperLayer(int aLayer)
 
int GetNetnameLayer(int aLayer)
Return a netname layer corresponding to the given layer.
 
bool IsClearanceLayer(int aLayer)
 
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
 
@ LAYER_POINTS
PCB reference/manual snap points visibility.
 
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
 
@ LAYER_PAD_COPPER_START
Virtual layers for pad copper on a given copper layer.
 
@ LAYER_CONFLICTS_SHADOW
Shadow layer for items flagged conflicting.
 
@ LAYER_NON_PLATEDHOLES
Draw usual through hole vias.
 
@ LAYER_DRC_EXCLUSION
Layer for DRC markers which have been individually excluded.
 
@ LAYER_PCB_BACKGROUND
PCB background color.
 
@ LAYER_DRC_SHAPES
Custom shapes for DRC markers.
 
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored).
 
@ LAYER_DRC_WARNING
Layer for DRC markers with #SEVERITY_WARNING.
 
@ LAYER_PAD_PLATEDHOLES
to draw pad holes (plated)
 
@ LAYER_VIA_COPPER_START
Virtual layers for via copper on a given copper layer.
 
@ LAYER_CLEARANCE_START
Virtual layers for pad/via/track clearance outlines for a given copper layer.
 
@ LAYER_ZONE_START
Virtual layers for stacking zones and tracks on a given copper layer.
 
@ LAYER_ANCHOR
Anchor of items having an anchor point (texts, footprints).
 
@ LAYER_VIA_BURIED
Draw blind vias.
 
@ LAYER_MARKER_SHADOWS
Shadows for DRC markers.
 
@ LAYER_VIA_HOLES
Draw via holes (pad holes do not use this layer).
 
@ LAYER_VIA_BLIND
Draw micro vias.
 
@ LAYER_VIA_THROUGH
Draw buried vias.
 
@ LAYER_DRC_ERROR
Layer for DRC markers with #SEVERITY_ERROR.
 
bool IsViaCopperLayer(int aLayer)
 
bool IsNetnameLayer(int aLayer)
Test whether a layer is a netname layer.
 
bool IsHoleLayer(int aLayer)
 
bool IsExternalCopperLayer(int aLayerId)
Test whether a layer is an external (F_Cu or B_Cu) copper layer.
 
PCB_LAYER_ID
A quick note on layer IDs:
 
bool IsZoneFillLayer(int aLayer)
 
PCB_LAYER_ID ToLAYER_ID(int aLayer)
 
MATRIX3x3< double > MATRIX3x3D
 
The Cairo implementation of the graphics abstraction layer.
 
PAD_DRILL_SHAPE
The set of pad drill shapes, used with PAD::{Set,Get}DrillShape()
 
@ NPTH
like PAD_PTH, but not plated mechanical use only, no connection allowed
 
@ PTH
Plated through hole pad.
 
BARCODE class definition.
 
Class to handle a set of BOARD_ITEMs.
 
PCBNEW_SETTINGS * pcbconfig()
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
PGM_BASE * PgmOrNull()
Return a reference that can be nullptr when running a shared lib from a script, not from a kicad app.
 
@ SH_RECT
axis-aligned rectangle
 
@ SH_SIMPLE
simple polygon
 
wxString UnescapeString(const wxString &aSource)
 
int PrintableCharCount(const wxString &aString)
Return the number of printable (ie: non-formatting) chars.
 
LINE_STYLE
Dashed line types.
 
double hicontrast_dimming_factor
 
bool m_DisplayPcbTrackFill
 
bool m_DisplayGraphicsFill
 
SHAPE_CIRCLE circle(c.m_circle_center, c.m_circle_radius)
 
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
 
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
 
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
 
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
 
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
 
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
 
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
 
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
 
@ PCB_ZONE_T
class ZONE, a copper pour area
 
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
 
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
 
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
 
@ PCB_MARKER_T
class PCB_MARKER, a marker used to show something
 
@ PCB_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
 
@ PCB_TARGET_T
class PCB_TARGET, a target (graphic item)
 
@ PCB_TABLECELL_T
class PCB_TABLECELL, PCB_TEXTBOX for use in tables
 
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
 
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
 
@ PCB_PAD_T
class PAD, a pad in a footprint
 
@ PCB_BOARD_OUTLINE_T
class PCB_BOARD_OUTLINE_T, a pcb board outline item
 
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
 
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
 
@ PCB_POINT_T
class PCB_POINT, a 0-dimensional point
 
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
 
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< double > VECTOR2D