117 draw( item, aLayer,
false );
126#ifdef CONNECTIVITY_DEBUG
128 auto sch_item =
dynamic_cast<const SCH_ITEM*
>( aItem );
129 auto conn = sch_item ? sch_item->
Connection( *g_CurrentSheet ) :
nullptr;
134 auto label = conn->Name(
true );
139 m_gal->SetLineWidth( Mils2ui( 2 ) );
140 m_gal->SetGlyphSize(
VECTOR2D( Mils2ui( 20 ), Mils2ui( 20 ) ) );
141 m_gal->StrokeText( *
m_gal, conn->Name(
true ), pos, 0.0, 0 );
149 switch( aItem->
Type() )
155 drawBoundingBox =
false;
156 draw(
static_cast<const SCH_PIN*
>( aItem ), aLayer, aDimmed );
168 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
171 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
174 draw(
static_cast<const SCH_TEXT*
>( aItem ), aLayer, aDimmed );
180 draw(
static_cast<const SCH_TABLE*
>( aItem ), aLayer, aDimmed );
183 draw(
static_cast<const SCH_LABEL*
>( aItem ), aLayer, aDimmed );
189 draw(
static_cast<const SCH_FIELD*
>( aItem ), aLayer, aDimmed );
225 if( drawBoundingBox )
241 box =
static_cast<const SCH_SYMBOL*
>( aItem )->GetBodyBoundingBox();
243 m_gal->SetIsFill(
false );
244 m_gal->SetIsStroke(
true );
246 :
COLOR4D( 0.2, 0.2, 0.2, 1 ) );
298 return (
float) std::fabs( matrix.
GetScale().
x * milsWidth ) +
schIUScale.MilsToIU( milsWidth );
303 bool aDimmed,
bool aIgnoreNets )
const
305 auto isBackgroundLayer =
322 color =
static_cast<const SCH_LINE*
>( aItem )->GetLineColor();
336 if( isBackgroundLayer( aLayer ) )
345 if( isBackgroundLayer( aLayer ) )
368 wxFAIL_MSG( wxT(
"Unsupported fill type" ) );
377 else if( isSymbolChild )
388 else if( aItem->
IsType( { SCH_LABEL_LOCATE_ANY_T } ) )
394 else if( aIgnoreNets )
407 if( isBackgroundLayer( aLayer ) )
412 else if(
const EDA_TEXT* otherTextItem =
dynamic_cast<const EDA_TEXT*
>( aItem ) )
415 color = otherTextItem->GetTextColor();
423 if( isBackgroundLayer( aLayer) )
448 if( aDrawingShadows )
455 else if( isBackgroundLayer( aLayer ) )
460 else if( aItem->
IsSelected() && aDrawingShadows )
464 else if( aItem->
IsSelected() && isBackgroundLayer( aLayer ) )
477 if( aDimmed && !( aItem->
IsSelected() && aDrawingShadows ) )
492 bool aDrawingWireColorHighlights )
const
505 if( aDrawingWireColorHighlights )
507 float colorHighlightWidth =
schIUScale.MilsToIU( 15.0 );
516 width += colorHighlightWidth;
527 switch( aItem->
Type() )
530 pen =
static_cast<const SCH_FIELD*
>( aItem )->GetEffectiveTextPenWidth( pen );
534 pen =
static_cast<const SCH_TEXT*
>( aItem )->GetEffectiveTextPenWidth( pen );
542 pen =
static_cast<const SCH_LABEL_BASE*
>( aItem )->GetEffectiveTextPenWidth( pen );
547 pen =
static_cast<const SCH_TEXTBOX*
>( aItem )->GetEffectiveTextPenWidth( pen );
561 int screenTextSize =
std::abs( (
int)
m_gal->GetScreenWorldMatrix().GetScale().y * 7 );
564 return KiROUND( ( docTextSize + screenTextSize * 2 ) / 3.0 );
626 font->
Draw( &aGal, aText, aPosition, aAttrs, aFontMetrics );
668 callback_gal.SetIsStroke(
true );
670 font->
Draw( &callback_gal, aText, aPosition, attrs, aFontMetrics );
715 m_gal->DrawLine( a, b );
716 m_gal->DrawLine( b, c );
721 int aBodyStyle,
bool aDimmed )
729 std::unique_ptr< LIB_SYMBOL > tmpSymbol;
734 tmpSymbol = aSymbol->
Flatten();
735 drawnSymbol = tmpSymbol.get();
741 [](
const SCH_ITEM& item,
int layer )
751 if( !childOnLayer( item, aLayer ) )
760 draw( &item, aLayer, aDimmed );
787 bool aDrawingShadows,
bool aBrightened )
799 m_gal->SetIsFill(
false );
800 m_gal->SetIsStroke(
true );
801 m_gal->SetLineWidth( lineWidth );
810 const COLOR4D& aColor,
bool aDrawingShadows,
815 m_gal->Translate( aPos );
820 double lineWidth = aSize / 10.0;
822 if( aDrawingShadows )
825 m_gal->SetIsFill(
false );
826 m_gal->SetIsStroke(
true );
827 m_gal->SetLineWidth( lineWidth );
828 m_gal->SetStrokeColor( aColor );
830 double x_right = aSize / 1.6180339887;
831 double x_middle = x_right / 2.0;
843 m_gal->DrawCurve( bottomPt, bottomAnchorPt, leftSideAnchorPt1, leftPt );
844 m_gal->DrawCurve( leftPt, leftSideAnchorPt2, rightSideAnchorPt2, rightPt );
845 m_gal->DrawCurve( rightPt, rightSideAnchorPt1, bottomAnchorPt, bottomPt );
847 m_gal->SetIsFill(
true );
848 m_gal->SetFillColor( aColor );
849 m_gal->DrawCircle( ( leftPt + rightPt ) / 2.0, aSize / 15.0 );
859 bool aRotate,
int aExtraLineWidth,
const COLOR4D& aColor )
887 const double lineYOffset = aSize / 4;
888 const double arrowHead = aSize / 8;
904 topLineREnd -
VECTOR2D{ aSize * 0.7, 0 } );
907 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
908 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
912 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
913 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
922 aGal.
DrawArc( topLineREnd -
VECTOR2D{ aSize - lineYOffset * 2, -lineYOffset },
975 if( drawingDangling )
994 int textOffset =
KiROUND( textSize * 0.22 );
1001 mid.
x +=
KiROUND( textOffset * 1.2 );
1006 mid.
y -=
KiROUND( textOffset * 1.2 );
1027 m_gal->SetIsStroke(
true );
1028 m_gal->SetIsFill(
false );
1031 m_gal->SetFontBold(
false );
1032 m_gal->SetFontUnderlined(
false );
1033 m_gal->SetFontItalic(
false );
1036 const int diam =
radius*2;
1041 m_gal->DrawLine( p0, pos );
1054 m_gal->DrawLine( p0, pos );
1059 m_gal->DrawLine( p0 + dir * ( diam ), pos );
1063 pc = p0 - dir * clock_size ;
1067 p0 +
VECTOR2D( -dir.
y, dir.
x) * clock_size );
1070 m_gal->DrawLine( p0 + dir * ( diam ), pos );
1075 pc = p0 - dir * clock_size ;
1079 p0 +
VECTOR2D( -dir.
y, dir.
x) * clock_size );
1094 m_gal->DrawLine( p0, pos );
1098 m_gal->DrawLine( p0, pos );
1103 p0 +
VECTOR2D( -dir.
x * clock_size, 0 ),
1109 p0 +
VECTOR2D( 0, -dir.
y * clock_size ),
1115 m_gal->DrawLine( p0, pos );
1132 m_gal->DrawLine( p0, pos );
1141 m_gal->DrawLine( p0, pos );
1151 if( drawingShadows && !
eeconfig()->m_Selection.draw_selected_children )
1161 float shadowWidth = 0.0f;
1163 if( drawingShadows )
1173 const auto textRendersAsBitmap =
1187 const auto drawBrace =
1192 VECTOR2D mid = ( aTop + aBottom ) / 2.0;
1210 double braceOffset = aLeftBrace ? -aBraceWidth : aBraceWidth;
1211 p2.
y += braceOffset / 2;
1212 p3.
y += braceOffset;
1213 p4.
y += braceOffset / 2;
1218 double braceOffset = aLeftBrace ? -aBraceWidth : aBraceWidth;
1219 p2.
x += braceOffset / 2;
1220 p3.
x += braceOffset;
1221 p4.
x += braceOffset / 2;
1231 const auto drawBracesAroundText =
1235 if( aLines.size() <= 1 )
1239 int braceWidth = aAttrs.m_Size.x / 3;
1242 int maxLineWidth = 0;
1247 for(
const wxString& line : aLines )
1249 wxString trimmedLine = line;
1250 trimmedLine.Trim(
true ).Trim(
false );
1252 aAttrs.m_StrokeWidth,
false,
false,
1254 maxLineWidth = std::max( maxLineWidth, lineExtents.
x );
1262 int textHeight = aAttrs.m_Size.y;
1263 int extraHeight = textHeight / 3;
1268 braceEnd.
x += ( aLines.size() - 1 ) * aLineSpacing;
1271 braceStart.
x -= 2 * extraHeight;
1274 int braceSpacing = maxLineWidth / 2 + braceWidth;
1276 VECTOR2D topBraceStart = braceStart;
1277 topBraceStart.
y -= braceSpacing;
1280 topBraceEnd.
y -= braceSpacing;
1282 drawBrace( aGal, topBraceStart, topBraceEnd, braceWidth,
true, aAttrs );
1284 VECTOR2D bottomBraceStart = braceStart;
1285 bottomBraceStart.
y += braceSpacing;
1287 VECTOR2D bottomBraceEnd = braceEnd;
1288 bottomBraceEnd.
y += braceSpacing;
1290 drawBrace( aGal, bottomBraceStart, bottomBraceEnd, braceWidth,
false, aAttrs );
1295 braceEnd.
y += ( aLines.size() - 1 ) * aLineSpacing;
1298 braceStart.
y -= 2 * extraHeight;
1301 int braceSpacing = maxLineWidth / 2 + braceWidth;
1305 leftTop.
x -= braceSpacing;
1308 leftBottom.
x -= braceSpacing;
1310 drawBrace( aGal, leftTop, leftBottom, braceWidth,
true, aAttrs );
1314 rightTop.
x += braceSpacing;
1317 rightBottom.
x += braceSpacing;
1319 drawBrace( aGal, rightTop, rightBottom, braceWidth,
false, aAttrs );
1323 const auto drawBracesAroundTextBitmap =
1328 if( aLines.size() <= 1 )
1331 int braceWidth = aAttrs.m_Size.x / 4;
1334 int maxLineWidth = aAttrs.m_Size.x * 4;
1340 int textHalfHeight = aAttrs.m_Size.y / 2;
1345 braceEnd.
x += ( aLines.size() - 1 ) * aLineSpacing;
1348 leftStart.
y -= maxLineWidth / 2 + braceWidth / 2;
1351 leftEnd.
y -= maxLineWidth / 2 + braceWidth / 2;
1353 drawBrace( aGal, leftStart, leftEnd, braceWidth,
true, aAttrs );
1356 rightStart.
y += maxLineWidth / 2 + braceWidth / 2;
1359 rightEnd.
y += maxLineWidth / 2 + braceWidth / 2;
1361 drawBrace( aGal, rightStart, rightEnd, braceWidth,
false, aAttrs );
1366 braceEnd.
y += ( aLines.size() - 1 ) * aLineSpacing;
1369 braceTop.
y -= textHalfHeight;
1372 braceBottom.
y += textHalfHeight;
1375 leftTop.
x -= maxLineWidth / 2 + braceWidth / 2;
1378 leftBottom.
x -= maxLineWidth / 2 + braceWidth / 2;
1380 drawBrace( aGal, leftTop, leftBottom, braceWidth,
true, aAttrs );
1383 rightTop.
x += maxLineWidth / 2 + braceWidth / 2;
1385 VECTOR2D rightBottom = braceBottom;
1386 rightBottom.
x += maxLineWidth / 2 + braceWidth / 2;
1388 drawBrace( aGal, rightTop, rightBottom, braceWidth,
false, aAttrs );
1393 const auto drawMultiLineText =
1398 if( aText.StartsWith(
"[" ) && aText.EndsWith(
"]" ) && aText.Contains(
"\n" ) )
1401 wxString content = aText.Mid( 1, aText.Length() - 2 );
1402 wxArrayString lines;
1405 if( lines.size() > 1 )
1408 int lineSpacing =
KiROUND( aAttrs.m_Size.y * 1.3 );
1419 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1420 startPos.
x -= totalWidth;
1424 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1425 startPos.
x -= totalWidth / 2;
1429 for(
size_t i = 0; i < lines.size(); i++ )
1432 linePos.
x += i * lineSpacing;
1434 wxString line = lines[i];
1435 line.Trim(
true ).Trim(
false );
1437 strokeText( aGal, line, linePos, aAttrs, aFontMetrics );
1446 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1447 startPos.
y -= totalHeight;
1451 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1452 startPos.
y -= totalHeight / 2;
1456 for(
size_t i = 0; i < lines.size(); i++ )
1459 linePos.
y += i * lineSpacing;
1461 wxString line = lines[i];
1462 line.Trim(
true ).Trim(
false );
1464 strokeText( aGal, line, linePos, aAttrs, aFontMetrics );
1469 drawBracesAroundText( aGal, lines, startPos, lineSpacing, aAttrs );
1475 strokeText( aGal, aText, aPosition, aAttrs, aFontMetrics );
1478 const auto drawMultiLineTextBox =
1483 if( aText.StartsWith(
"[" ) && aText.EndsWith(
"]" ) && aText.Contains(
"\n" ) )
1485 wxString content = aText.Mid( 1, aText.Length() - 2 );
1486 wxArrayString lines;
1489 if( lines.size() > 1 )
1491 int lineSpacing =
KiROUND( aAttrs.m_Size.y * 1.3 );
1499 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1500 startPos.
x -= totalWidth;
1504 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1505 startPos.
x -= totalWidth / 2;
1508 for(
size_t i = 0; i < lines.size(); i++ )
1511 linePos.
x += i * lineSpacing;
1513 wxString line = lines[i];
1514 line.Trim(
true ).Trim(
false );
1516 boxText( aGal, line, linePos, aAttrs, aFontMetrics );
1524 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1525 startPos.
y -= totalHeight;
1529 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1530 startPos.
y -= totalHeight / 2;
1533 for(
size_t i = 0; i < lines.size(); i++ )
1536 linePos.
y += i * lineSpacing;
1538 wxString line = lines[i];
1539 line.Trim(
true ).Trim(
false );
1541 boxText( aGal, line, linePos, aAttrs, aFontMetrics );
1545 drawBracesAroundText( aGal, lines, startPos, lineSpacing, aAttrs );
1550 boxText( aGal, aText, aPosition, aAttrs, aFontMetrics );
1553 const auto drawMultiLineBitmapText =
1558 if( aText.StartsWith(
"[" ) && aText.EndsWith(
"]" ) && aText.Contains(
"\n" ) )
1560 wxString content = aText.Mid( 1, aText.Length() - 2 );
1561 wxArrayString lines;
1564 if( lines.size() > 1 )
1566 int lineSpacing =
KiROUND( aAttrs.m_Size.y * 1.3 );
1574 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1575 startPos.
x -= totalWidth;
1579 int totalWidth = ( lines.size() - 1 ) * lineSpacing;
1580 startPos.
x -= totalWidth / 2;
1583 for(
size_t i = 0; i < lines.size(); i++ )
1586 linePos.
x += i * lineSpacing;
1588 wxString line = lines[i];
1589 line.Trim(
true ).Trim(
false );
1599 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1600 startPos.
y -= totalHeight;
1604 int totalHeight = ( lines.size() - 1 ) * lineSpacing;
1605 startPos.
y -= totalHeight / 2;
1608 for(
size_t i = 0; i < lines.size(); i++ )
1611 linePos.
y += i * lineSpacing;
1613 wxString line = lines[i];
1614 line.Trim(
true ).Trim(
false );
1621 drawBracesAroundTextBitmap( aGal, lines, startPos, lineSpacing, aAttrs );
1626 bitmapText( aGal, aText, aPosition, aAttrs );
1629 const auto drawTextInfo =
1633 const bool renderTextAsBitmap = textRendersAsBitmap( *
m_gal, aTextInfo.
m_TextSize );
1636 m_gal->SetStrokeColor( aColor );
1637 m_gal->SetFillColor( aColor );
1647 if( drawingShadows )
1662 else if(
nonCached( aPin ) && renderTextAsBitmap )
1675 const auto getColorForLayer =
1676 [&](
int aDrawnLayer )
1681 return getRenderColor( aPin, aDrawnLayer, drawingShadows, aDimmed );
1686 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> numInfo = cache.
GetPinNumberInfo( shadowWidth ) )
1688 drawTextInfo( *numInfo, getColorForLayer(
LAYER_PINNUM ) );
1691 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> nameInfo = cache.
GetPinNameInfo( shadowWidth ) )
1693 drawTextInfo( *nameInfo, getColorForLayer(
LAYER_PINNAM ) );
1705 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> elecTypeInfo =
1728 m_gal->SetIsStroke(
true );
1738 bool aDangling,
bool aDrawingShadows,
bool aBrightened )
1754 m_gal->SetIsStroke(
true );
1755 m_gal->SetIsFill(
false );
1765 bool highlightNetclassColors =
false;
1783 if( highlightNetclassColors && aLayer == aJct->
GetLayer() )
1790 if( junctionSize > 1 )
1792 m_gal->SetIsStroke( drawingShadows );
1795 m_gal->SetIsFill( !drawingShadows );
1807 bool drawingBusses = aLayer ==
LAYER_BUS;
1811 bool highlightNetclassColors =
false;
1812 double highlightAlpha = 0.6;
1814 double hopOverScale = 0.0;
1825 if( !highlightNetclassColors && drawingNetColorHighlights )
1828 if( drawingNetColorHighlights && !( aLine->
IsWire() || aLine->
IsBus() ) )
1831 if(
m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
1842 if( aLine->
IsNew() && drawingDangling )
1846 float width =
getLineWidth( aLine, drawingShadows, drawingNetColorHighlights );
1849 if( highlightNetclassColors )
1854 else if( drawingBusses )
1858 if( drawingNetColorHighlights )
1870 if( ( drawingDangling || drawingShadows ) && !aLine->
IsNew() )
1899 if( drawingDangling )
1906 int textOffset =
KiROUND( textSize * 0.22 );
1911 pos.
y -= textOffset;
1917 pos.
x +=
KiROUND( textOffset * 1.2 );
1933 m_gal->SetIsStroke(
true );
1934 m_gal->SetIsFill(
false );
1936 m_gal->SetLineWidth( width );
1938 std::vector<VECTOR3I> curr_wire_shape;
1940 if( aLine->
IsWire() && hopOverScale > 0.0 )
1942 double lineWidth =
getLineWidth( aLine,
false, drawingNetColorHighlights );
1943 double arcRadius = lineWidth * hopOverScale;
1952 for(
size_t ii = 1; ii < curr_wire_shape.size(); ii++ )
1954 VECTOR2I start( curr_wire_shape[ii-1].x, curr_wire_shape[ii-1].y );
1956 if( curr_wire_shape[ii-1].z == 0 )
1959 VECTOR2I end( curr_wire_shape[ii].x, curr_wire_shape[ii].y );
1966 VECTOR2I arc_middle( curr_wire_shape[ii].x, curr_wire_shape[ii].y );
1968 VECTOR2I arc_end( curr_wire_shape[ii].x, curr_wire_shape[ii].y );
1980 EDA_ANGLE angle1 = midAngle - startAngle;
1985 m_gal->DrawArc(
center, ( dstart -
center ).EuclideanNorm(), startAngle, angle );
2013 switch( shape->GetShape() )
2017 VECTOR2D start = shape->GetStart();
2026 EDA_ANGLE angle1 = midAngle - startAngle;
2031 m_gal->DrawArc(
center, ( start -
center ).EuclideanNorm(), startAngle, angle );
2036 m_gal->DrawCircle( shape->GetPosition(), shape->GetRadius() );
2040 if( shape->GetCornerRadius() > 0 )
2045 shape->GetRectangleWidth(),
2046 shape->GetRectangleHeight() ),
2047 shape->GetCornerRadius(),
true );
2050 m_gal->DrawPolygon( poly );
2054 m_gal->DrawRectangle( shape->GetPosition(), shape->GetEnd() );
2060 const std::vector<SHAPE*> polySegments = shape->MakeEffectiveShapes(
true );
2062 if( !polySegments.empty() )
2064 std::deque<VECTOR2D> pts;
2066 for(
SHAPE* polySegment : polySegments )
2067 pts.push_back(
static_cast<SHAPE_SEGMENT*
>( polySegment )->GetSeg().
A );
2072 for(
SHAPE* polySegment : polySegments )
2075 m_gal->DrawPolygon( pts );
2082 m_gal->DrawCurve( shape->GetStart(), shape->GetBezierC1(),
2083 shape->GetBezierC2(), shape->GetEnd() );
2094 if(
eeconfig()->m_Selection.fill_shapes )
2101 m_gal->SetIsFill(
true );
2107 m_gal->SetIsFill(
false );
2112 m_gal->SetIsStroke(
true );
2116 drawShape( aShape );
2138 m_gal->SetIsFill(
true );
2139 m_gal->SetIsStroke(
false );
2149 m_gal->SetIsFill(
true );
2150 m_gal->SetIsStroke(
false );
2153 drawShape( aShape );
2158 wxFAIL_MSG( wxT(
"Unsupported fill type" ) );
2167 m_gal->SetIsFill(
true );
2168 m_gal->SetIsStroke(
false );
2171 drawShape( aShape );
2174 float lineWidth =
getLineWidth( aShape, drawingShadows );
2178 m_gal->SetIsFill(
false );
2179 m_gal->SetIsStroke(
true );
2180 m_gal->SetLineWidth( lineWidth );
2185 drawShape( aShape );
2191 for(
SHAPE* shape : shapes )
2198 m_gal->DrawLine( a+1, b );
2200 m_gal->DrawLine( a, b );
2204 for(
SHAPE* shape : shapes )
2228 switch( aText->
Type() )
2249 if( conn && conn->
IsBus() )
2272 if( drawingShadows && font->
IsOutline() )
2277 m_gal->SetIsStroke(
false );
2278 m_gal->SetIsFill(
true );
2290 double shadowOffset = 0.0;
2292 if( drawingShadows )
2297 const double adjust = 1.2f;
2298 shadowOffset = shadowWidth/2.0f * adjust;
2312 pos.
y = bBox.
GetTop() - shadowOffset;
2315 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
2324 pos.
x = bBox.
GetLeft() - shadowOffset;
2333 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
2344 else if( drawingShadows )
2346 m_gal->SetIsFill(
false );
2347 m_gal->SetIsStroke(
true );
2357 text_offset.
x -= fudge;
2359 text_offset.
y -= fudge;
2361 text_offset.
x += fudge;
2363 text_offset.
y += fudge;
2383 int adjust =
KiROUND( sizeDiff * 0.4 );
2384 VECTOR2I adjust_offset( 0, - adjust );
2387 text_offset += adjust_offset;
2392 && !shownText.Contains( wxT(
"\n" ) ) )
2399 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2407 m_gal->DrawGlyphs( *cache );
2424 switch( aText->
Type() )
2432 showAnchor = !
static_cast<const SCH_LABEL*
>( aText )->IsDangling();
2477 float borderWidth =
getLineWidth( aTextBox, drawingShadows );
2496 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2504 m_gal->DrawGlyphs( *cache );
2521 m_gal->SetIsFill(
true );
2522 m_gal->SetIsStroke(
false );
2523 m_gal->SetLineWidth( borderWidth );
2534 m_gal->SetIsFill(
true );
2535 m_gal->SetIsStroke(
false );
2536 m_gal->SetLineWidth( borderWidth );
2557 if( transparency > 0.0 )
2558 borderColor = borderColor.
WithAlpha( borderColor.
a * ( 1.0 - transparency ) );
2562 borderColor = borderColor.
Mix( bg, 0.5f );
2566 m_gal->SetIsFill(
false );
2567 m_gal->SetIsStroke(
true );
2568 m_gal->SetStrokeColor( borderColor );
2569 m_gal->SetLineWidth( borderWidth );
2579 for(
SHAPE* shape : shapes )
2587 m_gal->DrawLine( a+1, b );
2589 m_gal->DrawLine( a, b );
2593 for(
SHAPE* shape : shapes )
2607 draw( cell, aLayer, aDimmed );
2619 if( lineWidth == 0 )
2628 m_gal->SetIsFill(
false );
2629 m_gal->SetIsStroke(
true );
2631 m_gal->SetLineWidth( (
float) lineWidth );
2635 m_gal->DrawLine( ptA, ptB );
2645 m_gal->DrawLine( a+1, b );
2647 m_gal->DrawLine( a, b );
2657 std::function<bool( wxString* )> symbolResolver =
2658 [&]( wxString* token ) ->
bool
2673 bool DNP = aSymbol->
GetDNP();
2680 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2683 draw( &field, aLayer, DNP );
2701 std::vector<SCH_PIN*> originalPins = originalSymbol->
GetGraphicalPins( unit, bodyStyle );
2705 std::vector<SCH_PIN*> tempPins = tempSymbol.
GetGraphicalPins( unit, bodyStyle );
2713 tempItem.SetFlags( aSymbol->
GetFlags() );
2733 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2736 SCH_PIN* tempPin = tempPins[ i ];
2756 for(
unsigned i = 0; i < tempPins.size(); ++i )
2759 SCH_PIN* tempPin = tempPins[ i ];
2776 std::max( bbox.
GetY() - pins.
GetY(),
2780 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2781 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2788 m_gal->AdvanceDepth();
2789 m_gal->SetIsStroke(
true );
2790 m_gal->SetIsFill(
true );
2791 m_gal->SetStrokeColor( marker_color );
2792 m_gal->SetFillColor( marker_color );
2794 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2795 std::swap( pt1.
x, pt2.
x );
2796 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2808 m_gal->AdvanceDepth();
2809 m_gal->SetIsStroke(
true );
2810 m_gal->SetIsFill(
true );
2811 m_gal->SetStrokeColor( marker_color );
2812 m_gal->SetFillColor( marker_color );
2819 int offset = 2 * strokeWidth;
2828 m_gal->AdvanceDepth();
2829 m_gal->SetFillColor( marker_color );
2855 if( std::find( layers.begin(), layers.end(), aLayer ) == layers.end() )
2875 if( shownText.IsEmpty() )
2917 if( drawingShadows &&
getFont( aField )->IsOutline() )
2919 BOX2I shadow_box = bbox;
2922 m_gal->SetIsStroke(
false );
2923 m_gal->SetIsFill(
true );
2936 if( drawingShadows )
2953 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2956 cache = aField->
GetRenderCache( shownText, textpos, attributes );
2961 m_gal->DrawGlyphs( *cache );
3021 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3024 draw( &field, aLayer,
false );
3035 if( drawingDangling )
3047 std::vector<VECTOR2I> pts;
3048 std::deque<VECTOR2D> pts2;
3053 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
3055 m_gal->SetIsStroke(
true );
3059 if( drawingShadows )
3063 m_gal->DrawPolygon( pts2 );
3067 m_gal->SetIsFill(
false );
3068 m_gal->DrawPolyline( pts2 );
3071 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
3084 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3087 draw( &field, aLayer,
false );
3098 if( drawingDangling )
3110 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
3123 if( !( drawingShadows || drawingDangling ) ||
eeconfig()->m_Selection.draw_selected_children )
3126 draw( &field, aLayer,
false );
3137 if( drawingDangling )
3149 std::vector<VECTOR2I> i_pts;
3150 std::deque<VECTOR2D> d_pts;
3154 for(
const VECTOR2I& i_pt : i_pts )
3155 d_pts.emplace_back(
VECTOR2D( i_pt.x, i_pt.y ) );
3157 m_gal->SetIsFill(
true );
3159 m_gal->SetIsStroke(
true );
3162 m_gal->DrawPolyline( d_pts );
3164 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
3178 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3181 draw( &field, aLayer,
false );
3204 std::vector<VECTOR2I> pts;
3205 std::deque<VECTOR2D> pts2;
3210 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
3212 m_gal->SetIsFill(
false );
3214 m_gal->SetIsStroke(
true );
3220 m_gal->DrawLine( pts2[0], pts2[1] );
3221 m_gal->SetIsFill(
true );
3222 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
3226 m_gal->DrawLine( pts2[0], pts2[1] );
3227 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
3231 m_gal->DrawPolyline( pts2 );
3239 bool DNP = aSheet->
GetDNP();
3246 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
3249 draw( &field, aLayer, DNP );
3268 m_gal->SetIsFill(
true );
3269 m_gal->SetIsStroke(
false );
3271 m_gal->DrawRectangle( pos, pos + size );
3278 m_gal->SetIsStroke(
true );
3280 m_gal->SetIsFill(
false );
3282 m_gal->DrawRectangle( pos, pos + size );
3291 std::max( bbox.
GetY() - pins.
GetY(),
3295 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
3296 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
3303 m_gal->SetIsStroke(
true );
3304 m_gal->SetIsFill(
true );
3308 m_gal->DrawSegment( pt1, pt2, strokeWidth );
3309 std::swap( pt1.
x, pt2.
x );
3310 m_gal->DrawSegment( pt1, pt2, strokeWidth );
3322 m_gal->AdvanceDepth();
3323 m_gal->SetIsStroke(
true );
3324 m_gal->SetIsFill(
true );
3333 int offset = 2 * strokeWidth;
3342 m_gal->AdvanceDepth();
3359 m_gal->SetIsStroke(
true );
3362 m_gal->SetIsFill(
false );
3380 bool drawingBusses = aLayer ==
LAYER_BUS;
3385 bool highlightNetclassColors =
false;
3393 if( !highlightNetclassColors && drawingNetColorHighlights )
3396 if(
m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
3424 if( highlightNetclassColors )
3429 else if( drawingBusses )
3433 if( drawingNetColorHighlights )
3445 if( drawingDangling )
3447 m_gal->SetIsFill(
false );
3448 m_gal->SetIsStroke(
true );
3449 m_gal->SetStrokeColor(
color.Brightened( 0.3 ) );
3469 draw( &line, aLayer );
3485 if( img_scale != 1.0 )
3498 m_gal->SetIsStroke(
true );
3501 m_gal->SetIsFill(
false );
3509 bm_size.
x /= img_scale;
3510 bm_size.
y /= img_scale;
3511 const VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
3514 m_gal->DrawRectangle( origin,
end );
3536 m_gal->SetIsFill( !drawingShadows );
3538 m_gal->SetIsStroke( drawingShadows );
3545 m_gal->DrawPolygon( polygon );
3552 const bool drawingShadows =
false;
3581 m_gal->DrawLine( topLeft, topLeft + width );
3582 m_gal->DrawLine( topLeft + width, topLeft + width + height );
3583 m_gal->DrawLine( topLeft + width + height, topLeft + height );
3584 m_gal->DrawLine( topLeft + height, topLeft );
3588 if(
name.IsEmpty() )
3592 int scaledSize = abs(
KiROUND(
m_gal->GetScreenWorldMatrix().GetScale().x * ptSize ) );
3593 int unscaledSize =
schIUScale.MilsToIU( ptSize );
3596 int textSize = ( scaledSize + ( unscaledSize * 2 ) ) / 3;
3602 m_gal->DrawLine( topLeft, topLeft - titleHeight );
3603 m_gal->DrawLine( topLeft - titleHeight, topLeft + width - titleHeight );
3604 m_gal->DrawLine( topLeft + width - titleHeight, topLeft + width );
3620 LINE_STYLE aLineStyle,
bool aDrawDirectLine,
int aWidth )
3622 if( aDrawDirectLine )
3624 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
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) 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
bool CanAutoplace() 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.
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 GetExcludedFromSim() const override
std::vector< SCH_SHEET_PIN * > & GetPins()
bool GetDNP() const override
Set or clear the 'Do Not Populate' flags.
KIGFX::COLOR4D GetBackgroundColor() const
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.
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.
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
bool GetDNP() const override
Set or clear the 'Do Not Populate' flag.
bool GetExcludedFromSim() const override
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.
@ 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
@ GR_TEXT_H_ALIGN_INDETERMINATE
@ GR_TEXT_V_ALIGN_INDETERMINATE
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