59#include <api/board/board_types.pb.h> 
   63#include <magic_enum.hpp> 
  151    *
this = *
static_cast<const PAD*
>( aOther );
 
 
  160    pad.mutable_id()->set_value( 
m_Uuid.AsStdString() );
 
  162    pad.set_locked( 
IsLocked() ? kiapi::common::types::LockedState::LS_LOCKED
 
  163                               : kiapi::common::types::LockedState::LS_UNLOCKED );
 
  170    google::protobuf::Any padStackMsg;
 
  172    padStackMsg.UnpackTo( 
pad.mutable_pad_stack() );
 
  177    aContainer.PackFrom( 
pad );
 
 
  183    kiapi::board::types::Pad 
pad;
 
  185    if( !aContainer.UnpackTo( &
pad ) )
 
  191    SetLocked( 
pad.locked() == kiapi::common::types::LockedState::LS_LOCKED );
 
  197    google::protobuf::Any padStackWrapper;
 
  198    padStackWrapper.PackFrom( 
pad.pad_stack() );
 
  203    if( 
pad.has_copper_clearance_override() )
 
 
  268        int thisNetTieGroup = padToNetTieGroupMap[ 
GetNumber() ];
 
  269        int otherNetTieGroup = padToNetTieGroupMap[ aOther->
GetNumber() ];
 
  271        return thisNetTieGroup >= 0 && thisNetTieGroup == otherNetTieGroup;
 
 
  280    return m_pinType.Contains( wxT( 
"no_connect" ) );
 
 
  426            else if( aOnlyCheckIfPermitted )
 
  436                return board->GetConnectivity()->IsConnectedOnLayer( 
this, aLayer, nonZoneTypes );
 
 
  475    m_padStack.SetRoundRectRadius( aRadius, aLayer );
 
 
  481    m_padStack.SetRoundRectRadiusRatio( std::clamp( aRadiusScale, 0.0, 0.5 ), aLayer );
 
 
  490                  "Set front radius only meaningful for normal padstacks" );
 
  492    m_padStack.SetRoundRectRadiusRatio( std::clamp( aRadiusScale, 0.0, 0.5 ), 
F_Cu );
 
 
  500    const int      minSize = std::min( size.
x, size.
y );
 
  501    const double   newRatio = aRadius / double( 
minSize );
 
 
  510    const int      minSize = std::min( size.
x, size.
y );
 
 
  519    m_padStack.SetChamferRatio( aChamferScale, aLayer );
 
 
  541        std::shared_ptr<SHAPE_COMPOUND> effective_compund = std::make_shared<SHAPE_COMPOUND>();
 
  546            return effective_compund;
 
  550            effective_compund->AddShape( std::make_shared<SHAPE_NULL>() );
 
  551            return effective_compund;
 
  558        std::shared_ptr<SHAPE_COMPOUND> effective_compund = std::make_shared<SHAPE_COMPOUND>();
 
  572                return effective_compund;
 
  576                effective_compund->AddShape( std::make_shared<SHAPE_NULL>() );
 
  577                return effective_compund;
 
  588                 wxString::Format( wxT( 
"Missing shape in PAD::GetEffectiveShape for layer %s." ),
 
  589                                   magic_enum::enum_name( aLayer ) ) );
 
  591                 wxString::Format( wxT( 
"Null shape in PAD::GetEffectiveShape for layer %s." ),
 
  592                                   magic_enum::enum_name( aLayer ) ) );
 
 
  643        half_width = half_size.
x;
 
  647        half_width = std::min( half_size.
x, half_size.
y );
 
  648        half_len = 
VECTOR2I( half_size.
x - half_width, half_size.
y - half_width );
 
 
  666    auto add = [
this, aLayer]( 
SHAPE* aShape )
 
  678    switch( effectiveShape )
 
  685        if( size.
x == size.
y ) 
 
  692            int     half_width = std::min( half_size.
x, half_size.
y );
 
  693            VECTOR2I half_len( half_size.
x - half_width, half_size.
y - half_width );
 
  695            add( 
new SHAPE_SEGMENT( shapePos - half_len, shapePos + half_len, half_width * 2 ) );
 
  714            const int min_len = 
pcbIUScale.mmToIU( 0.0001 );
 
  716            if( half_size.
x < min_len && half_size.
y < min_len )
 
  724            trap_delta = 
m_padStack.TrapezoidDeltaSize( aLayer ) / 2;
 
  729        corners.
Append( -half_size.
x - trap_delta.
y,  half_size.
y + trap_delta.
x );
 
  730        corners.
Append(  half_size.
x + trap_delta.
y,  half_size.
y - trap_delta.
x );
 
  731        corners.
Append(  half_size.
x - trap_delta.
y, -half_size.
y + trap_delta.
x );
 
  732        corners.
Append( -half_size.
x + trap_delta.
y, -half_size.
y - trap_delta.
x );
 
  735        corners.
Move( shapePos );
 
  790        wxFAIL_MSG( wxT( 
"PAD::buildEffectiveShapes: Unsupported pad shape: PAD_SHAPE::" )
 
  791                    + wxString( std::string( magic_enum::enum_name( effectiveShape ) ) ) );
 
  797        for( 
const std::shared_ptr<PCB_SHAPE>& primitive : 
m_padStack.Primitives( aLayer ) )
 
  799            if( !primitive->IsProxyItem() )
 
  801                for( 
SHAPE* shape : primitive->MakeEffectiveShapes() )
 
  804                    shape->Move( shapePos );
 
 
  831            std::shared_ptr<SHAPE_POLY_SET>& effectivePolygon = 
m_effectivePolygons[ aLayer ][ aErrorLoc ];
 
  833            effectivePolygon = std::make_shared<SHAPE_POLY_SET>();
 
  837    if( doBoundingRadius )
 
  844                std::shared_ptr<SHAPE_POLY_SET>& effectivePolygon = 
m_effectivePolygons[ aLayer ][ aErrorLoc ];
 
  846                for( 
int cnt = 0; cnt < effectivePolygon->OutlineCount(); ++cnt )
 
  850                    for( 
int ii = 0; ii < poly.
PointCount(); ++ii )
 
 
  904            if( copperLayers.count() > 1 )
 
  906                layerMask &= 
~LSET::AllCuMask();
 
  908                if( copperLayers.test( 
B_Cu ) )
 
  911                    layerMask.
