102 m_schematic( nullptr )
113 draw( item, aLayer,
false );
122#ifdef CONNECTIVITY_DEBUG
124 auto sch_item =
dynamic_cast<const SCH_ITEM*
>( aItem );
125 auto conn = sch_item ? sch_item->
Connection( *g_CurrentSheet ) :
nullptr;
130 auto label = conn->Name(
true );
137 m_gal->StrokeText( *
m_gal, conn->Name(
true ), pos, 0.0, 0 );
145 switch( aItem->
Type() )
151 drawBoundingBox =
false;
152 draw(
static_cast<const SCH_PIN*
>( aItem ), aLayer, aDimmed );
164 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
167 draw(
static_cast<const SCH_SHAPE*
>( aItem ), aLayer, aDimmed );
170 draw(
static_cast<const SCH_TEXT*
>( aItem ), aLayer, aDimmed );
176 draw(
static_cast<const SCH_TABLE*
>( aItem ), aLayer, aDimmed );
185 draw(
static_cast<const SCH_FIELD*
>( aItem ), aLayer, aDimmed );
218 if( drawBoundingBox )
234 box =
static_cast<const SCH_SYMBOL*
>( aItem )->GetBodyBoundingBox();
239 :
COLOR4D( 0.2, 0.2, 0.2, 1 ) );
309 color =
static_cast<const SCH_LINE*
>( aItem )->GetLineColor();
342 else if( shape->
GetFillMode() == FILL_T::FILLED_WITH_BG_BODYCOLOR )
385 else if(
const EDA_TEXT* otherTextItem =
dynamic_cast<const EDA_TEXT*
>( aItem ) )
388 color = otherTextItem->GetTextColor();
393 color = m_schSettings.GetLayerColor( aLayer );
395 if( aItem->IsBrightened() )
399 if( aDrawingShadows )
401 if( aItem->IsSelected() )
412 else if( aItem->IsSelected() && aDrawingShadows )
416 else if( aItem->IsSelected()
425 if( m_schSettings.m_ShowDisabled
426 || ( m_schSettings.m_ShowGraphicsDisabled && aItem->Type() !=
SCH_FIELD_T ) )
431 if( aDimmed && !( aItem->IsSelected() && aDrawingShadows ) )
438 if( aItem->GetForcedTransparency() > 0.0 )
439 color =
color.WithAlpha(
color.a * ( 1.0 - aItem->GetForcedTransparency() ) );
445float SCH_PAINTER::getLineWidth(
const SCH_ITEM* aItem,
bool aDrawingShadows,
446 bool aDrawingWireColorHighlights )
const
455 if( aDrawingShadows && aItem->
IsType( g_ScaledSelectionTypes ) )
459 if( aDrawingWireColorHighlights )
470 width += colorHighlightWidth;
477float SCH_PAINTER::getTextThickness(
const SCH_ITEM* aItem )
const
479 int pen = m_schSettings.GetDefaultPenWidth();
481 switch( aItem->
Type() )
484 pen =
static_cast<const SCH_FIELD*
>( aItem )->GetEffectiveTextPenWidth( pen );
488 pen =
static_cast<const SCH_TEXT*
>( aItem )->GetEffectiveTextPenWidth( pen );
496 pen =
static_cast<const SCH_LABEL_BASE*
>( aItem )->GetEffectiveTextPenWidth( pen );
501 pen =
static_cast<const SCH_TEXTBOX*
>( aItem )->GetEffectiveTextPenWidth( pen );
512int SCH_PAINTER::getOperatingPointTextSize()
const
515 int screenTextSize =
std::abs( (
int) m_gal->GetScreenWorldMatrix().GetScale().y * 7 );
518 return KiROUND( ( docTextSize + screenTextSize * 2 ) / 3 );
580 font->
Draw( &aGal, aText, aPosition, aAttrs, aFontMetrics );
622 callback_gal.SetIsStroke(
true );
624 font->
Draw( &callback_gal, aText, aPosition, attrs, aFontMetrics );
669 m_gal->DrawLine( a, b );
670 m_gal->DrawLine( b, c );
674void SCH_PAINTER::draw(
const LIB_SYMBOL* aSymbol,
int aLayer,
bool aDrawFields,
int aUnit,
675 int aBodyStyle,
bool aDimmed )
678 aUnit = m_schSettings.m_ShowUnit;
681 aBodyStyle = m_schSettings.m_ShowBodyStyle;
683 std::unique_ptr< LIB_SYMBOL > tmpSymbol;
688 tmpSymbol = aSymbol->
Flatten();
689 drawnSymbol = tmpSymbol.get();
695 [](
const SCH_ITEM& item,
int layer )
699 return std::find( layers.begin(), layers.end(), layer ) != layers.end();
707 if( !childOnLayer( item, aLayer ) )
716 draw( &item, aLayer, aDimmed );
721int SCH_PAINTER::internalPinDecoSize(
const SCH_PIN &aPin )
723 if( m_schSettings.m_PinSymbolSize > 0 )
724 return m_schSettings.m_PinSymbolSize;
732int SCH_PAINTER::externalPinDecoSize(
const SCH_PIN &aPin )
734 if( m_schSettings.m_PinSymbolSize > 0 )
735 return m_schSettings.m_PinSymbolSize;
742void SCH_PAINTER::drawPinDanglingIndicator(
const SCH_PIN& aPin,
const COLOR4D& aColor,
743 bool aDrawingShadows,
bool aBrightened )
748 float lineWidth = aDrawingShadows ? getShadowWidth( aBrightened )
749 : m_schSettings.GetDanglingIndicatorThickness();
753 m_gal->SetStrokeColor( aColor.
Brightened( 0.3 ) );
755 m_gal->SetIsFill(
false );
756 m_gal->SetIsStroke(
true );
757 m_gal->SetLineWidth( lineWidth );
766 bool aRotate,
int aExtraLineWidth,
const COLOR4D& aColor )
794 const double lineYOffset = aSize / 4;
795 const double arrowHead = aSize / 8;
811 topLineREnd -
VECTOR2D{ aSize * 0.7, 0 } );
814 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
815 aGal.
DrawLine( topLineREnd, topLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
819 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, arrowHead } );
820 aGal.
DrawLine( btmLineREnd, btmLineREnd -
VECTOR2D{ arrowHead * 1.2, -arrowHead } );
829 aGal.
DrawArc( topLineREnd -
VECTOR2D{ aSize - lineYOffset * 2, -lineYOffset },
836void SCH_PAINTER::draw(
const SCH_PIN* aPin,
int aLayer,
bool aDimmed )
843 if( !isUnitAndConversionShown( aPin ) )
848 if( m_schSettings.IsPrinting() && drawingShadows )
853 const bool isDangling = m_schSettings.m_IsSymbolEditor || aPin->
HasFlag(
IS_DANGLING );
863 if( m_schSettings.IsPrinting() )
867 : m_schSettings.m_ShowHiddenPins;
882 if( drawingDangling )
890 if( m_schSettings.GetDrawBoundingBoxes() )
891 drawItemBoundingBox( aPin );
899 int textSize = getOperatingPointTextSize();
901 int textOffset =
KiROUND( textSize * 0.22 );
908 mid.
x +=
KiROUND( textOffset * 1.2 );
913 mid.
y -=
KiROUND( textOffset * 1.2 );
934 m_gal->SetIsStroke(
true );
935 m_gal->SetIsFill(
false );
936 m_gal->SetLineWidth( getLineWidth( aPin, drawingShadows ) );
937 m_gal->SetStrokeColor(
color );
938 m_gal->SetFontBold(
false );
939 m_gal->SetFontUnderlined(
false );
940 m_gal->SetFontItalic(
false );
943 const int diam =
radius*2;
948 m_gal->DrawLine( p0, pos );
961 m_gal->DrawLine( p0, pos );
966 m_gal->DrawLine( p0 + dir * ( diam ), pos );
970 pc = p0 - dir * clock_size ;
972 triLine( p0 +
VECTOR2D( dir.
y, -dir.
x) * clock_size,
977 m_gal->DrawLine( p0 + dir * ( diam ), pos );
982 pc = p0 - dir * clock_size ;
984 triLine( p0 +
VECTOR2D( dir.
y, -dir.
x) * clock_size,
996 triLine( p0 +
VECTOR2D( 0, dir.
y) * diam,
1001 m_gal->DrawLine( p0, pos );
1005 m_gal->DrawLine( p0, pos );
1009 triLine( p0 +
VECTOR2D( 0, clock_size ),
1010 p0 +
VECTOR2D( -dir.
x * clock_size, 0 ),
1015 triLine( p0 +
VECTOR2D( clock_size, 0 ),
1016 p0 +
VECTOR2D( 0, -dir.
y * clock_size ),
1022 m_gal->DrawLine( p0, pos );
1026 triLine( p0 +
VECTOR2D(dir.
x, 0) * diam,
1032 triLine( p0 +
VECTOR2D( 0, dir.
y) * diam,
1039 m_gal->DrawLine( p0, pos );
1048 m_gal->DrawLine( p0, pos );
1058 if( drawingShadows && !
eeconfig()->m_Selection.draw_selected_children )
1062 float nameStrokeWidth = getLineWidth( aPin,
false );
1063 float numStrokeWidth = getLineWidth( aPin,
false );
1068 float shadowWidth = 0.0f;
1070 if( drawingShadows )
1077 m_schSettings.m_ShowPinsElectricalType,
1078 m_schSettings.m_ShowPinAltIcons );
1080 const auto textRendersAsBitmap = [&](
KIGFX::GAL& aGal,
int aTextSize )
1092 const auto drawTextInfo =
1096 const bool renderTextAsBitmap = textRendersAsBitmap( *m_gal, aTextInfo.
m_TextSize );
1099 m_gal->SetStrokeColor( aColor );
1100 m_gal->SetFillColor( aColor );
1110 if( drawingShadows )
1125 else if( nonCached( aPin ) && renderTextAsBitmap )
1138 const auto getColorForLayer = [&](
int aDrawnLayer )
1141 return getRenderColor( aPin,
LAYER_HIDDEN, drawingShadows, aDimmed );
1143 return getRenderColor( aPin, aDrawnLayer, drawingShadows, aDimmed );
1148 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> numInfo = cache.
GetPinNumberInfo( shadowWidth ) )
1150 drawTextInfo( *numInfo, getColorForLayer(
LAYER_PINNUM ) );
1153 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> nameInfo = cache.
GetPinNameInfo( shadowWidth ) )
1155 drawTextInfo( *nameInfo, getColorForLayer(
LAYER_PINNAM ) );
1167 if( std::optional<PIN_LAYOUT_CACHE::TEXT_INFO> elecTypeInfo =
1175void SCH_PAINTER::drawAnchor(
const VECTOR2I& aPos,
bool aDrawingShadows )
1177 if( m_schSettings.IsPrinting() )
1182 const MATRIX3x3D& matrix = m_gal->GetScreenWorldMatrix();
1189 m_gal->SetStrokeColor(
color );
1190 m_gal->SetIsStroke(
true );
1191 m_gal->SetLineWidth( aDrawingShadows ? getShadowWidth(
false )
1192 : m_schSettings.GetDanglingIndicatorThickness() );
1199void SCH_PAINTER::drawDanglingIndicator(
const VECTOR2I& aPos,
const COLOR4D& aColor,
int aWidth,
1200 bool aDangling,
bool aDrawingShadows,
bool aBrightened )
1202 if( m_schSettings.IsPrinting() )
1215 m_gal->SetStrokeColor( aColor.
Brightened( 0.3 ) );
1216 m_gal->SetIsStroke(
true );
1217 m_gal->SetIsFill(
false );
1218 m_gal->SetLineWidth( aDrawingShadows ? getShadowWidth( aBrightened )
1219 : m_schSettings.GetDanglingIndicatorThickness() );
1227 bool highlightNetclassColors =
false;
1237 if( m_schSettings.IsPrinting() && drawingShadows )
1245 if( highlightNetclassColors && aLayer == aJct->
GetLayer() )
1248 color = getRenderColor( aJct, aJct->
GetLayer(), drawingShadows );
1252 if( junctionSize > 1 )
1254 m_gal->SetIsStroke( drawingShadows );
1255 m_gal->SetLineWidth( getLineWidth( aJct, drawingShadows ) );
1256 m_gal->SetStrokeColor(
color );
1257 m_gal->SetIsFill( !drawingShadows );
1258 m_gal->SetFillColor(
color );
1259 m_gal->DrawCircle( aJct->
GetPosition(), junctionSize );
1264void SCH_PAINTER::draw(
const SCH_LINE* aLine,
int aLayer )
1269 bool drawingBusses = aLayer ==
LAYER_BUS;
1273 bool highlightNetclassColors =
false;
1274 double highlightAlpha = 0.6;
1283 if( !highlightNetclassColors && drawingNetColorHighlights )
1286 if( m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
1289 if( m_schSettings.IsPrinting() && drawingShadows )
1297 if( aLine->
IsNew() && drawingDangling )
1301 float width = getLineWidth( aLine, drawingShadows, drawingNetColorHighlights );
1304 if( highlightNetclassColors )
1309 else if( drawingBusses )
1313 if( drawingNetColorHighlights )
1325 if( ( drawingDangling || drawingShadows ) && !aLine->
IsNew() )
1354 if( drawingDangling )
1359 int textSize = getOperatingPointTextSize();
1361 int textOffset =
KiROUND( textSize * 0.22 );
1366 pos.
y -= textOffset;
1372 pos.
x +=
KiROUND( textOffset * 1.2 );
1388 m_gal->SetIsStroke(
true );
1389 m_gal->SetStrokeColor(
color );
1390 m_gal->SetLineWidth( width );
1405 m_gal->DrawLine( a+1, b );
1407 m_gal->DrawLine( a, b );
1413void SCH_PAINTER::draw(
const SCH_SHAPE* aShape,
int aLayer,
bool aDimmed )
1415 if( !isUnitAndConversionShown( aShape ) )
1418 if( aShape->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1423 if( m_schSettings.IsPrinting() && drawingShadows )
1427 COLOR4D color = getRenderColor( aShape, aLayer, drawingShadows, aDimmed );
1435 switch( shape->GetShape() )
1439 VECTOR2D start = shape->GetStart();
1448 EDA_ANGLE angle1 = midAngle - startAngle;
1453 m_gal->DrawArc(
center, ( start -
center ).EuclideanNorm(), startAngle, angle );
1458 m_gal->DrawCircle( shape->GetPosition(), shape->GetRadius() );
1462 m_gal->DrawRectangle( shape->GetPosition(), shape->GetEnd() );
1467 const std::vector<SHAPE*> polySegments = shape->MakeEffectiveShapes(
true );
1469 if( !polySegments.empty() )
1471 std::deque<VECTOR2D> pts;
1473 for(
SHAPE* polySegment : polySegments )
1474 pts.push_back(
static_cast<SHAPE_SEGMENT*
>( polySegment )->GetSeg().
A );
1479 for(
SHAPE* polySegment : polySegments )
1482 m_gal->DrawPolygon( pts );
1489 m_gal->DrawCurve( shape->GetStart(), shape->GetBezierC1(),
1490 shape->GetBezierC2(), shape->GetEnd() );
1501 if(
eeconfig()->m_Selection.fill_shapes )
1506 m_gal->SetIsFill( aShape->
IsFilled() );
1508 m_gal->SetIsFill(
true );
1510 m_gal->SetFillColor(
color );
1514 m_gal->SetIsFill(
false );
1519 m_gal->SetIsStroke(
true );
1520 m_gal->SetLineWidth( getLineWidth( aShape,
true ) );
1521 m_gal->SetStrokeColor(
color );
1523 drawShape( aShape );
1540 if( !m_schSettings.PrintBlackAndWhiteReq() )
1542 m_gal->SetIsFill(
true );
1543 m_gal->SetIsStroke(
false );
1544 m_gal->SetFillColor(
color );
1546 drawShape( aShape );
1557 m_gal->SetIsFill(
true );
1558 m_gal->SetIsStroke(
false );
1559 m_gal->SetFillColor(
color );
1561 drawShape( aShape );
1564 float lineWidth = getLineWidth( aShape, drawingShadows );
1568 m_gal->SetIsFill(
false );
1569 m_gal->SetIsStroke(
true );
1570 m_gal->SetLineWidth( lineWidth );
1571 m_gal->SetStrokeColor(
color );
1575 drawShape( aShape );
1581 for(
SHAPE* shape : shapes )
1588 m_gal->DrawLine( a+1, b );
1590 m_gal->DrawLine( a, b );
1594 for(
SHAPE* shape : shapes )
1602void SCH_PAINTER::draw(
const SCH_TEXT* aText,
int aLayer,
bool aDimmed )
1604 if( !isUnitAndConversionShown( aText ) )
1607 if( aText->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1612 if( m_schSettings.IsPrinting() && drawingShadows )
1618 switch( aText->
Type() )
1630 COLOR4D color = getRenderColor( aText, aLayer, drawingShadows, aDimmed );
1639 if( conn && conn->
IsBus() )
1645 if( m_schSettings.m_IsSymbolEditor ||
eeconfig()->m_Appearance.show_hidden_fields )
1651 m_gal->SetStrokeColor(
color );
1652 m_gal->SetFillColor(
color );
1662 if( drawingShadows && font->
IsOutline() )
1667 m_gal->SetIsStroke(
false );
1668 m_gal->SetIsFill(
true );
1680 double shadowOffset = 0.0;
1682 if( drawingShadows )
1684 double shadowWidth = getShadowWidth( !aText->
IsSelected() );
1687 const double adjust = 1.2f;
1688 shadowOffset = shadowWidth/2.0f * adjust;
1702 pos.
y = bBox.
GetTop() - shadowOffset;
1705 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
1714 pos.
x = bBox.
GetLeft() - shadowOffset;
1723 wxFAIL_MSG( wxT(
"Indeterminate state legal only in dialogs." ) );
1734 else if( drawingShadows )
1736 m_gal->SetIsFill(
false );
1737 m_gal->SetIsStroke(
true );
1747 text_offset.
x -= fudge;
1749 text_offset.
y -= fudge;
1751 text_offset.
x += fudge;
1753 text_offset.
y += fudge;
1762 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1763 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1773 int adjust =
KiROUND( sizeDiff * 0.4 );
1774 VECTOR2I adjust_offset( 0, - adjust );
1777 text_offset += adjust_offset;
1780 if( nonCached( aText )
1782 && !shownText.Contains( wxT(
"\n" ) ) )
1789 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
1797 m_gal->DrawGlyphs( *cache );
1814 switch( aText->
Type() )
1822 showAnchor = !
static_cast<const SCH_LABEL*
>( aText )->IsDangling();
1839 drawAnchor( aText->
GetPosition(), drawingShadows );
1844void SCH_PAINTER::draw(
const SCH_TEXTBOX* aTextBox,
int aLayer,
bool aDimmed )
1854 if( !isUnitAndConversionShown( aTextBox ) )
1857 if( aTextBox->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
1862 if( m_schSettings.IsPrinting() && drawingShadows )
1865 COLOR4D color = getRenderColor( aTextBox, aLayer, drawingShadows, aDimmed );
1867 float borderWidth = getLineWidth( aTextBox, drawingShadows );
1881 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1882 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
1886 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
1894 m_gal->DrawGlyphs( *cache );
1906 m_gal->SetFillColor(
color );
1907 m_gal->SetStrokeColor(
color );
1911 m_gal->SetIsFill(
true );
1912 m_gal->SetIsStroke(
false );
1913 m_gal->SetLineWidth( borderWidth );
1922 if( aTextBox->
IsFilled() && !m_schSettings.PrintBlackAndWhiteReq() )
1924 m_gal->SetIsFill(
true );
1925 m_gal->SetIsStroke(
false );
1926 m_gal->SetLineWidth( borderWidth );
1941 if( m_schSettings.m_OverrideItemColors || aTextBox->
IsBrightened()
1944 borderColor = m_schSettings.GetLayerColor( aLayer );
1947 if( transparency > 0.0 )
1948 borderColor = borderColor.
WithAlpha( borderColor.
a * ( 1.0 - transparency ) );
1952 borderColor = borderColor.
Mix( bg, 0.5f );
1956 m_gal->SetIsFill(
false );
1957 m_gal->SetIsStroke(
true );
1958 m_gal->SetStrokeColor( borderColor );
1959 m_gal->SetLineWidth( borderWidth );
1969 for(
SHAPE* shape : shapes )
1977 m_gal->DrawLine( a+1, b );
1979 m_gal->DrawLine( a, b );
1983 for(
SHAPE* shape : shapes )
1991void SCH_PAINTER::draw(
const SCH_TABLE* aTable,
int aLayer,
bool aDimmed )
1997 draw( cell, aLayer, aDimmed );
2012 lineWidth = stroke.GetWidth();
2013 color = stroke.GetColor();
2014 lineStyle = stroke.GetLineStyle();
2016 if( lineWidth == 0 )
2017 lineWidth = m_schSettings.GetDefaultPenWidth();
2025 m_gal->SetIsFill(
false );
2026 m_gal->SetIsStroke(
true );
2027 m_gal->SetStrokeColor(
color );
2028 m_gal->SetLineWidth( (
float) lineWidth );
2032 [&](
const SHAPE& shape )
2039 m_gal->DrawLine( a+1, b );
2041 m_gal->DrawLine( a, b );
2050 m_gal->DrawLine( ptA, ptB );
2064 m_gal->DrawRectangle( ptA, ptB );
2069 strokeShape( rect );
2079 for(
int col = 0; col < aTable->
GetColCount() - 1; ++col )
2081 for(
int row = 0; row < aTable->
GetRowCount(); ++row )
2090 strokeLine( topRight, cell->
GetEnd() );
2097 for(
int row = 0; row < aTable->
GetRowCount() - 1; ++row )
2099 for(
int col = 0; col < aTable->
GetColCount(); ++col )
2108 strokeLine( botLeft, cell->
GetEnd() );
2138 strokeRect( pos,
end );
2144wxString SCH_PAINTER::expandLibItemTextVars(
const wxString& aSourceText,
2147 std::function<bool( wxString* )> symbolResolver =
2148 [&]( wxString* token ) ->
bool
2153 return aSymbolContext->
ResolveTextVar( &m_schematic->CurrentSheet(), token );
2163 bool DNP = aSymbol->
GetDNP();
2167 if( m_schSettings.IsPrinting() && drawingShadows )
2170 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2173 draw( &field, aLayer, DNP || markExclusion );
2185 int unit = m_schematic ? aSymbol->
GetUnitSelection( &m_schematic->CurrentSheet() ) : 1;
2191 std::vector<SCH_PIN*> originalPins = originalSymbol->
GetPins( unit, bodyStyle );
2195 std::vector<SCH_PIN*> tempPins = tempSymbol.
GetPins( unit, bodyStyle );
2203 tempItem.SetFlags( aSymbol->
GetFlags() );
2211 textItem->
SetText( expandLibItemTextVars( textItem->
GetText(), aSymbol ) );
2218 textboxItem->
SetText( expandLibItemTextVars( textboxItem->
GetText(), aSymbol ) );
2223 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2226 SCH_PIN* tempPin = tempPins[ i ];
2245 DNP || markExclusion );
2247 for(
unsigned i = 0; i < tempPins.size(); ++i )
2250 SCH_PIN* tempPin = tempPins[ i ];
2258 if( DNP || markExclusion )
2264 std::max( bbox.
GetY() - pins.
GetY(),
2268 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2269 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2276 m_gal->AdvanceDepth();
2277 m_gal->SetIsStroke(
true );
2278 m_gal->SetIsFill(
true );
2279 m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ) );
2280 m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ) );
2282 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2283 std::swap( pt1.
x, pt2.
x );
2284 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2289void SCH_PAINTER::draw(
const SCH_FIELD* aField,
int aLayer,
bool aDimmed )
2293 if( m_schSettings.IsPrinting() && drawingShadows )
2299 if( !isUnitAndConversionShown( aField ) )
2302 if( aField->
IsPrivate() && !m_schSettings.m_IsSymbolEditor )
2309 if( std::find( layers.begin(), layers.end(), aLayer ) == layers.end() )
2314 COLOR4D color = getRenderColor( aField, aLayer, drawingShadows, aDimmed );
2319 : m_schSettings.m_ShowHiddenFields;
2329 if( shownText.IsEmpty() )
2365 if( m_schSettings.GetDrawBoundingBoxes() )
2366 drawItemBoundingBox( aField );
2368 m_gal->SetStrokeColor(
color );
2369 m_gal->SetFillColor(
color );
2371 if( drawingShadows && getFont( aField )->IsOutline() )
2373 BOX2I shadow_box = bbox;
2376 m_gal->SetIsStroke(
false );
2377 m_gal->SetIsFill(
true );
2390 if( drawingShadows )
2395 m_gal->SetStrokeColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
2396 m_gal->SetFillColor( m_schSettings.GetLayerColor(
LAYER_HOVERED ) );
2400 if( nonCached( aField ) && aField->
RenderAsBitmap( m_gal->GetWorldScale() ) )
2402 bitmapText( *m_gal, shownText, textpos, attributes );
2407 std::vector<std::unique_ptr<KIFONT::GLYPH>>* cache =
nullptr;
2410 cache = aField->
GetRenderCache( shownText, textpos, attributes );
2415 m_gal->DrawGlyphs( *cache );
2427 if( aField->
IsMoving() && m_schematic )
2431 m_gal->SetLineWidth( m_schSettings.GetOutlineWidth() );
2433 m_gal->DrawLine( aField->
GetPosition(), parentPos );
2437 drawAnchor( aField->
GetPosition(), drawingShadows );
2446 if( m_schSettings.IsPrinting() && drawingShadows )
2451 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2454 draw( &field, aLayer,
false );
2465 if( drawingDangling )
2477 std::vector<VECTOR2I> pts;
2478 std::deque<VECTOR2D> pts2;
2483 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
2485 m_gal->SetIsStroke(
true );
2486 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2487 m_gal->SetStrokeColor(
color );
2489 if( drawingShadows )
2491 m_gal->SetIsFill(
eeconfig()->m_Selection.fill_shapes );
2492 m_gal->SetFillColor(
color );
2493 m_gal->DrawPolygon( pts2 );
2497 m_gal->SetIsFill(
false );
2498 m_gal->DrawPolyline( pts2 );
2501 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2505void SCH_PAINTER::draw(
const SCH_LABEL* aLabel,
int aLayer )
2509 if( m_schSettings.IsPrinting() && drawingShadows )
2514 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2517 draw( &field, aLayer,
false );
2528 if( drawingDangling )
2540 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2548 if( m_schSettings.IsPrinting() && drawingShadows )
2553 if( !( drawingShadows || drawingDangling ) ||
eeconfig()->m_Selection.draw_selected_children )
2556 draw( &field, aLayer,
false );
2567 if( drawingDangling )
2579 std::vector<VECTOR2I> i_pts;
2580 std::deque<VECTOR2D> d_pts;
2584 for(
const VECTOR2I& i_pt : i_pts )
2585 d_pts.emplace_back(
VECTOR2D( i_pt.x, i_pt.y ) );
2587 m_gal->SetIsFill(
true );
2589 m_gal->SetIsStroke(
true );
2590 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2591 m_gal->SetStrokeColor(
color );
2592 m_gal->DrawPolyline( d_pts );
2594 draw(
static_cast<const SCH_TEXT*
>( aLabel ), aLayer,
false );
2605 if( m_schSettings.IsPrinting() && drawingShadows )
2608 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2611 draw( &field, aLayer,
false );
2634 std::vector<VECTOR2I> pts;
2635 std::deque<VECTOR2D> pts2;
2640 pts2.emplace_back(
VECTOR2D( p.x, p.y ) );
2642 m_gal->SetIsFill(
false );
2643 m_gal->SetFillColor(
color );
2644 m_gal->SetIsStroke(
true );
2645 m_gal->SetLineWidth( getLineWidth( aLabel, drawingShadows ) );
2646 m_gal->SetStrokeColor(
color );
2650 m_gal->DrawLine( pts2[0], pts2[1] );
2651 m_gal->SetIsFill(
true );
2652 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
2656 m_gal->DrawLine( pts2[0], pts2[1] );
2657 m_gal->DrawCircle( pts2[2], ( pts2[2] - pts2[1] ).EuclideanNorm() );
2661 m_gal->DrawPolyline( pts2 );
2666void SCH_PAINTER::draw(
const SCH_SHEET* aSheet,
int aLayer )
2669 bool DNP = aSheet->
GetDNP();
2673 if( m_schSettings.IsPrinting() && drawingShadows )
2676 if( !drawingShadows ||
eeconfig()->m_Selection.draw_selected_children )
2679 draw( &field, aLayer, DNP || markExclusion );
2682 draw(
static_cast<SCH_HIERLABEL*
>( sheetPin ), aLayer, DNP || markExclusion );
2695 if( !m_schSettings.PrintBlackAndWhiteReq() )
2698 m_gal->SetIsFill(
true );
2699 m_gal->SetIsStroke(
false );
2701 m_gal->DrawRectangle( pos, pos + size );
2707 m_gal->SetStrokeColor( getRenderColor( aSheet,
LAYER_SHEET, drawingShadows ) );
2708 m_gal->SetIsStroke(
true );
2709 m_gal->SetLineWidth( getLineWidth( aSheet, drawingShadows ) );
2710 m_gal->SetIsFill(
false );
2712 m_gal->DrawRectangle( pos, pos + size );
2715 if( DNP || markExclusion )
2721 std::max( bbox.
GetY() - pins.
GetY(),
2725 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2726 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2733 m_gal->SetIsStroke(
true );
2734 m_gal->SetIsFill(
true );
2735 m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ) );
2736 m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ) );
2738 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2739 std::swap( pt1.
x, pt2.
x );
2740 m_gal->DrawSegment( pt1, pt2, strokeWidth );
2749 if( m_schSettings.IsPrinting() && drawingShadows )
2755 m_gal->SetIsStroke(
true );
2756 m_gal->SetLineWidth( getLineWidth( aNC, drawingShadows ) );
2757 m_gal->SetStrokeColor( getRenderColor( aNC,
LAYER_NOCONNECT, drawingShadows ) );
2758 m_gal->SetIsFill(
false );
2761 int delta = std::max( aNC->
GetSize(), m_schSettings.GetDefaultPenWidth() * 3 ) / 2;
2776 bool drawingBusses = aLayer ==
LAYER_BUS;
2778 if( m_schSettings.IsPrinting() && drawingShadows )
2781 bool highlightNetclassColors =
false;
2789 if( !highlightNetclassColors && drawingNetColorHighlights )
2792 if( m_schSettings.m_OverrideItemColors && drawingNetColorHighlights )
2820 if( highlightNetclassColors )
2825 else if( drawingBusses )
2829 if( drawingNetColorHighlights )
2841 if( drawingDangling )
2843 m_gal->SetIsFill(
false );
2844 m_gal->SetIsStroke(
true );
2845 m_gal->SetStrokeColor(
color.Brightened( 0.3 ) );
2846 m_gal->SetLineWidth( m_schSettings.GetDanglingIndicatorThickness() );
2856 m_gal->DrawCircle( aEntry->
GetEnd(),
2865 draw( &line, aLayer );
2881 if( img_scale != 1.0 )
2882 m_gal->Scale(
VECTOR2D( img_scale, img_scale ) );
2886 m_gal->DrawBitmap( refImage.
GetImage() );
2894 m_gal->SetIsStroke(
true );
2895 m_gal->SetStrokeColor(
color );
2896 m_gal->SetLineWidth ( getShadowWidth( aBitmap->
IsBrightened() ) );
2897 m_gal->SetIsFill(
false );
2905 bm_size.
x /= img_scale;
2906 bm_size.
y /= img_scale;
2907 const VECTOR2D origin( -bm_size.
x / 2.0, -bm_size.
y / 2.0 );
2910 m_gal->DrawRectangle( origin,
end );
2922 if( m_schSettings.IsPrinting() && drawingShadows )
2932 m_gal->SetIsFill( !drawingShadows );
2933 m_gal->SetFillColor(
color );
2934 m_gal->SetIsStroke( drawingShadows );
2935 m_gal->SetLineWidth( getLineWidth( aMarker, drawingShadows ) );
2936 m_gal->SetStrokeColor(
color );
2941 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)
Indicates the item is drawn on a non-cached layer in OpenGL.
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' flags.
KIGFX::COLOR4D GetBackgroundColor() const
BOX2I GetBodyAndPinsBoundingBox() const override
Return a bounding box for the symbol body and pins but not the fields.
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) 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) i.e.
static int internalPinDecoSize(const RENDER_SETTINGS *aSettings, const SCH_PIN &aPin)
Utility for getting the size of the 'internal' pin decorators (as a radius) i.e.
#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