260 const double keep = aKeep * contrast;
261 const double share = keep < 1.0 ? ( 1.0 - contrast ) / ( 1.0 - keep ) : 0.0;
263 aToward =
COLOR4D( background.
r * share, background.
g * share, background.
b * share, 1.0 );
292 int originalLayer = aLayer;
313 const PAD*
pad =
dynamic_cast<const PAD*
>( aItem );
315 int holeLayer = aLayer;
322 if( !copperLayers.empty() )
323 annularRingLayer = copperLayers.
Seq().front();
327 annularRingLayer =
F_Cu;
356 const PAD*
pad =
static_cast<const PAD*
>( aItem );
359 if(
pcbconfig()->m_Display.m_UseViaColorForNormalTHPadstacks
403 if( visibleLayers.any() )
404 aLayer = visibleLayers.
Seq().back();
424 return itemLayerIter->second;
464 netColor = ii->second;
516 switch( originalLayer )
520 const PAD*
pad =
static_cast<const PAD*
>( aItem );
522 if(
pad->IsOnLayer( primary ) && !
pad->FlashLayer( primary ) )
543 if(
via->GetLayerSet().test( primary ) == 0 )
556 if( !
via->FlashLayer( primary ) )
590 if(
via->GetLayerSet().test( primary ) == 0 )
625 color = color.
Mix( it->second, dim_factor_Edge_Cuts );
639 color = color.
Mix( backgroundColor, dim_factor_Edge_Cuts );
655 const BOARD* board =
via->GetBoard();
662 if( (
via->GetLayerSet() & visibleLayers ).none() )
713 if( aActualThickness == 0 )
716 return aActualThickness;
786 switch( item->
Type() )
793 draw(
static_cast<const PCB_ARC*
>( item ), aLayer );
800 draw(
static_cast<const PCB_VIA*
>( item ), aLayer );
808 draw(
static_cast<const PAD*
>( item ), aLayer );
860 draw(
static_cast<const ZONE*
>( item ), aLayer );
906 m_gal->SetIsFill(
false );
907 m_gal->SetIsStroke(
true );
914 m_gal->SetLineWidth( 1 );
940 int track_width = aTrack->
GetWidth();
950 if( netinfo->GetNetChain() ==
m_pcbSettings.m_highlightedNetChain )
994 m_gal->SetStrokeColor( color );
995 m_gal->SetIsStroke(
true );
996 m_gal->SetIsFill(
false );
998 m_gal->DrawSegment( start,
end, track_width );
1013 m_gal->SetIsFill(
false );
1014 m_gal->SetIsStroke(
true );
1015 m_gal->SetStrokeColor( color );
1022 const wxString& aNetName )
const
1034 int nameSize = (int) aNetName.size() * aSeg.
GetWidth();
1041 double penWidth = textSize / 12.0;
1049 if(
end.y == start.
y )
1054 else if(
end.x == start.
x )
1065 num_names = std::max( num_names,
KiROUND( aSeg.
GetSeg().
Length() / ( M_SQRT2 * min_size ) ) );
1068 m_gal->SetIsStroke(
true );
1069 m_gal->SetIsFill(
false );
1070 m_gal->SetStrokeColor( aColor );
1071 m_gal->SetLineWidth( penWidth );
1072 m_gal->SetFontBold(
false );
1073 m_gal->SetFontItalic(
false );
1074 m_gal->SetFontUnderlined(
false );
1075 m_gal->SetTextMirrored(
false );
1076 m_gal->SetGlyphSize(
VECTOR2D( textSize * 0.55, textSize * 0.55 ) );
1080 int divisions = num_names + 1;
1082 for(
int ii = 1; ii < divisions; ++ii )
1084 VECTOR2I textPosition = start + segV * ( (double) ii / divisions );
1086 if( viewport.
Contains( textPosition ) )
1087 m_gal->BitmapText( aNetName, textPosition, textOrientation );
1103 if( netinfo->GetNetChain() ==
m_pcbSettings.m_highlightedNetChain )
1136 if( netname.IsEmpty() )
1148 int nameSize = (int) netname.size() * width;
1158 textOrientation = -textOrientation;
1161 double textSize = width;
1162 double penWidth = textSize / 12.0;
1164 m_gal->SetIsStroke(
true );
1165 m_gal->SetIsFill(
false );
1166 m_gal->SetStrokeColor( color );
1167 m_gal->SetLineWidth( penWidth );
1168 m_gal->SetFontBold(
false );
1169 m_gal->SetFontItalic(
false );
1170 m_gal->SetFontUnderlined(
false );
1171 m_gal->SetTextMirrored(
false );
1172 m_gal->SetGlyphSize(
VECTOR2D( textSize * 0.55, textSize * 0.55 ) );
1176 m_gal->BitmapText( netname, midPt, textOrientation );
1185 m_gal->SetStrokeColor( color );
1186 m_gal->SetFillColor( color );
1187 m_gal->SetIsStroke( outline_mode );
1188 m_gal->SetIsFill( not outline_mode );
1214 m_gal->SetIsFill(
false );
1215 m_gal->SetIsStroke(
true );
1216 m_gal->SetStrokeColor( color );
1233 m_gal->SetIsFill(
false );
1234 m_gal->SetIsStroke(
true );
1236 m_gal->DrawPolygon( cornerBuffer );
1243 m_gal->SetIsFill(
false );
1244 m_gal->SetIsStroke(
true );
1257 m_gal->SetIsFill(
false );
1258 m_gal->SetIsStroke(
true );
1259 m_gal->SetStrokeColor(
COLOR4D( 0.3, 0.2, 0.5, 1.0 ) );
1261 for(
int idx = 1; idx < arcSpine.
PointCount(); idx++ )
1270 aVia->
LayerPair( &layerTop, &layerBottom );
1284 switch(
static_cast<const BOARD_ITEM*
>( aItem )->Type() )
1288 const PAD*
pad =
static_cast<const PAD*
>( aItem );
1298 return pad->GetDrillSize().x <= 0 || (
pad->GetSecondaryDrillSizeX() <= 0 &&
pad->GetTertiaryDrillSizeX() <= 0 );
1311 return via->GetSecondaryDrillSize().value_or( 0 ) <= 0 &&
via->GetTertiaryDrillSize().value_or( 0 ) <= 0;
1351 if( netinfo->GetNetChain() ==
m_pcbSettings.m_highlightedNetChain )
1365 aVia->
LayerPair( &layerTop, &layerBottom );
1380 if( !showNets && !showLayers )
1384 double size = aVia->
GetWidth( currentLayer );
1387 if( size > maxSize )
1391 m_gal->Translate( position );
1394 m_gal->ResetTextAttributes();
1397 m_gal->SetFontBold(
false );
1398 m_gal->SetFontItalic(
false );
1399 m_gal->SetFontUnderlined(
false );
1400 m_gal->SetTextMirrored(
false );
1402 m_gal->SetIsStroke(
true );
1403 m_gal->SetIsFill(
false );
1417 switch( topLayerId )
1419 case F_Cu: topLayer = 1;
break;
1421 default: topLayer = (topLayerId -
B_Cu)/2 + 1;
break;
1424 switch( bottomLayerId )
1426 case F_Cu: bottomLayer = 1;
break;
1428 default: bottomLayer = (bottomLayerId -
B_Cu)/2 + 1;
break;
1432#if wxUSE_UNICODE_WCHAR
1433 layerIds << std::to_wstring( topLayer ) <<
L'-' << std::to_wstring( bottomLayer );
1435 layerIds << std::to_string( topLayer ) <<
'-' << std::to_string( bottomLayer );
1441 int minCharCnt = showLayers ? 6 : 3;
1445 tsize = std::min( tsize, size );
1452 if( showLayers && showNets )
1453 textpos.
y += ( tsize * 1.3 )/ 2;
1455 m_gal->SetGlyphSize( namesize );
1456 m_gal->SetLineWidth( namesize.
x / 10.0 );
1464 textpos.
y -= tsize * 1.3;
1476 m_gal->SetStrokeColor( color );
1477 m_gal->SetFillColor( color );
1478 m_gal->SetIsStroke(
true );
1479 m_gal->SetIsFill(
false );
1489 double maxRadius = aVia->
GetWidth( layerTop ) / 2.0;
1490 double radius = drillRadius + thickness;
1496 thickness =
radius - drillRadius;
1499 if( thickness <= 0 )
1504 m_gal->SetLineWidth( thickness );
1505 radius -= thickness / 2.0;
1509 m_gal->SetIsFill(
true );
1520 if( secDrill.value_or( 0 ) > 0 )
1526 if( terDrill.value_or( 0 ) > 0 )
1537 m_gal->SetIsStroke(
false );
1538 m_gal->SetIsFill(
true );
1542 m_gal->SetIsStroke(
false );
1543 m_gal->SetIsFill(
true );
1562 m_gal->SetIsFill(
true );
1563 m_gal->SetIsStroke(
false );
1565 m_gal->SetLineWidth( margin );
1592 m_gal->SetLineWidth( annular_width );
1593 radius -= annular_width / 2.0;
1622 if( aVia->
FlashLayer( copperLayerForClearance ) )
1628 m_gal->SetIsFill(
false );
1629 m_gal->SetIsStroke(
true );
1630 m_gal->SetStrokeColor( color );
1650 m_gal->SetIsFill(
false );
1651 m_gal->SetIsStroke(
true );
1655 for(
const auto& [row, shapeIndex] : aChart->
RowShapes() )
1677 switch( part.m_Type )
1680 m_gal->DrawLine( part.m_Points.front(), part.m_Points.back() );
1684 for(
size_t ii = 0; ii + 1 < part.m_Points.size(); ++ii )
1685 m_gal->DrawLine( part.m_Points[ii], part.m_Points[ii + 1] );
1690 m_gal->DrawCircle( centre, part.m_Radius );
1706 const int outlineWidth =
1709 m_gal->SetIsFill(
false );
1710 m_gal->SetIsStroke(
true );
1712 m_gal->SetLineWidth( outlineWidth );
1714 const std::shared_ptr<const SHAPE_POLY_SET> outlines = aMap->
GetBoardOutlines();
1716 for(
int ii = 0; ii < outlines->OutlineCount(); ++ii )
1718 m_gal->DrawSegmentChain( outlines->COutline( ii ), outlineWidth );
1720 for(
int jj = 0; jj < outlines->HoleCount( ii ); ++jj )
1721 m_gal->DrawSegmentChain( outlines->CHole( ii, jj ), outlineWidth );
1728 const std::shared_ptr<const DRILL_SYMBOL_CACHE> cache = board->
DrillSymbolCache();
1731 for(
const auto& [itemId, entries] : cache->m_ByItem )
1738 const int thickness = std::max<int>(
m_pcbSettings.m_outlineWidth, 1 );
1740 m_gal->SetLineWidth( thickness );
1752 m_gal->DrawSegment( a, b, thickness );
1766 const std::vector<const PCB_DRILL_MAP*> maps =
1773 const std::shared_ptr<const DRILL_SYMBOL_CACHE> cache = board->
DrillSymbolCache();
1775 const auto it = cache->m_ByItem.find( aItem->
m_Uuid );
1777 if( it == cache->m_ByItem.end() )
1790 if( map->IsMoving() )
1809 const int radius = symbolSize / 2;
1819 m_gal->SetIsFill(
false );
1820 m_gal->SetIsStroke(
true );
1821 m_gal->SetStrokeColor( aColor );
1831 switch( part.m_Type )
1834 m_gal->DrawLine( part.m_Points.front(), part.m_Points.back() );
1838 for(
size_t ii = 0; ii + 1 < part.m_Points.size(); ++ii )
1839 m_gal->DrawLine( part.m_Points[ii], part.m_Points[ii + 1] );
1844 m_gal->DrawCircle( pos, part.m_Radius );
1853 const wxString
text =
1855 ? entry.m_Symbol.m_Letter
1856 : wxString::Format( wxT(
"%.2f" ),
1865 m_gal->SetIsFill(
true );
1866 m_gal->SetFillColor( aColor );
1874 const int reach = symbolSize;
1876 m_gal->SetIsFill(
false );
1877 m_gal->SetIsStroke(
true );
1878 m_gal->SetStrokeColor( aColor );
1890 EDA_ANGLE orientation = entry.m_Orientation;
1892 if( size.
x > size.
y )
1894 std::swap( size.
x, size.
y );
1898 const int half = ( size.
y - size.
x ) / 2;
1906 m_gal->SetIsFill(
false );
1907 m_gal->SetIsStroke(
true );
1908 m_gal->SetStrokeColor( aColor );
1910 m_gal->DrawSegment( pos + start, pos +
end, size.
x );
1942 netname = wxT(
"x" );
1944 netname = wxT(
"*" );
1947 if( netname.IsEmpty() && padNumber.IsEmpty() )
1982 for(
const std::shared_ptr<PCB_SHAPE>& primitive : aPad->
GetPrimitives( pcbLayer ) )
1986 position = primitive->GetCenter();
1988 position += aPad->
ShapePos( pcbLayer );
1990 padsize.
x = abs( primitive->GetBotRight().x - primitive->GetTopLeft().x );
1991 padsize.
y = abs( primitive->GetBotRight().y - primitive->GetTopLeft().y );
2005 double limit = std::min( aPad->
GetSize( pcbLayer ).
x, aPad->
GetSize( pcbLayer ).
y ) * 1.1;
2007 if( padsize.
x > limit && padsize.
y > limit )
2015 double size = padsize.
y;
2018 m_gal->Translate( position );
2021 if( padsize.
x < ( padsize.
y * 0.95 ) )
2025 std::swap( padsize.
x, padsize.
y );
2029 if( size > maxSize )
2033 m_gal->ResetTextAttributes();
2036 m_gal->SetFontBold(
false );
2037 m_gal->SetFontItalic(
false );
2038 m_gal->SetFontUnderlined(
false );
2039 m_gal->SetTextMirrored(
false );
2041 m_gal->SetIsStroke(
true );
2042 m_gal->SetIsFill(
false );
2050 int Y_offset_numpad = 0;
2051 int Y_offset_netname = 0;
2053 if( !netname.IsEmpty() && !padNumber.IsEmpty() )
2057 Y_offset_netname = size / 1.4;
2059 Y_offset_numpad = size / 1.7;
2065 const double Xscale_for_stroked_font = 0.9;
2067 if( !netname.IsEmpty() )
2073 tsize = std::min( tsize, size );
2086 VECTOR2D namesize( tsize*Xscale_for_stroked_font, tsize );
2087 textpos.
y =
KiROUND( std::min( tsize * 1.4,
double( Y_offset_netname ) ) );
2089 m_gal->SetGlyphSize( namesize );
2090 m_gal->SetLineWidth( namesize.
x / 6.0 );
2091 m_gal->SetFontBold(
true );
2095 if( !padNumber.IsEmpty() )
2100 tsize = std::min( tsize, size );
2104 tsize = std::min( tsize, size );
2105 VECTOR2D numsize( tsize*Xscale_for_stroked_font, tsize );
2106 textpos.
y = -Y_offset_numpad;
2108 m_gal->SetGlyphSize( numsize );
2109 m_gal->SetLineWidth( numsize.
x / 6.0 );
2110 m_gal->SetFontBold(
true );
2120 m_gal->SetIsFill(
true );
2121 m_gal->SetIsStroke(
false );
2127 m_gal->SetFillColor( color );
2128 m_gal->SetMinLineWidth( lineWidth );
2132 if( slot->GetSeg().A == slot->GetSeg().B )
2134 double holeRadius = slot->GetWidth() / 2.0;
2135 m_gal->DrawHoleWall( slot->GetSeg().A, holeRadius, lineWidth );
2139 int holeSize =
KiROUND( slot->GetWidth() + ( 2 * lineWidth ) );
2140 m_gal->DrawSegment( slot->GetSeg().A, slot->GetSeg().B, holeSize );
2143 m_gal->SetMinLineWidth( 1.0 );
2149 const VECTOR2I& holePos = slot->GetSeg().A;
2153 if( secDrill.
x > 0 )
2159 if( terDrill.
x > 0 )
2172 outline_mode =
true;
2174 bool drawShape =
false;
2188 outline_mode =
true;
2193 outline_mode =
false;
2201 m_gal->SetIsFill(
false );
2202 m_gal->SetIsStroke(
true );
2204 m_gal->SetStrokeColor( color );
2209 m_gal->SetIsFill(
true );
2210 m_gal->SetIsStroke(
false );
2211 m_gal->SetFillColor( color );
2224 else if( drawShape )
2230 if(
m_gal->SupportsTypedPads()
2242 double halfWidth = padSize.
x / 2.0;
2243 double halfHeight = padSize.
y / 2.0;
2254 default: shapeType = 0.0f;
break;
2257 double cornerRadius = 0.0;
2262 m_gal->DrawPad(
center, halfWidth, halfHeight, cornerRadius, shapeType,
2288 expansion.
x = expansion.
y = 0;
2307 VECTOR2I expansion = getExpansion( layer );
2318 margin = getExpansion( pcbLayer );
2321 std::unique_ptr<PAD> dummyPad;
2322 std::shared_ptr<SHAPE_COMPOUND> shapes;
2325 bool simpleShapes = !outline_mode;
2331 && ( margin.
x < 0 || margin.
y < 0 ) ) )
2339 if( pad_size.
x + 2 * margin.
x <= 0 || pad_size.
y + 2 * margin.
y <= 0 )
2344 int initial_radius = dummyPad->GetRoundRectCornerRadius( pcbLayer );
2346 dummyPad->SetSize( pcbLayer, pad_size + margin + margin );
2352 int radius_margin = std::max( margin.
x, margin.
y );
2353 dummyPad->SetRoundRectCornerRadius( pcbLayer, std::max( initial_radius + radius_margin, 0 ) );
2356 shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>( dummyPad->GetEffectiveShape( pcbLayer ) );
2357 margin.
x = margin.
y = 0;
2361 shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>( aPad->
GetEffectiveShape( pcbLayer ) );
2374 simpleShapes =
false;
2377 for(
const SHAPE* shape : shapes->Shapes() )
2382 switch( shape->Type() )
2393 simpleShapes =
false;
2399 const auto drawOneSimpleShape =
2400 [&](
const SHAPE& aShape )
2402 switch( aShape.Type() )
2407 int effectiveWidth = seg.
GetWidth() + 2 * margin.
x;
2409 if( effectiveWidth > 0 )
2418 int effectiveRadius =
circle.GetRadius() + margin.
x;
2420 if( effectiveRadius > 0 )
2421 m_gal->DrawCircle(
circle.GetCenter(), effectiveRadius );
2432 if( effectiveMargin.
x < 0 )
2437 if( effectiveSize.
x > 0 && effectiveSize.
y > 0 )
2438 m_gal->DrawRectangle( pos - effectiveMargin, pos + effectiveSize );
2440 else if( effectiveMargin.
x > 0 )
2446 m_gal->DrawSegment( pos,
2448 effectiveMargin.
x * 2 );
2451 effectiveMargin.
x * 2 );
2454 effectiveMargin.
x * 2 );
2457 effectiveMargin.
x * 2 );
2479 for(
int ii = 0; ii < poly.
PointCount(); ++ii )
2484 m_gal->DrawPolygon( outline );
2497 m_gal->DrawSegment( seg.
A, seg.
B, margin.
x * 2 );
2512 for(
const SHAPE* shape : shapes->Shapes() )
2513 drawOneSimpleShape( *shape );
2520 m_gal->DrawPolygon( polySet );
2541 m_gal->SetIsStroke(
true );
2542 m_gal->SetIsFill(
false );
2543 m_gal->SetStrokeColor( color );
2549 auto shape = std::dynamic_pointer_cast<SHAPE_COMPOUND>( aPad->
GetEffectiveShape( pcbLayer ) );
2551 if( shape && shape->Size() == 1 && shape->Shapes()[0]->Type() ==
SH_SEGMENT )
2556 else if( shape && shape->Size() == 1 && shape->Shapes()[0]->Type() ==
SH_CIRCLE )
2569 m_gal->DrawPolygon( polySet );
2575 m_gal->DrawSegment( slot->GetSeg().A, slot->GetSeg().B, slot->GetWidth() + 2 *
clearance );
2586 m_gal->SetIsFill(
false );
2587 m_gal->SetIsStroke(
true );
2602 board->GetNetChainColor(
m_pcbSettings.m_highlightedNetChain );
2605 termColor = chainColor;
2617 m_gal->SetStrokeColor( termColor );
2618 m_gal->SetLineWidth( baseWidth );
2626 int inset = baseWidth * 2;
2628 inner.
Inflate( -inset, -inset );
2662 isHatchedFill =
false;
2680 if( netname.IsEmpty() )
2717 thickness = thickness + margin;
2723 m_gal->SetIsFill(
false );
2724 m_gal->SetIsStroke(
true );
2728 m_gal->SetFillColor( color );
2729 m_gal->SetStrokeColor( color );
2745 std::vector<VECTOR2I> pts;
2746 VECTOR2I offset = ( segEnd - segStart ).Perpendicular();
2747 offset = offset.
Resize( thickness / 2 );
2749 pts.push_back( segStart + offset );
2750 pts.push_back( segStart - offset );
2751 pts.push_back( segEnd - offset );
2752 pts.push_back( segEnd + offset );
2755 m_gal->DrawLine( pts[0], pts[1] );
2756 m_gal->DrawLine( pts[1], pts[2] );
2757 m_gal->DrawLine( pts[2], pts[3] );
2758 m_gal->DrawLine( pts[3], pts[0] );
2759 m_gal->DrawLine( ( pts[0] + pts[1] ) / 2, ( pts[1] + pts[2] ) / 2 );
2760 m_gal->DrawLine( ( pts[1] + pts[2] ) / 2, ( pts[2] + pts[3] ) / 2 );
2761 m_gal->DrawLine( ( pts[2] + pts[3] ) / 2, ( pts[3] + pts[0] ) / 2 );
2762 m_gal->DrawLine( ( pts[3] + pts[0] ) / 2, ( pts[0] + pts[1] ) / 2 );
2764 else if( outline_mode )
2766 m_gal->DrawSegment( segStart, segEnd, thickness );
2770 m_gal->SetIsFill(
true );
2771 m_gal->SetIsStroke(
false );
2773 m_gal->DrawSegment( segStart, segEnd, thickness );
2796 m_gal->DrawPolygon( outline );
2798 else if( outline_mode )
2800 m_gal->DrawSegmentChain( outline, thickness );
2804 m_gal->SetIsFill(
true );
2805 m_gal->SetIsStroke(
false );
2809 m_gal->DrawSegmentChain( outline, thickness );
2818 m_gal->DrawPolygon( deflated_shape );
2822 m_gal->DrawPolygon( outline );
2834 m_gal->DrawLine( pts[0], pts[1] );
2835 m_gal->DrawLine( pts[1], pts[2] );
2836 m_gal->DrawLine( pts[2], pts[3] );
2837 m_gal->DrawLine( pts[3], pts[0] );
2838 m_gal->DrawLine( pts[0], pts[2] );
2839 m_gal->DrawLine( pts[1], pts[3] );
2841 else if( outline_mode )
2843 m_gal->DrawSegment( pts[0], pts[1], thickness );
2844 m_gal->DrawSegment( pts[1], pts[2], thickness );
2845 m_gal->DrawSegment( pts[2], pts[3], thickness );
2846 m_gal->DrawSegment( pts[3], pts[0], thickness );
2850 m_gal->SetIsFill(
true );
2851 m_gal->SetIsStroke(
false );
2855 m_gal->DrawSegment( pts[0], pts[1], thickness );
2856 m_gal->DrawSegment( pts[1], pts[2], thickness );
2857 m_gal->DrawSegment( pts[2], pts[3], thickness );
2858 m_gal->DrawSegment( pts[3], pts[0], thickness );
2872 m_gal->DrawPolygon( poly );
2886 EDA_ANGLE arcAngle = endAngle - startAngle;
2897 m_gal->SetIsFill(
true );
2898 m_gal->SetIsStroke(
false );
2918 m_gal->SetLineWidth( thickness );
2926 else if( isSolidFill )
2943 auto drawOutlineBody =
2952 std::vector<VECTOR2I> pts;
2963 m_gal->DrawSegmentChain( shortened, thickness );
2967 m_gal->DrawSegmentChain( aOutline, thickness );
2977 drawOutlineBody( shape.
COutline( ii ), ii );
2981 m_gal->SetIsFill(
true );
2982 m_gal->SetIsStroke(
false );
2987 drawOutlineBody( shape.
COutline( ii ), ii );
2996 m_gal->DrawPolygon( deflated_shape );
3004 if(
m_gal->UsesPolygonTriangulationCache()
3008 m_gal->DrawPolygon( shape );
3021 std::vector<VECTOR2D> output;
3022 BEZIER_POLY converter( std::vector<VECTOR2D>{ curve->Start, curve->C1, curve->C2, curve->End } );
3025 m_gal->DrawSegmentChain( output, thickness );
3031 m_gal->SetLineWidth( thickness );
3032 m_gal->DrawCurve( curve->Start, curve->C1, curve->C2, curve->End,
m_maxError );
3047 m_gal->DrawEllipse(
center, majorR - thickness / 2, minorR - thickness / 2, rot );
3048 m_gal->DrawEllipse(
center, majorR + thickness / 2, minorR + thickness / 2, rot );
3054 m_gal->SetLineWidth( thickness );
3057 m_gal->DrawEllipse(
center, majorR, minorR, rot );
3058 else if( isSolidFill )
3059 m_gal->DrawEllipse(
center, majorR, minorR, rot );
3075 std::vector<VECTOR2I> pts;
3084 chain.SetClosed(
false );
3104 m_gal->SetIsFill(
true );
3105 m_gal->SetIsStroke(
false );
3110 for(
SHAPE* shape : shapes )
3116 m_gal->DrawSegment( a, b, thickness );
3120 for(
SHAPE* shape : shapes )
3127 m_gal->SetIsFill(
false );
3128 m_gal->SetIsStroke(
true );
3132 m_gal->DrawLine( seg.A, seg.B );
3180 font->
Draw(
m_gal, aText, pos, aAttrs, aFontMetrics );
3197 if( img_scale != 1.0 )
3205 m_gal->SetIsStroke(
true );
3206 m_gal->SetStrokeColor( color );
3208 m_gal->SetIsFill(
false );
3215 bm_size.
x /= img_scale;
3216 bm_size.
y /= img_scale;
3217 VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
3220 m_gal->DrawRectangle( origin,
end );
3223 imgAlpha = std::max( imgAlpha, 0.1 );
3239 draw(
static_cast<const PCB_TEXT*
>( aField ), aLayer );
3247 if( resolvedText.Length() == 0 )
3254 m_gal->SetIsFill(
true );
3255 m_gal->SetIsStroke(
true );
3256 m_gal->SetFillColor( color );
3257 m_gal->SetStrokeColor( color );
3262 m_gal->DrawPolygon( poly );
3277 m_gal->SetStrokeColor( color );
3278 m_gal->SetFillColor( color );
3285 m_gal->SetIsStroke(
false );
3286 m_gal->SetIsFill(
true );
3287 m_gal->DrawPolygon( finalPoly );
3307 textWidth.
x = -textWidth.
x;
3314 textPos -= textWidth;
3316 textPos += textWidth;
3319 strokeText( resolvedText, textPos, attrs, metrics );
3323 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
3331 m_gal->DrawGlyphs( *cache );
3371 m_gal->SetIsFill(
true );
3372 m_gal->SetIsStroke(
false );
3373 m_gal->SetFillColor( sh_color );
3374 m_gal->SetStrokeColor( sh_color );
3378 std::vector<VECTOR2I> pts = aTextBox->
GetCorners();
3379 int line_thickness = std::max( thickness*3,
pcbIUScale.mmToIU( 0.2 ) );
3381 std::deque<VECTOR2D> dpts;
3386 dpts.push_back(
VECTOR2D( pts[0] ) );
3388 m_gal->SetIsStroke(
true );
3389 m_gal->SetLineWidth( line_thickness );
3390 m_gal->DrawPolygon( dpts );
3393 m_gal->SetFillColor( color );
3394 m_gal->SetStrokeColor( color );
3395 m_gal->SetIsFill(
true );
3396 m_gal->SetIsStroke(
false );
3405 std::vector<VECTOR2I> pts = aTextBox->
GetCorners();
3407 for(
size_t ii = 0; ii < pts.size(); ++ii )
3408 m_gal->DrawSegment( pts[ii], pts[( ii + 1 ) % pts.size()], thickness );
3415 for(
SHAPE* shape : shapes )
3420 m_gal->DrawSegment( a, b, thickness );
3424 for(
SHAPE* shape : shapes )
3437 m_canvas->SetFillColor( sh_color );
3438 m_canvas->SetStrokeColor( sh_color );
3451 m_gal->SetIsStroke(
false );
3452 m_gal->SetIsFill(
true );
3453 m_gal->DrawPolygon( finalPoly );
3457 if( resolvedText.Length() == 0 )
3473 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
3481 m_gal->DrawGlyphs( *cache );
3497 if( cell->GetColSpan() > 0 || cell->GetRowSpan() > 0 )
3509 m_gal->SetIsFill(
false );
3510 m_gal->SetIsStroke(
true );
3511 m_gal->SetStrokeColor( color );
3512 m_gal->SetLineWidth( lineWidth );
3516 m_gal->DrawLine( ptA, ptB );
3527 m_gal->DrawLine( a+1, b );
3529 m_gal->DrawLine( a, b );
3537 if( aTable->
IsSelected() || cell->IsSelected() )
3539 std::vector<VECTOR2I> corners = cell->GetCorners();
3540 std::deque<VECTOR2D> pts;
3542 pts.insert( pts.end(), corners.begin(), corners.end() );
3545 m_gal->SetIsFill(
true );
3546 m_gal->SetIsStroke(
false );
3547 m_gal->DrawPolygon( pts );
3560 double worldScale =
m_gal->GetWorldScaleForScreenSpace();
3561 double anchorSize = 5.0 / worldScale;
3562 double anchorThickness = 1.0 / worldScale;
3564 m_gal->SetIsFill(
false );
3565 m_gal->SetIsStroke(
true );
3566 m_gal->SetStrokeColor( color );
3567 m_gal->SetLineWidth( anchorThickness );
3568 m_gal->SetScreenSpaceMode(
true );
3574 m_gal->SetScreenSpaceMode(
false );
3581 m_gal->SetIsFill(
true );
3582 m_gal->SetIsStroke(
false );
3583 m_gal->SetFillColor( color );
3587 m_canvas->DrawPolygon( poly );
3593 m_gal->DrawRectangle( topLeft, botRight );
3610 m_gal->SetIsFill(
true );
3611 m_gal->SetIsStroke(
false );
3612 m_gal->SetFillColor( color );
3615 m_gal->DrawPolygon( frontpoly );
3618 m_gal->DrawPolygon( backpoly );
3644 m_gal->SetStrokeColor( color );
3652 m_gal->DrawLine( topLeft, topLeft + width );
3653 m_gal->DrawLine( topLeft + width, topLeft + width + height );
3654 m_gal->DrawLine( topLeft + width + height, topLeft + height );
3655 m_gal->DrawLine( topLeft + height, topLeft );
3659 if(
name.IsEmpty() )
3663 int scaledSize = abs(
KiROUND(
m_gal->GetScreenWorldMatrix().GetScale().x * ptSize ) );
3664 int unscaledSize =
pcbIUScale.MilsToIU( ptSize );
3667 int textSize = ( scaledSize + ( unscaledSize * 2 ) ) / 3;
3673 m_gal->DrawLine( topLeft, topLeft - titleHeight );
3674 m_gal->DrawLine( topLeft - titleHeight, topLeft + width - titleHeight );
3675 m_gal->DrawLine( topLeft + width - titleHeight, topLeft + width );
3708 zoneOutline = aZone->
Outline();
3716 m_gal->SetIsFill(
true );
3717 m_gal->SetIsStroke(
false );
3718 m_gal->SetFillColor( color );
3743 std::deque<VECTOR2D> corners;
3756 m_gal->SetStrokeColor( color.
a > 0.0 ? color.
WithAlpha( 1.0 ) : color );
3757 m_gal->SetIsFill(
false );
3758 m_gal->SetIsStroke(
true );
3770 for(
int ii = 0; ii < zoneOutline->
OutlineCount(); ++ii )
3775 int holes_count = zoneOutline->
HoleCount( ii );
3777 for(
int jj = 0; jj < holes_count; ++jj )
3778 m_gal->DrawPolyline( zoneOutline->
CHole( ii, jj ) );
3783 m_gal->DrawLine( hatchLine.A, hatchLine.B );
3795 if( polySet->OutlineCount() == 0 )
3798 m_gal->SetStrokeColor( color );
3799 m_gal->SetFillColor( color );
3800 m_gal->SetLineWidth( 0 );
3804 m_gal->SetIsFill(
true );
3805 m_gal->SetIsStroke(
false );
3809 m_gal->SetIsFill(
false );
3810 m_gal->SetIsStroke(
true );
3817 if(
m_gal->UsesPolygonTriangulationCache() && !polySet->IsTriangulationUpToDate() )
3818 polySet->CacheTriangulation(
true );
3829 m_gal->SetIsFill(
true );
3830 m_gal->SetIsStroke(
false );
3831 m_gal->SetFillColor( color );
3842 m_gal->DrawPolygon( shape );
3861 m_gal->SetIsFill(
true );
3862 m_gal->SetIsStroke(
true );
3863 m_gal->SetFillColor( color );
3864 m_gal->SetStrokeColor( color );
3865 m_gal->SetLineWidth( margin );
3867 for(
const std::shared_ptr<SHAPE>& shape : aDimension->
GetShapes() )
3869 switch( shape->Type() )
3874 m_gal->DrawSegment( seg.
A, seg.
B, margin );
3891 m_gal->DrawPolygon( poly );
3896 m_gal->SetStrokeColor( color );
3897 m_gal->SetFillColor( color );
3898 m_gal->SetIsFill(
false );
3899 m_gal->SetIsStroke(
true );
3910 for(
const std::shared_ptr<SHAPE>& shape : aDimension->
GetShapes() )
3912 switch( shape->Type() )
3917 m_gal->DrawLine( seg.
A, seg.
B );
3945 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
3952 for(
const std::unique_ptr<KIFONT::GLYPH>& glyph : *cache )
3953 m_gal->DrawGlyph( *glyph );
3979 m_gal->SetIsFill(
false );
3980 m_gal->SetIsStroke(
true );
3997 if( phiMax + 1e-9 < 2 *
M_PI )
4017 wxFAIL_MSG( wxT(
"draw(PCB_GRID_ITEM*): unhandled PCB_GRID_TYPE" ) );
4029 const double anchorSize = 5.0 /
m_gal->GetWorldScale();
4030 const double anchorThickness = 1.0 /
m_gal->GetWorldScale();
4033 m_gal->SetStrokeColor( anchorColor );
4034 m_gal->SetLineWidth( anchorThickness );
4049 m_gal->SetStrokeColor( strokeColor );
4050 m_gal->SetIsFill(
false );
4051 m_gal->SetIsStroke(
true );
4054 m_gal->Translate( position );
4060 size = 2.0 * aTarget->
GetSize() / 3.0;
4066 size = aTarget->
GetSize() / 2.0;
4085 double size = (double)aPoint->
GetSize() / 2;
4105 m_gal->SetLineWidth( (
float) thickness );
4106 m_gal->SetStrokeColor( crossColor );
4107 m_gal->SetIsFill(
false );
4108 m_gal->SetIsStroke(
true );
4111 m_gal->Translate( position );
4118 m_gal->SetStrokeColor( ringColor );
4142 aMarker->
SetZoom( 1.0 / sqrt(
m_gal->GetZoomFactor() ) );
4148 m_gal->SetStrokeColor( shadowColor );
4149 m_gal->SetFillColor( color );
4153 m_gal->SetIsFill(
false );
4154 m_gal->SetIsStroke(
true );
4159 m_gal->SetIsFill(
true );
4160 m_gal->SetIsStroke(
false );
4163 m_gal->DrawPolygon( polygon );
4170 double bg_h, bg_s, bg_l;
4173 legendColor.
ToHSL( bg_h, bg_s, bg_l );
4174 haloColor.
FromHSL( bg_h, bg_s, bg_l < 0.5 ? 1.0 : 0.0 );
4182 if( shape.GetStroke().GetWidth() == 1.0 )
4184 m_gal->SetIsFill(
false );
4185 m_gal->SetIsStroke(
true );
4189 m_gal->DrawLine( shape.GetStart(), shape.GetEnd() );
4194 shape.CalcArcAngles( startAngle, endAngle );
4196 m_gal->DrawArc( shape.GetCenter(), shape.GetRadius(), startAngle, shape.GetArcAngle() );
4201 m_gal->SetIsFill(
true );
4202 m_gal->SetIsStroke(
false );
4206 m_gal->DrawSegment( shape.GetStart(), shape.GetEnd(), shape.GetWidth() );
4211 shape.CalcArcAngles( startAngle, endAngle );
4213 m_gal->DrawArcSegment( shape.GetCenter(), shape.GetRadius(), startAngle, shape.GetArcAngle(),
4238 m_gal->SetFillColor( outlineColor );
4239 m_gal->AdvanceDepth();
4240 m_gal->SetLineWidth( 0 );
4241 m_gal->SetIsFill(
true );
4242 m_gal->SetIsStroke(
false );
4252 double backdrillRadius = aDrillSize / 2.0;
4253 double lineWidth = std::max( backdrillRadius / 16.0,
m_pcbSettings.m_outlineWidth * 2.0 );
4256 backdrillRadius -= lineWidth / 2;
4259 m_gal->AdvanceDepth();
4260 m_gal->SetIsFill(
false );
4261 m_gal->SetIsStroke(
true );
4262 m_gal->SetLineWidth( (
float) lineWidth );
4265 constexpr int NUM_DASHES = 12;
4268 for(
int i = 0; i < NUM_DASHES; ++i )
4270 EDA_ANGLE startAngle = dashAngle * ( i * 2 );
4271 m_gal->SetStrokeColor(
m_pcbSettings.GetColor( aItem, i % 2 ? aStartLayer : aEndLayer ) );
4272 m_gal->DrawArc( aCenter, backdrillRadius, startAngle, dashAngle );
4282 if(
const PAD*
pad =
dynamic_cast<const PAD*
>( aItem ) )
4283 size =
pad->GetPostMachiningKnockout( aLayer );
4285 size =
via->GetPostMachiningKnockout( aLayer );
4291 m_gal->AdvanceDepth();
4293 double pmRadius = size / 2.0;
4295 double lineWidth = std::max( pmRadius / 16.0,
m_pcbSettings.m_outlineWidth * 2.0 );
4298 pmRadius -= lineWidth / 2;
4302 m_gal->SetIsFill(
false );
4303 m_gal->SetIsStroke(
true );
4304 m_gal->SetStrokeColor( layerColor );
4305 m_gal->SetLineWidth( (
float) lineWidth );
4308 constexpr int NUM_DASHES = 12;
4311 for(
int i = 0; i < NUM_DASHES; ++i )
4313 EDA_ANGLE startAngle = dashAngle * ( i * 2 );
4314 m_gal->DrawArc( aCenter, pmRadius, startAngle, dashAngle );
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
@ NORMAL
Inactive layers are shown normally (no high-contrast mode)
@ HIDDEN
Inactive layers are hidden.
@ DIMMED
Inactive layers are dimmed (old high-contrast mode)
@ RATSNEST
Net/netclass colors are shown on ratsnest lines only.
@ ALL
Net/netclass colors are shown on all net copper.
ZONE_DISPLAY_MODE
Determine how zones should be displayed.
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.
Generic cubic Bezier representation.
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
NETINFO_ITEM * GetNet() const
Return NETINFO_ITEM object for a given item.
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.
DRILL_SYMBOL_PROFILE & GetDrillSymbolProfile()
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 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 PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
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.
virtual void TransformShapeToPolySet(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, KIGFX::RENDER_SETTINGS *aRenderSettings=nullptr) const
Convert the item shape to a polyset.
const KIFONT::METRICS & GetFontMetrics() const
BOARD_ITEM_CONTAINER * GetParent() const
bool IsSideSpecific() const
virtual int BoardCopperLayerCount() const
Return the total number of copper layers for the board that this item resides on.
virtual bool IsOnCopperLayer() const
Information pertinent to a Pcbnew printed circuit board.
std::vector< const PCB_DRILL_MAP * > DrillMapsOnLayer(PCB_LAYER_ID aLayer) const
Every map on this layer.
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.
std::shared_ptr< const DRILL_SYMBOL_CACHE > DrillSymbolCache() const
Resolved drill symbols, by group and by owning item.
KIGFX::COLOR4D GetNetChainColor(const wxString &aChain) const
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
BOARD_DESIGN_SETTINGS & GetDesignSettings()
constexpr const Vec & GetPosition() const
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
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 const Vec GetCenter() 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
Grouping rules and symbol assignments, shared by reference so a chart and its map can never disagree ...
int GetSymbolWidth() const
int GetSymbolSize() 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
EDA_ANGLE GetAngle() const
static bool ShortenSegmentForEndings(VECTOR2I &aStart, VECTOR2I &aEnd, const LINE_ENDING &aStartEnding, const LINE_ENDING &aEndEnding, int aLineWidth)
Shorten a segment body for line endings.
int GetEllipseMinorRadius() const
const VECTOR2I & GetEllipseCenter() const
virtual VECTOR2I GetTopLeft() const
EDA_ANGLE GetEllipseEndAngle() const
int GetEllipseMajorRadius() const
int GetRectangleWidth() const
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
void GetEndingTangents(EDA_ANGLE &aStartTangent, EDA_ANGLE &aEndTangent, int aLineWidth=0) const
Compute outward-facing tangent angles at the start and end of the shape.
void CalcArcAngles(EDA_ANGLE &aStartAngle, EDA_ANGLE &aEndAngle) const
Calc arc start and end angles such that aStartAngle < aEndAngle.
EDA_ANGLE GetEllipseRotation() const
std::vector< SHAPE * > MakeEffectiveShapesForStroking(int aLineWidth=-1) const
Make a set of SHAPE objects to hand to STROKE_PARAMS::Stroke().
virtual VECTOR2I GetBotRight() const
bool GetShortenedBodyPolyPoints(const SHAPE_LINE_CHAIN &aOutline, int aOutlineIdx, std::vector< VECTOR2I > &aPoints, int aLineWidth) const
Copy an outline and apply line-ending body shortening when applicable.
const std::vector< SEG > & GetHatchLines() const
bool IsHatchedFill() const
bool GetLineEndingEndpoints(VECTOR2I &aStartPoint, VECTOR2I &aEndPoint) const
Return the source endpoints used to place line endings.
virtual int GetHatchLineWidth() 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
EDA_ANGLE GetEllipseStartAngle() const
const LINE_ENDING & GetStartEnding() const
std::optional< BEZIER< double > > ShortenedBezierCurve(int aLineWidth) const
Return the cubic Bezier curve shortened for line endings.
int GetRectangleHeight() const
bool ShortenArcForEndings(EDA_ANGLE &aStartAngle, EDA_ANGLE &aArcAngle, double aRadius, int aLineWidth) const
Shorten an arc body for line endings.
const LINE_ENDING & GetEndEnding() const
int GetCornerRadius() 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, std::optional< VECTOR2I > aMousePos=std::nullopt, wxString *aActiveUrl=nullptr) const
Draw a string.
virtual bool IsOutline() const
A color representation with 4 components: red, green, blue, alpha.
COLOR4D WithAlpha(double aAlpha) const
Return a color with the same color, but the given alpha.
static const COLOR4D CLEAR
void ToHSL(double &aOutHue, double &aOutSaturation, double &aOutLightness) const
Converts current color (stored in RGB) to HSL format.
COLOR4D & Darken(double aFactor)
Makes the color darker by a given factor.
COLOR4D Darkened(double aFactor) const
Return a color that is darker by a given factor, without modifying object.
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
COLOR4D Brightened(double aFactor) const
Return a color that is brighter by a given factor, without modifying object.
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
void FromHSL(double aInHue, double aInSaturation, double aInLightness)
Change currently used color to the one given by hue, saturation and lightness parameters.
static const COLOR4D BLACK
COLOR4D Mix(const COLOR4D &aColor, double aFactor) const
Return a color that is mixed with the input by a factor.
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...
void drawPostMachiningIndicator(const BOARD_ITEM *aItem, const VECTOR2D &aCenter, PCB_LAYER_ID aLayer)
Draw post-machining indicator (dashed circle) at the given center point.
virtual SHAPE_SEGMENT getPadHoleShape(const PAD *aPad) const
Return hole shape for a pad (internal units).
void drawChartSymbols(const PCB_DRILL_CHART *aChart, int aLayer)
PCB_PAINTER(GAL *aGal, FRAME_T aFrameType)
int getLineThickness(int aActualThickness) const
Get the thickness to draw for a line (e.g.
void drawDrillSymbol(const BOARD_ITEM *aItem, int aLayer)
virtual bool HasUniformColor(const VIEW_ITEM *aItem, int aLayer) const override
Return false when drawing the item on the given layer emits more than one colour, so a cached group o...
void renderNetNameForSegment(const SHAPE_SEGMENT &aSeg, const COLOR4D &aColor, const wxString &aNetName) const
bool zoneOutlineOnly(const ZONE *aZone) const
True when a zone's only visual is its outline, as for a rule area or outline-only display.
PCB_VIEWERS_SETTINGS_BASE * viewer_settings()
void draw(const PCB_TRACK *aTrack, int aLayer)
void drawDrillMarks(const PCB_DRILL_MAP *aMap, const std::vector< DRILL_SYMBOL_ENTRY > &aEntries, const COLOR4D &aColor, const KIFONT::METRICS &aFontMetrics)
One hole's marks for one map.
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)
void drawBackdrillIndicator(const BOARD_ITEM *aItem, const VECTOR2D &aCenter, int aDrillSize, PCB_LAYER_ID aStartLayer, PCB_LAYER_ID aEndLayer)
Draw backdrill indicator (two semi-circles) at the given center point.
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
Overrides for specific net colors, stored as netcodes for the ratsnest to access easily.
NET_COLOR_MODE m_netColorMode
How to display nets and netclasses with color overrides.
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 IsDimExempt(const VIEW_ITEM *aItem) const override
Return true for an item that keeps its colour on a layer the canvas fades, such as a selected item in...
bool m_ForceShowFieldsWhenFPSelected
bool GetShowPageLimits() const override
std::bitset< MAX_LAYERS_FOR_VIEW > m_canvasFadedLayers
Layers the canvas fades for high contrast, see SetCanvasFadedLayers()
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
bool GetLayerDim(int aLayer, COLOR4D &aToward, double &aKeep) const override
Get how the canvas fades a whole layer, see GAL::SetSceneLayerDim().
bool IsCanvasFadedLayer(int aLayer) const
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
int GetShortenDepth(int aLineWidth) const
Return how far the line should be shortened at this ending.
void Draw(KIGFX::GAL &aGal, const VECTOR2I &aPoint, const EDA_ANGLE &aTangent, double aLineWidth, const KIGFX::COLOR4D &aColor) const
LINE_ENDING_STYLE GetStyle() const
LSET is a set of PCB_LAYER_IDs.
static const LSET & AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
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 & AllLayersMask()
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
Handle the data for a net.
const wxString & GetNetChain() const
PAD * GetTerminalPad(int aIndex) 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.
static constexpr PCB_LAYER_ID ALL_LAYERS
! The layer identifier to use for the single defintion on normal padstacks
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.
int GetRoundRectCornerRadius(PCB_LAYER_ID aLayer) const
bool FlashLayer(int aLayer, bool aOnlyCheckIfPermitted=false) const
Check to see whether the pad should be flashed on the specific layer.
std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const override
Return a SHAPE_SEGMENT object representing the pad's hole.
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
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc=ERROR_INSIDE, bool aIgnoreLineWidth=false) const override
Convert the pad shape to a closed polygon.
VECTOR2I GetPosition() const override
PCB_LAYER_ID GetTertiaryDrillEndLayer() const
VECTOR2I GetOffset(PCB_LAYER_ID aLayer) const
VECTOR2I GetDrillSize() const
PCB_LAYER_ID GetTertiaryDrillStartLayer() const
bool IsNoConnectPad() const
PAD_SHAPE GetShape(PCB_LAYER_ID aLayer) const
int GetSolderMaskExpansion(PCB_LAYER_ID aLayer) const
VECTOR2I GetSize(PCB_LAYER_ID aLayer) const
const VECTOR2I & GetSecondaryDrillSize() const
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
PAD_DRILL_SHAPE GetDrillShape() const
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
int GetPostMachiningKnockout(PCB_LAYER_ID aLayer) const
Get the knockout diameter for a layer affected by post-machining.
VECTOR2I GetSolderPasteMargin(PCB_LAYER_ID aLayer) const
Usually < 0 (mask shape smaller than pad)because the margin can be dependent on the pad size,...
PCB_LAYER_ID GetSecondaryDrillStartLayer() const
const VECTOR2I & GetTertiaryDrillSize() const
VECTOR2I ShapePos(PCB_LAYER_ID aLayer) const
PCB_LAYER_ID GetSecondaryDrillEndLayer() const
DISPLAY_OPTIONS m_Display
bool IsDegenerated(int aThreshold=5) const
virtual double GetLength() const override
Return the length of the arc track.
EDA_ANGLE GetArcAngleStart() const
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
const VECTOR2I GetFocusPosition() const override
Similar to GetPosition() but allows items to return their visual center rather than their anchor.
EDA_ANGLE GetAngle() const
const VECTOR2I & GetMid() const
void GetBoundingHull(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc=ERROR_INSIDE) const
Add two rectangular polygons separately bounding the barcode's symbol and the barcode's text.
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 drill chart placed on the board, kept in step with the holes.
const std::map< int, int > & RowShapes() const
Curated shape index for each generated row, by table row.
int GetSymbolColumn() const
Table column the symbol is drawn in, or -1 when the chart has no symbol column.
Turns on drill symbols at the holes, for one layer.
int GetSymbolSize() const
bool GetGuideCross() const
bool GetOutlineSlots() const
const DRILL_SPAN & GetSpan() const
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
std::shared_ptr< const SHAPE_POLY_SET > GetBoardOutlines() const
The board outline displaced by this map's offset.
const VECTOR2I & GetOffset() const
EDA_ANGLE GetPhiExtent() const
VECTOR2I GetExtent() const
VECTOR2I GetPosition() const override
EDA_ANGLE GetOrientation() const
int GetRadiusExtent() const
PCB_GRID_TYPE GetGridItemType() const
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 > GetErrorLegendShapes() 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
bool IsProxyItem() const override
STROKE_PARAMS GetStroke() const override
void UpdateHatching() const override
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
PCB_TABLECELL * GetCell(int aRow, int aCol) const
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
Tests whether the border is disabled, as configured by the stroke.
void TransformTextToPolySet(SHAPE_POLY_SET &aBuffer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc) const
Convert the text to a polygonSet describing the actual character strokes (one per segment).
VECTOR2I GetTextSize() const override
VECTOR2I GetDrawPos() const override
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
PCB_SHAPE GetPolygonalBoxShape() const
wxString GetShownText(RESOLUTION_CONTEXT aContext, int aDepth=0) const override
Return the string actually shown after processing of the base text.
std::vector< VECTOR2I > GetCorners() const override
Return 4 corners for a rectangle or rotated rectangle (stored as a poly).
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.
const SHAPE_POLY_SET & GetKnockoutCache(const KIFONT::FONT *aFont, const wxString &forResolvedText, int aMaxError) const
VECTOR2I GetTextPos() const override
int GetTextThickness() const override
EDA_ANGLE GetDrawRotation() const override
wxString GetShownText(RESOLUTION_CONTEXT aContext, int aDepth=0) const override
Return the string actually shown after processing of the base text.
VECTOR2I GetTextSize() const override
int GetSolderMaskExpansion() const
const VECTOR2I & GetStart() const
const VECTOR2I & GetEnd() const
virtual int GetWidth() const
PCB_LAYER_ID BottomLayer() const
PCB_LAYER_ID GetTertiaryDrillEndLayer() const
std::optional< int > GetTertiaryDrillSize() const
bool FlashLayer(int aLayer) const
Check to see whether the via should have a pad on the specific layer.
std::optional< int > GetSecondaryDrillSize() const
PCB_LAYER_ID GetSecondaryDrillEndLayer() const
int GetWidth() const override
PCB_LAYER_ID GetTertiaryDrillStartLayer() const
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
PCB_LAYER_ID GetSecondaryDrillStartLayer() 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...
EDA_ANGLE GetOrientation() const
VECTOR2I GetPosition() const
double GetOpacity() 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.
int Length() const
Return the length (this).
static SEG::ecoord Square(int a)
ecoord SquaredLength() const
T * GetAppSettings(const char *aFilename)
Return a handle to the a given settings by type.
VECTOR2I GetEnd() const override
const SHAPE_LINE_CHAIN ConvertToPolyline(int aMaxError=DefaultAccuracyForPCB(), int *aActualError=nullptr) const
Construct a SHAPE_LINE_CHAIN of segments from a given arc.
VECTOR2I GetStart() const override
const VECTOR2I & GetCenter() const
SHAPE_LINE_CHAIN ConvertToPolyline(int aMaxError) const
Build a polyline approximation of the ellipse or arc.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
bool IsClosed() const override
void SetClosed(bool aClosed)
Mark the line chain as closed (i.e.
int PointCount() const
Return the number of points (vertices) in this line chain.
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the 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 aSimplify=false, const TASK_SUBMITTER &aSubmitter={}, bool aBuildIndexes=false)
Build a polygon triangulation, needed to draw a polygon on OpenGL and in some other calculations.
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.
void Fracture(bool aSimplify=true)
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
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
constexpr extended_type SquaredEuclideanNorm() const
Compute the squared euclidean norm of the vector, which is defined as (x ** 2 + y ** 2).
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.
bool GetIsRuleArea() const
Accessors to parameters used in Rule Area zones:
std::shared_ptr< SHAPE_POLY_SET > GetFilledPolysList(PCB_LAYER_ID aLayer) const
SHAPE_POLY_SET * Outline()
SHAPE_POLY_SET GetBoardOutline() const
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
bool IsConflicting() const
For rule areas which exclude footprints (and therefore participate in courtyard conflicts during move...
std::vector< SEG > GetHatchLines() 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.
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
#define MAX_LAYERS_FOR_VIEW
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
static constexpr EDA_ANGLE ANGLE_360
#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 IsDrillSymbolLayer(int aLayer)
bool IsPcbLayer(int aLayer)
Test whether a layer is a valid layer for Pcbnew.
bool IsPadCopperLayer(int aLayer)
#define BOARD_LAYER_FOR_DRILL_SYMBOL(galLayer)
bool IsPointsLayer(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_HIGHLIGHTED
Color for highlighted DRC markers.
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored).
@ LAYER_DRC_WARNING
Layer for DRC markers with RPT_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_CONSTRAINT_SHADOW
Shadow layer for items bound to a constraint.
@ 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_SUBGRIDS
Routing/placement subgrids (PCB_GRID_ITEM) visibility and color.
@ LAYER_DRC_ERROR
Layer for DRC markers with RPT_SEVERITY_ERROR.
bool IsViaCopperLayer(int aLayer)
#define DRILL_SYMBOL_LAYER_FOR(boardLayer)
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
unsigned CuratedShape(int aIndex)
Pattern index for the nth curated mark.
std::vector< MARKER_PART > BuildMarker(const VECTOR2I &aPosition, int aRadius, unsigned aShapeId)
Decompose one mark, in the order the parts must be drawn.
The Cairo implementation of the graphics abstraction layer.
bool ZoneOutlineDrawnOnLayer(bool aOutlineOnly, int aLayer)
Decide which GAL draw pass paints a zone's outline.
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.
PAD_SHAPE
The set of pad shapes, used with PAD::{Set,Get}Shape()
BARCODE class definition.
Class to handle a set of BOARD_ITEMs.
static bool viaHoleShowsLayerPair(const PCB_VIA *aVia)
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
One drawable mark, with the geometry the renderer needs to place it.
bool m_DisplayPcbTrackFill
bool m_DisplayGraphicsFill
const SHAPE_LINE_CHAIN chain
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.
constexpr KICAD_T BaseType(const KICAD_T aType)
Return the underlying type of the given type.
@ 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_DRILL_MAP_T
class PCB_DRILL_MAP, drill symbols drawn at the holes
@ 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_GRID_ITEM_T
a subgrid placed on a board
@ 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
@ PCB_DRILL_CHART_T
class PCB_DRILL_CHART, a live drill chart derived from PCB_TABLE
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D