set( copperLayers.
Seq().front() );
 
 
  940    if( !wasRoundable && isRoundable )
 
 
  996    auto mirrorBitFlags = []( 
int& aBitfield, 
int a, 
int b )
 
  998                              bool temp = aBitfield & a;
 
 
 1055            for( std::shared_ptr<PCB_SHAPE>& primitive : 
m_padStack.Primitives( aLayer ) )
 
 1059                primitive->SetParent(
this);
 
 1060                primitive->Flip( 
VECTOR2I( 0, 0 ), aFlipDirection );
 
 
 1072    if( loc_offset.
x == 0 && loc_offset.
y == 0 )
 
 
 1089        bool hasAnnularRing = 
true;
 
 1100                        hasAnnularRing = 
false;
 
 1110                        hasAnnularRing = 
false;
 
 1122            if( !hasAnnularRing )
 
 
 1132    if( 
m_padStack.Clearance().has_value() && aSource )
 
 1133        *aSource = 
_( 
"pad" );
 
 
 1145        return parentFootprint->GetClearanceOverrides( aSource );
 
 1147    return std::optional<int>();
 
 
 1192    std::optional<int> margin;
 
 1206        margin = 
m_padStack.SolderMaskMargin( aLayer );
 
 1208        if( !margin.has_value() )
 
 1211                margin = parentFootprint->GetLocalSolderMaskMargin();
 
 1215    int marginValue = margin.value_or( 0 );
 
 1220    if( marginValue < 0 )
 
 1224        if( marginValue < minsize )
 
 1225            marginValue = minsize;
 
 
 1247    std::optional<int>    margin;
 
 1248    std::optional<double> mratio;
 
 1267        margin = 
m_padStack.SolderPasteMargin( aLayer );
 
 1268        mratio = 
m_padStack.SolderPasteMarginRatio( aLayer );
 
 1270        if( !margin.has_value() )
 
 1273                margin = parentFootprint->GetLocalSolderPasteMargin();
 
 1276        if( !mratio.has_value() )
 
 1279                mratio = parentFootprint->GetLocalSolderPasteMarginRatio();
 
 1287    pad_margin.
x = margin.value_or( 0 ) + 
KiROUND( padSize.
x * mratio.value_or( 0 ) );
 
 1288    pad_margin.
y = margin.value_or( 0 ) + 
KiROUND( padSize.
y * mratio.value_or( 0 ) );
 
 1293        if( pad_margin.
x < -padSize.
x / 2 )
 
 1294            pad_margin.
x = -padSize.
x / 2;
 
 1296        if( pad_margin.
y < -padSize.
y / 2 )
 
 1297            pad_margin.
y = -padSize.
y / 2;
 
 
 1311            *aSource = 
_( 
"pad" );
 
 1317            connection = parentFootprint->GetZoneConnectionOverrides( aSource );
 
 
 1326    if( 
m_padStack.ThermalSpokeWidth().has_value() && aSource )
 
 1327        *aSource = 
_( 
"pad" );
 
 1329    return m_padStack.ThermalSpokeWidth().value_or( 0 );
 
 
 1335    if( 
m_padStack.ThermalGap().has_value() && aSource )
 
 1336        *aSource = 
