139 m_schematic( nullptr )
150 draw( item, aLayer,
false );
158#ifdef CONNECTIVITY_DEBUG
160 auto sch_item =
dynamic_cast<const SCH_ITEM*
>( aItem );
161 auto conn = sch_item ? sch_item->
Connection( *g_CurrentSheet ) :
nullptr;
166 auto label = conn->Name(
true );
173 m_gal->StrokeText( *
m_gal, conn->Name(
true ), pos, 0.0, 0 );
181 switch( aItem->
Type() )
187 drawBoundingBox =
false;
188 draw(
static_cast<const SCH_PIN*
>( aItem ), aLayer, aDimmed );
200 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
203 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
206 draw(
static_cast<const SCH_TEXT*
>( aItem ), aLayer, aDimmed );
212 draw(
static_cast<const SCH_TABLE*
>( aItem ), aLayer, aDimmed );
221 draw(
static_cast<const SCH_FIELD*
>( aItem ), aLayer, aDimmed );
254 if( drawBoundingBox )
270 box =
static_cast<const SCH_SYMBOL*
>( aItem )->GetBodyBoundingBox();
275 :
COLOR4D( 0.2, 0.2, 0.2, 1 ) );
344 color =
static_cast<const SCH_LINE*
>( aItem )->GetLineColor();
376 else if( shape->
GetFillMode() == FILL_T::FILLED_WITH_BG_BODYCOLOR )
418 else if(
const EDA_TEXT* otherTextItem =
dynamic_cast<const EDA_TEXT*
>( aItem ) )
421 color = otherTextItem->GetTextColor();
426 color = m_schSettings.GetLayerColor( aLayer );
428 if( aItem->IsBrightened() )
432 if( aDrawingShadows )
434 if( aItem->IsSelected() )
444 else if( aItem->IsSelected() && aDrawingShadows )
457 if( m_schSettings.m_ShowDisabled
458 || ( m_schSettings.m_ShowGraphicsDisabled && aItem->Type() !=
SCH_FIELD_T ) )
463 if( aDimmed && !( aItem->IsSelected() && aDrawingShadows ) )
470 if( aItem->GetForcedTransparency() > 0.0 )
471 color =
color.WithAlpha(
color.a * ( 1.0 - aItem->GetForcedTransparency() ) );
477float SCH_PAINTER::getLineWidth(
const SCH_ITEM* aItem,
bool aDrawingShadows,
478 bool aDrawingWireColorHighlights )
const
487 if( aDrawingShadows && aItem->
IsType( g_ScaledSelectionTypes ) )
491 if( aDrawingWireColorHighlights )
502 width += colorHighlightWidth;
509float SCH_PAINTER::getTextThickness(
const SCH_ITEM* aItem )
const
511 int pen = m_schSettings.GetDefaultPenWidth();
513 switch( aItem->
Type() )
516 pen =
static_cast<const SCH_FIELD*
>( aItem )->GetEffectiveTextPenWidth( pen );
520 pen =
static_cast<const SCH_TEXT*
>( aItem )->GetEffectiveTextPenWidth( pen );
528 pen =
static_cast<const SCH_LABEL_BASE*
>( aItem )->GetEffectiveTextPenWidth( pen );
533 pen =
static_cast<const SCH_TEXTBOX*
>( aItem )->GetEffectiveTextPenWidth( pen );
544int SCH_PAINTER::getOperatingPointTextSize()
const
547 int screenTextSize =
std::abs( (
int) m_gal->GetScreenWorldMatrix().GetScale().y * 7 );
550 return KiROUND( ( docTextSize + screenTextSize * 2 ) / 3 );
612 font->
Draw( &aGal, aText, aPosition, aAttrs, aFontMetrics );
654 callback_gal.SetIsStroke(
true );
656 font->
Draw( &callback_gal, aText, aPosition, attrs, aFontMetrics );
701 m_gal->DrawLine( a, b );
702 m_gal->DrawLine( b, c );
706void SCH_PAINTER::draw(
const LIB_SYMBOL* aSymbol,
int aLayer,
bool aDrawFields,
int aUnit,
707 int aBodyStyle,
bool aDimmed )
710 aUnit = m_schSettings.m_ShowUnit;
713 aBodyStyle = m_schSettings.m_ShowBodyStyle;
715 std::unique_ptr< LIB_SYMBOL > tmpSymbol;
720 tmpSymbol = aSymbol->
Flatten();
721 drawnSymbol = tmpSymbol.get();
727 [](
const SCH_ITEM& item,
int layer )
731 return std::find( layers.begin(), layers.end(), layer ) != layers.end();
739 if( !childOnLayer( item, aLayer ) )
748 draw( &item, aLayer, aDimmed );
753int SCH_PAINTER::internalPinDecoSize(
const SCH_PIN &aPin )
755 if( m_schSettings.m_PinSymbolSize > 0 )
756 return m_schSettings.m_PinSymbolSize;
764int SCH_PAINTER::externalPinDecoSize(
const SCH_PIN &aPin )
766 if( m_schSettings.m_PinSymbolSize > 0 )
767 return m_schSettings.m_PinSymbolSize;
774void SCH_PAINTER::drawPinDanglingIndicator(
const SCH_PIN& aPin,
const COLOR4D& aColor,
775 bool aDrawingShadows,
bool aBrightened )
780 float lineWidth = aDrawingShadows ? getShadowWidth( aBrightened )
781 : m_schSettings.GetDanglingIndicatorThickness();
785 m_gal->SetStrokeColor( aColor.
Brightened( 0.3 ) );
787 m_gal->SetIsFill(
false );
788 m_gal->SetIsStroke(
true );
789 m_gal->SetLineWidth( lineWidth );
798 bool aRotate,
int aExtraLineWidth,
const COLOR4D& aColor )
825 const double lineYOffset = aSize / 4;
826 const double arrowHead = aSize / 8;
842 topLineREnd -
VECTOR2D{ aSize * 0.7, 0 } );
844 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
845 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
849 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
850 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
858 aGal.
DrawArc( topLineREnd -
VECTOR2D{ aSize - lineYOffset * 2, -lineYOffset },
865void SCH_PAINTER::draw(
const SCH_PIN* aPin,
int aLayer,
bool aDimmed )
872 if( !isUnitAndConversionShown( aPin ) )
877 if( m_schSettings.IsPrinting() && drawingShadows )
882 const bool isDangling = m_schSettings.m_IsSymbolEditor || aPin->
HasFlag(
IS_DANGLING );
892 if( m_schSettings.IsPrinting() )
896 : m_schSettings.m_ShowHiddenPins;
911 if( drawingDangling )
919 if( m_schSettings.GetDrawBoundingBoxes() )
920 drawItemBoundingBox( aPin );
928 int textSize = getOperatingPointTextSize();
930 int textOffset =
KiROUND( textSize * 0.22 );
937 mid.
x +=
KiROUND( textOffset * 1.2 );
942 mid.
y -=
KiROUND( textOffset * 1.2 );
963 m_gal->SetIsStroke(
true );
964 m_gal->SetIsFill(
false );
965 m_gal->SetLineWidth( getLineWidth( aPin, drawingShadows ) );
966 m_gal->SetStrokeColor(
color );
967 m_gal->SetFontBold(
false );
968 m_gal->SetFontUnderlined(
false );
969 m_gal->SetFontItalic(
false );
972 const int diam = radius*2;
977 m_gal->DrawLine( p0, pos );
990 m_gal->DrawLine( p0, pos );
994 m_gal->DrawCircle( p0 + dir * radius, radius );
995 m_gal->DrawLine( p0 + dir * ( diam ), pos );
999 pc = p0 - dir * clock_size ;
1001 triLine( p0 +
VECTOR2D( dir.
y, -dir.
x) * clock_size,
1003 p0 +
VECTOR2D( -dir.
y, dir.
x) * clock_size );
1005 m_gal->DrawCircle( p0 + dir * radius, radius );
1006 m_gal->DrawLine( p0 + dir * ( diam ), pos );
1011 pc = p0 - dir * clock_size ;
1013 triLine( p0 +
VECTOR2D( dir.
y, -dir.
x) * clock_size,
1015 p0 +
VECTOR2D( -dir.
y, dir.
x) * clock_size );
1019 triLine( p0 +
VECTOR2D(dir.
x, 0) * diam,
1025 triLine( p0 +
VECTOR2D( 0, dir.
y) * diam,
1030 m_gal->DrawLine( p0, pos );
1034 m_gal->DrawLine( p0, pos );
1038 triLine( p0 +
VECTOR2D( 0, clock_size ),
1039 p0 +
VECTOR2D( -dir.
x * clock_size, 0 ),
1044 triLine( p0 +
VECTOR2D( clock_size, 0 ),
1045 p0 +
VECTOR2D( 0, -dir.
y * clock_size ),
1051 m_gal->DrawLine( p0, pos );
1055 triLine( p0 +
VECTOR2D(dir.
x, 0) * diam,
1061 triLine( p0 +
VECTOR2D( 0, dir.
y) * diam,
1068 m_gal->DrawLine( p0, pos );
1077 m_gal->DrawLine( p0, pos );
1079 m_gal->DrawLine( p0 -
VECTOR2D( dir.
x + dir.
y, dir.
y - dir.
x ) * radius,
1080 p0 +
VECTOR2D( dir.
x + dir.
y, dir.
y - dir.
x ) * radius );
1081 m_gal->DrawLine( p0 -
VECTOR2D( dir.
x - dir.
y, dir.
x + dir.
y ) * radius,
1082 p0 +
VECTOR2D( dir.
x - dir.
y, dir.
x + dir.
y ) * radius );
1087 if( drawingShadows && !
eeconfig()->m_Selection.draw_selected_children )
1091 float nameStrokeWidth = getLineWidth( aPin,
false );
1092 float numStrokeWidth = getLineWidth( aPin,
false );
1097 float shadowWidth = 0.0f;
1099 if( drawingShadows )
1106 m_schSettings.m_ShowPinsElectricalType,
1107 m_schSettings.m_ShowPinAltIcons );
1109 const auto textRendersAsBitmap = [&](
KIGFX::GAL& aGal,
int aTextSize )
1121 const auto drawTextInfo =
1125 const bool renderTextAsBitmap = textRendersAsBitmap( *m_gal, aTextInfo.
m_TextSize );
1128 m_gal->SetStrokeColor( aColor );
1129 m_gal->SetFillColor( aColor );
1139 if( drawingShadows )
1154 else if( nonCached( aPin ) && renderTextAsBitmap )
1167 const auto getColorForLayer = [&](
int aDrawnLayer )
1170 return getRenderColor( aPin,
LAYER_HIDDEN, drawingShadows, aDimmed );
1172 return getRenderColor( aPin, aDrawnLayer, drawingShadows, aDimmed );
1177 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> numInfo = cache.
GetPinNumberInfo( shadowWidth ) )
1179 drawTextInfo( *numInfo, getColorForLayer(
LAYER_PINNUM ) );
1182 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> nameInfo = cache.
GetPinNameInfo( shadowWidth ) )
1184 drawTextInfo( *nameInfo, getColorForLayer(
LAYER_PINNAM ) );
1196 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> elecTypeInfo =
1205void SCH_PAINTER::drawAnchor(
const VECTOR2I& aPos,
bool aDrawingShadows )
1207 if( m_schSettings.IsPrinting() )
1212 const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
1219 m_gal->SetStrokeColor(
color );
1220 m_gal->SetIsStroke(
true );
1221 m_gal->SetLineWidth( aDrawingShadows ? getShadowWidth(
false )
1222 : m_schSettings.GetDanglingIndicatorThickness() );
1224 m_gal->DrawLine( aPos -
VECTOR2I( radius, 0 ), aPos +
VECTOR2I( radius, 0 ) );
1225 m_gal->DrawLine( aPos -
VECTOR2I( 0, radius ), aPos +
VECTOR2I( 0, radius ) );
1231void SCH_PAINTER::drawDanglingIndicator(
const VECTOR2I& aPos,
const COLOR4D& aColor,
int aWidth,
1232 bool aDangling,
bool aDrawingShadows,
bool aBrightened )
1234 if( m_schSettings.IsPrinting() )
1247 m_gal->SetStrokeColor( aColor.
Brightened( 0.3 ) );
1248 m_gal->SetIsStroke(
true );
1249 m_gal->SetIsFill(
false );
1250 m_gal->SetLineWidth( aDrawingShadows ? getShadowWidth( aBrightened )
1251 : m_schSettings.GetDanglingIndicatorThickness() );
1253 m_gal->DrawRectangle( aPos - radius, aPos + radius );
1259 bool highlightNetclassColors =
false;
1269 if( m_schSettings.IsPrinting() && drawingShadows )
1277 if( highlightNetclassColors && aLayer == aJct->
GetLayer() )
1280 color = getRenderColor( aJct, aJct->
GetLayer(), drawingShadows );
1284 if( junctionSize > 1 )
1286 m_gal->SetIsStroke( drawingShadows );
1287 m_gal->SetLineWidth( getLineWidth( aJct, drawingShadows ) );
1288 m_gal->SetStrokeColor(
color );
1289 m_gal->SetIsFill( !drawingShadows );
1290 m_gal->SetFillColor(
color );
1291 m_gal->DrawCircle( aJct->
GetPosition(), junctionSize );
1296void SCH_PAINTER::draw(
const SCH_LINE* aLine,
int aLayer )
1301 bool drawingBusses = aLayer ==
LAYER_BUS;
1305 bool highlightNetclassColors =
false;
1306 double highlightAlpha = 0.6;
1315 if( !highlightNetclassColors && drawingNetColorHighlights )
1318 if( m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
1321 if( m_schSettings.IsPrinting() && drawingShadows )
1329 if( aLine->
IsNew() && drawingDangling )
1333 float width = getLineWidth( aLine, drawingShadows, drawingNetColorHighlights );
1336 if( highlightNetclassColors )
1341 else if( drawingBusses )
1345 if( drawingNetColorHighlights )
1357 if( ( drawingDangling || drawingShadows ) && !aLine->
IsNew() )
1386 if( drawingDangling )
1391 int textSize = getOperatingPointTextSize();
1393 int textOffset =
KiROUND( textSize * 0.22 );
1398 pos.
y -= textOffset;
1404 pos.
x +=
KiROUND( textOffset * 1.2 );
1420 m_gal->SetIsStroke(
true );
1421 m_gal->SetStrokeColor(
color );
1422 m_gal->SetLineWidth( width );
1437 m_gal->DrawLine( a+1, b );
1439 m_gal->DrawLine( a, b );
1445void SCH_PAINTER::draw(
const SCH_SHAPE* aShape,
int aLayer,
bool aDimmed )
1447 if( !isUnitAndConversionShown( aShape ) )
1450 if( aShape->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1455 if( m_schSettings.IsPrinting() && drawingShadows )
1459 COLOR4D color = getRenderColor( aShape, aLayer, drawingShadows, aDimmed );
1467 switch( shape->GetShape() )
1471 VECTOR2D start = shape->GetStart();
1480 EDA_ANGLE angle1 = midAngle - startAngle;
1485 m_gal->DrawArc( center, ( start - center ).EuclideanNorm(), startAngle, angle );
1490 m_gal->DrawCircle( shape->GetPosition(), shape->GetRadius() );
1494 m_gal->DrawRectangle( shape->GetPosition(), shape->GetEnd() );
1499 const std::vector<SHAPE*> polySegments = shape->MakeEffectiveShapes(
true );
1501 if( !polySegments.empty() )
1503 std::deque<VECTOR2D> pts;
1505 for(
SHAPE* polySegment : polySegments )
1506 pts.push_back(
static_cast<SHAPE_SEGMENT*
>( polySegment )->GetSeg().
A );
1511 for(
SHAPE* polySegment : polySegments )
1514 m_gal->DrawPolygon( pts );
1521 m_gal->DrawCurve( shape->GetStart(), shape->GetBezierC1(),
1522 shape->GetBezierC2(), shape->GetEnd() );
1533 if(
eeconfig()->m_Selection.fill_shapes )
1538 m_gal->SetIsFill( aShape->
IsFilled() );
1540 m_gal->SetIsFill(
true );
1542 m_gal->SetIsStroke(
false );
1543 m_gal->SetFillColor(
color );
1547 m_gal->SetIsStroke(
true );
1548 m_gal->SetIsFill(
false );
1549 m_gal->SetLineWidth( getLineWidth( aShape,
true ) );
1550 m_gal->SetStrokeColor(
color );
1553 drawShape( aShape );
1569 if( !m_schSettings.PrintBlackAndWhiteReq() )
1571 m_gal->SetIsFill(
true );
1572 m_gal->SetIsStroke(
false );
1573 m_gal->SetFillColor(
color );
1575 drawShape( aShape );
1586 m_gal->SetIsFill(
true );
1587 m_gal->SetIsStroke(
false );
1588 m_gal->SetFillColor(
color );
1590 drawShape( aShape );
1593 float lineWidth = getLineWidth( aShape, drawingShadows );
1597 m_gal->SetIsFill(
false );
1598 m_gal->SetIsStroke(
true );
1599 m_gal->SetLineWidth( lineWidth );
1600 m_gal->SetStrokeColor(
color );
1604 drawShape( aShape );
1610 for(
SHAPE* shape : shapes )
1617 m_gal->DrawLine( a+1, b );
1619 m_gal->DrawLine( a, b );
1623 for(
SHAPE* shape : shapes )
1631void SCH_PAINTER::draw(
const SCH_TEXT* aText,
int aLayer,
bool aDimmed )
1633 if( !isUnitAndConversionShown( aText ) )
1636 if( aText->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1641 if( m_schSettings.IsPrinting() && drawingShadows )
1647 switch( aText->
Type() )
1659 COLOR4D color = getRenderColor( aText, aLayer, drawingShadows, aDimmed );
1668 if( conn && conn->
IsBus() )
1674 if( m_schSettings.m_IsSymbolEditor ||
eeconfig()->m_Appearance.show_hidden_fields )
1680 m_gal->SetStrokeColor(
color );
1681 m_gal->SetFillColor(
color );
1691 if( drawingShadows && font->
IsOutline() )
1696 m_gal->SetIsStroke(
false );
1697 m_gal->SetIsFill(
true );
1709 double shadowOffset = 0.0;
1711 if( drawingShadows )
1713 double shadowWidth = getShadowWidth( !aText->
IsSelected() );
1716 const double adjust = 1.2f;
1717 shadowOffset = shadowWidth/2.0f * adjust;
1731 pos.
y = bBox.
GetTop() - shadowOffset;
1734 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
1743 pos.
x = bBox.
GetLeft() - shadowOffset;
1752 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
1763 else if( drawingShadows )
1765 m_gal->SetIsFill(
false );
1766 m_gal->SetIsStroke(
true );
1776 text_offset.
x -= fudge;
1778 text_offset.
y -= fudge;
1780 text_offset.
x += fudge;
1782 text_offset.
y += fudge;
1791 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1792 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1802 int adjust =
KiROUND( sizeDiff * 0.4 );
1803 VECTOR2I adjust_offset( 0, - adjust );
1806 text_offset += adjust_offset;
1809 if( nonCached( aText )
1811 && !shownText.Contains( wxT(
"\n" ) ) )
1818 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
1826 m_gal->DrawGlyphs( *cache );
1843 switch( aText->
Type() )
1851 showAnchor = !
static_cast<const SCH_LABEL*
>( aText )->IsDangling();
1868 drawAnchor( aText->
GetPosition(), drawingShadows );
1873void SCH_PAINTER::draw(
const SCH_TEXTBOX* aTextBox,
int aLayer,
bool aDimmed )
1883 if( !isUnitAndConversionShown( aTextBox ) )
1886 if( aTextBox->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1891 if( m_schSettings.IsPrinting() && drawingShadows )
1894 COLOR4D color = getRenderColor( aTextBox, aLayer, drawingShadows, aDimmed );
1896 float borderWidth = getLineWidth( aTextBox, drawingShadows );
1910 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1911 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1915 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
1923 m_gal->DrawGlyphs( *cache );
1935 m_gal->SetFillColor(
color );
1936 m_gal->SetStrokeColor(
color );
1940 m_gal->SetIsFill(
true );
1941 m_gal->SetIsStroke(
false );
1942 m_gal->SetLineWidth( borderWidth );
1950 if( aTextBox->
IsFilled() && !m_schSettings.PrintBlackAndWhiteReq() )
1952 m_gal->SetIsFill(
true );
1953 m_gal->SetIsStroke(
false );
1954 m_gal->SetLineWidth( borderWidth );
1969 if( m_schSettings.m_OverrideItemColors || aTextBox->
IsBrightened()
1972 borderColor = m_schSettings.GetLayerColor( aLayer );
1975 if( transparency > 0.0 )
1976 borderColor = borderColor.
WithAlpha( borderColor.
a * ( 1.0 - transparency ) );
1980 borderColor = borderColor.
Mix( bg, 0.5f );
1984 m_gal->SetIsFill(
false );
1985 m_gal->SetIsStroke(
true );
1986 m_gal->SetStrokeColor( borderColor );
1987 m_gal->SetLineWidth( borderWidth );
1997 for(
SHAPE* shape : shapes )
2005 m_gal->DrawLine( a+1, b );
2007 m_gal->DrawLine( a, b );
2011 for(
SHAPE* shape : shapes )
2019void SCH_PAINTER::draw(
const SCH_TABLE* aTable,
int aLayer,
bool aDimmed )
2025 draw( cell, aLayer, aDimmed );
2040 lineWidth = stroke.GetWidth();
2041 color = stroke.GetColor();
2042 lineStyle = stroke.GetLineStyle();
2044 if( lineWidth == 0 )
2045 lineWidth = m_schSettings.GetDefaultPenWidth();
2053 m_gal->SetIsFill(
false );
2054 m_gal->SetIsStroke(
true );
2055 m_gal->SetStrokeColor(
color );
2056 m_gal->SetLineWidth( (
float) lineWidth );
2060 [&](
const SHAPE& shape )
2067 m_gal->DrawLine( a+1, b );
2069 m_gal->DrawLine( a, b );
2078 m_gal->DrawLine( ptA, ptB );
2092 m_gal->DrawRectangle( ptA, ptB );
2097 strokeShape( rect );
2107 for(
int col = 0; col < aTable->
GetColCount() - 1; ++col )
2109 for(
int row = 0; row < aTable->
GetRowCount(); ++row )
2118 strokeLine( topRight, cell->
GetEnd() );
2125 for(
int row = 0; row < aTable->
GetRowCount() - 1; ++row )
2127 for(
int col = 0; col < aTable->
GetColCount(); ++col )
2136 strokeLine( botLeft, cell->
GetEnd() );
2164 strokeRect( pos, end );
2170wxString SCH_PAINTER::expandLibItemTextVars(
const wxString& aSourceText,
2173 std::function<bool( wxString* )> symbolResolver =
2174 [&]( wxString* token ) ->
bool
2179 return aSymbolContext->
ResolveTextVar( &m_schematic->CurrentSheet(), token );
2189 bool DNP = aSymbol->
GetDNP();
2193 if( m_schSettings.IsPrinting() && drawingShadows )
2196 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2199 draw( &field, aLayer, DNP || markExclusion );
2211 int unit = m_schematic ? aSymbol->
GetUnitSelection( &m_schematic->CurrentSheet() ) : 1;
2217 std::vector<SCH_PIN*> originalPins = originalSymbol->
GetPins( unit, bodyStyle );
2221 std::vector<SCH_PIN*> tempPins = tempSymbol.
GetPins( unit, bodyStyle );
2229 tempItem.SetFlags( aSymbol->
GetFlags() );
2237 textItem->
SetText( expandLibItemTextVars( textItem->
GetText(), aSymbol ) );
2244 textboxItem->
SetText( expandLibItemTextVars( textboxItem->
GetText(), aSymbol ) );
2249 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2252 SCH_PIN* tempPin = tempPins[ i ];
2271 DNP || markExclusion );
2273 for(
unsigned i = 0; i < tempPins.size(); ++i )
2276 SCH_PIN* tempPin = tempPins[ i ];
2284 if( DNP || markExclusion )
2293 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2294 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2301 m_gal->AdvanceDepth();
2302 m_gal->SetIsStroke(
true );
2303 m_gal->SetIsFill(
true );
2304 m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ) );
2305 m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ) );
2307 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2308 std::swap( pt1.
x, pt2.
x );
2309 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2314void SCH_PAINTER::draw(
const SCH_FIELD* aField,
int aLayer,
bool aDimmed )
2318 if( m_schSettings.IsPrinting() && drawingShadows )
2324 if( !isUnitAndConversionShown( aField ) )
2327 if( aField->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
2334 if( std::find( layers.begin(), layers.end(), aLayer ) == layers.end() )
2339 COLOR4D color = getRenderColor( aField, aLayer, drawingShadows, aDimmed );
2344 : m_schSettings.m_ShowHiddenFields;
2354 if( shownText.IsEmpty() )
2390 if( m_schSettings.GetDrawBoundingBoxes() )
2391 drawItemBoundingBox( aField );
2393 m_gal->SetStrokeColor(
color );
2394 m_gal->SetFillColor(
color );
2396 if( drawingShadows && getFont( aField )->IsOutline() )
2398 BOX2I shadow_box = bbox;
2401 m_gal->SetIsStroke(
false );
2402 m_gal->SetIsFill(
true );
2415 if( drawingShadows )
2420 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
2421 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
2425 if( nonCached( aField ) && aField->
RenderAsBitmap( m_gal->GetWorldScale() ) )
2427 bitmapText( *m_gal, shownText, textpos, attributes );
2432 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2435 cache = aField->
GetRenderCache( shownText, textpos, attributes );
2440 m_gal->DrawGlyphs( *cache );
2452 if( aField->
IsMoving() && m_schematic )
2456 m_gal->SetLineWidth( m_schSettings.GetOutlineWidth() );
2458 m_gal->DrawLine( aField->
GetPosition(), parentPos );
2462 drawAnchor( aField->
GetPosition(), drawingShadows );
2471 if( m_schSettings.IsPrinting() && drawingShadows )
2476 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2479 draw( &field, aLayer,
false );
2490 if( drawingDangling )
2502 std::vector<VECTOR2I> pts;
2503 std::deque<VECTOR2D> pts2;
2508 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
2510 m_gal->SetIsStroke(
true );
2511 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2512 m_gal->SetStrokeColor(
color );
2514 if( drawingShadows )
2516 m_gal->SetIsFill(
eeconfig()->m_Selection.fill_shapes );
2517 m_gal->SetFillColor(
color );
2518 m_gal->DrawPolygon( pts2 );
2522 m_gal->SetIsFill(
false );
2523 m_gal->DrawPolyline( pts2 );
2526 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2530void SCH_PAINTER::draw(
const SCH_LABEL* aLabel,
int aLayer )
2534 if( m_schSettings.IsPrinting() && drawingShadows )
2539 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2542 draw( &field, aLayer,
false );
2553 if( drawingDangling )
2565 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2573 if( m_schSettings.IsPrinting() && drawingShadows )
2578 if( !( drawingShadows || drawingDangling ) ||
eeconfig()->m_Selection.draw_selected_children )
2581 draw( &field, aLayer,
false );
2592 if( drawingDangling )
2611 if( conn && conn->
IsBus() )
2612 color = getRenderColor( aLabel,
LAYER_BUS, drawingShadows, aDimmed );
2615 std::vector<VECTOR2I> pts;
2616 std::deque<VECTOR2D> pts2;
2621 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
2623 m_gal->SetIsFill(
true );
2625 m_gal->SetIsStroke(
true );
2626 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2627 m_gal->SetStrokeColor(
color );
2628 m_gal->DrawPolyline( pts2 );
2630 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2641 if( m_schSettings.IsPrinting() && drawingShadows )
2644 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2647 draw( &field, aLayer,
false );
2670 std::vector<VECTOR2I> pts;
2671 std::deque<VECTOR2D> pts2;
2676 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
2678 m_gal->SetIsFill(
false );
2679 m_gal->SetFillColor(
color );
2680 m_gal->SetIsStroke(
true );
2681 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2682 m_gal->SetStrokeColor(
color );
2686 m_gal->DrawLine( pts2[0], pts2[1] );
2687 m_gal->SetIsFill(
true );
2688 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
2692 m_gal->DrawLine( pts2[0], pts2[1] );
2693 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
2697 m_gal->DrawPolyline( pts2 );
2702void SCH_PAINTER::draw(
const SCH_SHEET* aSheet,
int aLayer )
2705 bool DNP = aSheet->
GetDNP();
2709 if( m_schSettings.IsPrinting() && drawingShadows )
2712 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2715 draw( &field, aLayer, DNP || markExclusion );
2718 draw(
static_cast<SCH_HIERLABEL*
>( sheetPin ), aLayer, DNP || markExclusion );
2731 if( !m_schSettings.PrintBlackAndWhiteReq() )
2734 m_gal->SetIsFill(
true );
2735 m_gal->SetIsStroke(
false );
2737 m_gal->DrawRectangle( pos, pos + size );
2743 m_gal->SetStrokeColor( getRenderColor( aSheet,
LAYER_SHEET, drawingShadows ) );
2744 m_gal->SetIsStroke(
true );
2745 m_gal->SetLineWidth( getLineWidth( aSheet, drawingShadows ) );
2746 m_gal->SetIsFill(
false );
2748 m_gal->DrawRectangle( pos, pos + size );
2751 if( DNP || markExclusion )
2760 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2761 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2768 m_gal->SetIsStroke(
true );
2769 m_gal->SetIsFill(
true );
2770 m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ) );
2771 m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ) );
2773 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2774 std::swap( pt1.
x, pt2.
x );
2775 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2784 if( m_schSettings.IsPrinting() && drawingShadows )
2790 m_gal->SetIsStroke(
true );
2791 m_gal->SetLineWidth( getLineWidth( aNC, drawingShadows ) );
2792 m_gal->SetStrokeColor( getRenderColor( aNC,
LAYER_NOCONNECT, drawingShadows ) );
2793 m_gal->SetIsFill(
false );
2796 int delta = std::max( aNC->
GetSize(), m_schSettings.GetDefaultPenWidth() * 3 ) / 2;
2811 bool drawingBusses = aLayer ==
LAYER_BUS;
2813 if( m_schSettings.IsPrinting() && drawingShadows )
2816 bool highlightNetclassColors =
false;
2824 if( !highlightNetclassColors && drawingNetColorHighlights )
2827 if( m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
2852 if( highlightNetclassColors )
2857 else if( drawingBusses )
2861 if( drawingNetColorHighlights )
2873 if( drawingDangling )
2875 m_gal->SetIsFill(
false );
2876 m_gal->SetIsStroke(
true );
2877 m_gal->SetStrokeColor(
color.Brightened( 0.3 ) );
2878 m_gal->SetLineWidth( m_schSettings.GetDanglingIndicatorThickness() );
2888 m_gal->DrawCircle( aEntry->
GetEnd(),
2897 draw( &line, aLayer );
2913 if( img_scale != 1.0 )
2914 m_gal->Scale(
VECTOR2D( img_scale, img_scale ) );
2918 m_gal->DrawBitmap( refImage.
GetImage() );
2926 m_gal->SetIsStroke(
true );
2927 m_gal->SetStrokeColor(
color );
2928 m_gal->SetLineWidth ( getShadowWidth( aBitmap->
IsBrightened() ) );
2929 m_gal->SetIsFill(
false );
2936 bm_size.
x /= img_scale;
2937 bm_size.
y /= img_scale;
2938 const VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
2939 const VECTOR2D end = origin + bm_size;
2941 m_gal->DrawRectangle( origin, end );
2953 if( m_schSettings.IsPrinting() && drawingShadows )
2963 m_gal->SetIsFill( !drawingShadows );
2964 m_gal->SetFillColor(
color );
2965 m_gal->SetIsStroke( drawingShadows );
2966 m_gal->SetLineWidth( getLineWidth( aMarker, drawingShadows ) );
2967 m_gal->SetStrokeColor(
color );
2972 m_gal->DrawPolygon( polygon );
constexpr EDA_IU_SCALE schIUScale
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
std::optional< BOX2I > OPT_BOX2I
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
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
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
KIFONT::FONT * GetFont() const
BOX2I GetTextBox(int aLine=-1) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
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
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.
const MATRIX3x3D & GetScreenWorldMatrix() const
Get the screen <-> world transformation matrix.
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.
Contains all the knowledge about how to draw graphical object onto any particular output device.
GAL * m_gal
Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.
const wxString & GetDefaultFont() const
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
bool GetDrawBoundingBoxes() const
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.
COLOR4D getRenderColor(const SCH_ITEM *aItem, int aLayer, bool aDrawingShadows, bool aDimmed=false) const
float getShadowWidth(bool aForHighlight) const
KIFONT::FONT * getFont(const EDA_TEXT *aText) const
void draw(const EDA_ITEM *, int, bool aDimmed)
static std::vector< KICAD_T > g_ScaledSelectionTypes
SCH_RENDER_SETTINGS m_schSettings
bool nonCached(const EDA_ITEM *aItem)
void drawItemBoundingBox(const EDA_ITEM *aItem)
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.
std::vector< SCH_PIN * > GetPins(int aUnit=0, int aBodyStyle=0) const
Return a list of pin object pointers from the draw item list.
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
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
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.
LINE_STYLE GetLineStyle() const
VECTOR2I GetPosition() const override
bool IsDanglingStart() const
virtual STROKE_PARAMS GetStroke() const override
bool IsDanglingEnd() const
int GetPenWidth() const override
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.
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
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...
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
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
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)
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
bool m_OverrideItemColors
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()
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
Set or clear the 'Do Not Populate' flaga.
KIGFX::COLOR4D GetBackgroundColor() const
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.
TRANSFORM & GetTransform()
int GetOrientation() const
Get the display symbol orientation.
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
BOX2I GetBodyAndPinsBoundingBox() const
Return a bounding box for the symbol body and pins but not the fields.
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly)
Populate a std::vector with SCH_FIELDs.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
BOX2I GetBodyBoundingBox() const
Return a bounding box for the symbol body but not the pins or fields.
const STROKE_PARAMS & GetSeparatorsStroke() const
bool StrokeExternal() const
std::vector< SCH_TABLECELL * > GetCells() const
const STROKE_PARAMS & GetBorderStroke() const
VECTOR2I GetPosition() const override
SCH_TABLECELL * GetCell(int aRow, int aCol) const
bool StrokeColumns() const
bool StrokeHeader() const
virtual wxString GetShownText(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.
void BooleanSubtract(const SHAPE_POLY_SET &b, POLYGON_MODE aFastMode)
Perform boolean polyset difference For aFastMode meaning, see function booleanOp.
void Fracture(POLYGON_MODE aFastMode)
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new outline to the set and returns its index.
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.
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.
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)
bool GetDNP() const
Set or clear the 'Do Not Populate' flaga.
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.
@ ARC
use RECTANGLE instead of RECT to avoid collision in a Windows header
@ FILLED_WITH_BG_BODYCOLOR
int GetPenSizeForDemiBold(int aTextSize)
int Clamp_Text_PenSize(int aPenSize, int aSize, bool aStrict)
Pen width should not allow characters to become cluttered up in their own fatness.
@ LAYER_DRAW_BITMAPS
to handle and draw images bitmaps
SCH_LAYER_ID
Eeschema drawing layers.
@ LAYER_EXCLUDED_FROM_SIM
@ LAYER_NET_COLOR_HIGHLIGHT
@ LAYER_DEVICE_BACKGROUND
@ LAYER_SELECTION_SHADOWS
@ LAYER_SCHEMATIC_BACKGROUND
#define UNIMPLEMENTED_FOR(type)
The Cairo implementation of the graphics abstraction layer.
static LIB_SYMBOL * dummy()
Used when a LIB_SYMBOL is not found in library to draw a dummy shape.
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)
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
@ PT_NC
not connected (must be left open)
#define TARGET_BUSENTRY_RADIUS
#define BITMAP_FONT_SIZE_THRESHOLD
static int externalPinDecoSize(const RENDER_SETTINGS *aSettings, const SCH_PIN &aPin)
Utility for getting the size of the 'external' pin decorators (as a radius)
static int internalPinDecoSize(const RENDER_SETTINGS *aSettings, const SCH_PIN &aPin)
Utility for getting the size of the 'internal' pin decorators (as a radius)
#define TARGET_PIN_RADIUS
Utility functions for working with shapes.
std::vector< FAB_LAYER_COLOR > dummy
LINE_STYLE
Dashed line types.
constexpr int MilsToIU(int mils) const
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