206 int originalLayer = aLayer;
224 const PAD*
pad =
dynamic_cast<const PAD*
>( aItem );
226 int holeLayer = aLayer;
232 annularRingLayer =
F_Cu;
234 annularRingLayer =
F_Cu;
258 const PAD*
pad =
static_cast<const PAD*
>( aItem );
261 if(
pcbconfig()->m_Display.m_UseViaColorForNormalTHPadstacks
305 if( visibleLayers.any() )
306 aLayer = visibleLayers.
Seq().back();
356 netColor = ii->second;
407 switch( originalLayer )
412 const PAD*
pad =
static_cast<const PAD*
>( aItem );
414 if(
pad->IsOnLayer( primary ) && !
pad->FlashLayer( primary ) )
434 if(
via->GetLayerSet().test( primary ) == 0 )
447 if( !
via->FlashLayer( primary ) )
481 if(
via->GetLayerSet().test( primary ) == 0 )
516 color =
color.Mix( it->second, dim_factor_Edge_Cuts );
529 color =
color.Mix( backgroundColor, dim_factor_Edge_Cuts );
543 const BOARD* board =
via->GetBoard();
547 if( (
via->GetLayerSet() & visibleLayers ).none() )
598 if( aActualThickness == 0 )
601 return aActualThickness;
671 switch( item->
Type() )
678 draw(
static_cast<const PCB_ARC*
>( item ), aLayer );
682 draw(
static_cast<const PCB_VIA*
>( item ), aLayer );
686 draw(
static_cast<const PAD*
>( item ), aLayer );
722 draw(
static_cast<const ZONE*
>( item ), aLayer );
760 m_gal->SetIsFill(
false );
761 m_gal->SetIsStroke(
true );
774 m_gal->SetLineWidth( 1 );
801 int track_width = aTrack->
GetWidth();
825 m_gal->SetIsStroke( outline_mode );
826 m_gal->SetIsFill( not outline_mode );
835 m_gal->DrawSegment( start,
end, track_width );
848 m_gal->SetIsFill(
false );
849 m_gal->SetIsStroke(
true );
857 const wxString& aNetName )
const
868 int num_char = aNetName.size();
871 int seg_minlength = aSeg.
GetWidth() * num_char;
878 double penWidth = textSize / 12.0;
886 if(
end.y == start.
y )
891 else if(
end.x == start.
x )
902 num_names = std::max( num_names,
KiROUND( aSeg.
GetSeg().
Length() / ( M_SQRT2 * min_size ) ) );
905 m_gal->SetIsStroke(
true );
906 m_gal->SetIsFill(
false );
907 m_gal->SetStrokeColor( aColor );
908 m_gal->SetLineWidth( penWidth );
909 m_gal->SetFontBold(
false );
910 m_gal->SetFontItalic(
false );
911 m_gal->SetFontUnderlined(
false );
912 m_gal->SetTextMirrored(
false );
913 m_gal->SetGlyphSize(
VECTOR2D( textSize * 0.55, textSize * 0.55 ) );
917 int divisions = num_names + 1;
919 for(
int ii = 1; ii < divisions; ++ii )
921 VECTOR2I textPosition = start + segV * ( (double) ii / divisions );
923 if( viewport.
Contains( textPosition ) )
924 m_gal->BitmapText( aNetName, textPosition, textOrientation );
951 m_gal->SetIsStroke( outline_mode );
952 m_gal->SetIsFill( not outline_mode );
982 m_gal->SetIsFill(
false );
983 m_gal->SetIsStroke(
true );
999 m_gal->SetIsFill(
false );
1000 m_gal->SetIsStroke(
true );
1002 m_gal->DrawPolygon( cornerBuffer );
1011 m_gal->SetIsFill(
false );
1012 m_gal->SetIsStroke(
true );
1013 m_gal->SetStrokeColor(
COLOR4D( 0.3, 0.2, 0.5, 1.0 ) );
1015 for(
int idx = 1; idx < arcSpine.
PointCount(); idx++ )
1034 aVia->
LayerPair( &layerTop, &layerBottom );
1039 && ( layerTop !=
F_Cu || layerBottom !=
B_Cu ) );
1051 if( !showNets && !showLayers )
1055 double size = aVia->
GetWidth( currentLayer );
1058 if( size > maxSize )
1062 m_gal->Translate( position );
1065 m_gal->ResetTextAttributes();
1068 m_gal->SetFontBold(
false );
1069 m_gal->SetFontItalic(
false );
1070 m_gal->SetFontUnderlined(
false );
1071 m_gal->SetTextMirrored(
false );
1073 m_gal->SetIsStroke(
true );
1074 m_gal->SetIsFill(
false );
1088 switch( topLayerId )
1090 case F_Cu: topLayer = 1;
break;
1092 default: topLayer = (topLayerId -
B_Cu)/2 + 1;
break;
1095 switch( bottomLayerId )
1097 case F_Cu: bottomLayer = 1;
break;
1099 default: bottomLayer = (bottomLayerId -
B_Cu)/2 + 1;
break;
1103#if wxUSE_UNICODE_WCHAR
1104 layerIds << std::to_wstring( topLayer ) << L
'-' << std::to_wstring( bottomLayer );
1106 layerIds << std::to_string( topLayer ) <<
'-' << std::to_string( bottomLayer );
1112 int minCharCnt = showLayers ? 6 : 3;
1116 tsize = std::min( tsize, size );
1123 if( showLayers && showNets )
1124 textpos.
y += ( tsize * 1.3 )/ 2;
1126 m_gal->SetGlyphSize( namesize );
1127 m_gal->SetLineWidth( namesize.
x / 10.0 );
1135 textpos.
y -= tsize * 1.3;
1149 m_gal->SetIsStroke(
true );
1150 m_gal->SetIsFill(
false );
1163 m_gal->SetLineWidth( thickness );
1164 radius -= thickness / 2.0;
1168 m_gal->SetIsFill(
true );
1176 m_gal->SetIsStroke(
false );
1177 m_gal->SetIsFill(
true );
1181 m_gal->SetIsStroke(
false );
1182 m_gal->SetIsFill(
true );
1202 m_gal->SetIsFill(
true );
1203 m_gal->SetIsStroke(
false );
1205 m_gal->SetLineWidth( margin );
1232 m_gal->SetLineWidth( annular_width );
1233 radius -= annular_width / 2.0;
1256 if( aVia->
FlashLayer( copperLayerForClearance ) )
1262 m_gal->SetIsFill(
false );
1263 m_gal->SetIsStroke(
true );
1296 netname = wxT(
"x" );
1298 netname = wxT(
"*" );
1301 if( netname.IsEmpty() && padNumber.IsEmpty() )
1336 for(
const std::shared_ptr<PCB_SHAPE>& primitive : aPad->
GetPrimitives( pcbLayer ) )
1340 position = primitive->GetCenter();
1342 position += aPad->
ShapePos( pcbLayer );
1344 padsize.
x = abs( primitive->GetBotRight().x - primitive->GetTopLeft().x );
1345 padsize.
y = abs( primitive->GetBotRight().y - primitive->GetTopLeft().y );
1359 double limit = std::min( aPad->
GetSize( pcbLayer ).
x,
1360 aPad->
GetSize( pcbLayer ).
y ) * 1.1;
1362 if( padsize.
x > limit && padsize.
y > limit )
1370 double size = padsize.
y;
1373 m_gal->Translate( position );
1376 if( padsize.
x < ( padsize.
y * 0.95 ) )
1380 std::swap( padsize.
x, padsize.
y );
1384 if( size > maxSize )
1388 m_gal->ResetTextAttributes();
1391 m_gal->SetFontBold(
false );
1392 m_gal->SetFontItalic(
false );
1393 m_gal->SetFontUnderlined(
false );
1394 m_gal->SetTextMirrored(
false );
1396 m_gal->SetIsStroke(
true );
1397 m_gal->SetIsFill(
false );
1405 int Y_offset_numpad = 0;
1406 int Y_offset_netname = 0;
1408 if( !netname.IsEmpty() && !padNumber.IsEmpty() )
1412 Y_offset_netname = size / 1.4;
1414 Y_offset_numpad = size / 1.7;
1420 const double Xscale_for_stroked_font = 0.9;
1422 if( !netname.IsEmpty() )
1428 tsize = std::min( tsize, size );
1441 VECTOR2D namesize( tsize*Xscale_for_stroked_font, tsize );
1442 textpos.
y = std::min( tsize * 1.4,
double( Y_offset_netname ) );
1444 m_gal->SetGlyphSize( namesize );
1445 m_gal->SetLineWidth( namesize.
x / 6.0 );
1446 m_gal->SetFontBold(
true );
1450 if( !padNumber.IsEmpty() )
1455 tsize = std::min( tsize, size );
1459 tsize = std::min( tsize, size );
1460 VECTOR2D numsize( tsize*Xscale_for_stroked_font, tsize );
1461 textpos.
y = -Y_offset_numpad;
1463 m_gal->SetGlyphSize( numsize );
1464 m_gal->SetLineWidth( numsize.
x / 6.0 );
1465 m_gal->SetFontBold(
true );
1475 m_gal->SetIsFill(
true );
1476 m_gal->SetIsStroke(
false );
1479 lineWidth = std::min( lineWidth, aPad->
GetSizeX() / 2.0 );
1480 lineWidth = std::min( lineWidth, aPad->
GetSizeY() / 2.0 );
1483 m_gal->SetMinLineWidth( lineWidth );
1487 if( slot->GetSeg().A == slot->GetSeg().B )
1489 double holeRadius = slot->GetWidth() / 2.0;
1490 m_gal->DrawHoleWall( slot->GetSeg().A, holeRadius, lineWidth );
1494 int holeSize = slot->GetWidth() + ( 2 * lineWidth );
1495 m_gal->DrawSegment( slot->GetSeg().A, slot->GetSeg().B, holeSize );
1498 m_gal->SetMinLineWidth( 1.0 );
1506 outline_mode =
true;
1508 bool drawShape =
false;
1522 outline_mode =
true;
1527 outline_mode =
false;
1535 m_gal->SetIsFill(
false );
1536 m_gal->SetIsStroke(
true );
1543 m_gal->SetIsFill(
true );
1544 m_gal->SetIsStroke(
false );
1557 else if( drawShape )
1580 expansion.
x = expansion.
y = 0;
1594 margin = std::max( margin, getExpansion( layer ) );
1601 margin = getExpansion( pcbLayer );
1604 std::unique_ptr<PAD> dummyPad;
1605 std::shared_ptr<SHAPE_COMPOUND> shapes;
1608 bool simpleShapes = !outline_mode;
1614 && ( margin.
x < 0 || margin.
y < 0 ) ) )
1622 if( pad_size.
x + 2 * margin.
x <= 0 || pad_size.
y + 2 * margin.
y <= 0 )
1627 int initial_radius = dummyPad->GetRoundRectCornerRadius( pcbLayer );
1629 dummyPad->SetSize( pcbLayer, pad_size + margin + margin );
1635 int radius_margin = std::max( margin.
x, margin.
y );
1636 dummyPad->SetRoundRectCornerRadius(
1637 pcbLayer, std::max( initial_radius + radius_margin, 0 ) );
1640 shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>(
1641 dummyPad->GetEffectiveShape( pcbLayer ) );
1642 margin.
x = margin.
y = 0;
1646 shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>(
1660 simpleShapes =
false;
1663 for(
const SHAPE* shape : shapes->Shapes() )
1668 switch( shape->Type() )
1679 simpleShapes =
false;
1685 const auto drawOneSimpleShape = [&](
const SHAPE& aShape )
1687 switch( aShape.Type() )
1692 int effectiveWidth = seg.
GetWidth() + 2 * margin.
x;
1694 if( effectiveWidth > 0 )
1703 int effectiveRadius =
circle.GetRadius() + margin.
x;
1705 if( effectiveRadius > 0 )
1706 m_gal->DrawCircle(
circle.GetCenter(), effectiveRadius );
1717 if( effectiveMargin.
x < 0 )
1722 if( effectiveSize.
x > 0 && effectiveSize.
y > 0 )
1723 m_gal->DrawRectangle( pos - effectiveMargin, pos + effectiveSize );
1725 else if( effectiveMargin.
x > 0 )
1731 m_gal->DrawSegment( pos,
1733 effectiveMargin.
x * 2 );
1736 effectiveMargin.
x * 2 );
1739 effectiveMargin.
x * 2 );
1742 effectiveMargin.
x * 2 );
1764 for(
int ii = 0; ii < poly.
PointCount(); ++ii )
1769 m_gal->DrawPolygon( outline );
1782 m_gal->DrawSegment( seg.
A, seg.
B, margin.
x * 2 );
1797 for(
const SHAPE* shape : shapes->Shapes() )
1799 drawOneSimpleShape( *shape );
1808 m_gal->DrawPolygon( polySet );
1822 m_gal->SetIsStroke(
true );
1823 m_gal->SetIsFill(
false );
1830 auto shape = std::dynamic_pointer_cast<SHAPE_COMPOUND>(
1833 if( shape && shape->Size() == 1 && shape->Shapes()[0]->Type() ==
SH_SEGMENT )
1839 else if( shape && shape->Size() == 1 && shape->Shapes()[0]->Type() ==
SH_CIRCLE )
1853 m_gal->DrawPolygon( polySet );
1859 m_gal->DrawSegment( slot->GetSeg().A, slot->GetSeg().B,
1888 isHatchedFill =
false;
1906 if( netname.IsEmpty() )
1933 m_gal->SetIsFill(
false );
1934 m_gal->SetIsStroke(
true );
1948 std::vector<VECTOR2I> pts;
1950 offset = offset.
Resize( thickness / 2 );
1952 pts.push_back( aShape->
GetStart() + offset );
1953 pts.push_back( aShape->
GetStart() - offset );
1954 pts.push_back( aShape->
GetEnd() - offset );
1955 pts.push_back( aShape->
GetEnd() + offset );
1958 m_gal->DrawLine( pts[0], pts[1] );
1959 m_gal->DrawLine( pts[1], pts[2] );
1960 m_gal->DrawLine( pts[2], pts[3] );
1961 m_gal->DrawLine( pts[3], pts[0] );
1962 m_gal->DrawLine( ( pts[0] + pts[1] ) / 2, ( pts[1] + pts[2] ) / 2 );
1963 m_gal->DrawLine( ( pts[1] + pts[2] ) / 2, ( pts[2] + pts[3] ) / 2 );
1964 m_gal->DrawLine( ( pts[2] + pts[3] ) / 2, ( pts[3] + pts[0] ) / 2 );
1965 m_gal->DrawLine( ( pts[3] + pts[0] ) / 2, ( pts[0] + pts[1] ) / 2 );
1967 else if( outline_mode )
1973 m_gal->SetIsFill(
true );
1974 m_gal->SetIsStroke(
false );
1997 m_gal->DrawPolygon( outline );
1999 else if( outline_mode )
2001 m_gal->DrawSegmentChain( outline, thickness );
2005 m_gal->SetIsFill(
true );
2006 m_gal->SetIsStroke(
false );
2010 m_gal->DrawSegmentChain( outline, thickness );
2019 m_gal->DrawPolygon( deflated_shape );
2023 m_gal->DrawPolygon( outline );
2035 m_gal->DrawLine( pts[0], pts[1] );
2036 m_gal->DrawLine( pts[1], pts[2] );
2037 m_gal->DrawLine( pts[2], pts[3] );
2038 m_gal->DrawLine( pts[3], pts[0] );
2039 m_gal->DrawLine( pts[0], pts[2] );
2040 m_gal->DrawLine( pts[1], pts[3] );
2042 else if( outline_mode )
2044 m_gal->DrawSegment( pts[0], pts[1], thickness );
2045 m_gal->DrawSegment( pts[1], pts[2], thickness );
2046 m_gal->DrawSegment( pts[2], pts[3], thickness );
2047 m_gal->DrawSegment( pts[3], pts[0], thickness );
2051 m_gal->SetIsFill(
true );
2052 m_gal->SetIsStroke(
false );
2056 m_gal->DrawSegment( pts[0], pts[1], thickness );
2057 m_gal->DrawSegment( pts[1], pts[2], thickness );
2058 m_gal->DrawSegment( pts[2], pts[3], thickness );
2059 m_gal->DrawSegment( pts[3], pts[0], thickness );
2074 m_gal->DrawPolygon( poly );
2091 endAngle - startAngle, thickness,
m_maxError );
2095 m_gal->SetIsFill(
true );
2096 m_gal->SetIsStroke(
false );
2099 endAngle - startAngle, thickness,
m_maxError );
2114 m_gal->SetLineWidth( thickness );
2122 else if( isSolidFill )
2145 m_gal->DrawSegmentChain( shape.
Outline( ii ), thickness );
2149 m_gal->SetIsFill(
true );
2150 m_gal->SetIsStroke(
false );
2155 m_gal->DrawSegmentChain( shape.
Outline( ii ), thickness );
2165 m_gal->DrawPolygon( deflated_shape );
2176 m_gal->DrawPolygon( shape );
2187 std::vector<VECTOR2D> output;
2188 std::vector<VECTOR2D> pointCtrl;
2190 pointCtrl.push_back( aShape->
GetStart() );
2193 pointCtrl.push_back( aShape->
GetEnd() );
2204 m_gal->SetLineWidth( thickness );
2230 m_gal->SetIsFill(
true );
2231 m_gal->SetIsStroke(
false );
2236 for(
SHAPE* shape : shapes )
2242 m_gal->DrawSegment( a, b, thickness );
2246 for(
SHAPE* shape : shapes )
2252 m_gal->SetIsStroke(
false );
2253 m_gal->SetIsFill(
true );
2286 font->
Draw(
m_gal, aText, pos, aAttrs, aFontMetrics );
2301 if( img_scale != 1.0 )
2307 m_gal->SetIsStroke(
true );
2310 m_gal->SetIsFill(
false );
2317 bm_size.
x /= img_scale;
2318 bm_size.
y /= img_scale;
2319 VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
2322 m_gal->DrawRectangle( origin,
end );
2340 draw(
static_cast<const PCB_TEXT*
>( aField ), aLayer );
2348 if( resolvedText.Length() == 0 )
2355 m_gal->SetIsFill(
true );
2356 m_gal->SetIsStroke(
true );
2363 m_gal->DrawPolygon( poly );
2383 m_gal->SetIsStroke(
false );
2384 m_gal->SetIsFill(
true );
2385 m_gal->DrawPolygon( finalPoly );
2405 textWidth.
x = -textWidth.
x;
2412 textPos -= textWidth;
2414 textPos += textWidth;
2417 strokeText( resolvedText, textPos, attrs, metrics );
2421 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2429 m_gal->DrawGlyphs( *cache );
2462 wxString resolvedText( aTextBox->
GetShownText(
true ) );
2469 m_gal->SetIsFill(
true );
2470 m_gal->SetIsStroke(
false );
2471 m_gal->SetFillColor( sh_color );
2472 m_gal->SetStrokeColor( sh_color );
2476 std::vector<VECTOR2I> pts = aTextBox->
GetCorners();
2477 int line_thickness = std::max( thickness*3,
pcbIUScale.mmToIU( 0.2 ) );
2479 std::deque<VECTOR2D> dpts;
2484 dpts.push_back(
VECTOR2D( pts[0] ) );
2486 m_gal->SetIsStroke(
true );
2487 m_gal->SetLineWidth( line_thickness );
2488 m_gal->DrawPolygon( dpts );
2493 m_gal->SetIsFill(
true );
2494 m_gal->SetIsStroke(
false );
2502 std::vector<VECTOR2I> pts = aTextBox->
GetCorners();
2504 for(
size_t ii = 0; ii < pts.size(); ++ii )
2505 m_gal->DrawSegment( pts[ii], pts[( ii + 1 ) % pts.size()], thickness );
2512 for(
SHAPE* shape : shapes )
2517 m_gal->DrawSegment( a, b, thickness );
2521 for(
SHAPE* shape : shapes )
2534 m_gal->SetFillColor( sh_color );
2535 m_gal->SetStrokeColor( sh_color );
2548 m_gal->SetIsStroke(
false );
2549 m_gal->SetIsFill(
true );
2550 m_gal->DrawPolygon( finalPoly );
2554 if( resolvedText.Length() == 0 )
2568 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2576 m_gal->DrawGlyphs( *cache );
2592 if( cell->GetColSpan() > 0 || cell->GetRowSpan() > 0 )
2604 m_gal->SetIsFill(
false );
2605 m_gal->SetIsStroke(
true );
2607 m_gal->SetLineWidth( lineWidth );
2611 m_gal->DrawLine( ptA, ptB );
2622 m_gal->DrawLine( a+1, b );
2624 m_gal->DrawLine( a, b );
2632 if( aTable->
IsSelected() || cell->IsSelected() )
2634 std::vector<VECTOR2I> corners = cell->GetCorners();
2635 std::deque<VECTOR2D> pts;
2637 pts.insert( pts.end(), corners.begin(), corners.end() );
2639 m_gal->SetFillColor(
color.WithAlpha( 0.5 ) );
2640 m_gal->SetIsFill(
true );
2641 m_gal->SetIsStroke(
false );
2642 m_gal->DrawPolygon( pts );
2656 double anchorSize = 5.0 /
m_gal->GetWorldScale();
2657 double anchorThickness = 1.0 /
m_gal->GetWorldScale();
2660 m_gal->SetIsFill(
false );
2661 m_gal->SetIsStroke(
true );
2663 m_gal->SetLineWidth( anchorThickness );
2674 m_gal->SetIsFill(
true );
2675 m_gal->SetIsStroke(
false );
2680 m_gal->DrawPolygon( poly );
2686 m_gal->DrawRectangle( topLeft, botRight );
2703 m_gal->SetIsFill(
true );
2704 m_gal->SetIsStroke(
false );
2708 m_gal->DrawPolygon( frontpoly );
2711 m_gal->DrawPolygon( backpoly );
2745 m_gal->DrawLine( topLeft, topLeft + width );
2746 m_gal->DrawLine( topLeft + width, topLeft + width + height );
2747 m_gal->DrawLine( topLeft + width + height, topLeft + height );
2748 m_gal->DrawLine( topLeft + height, topLeft );
2752 if(
name.IsEmpty() )
2756 int scaledSize = abs(
KiROUND(
m_gal->GetScreenWorldMatrix().GetScale().x * ptSize ) );
2757 int unscaledSize =
pcbIUScale.MilsToIU( ptSize );
2760 int textSize = ( scaledSize + ( unscaledSize * 2 ) ) / 3;
2766 m_gal->DrawLine( topLeft, topLeft - titleHeight );
2767 m_gal->DrawLine( topLeft - titleHeight, topLeft + width - titleHeight );
2768 m_gal->DrawLine( topLeft + width - titleHeight, topLeft + width );
2790 m_gal->SetIsFill(
true );
2791 m_gal->SetIsStroke(
false );
2815 std::deque<VECTOR2D> corners;
2830 m_gal->SetIsFill(
false );
2831 m_gal->SetIsStroke(
true );
2848 int holes_count = outline->
HoleCount( ii );
2850 for(
int jj = 0; jj < holes_count; ++jj )
2851 m_gal->DrawPolyline( outline->
CHole( ii, jj ) );
2856 m_gal->DrawLine( hatchLine.A, hatchLine.B );
2868 if( polySet->OutlineCount() == 0 )
2873 m_gal->SetLineWidth( 0 );
2877 m_gal->SetIsFill(
true );
2878 m_gal->SetIsStroke(
false );
2882 m_gal->SetIsFill(
false );
2883 m_gal->SetIsStroke(
true );
2890 if(
m_gal->IsOpenGlEngine() && !polySet->IsTriangulationUpToDate() )
2891 polySet->CacheTriangulation(
true,
true );
2904 m_gal->SetIsFill(
false );
2905 m_gal->SetIsStroke(
true );
2916 for(
const std::shared_ptr<SHAPE>& shape : aDimension->
GetShapes() )
2918 switch( shape->Type() )
2923 m_gal->DrawLine( seg.
A, seg.
B );
2940 wxString resolvedText = aDimension->
GetShownText(
true );
2951 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2958 for(
const std::unique_ptr<KIFONT::GLYPH>& glyph : *cache )
2959 m_gal->DrawGlyph( *glyph.get() );
2975 m_gal->SetStrokeColor( strokeColor );
2976 m_gal->SetIsFill(
false );
2977 m_gal->SetIsStroke(
true );
2980 m_gal->Translate( position );
2986 size = 2.0 * aTarget->
GetSize() / 3.0;
2992 size = aTarget->
GetSize() / 2.0;
3011 double size = aPoint->
GetSize() / 2;
3031 m_gal->SetLineWidth( thickness );
3032 m_gal->SetStrokeColor( crossColor );
3033 m_gal->SetIsFill(
false );
3034 m_gal->SetIsStroke(
true );
3037 m_gal->Translate( position );
3044 m_gal->SetStrokeColor( ringColor );
3060 aMarker->
SetZoom( 1.0 / sqrt(
m_gal->GetZoomFactor() ) );
3079 m_gal->SetIsStroke(
true );
3085 m_gal->SetIsFill(
true );
3088 m_gal->DrawPolygon( polygon );
3099 if( shape.GetStroke().GetWidth() == 1.0 )
3101 m_gal->SetIsFill(
false );
3102 m_gal->SetIsStroke(
true );
3104 m_gal->SetLineWidth( (
float) shape.GetWidth() );
3108 m_gal->DrawLine( shape.GetStart(), shape.GetEnd() );
3113 shape.CalcArcAngles( startAngle, endAngle );
3115 m_gal->DrawArc( shape.GetCenter(), shape.GetRadius(), startAngle, shape.GetArcAngle() );
3120 m_gal->SetIsFill(
true );
3121 m_gal->SetIsStroke(
false );
3122 m_gal->SetFillColor(
color.WithAlpha( 0.5 ) );
3126 m_gal->DrawSegment( shape.GetStart(), shape.GetEnd(), shape.GetWidth() );
3131 shape.CalcArcAngles( startAngle, endAngle );
3133 m_gal->DrawArcSegment( shape.GetCenter(), shape.GetRadius(), startAngle, shape.GetArcAngle(),
3160 m_gal->SetFillColor( outlineColor );
3161 m_gal->AdvanceDepth();
3162 m_gal->SetLineWidth( 0 );
3163 m_gal->SetIsFill(
true );
3164 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 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.
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) 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_MARKER_SHADOWS
Shadows for DRC markers.
@ LAYER_VIA_HOLES
Draw via holes (pad holes do not use this layer).
@ LAYER_VIA_THROUGH
Draw blind/buried vias.
@ LAYER_DRC_ERROR
Layer for DRC markers with #SEVERITY_ERROR.
@ LAYER_VIA_BBLIND
Draw micro vias.
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.
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_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