_( 
"pad" );
 
 
 1349        if( parentFootprint )
 
 1350            aList.emplace_back( 
_( 
"Footprint" ), parentFootprint->
GetReference() );
 
 1353    aList.emplace_back( 
_( 
"Pad" ), 
m_number );
 
 1359        aList.emplace_back( 
_( 
"Pin Type" ), 
GetPinType() );
 
 1365        aList.emplace_back( 
_( 
"Resolved Netclass" ),
 
 1369            aList.emplace_back( 
_( 
"Status" ), 
_( 
"Locked" ) );
 
 1381            double area = poly->Area();
 
 1413            && padSize.
x == padSize.
y )
 
 1427    if( !fp_orient.
IsZero() )
 
 1432    aList.emplace_back( 
_( 
"Rotation" ), msg );
 
 1436        aList.emplace_back( 
_( 
"Length in Package" ),
 
 1442    if( drill.
x > 0 || drill.
y > 0 )
 
 1446            aList.emplace_back( 
_( 
"Hole" ),
 
 1447                                wxString::Format( wxT( 
"%s" ),
 
 1452            aList.emplace_back( 
_( 
"Hole X / Y" ),
 
 1453                                wxString::Format( wxT( 
"%s / %s" ),
 
 1462    if( !source.IsEmpty() )
 
 1464        aList.emplace_back( wxString::Format( 
_( 
"Min Clearance: %s" ),
 
 1466                            wxString::Format( 
_( 
"(from %s)" ),
 
 1471    aList.emplace_back( wxT( 
"UUID" ), 
m_Uuid.AsString() );
 
 
 1501    bool contains = 
false;
 
 
 1521    BOX2I arect = aRect;
 
 1548                    int count = poly->TotalVertices();
 
 1550                    for( 
int ii = 0; ii < count; ii++ )
 
 1552                        VECTOR2I vertex = poly->CVertex( ii );
 
 1553                        VECTOR2I vertexNext = poly->CVertex( ( ii + 1 ) % count );
 
 
 1604    if( ( diff = 
static_cast<int>( aPadRef->
m_attribute ) - 
static_cast<int>( aPadCmp->
m_attribute ) ) != 0 )
 
 
 1631    default:                        
return wxT( 
"???" );
 
 
 1644    default:                 
return wxT( 
"???" );
 
 
 1660            return wxString::Format( 
_( 
"NPTH pad of %s" ), parentFP->
GetReference() );
 
 1662            return _( 
"NPTH pad" );
 
 1670                return wxString::Format( 
_( 
"Pad %s of %s on %s" ),
 
 1677                return wxString::Format( 
_( 
"Pad on %s" ),
 
 1685                return wxString::Format( 
_( 
"PTH pad %s of %s" ),
 
 1691                return _( 
"PTH pad" );
 
 1701                return wxString::Format( 
_( 
"Pad %s %s of %s on %s" ),
 
 1709                return wxString::Format( 
_( 
"Pad %s on %s" ),
 
 1718                return wxString::Format( 
_( 
"PTH pad %s %s of %s" ),
 
 1725                return wxString::Format( 
_( 
"PTH pad %s" ),
 
 
 1741    PAD* cloned = 
new PAD( *
this );
 
 1748                    primitive->SetParent( cloned );
 
 
 1757    std::vector<int> layers;
 
 1758    layers.reserve( 64 );
 
 1778        cuLayers &= 
board->GetEnabledLayers();
 
 1780    if( cuLayers.count() > 1 )
 
 1824            layers.push_back( each_layer );
 
 
 1852        LSET visiblePhysical = 
board->GetVisibleLayers();
 
 1853        visiblePhysical &= 
board->GetEnabledLayers();
 
 1856        if( !visiblePhysical.any() )
 
 1869            LSET visible = 
board->GetVisibleLayers();
 
 1870            visible &= 
board->GetEnabledLayers();
 
 1884    int64_t  minSide = std::min( padSize.
x, padSize.
y );
 
 
 1896    int      solderMaskMargin = 0;
 
 1904                solderPasteMargin.
x = std::max( solderPasteMargin.
x, layerMargin.
x );
 
 1905                solderPasteMargin.
y = std::max( solderPasteMargin.
y, layerMargin.
y );
 
 1914        if( cfg && cfg->m_Display.m_PadClearance && 
GetBoard() )
 
 1919    int xMargin = std::max( solderMaskMargin, solderPasteMargin.
x ) + 
clearance;
 
 1920    int yMargin = std::max( solderMaskMargin, solderPasteMargin.
y ) + 
clearance;
 
 
 2003    std::swap( *
this, *
static_cast<PAD*
>( aImage ) );
 
 
 2012    if( !drillsize.
x || !drillsize.
y )
 
 2018                            aError, aErrorLoc );
 
 
 2025                                   int aMaxError, 
ERROR_LOC aErrorLoc, 
bool ignoreLineWidth )
 const 
 2027    wxASSERT_MSG( !ignoreLineWidth, wxT( 
"IgnoreLineWidth has no meaning for pads." ) );
 
 2029                  wxT( 
"UNDEFINED_LAYER is no longer allowed for PAD::TransformShapeToPolygon" ) );
 
 2034    const int pad_min_seg_per_circle_count = 16;
 
 2049                                      pad_min_seg_per_circle_count );
 
 2053            int      half_width = std::min( dx, dy );
 
 2059                                    ( half_width + aClearance ) * 2, aMaxError, aErrorLoc,
 
 2060                                    pad_min_seg_per_circle_count );
 
 2074                                     ddx, ddy, aClearance, aMaxError, aErrorLoc );
 
 2075        aBuffer.
Append( outline );
 
 2089                                              aClearance, aMaxError, aErrorLoc );
 
 2090        aBuffer.
Append( outline );
 
 2104                aClearance += aMaxError;
 
 2109        else if( aClearance < 0 )
 
 2119        aBuffer.
Append( outline );
 
 2124        wxFAIL_MSG( wxT( 
"PAD::TransformShapeToPolygon no implementation for " )
 
 2125                    + wxString( std::string( magic_enum::enum_name( shape ) ) ) );
 
 
 2169            [&]( 
PCB_SHAPE* aShape ) -> std::vector<PCB_SHAPE*>
 
 2171                std::vector<PCB_SHAPE*> matching;
 
 2181                        matching.push_back( other );
 
 2188    std::vector<PCB_SHAPE*> mergedShapes;
 
 2215            int minExtent = std::min( 
GetSize( layer ).x, 
GetSize( layer ).y );
 
 2234        mergedShapes.push_back( fpShape );
 
 2242                group->RemoveItem( fpShape );
 
 2260        for( 
PCB_SHAPE* other : findMatching( fpShape ) )
 
 2263            mergedShapes.push_back( other );
 
 2273    return mergedShapes;
 
 
 2278                    const std::function<
void( 
int aErrorCode, 
const wxString& aMsg )>& aErrorHandler )
 const 
 2283                doCheckPad( aLayer, aUnitsProvider, aForPadProperties, aErrorHandler );
 
 2289    if( !padlayers_mask[
F_Cu] && !padlayers_mask[
B_Cu] )
 
 2293            aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(plated through holes normally have a copper pad on " 
 2294                                             "at least one outer layer)" ) );
 
 2301        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"('fiducial' pads are normally plated)" ) );
 
 2305        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"('testpoint' pads are normally plated)" ) );
 
 2308        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"('heatsink' pads are normally plated)" ) );
 
 2311        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"('castellated' pads are normally PTH)" ) );
 
 2314        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"('BGA' property is for SMD pads)" ) );
 
 2317        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"('mechanical' pads are normally PTH)" ) );
 
 2322        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"('press-fit' pads are normally PTH with round holes)" ) );
 
 2329        if( drill_size.
x <= 0
 
 2339            aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(connector pads normally have no solder paste; use a " 
 2340                                             "SMD pad instead)" ) );
 
 2346        if( drill_size.
x > 0 || drill_size.
y > 0 )
 
 2353            aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(SMD pad has copper on both sides of the board)" ) );
 
 2359                aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(SMD pad has copper and mask layers on different " 
 2360                                                 "sides of the board)" ) );
 
 2364                aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(SMD pad has copper and paste layers on different " 
 2365                                                 "sides of the board)" ) );
 
 2372                aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(SMD pad has copper and mask layers on different " 
 2373                                                 "sides of the board)" ) );
 
 2377                aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(SMD pad has copper and paste layers on different " 
 2378                                                 "sides of the board)" ) );
 
 2381        else if( innerlayers_mask.count() != 0 )
 
 2383            aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(SMD pad has no outer layers)" ) );
 
 
 2393                      const std::function<
void( 
int aErrorCode, 
const wxString& aMsg )>& aErrorHandler )
 const 
 2409        const int min_drill_size = 4;
 
 2413            msg.Printf( 
_( 
"(PTH pad hole size must be larger than %s)" ),
 
 2436                aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(PTH pad hole leaves no copper)" ) );
 
 2438            else if( aForPadProperties )
 
 2446                    aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(PTH pad hole not fully inside copper)" ) );
 
 2453                aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(pad hole not inside pad shape)" ) );
 
 2458        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(negative local clearance values have no effect)" ) );
 
 2465    if( solderMaskMargin.has_value() && solderMaskMargin.value() < 0 )
 
 2467        int absMargin = abs( solderMaskMargin.value() );
 
 2471            for( 
const std::shared_ptr<PCB_SHAPE>& shape : 
GetPrimitives( aLayer ) )
 
 2473                BOX2I shapeBBox = shape->GetBoundingBox();
 
 2477                    aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(negative solder mask clearance is larger " 
 2478                                                     "than some shape primitives; results may be " 
 2485        else if( absMargin > pad_size.
x || absMargin > pad_size.
y )
 
 2487            aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(negative solder mask clearance is larger than pad; " 
 2488                                             "no solder mask will be generated)" ) );
 
 2501    paste_size.x = pad_size.
x + paste_margin + 
KiROUND( pad_size.
x * paste_ratio );
 
 2502    paste_size.y = pad_size.
y + paste_margin + 
KiROUND( pad_size.
y * paste_ratio );
 
 2504    if( paste_size.x <= 0 || paste_size.y <= 0 )
 
 2506        aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(negative solder paste margin is larger than pad; " 
 2507                                         "no solder paste mask will be generated)" ) );
 
 2515            aErrorHandler( 
DRCE_PADSTACK, 
_( 
"(corner size will make pad circular)" ) );
 
 
 2554    const PAD& other = 
