84 return A == other.
A &&
B == other.
B &&
Flag == other.
Flag;
95 return hash<const void*>()( k.
A ) ^ hash<const void*>()( k.
B ) ^ hash<int>()( k.
Flag );
108 bool aUseClearanceEpsilon =
true )
override;
120 const PNS::ITEM* aCollidingItem )
override;
143 int matchDpSuffix(
const wxString& aNetName, wxString& aComplementNet );
159 m_routerIface( aRouterIface ),
161 m_dummyTracks{ { aBoard }, { aBoard } },
162 m_dummyArcs{ { aBoard }, { aBoard } },
163 m_dummyVias{ { aBoard }, { aBoard } }
168 for(
PCB_ARC& arc : m_dummyArcs )
175 m_clearanceEpsilon = aBoard->GetDesignSettings().GetDRCEpsilon();
177 m_clearanceEpsilon = 0;
198 wxCHECK( aItem && aCollidingItem,
false );
207 if( collidingFp && itemFp && ( collidingFp == itemFp ) && itemFp->
IsNetTie() )
216 aCollisionPos, collidingItem );
252 return checkKeepout( zoneA, aB->
Parent() );
260 return checkKeepout( zoneB, aA->
Parent() );
293 return pad->GetDrillSizeX() &&
pad->GetDrillSizeX() ==
pad->GetDrillSizeY();
348 default:
return false;
356 if( aItemA && !parentA )
358 switch( aItemA->
Kind() )
390 if( aItemB && !parentB )
392 switch( aItemB->
Kind() )
425 hostConstraint = drcEngine->EvalRules( hostType, parentA, parentB,
ToLAYER_ID( aLayer ) );
427 if( hostConstraint.
IsNull() )
434 aConstraint->
m_Type = aType;
450 aConstraint->
m_Type = aType;
462 std::set<const PNS::ITEM*> remainingItems( aItems.begin(), aItems.end() );
470 bool dirty = remainingItems.find( it->first.A ) != remainingItems.end();
471 dirty |= remainingItems.find( it->first.B) != remainingItems.end();
481 printf(
"ClearCache : n_pruned %d\n", n_pruned );
493 bool aUseClearanceEpsilon )
517 for(
int layer = layers.
Start(); layer <= layers.
End(); ++layer )
555 if( aUseClearanceEpsilon && rv > 0 )
575 assert( aItem->
Owner() !=
nullptr );
577 auto tryGetTrackWidth =
580 switch( aPnsItem->Kind() )
588 int itemTrackWidth = tryGetTrackWidth( aItem );
590 if( itemTrackWidth > 0 )
592 *aInheritedWidth = itemTrackWidth;
596 switch( aItem->
Kind() )
600 default:
return false;
605 assert( jt !=
nullptr );
614 int w = tryGetTrackWidth( item );
617 mval = std::min( w, mval );
620 if( mval == INT_MAX )
623 *aInheritedWidth = mval;
668 trackWidth = std::max( trackWidth, constraint.
m_Value.
Opt() );
706 viaDiameter = std::max( viaDiameter, constraint.
m_Value.
Opt() );
712 viaDrill = std::max( viaDrill, constraint.
m_Value.
Opt() );
743 diffPairWidth = std::max( diffPairWidth, constraint.
m_Value.
Opt() );
745 if( diffPairWidth == constraint.
m_Value.
Opt() )
752 diffPairGap = std::max( diffPairGap, constraint.
m_Value.
Opt() );
753 diffPairViaGap = std::max( diffPairViaGap, constraint.
m_Value.
Opt() );
812 for(
auto it = aNetName.rbegin(); it != aNetName.rend() && rv == 0; ++it, ++count )
816 if( ( ch >=
'0' && ch <=
'9' ) || ch ==
'_' )
822 aComplementNet = wxT(
"-" );
827 aComplementNet = wxT(
"+" );
832 aComplementNet = wxT(
"P" );
835 else if ( ch ==
'P' )
837 aComplementNet = wxT(
"N" );
846 if( rv != 0 && count >= 1 )
848 aComplementNet = aNetName.Left( aNetName.length() - count )
850 + aNetName.Right( count - 1 );
861 wxString refName = net->GetNetname();
862 wxString coupledNetName;
889 refName = net->GetNetname();
900 if( !aItem || !aItem->
Net() )
903 wxString netNameP =
static_cast<NETINFO_ITEM*
>( aItem->
Net() )->GetNetname();
904 wxString netNameN, netNameCoupled;
914 netNameN = netNameCoupled;
919 netNameP = netNameCoupled;
925 if( !netInfoP || !netInfoN )
972 const wxString& aName = wxT(
"" ),
980 sh.
Append( aP.
x - aSize, aP.
y - aSize );
981 sh.
Append( aP.
x + aSize, aP.
y + aSize );
983 sh.
Append( aP.
x - aSize, aP.
y + aSize );
984 sh.
Append( aP.
x + aSize, aP.
y - aSize );
990 const wxString& aName = wxT(
"" ),
1007 const wxString& aName = wxT(
"" ),
1022 AddShape( &l, aColor, aOverrideWidth, aName, aSrcLoc );
1026 const wxString& aName = wxT(
"" ),
1127 case PAD_ATTRIB::PTH:
1128 case PAD_ATTRIB::NPTH:
1131 case PAD_ATTRIB::CONN:
1132 case PAD_ATTRIB::SMD:
1135 bool is_copper =
false;
1157 wxLogTrace( wxT(
"PNS" ), wxT(
"unsupported pad type 0x%x" ), aPad->
GetAttribute() );
1161 std::unique_ptr<PNS::SOLID> solid = std::make_unique<PNS::SOLID>();
1164 solid->SetRoutable(
false );
1166 solid->SetLayers( layers );
1167 solid->SetNet( aPad->
GetNet() );
1168 solid->SetParent( aPad );
1173 solid->SetIsFreePad();
1182 solid->SetPos(
VECTOR2I( c.
x - offset.
x, c.
y - offset.
y ) );
1183 solid->SetOffset(
VECTOR2I( offset.
x, offset.
y ) );
1190 if( shape->OutlineCount() )
1191 solid->SetShape(
new SHAPE_SIMPLE( shape->Outline( 0 ) ) );
1199 auto segment = std::make_unique<PNS::SEGMENT>(
SEG( aTrack->
GetStart(), aTrack->
GetEnd() ),
1202 segment->SetWidth( aTrack->
GetWidth() );
1204 segment->SetParent( aTrack );
1220 arc->SetParent( aArc );
1241 via->SetParent( aVia );
1270 KIDIALOG dlg(
nullptr, wxString::Format(
_(
"%s is malformed." ),
1273 dlg.ShowDetailedText( wxString::Format(
_(
"This zone cannot be handled by the router.\n"
1274 "Please verify it is not a self-intersecting "
1282 for(
int layer =
F_Cu; layer <=
B_Cu; layer++ )
1284 if( !layers[ layer ] )
1287 for(
int outline = 0; outline < poly->
OutlineCount(); outline++ )
1301 std::unique_ptr<PNS::SOLID> solid = std::make_unique<PNS::SOLID>();
1303 solid->SetLayer( layer );
1304 solid->SetNet(
nullptr );
1305 solid->SetParent( aZone );
1306 solid->SetShape( triShape );
1307 solid->SetIsCompoundShapePrimitive();
1308 solid->SetRoutable(
false );
1310 aWorld->
Add( std::move( solid ) );
1324 std::unique_ptr<PNS::SOLID> solid = std::make_unique<PNS::SOLID>();
1327 solid->SetLayer( aLayer );
1328 solid->SetNet(
nullptr );
1329 solid->SetParent( aText );
1330 solid->SetShape( shape );
1331 solid->SetRoutable(
false );
1344 aWorld->
Add( std::move( solid ) );
1358 for(
SHAPE* shape : shapes )
1360 std::unique_ptr<PNS::SOLID> solid = std::make_unique<PNS::SOLID>();
1365 solid->SetLayer( aItem->
GetLayer() );
1369 switch( shape->Type() )
1379 solid->SetNet( aItem->
GetNet() );
1380 solid->SetParent( aItem );
1381 solid->SetShape( shape );
1383 if( shapes.size() > 1 )
1384 solid->SetIsCompoundShapePrimitive();
1386 aWorld->
Add( std::move( solid ) );
1399 wxLogTrace( wxT(
"PNS" ), wxT(
"m_board = %p" ),
m_board );
1408 for(
int i = aLayer.
Start(); i <= aLayer.
End(); i++ )
1464 for(
int layer =
test.Start(); layer <=
test.End(); ++layer )
1477 for(
int layer =
test.Start(); layer <=
test.End(); ++layer )
1503 bool isOnVisibleLayer =
true;
1530 wxLogTrace( wxT(
"PNS" ), wxT(
"No board attached, aborting sync." ) );
1554 boardOutline = &buffer;
1558 syncZone( aWorld, zone, boardOutline );
1563 for(
PAD*
pad : footprint->Pads() )
1565 if( std::unique_ptr<PNS::SOLID> solid =
syncPad(
pad ) )
1566 aWorld->
Add( std::move( solid ) );
1568 worstClearance = std::max( worstClearance,
pad->GetLocalClearance() );
1570 if(
pad->GetProperty() == PAD_PROP::CASTELLATED )
1572 std::unique_ptr<SHAPE> hole;
1573 hole.reset(
pad->GetEffectiveHoleShape()->Clone() );
1578 syncTextItem( aWorld, &footprint->Reference(), footprint->Reference().GetLayer() );
1579 syncTextItem( aWorld, &footprint->Value(), footprint->Value().GetLayer() );
1581 for(
ZONE* zone : footprint->Zones() )
1582 syncZone( aWorld, zone, boardOutline );
1584 for(
PCB_FIELD* field : footprint->Fields() )
1587 for(
BOARD_ITEM* item : footprint->GraphicalItems() )
1606 if( std::unique_ptr<PNS::SEGMENT> segment =
syncTrack( t ) )
1607 aWorld->
Add( std::move( segment ) );
1611 if( std::unique_ptr<PNS::ARC> arc =
syncArc(
static_cast<PCB_ARC*
>( t ) ) )
1612 aWorld->
Add( std::move( arc ) );
1617 aWorld->
Add( std::move(
via ) );
1666 if( aClearance >= 0 )
1672 switch( settings->m_Display.m_TrackClearance )
1711 if( aImportance >= 1 )
1713 else if( aImportance == 0 )
1737 const std::map<int, wxString>& ncMap = connectivity->GetNetclassMap();
1741 netCode = net->GetNetCode();
1743 if( colorByNet && netColors.count( netCode ) )
1744 color = netColors.at( netCode );
1745 else if( colorByNet && ncMap.count( netCode ) && ncColors.count( ncMap.at( netCode ) ) )
1746 color = ncColors.at( ncMap.at( netCode ) );
1748 color = defaultColor;
1750 if(
color == COLOR4D::UNSPECIFIED )
1751 color = defaultColor;
1753 pitem->
SetColor(
color.Brightened( 0.5 ).WithAlpha( std::min( 1.0,
color.a + 0.4 ) ) );
1774 if( td->IsTeardropArea()
1776 && td->Outline()->Collide( aItem->
Shape() ) )
1822 switch( aItem->
Kind() )
1840 const SEG& s = seg->
Seg();
1887 switch( aItem->
Kind() )
1904 const SEG& s = seg->
Seg();
1956 std::set<FOOTPRINT*> processedFootprints;
1962 VECTOR2I offset = fpOffset.p_new - fpOffset.p_old;
1967 if( processedFootprints.find( footprint ) != processedFootprints.end() )
1970 processedFootprints.insert( footprint );
1990 wxLogTrace( wxT(
"PNS" ), wxT(
"SetView %p" ), aView );
2029 return static_cast<NETINFO_ITEM*
>( aNet )->GetNetname();
2031 return wxEmptyString;
2037 wxLogTrace( wxT(
"PNS" ), wxT(
"Update-net %s" ),
GetNetName( aNet ) );
constexpr EDA_IU_SCALE pcbIUScale
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
NETINFO_ITEM * GetNet() const
Return #NET_INFO object for a given item.
void SetNet(NETINFO_ITEM *aNetInfo)
Set a NET_INFO object for the item.
Container for design settings for a BOARD object.
int GetCurrentViaSize() const
std::shared_ptr< DRC_ENGINE > m_DRCEngine
bool m_UseConnectedTrackWidth
bool m_TempOverrideTrackWidth
int GetCurrentDiffPairWidth() const
int GetCurrentDiffPairViaGap() const
int GetCurrentDiffPairGap() const
bool UseNetClassVia() const
Return true if netclass values should be used to obtain appropriate via size.
int GetCurrentTrackWidth() const
BOARD_STACKUP & GetStackupDescriptor()
bool UseNetClassTrack() const
Return true if netclass values should be used to obtain appropriate track width.
bool UseNetClassDiffPair() const
Return true if netclass values should be used to obtain appropriate diff pair dimensions.
bool m_UseHeightForLengthCalcs
Enable inclusion of stackup height in track length measurements and length tuning.
int GetCurrentViaDrill() const
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
virtual bool IsOnLayer(PCB_LAYER_ID aLayer) const
Test to see if this object is on the given layer.
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
FOOTPRINT * GetParentFootprint() const
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
virtual bool IsLocked() const
virtual bool IsOnCopperLayer() const
Manage layers needed to make a physical board.
int GetLayerDistance(PCB_LAYER_ID aFirstLayer, PCB_LAYER_ID aSecondLayer) const
Calculate the distance (height) between the two given copper layers.
Information pertinent to a Pcbnew printed circuit board.
bool GetBoardPolygonOutlines(SHAPE_POLY_SET &aOutlines, OUTLINE_ERROR_HANDLER *aErrorHandler=nullptr, bool aAllowUseArcsInPolygons=false)
Extract the board outlines and build a closed polygon from lines, arcs and circle items on edge cut l...
NETINFO_ITEM * FindNet(int aNetcode) const
Search for a net with the given netcode.
int GetMaxClearanceValue() const
Returns the maximum clearance value for any object on the board.
FOOTPRINTS & Footprints()
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
const Vec & GetOrigin() const
const Vec & GetSize() const
SEVERITY GetSeverity() const
const MINOPTMAX< int > & GetValue() const
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)
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void DoNotShowCheckbox(wxString file, int line)
Checks the 'do not show again' setting for the dialog.
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.
double GetMinDepth() const
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
PCB specific render settings.
NET_COLOR_MODE GetNetColorMode() const
COLOR4D GetColor(const VIEW_ITEM *aItem, int aLayer) const override
Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer using curr...
std::map< int, KIGFX::COLOR4D > & GetNetColorMap()
std::map< wxString, KIGFX::COLOR4D > & GetNetclassColorMap()
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
const std::set< int > & GetHighlightNetCodes() const
Return the netcode of currently highlighted net.
PCB_LAYER_ID GetPrimaryHighContrastLayer() const
Return the board layer which is in high-contrast mode.
bool GetHighContrast() const
Extend VIEW_ITEM by possibility of grouping items into a single object.
void FreeItems()
Free all the items that were added to the group.
virtual void SetLayer(int aLayer)
Set layer used to draw the group.
virtual void Add(VIEW_ITEM *aItem)
Add an item to the group.
virtual double ViewGetLOD(int aLayer, VIEW *aView) const
Return the level of detail (LOD) of the item.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
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.
bool IsVisible(const VIEW_ITEM *aItem) const
Return information if the item is visible (or not).
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
Represent a contiguous set of PCB layers.
LAYER_RANGE Intersection(const LAYER_RANGE &aOther) const
Shortcut for comparisons/overlap tests.
bool Overlaps(const LAYER_RANGE &aOther) const
LSET is a set of PCB_LAYER_IDs.
LSEQ Seq(const PCB_LAYER_ID *aWishListSequence, unsigned aCount) const
Return an LSEQ from the union of this LSET and a desired sequence.
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Handle the data for a net.
static NETINFO_ITEM * OrphanedItem()
NETINFO_ITEM meaning that there was no net assigned for an item, as there was no board storing net li...
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
const VECTOR2I & GetDrillSize() const
PAD_ATTRIB GetAttribute() const
const VECTOR2I & GetOffset() const
VECTOR2I ShapePos() const
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
const std::shared_ptr< SHAPE_POLY_SET > & GetEffectivePolygon() const
std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape() const override
Return a SHAPE_SEGMENT object representing the pad's hole.
int GetPadToDieLength() const
void SetMid(const VECTOR2I &aMid)
const VECTOR2I & GetMid() const
std::vector< VECTOR2I > GetConnectionPoints() const
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc, bool aIgnoreLineWidth=false) const override
Convert the item shape to a closed polygon.
void SetWidth(int aWidth)
void SetEnd(const VECTOR2I &aEnd)
void SetStart(const VECTOR2I &aStart)
const VECTOR2I & GetStart() const
const VECTOR2I & GetEnd() const
bool GetIsFree() const
Check if the via is a free via (as opposed to one created on a track by the router).
PCB_LAYER_ID BottomLayer() const
VECTOR2I GetPosition() const override
void SetDrill(int aDrill)
Set the drill value for vias.
void SetIsFree(bool aFree=true)
void SetPosition(const VECTOR2I &aPoint) override
void SetLayerPair(PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer)
For a via m_layer contains the top layer, the other layer is in m_bottomLayer/.
void SetViaType(VIATYPE aViaType)
PCB_LAYER_ID TopLayer() const
int GetDrillValue() const
Calculate the drill value for vias (m-Drill if > 0, or default drill value for the board.
VIATYPE GetViaType() const
void LayerPair(PCB_LAYER_ID *top_layer, PCB_LAYER_ID *bottom_layer) const
Return the 2 layers used by the via (the via actually uses all layers between these 2 layers)
int Width() const override
const SHAPE * Shape() const override
Return the geometrical shape of the item.
void SetDebugEnabled(bool aEnabled)
static HOLE * MakeCircularHole(const VECTOR2I &pos, int radius)
ITEM_SET & ExcludeItem(const ITEM *aItem)
ITEM_SET & FilterKinds(int aKindMask, bool aInvert=false)
std::vector< ITEM * > & Items()
Base class for PNS router board items.
BOARD_ITEM * Parent() const
virtual NET_HANDLE Net() const
PnsKind Kind() const
Return the type (kind) of the item.
void SetNet(NET_HANDLE aNet)
virtual int Layer() const
virtual const SHAPE * Shape() const
Return the geometrical shape of the item.
void SetParent(BOARD_ITEM *aParent)
const LAYER_RANGE & Layers() const
bool OfKind(int aKindMask) const
virtual VECTOR2I Anchor(int n) const
virtual BOARD_ITEM * BoardItem() const
A 2D point on a given set of layers and belonging to a certain net, that links together a number of b...
const ITEM_SET & CLinks() const
Keep the router "world" - i.e.
void SetMaxClearance(int aClearance)
Assign a clearance resolution function object.
void SetRuleResolver(RULE_RESOLVER *aFunc)
void AddEdgeExclusion(std::unique_ptr< SHAPE > aShape)
bool Add(std::unique_ptr< SEGMENT > &&aSegment, bool aAllowRedundant=false)
Add an item to the current node.
const ITEM_OWNER * Owner() const
Return the owner of this item, or NULL if there's none.
virtual wxString GetNetName(PNS::NET_HANDLE aNet) const =0
virtual int GetNetCode(NET_HANDLE aNet) const =0
int Width() const override
void SetTrackWidth(int aWidth)
void SetBoardMinTrackWidth(int aWidth)
void SetDiffPairViaGapSameAsTraceGap(bool aEnable)
void SetDiffPairWidth(int aWidth)
void SetDiffPairWidthSource(const wxString &aSource)
void SetDiffPairGapSource(const wxString &aSource)
void SetDiffPairGap(int aGap)
void SetHoleToHole(int aHoleToHole)
void SetViaDrill(int aDrill)
void SetDiffPairViaGap(int aGap)
void SetDiffPairHoleToHole(int aHoleToHole)
void SetMinClearance(int aClearance)
void SetClearance(int aClearance)
void SetViaDiameter(int aDiameter)
void SetClearanceSource(const wxString &aSource)
void SetWidthSource(const wxString &aSource)
void SetTrackWidthIsExplicit(bool aIsExplicit)
bool syncGraphicalItem(PNS::NODE *aWorld, PCB_SHAPE *aItem)
bool inheritTrackWidth(PNS::ITEM *aItem, int *aInheritedWidth)
bool ImportSizes(PNS::SIZES_SETTINGS &aSizes, PNS::ITEM *aStartItem, PNS::NET_HANDLE aNet) override
void AddItem(PNS::ITEM *aItem) override
virtual EDA_UNITS GetUnits() const
PNS::DEBUG_DECORATOR * m_debugDecorator
void SetDebugDecorator(PNS::DEBUG_DECORATOR *aDec)
bool syncZone(PNS::NODE *aWorld, ZONE *aZone, SHAPE_POLY_SET *aBoardOutline)
void SetBoard(BOARD *aBoard)
std::unique_ptr< PNS::ARC > syncArc(PCB_ARC *aArc)
void RemoveItem(PNS::ITEM *aItem) override
PNS::RULE_RESOLVER * GetRuleResolver() override
bool syncTextItem(PNS::NODE *aWorld, PCB_TEXT *aText, PCB_LAYER_ID aLayer)
bool IsFlashedOnLayer(const PNS::ITEM *aItem, int aLayer) const override
std::unique_ptr< PNS::SOLID > syncPad(PAD *aPad)
void SyncWorld(PNS::NODE *aWorld) override
int StackupHeight(int aFirstLayer, int aSecondLayer) const override
PNS::DEBUG_DECORATOR * GetDebugDecorator() override
std::unique_ptr< PNS::SEGMENT > syncTrack(PCB_TRACK *aTrack)
PNS_PCBNEW_RULE_RESOLVER * m_ruleResolver
PNS::NET_HANDLE GetOrphanedNetHandle() override
std::unique_ptr< PNS::VIA > syncVia(PCB_VIA *aVia)
void UpdateItem(PNS::ITEM *aItem) override
void SetView(KIGFX::VIEW *aView)
void RemoveItem(PNS::ITEM *aItem) override
void AddItem(PNS::ITEM *aItem) override
void UpdateItem(PNS::ITEM *aItem) override
std::map< PAD *, OFFSET > m_fpOffsets
int GetNetCode(PNS::NET_HANDLE aNet) const override
void SetHostTool(PCB_TOOL_BASE *aTool)
std::unique_ptr< BOARD_COMMIT > m_commit
void EraseView() override
void HideItem(PNS::ITEM *aItem) override
void UpdateNet(PNS::NET_HANDLE aNet) override
void DisplayPathLine(const SHAPE_LINE_CHAIN &aLine, int aImportance) override
bool IsItemVisible(const PNS::ITEM *aItem) const override
void DisplayItem(const PNS::ITEM *aItem, int aClearance, bool aEdit=false, bool aIsHeadTrace=false) override
std::unordered_set< BOARD_ITEM * > m_hiddenItems
EDA_UNITS GetUnits() const override
bool IsAnyLayerVisible(const LAYER_RANGE &aLayer) const override
KIGFX::VIEW_GROUP * m_previewItems
void DisplayRatline(const SHAPE_LINE_CHAIN &aRatline, PNS::NET_HANDLE aNet) override
wxString GetNetName(PNS::NET_HANDLE aNet) const override
~PNS_PCBNEW_DEBUG_DECORATOR()
void AddPoint(const VECTOR2I &aP, const KIGFX::COLOR4D &aColor, int aSize, const wxString &aName=wxT(""), const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
PNS_PCBNEW_DEBUG_DECORATOR(KIGFX::VIEW *aView=nullptr)
KIGFX::VIEW_GROUP * m_items
void AddShape(const BOX2I &aBox, const KIGFX::COLOR4D &aColor, int aOverrideWidth=0, const wxString &aName=wxT(""), const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
void AddItem(const PNS::ITEM *aItem, const KIGFX::COLOR4D &aColor, int aOverrideWidth=0, const wxString &aName=wxT(""), const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
void SetView(KIGFX::VIEW *aView)
void AddShape(const SHAPE *aShape, const KIGFX::COLOR4D &aColor, int aOverrideWidth=0, const wxString &aName=wxT(""), const SRC_LOCATION_INFO &aSrcLoc=SRC_LOCATION_INFO()) override
virtual int NetCode(PNS::NET_HANDLE aNet) override
virtual ~PNS_PCBNEW_RULE_RESOLVER()
PNS_PCBNEW_RULE_RESOLVER(BOARD *aBoard, PNS::ROUTER_IFACE *aRouterIface)
virtual bool IsKeepout(const PNS::ITEM *aA, const PNS::ITEM *aB) override
void ClearCaches() override
virtual bool QueryConstraint(PNS::CONSTRAINT_TYPE aType, const PNS::ITEM *aItemA, const PNS::ITEM *aItemB, int aLayer, PNS::CONSTRAINT *aConstraint) override
int ClearanceEpsilon() const override
virtual int Clearance(const PNS::ITEM *aA, const PNS::ITEM *aB, bool aUseClearanceEpsilon=true) override
int matchDpSuffix(const wxString &aNetName, wxString &aComplementNet)
Checks for netnamed differential pairs.
void ClearCacheForItems(std::vector< const PNS::ITEM * > &aItems) override
std::unordered_map< CLEARANCE_CACHE_KEY, int > m_clearanceCache
virtual int DpNetPolarity(PNS::NET_HANDLE aNet) override
virtual bool IsNetTieExclusion(const PNS::ITEM *aItem, const VECTOR2I &aCollisionPos, const PNS::ITEM *aCollidingItem) override
PCB_TRACK m_dummyTracks[2]
virtual bool IsInNetTie(const PNS::ITEM *aA) override
virtual PNS::NET_HANDLE DpCoupledNet(PNS::NET_HANDLE aNet) override
virtual bool DpNetPair(const PNS::ITEM *aItem, PNS::NET_HANDLE &aNetP, PNS::NET_HANDLE &aNetN) override
PNS::ROUTER_IFACE * m_routerIface
virtual wxString NetName(PNS::NET_HANDLE aNet) override
void SetWidth(double aWidth)
void SetClearance(int aClearance)
void SetColor(const KIGFX::COLOR4D &aColor)
void SetIsHeadTrace(bool aIsHead)
void Update(const PNS::ITEM *aItem)
static const int PathOverlayDepth
void SetDepth(double aDepth)
void ShowClearance(bool aEnabled)
const VECTOR2I & GetArcMid() const
const VECTOR2I & GetP1() const
const VECTOR2I & GetP0() const
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
int Width() const
Get the current width of the segments in the chain.
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
void SetWidth(int aWidth)
Set the width of all segments in the chain.
const std::vector< VECTOR2I > & CPoints() const
size_t GetTriangleCount() const
void GetTriangle(int index, VECTOR2I &a, VECTOR2I &b, VECTOR2I &c) const
Represent a set of closed polygons.
bool IsTriangulationUpToDate() const
void CacheTriangulation(bool aPartition=true, bool aSimplify=false)
Build a polygon triangulation, needed to draw a polygon on OpenGL and in some other calculations.
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
const TRIANGULATED_POLYGON * TriangulatedPolygon(int aIndex) const
int OutlineCount() const
Return the number of outlines in the set.
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments.
void Append(int aX, int aY)
Append a new point at the end of the polygon.
An abstract shape on 2D plane.
VECTOR2_TRAITS< int >::extended_type extended_type
Handle a list of polygons defining a copper zone.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider) const override
Return a user-visible description string of this item.
bool GetIsRuleArea() const
Accessors to parameters used in Rule Area zones:
bool GetDoNotAllowVias() const
bool GetDoNotAllowPads() const
bool GetDoNotAllowTracks() const
SHAPE_POLY_SET * Outline()
bool GetDoNotAllowFootprints() const
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
This file is part of the common library.
@ VIA_DIAMETER_CONSTRAINT
@ DIFF_PAIR_GAP_CONSTRAINT
@ EDGE_CLEARANCE_CONSTRAINT
@ HOLE_CLEARANCE_CONSTRAINT
@ HOLE_TO_HOLE_CONSTRAINT
#define ROUTER_TRANSIENT
transient items that should NOT be cached
bool IsCopperLayer(int aLayerId)
Tests whether a layer is a copper layer.
@ LAYER_SELECT_OVERLAY
currently selected items overlay
PCB_LAYER_ID
A quick note on layer IDs:
PCB_LAYER_ID ToLAYER_ID(int aLayer)
This file contains miscellaneous commonly used macros and functions.
@ APPEARANCE
Visibility flag has changed.
Push and Shove diff pair dimensions (gap) settings dialog.
@ NPTH
like PAD_PTH, but not plated
@ SHOW_WITH_VIA_WHILE_ROUTING_OR_DRAGGING
@ SHOW_WITH_VIA_WHILE_ROUTING
static bool isEdge(const PNS::ITEM *aItem)
static bool isHole(const PNS::ITEM *aItem)
static bool isNonPlatedSlot(const PNS::ITEM *aItem)
static bool isCopper(const PNS::ITEM *aItem)
static bool isDrilledHole(const PNS::ITEM *aItem)
VECTOR2I::extended_type ecoord
@ SH_LINE_CHAIN
line chain (polyline)
bool operator==(const CLEARANCE_CACHE_KEY &other) const
An abstract function object, returning a design rule (clearance, diff pair gap, etc) required between...
std::size_t operator()(const CLEARANCE_CACHE_KEY &k) const
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
@ PCB_ZONE_T
class ZONE, a copper pour area
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ 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)