118 draw( item, aLayer,
false );
127#ifdef CONNECTIVITY_DEBUG
129 auto sch_item =
dynamic_cast<const SCH_ITEM*
>( aItem );
130 auto conn = sch_item ? sch_item->
Connection( *g_CurrentSheet ) :
nullptr;
135 auto label = conn->Name(
true );
140 m_canvas->SetLineWidth( Mils2ui( 2 ) );
141 m_canvas->SetGlyphSize(
VECTOR2D( Mils2ui( 20 ), Mils2ui( 20 ) ) );
142 m_canvas->StrokeText( *m_canvas, conn->Name(
true ), pos, 0.0, 0 );
150 switch( aItem->
Type() )
156 drawBoundingBox =
false;
157 draw(
static_cast<const SCH_PIN*
>( aItem ), aLayer, aDimmed );
169 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
172 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
175 draw(
static_cast<const SCH_TEXT*
>( aItem ), aLayer, aDimmed );
181 draw(
static_cast<const SCH_TABLE*
>( aItem ), aLayer, aDimmed );
184 draw(
static_cast<const SCH_LABEL*
>( aItem ), aLayer, aDimmed );
190 draw(
static_cast<const SCH_FIELD*
>( aItem ), aLayer, aDimmed );
226 if( drawBoundingBox )
242 box =
static_cast<const SCH_SYMBOL*
>( aItem )->GetBodyBoundingBox();
244 m_gal->SetIsFill(
false );
245 m_gal->SetIsStroke(
true );
247 :
COLOR4D( 0.2, 0.2, 0.2, 1 ) );
299 return (
float) std::fabs( matrix.
GetScale().
x * milsWidth ) +
schIUScale.MilsToIU( milsWidth );
304 bool aDimmed,
bool aIgnoreNets )
const
306 auto isBackgroundLayer =
323 color =
static_cast<const SCH_LINE*
>( aItem )->GetLineColor();
337 if( isBackgroundLayer( aLayer ) )
346 if( isBackgroundLayer( aLayer ) )
369 wxFAIL_MSG( wxT(
"Unsupported fill type" ) );
378 else if( isSymbolChild )
389 else if( aItem->
IsType( { SCH_LABEL_LOCATE_ANY_T } ) )
395 else if( aIgnoreNets )
408 if( isBackgroundLayer( aLayer ) )
413 else if(
const EDA_TEXT* otherTextItem =
dynamic_cast<const EDA_TEXT*
>( aItem ) )
416 color = otherTextItem->GetTextColor();
424 if( isBackgroundLayer( aLayer) )
449 if( aDrawingShadows )
456 else if( isBackgroundLayer( aLayer ) )
461 else if( aItem->
IsSelected() && aDrawingShadows )
465 else if( aItem->
IsSelected() && isBackgroundLayer( aLayer ) )
478 if( aDimmed && !( aItem->
IsSelected() && aDrawingShadows ) )
493 bool aDrawingWireColorHighlights )
const
506 if( aDrawingWireColorHighlights )
508 float colorHighlightWidth =
schIUScale.MilsToIU( 15.0 );
517 width += colorHighlightWidth;
528 switch( aItem->
Type() )
531 pen =
static_cast<const SCH_FIELD*
>( aItem )->GetEffectiveTextPenWidth( pen );
535 pen =
static_cast<const SCH_TEXT*
>( aItem )->GetEffectiveTextPenWidth( pen );
543 pen =
static_cast<const SCH_LABEL_BASE*
>( aItem )->GetEffectiveTextPenWidth( pen );
548 pen =
static_cast<const SCH_TEXTBOX*
>( aItem )->GetEffectiveTextPenWidth( pen );
562 int screenTextSize =
std::abs( (
int)
m_gal->GetScreenWorldMatrix().GetScale().y * 7 );
565 return KiROUND( ( docTextSize + screenTextSize * 2 ) / 3.0 );
627 font->
Draw( &aGal, aText, aPosition, aAttrs, aFontMetrics );
669 callback_gal.SetIsStroke(
true );
671 font->
Draw( &callback_gal, aText, aPosition, attrs, aFontMetrics );
716 m_gal->DrawLine( a, b );
717 m_gal->DrawLine( b, c );
722 int aBodyStyle,
bool aDimmed )
730 std::unique_ptr< LIB_SYMBOL > tmpSymbol;
735 tmpSymbol = aSymbol->
Flatten();
736 drawnSymbol = tmpSymbol.get();
742 [](
const SCH_ITEM& item,
int layer )
752 if( !childOnLayer( item, aLayer ) )
761 draw( &item, aLayer, aDimmed );
788 bool aDrawingShadows,
bool aBrightened )
800 m_gal->SetIsFill(
false );
801 m_gal->SetIsStroke(
true );
802 m_gal->SetLineWidth( lineWidth );
811 const COLOR4D& aColor,
bool aDrawingShadows,
814 double lineWidth = aSize / 10.0;
816 if( aDrawingShadows )
819 std::vector<SCH_SHAPE> shapeList;
822 m_gal->SetLineWidth( lineWidth );
823 m_gal->SetIsStroke(
true );
824 m_gal->SetStrokeColor( aColor );
825 m_gal->SetFillColor( aColor );
827 for(
const SCH_SHAPE& shape : shapeList )
833 m_gal->DrawCurve( shape.GetStart(), shape.GetBezierC1(), shape.GetBezierC2(), shape.GetEnd() );
835 m_gal->DrawCircle( shape.getCenter(), shape.GetRadius() );
844 bool aRotate,
int aExtraLineWidth,
const COLOR4D& aColor )
872 const double lineYOffset = aSize / 4;
873 const double arrowHead = aSize / 8;
889 topLineREnd -
VECTOR2D{ aSize * 0.7, 0 } );
892 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
893 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
897 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
898 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
907 aGal.
DrawArc( topLineREnd -
VECTOR2D{ aSize - lineYOffset * 2, -lineYOffset },
928 if(
m_schSettings.IsPrinting() && ( drawingShadows || drawingDangling ) )
960 if( drawingDangling )
979 int textOffset =
KiROUND( textSize * 0.22 );
986 mid.
x +=
KiROUND( textOffset * 1.2 );
991 mid.
y -=
KiROUND( textOffset * 1.2 );
1012 m_gal->SetIsStroke(
true );
1013 m_gal->SetIsFill(
false );
1016 m_gal->SetFontBold(
false );
1017 m_gal->SetFontUnderlined(
false );
1018 m_gal->SetFontItalic(
false );
1021 const int diam =
radius*2;
1026 m_gal->DrawLine( p0, pos );
1039 m_gal->DrawLine( p0, pos );
1044 m_gal->DrawLine( p0 + dir * ( diam ), pos );
1048 pc = p0 - dir * clock_size ;
1052 p0 +
VECTOR2D( -dir.
y, dir.
x) * clock_size );
1055 m_gal->DrawLine( p0 + dir * ( diam ), pos );
1060 pc = p0 - dir * clock_size ;
1064 p0 +
VECTOR2D( -dir.
y, dir.
x) * clock_size );
1079 m_gal->DrawLine( p0, pos );
1083 m_gal->DrawLine( p0, pos );
1088 p0 +
VECTOR2D( -dir.
x * clock_size, 0 ),
1094 p0 +
VECTOR2D( 0, -dir.
y * clock_size ),
1100 m_gal->DrawLine( p0, pos );
1117 m_gal->DrawLine( p0, pos );
1126 m_gal->DrawLine( p0, pos );
1136 if( drawingShadows && !
eeconfig()->m_Selection.draw_selected_children )
1146 float shadowWidth = 0.0f;
1148 if( drawingShadows )
1158 const auto textRendersAsBitmap =
1172 const auto drawBrace =
1177 VECTOR2D mid = ( aTop + aBottom ) / 2.0;
1195 double braceOffset = aLeftBrace ? -aBraceWidth : aBraceWidth;
1196 p2.
y += braceOffset / 2;
1197 p3.
y += braceOffset;
1198 p4.
y += braceOffset / 2;
1203 double braceOffset = aLeftBrace ? -aBraceWidth : aBraceWidth;
1204 p2.
x += braceOffset / 2;
1205 p3.
x += braceOffset;
1206 p4.
x += braceOffset / 2;
1216 const auto drawBracesAroundText =
1220 if( aLines.size() <= 1 )
1224 int braceWidth = aAttrs.m_Size.x / 3;
1227 int maxLineWidth = 0;
1232 for(
const wxString& line : aLines )
1234 wxString trimmedLine = line;
1235 trimmedLine.Trim(
true ).Trim(
false );
1237 aAttrs.m_StrokeWidth,
false,
false,
1239 maxLineWidth = std::max( maxLineWidth, lineExtents.
x );
1247 int textHeight = aAttrs.m_Size.y;
1248 int extraHeight = textHeight / 3;
1253 braceEnd.
x += ( aLines.size() - 1 ) * aLineSpacing;
1256 braceStart.
x -= 2 * extraHeight;
1259 int braceSpacing = maxLineWidth / 2 + braceWidth;
1261 VECTOR2D topBraceStart = braceStart;
1262 topBraceStart.
y -= braceSpacing;
1265 topBraceEnd.
y -= braceSpacing;
1267 drawBrace( aGal, topBraceStart, topBraceEnd, braceWidth,
true, aAttrs );
1269 VECTOR2D bottomBraceStart = braceStart;
1270 bottomBraceStart.
y += braceSpacing;
1272 VECTOR2D bottomBraceEnd = braceEnd;
1273 bottomBraceEnd.
y += braceSpacing;
1275 drawBrace( aGal, bottomBraceStart, bottomBraceEnd, braceWidth,
false, aAttrs );
1280 braceEnd.
y += ( aLines.size() - 1 ) * aLineSpacing;
1283 braceStart.
y -= 2 * extraHeight;
1286 int braceSpacing = maxLineWidth / 2 + braceWidth;
1290 leftTop.
x -= braceSpacing;
1293 leftBottom.
x -= braceSpacing;
1295 drawBrace( aGal, leftTop, leftBottom, braceWidth,
true, aAttrs );
1299 rightTop.
x += braceSpacing;
1302 rightBottom.
x += braceSpacing;
1304 drawBrace( aGal, rightTop, rightBottom, braceWidth,
false, aAttrs );
1308 const auto drawBracesAroundTextBitmap =
1313 if( aLines.size() <= 1 )
1316 int braceWidth = aAttrs.m_Size.x / 4;
1319 int maxLineWidth = aAttrs.m_Size.x * 4;
1325 int textHalfHeight = aAttrs.m_Size.y / 2;
1330 braceEnd.
x += ( aLines.size() - 1 ) * aLineSpacing;
1333 leftStart.
y -= maxLineWidth / 2 + braceWidth / 2;
1336 leftEnd.
y -= maxLineWidth / 2 + braceWidth / 2;
1338 drawBrace( aGal, leftStart, leftEnd, braceWidth,
true, aAttrs );
1341 rightStart.
y += maxLineWidth / 2 + braceWidth / 2;
1344 rightEnd.
y += maxLineWidth / 2 + braceWidth / 2;
1346 drawBrace( aGal, rightStart, rightEnd, braceWidth,
false, aAttrs );
1351 braceEnd.
y += ( aLines.size() - 1 ) * aLineSpacing;
1354 braceTop.
y -= textHalfHeight;
1357 braceBottom.
y += textHalfHeight;
1360 leftTop.
x -= maxLineWidth / 2 + braceWidth / 2;
1363 leftBottom.
x -= maxLineWidth / 2 + braceWidth / 2;
1365 drawBrace( aGal, leftTop, leftBottom, braceWidth,
true, aAttrs );
1368 rightTop.
x += maxLineWidth / 2 + braceWidth / 2;
1370 VECTOR2D rightBottom = braceBottom;
1371 rightBottom.
x += maxLineWidth / 2 + braceWidth / 2;
1373 drawBrace( aGal, rightTop, rightBottom, braceWidth,
false, aAttrs );
1378 const auto drawMultiLineText =
1383 if( aText.StartsWith(
"[" ) && aText.EndsWith(
"]" ) && aText.Contains(
"\n" ) )
1386 wxString content = aText.Mid( 1, aText.Length() - 2 );
1387 wxArrayString lines;
1390 if( lines.size() > 1 )
1393 int lineSpacing =
KiROUND( aAttrs.m_Size.y * 1.3 );
1404 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1405 startPos.
x -= totalWidth;
1409 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1410 startPos.
x -= totalWidth / 2;
1414 for(
size_t i = 0; i < lines.size(); i++ )
1417 linePos.
x += i * lineSpacing;
1419 wxString line = lines[i];
1420 line.Trim(
true ).Trim(
false );
1422 strokeText( aGal, line, linePos, aAttrs, aFontMetrics );
1431 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1432 startPos.
y -= totalHeight;
1436 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1437 startPos.
y -= totalHeight / 2;
1441 for(
size_t i = 0; i < lines.size(); i++ )
1444 linePos.
y += i * lineSpacing;
1446 wxString line = lines[i];
1447 line.Trim(
true ).Trim(
false );
1449 strokeText( aGal, line, linePos, aAttrs, aFontMetrics );
1454 drawBracesAroundText( aGal, lines, startPos, lineSpacing, aAttrs );
1460 strokeText( aGal, aText, aPosition, aAttrs, aFontMetrics );
1463 const auto drawMultiLineTextBox =
1468 if( aText.StartsWith(
"[" ) && aText.EndsWith(
"]" ) && aText.Contains(
"\n" ) )
1470 wxString content = aText.Mid( 1, aText.Length() - 2 );
1471 wxArrayString lines;
1474 if( lines.size() > 1 )
1476 int lineSpacing =
KiROUND( aAttrs.m_Size.y * 1.3 );
1484 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1485 startPos.
x -= totalWidth;
1489 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1490 startPos.
x -= totalWidth / 2;
1493 for(
size_t i = 0; i < lines.size(); i++ )
1496 linePos.
x += i * lineSpacing;
1498 wxString line = lines[i];
1499 line.Trim(
true ).Trim(
false );
1501 boxText( aGal, line, linePos, aAttrs, aFontMetrics );
1509 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1510 startPos.
y -= totalHeight;
1514 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1515 startPos.
y -= totalHeight / 2;
1518 for(
size_t i = 0; i < lines.size(); i++ )
1521 linePos.
y += i * lineSpacing;
1523 wxString line = lines[i];
1524 line.Trim(
true ).Trim(
false );
1526 boxText( aGal, line, linePos, aAttrs, aFontMetrics );
1530 drawBracesAroundText( aGal, lines, startPos, lineSpacing, aAttrs );
1535 boxText( aGal, aText, aPosition, aAttrs, aFontMetrics );
1538 const auto drawMultiLineBitmapText =
1543 if( aText.StartsWith(
"[" ) && aText.EndsWith(
"]" ) && aText.Contains(
"\n" ) )
1545 wxString content = aText.Mid( 1, aText.Length() - 2 );
1546 wxArrayString lines;
1549 if( lines.size() > 1 )
1551 int lineSpacing =
KiROUND( aAttrs.m_Size.y * 1.3 );
1559 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1560 startPos.
x -= totalWidth;
1564 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1565 startPos.
x -= totalWidth / 2;
1568 for(
size_t i = 0; i < lines.size(); i++ )
1571 linePos.
x += i * lineSpacing;
1573 wxString line = lines[i];
1574 line.Trim(
true ).Trim(
false );
1584 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1585 startPos.
y -= totalHeight;
1589 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1590 startPos.
y -= totalHeight / 2;
1593 for(
size_t i = 0; i < lines.size(); i++ )
1596 linePos.
y += i * lineSpacing;
1598 wxString line = lines[i];
1599 line.Trim(
true ).Trim(
false );
1606 drawBracesAroundTextBitmap( aGal, lines, startPos, lineSpacing, aAttrs );
1611 bitmapText( aGal, aText, aPosition, aAttrs );
1614 const auto drawTextInfo =
1618 const bool renderTextAsBitmap = textRendersAsBitmap( *
m_gal, aTextInfo.
m_TextSize );
1621 m_gal->SetStrokeColor( aColor );
1622 m_gal->SetFillColor( aColor );
1632 if( drawingShadows )
1647 else if(
nonCached( aPin ) && renderTextAsBitmap )
1660 const auto getColorForLayer =
1661 [&](
int aDrawnLayer )
1666 return getRenderColor( aPin, aDrawnLayer, drawingShadows, aDimmed );
1671 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> numInfo = cache.
GetPinNumberInfo( shadowWidth ) )
1673 drawTextInfo( *numInfo, getColorForLayer(
LAYER_PINNUM ) );
1676 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> nameInfo = cache.
GetPinNameInfo( shadowWidth ) )
1678 drawTextInfo( *nameInfo, getColorForLayer(
LAYER_PINNAM ) );
1690 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> elecTypeInfo =
1713 m_gal->SetIsStroke(
true );
1723 bool aDangling,
bool aDrawingShadows,
bool aBrightened )
1739 m_gal->SetIsStroke(
true );
1740 m_gal->SetIsFill(
false );
1750 bool highlightNetclassColors =
false;
1768 if( highlightNetclassColors && aLayer == aJct->
GetLayer() )
1775 if( junctionSize > 1 )
1777 m_gal->SetIsStroke( drawingShadows );
1780 m_gal->SetIsFill( !drawingShadows );
1792 bool drawingBusses = aLayer ==
LAYER_BUS;
1796 bool highlightNetclassColors =
false;
1797 double highlightAlpha = 0.6;
1799 double hopOverScale = 0.0;
1810 if( !highlightNetclassColors && drawingNetColorHighlights )
1813 if( drawingNetColorHighlights && !( aLine->
IsWire() || aLine->
IsBus() ) )
1816 if(
m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
1827 if( aLine->
IsNew() && drawingDangling )
1831 float width =
getLineWidth( aLine, drawingShadows, drawingNetColorHighlights );
1834 if( highlightNetclassColors )
1839 else if( drawingBusses )
1843 if( drawingNetColorHighlights )
1855 if( ( drawingDangling || drawingShadows ) && !aLine->
IsNew() )
1884 if( drawingDangling )
1891 int textOffset =
KiROUND( textSize * 0.22 );
1896 pos.
y -= textOffset;
1902 pos.
x +=
KiROUND( textOffset * 1.2 );
1918 m_gal->SetIsStroke(
true );
1919 m_gal->SetIsFill(
false );
1921 m_gal->SetLineWidth( width );
1923 std::vector<VECTOR3I> curr_wire_shape;
1925 if( aLine->
IsWire() && hopOverScale > 0.0 )
1927 double lineWidth =
getLineWidth( aLine,
false, drawingNetColorHighlights );
1928 double arcRadius = lineWidth * hopOverScale;
1937 for(
size_t ii = 1; ii < curr_wire_shape.size(); ii++ )
1939 VECTOR2I start( curr_wire_shape[ii-1].x, curr_wire_shape[ii-1].y );
1941 if( curr_wire_shape[ii-1].z == 0 )
1944 VECTOR2I end( curr_wire_shape[ii].x, curr_wire_shape[ii].y );
1951 VECTOR2I arc_middle( curr_wire_shape[ii].x, curr_wire_shape[ii].y );
1953 VECTOR2I arc_end( curr_wire_shape[ii].x, curr_wire_shape[ii].y );
1965 EDA_ANGLE angle1 = midAngle - startAngle;
1970 m_gal->DrawArc(
center, ( dstart -
center ).EuclideanNorm(), startAngle, angle );
1998 switch( shape->GetShape() )
2002 VECTOR2D start = shape->GetStart();
2011 EDA_ANGLE angle1 = midAngle - startAngle;
2016 m_gal->DrawArc(
center, ( start -
center ).EuclideanNorm(), startAngle, angle );
2021 m_gal->DrawCircle( shape->GetPosition(), shape->GetRadius() );
2025 if( shape->GetCornerRadius() > 0 )
2030 shape->GetRectangleWidth(),
2031 shape->GetRectangleHeight() ),
2032 shape->GetCornerRadius(),
true );
2035 m_gal->DrawPolygon( poly );
2039 m_gal->DrawRectangle( shape->GetPosition(), shape->GetEnd() );
2045 const std::vector<SHAPE*> polySegments = shape->MakeEffectiveShapes(
true );
2047 if( !polySegments.empty() )
2049 std::deque<VECTOR2D> pts;
2051 for(
SHAPE* polySegment : polySegments )
2052 pts.push_back(
static_cast<SHAPE_SEGMENT*
>( polySegment )->GetSeg().
A );
2056 for(
SHAPE* polySegment : polySegments )
2059 m_gal->DrawPolygon( pts );
2066 m_gal->DrawCurve( shape->GetStart(), shape->GetBezierC1(),
2067 shape->GetBezierC2(), shape->GetEnd() );
2078 if(
eeconfig()->m_Selection.fill_shapes )
2085 m_gal->SetIsFill(
true );
2091 m_gal->SetIsFill(
false );
2096 m_gal->SetIsStroke(
true );
2100 drawShape( aShape );
2117 m_gal->SetIsFill(
true );
2118 m_gal->SetIsStroke(
false );
2128 m_gal->SetIsFill(
true );
2129 m_gal->SetIsStroke(
false );
2132 drawShape( aShape );
2137 wxFAIL_MSG( wxT(
"Unsupported fill type" ) );
2146 m_gal->SetIsFill(
true );
2147 m_gal->SetIsStroke(
false );
2150 drawShape( aShape );
2153 float lineWidth =
getLineWidth( aShape, drawingShadows );
2157 m_gal->SetIsFill(
false );
2158 m_gal->SetIsStroke(
true );
2159 m_gal->SetLineWidth( lineWidth );
2164 drawShape( aShape );
2170 for(
SHAPE* shape : shapes )
2177 m_gal->DrawLine( a+1, b );
2179 m_gal->DrawLine( a, b );
2183 for(
SHAPE* shape : shapes )
2207 switch( aText->
Type() )
2228 if( conn && conn->
IsBus() )
2257 int adjust =
KiROUND( sizeDiff * 0.35 );
2258 VECTOR2I adjust_offset( 0, adjust );
2261 text_offset += adjust_offset;
2264 if( drawingShadows && font->
IsOutline() )
2269 m_gal->SetIsStroke(
false );
2270 m_gal->SetIsFill(
true );
2282 double shadowOffset = 0.0;
2284 if( drawingShadows )
2289 const double adjust = 1.2f;
2290 shadowOffset = shadowWidth/2.0f * adjust;
2304 pos.
y = bBox.
GetTop() - shadowOffset;
2307 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
2316 pos.
x = bBox.
GetLeft() - shadowOffset;
2325 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
2336 else if( drawingShadows )
2338 m_gal->SetIsFill(
false );
2339 m_gal->SetIsStroke(
true );
2349 text_offset.
x -= fudge;
2351 text_offset.
y -= fudge;
2353 text_offset.
x += fudge;
2355 text_offset.
y += fudge;
2370 && !shownText.Contains( wxT(
"\n" ) ) )
2377 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2385 m_gal->DrawGlyphs( *cache );
2402 switch( aText->
Type() )
2410 showAnchor = !
static_cast<const SCH_LABEL*
>( aText )->IsDangling();
2455 float borderWidth =
getLineWidth( aTextBox, drawingShadows );
2474 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2482 m_gal->DrawGlyphs( *cache );
2499 m_gal->SetIsFill(
true );
2500 m_gal->SetIsStroke(
false );
2501 m_gal->SetLineWidth( borderWidth );
2512 m_gal->SetIsFill(
true );
2513 m_gal->SetIsStroke(
false );
2514 m_gal->SetLineWidth( borderWidth );
2535 if( transparency > 0.0 )
2536 borderColor = borderColor.
WithAlpha( borderColor.
a * ( 1.0 - transparency ) );
2540 borderColor = borderColor.
Mix( bg, 0.5f );
2544 m_gal->SetIsFill(
false );
2545 m_gal->SetIsStroke(
true );
2546 m_gal->SetStrokeColor( borderColor );
2547 m_gal->SetLineWidth( borderWidth );
2557 for(
SHAPE* shape : shapes )
2565 m_gal->DrawLine( a+1, b );
2567 m_gal->DrawLine( a, b );
2571 for(
SHAPE* shape : shapes )
2585 draw( cell, aLayer, aDimmed );
2597 if( lineWidth == 0 )
2606 m_gal->SetIsFill(
false );
2607 m_gal->SetIsStroke(
true );
2609 m_gal->SetLineWidth( (
float) lineWidth );
2613 m_gal->DrawLine( ptA, ptB );
2623 m_gal->DrawLine( a+1, b );
2625 m_gal->DrawLine( a, b );
2635 std::function<bool( wxString* )> symbolResolver =
2636 [&]( wxString* token ) ->
bool
2652 std::optional<SCH_SHEET_PATH> optSheetPath;
2658 "SCH_PAINTER::draw symbol %s: Current sheet path='%s', size=%zu, empty=%d",
2660 optSheetPath->Path().AsString(),
2661 optSheetPath->size(),
2662 optSheetPath->empty() ? 1 : 0 );
2665 bool DNP = aSymbol->
GetDNP(
nullptr );
2671 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2674 draw( &field, aLayer, DNP );
2692 std::vector<SCH_PIN*> originalPins = originalSymbol->
GetGraphicalPins( unit, bodyStyle );
2696 std::vector<SCH_PIN*> tempPins = tempSymbol.
GetGraphicalPins( unit, bodyStyle );
2704 tempItem.SetFlags( aSymbol->
GetFlags() );
2724 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2727 SCH_PIN* tempPin = tempPins[ i ];
2747 for(
unsigned i = 0; i < tempPins.size(); ++i )
2750 SCH_PIN* tempPin = tempPins[ i ];
2767 std::max( bbox.
GetY() - pins.
GetY(),
2771 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2772 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2779 m_gal->AdvanceDepth();
2780 m_gal->SetIsStroke(
true );
2781 m_gal->SetIsFill(
true );
2782 m_gal->SetStrokeColor( marker_color );
2783 m_gal->SetFillColor( marker_color );
2785 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2786 std::swap( pt1.
x, pt2.
x );
2787 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2799 m_gal->AdvanceDepth();
2800 m_gal->SetIsStroke(
true );
2801 m_gal->SetIsFill(
true );
2802 m_gal->SetStrokeColor( marker_color );
2803 m_gal->SetFillColor( marker_color );
2810 int offset = 2 * strokeWidth;
2819 m_gal->AdvanceDepth();
2820 m_gal->SetFillColor( marker_color );
2846 if( std::find( layers.begin(), layers.end(), aLayer ) == layers.end() )
2866 if( shownText.IsEmpty() )
2908 if( drawingShadows &&
getFont( aField )->IsOutline() )
2910 BOX2I shadow_box = bbox;
2913 m_gal->SetIsStroke(
false );
2914 m_gal->SetIsFill(
true );
2927 if( drawingShadows )
2944 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2947 cache = aField->
GetRenderCache( shownText, textpos, attributes );
2952 m_gal->DrawGlyphs( *cache );
3012 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3015 draw( &field, aLayer,
false );
3026 if( drawingDangling )
3038 std::vector<VECTOR2I> pts;
3039 std::deque<VECTOR2D> pts2;
3044 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
3046 m_gal->SetIsStroke(
true );
3050 if( drawingShadows )
3054 m_gal->DrawPolygon( pts2 );
3058 m_gal->SetIsFill(
false );
3059 m_gal->DrawPolyline( pts2 );
3062 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
3075 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3078 draw( &field, aLayer,
false );
3089 if( drawingDangling )
3101 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
3114 if( !( drawingShadows || drawingDangling ) ||
eeconfig()->m_Selection.draw_selected_children )
3117 draw( &field, aLayer,
false );
3128 if( drawingDangling )
3140 std::vector<VECTOR2I> i_pts;
3141 std::deque<VECTOR2D> d_pts;
3145 for(
const VECTOR2I& i_pt : i_pts )
3146 d_pts.emplace_back(
VECTOR2D( i_pt.x, i_pt.y ) );
3148 m_gal->SetIsFill(
true );
3150 m_gal->SetIsStroke(
true );
3153 m_gal->DrawPolyline( d_pts );
3155 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
3169 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3172 draw( &field, aLayer,
false );
3195 std::vector<VECTOR2I> pts;
3196 std::deque<VECTOR2D> pts2;
3201 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
3203 m_gal->SetIsFill(
false );
3205 m_gal->SetIsStroke(
true );
3211 m_gal->DrawLine( pts2[0], pts2[1] );
3212 m_gal->SetIsFill(
true );
3213 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
3217 m_gal->DrawLine( pts2[0], pts2[1] );
3218 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
3222 m_gal->DrawPolyline( pts2 );
3230 bool DNP = aSheet->
GetDNP();
3237 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3240 draw( &field, aLayer, DNP );
3259 m_gal->SetIsFill(
true );
3260 m_gal->SetIsStroke(
false );
3262 m_gal->DrawRectangle( pos, pos + size );
3269 m_gal->SetIsStroke(
true );
3271 m_gal->SetIsFill(
false );
3273 m_gal->DrawRectangle( pos, pos + size );
3282 std::max( bbox.
GetY() - pins.
GetY(),
3286 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
3287 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
3294 m_gal->SetIsStroke(
true );
3295 m_gal->SetIsFill(
true );
3299 m_gal->DrawSegment( pt1, pt2, strokeWidth );
3300 std::swap( pt1.
x, pt2.
x );
3301 m_gal->DrawSegment( pt1, pt2, strokeWidth );
3313 m_gal->AdvanceDepth();
3314 m_gal->SetIsStroke(
true );
3315 m_gal->SetIsFill(
true );
3324 int offset = 2 * strokeWidth;
3333 m_gal->AdvanceDepth();
3350 m_gal->SetIsStroke(
true );
3353 m_gal->SetIsFill(
false );
3371 bool drawingBusses = aLayer ==
LAYER_BUS;
3376 bool highlightNetclassColors =
false;
3384 if( !highlightNetclassColors && drawingNetColorHighlights )
3387 if(
m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
3415 if( highlightNetclassColors )
3420 else if( drawingBusses )
3424 if( drawingNetColorHighlights )
3436 if( drawingDangling )
3438 m_gal->SetIsFill(
false );
3439 m_gal->SetIsStroke(
true );
3440 m_gal->SetStrokeColor(
color.Brightened( 0.3 ) );
3460 draw( &line, aLayer );
3476 if( img_scale != 1.0 )
3489 m_gal->SetIsStroke(
true );
3492 m_gal->SetIsFill(
false );
3500 bm_size.
x /= img_scale;
3501 bm_size.
y /= img_scale;
3502 const VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
3505 m_gal->DrawRectangle( origin,
end );
3527 m_gal->SetIsFill( !drawingShadows );
3529 m_gal->SetIsStroke( drawingShadows );
3536 m_gal->DrawPolygon( polygon );
3543 const bool drawingShadows =
false;
3572 m_gal->DrawLine( topLeft, topLeft + width );
3573 m_gal->DrawLine( topLeft + width, topLeft + width + height );
3574 m_gal->DrawLine( topLeft + width + height, topLeft + height );
3575 m_gal->DrawLine( topLeft + height, topLeft );
3579 if(
name.IsEmpty() )
3583 int scaledSize = abs(
KiROUND(
m_gal->GetScreenWorldMatrix().GetScale().x * ptSize ) );
3584 int unscaledSize =
schIUScale.MilsToIU( ptSize );
3587 int textSize = ( scaledSize + ( unscaledSize * 2 ) ) / 3;
3593 m_gal->DrawLine( topLeft, topLeft - titleHeight );
3594 m_gal->DrawLine( topLeft - titleHeight, topLeft + width - titleHeight );
3595 m_gal->DrawLine( topLeft + width - titleHeight, topLeft + width );
3612 LINE_STYLE aLineStyle,
bool aDrawDirectLine,
int aWidth )
3614 if( aDrawDirectLine )
3616 m_gal->DrawLine( aStartPoint, aEndPoint );
constexpr EDA_IU_SCALE schIUScale
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
std::optional< BOX2I > OPT_BOX2I
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
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 BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
constexpr coord_type GetY() const
constexpr size_type GetWidth() const
constexpr Vec Centre() const
constexpr coord_type GetX() const
constexpr size_type GetHeight() const
constexpr coord_type GetLeft() const
constexpr void SetX(coord_type val)
constexpr const Vec & GetOrigin() const
constexpr void SetY(coord_type val)
const BOX2< Vec > GetBoundingBoxRotated(const VECTOR2I &aRotCenter, const EDA_ANGLE &aAngle) const
Useful to calculate bounding box of rotated items, when rotation is not cardinal.
constexpr coord_type GetRight() const
constexpr coord_type GetTop() const
constexpr void Offset(coord_type dx, coord_type dy)
constexpr coord_type GetBottom() const
Represent basic circle geometry with utility geometry functions.
VECTOR2I Center
Public to make access simpler.
int Radius
Public to make access simpler.
bool IsHorizontal() const
A base class for most all the KiCad significant classes used in schematics and boards.
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
void SetFlags(EDA_ITEM_FLAGS aMask)
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
EDA_ITEM * GetParent() const
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
bool IsBrightened() const
bool IsForceVisible() const
EDA_ITEM_FLAGS GetFlags() const
const SHAPE_POLY_SET & GetHatching() const
FILL_T GetFillMode() const
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
COLOR4D GetFillColor() const
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
const VECTOR2I & GetTextPos() const
COLOR4D GetTextColor() const
const EDA_ANGLE & GetTextAngle() const
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
std::vector< std::unique_ptr< KIFONT::GLYPH > > * GetRenderCache(const KIFONT::FONT *aFont, const wxString &forResolvedText, const VECTOR2I &aOffset={ 0, 0 }) const
virtual EDA_ANGLE GetDrawRotation() const
virtual VECTOR2I GetDrawPos() 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,...
virtual KIFONT::FONT * GetDrawFont(const RENDER_SETTINGS *aSettings) const
bool HasTextVars() const
Indicates the ShownText has text var references which need to be processed.
const TEXT_ATTRIBUTES & GetAttributes() const
virtual void SetText(const wxString &aText)
VECTOR2I GetTextSize() const
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
VECTOR2I StringBoundaryLimits(const wxString &aText, const VECTOR2I &aSize, int aThickness, bool aBold, bool aItalic, const METRICS &aFontMetrics) const
Compute the boundary limits of aText (the bounding box of all shapes).
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.
COLOR4D & Invert()
Makes the color inverted, alpha remains the same.
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.
COLOR4D & Desaturate()
Removes color (in HSL model)
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.
virtual void DrawPolygon(const std::deque< VECTOR2D > &aPointList)
Draw a polygon.
virtual void SetIsFill(bool aIsFillEnabled)
Enable/disable fill.
virtual void Rotate(double aAngle)
Rotate the context.
virtual void DrawRectangle(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint)
Draw a rectangle.
void SetVerticalJustify(const GR_TEXT_V_ALIGN_T aVerticalJustify)
void SetHorizontalJustify(const GR_TEXT_H_ALIGN_T aHorizontalJustify)
virtual void SetFillColor(const COLOR4D &aColor)
Set the fill color.
virtual void Translate(const VECTOR2D &aTranslation)
Translate the context.
virtual void Restore()
Restore the context.
virtual void SetLineWidth(float aLineWidth)
Set the line width.
virtual void SetStrokeColor(const COLOR4D &aColor)
Set the stroke color.
virtual void SetIsStroke(bool aIsStrokeEnabled)
Enable/disable stroked outlines.
virtual void DrawLine(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint)
Draw a line.
void SetGlyphSize(const VECTOR2I aSize)
virtual void DrawArc(const VECTOR2D &aCenterPoint, double aRadius, const EDA_ANGLE &aStartAngle, const EDA_ANGLE &aAngle)
Draw an arc.
virtual void BitmapText(const wxString &aText, const VECTOR2I &aPosition, const EDA_ANGLE &aAngle)
Draw a text using a bitmap font.
virtual void Save()
Save the context.
double GetWorldScale() const
Get the world scale.
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 bool Draw(const VIEW_ITEM *, int) override
Takes an instance of VIEW_ITEM and passes it to a function that knows how to draw the item.
void drawPinDanglingIndicator(const SCH_PIN &aPin, const COLOR4D &aColor, bool aDrawingShadows, bool aBrightened)
float getTextThickness(const SCH_ITEM *aItem) const
void drawLocalPowerIcon(const VECTOR2D &aPos, double aSize, bool aRotate, const COLOR4D &aColor, bool aDrawingShadows, bool aBrightened)
Draw an local power pin indicator icon.
float getShadowWidth(bool aForHighlight) const
COLOR4D getRenderColor(const SCH_ITEM *aItem, int aLayer, bool aDrawingShadows, bool aDimmed=false, bool aIgnoreNets=false) const
int externalPinDecoSize(const SCH_PIN &aPin)
KIFONT::FONT * getFont(const EDA_TEXT *aText) const
void draw(const EDA_ITEM *, int, bool aDimmed)
wxString expandLibItemTextVars(const wxString &aSourceText, const SCH_SYMBOL *aSymbolContext)
static std::vector< KICAD_T > g_ScaledSelectionTypes
void drawLine(const VECTOR2I &aStartPoint, const VECTOR2I &aEndPoint, LINE_STYLE aLineStyle, bool aDrawDirectLine=false, int aWidth=0)
int getOperatingPointTextSize() const
float getLineWidth(const SCH_ITEM *aItem, bool aDrawingShadows, bool aDrawingWireColorHighlights=false) const
void triLine(const VECTOR2D &a, const VECTOR2D &b, const VECTOR2D &c)
SCH_RENDER_SETTINGS m_schSettings
void drawAnchor(const VECTOR2I &aPos, bool aDrawingShadows)
Draw anchor indicating the anchor position of text objects, local labels, or fields.
bool nonCached(const EDA_ITEM *aItem)
Indicates the item is drawn on a non-cached layer in OpenGL.
void drawDanglingIndicator(const VECTOR2I &aPos, const COLOR4D &aColor, int aWidth, bool aDangling, bool aDrawingShadows, bool aBrightened)
Draw the target (an open square) for a wire or label which has no connection or is being moved.
void drawItemBoundingBox(const EDA_ITEM *aItem)
int internalPinDecoSize(const SCH_PIN &aPin)
bool isUnitAndConversionShown(const SCH_ITEM *aItem) const
An abstract base class for deriving all objects that can be added to a VIEW.
double GetForcedTransparency() const
wxString AsString() const
Define a library symbol object.
static LIB_SYMBOL * GetDummy()
Returns a dummy LIB_SYMBOL, used when one is missing in the schematic.
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
std::vector< SCH_PIN * > GetGraphicalPins(int aUnit=0, int aBodyStyle=0) const
Graphical pins: Return schematic pin objects as drawn (unexpanded), filtered by unit/body.
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
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...
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
A pin layout helper is a class that manages the layout of the parts of a pin on a schematic symbol:
OPT_BOX2I GetAltIconBBox()
Get the box of the alt mode icon, if there is one.
std::optional< TEXT_INFO > GetPinNameInfo(int aShadowWidth)
Get the text info for the pin name.
std::optional< TEXT_INFO > GetPinElectricalTypeInfo(int aShadowWidth)
CIRCLE GetDanglingIndicator() const
Gets the dangling indicator geometry for this pin, if the pin were to be dangling.
std::optional< TEXT_INFO > GetPinNumberInfo(int aShadowWidth)
void SetRenderParameters(int aNameThickness, int aNumberThickness, bool aShowElectricalType, bool aShowAltIcons)
A REFERENCE_IMAGE is a wrapper around a BITMAP_IMAGE that is displayed in an editor as a reference fo...
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.
SCHEMATIC_SETTINGS & Settings() const
Object to handle a bitmap image that can be inserted in a schematic.
VECTOR2I GetPosition() const override
REFERENCE_IMAGE & GetReferenceImage()
Base class for a bus or wire entry.
bool IsStartDangling() const
VECTOR2I GetPosition() const override
bool IsEndDangling() const
virtual STROKE_PARAMS GetStroke() const override
int GetPenWidth() const override
LINE_STYLE GetEffectiveLineStyle() const
Class for a wire to bus entry.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
void CreateGraphicShape(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &aPos) const override
Calculate the graphic shape (a polygon) associated to the text.
virtual bool IsDangling() const override
Determines dangling state from connectivity and cached connected rule areas.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
VECTOR2I GetPosition() const override
bool IsHypertext() const override
Allow items to support hypertext actions when hovered/clicked.
std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
std::vector< std::unique_ptr< KIFONT::GLYPH > > * GetRenderCache(const wxString &forResolvedText, const VECTOR2I &forPosition, TEXT_ATTRIBUTES &aAttrs) const
VECTOR2I GetParentPosition() const
void CreateGraphicShape(const RENDER_SETTINGS *aRenderSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &aPos) const override
Calculate the graphic shape (a polygon) associated to the text.
VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const override
This offset depends on the orientation, the type of text, and the area required to draw the associate...
A set of SCH_ITEMs (i.e., without duplicates).
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
void CreateGraphicShape(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPoints, const VECTOR2I &aPos) const override
Calculate the graphic shape (a polygon) associated to the text.
Base class for any item which can be embedded within the SCHEMATIC container class,...
const SYMBOL * GetParentSymbol() const
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
std::vector< int > ViewGetLayers() const override
Return the layers the item is drawn on (which may be more than its "home" layer)
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
bool RenderAsBitmap(double aWorldScale) const override
bool IsConnectivityDirty() const
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
wxString GetClass() const override
Return the class name.
const KIFONT::METRICS & GetFontMetrics() const
int GetEffectivePenWidth(const SCH_RENDER_SETTINGS *aSettings) const
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
int GetEffectiveDiameter() const
VECTOR2I GetPosition() const override
bool IsDangling() const override
COLOR4D GetLabelColor() const
LABEL_FLAG_SHAPE GetShape() const
std::vector< SCH_FIELD > & GetFields()
Segment description base class to describe items which have 2 end points (track, wire,...
void SetStartPoint(const VECTOR2I &aPosition)
std::vector< VECTOR3I > BuildWireWithHopShape(const SCH_SCREEN *aScreen, double aArcRadius) const
For wires only: build the list of points to draw the shape using segments and 180 deg arcs Points are...
bool IsWire() const
Return true if the line is a wire.
bool IsStartDangling() const
void SetLineColor(const COLOR4D &aColor)
void SetLineWidth(const int aSize)
LINE_STYLE GetEffectiveLineStyle() const
VECTOR2I GetMidPoint() const
VECTOR2I GetEndPoint() const
VECTOR2I GetStartPoint() const
bool IsEndDangling() const
bool IsBus() const
Return true if the line is a bus.
void SetLineStyle(const LINE_STYLE aStyle)
virtual void SetStroke(const STROKE_PARAMS &aStroke) override
void SetEndPoint(const VECTOR2I &aPosition)
const wxString & GetOperatingPoint() const
SCH_LAYER_ID GetColorLayer() const
VECTOR2I GetPosition() const override
VECTOR2I GetPosition() const override
int GetNumberTextSize() const
const wxString & GetOperatingPoint() const
void SetName(const wxString &aName)
bool IsGlobalPower() const
Return whether this pin forms a global power connection: i.e., is part of a power symbol and of type ...
VECTOR2I GetPinRoot() const
bool IsDangling() const override
void SetShape(GRAPHIC_PINSHAPE aShape)
VECTOR2I GetPosition() const override
int GetNameTextSize() const
wxString GetShownName() const
PIN_LAYOUT_CACHE & GetLayoutCache() const
Get the layout cache associated with this pin.
void SetOperatingPoint(const wxString &aText)
void SetType(ELECTRICAL_PINTYPE aType)
GRAPHIC_PINSHAPE GetShape() const
ELECTRICAL_PINTYPE GetType() const
std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const override
Make a set of SHAPE objects representing the SCH_SHAPE.
LINE_STYLE GetEffectiveLineStyle() const
STROKE_PARAMS GetStroke() const override
VECTOR2I GetPosition() const override
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
std::vector< SCH_FIELD > & GetFields()
Return a reference to the vector holding the sheet's fields.
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
VECTOR2I GetPosition() const override
const BOX2I GetBodyBoundingBox() const
Return a bounding box for the sheet body but not the fields.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
KIGFX::COLOR4D GetBorderColor() const
bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flags.
std::vector< SCH_SHEET_PIN * > & GetPins()
KIGFX::COLOR4D GetBackgroundColor() const
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
BOX2I GetBodyAndPinsBoundingBox() const override
Return a bounding box for the symbol body and pins but not the fields.
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
VECTOR2I GetPosition() const override
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the symbol.
static void BuildLocalPowerIconShape(std::vector< SCH_SHAPE > &aShapeList, const VECTOR2D &aPos, double aSize, double aLineWidth, bool aHorizontal)
Build the local power pin indicator icon shape, at coordinate aPos.
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
int GetOrientation() const override
Get the display symbol orientation.
bool IsSymbolLikePowerLocalLabel() const
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
BOX2I GetBodyBoundingBox() const override
Return a bounding box for the symbol body but not the pins or fields.
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
std::vector< SCH_TABLECELL * > GetCells() const
void DrawBorders(const std::function< void(const VECTOR2I &aPt1, const VECTOR2I &aPt2, const STROKE_PARAMS &aStroke)> &aCallback) const
virtual wxString GetShownText(const RENDER_SETTINGS *aSettings, const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
VECTOR2I GetDrawPos() const override
bool IsHypertext() const override
Allow items to support hypertext actions when hovered/clicked.
bool IsHypertext() const override
Allow items to support hypertext actions when hovered/clicked.
VECTOR2I GetPosition() const override
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
virtual wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
virtual VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const
This offset depends on the orientation, the type of text, and the area required to draw the associate...
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
Represent a set of closed polygons.
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new outline to the set and returns its index.
void Fracture()
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
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)
int NewOutline()
Creates a new empty polygon in the set and returns its index.
void BooleanSubtract(const SHAPE_POLY_SET &b)
Perform boolean polyset difference.
const BOX2I BBox(int aClearance=0) const override
Compute a bounding box of the shape, with a margin of aClearance a collision.
const SEG & GetSeg() const
An abstract shape on 2D plane.
Simple container to manage line stroke parameters.
LINE_STYLE GetLineStyle() const
KIGFX::COLOR4D GetColor() 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)
const TRANSFORM & GetTransform() const
GR_TEXT_H_ALIGN_T m_Halign
GR_TEXT_V_ALIGN_T m_Valign
wxString ExpandTextVars(const wxString &aSource, const PROJECT *aProject, int aFlags)
#define DANGLING_SYMBOL_SIZE
The size of the rectangle indicating an unconnected wire or label.
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
#define UNSELECTED_END_SIZE
The size of the rectangle indicating the anchor of a text object (including fields)
#define TEXT_ANCHOR_SIZE
The default pin len value when creating pins(can be changed in preference menu)
static constexpr EDA_ANGLE ANGLE_0
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
static constexpr EDA_ANGLE ANGLE_270
static constexpr EDA_ANGLE ANGLE_180
#define IS_SHOWN_AS_BITMAP
#define ENDPOINT
ends. (Used to support dragging.)
#define IS_DANGLING
indicates a pin is dangling
#define STARTPOINT
When a line is selected, these flags indicate which.
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
@ FILLED_WITH_BG_BODYCOLOR
@ FILLED_SHAPE
Fill with object color.
int GetPenSizeForDemiBold(int aTextSize)
int GetPenSizeForNormal(int aTextSize)
int ClampTextPenSize(int aPenSize, int aSize, bool aStrict)
Pen width should not allow characters to become cluttered up in their own fatness.
const wxChar *const traceSchPainter
Flag to enable debug output of schematic painter operations.
@ LAYER_DRAW_BITMAPS
Draw images.
SCH_LAYER_ID
Eeschema drawing layers.
@ LAYER_SHAPES_BACKGROUND
@ LAYER_EXCLUDED_FROM_SIM
@ LAYER_NET_COLOR_HIGHLIGHT
@ LAYER_DEVICE_BACKGROUND
@ LAYER_SELECTION_SHADOWS
@ LAYER_SCHEMATIC_BACKGROUND
#define UNIMPLEMENTED_FOR(type)
MATRIX3x3< double > MATRIX3x3D
The Cairo implementation of the graphics abstraction layer.
static void boxText(KIGFX::GAL &aGal, const wxString &aText, const VECTOR2D &aPosition, const TEXT_ATTRIBUTES &aAttrs, const KIFONT::METRICS &aFontMetrics)
static void bitmapText(KIGFX::GAL &aGal, const wxString &aText, const VECTOR2D &aPosition, const TEXT_ATTRIBUTES &aAttrs)
EESCHEMA_SETTINGS * eeconfig()
static void strokeText(KIGFX::GAL &aGal, const wxString &aText, const VECTOR2D &aPosition, const TEXT_ATTRIBUTES &aAttrs, const KIFONT::METRICS &aFontMetrics)
static void knockoutText(KIGFX::GAL &aGal, const wxString &aText, const VECTOR2D &aPosition, const TEXT_ATTRIBUTES &aAttrs, const KIFONT::METRICS &aFontMetrics)
static void drawAltPinModesIcon(GAL &aGal, const VECTOR2D &aPos, double aSize, bool aBaseSelected, bool aRotate, int aExtraLineWidth, const COLOR4D &aColor)
Draw an alternate pin mode indicator icon.
static bool isFieldsLayer(int aLayer)
static BOX2I GetTextExtents(const wxString &aText, const VECTOR2D &aPosition, KIFONT::FONT &aFont, const TEXT_ATTRIBUTES &aAttrs, const KIFONT::METRICS &aFontMetrics)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
@ PT_NC
not connected (must be left open)
#define TARGET_BUSENTRY_RADIUS
Class to handle a set of SCH_ITEMs.
#define BITMAP_FONT_SIZE_THRESHOLD
#define TARGET_PIN_RADIUS
Utility functions for working with shapes.
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
int PrintableCharCount(const wxString &aString)
Return the number of printable (ie: non-formatting) chars.
LINE_STYLE
Dashed line types.
int highlight_netclass_colors_thickness
bool highlight_netclass_colors
double highlight_netclass_colors_alpha
GR_TEXT_H_ALIGN_T m_HAlign
GR_TEXT_V_ALIGN_T m_VAlign
@ VALUE
Field Value of part, i.e. "3.3K".
@ GR_TEXT_H_ALIGN_INDETERMINATE
@ GR_TEXT_V_ALIGN_INDETERMINATE
wxLogTrace helper definitions.
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.
const VECTOR2I CalcArcCenter(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Determine the center of an arc or circle given three points on its circumference.
constexpr int sign(T val)
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D