static_cast<const PAD&
>( aBoardItem );
 
 2556    return *
this == other;
 
 
 2583    const PAD& other = 
static_cast<const PAD&
>( aOther );
 
 2585    double similarity = 1.0;
 
 
 2604    poly_no_hole.
Append( aPoly );
 
 2611    for( 
int ii = 0; ii < poly_no_hole.
OutlineCount(); ++ii )
 
 
 2646    if( aPrimitivesList.size() )
 
 
 2656    for( 
const std::shared_ptr<PCB_SHAPE>& prim : aPrimitivesList )
 
 
 2666    m_padStack.AddPrimitive( aPrimitive, aLayer );
 
 
 2704        SHAPE_RECT rect( -padSize.
x / 2, -padSize.
y / 2, padSize.
x, padSize.
y );
 
 2717    for( 
const std::shared_ptr<PCB_SHAPE>& primitive : 
m_padStack.Primitives( aLayer ) )
 
 2719        if( !primitive->IsProxyItem() )
 
 
 2770        if( zcMap.
Choices().GetCount() == 0 )
 
 2784                      _HKI( 
"Front, back and connected layers" ) )
 
 2786                      _HKI( 
"Start and end layers only" ) );
 
 2802                    if( 
PAD* 
pad = 
dynamic_cast<PAD*
>( aItem ) )
 
 2808        auto padCanHaveHole =
 
 2811                    if( 
PAD* 
pad = 
dynamic_cast<PAD*
>( aItem ) )
 
 2817        auto hasNormalPadstack =
 
 2820                    if( 
PAD* 
pad = 
dynamic_cast<PAD*
>( aItem ) )
 
 2831        const wxString groupPad = 
_HKI( 
"Pad Properties" );
 
 2852                                     wxPGChoices choices;
 
 2867                                       if( 
PAD* 
pad = 
dynamic_cast<PAD*
>( aItem ) )
 
 2880        const auto hasRoundRadius =
 
 2883                    if( 
PAD* 
pad = 
dynamic_cast<PAD*
>( aItem ) )
 
 2920                                       if( 
PAD* 
pad = 
dynamic_cast<PAD*
>( aItem ) )
 
 2940        const wxString groupOverrides = 
_HKI( 
"Overrides" );
 
 
 
types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
 
KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
 
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
 
constexpr EDA_IU_SCALE pcbIUScale
 
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
 
BITMAPS
A list of all bitmap identifiers.
 
ZONE_LAYER_OVERRIDE
Conditionally flashed vias and pads that interact with zones of different priority can be very squirr...
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
BASE_SET & set(size_t pos)
 
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
 
wxString GetNetnameMsg() const
 
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
 
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
 
wxString GetNetname() const
 
BOARD_CONNECTED_ITEM(BOARD_ITEM *aParent, KICAD_T idtype)
 
void PackNet(kiapi::board::types::Net *aProto) const
 
TEARDROP_PARAMETERS m_teardropParams
Not all BOARD_CONNECTED_ITEMs support teardrops, but we want those that do to share a single section ...
 
const wxString & GetShortNetname() const
 
void UnpackNet(const kiapi::board::types::Net &aProto)
Assigns a net to this item from an API message.
 
Container for design settings for a BOARD object.
 
std::shared_ptr< DRC_ENGINE > m_DRCEngine
 
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
 
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
 
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
 
void SetLocked(bool aLocked) override
 
bool IsLocked() const override
 
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
 
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
 
FOOTPRINT * GetParentFootprint() const
 
virtual wxString LayerMaskDescribe() const
Return a string (to be shown to the user) describing a layer mask.
 
BOARD_ITEM_CONTAINER * GetParent() const
 
virtual int BoardCopperLayerCount() const
Return the total number of copper layers for the board that this item resides on.
 
Information pertinent to a Pcbnew printed circuit board.
 
int GetMaxClearanceValue() const
Returns the maximum clearance value for any object on the board.
 
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
 
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr size_type GetWidth() const
 
constexpr size_type GetHeight() const
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr const Vec & GetOrigin() const
 
constexpr const SizeVec & GetSize() const
 
constexpr bool Intersects(const BOX2< Vec > &aRect) const
 
MINOPTMAX< int > & Value()
 
DRC_CONSTRAINT EvalRules(DRC_CONSTRAINT_T aConstraintType, const BOARD_ITEM *a, const BOARD_ITEM *b, PCB_LAYER_ID aLayer, REPORTER *aReporter=nullptr)
 
The base class for create windows for drawing purpose.
 
A set of EDA_ITEMs (i.e., without duplicates).
 
virtual VECTOR2I GetPosition() const
 
EDA_ITEM & operator=(const EDA_ITEM &aItem)
Assign the members of aItem to another object.
 
KICAD_T Type() const
Returns the type of object.
 
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
virtual void SetParent(EDA_ITEM *aParent)
 
EDA_ITEM * m_parent
Owner.
 
EDA_ITEM_FLAGS GetFlags() const
 
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
 
void SetPolyShape(const SHAPE_POLY_SET &aShape)
 
virtual void SetFilled(bool aFlag)
 
void SetShape(SHAPE_T aShape)
 
void SetPolyPoints(const std::vector< VECTOR2I > &aPoints)
 
void SetFillMode(FILL_T aFill)
 
ENUM_MAP & Map(T aValue, const wxString &aName)
 
static ENUM_MAP< T > & Instance()
 
ENUM_MAP & Undefined(T aValue)
 
Class that other classes need to inherit from, in order to be inspectable.
 
Contains methods for drawing PCB-specific items.
 
virtual PCB_RENDER_SETTINGS * GetSettings() override
Return a pointer to current settings that are going to be used when drawing items.
 
PCB specific render settings.
 
PCB_LAYER_ID GetPrimaryHighContrastLayer() const
Return the board layer which is in high-contrast mode.
 
bool GetHighContrast() const
 
static double lodScaleForThreshold(const KIGFX::VIEW *aView, int aWhatIu, int aThresholdIu)
Get the scale at which aWhatIu would be drawn at the same size as aThresholdIu on screen.
 
