102 m_schematic( nullptr )
113 draw( item, aLayer,
false );
121#ifdef CONNECTIVITY_DEBUG
123 auto sch_item =
dynamic_cast<const SCH_ITEM*
>( aItem );
124 auto conn = sch_item ? sch_item->
Connection( *g_CurrentSheet ) :
nullptr;
129 auto label = conn->Name(
true );
136 m_gal->StrokeText( *
m_gal, conn->Name(
true ), pos, 0.0, 0 );
144 switch( aItem->
Type() )
150 drawBoundingBox =
false;
151 draw(
static_cast<const SCH_PIN*
>( aItem ), aLayer, aDimmed );
163 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
166 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
169 draw(
static_cast<const SCH_TEXT*
>( aItem ), aLayer, aDimmed );
175 draw(
static_cast<const SCH_TABLE*
>( aItem ), aLayer, aDimmed );
184 draw(
static_cast<const SCH_FIELD*
>( aItem ), aLayer, aDimmed );
217 if( drawBoundingBox )
233 box =
static_cast<const SCH_SYMBOL*
>( aItem )->GetBodyBoundingBox();
238 :
COLOR4D( 0.2, 0.2, 0.2, 1 ) );
307 color =
static_cast<const SCH_LINE*
>( aItem )->GetLineColor();
340 else if( shape->
GetFillMode() == FILL_T::FILLED_WITH_BG_BODYCOLOR )
383 else if(
const EDA_TEXT* otherTextItem =
dynamic_cast<const EDA_TEXT*
>( aItem ) )
386 color = otherTextItem->GetTextColor();
391 color = m_schSettings.GetLayerColor( aLayer );
393 if( aItem->IsBrightened() )
397 if( aDrawingShadows )
399 if( aItem->IsSelected() )
410 else if( aItem->IsSelected() && aDrawingShadows )
414 else if( aItem->IsSelected()
423 if( m_schSettings.m_ShowDisabled
424 || ( m_schSettings.m_ShowGraphicsDisabled && aItem->Type() !=
SCH_FIELD_T ) )
429 if( aDimmed && !( aItem->IsSelected() && aDrawingShadows ) )
436 if( aItem->GetForcedTransparency() > 0.0 )
437 color =
color.WithAlpha(
color.a * ( 1.0 - aItem->GetForcedTransparency() ) );
443float SCH_PAINTER::getLineWidth(
const SCH_ITEM* aItem,
bool aDrawingShadows,
444 bool aDrawingWireColorHighlights )
const
453 if( aDrawingShadows && aItem->
IsType( g_ScaledSelectionTypes ) )
457 if( aDrawingWireColorHighlights )
468 width += colorHighlightWidth;
475float SCH_PAINTER::getTextThickness(
const SCH_ITEM* aItem )
const
477 int pen = m_schSettings.GetDefaultPenWidth();
479 switch( aItem->
Type() )
482 pen =
static_cast<const SCH_FIELD*
>( aItem )->GetEffectiveTextPenWidth( pen );
486 pen =
static_cast<const SCH_TEXT*
>( aItem )->GetEffectiveTextPenWidth( pen );
494 pen =
static_cast<const SCH_LABEL_BASE*
>( aItem )->GetEffectiveTextPenWidth( pen );
499 pen =
static_cast<const SCH_TEXTBOX*
>( aItem )->GetEffectiveTextPenWidth( pen );
510int SCH_PAINTER::getOperatingPointTextSize()
const
513 int screenTextSize =
std::abs( (
int) m_gal->GetScreenWorldMatrix().GetScale().y * 7 );
516 return KiROUND( ( docTextSize + screenTextSize * 2 ) / 3 );
578 font->
Draw( &aGal, aText, aPosition, aAttrs, aFontMetrics );
620 callback_gal.SetIsStroke(
true );
622 font->
Draw( &callback_gal, aText, aPosition, attrs, aFontMetrics );
667 m_gal->DrawLine( a, b );
668 m_gal->DrawLine( b, c );
672void SCH_PAINTER::draw(
const LIB_SYMBOL* aSymbol,
int aLayer,
bool aDrawFields,
int aUnit,
673 int aBodyStyle,
bool aDimmed )
676 aUnit = m_schSettings.m_ShowUnit;
679 aBodyStyle = m_schSettings.m_ShowBodyStyle;
681 std::unique_ptr< LIB_SYMBOL > tmpSymbol;
686 tmpSymbol = aSymbol->
Flatten();
687 drawnSymbol = tmpSymbol.get();
693 [](
const SCH_ITEM& item,
int layer )
697 return std::find( layers.begin(), layers.end(), layer ) != layers.end();
705 if( !childOnLayer( item, aLayer ) )
714 draw( &item, aLayer, aDimmed );
719int SCH_PAINTER::internalPinDecoSize(
const SCH_PIN &aPin )
721 if( m_schSettings.m_PinSymbolSize > 0 )
722 return m_schSettings.m_PinSymbolSize;
730int SCH_PAINTER::externalPinDecoSize(
const SCH_PIN &aPin )
732 if( m_schSettings.m_PinSymbolSize > 0 )
733 return m_schSettings.m_PinSymbolSize;
740void SCH_PAINTER::drawPinDanglingIndicator(
const SCH_PIN& aPin,
const COLOR4D& aColor,
741 bool aDrawingShadows,
bool aBrightened )
746 float lineWidth = aDrawingShadows ? getShadowWidth( aBrightened )
747 : m_schSettings.GetDanglingIndicatorThickness();
751 m_gal->SetStrokeColor( aColor.
Brightened( 0.3 ) );
753 m_gal->SetIsFill(
false );
754 m_gal->SetIsStroke(
true );
755 m_gal->SetLineWidth( lineWidth );
764 bool aRotate,
int aExtraLineWidth,
const COLOR4D& aColor )
791 const double lineYOffset = aSize / 4;
792 const double arrowHead = aSize / 8;
808 topLineREnd -
VECTOR2D{ aSize * 0.7, 0 } );
810 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
811 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
815 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
816 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
824 aGal.
DrawArc( topLineREnd -
VECTOR2D{ aSize - lineYOffset * 2, -lineYOffset },
831void SCH_PAINTER::draw(
const SCH_PIN* aPin,
int aLayer,
bool aDimmed )
838 if( !isUnitAndConversionShown( aPin ) )
843 if( m_schSettings.IsPrinting() && drawingShadows )
848 const bool isDangling = m_schSettings.m_IsSymbolEditor || aPin->
HasFlag(
IS_DANGLING );
858 if( m_schSettings.IsPrinting() )
862 : m_schSettings.m_ShowHiddenPins;
877 if( drawingDangling )
885 if( m_schSettings.GetDrawBoundingBoxes() )
886 drawItemBoundingBox( aPin );
894 int textSize = getOperatingPointTextSize();
896 int textOffset =
KiROUND( textSize * 0.22 );
903 mid.
x +=
KiROUND( textOffset * 1.2 );
908 mid.
y -=
KiROUND( textOffset * 1.2 );
929 m_gal->SetIsStroke(
true );
930 m_gal->SetIsFill(
false );
931 m_gal->SetLineWidth( getLineWidth( aPin, drawingShadows ) );
932 m_gal->SetStrokeColor(
color );
933 m_gal->SetFontBold(
false );
934 m_gal->SetFontUnderlined(
false );
935 m_gal->SetFontItalic(
false );
938 const int diam = radius*2;
943 m_gal->DrawLine( p0, pos );
956 m_gal->DrawLine( p0, pos );
960 m_gal->DrawCircle( p0 + dir * radius, radius );
961 m_gal->DrawLine( p0 + dir * ( diam ), pos );
965 pc = p0 - dir * clock_size ;
967 triLine( p0 +
VECTOR2D( dir.
y, -dir.
x) * clock_size,
971 m_gal->DrawCircle( p0 + dir * radius, radius );
972 m_gal->DrawLine( p0 + dir * ( diam ), pos );
977 pc = p0 - dir * clock_size ;
979 triLine( p0 +
VECTOR2D( dir.
y, -dir.
x) * clock_size,
991 triLine( p0 +
VECTOR2D( 0, dir.
y) * diam,
996 m_gal->DrawLine( p0, pos );
1000 m_gal->DrawLine( p0, pos );
1004 triLine( p0 +
VECTOR2D( 0, clock_size ),
1005 p0 +
VECTOR2D( -dir.
x * clock_size, 0 ),
1010 triLine( p0 +
VECTOR2D( clock_size, 0 ),
1011 p0 +
VECTOR2D( 0, -dir.
y * clock_size ),
1017 m_gal->DrawLine( p0, pos );
1021 triLine( p0 +
VECTOR2D(dir.
x, 0) * diam,
1027 triLine( p0 +
VECTOR2D( 0, dir.
y) * diam,
1034 m_gal->DrawLine( p0, pos );
1043 m_gal->DrawLine( p0, pos );
1045 m_gal->DrawLine( p0 -
VECTOR2D( dir.
x + dir.
y, dir.
y - dir.
x ) * radius,
1046 p0 +
VECTOR2D( dir.
x + dir.
y, dir.
y - dir.
x ) * radius );
1047 m_gal->DrawLine( p0 -
VECTOR2D( dir.
x - dir.
y, dir.
x + dir.
y ) * radius,
1048 p0 +
VECTOR2D( dir.
x - dir.
y, dir.
x + dir.
y ) * radius );
1053 if( drawingShadows && !
eeconfig()->m_Selection.draw_selected_children )
1057 float nameStrokeWidth = getLineWidth( aPin,
false );
1058 float numStrokeWidth = getLineWidth( aPin,
false );
1063 float shadowWidth = 0.0f;
1065 if( drawingShadows )
1072 m_schSettings.m_ShowPinsElectricalType,
1073 m_schSettings.m_ShowPinAltIcons );
1075 const auto textRendersAsBitmap = [&](
KIGFX::GAL& aGal,
int aTextSize )
1087 const auto drawTextInfo =
1091 const bool renderTextAsBitmap = textRendersAsBitmap( *m_gal, aTextInfo.
m_TextSize );
1094 m_gal->SetStrokeColor( aColor );
1095 m_gal->SetFillColor( aColor );
1105 if( drawingShadows )
1120 else if( nonCached( aPin ) && renderTextAsBitmap )
1133 const auto getColorForLayer = [&](
int aDrawnLayer )
1136 return getRenderColor( aPin,
LAYER_HIDDEN, drawingShadows, aDimmed );
1138 return getRenderColor( aPin, aDrawnLayer, drawingShadows, aDimmed );
1143 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> numInfo = cache.
GetPinNumberInfo( shadowWidth ) )
1145 drawTextInfo( *numInfo, getColorForLayer(
LAYER_PINNUM ) );
1148 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> nameInfo = cache.
GetPinNameInfo( shadowWidth ) )
1150 drawTextInfo( *nameInfo, getColorForLayer(
LAYER_PINNAM ) );
1162 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> elecTypeInfo =
1171void SCH_PAINTER::drawAnchor(
const VECTOR2I& aPos,
bool aDrawingShadows )
1173 if( m_schSettings.IsPrinting() )
1178 const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
1185 m_gal->SetStrokeColor(
color );
1186 m_gal->SetIsStroke(
true );
1187 m_gal->SetLineWidth( aDrawingShadows ? getShadowWidth(
false )
1188 : m_schSettings.GetDanglingIndicatorThickness() );
1190 m_gal->DrawLine( aPos -
VECTOR2I( radius, 0 ), aPos +
VECTOR2I( radius, 0 ) );
1191 m_gal->DrawLine( aPos -
VECTOR2I( 0, radius ), aPos +
VECTOR2I( 0, radius ) );
1197void SCH_PAINTER::drawDanglingIndicator(
const VECTOR2I& aPos,
const COLOR4D& aColor,
int aWidth,
1198 bool aDangling,
bool aDrawingShadows,
bool aBrightened )
1200 if( m_schSettings.IsPrinting() )
1213 m_gal->SetStrokeColor( aColor.
Brightened( 0.3 ) );
1214 m_gal->SetIsStroke(
true );
1215 m_gal->SetIsFill(
false );
1216 m_gal->SetLineWidth( aDrawingShadows ? getShadowWidth( aBrightened )
1217 : m_schSettings.GetDanglingIndicatorThickness() );
1219 m_gal->DrawRectangle( aPos - radius, aPos + radius );
1225 bool highlightNetclassColors =
false;
1235 if( m_schSettings.IsPrinting() && drawingShadows )
1243 if( highlightNetclassColors && aLayer == aJct->
GetLayer() )
1246 color = getRenderColor( aJct, aJct->
GetLayer(), drawingShadows );
1250 if( junctionSize > 1 )
1252 m_gal->SetIsStroke( drawingShadows );
1253 m_gal->SetLineWidth( getLineWidth( aJct, drawingShadows ) );
1254 m_gal->SetStrokeColor(
color );
1255 m_gal->SetIsFill( !drawingShadows );
1256 m_gal->SetFillColor(
color );
1257 m_gal->DrawCircle( aJct->
GetPosition(), junctionSize );
1262void SCH_PAINTER::draw(
const SCH_LINE* aLine,
int aLayer )
1267 bool drawingBusses = aLayer ==
LAYER_BUS;
1271 bool highlightNetclassColors =
false;
1272 double highlightAlpha = 0.6;
1281 if( !highlightNetclassColors && drawingNetColorHighlights )
1284 if( m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
1287 if( m_schSettings.IsPrinting() && drawingShadows )
1295 if( aLine->
IsNew() && drawingDangling )
1299 float width = getLineWidth( aLine, drawingShadows, drawingNetColorHighlights );
1302 if( highlightNetclassColors )
1307 else if( drawingBusses )
1311 if( drawingNetColorHighlights )
1323 if( ( drawingDangling || drawingShadows ) && !aLine->
IsNew() )
1352 if( drawingDangling )
1357 int textSize = getOperatingPointTextSize();
1359 int textOffset =
KiROUND( textSize * 0.22 );
1364 pos.
y -= textOffset;
1370 pos.
x +=
KiROUND( textOffset * 1.2 );
1386 m_gal->SetIsStroke(
true );
1387 m_gal->SetStrokeColor(
color );
1388 m_gal->SetLineWidth( width );
1403 m_gal->DrawLine( a+1, b );
1405 m_gal->DrawLine( a, b );
1411void SCH_PAINTER::draw(
const SCH_SHAPE* aShape,
int aLayer,
bool aDimmed )
1413 if( !isUnitAndConversionShown( aShape ) )
1416 if( aShape->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1421 if( m_schSettings.IsPrinting() && drawingShadows )
1425 COLOR4D color = getRenderColor( aShape, aLayer, drawingShadows, aDimmed );
1433 switch( shape->GetShape() )
1437 VECTOR2D start = shape->GetStart();
1446 EDA_ANGLE angle1 = midAngle - startAngle;
1451 m_gal->DrawArc( center, ( start - center ).EuclideanNorm(), startAngle, angle );
1456 m_gal->DrawCircle( shape->GetPosition(), shape->GetRadius() );
1460 m_gal->DrawRectangle( shape->GetPosition(), shape->GetEnd() );
1465 const std::vector<SHAPE*> polySegments = shape->MakeEffectiveShapes(
true );
1467 if( !polySegments.empty() )
1469 std::deque<VECTOR2D> pts;
1471 for(
SHAPE* polySegment : polySegments )
1472 pts.push_back(
static_cast<SHAPE_SEGMENT*
>( polySegment )->GetSeg().
A );
1477 for(
SHAPE* polySegment : polySegments )
1480 m_gal->DrawPolygon( pts );
1487 m_gal->DrawCurve( shape->GetStart(), shape->GetBezierC1(),
1488 shape->GetBezierC2(), shape->GetEnd() );
1499 if(
eeconfig()->m_Selection.fill_shapes )
1504 m_gal->SetIsFill( aShape->
IsFilled() );
1506 m_gal->SetIsFill(
true );
1508 m_gal->SetFillColor(
color );
1512 m_gal->SetIsFill(
false );
1517 m_gal->SetIsStroke(
true );
1518 m_gal->SetLineWidth( getLineWidth( aShape,
true ) );
1519 m_gal->SetStrokeColor(
color );
1521 drawShape( aShape );
1538 if( !m_schSettings.PrintBlackAndWhiteReq() )
1540 m_gal->SetIsFill(
true );
1541 m_gal->SetIsStroke(
false );
1542 m_gal->SetFillColor(
color );
1544 drawShape( aShape );
1555 m_gal->SetIsFill(
true );
1556 m_gal->SetIsStroke(
false );
1557 m_gal->SetFillColor(
color );
1559 drawShape( aShape );
1562 float lineWidth = getLineWidth( aShape, drawingShadows );
1566 m_gal->SetIsFill(
false );
1567 m_gal->SetIsStroke(
true );
1568 m_gal->SetLineWidth( lineWidth );
1569 m_gal->SetStrokeColor(
color );
1573 drawShape( aShape );
1579 for(
SHAPE* shape : shapes )
1586 m_gal->DrawLine( a+1, b );
1588 m_gal->DrawLine( a, b );
1592 for(
SHAPE* shape : shapes )
1600void SCH_PAINTER::draw(
const SCH_TEXT* aText,
int aLayer,
bool aDimmed )
1602 if( !isUnitAndConversionShown( aText ) )
1605 if( aText->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1610 if( m_schSettings.IsPrinting() && drawingShadows )
1616 switch( aText->
Type() )
1628 COLOR4D color = getRenderColor( aText, aLayer, drawingShadows, aDimmed );
1637 if( conn && conn->
IsBus() )
1643 if( m_schSettings.m_IsSymbolEditor ||
eeconfig()->m_Appearance.show_hidden_fields )
1649 m_gal->SetStrokeColor(
color );
1650 m_gal->SetFillColor(
color );
1660 if( drawingShadows && font->
IsOutline() )
1665 m_gal->SetIsStroke(
false );
1666 m_gal->SetIsFill(
true );
1678 double shadowOffset = 0.0;
1680 if( drawingShadows )
1682 double shadowWidth = getShadowWidth( !aText->
IsSelected() );
1685 const double adjust = 1.2f;
1686 shadowOffset = shadowWidth/2.0f * adjust;
1700 pos.
y = bBox.
GetTop() - shadowOffset;
1703 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
1712 pos.
x = bBox.
GetLeft() - shadowOffset;
1721 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
1732 else if( drawingShadows )
1734 m_gal->SetIsFill(
false );
1735 m_gal->SetIsStroke(
true );
1745 text_offset.
x -= fudge;
1747 text_offset.
y -= fudge;
1749 text_offset.
x += fudge;
1751 text_offset.
y += fudge;
1760 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1761 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1771 int adjust =
KiROUND( sizeDiff * 0.4 );
1772 VECTOR2I adjust_offset( 0, - adjust );
1775 text_offset += adjust_offset;
1778 if( nonCached( aText )
1780 && !shownText.Contains( wxT(
"\n" ) ) )
1787 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
1795 m_gal->DrawGlyphs( *cache );
1812 switch( aText->
Type() )
1820 showAnchor = !
static_cast<const SCH_LABEL*
>( aText )->IsDangling();
1837 drawAnchor( aText->
GetPosition(), drawingShadows );
1842void SCH_PAINTER::draw(
const SCH_TEXTBOX* aTextBox,
int aLayer,
bool aDimmed )
1852 if( !isUnitAndConversionShown( aTextBox ) )
1855 if( aTextBox->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1860 if( m_schSettings.IsPrinting() && drawingShadows )
1863 COLOR4D color = getRenderColor( aTextBox, aLayer, drawingShadows, aDimmed );
1865 float borderWidth = getLineWidth( aTextBox, drawingShadows );
1879 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1880 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1884 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
1892 m_gal->DrawGlyphs( *cache );
1904 m_gal->SetFillColor(
color );
1905 m_gal->SetStrokeColor(
color );
1909 m_gal->SetIsFill(
true );
1910 m_gal->SetIsStroke(
false );
1911 m_gal->SetLineWidth( borderWidth );
1920 if( aTextBox->
IsFilled() && !m_schSettings.PrintBlackAndWhiteReq() )
1922 m_gal->SetIsFill(
true );
1923 m_gal->SetIsStroke(
false );
1924 m_gal->SetLineWidth( borderWidth );
1939 if( m_schSettings.m_OverrideItemColors || aTextBox->
IsBrightened()
1942 borderColor = m_schSettings.GetLayerColor( aLayer );
1945 if( transparency > 0.0 )
1946 borderColor = borderColor.
WithAlpha( borderColor.
a * ( 1.0 - transparency ) );
1950 borderColor = borderColor.
Mix( bg, 0.5f );
1954 m_gal->SetIsFill(
false );
1955 m_gal->SetIsStroke(
true );
1956 m_gal->SetStrokeColor( borderColor );
1957 m_gal->SetLineWidth( borderWidth );
1967 for(
SHAPE* shape : shapes )
1975 m_gal->DrawLine( a+1, b );
1977 m_gal->DrawLine( a, b );
1981 for(
SHAPE* shape : shapes )
1989void SCH_PAINTER::draw(
const SCH_TABLE* aTable,
int aLayer,
bool aDimmed )
1995 draw( cell, aLayer, aDimmed );
2010 lineWidth = stroke.GetWidth();
2011 color = stroke.GetColor();
2012 lineStyle = stroke.GetLineStyle();
2014 if( lineWidth == 0 )
2015 lineWidth = m_schSettings.GetDefaultPenWidth();
2023 m_gal->SetIsFill(
false );
2024 m_gal->SetIsStroke(
true );
2025 m_gal->SetStrokeColor(
color );
2026 m_gal->SetLineWidth( (
float) lineWidth );
2030 [&](
const SHAPE& shape )
2037 m_gal->DrawLine( a+1, b );
2039 m_gal->DrawLine( a, b );
2048 m_gal->DrawLine( ptA, ptB );
2062 m_gal->DrawRectangle( ptA, ptB );
2067 strokeShape( rect );
2077 for(
int col = 0; col < aTable->
GetColCount() - 1; ++col )
2079 for(
int row = 0; row < aTable->
GetRowCount(); ++row )
2088 strokeLine( topRight, cell->
GetEnd() );
2095 for(
int row = 0; row < aTable->
GetRowCount() - 1; ++row )
2097 for(
int col = 0; col < aTable->
GetColCount(); ++col )
2106 strokeLine( botLeft, cell->
GetEnd() );
2134 strokeRect( pos, end );
2140wxString SCH_PAINTER::expandLibItemTextVars(
const wxString& aSourceText,
2143 std::function<bool( wxString* )> symbolResolver =
2144 [&]( wxString* token ) ->
bool
2149 return aSymbolContext->
ResolveTextVar( &m_schematic->CurrentSheet(), token );
2159 bool DNP = aSymbol->
GetDNP();
2163 if( m_schSettings.IsPrinting() && drawingShadows )
2166 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2169 draw( &field, aLayer, DNP || markExclusion );
2181 int unit = m_schematic ? aSymbol->
GetUnitSelection( &m_schematic->CurrentSheet() ) : 1;
2187 std::vector<SCH_PIN*> originalPins = originalSymbol->
GetPins( unit, bodyStyle );
2191 std::vector<SCH_PIN*> tempPins = tempSymbol.
GetPins( unit, bodyStyle );
2199 tempItem.SetFlags( aSymbol->
GetFlags() );
2207 textItem->
SetText( expandLibItemTextVars( textItem->
GetText(), aSymbol ) );
2214 textboxItem->
SetText( expandLibItemTextVars( textboxItem->
GetText(), aSymbol ) );
2219 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2222 SCH_PIN* tempPin = tempPins[ i ];
2241 DNP || markExclusion );
2243 for(
unsigned i = 0; i < tempPins.size(); ++i )
2246 SCH_PIN* tempPin = tempPins[ i ];
2254 if( DNP || markExclusion )
2263 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2264 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2271 m_gal->AdvanceDepth();
2272 m_gal->SetIsStroke(
true );
2273 m_gal->SetIsFill(
true );
2274 m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ) );
2275 m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ) );
2277 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2278 std::swap( pt1.
x, pt2.
x );
2279 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2284void SCH_PAINTER::draw(
const SCH_FIELD* aField,
int aLayer,
bool aDimmed )
2288 if( m_schSettings.IsPrinting() && drawingShadows )
2294 if( !isUnitAndConversionShown( aField ) )
2297 if( aField->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
2304 if( std::find( layers.begin(), layers.end(), aLayer ) == layers.end() )
2309 COLOR4D color = getRenderColor( aField, aLayer, drawingShadows, aDimmed );
2314 : m_schSettings.m_ShowHiddenFields;
2324 if( shownText.IsEmpty() )
2360 if( m_schSettings.GetDrawBoundingBoxes() )
2361 drawItemBoundingBox( aField );
2363 m_gal->SetStrokeColor(
color );
2364 m_gal->SetFillColor(
color );
2366 if( drawingShadows && getFont( aField )->IsOutline() )
2368 BOX2I shadow_box = bbox;
2371 m_gal->SetIsStroke(
false );
2372 m_gal->SetIsFill(
true );
2385 if( drawingShadows )
2390 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
2391 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
2395 if( nonCached( aField ) && aField->
RenderAsBitmap( m_gal->GetWorldScale() ) )
2397 bitmapText( *m_gal, shownText, textpos, attributes );
2402 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2405 cache = aField->
GetRenderCache( shownText, textpos, attributes );
2410 m_gal->DrawGlyphs( *cache );
2422 if( aField->
IsMoving() && m_schematic )
2426 m_gal->SetLineWidth( m_schSettings.GetOutlineWidth() );
2428 m_gal->DrawLine( aField->
GetPosition(), parentPos );
2432 drawAnchor( aField->
GetPosition(), drawingShadows );
2441 if( m_schSettings.IsPrinting() && drawingShadows )
2446 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2449 draw( &field, aLayer,
false );
2460 if( drawingDangling )
2472 std::vector<VECTOR2I> pts;
2473 std::deque<VECTOR2D> pts2;
2478 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
2480 m_gal->SetIsStroke(
true );
2481 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2482 m_gal->SetStrokeColor(
color );
2484 if( drawingShadows )
2486 m_gal->SetIsFill(
eeconfig()->m_Selection.fill_shapes );
2487 m_gal->SetFillColor(
color );
2488 m_gal->DrawPolygon( pts2 );
2492 m_gal->SetIsFill(
false );
2493 m_gal->DrawPolyline( pts2 );
2496 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2500void SCH_PAINTER::draw(
const SCH_LABEL* aLabel,
int aLayer )
2504 if( m_schSettings.IsPrinting() && drawingShadows )
2509 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2512 draw( &field, aLayer,
false );
2523 if( drawingDangling )
2535 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2543 if( m_schSettings.IsPrinting() && drawingShadows )
2548 if( !( drawingShadows || drawingDangling ) ||
eeconfig()->m_Selection.draw_selected_children )
2551 draw( &field, aLayer,
false );
2562 if( drawingDangling )
2574 std::vector<VECTOR2I> i_pts;
2575 std::deque<VECTOR2D> d_pts;
2579 for(
const VECTOR2I& i_pt : i_pts )
2580 d_pts.emplace_back(
VECTOR2D( i_pt.x, i_pt.y ) );
2582 m_gal->SetIsFill(
true );
2584 m_gal->SetIsStroke(
true );
2585 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2586 m_gal->SetStrokeColor(
color );
2587 m_gal->DrawPolyline( d_pts );
2589 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2600 if( m_schSettings.IsPrinting() && drawingShadows )
2603 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2606 draw( &field, aLayer,
false );
2629 std::vector<VECTOR2I> pts;
2630 std::deque<VECTOR2D> pts2;
2635 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
2637 m_gal->SetIsFill(
false );
2638 m_gal->SetFillColor(
color );
2639 m_gal->SetIsStroke(
true );
2640 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2641 m_gal->SetStrokeColor(
color );
2645 m_gal->DrawLine( pts2[0], pts2[1] );
2646 m_gal->SetIsFill(
true );
2647 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
2651 m_gal->DrawLine( pts2[0], pts2[1] );
2652 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
2656 m_gal->DrawPolyline( pts2 );
2661void SCH_PAINTER::draw(
const SCH_SHEET* aSheet,
int aLayer )
2664 bool DNP = aSheet->
GetDNP();
2668 if( m_schSettings.IsPrinting() && drawingShadows )
2671 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2674 draw( &field, aLayer, DNP || markExclusion );
2677 draw(
static_cast<SCH_HIERLABEL*
>( sheetPin ), aLayer, DNP || markExclusion );
2690 if( !m_schSettings.PrintBlackAndWhiteReq() )
2693 m_gal->SetIsFill(
true );
2694 m_gal->SetIsStroke(
false );
2696 m_gal->DrawRectangle( pos, pos + size );
2702 m_gal->SetStrokeColor( getRenderColor( aSheet,
LAYER_SHEET, drawingShadows ) );
2703 m_gal->SetIsStroke(
true );
2704 m_gal->SetLineWidth( getLineWidth( aSheet, drawingShadows ) );
2705 m_gal->SetIsFill(
false );
2707 m_gal->DrawRectangle( pos, pos + size );
2710 if( DNP || markExclusion )
2719 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2720 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2727 m_gal->SetIsStroke(
true );
2728 m_gal->SetIsFill(
true );
2729 m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ) );
2730 m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ) );
2732 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2733 std::swap( pt1.
x, pt2.
x );
2734 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2743 if( m_schSettings.IsPrinting() && drawingShadows )
2749 m_gal->SetIsStroke(
true );
2750 m_gal->SetLineWidth( getLineWidth( aNC, drawingShadows ) );
2751 m_gal->SetStrokeColor( getRenderColor( aNC,
LAYER_NOCONNECT, drawingShadows ) );
2752 m_gal->SetIsFill(
false );
2755 int delta = std::max( aNC->
GetSize(), m_schSettings.GetDefaultPenWidth() * 3 ) / 2;
2770 bool drawingBusses = aLayer ==
LAYER_BUS;
2772 if( m_schSettings.IsPrinting() && drawingShadows )
2775 bool highlightNetclassColors =
false;
2783 if( !highlightNetclassColors && drawingNetColorHighlights )
2786 if( m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
2811 if( highlightNetclassColors )
2816 else if( drawingBusses )
2820 if( drawingNetColorHighlights )
2832 if( drawingDangling )
2834 m_gal->SetIsFill(
false );
2835 m_gal->SetIsStroke(
true );
2836 m_gal->SetStrokeColor(
color.Brightened( 0.3 ) );
2837 m_gal->SetLineWidth( m_schSettings.GetDanglingIndicatorThickness() );
2847 m_gal->DrawCircle( aEntry->
GetEnd(),
2856 draw( &line, aLayer );
2872 if( img_scale != 1.0 )
2873 m_gal->Scale(
VECTOR2D( img_scale, img_scale ) );
2877 m_gal->DrawBitmap( refImage.
GetImage() );
2885 m_gal->SetIsStroke(
true );
2886 m_gal->SetStrokeColor(
color );
2887 m_gal->SetLineWidth ( getShadowWidth( aBitmap->
IsBrightened() ) );
2888 m_gal->SetIsFill(
false );
2895 bm_size.
x /= img_scale;
2896 bm_size.
y /= img_scale;
2897 const VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
2898 const VECTOR2D end = origin + bm_size;
2900 m_gal->DrawRectangle( origin, end );
2912 if( m_schSettings.IsPrinting() && drawingShadows )
2922 m_gal->SetIsFill( !drawingShadows );
2923 m_gal->SetFillColor(
color );
2924 m_gal->SetIsStroke( drawingShadows );
2925 m_gal->SetLineWidth( getLineWidth( aMarker, drawingShadows ) );
2926 m_gal->SetStrokeColor(
color );
2931 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, int aBodyStyle) const
Return a list of pin object pointers from the draw item list.
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::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
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.
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
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) override
Populate a std::vector with SCH_FIELDs.
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.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
BOX2I GetBodyBoundingBox() const override
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.
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.
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
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 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)
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)
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.
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