static constexpr double LOD_HIDE
Return this constant from ViewGetLOD() to hide the item unconditionally.
 
static constexpr double LOD_SHOW
Return this constant from ViewGetLOD() to show the item unconditionally.
 
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
 
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
 
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
 
LSET is a set of PCB_LAYER_IDs.
 
static const LSET & FrontBoardTechMask()
Return a mask holding technical layers used in a board fabrication (no CU layer) on front side.
 
LSEQ UIOrder() const
Return the copper, technical and user layers in the order shown in layer widget.
 
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
 
static LSET AllCuMask(int aCuLayerCount)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
 
static LSET AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
 
static const LSET & PhysicalLayersMask()
Return a mask holding all layers which are physically realized.
 
static const LSET & BackBoardTechMask()
Return a mask holding technical layers used in a board fabrication (no CU layer) on Back side.
 
static const LSET & InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
 
static const int UNCONNECTED
Constant that holds the "unconnected net" number (typically 0) all items "connected" to this net are ...
 
double Similarity(const PADSTACK &aOther) const
Return a measure of how likely the other object is to represent the same object.
 
void ForEachUniqueLayer(const std::function< void(PCB_LAYER_ID)> &aMethod) const
Runs the given callable for each active unique copper layer in this padstack, meaning F_Cu for MODE::...
 
PCB_LAYER_ID EffectiveLayerFor(PCB_LAYER_ID aLayer) const
Determines which geometry layer should be used for the given input layer.
 
static int Compare(const PADSTACK *aPadstackRef, const PADSTACK *aPadstackCmp)
Compare two padstacks and return 0 if they are equal.
 
@ NORMAL
Shape is the same on all layers.
 
UNCONNECTED_LAYER_MODE
! Whether or not to remove the copper shape for unconnected layers
 
@ REMOVE_EXCEPT_START_AND_END
 
static constexpr PCB_LAYER_ID ALL_LAYERS
! Temporary layer identifier to identify code that is not padstack-aware
 
std::vector< std::shared_ptr< PCB_SHAPE > > & Primitives(PCB_LAYER_ID aLayer)
 
void SetAnchorPadShape(PCB_LAYER_ID aLayer, PAD_SHAPE aShape)
Set the shape of the anchor pad for custom shaped pads.
 
bool IsAperturePad() const
 
void SetAttribute(PAD_ATTRIB aAttribute)
 
int GetOwnClearance(PCB_LAYER_ID aLayer, wxString *aSource=nullptr) const override
Return the pad's "own" clearance in internal units.
 
void CheckPad(UNITS_PROVIDER *aUnitsProvider, bool aForPadProperties, const std::function< void(int aErrorCode, const wxString &aMsg)> &aErrorHandler) const
 
virtual void swapData(BOARD_ITEM *aImage) override
 
PAD_PROP GetProperty() const
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
double GetFrontRoundRectRadiusRatio() const
 
void doCheckPad(PCB_LAYER_ID aLayer, UNITS_PROVIDER *aUnitsProvider, bool aForPadProperties, const std::function< void(int aErrorCode, const wxString &aMsg)> &aErrorHandler) const
 
std::optional< int > GetClearanceOverrides(wxString *aSource) const override
Return any clearance overrides set in the "classic" (ie: pre-rule) system.
 
void SetPinType(const wxString &aType)
Set the pad electrical type.
 
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
 
const std::vector< std::shared_ptr< PCB_SHAPE > > & GetPrimitives(PCB_LAYER_ID aLayer) const
Accessor to the basic shape list for custom-shaped pads.
 
const ZONE_LAYER_OVERRIDE & GetZoneLayerOverride(PCB_LAYER_ID aLayer) const
 
void MergePrimitivesAsPolygon(PCB_LAYER_ID aLayer, SHAPE_POLY_SET *aMergedPolygon, ERROR_LOC aErrorLoc=ERROR_INSIDE) const
Merge all basic shapes to a SHAPE_POLY_SET.
 
int GetRoundRectCornerRadius(PCB_LAYER_ID aLayer) const
 
bool FlashLayer(int aLayer, bool aOnlyCheckIfPermitted=false) const
Check to see whether the pad should be flashed on the specific layer.
 
void SetLocalThermalGapOverride(const std::optional< int > &aOverride)
 
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer, FLASHING flashPTHPads=FLASHING::DEFAULT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
 
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
 
const BOX2I GetBoundingBox() const override
The bounding box is cached, so this will be efficient most of the time.
 
bool IsOnLayer(PCB_LAYER_ID aLayer) const override
Test to see if this object is on the given layer.
 
int GetDrillSizeY() const
 
void AddPrimitivePoly(PCB_LAYER_ID aLayer, const SHAPE_POLY_SET &aPoly, int aThickness, bool aFilled)
Has meaning only for custom shape pads.
 
std::optional< double > GetLocalSolderPasteMarginRatio() const
 
void SetFrontShape(PAD_SHAPE aShape)
 
const wxString & GetPinType() const
 
void SetZoneLayerOverride(PCB_LAYER_ID aLayer, ZONE_LAYER_OVERRIDE aOverride)
 
const VECTOR2I & GetDrillSize() const
 
PAD_ATTRIB GetAttribute() const
 
static LSET PTHMask()
layer set for a through hole pad
 
static int Compare(const PAD *aPadRef, const PAD *aPadCmp)
Compare two pads and return 0 if they are equal.
 
void SetUnconnectedLayerMode(PADSTACK::UNCONNECTED_LAYER_MODE aMode)
 
const wxString & GetPinFunction() const
 
std::mutex m_shapesBuildingLock
 
bool CanHaveNumber() const
Indicates whether or not the pad can have a number.
 
void SetThermalSpokeAngle(const EDA_ANGLE &aAngle)
The orientation of the thermal spokes.
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
const wxString & GetNumber() const
 
double ViewGetLOD(int aLayer, const KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
 
const VECTOR2I & GetDelta(PCB_LAYER_ID aLayer) const
 
void SetFrontRoundRectRadiusRatio(double aRadiusScale)
 
void BuildEffectiveShapes() const
Rebuild the effective shape cache (and bounding box and radius) for the pad and clears the dirty bit.
 
PAD_SHAPE GetFrontShape() const
 
void CopyFrom(const BOARD_ITEM *aOther) override
 
void SetLocalSolderPasteMarginRatio(std::optional< double > aRatio)
 
PAD & operator=(const PAD &aOther)
 
void SetLocalThermalSpokeWidthOverride(std::optional< int > aWidth)
Set the width of the thermal spokes connecting the pad to a zone.
 
void SetShape(PCB_LAYER_ID aLayer, PAD_SHAPE aShape)
Set the new shape of this pad.
 
std::shared_ptr< SHAPE_SEGMENT > m_effectiveHoleShape
 
bool IsLocked() const override
 
VECTOR2I GetPosition() const override
 
void SetProperty(PAD_PROP aProperty)
 
void SetThermalSpokeAngleDegrees(double aAngle)
 
EDA_ANGLE GetThermalSpokeAngle() const
 
std::map< PCB_LAYER_ID, ZONE_LAYER_OVERRIDE > m_zoneLayerOverrides
 
void Flip(const VECTOR2I &VECTOR2I, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
 
std::vector< PCB_SHAPE * > Recombine(bool aIsDryRun, int aMaxError)
Recombines the pad with other graphical shapes in the footprint.
 
PCB_LAYER_ID GetPrincipalLayer() const
 
static LSET UnplatedHoleMask()
layer set for a mechanical unplated through hole pad
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
double GetOrientationDegrees() const
 
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
 
void SetPadToDieDelay(int aDelay)
 
void FlipPrimitives(FLIP_DIRECTION aFlipDirection)
Flip (mirror) the primitives left to right or top to bottom, around the anchor position in custom pad...
 
LAYER_SHAPE_MAP m_effectiveShapes
 
bool IsNoConnectPad() const
 
int GetDrillSizeX() const
 
double GetRoundRectRadiusRatio(PCB_LAYER_ID aLayer) const
 
void DeletePrimitivesList(PCB_LAYER_ID aLayer=UNDEFINED_LAYER)
Clear the basic shapes list.
 
PAD_SHAPE GetShape(PCB_LAYER_ID aLayer) const
 
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc=ERROR_INSIDE, bool ignoreLineWidth=false) const override
Convert the pad shape to a closed polygon.
 
void SetNumber(const wxString &aNumber)
Set the pad number (note that it can be alphanumeric, such as the array reference "AA12").
 
void SetFrontRoundRectRadiusSize(int aRadius)
 
wxString ShowPadAttr() const
 
void AddPrimitive(PCB_LAYER_ID aLayer, PCB_SHAPE *aPrimitive)
Add item to the custom shape primitives list.
 
void SetDrillShape(PAD_DRILL_SHAPE aShape)
 
int m_effectiveBoundingRadius
 
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
 
void SetLocalZoneConnection(ZONE_CONNECTION aType)
 
void SetChamferRectRatio(PCB_LAYER_ID aLayer, double aChamferScale)
Has meaning only for chamfered rectangular pads.
 
int GetSolderMaskExpansion(PCB_LAYER_ID aLayer) const
 
int GetPadToDieDelay() const
 
std::optional< int > GetLocalClearance() const override
Return any local clearances set in the "classic" (ie: pre-rule) system.
 
void ImportSettingsFrom(const PAD &aMasterPad)
Import the pad settings from aMasterPad.
 
double Similarity(const BOARD_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
 
bool IsOnCopperLayer() const override
 
void SetPadstack(const PADSTACK &aPadstack)
 
void SetPosition(const VECTOR2I &aPos) override
 
const SHAPE_COMPOUND & buildEffectiveShape(PCB_LAYER_ID aLayer) const
 
const PADSTACK & Padstack() const
 
const VECTOR2I & GetOffset(PCB_LAYER_ID aLayer) const
 
double m_lastGalZoomLevel
 
void BuildEffectivePolygon(ERROR_LOC aErrorLoc=ERROR_INSIDE) const
 
static LSET ConnSMDMask()
layer set for a SMD pad on Front layer used for edge board connectors
 
void SetDrillSize(const VECTOR2I &aSize)
 
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
 
void SetSize(PCB_LAYER_ID aLayer, const VECTOR2I &aSize)
 
PADSTACK::CUSTOM_SHAPE_ZONE_MODE GetCustomShapeInZoneOpt() const
 
PAD_DRILL_SHAPE GetDrillShape() const
 
void ReplacePrimitives(PCB_LAYER_ID aLayer, const std::vector< std::shared_ptr< PCB_SHAPE > > &aPrimitivesList)
Clear the current custom shape primitives list and import a new list.
 
int GetChamferPositions(PCB_LAYER_ID aLayer) const
 
static LSET ApertureMask()
layer set for an aperture pad
 
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
 
std::mutex m_polyBuildingLock
 
void SetRoundRectCornerRadius(PCB_LAYER_ID aLayer, double aRadius)
Has meaning only for rounded rectangle pads.
 
void SetDrillSizeY(int aY)
 
static LSET SMDMask()
layer set for a SMD pad on Front layer
 
std::optional< int > GetLocalSolderPasteMargin() const
 
int GetFrontRoundRectRadiusSize() const
 
const std::shared_ptr< SHAPE_POLY_SET > & GetEffectivePolygon(PCB_LAYER_ID aLayer, ERROR_LOC aErrorLoc=ERROR_INSIDE) const
 
std::optional< int > GetLocalSolderMaskMargin() const
 
void SetDrillSizeX(int aX)
 
void SetLocalSolderPasteMargin(std::optional< int > aMargin)
 
std::optional< int > GetLocalThermalGapOverride() const
 
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
 
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
 
void SetPinFunction(const wxString &aName)
Set the pad function (pin name in schematic)
 
EDA_ANGLE GetFPRelativeOrientation() const
 
double GetChamferRectRatio(PCB_LAYER_ID aLayer) const
 
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
 
void SetFPRelativeOrientation(const EDA_ANGLE &aAngle)
 
void SetCustomShapeInZoneOpt(PADSTACK::CUSTOM_SHAPE_ZONE_MODE aOption)
Set the option for the custom pad shape to use as clearance area in copper zones.
 
int GetBoundingRadius() const
Return the radius of a minimum sized circle which fully encloses this pad.
 
void ClearZoneLayerOverrides()
 
void SetOrientation(const EDA_ANGLE &aAngle)
Set the rotation angle of the pad.
 
std::mutex m_zoneLayerOverridesMutex
 
std::optional< int > GetLocalThermalSpokeWidthOverride() const
 
PADSTACK::UNCONNECTED_LAYER_MODE GetUnconnectedLayerMode() const
 
VECTOR2I GetSolderPasteMargin(PCB_LAYER_ID aLayer) const
Usually < 0 (mask shape smaller than pad)because the margin can be dependent on the pad size,...
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
void AppendPrimitives(PCB_LAYER_ID aLayer, const std::vector< std::shared_ptr< PCB_SHAPE > > &aPrimitivesList)
Import a custom shape primitive list (composed of basic shapes) and add items to the current list.
 
bool HasDrilledHole() const override
 
LAYER_POLYGON_MAP m_effectivePolygons
 
void SetLocalClearance(std::optional< int > aClearance)
 
int GetSubRatsnest() const
 
void SetSizeX(const int aX)
 
ZONE_CONNECTION GetLocalZoneConnection() const
 
double GetThermalSpokeAngleDegrees() const
 
VECTOR2I ShapePos(PCB_LAYER_ID aLayer) const
 
std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape() const override
Return a SHAPE_SEGMENT object representing the pad's hole.
 
void SetOrientationDegrees(double aOrientation)
 
ZONE_CONNECTION GetZoneConnectionOverrides(wxString *aSource=nullptr) const
 
int GetLocalThermalGapOverride(wxString *aSource) const
 
void SetLayerSet(const LSET &aLayers) override
 
bool SharesNetTieGroup(const PAD *aOther) const
 
PAD_SHAPE GetAnchorPadShape(PCB_LAYER_ID aLayer) const
 
void SetRoundRectRadiusRatio(PCB_LAYER_ID aLayer, double aRadiusScale)
Has meaning only for rounded rectangle pads.
 
void SetSubRatsnest(int aSubRatsnest)
 
int GetLocalSpokeWidthOverride(wxString *aSource=nullptr) const
 
bool TransformHoleToPolygon(SHAPE_POLY_SET &aBuffer, int aClearance, int aError, ERROR_LOC aErrorLoc=ERROR_INSIDE) const
Build the corner list of the polygonal drill shape in the board coordinate system.
 
void SetPadToDieLength(int aLength)
 
bool operator==(const PAD &aOther) const
 
wxString ShowPadShape(PCB_LAYER_ID aLayer) const
 
void SetSizeY(const int aY)
 
int GetPadToDieLength() const
 
BOX2I m_effectiveBoundingBox
 
const VECTOR2I & GetSize(PCB_LAYER_ID aLayer) const
 
virtual std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
 
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
 
bool IsProxyItem() const override
 
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const override
Convert the shape to a closed polygon.
 
void Move(const VECTOR2I &aMoveVector) override
Move this object.
 
void SetStroke(const STROKE_PARAMS &aStroke) override
 
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
 
PROPERTY_BASE & SetChoicesFunc(std::function< wxPGChoices(INSPECTABLE *)> aFunc)
 
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
 
PROPERTY_BASE & SetWriteableFunc(std::function< bool(INSPECTABLE *)> aFunc)
 
PROPERTY_BASE & SetValidator(PROPERTY_VALIDATOR_FN &&aValidator)
 
PROPERTY_BASE & SetIsHiddenFromLibraryEditors(bool aIsHidden=true)
 
Provide class metadata.Helper macro to map type hashes to names.
 
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
 
void Mask(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName)
Sets a base class property as masked in a derived class.
 
static PROPERTY_MANAGER & Instance()
 
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
 
void OverrideAvailability(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName, std::function< bool(INSPECTABLE *)> aFunc)
Sets an override availability functor for a base class property of a given derived class.
 
static VALIDATOR_RESULT PositiveIntValidator(const wxAny &&aValue, EDA_ITEM *aItem)
 
static VALIDATOR_RESULT RangeIntValidator(const wxAny &&aValue, EDA_ITEM *aItem)
 
static SEG::ecoord Square(int a)
 
const BOX2I BBox(int aClearance=0) const override
Compute a bounding box of the shape, with a margin of aClearance a collision.
 
void AddShape(SHAPE *aShape)
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
void Move(const VECTOR2I &aVector) override
 
int PointCount() const
Return the number of points (vertices) in this line chain.
 
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
 
void Rotate(const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
Rotate all vertices by a given angle.
 
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
 
Represent a set of closed polygons.
 
void Rotate(const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
Rotate all vertices by a given angle.
 
void RemoveAllContours()
Remove all outlines & holes (clears) the polygon set.
 
bool HasHoles() const
Return true if the polygon set has any holes.
 
void BooleanAdd(const SHAPE_POLY_SET &b)
Perform boolean polyset union.
 
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new outline to the set and returns its index.
 
bool IsEmpty() const
Return true if the set is empty (no polygons at all)
 
void Fracture()
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
 
bool Collide(const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
 
void Inflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError, bool aSimplify=false)
Perform outline inflation/deflation.
 
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)
 
void Simplify()
Simplify the polyset (merges overlapping polys, eliminates degeneracy/self-intersections)
 
void BooleanIntersection(const SHAPE_POLY_SET &b)
Perform boolean polyset intersection.
 
int OutlineCount() const
Return the number of outlines in the set.
 
void Move(const VECTOR2I &aVector) override
 
bool Contains(const VECTOR2I &aP, int aSubpolyIndex=-1, int aAccuracy=0, bool aUseBBoxCaches=false) const
Return true if a given subpolygon contains the point aP.
 
void BooleanSubtract(const SHAPE_POLY_SET &b)
Perform boolean polyset difference.
 
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
 
const SHAPE_LINE_CHAIN Outline() const
 
bool Collide(const SHAPE *aShape, int aClearance, VECTOR2I *aMTV) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
 
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments.
 
An abstract shape on 2D plane.
 
Simple container to manage line stroke parameters.
 
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
 
wxString StringFromValue(double aValue, bool aAddUnitLabel=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts aValue in internal units into a united string.
 
void TransformCircleToPolygon(SHAPE_LINE_CHAIN &aBuffer, const VECTOR2I &aCenter, int aRadius, int aError, ERROR_LOC aErrorLoc, int aMinSegCount=0)
Convert a circle to a polygon, using multiple straight lines.
 
void TransformRoundChamferedRectToPolygon(SHAPE_POLY_SET &aBuffer, const VECTOR2I &aPosition, const VECTOR2I &aSize, const EDA_ANGLE &aRotation, int aCornerRadius, double aChamferRatio, int aChamferCorners, int aInflate, int aError, ERROR_LOC aErrorLoc)
Convert a rectangle with rounded corners and/or chamfered corners to a polygon.
 
void TransformOvalToPolygon(SHAPE_POLY_SET &aBuffer, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aWidth, int aError, ERROR_LOC aErrorLoc, int aMinSegCount=0)
Convert a oblong shape to a polygon, using multiple segments.
 
void TransformTrapezoidToPolygon(SHAPE_POLY_SET &aBuffer, const VECTOR2I &aPosition, const VECTOR2I &aSize, const EDA_ANGLE &aRotation, int aDeltaX, int aDeltaY, int aInflate, int aError, ERROR_LOC aErrorLoc)
Convert a rectangle or trapezoid to a polygon.
 
@ RECT_CHAMFER_BOTTOM_RIGHT
 
@ RECT_CHAMFER_BOTTOM_LEFT
 
static PCB_SHAPE * findNext(PCB_SHAPE *aShape, const VECTOR2I &aPoint, const KDTree &kdTree, const PCB_SHAPE_ENDPOINTS_ADAPTOR &adaptor, double aChainingEpsilon)
 
@ ROUND_ALL_CORNERS
All angles are rounded.
 
@ ALLOW_ACUTE_CORNERS
just inflate the polygon. Acute angles create spikes
 
const int minSize
Push and Shove router track width and via size dialog.
 
@ DRCE_PAD_TH_WITH_NO_HOLE
 
@ HOLE_CLEARANCE_CONSTRAINT
 
@ SOLDER_PASTE_ABS_MARGIN_CONSTRAINT
 
@ SOLDER_MASK_EXPANSION_CONSTRAINT
 
@ SOLDER_PASTE_REL_MARGIN_CONSTRAINT
 
static constexpr EDA_ANGLE ANGLE_0
 
#define FOOTPRINT_EDIT_FRAME_NAME
 
#define PCB_EDIT_FRAME_NAME
 
#define IGNORE_PARENT_GROUP
 
#define ENTERED
indicates a group has been entered
 
#define SKIP_STRUCT
flag indicating that the structure should be ignored
 
@ FILLED_SHAPE
Fill with object color.
 
a few functions useful in geometry calculations.
 
Some functions to handle hotkeys in KiCad.
 
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayerId, int aCopperLayersCount)
 
@ LAYER_PAD_FR_NETNAMES
Additional netnames layers (not associated with a PCB layer).
 
bool IsFrontLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a front layer.
 
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
 
@ NEVER_FLASHED
Never flashed for connectivity.
 
@ ALWAYS_FLASHED
Always flashed for connectivity.
 
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a back layer.
 
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
 
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
 
@ LAYER_PAD_COPPER_START
Virtual layers for pad copper on a given copper layer.
 
@ LAYER_FOOTPRINTS_FR
Show footprints on front.
 
@ LAYER_NON_PLATEDHOLES
Draw usual through hole vias.
 
@ LAYER_PADS
Meta control for all pads opacity/visibility (color ignored).
 
@ LAYER_PAD_PLATEDHOLES
to draw pad holes (plated)
 
@ LAYER_CLEARANCE_START
Virtual layers for pad/via/track clearance outlines for a given copper layer.
 
@ LAYER_FOOTPRINTS_BK
Show footprints on back.
 
bool IsNetnameLayer(int aLayer)
Test whether a layer is a netname layer.
 
bool IsHoleLayer(int aLayer)
 
bool IsExternalCopperLayer(int aLayerId)
Test whether a layer is an external (F_Cu or B_Cu) copper layer.
 
PCB_LAYER_ID
A quick note on layer IDs:
 
This file contains miscellaneous commonly used macros and functions.
 
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
 
constexpr void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
 
@ LEFT_RIGHT
Flip left to right (around the Y axis)
 
Message panel definition file.
 
constexpr int Mils2IU(const EDA_IU_SCALE &aIuScale, int mils)
 
bool ShapeHitTest(const SHAPE_LINE_CHAIN &aHitter, const SHAPE &aHittee, bool aHitteeContained)
Perform a shape-to-shape hit test.
 
bool PadHasMeaningfulRoundingRadius(const PAD &aPad, PCB_LAYER_ID aLayer)
Returns true if the pad's rounding ratio is valid (i.e.
 
double GetDefaultIpcRoundingRatio(const PAD &aPad, PCB_LAYER_ID aLayer)
Get a sensible default for a rounded rectangle pad's rounding ratio.
 
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput)
 
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput)
 
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
 
static struct PAD_DESC _PAD_DESC
 
PAD_DRILL_SHAPE
The set of pad drill shapes, used with PAD::{Set,Get}DrillShape()
 
PAD_ATTRIB
The set of pad shapes, used with PAD::{Set,Get}Attribute().
 
@ NPTH
like PAD_PTH, but not plated mechanical use only, no connection allowed
 
@ SMD
Smd pad, appears on the solder paste layer (default)
 
@ PTH
Plated through hole pad.
 
@ CONN
Like smd, does not appear on the solder paste layer (default) Note: also has a special attribute in G...
 
PAD_SHAPE
The set of pad shapes, used with PAD::{Set,Get}Shape()
 
PAD_PROP
The set of pad properties used in Gerber files (Draw files, and P&P files) to define some properties ...
 
@ FIDUCIAL_LOCAL
a fiducial (usually a smd) local to the parent footprint
 
@ FIDUCIAL_GLBL
a fiducial (usually a smd) for the full board
 
@ MECHANICAL
a pad used for mechanical support
 
@ PRESSFIT
a PTH with a hole diameter with tight tolerances for press fit pin
 
@ HEATSINK
a pad used as heat sink, usually in SMD footprints
 
@ NONE
no special fabrication property
 
@ TESTPOINT
a test point pad
 
@ CASTELLATED
a pad with a castellated through hole
 
@ BGA
Smd pad, used in BGA footprints.
 
Class to handle a set of BOARD_ITEMs.
 
ELECTRICAL_PINTYPE
The symbol library pin object electrical types used in ERC tests.
 
wxString GetCanonicalElectricalTypeName(ELECTRICAL_PINTYPE aType)
 
#define ELECTRICAL_PINTYPES_TOTAL
 
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
 
@ PT_DEGREE
Angle expressed in degrees.
 
@ PT_SIZE
Size expressed in distance units (mm/inch)
 
@ PT_TIME
Time expressed in ps.
 
wxString UnescapeString(const wxString &aSource)
 
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.
 
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
 
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
 
@ PCB_PAD_T
class PAD, a pad in a footprint
 
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
 
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< int64_t > VECTOR2L
 
ZONE_CONNECTION
How pads are covered by copper in zone.
 
@ THERMAL
Use thermal relief for pads.
 
@ THT_THERMAL
Thermal relief only for THT pads.
 
@ NONE
Pads are not covered.
 
@ FULL
pads are covered by copper
 
#define ZONE_THICKNESS_MIN_VALUE_MM