63 if( !argFrom || argFrom->
AsString().IsEmpty() )
67 aCtx->
ReportError( wxString::Format(
_(
"Missing 'from' pad argument (footprint reference designator "
68 "followed by hyphen and pad number) to %s." ),
69 wxT(
"fromTo()" ) ) );
75 if( !argTo || argTo->
AsString().IsEmpty() )
79 aCtx->
ReportError( wxString::Format(
_(
"Missing 'to' pad argument (footprint reference designator "
80 "followed by hyphen and pad number) to %s." ),
81 wxT(
"fromTo()" ) ) );
91 wxLogWarning( wxT(
"Attempting to call fromTo() with non-existent from-to cache." ) );
115 if( !arg || arg->
AsString().IsEmpty() )
119 aCtx->
ReportError( wxString::Format(
_(
"Missing layer name argument to %s." ),
120 wxT(
"existsOnLayer()" ) ) );
127 [item, arg, aCtx]() ->
double
129 const wxString& layerName = arg->
AsString();
138 bool anyMatch =
false;
140 for(
unsigned ii = 0; ii < layerMap.GetCount(); ++ii )
142 wxPGChoiceEntry& entry = layerMap[ ii ];
144 if( entry.GetText().Matches( layerName ))
155 aCtx->
ReportError( wxString::Format(
_(
"Unrecognized layer '%s'" ),
170 std::shared_lock<std::shared_mutex> readLock( board->
m_CachesMutex );
175 return ( item->
GetLayerSet() & i->second ).any() ? 1.0 : 0.0;
180 for(
unsigned ii = 0; ii < layerMap.GetCount(); ++ii )
182 wxPGChoiceEntry& entry = layerMap[ ii ];
184 if( entry.GetText().Matches( layerName ) )
189 std::unique_lock<std::shared_mutex> writeLock( board->
m_CachesMutex );
193 return ( item->
GetLayerSet() & mask ).any() ? 1.0 : 0.0;
235 return footprintCourtyard.
Collide( aItemShape.get() );
237 else if(
ZONE* zone =
dynamic_cast<ZONE*
>( aItem ) )
244 if( zone->GetParentFootprint() )
245 zoneOutlineStorage = zone->GetBoardOutline();
249 return footprintCourtyard.
Collide( zoneOutline );
267 if( aSelector.IsEmpty() )
271 if( aSelector[0] ==
'$' && aSelector.Last() ==
'}' && aSelector.Upper().StartsWith( wxT(
"${CLASS:" ) ) )
273 wxString
name = aSelector.Mid( 8, aSelector.Length() - 9 );
284 else if( aSelector.Find(
':' ) != wxNOT_FOUND && aFp->
GetFPIDAsString().Matches( aSelector ) )
303 if( aArg == wxT(
"A" ) )
306 return fp && aFunc( fp );
308 else if( aArg == wxT(
"B" ) )
311 return fp && aFunc( fp );
323 if( testFootprintSelector( fp, aArg ) && aFunc( fp ) )
336#define MISSING_FP_ARG( f ) \
337 wxString::Format( _( "Missing footprint argument (A, B, or reference designator) to %s." ), f )
348 if( !arg || arg->
AsString().IsEmpty() )
363 [item, arg, context]() ->
double
367 const wxString selector = arg->
AsString();
373 bool memoize = !transient && selector != wxT(
"A" ) && selector != wxT(
"B" );
380 return whole ? 1.0 : 0.0;
382 std::shared_ptr<SHAPE> itemShape;
424 if( !arg || arg->
AsString().IsEmpty() )
439 [item, arg, context]() ->
double
443 const wxString selector = arg->
AsString();
446 bool memoize = !transient && selector != wxT(
"A" ) && selector != wxT(
"B" );
453 return whole ? 1.0 : 0.0;
455 std::shared_ptr<SHAPE> itemShape;
479 return res ? 1.0 : 0.0;
493 if( !arg || arg->
AsString().IsEmpty() )
508 [item, arg, context]() ->
double
512 const wxString selector = arg->
AsString();
515 bool memoize = !transient && selector != wxT(
"A" ) && selector != wxT(
"B" );
522 return whole ? 1.0 : 0.0;
524 std::shared_ptr<SHAPE> itemShape;
548 return res ? 1.0 : 0.0;
557 std::shared_lock<std::shared_mutex> readLock( aBoard->
m_CachesMutex );
572 std::unique_lock<std::shared_mutex> writeLock( aBoard->
m_CachesMutex );
618 aCtx->
ReportError(
_(
"Footprint's courtyard is not a single, closed shape." ) );
630 aCtx->
ReportError(
_(
"Footprint has no front courtyard." ) );
645 aCtx->
ReportError(
_(
"Footprint has no back courtyard." ) );
657 ZONE* zone =
static_cast<ZONE*
>( aItem );
666 if( zoneRTree->QueryColliding( areaBBox, &areaOutline, aLayer ) )
671 std::unique_ptr<DRC_RTREE> rtree = std::make_unique<DRC_RTREE>();
675 if( rtree->QueryColliding( areaBBox, &areaOutline, aLayer ) )
692 return areaOutline.
Collide( zonePoly );
706 const std::function<
bool(
ZONE* )>& aFunc )
708 if( aArg == wxT(
"A" ) )
710 return aFunc(
dynamic_cast<ZONE*
>( aCtx->
GetItem( 0 ) ) );
712 else if( aArg == wxT(
"B" ) )
714 return aFunc(
dynamic_cast<ZONE*
>( aCtx->
GetItem( 1 ) ) );
726 return aFunc(
static_cast<ZONE*
>( item ) );
734 std::vector<ZONE*> matchingZones;
735 bool cacheHit =
false;
738 std::shared_lock<std::shared_mutex> readLock( aBoard->
m_CachesMutex );
743 matchingZones = it->second;
752 if( area->GetZoneName().Matches( aArg ) )
753 matchingZones.push_back( area );
758 for(
ZONE* area : footprint->Zones() )
760 if( area->GetZoneName().Matches( aArg ) )
761 matchingZones.push_back( area );
767 std::unique_lock<std::shared_mutex> writeLock( aBoard->
m_CachesMutex );
772 for(
ZONE* area : matchingZones )
803 m_item->SetLayerSet(
m_item->GetLayerSet().set( aLayer ) );
812#define MISSING_AREA_ARG( f ) \
813 wxString::Format( _( "Missing rule-area argument (A, B, or rule-area name) to %s." ), f )
824 if( !arg || arg->
AsString().IsEmpty() )
844 [item, arg, context, aForKeepout]() ->
double
849 const wxString selector = arg->
AsString();
858 bool memoize = !transient && selector != wxT(
"A" ) && selector != wxT(
"B" );
861 if( memoize && resultsCache.Get( { item, selector, aLayer, context->GetConstraint() }, whole ) )
862 return whole ? 1.0 : 0.0;
869 if( !aArea || aArea == item || aArea->
GetParent() == item )
880 scopedLayerSet.
Add( aLayer );
886 if( !commonLayers.any() )
895 testLayers.
set( aLayer );
897 testLayers = commonLayers;
900 std::vector<PCB_LAYER_ID> layersToCompute;
908 if( intersectsCache.Get( { aArea, item, layer }, cached ) )
915 layersToCompute.push_back( layer );
922 layersToCompute.push_back( layer );
925 bool anyCollision =
false;
929 bool collides =
collidesWithArea( item, layer, context, aArea, aForKeepout );
932 intersectsCache.Set( { aArea, item, layer }, collides );
942 resultsCache.Set( { item, selector, aLayer, context->
GetConstraint() },
res );
944 return res ? 1.0 : 0.0;
970 if( !arg || arg->
AsString().IsEmpty() )
985 [item, arg, context]() ->
double
991 const wxString selector = arg->
AsString();
994 bool memoize = !transient && selector != wxT(
"A" ) && selector != wxT(
"B" );
1000 return whole ? 1.0 : 0.0;
1007 if( !aArea || aArea == item || aArea->
GetParent() == item )
1020 bool cached =
false;
1029 bool enclosedByArea =
false;
1033 itemShape =
static_cast<ZONE*
>( item )->GetBoardOutline();
1053 enclosedByArea =
false;
1064 areaOutline = aArea->
Outline();
1069 enclosedByArea = itemShape.
IsEmpty();
1075 return enclosedByArea;
1081 return res ? 1.0 : 0.0;
1094 if( !arg || arg->
AsString().IsEmpty() )
1098 aCtx->
ReportError( wxString::Format(
_(
"Missing group name argument to %s." ),
1099 wxT(
"memberOfGroup()" ) ) );
1112 [item, arg]() ->
double
1124 group =
group->AsEdaItem()->GetParentGroup();
1132#define MISSING_SHEET_ARG( f ) \
1133 wxString::Format( _( "Missing sheet name argument to %s." ), f )
1143 if( !arg || arg->
AsString().IsEmpty() )
1158 [item, arg]() ->
double
1169 wxString refName = arg->
AsString();
1171 if( sheetName.EndsWith( wxT(
"/" ) ) )
1172 sheetName.RemoveLast();
1173 if( refName.EndsWith( wxT(
"/" ) ) )
1174 refName.RemoveLast();
1176 if( sheetName.Matches( refName ) )
1179 if( ( refName.Matches( wxT(
"/" ) ) || refName.IsEmpty() )
1180 && sheetName.IsEmpty() )
1198 if( !arg || arg->
AsString().IsEmpty() )
1213 [item, arg]() ->
double
1224 wxString refName = arg->
AsString();
1226 if( sheetName.EndsWith( wxT(
"/" ) ) )
1227 sheetName.RemoveLast();
1228 if( refName.EndsWith( wxT(
"/" ) ) )
1229 refName.RemoveLast();
1231 wxArrayString sheetPath = wxSplit( sheetName,
'/' );
1232 wxArrayString refPath = wxSplit( refName,
'/' );
1234 if( refPath.size() > sheetPath.size() )
1237 if( ( refName.Matches( wxT(
"/" ) ) || refName.IsEmpty() )
1238 && sheetName.IsEmpty() )
1243 for(
size_t i = 0; i < refPath.size(); i++ )
1245 if( !sheetPath[i].Matches( refPath[i] ) )
1262 if( !arg || arg->
AsString().IsEmpty() )
1266 aCtx->
ReportError( wxString::Format(
_(
"Missing footprint argument (reference designator) to %s." ),
1267 wxT(
"memberOfFootprint()" ) ) );
1280 [item, arg]() ->
double
1351 std::shared_lock<std::shared_mutex> readLock( board->
m_CachesMutex );
1362 std::set<const PCB_VIA*> stacked;
1365 stacked.insert( column.begin(), column.end() );
1368 std::unique_lock<std::shared_mutex> writeLock( board->
m_CachesMutex );
1372 if( stacked.count(
via ) )
1389 if(
via->IsBlindVia() ||
via->IsBuriedVia() )
1406 [a, b, context]() ->
double
1413 wxString coupledNet;
1428 if( board->FindNet( coupledNet ) )
1451 if( !argv || argv->
AsString().IsEmpty() )
1455 aCtx->
ReportError( wxString::Format(
_(
"Missing diff-pair name argument to %s." ),
1456 wxT(
"inDiffPair()" ) ) );
1466 [item, argv]() ->
double
1477 wxString baseName, coupledNet;
1482 if( baseName.Matches( arg ) )
1485 if( baseName.EndsWith(
"_" ) && baseName.BeforeLast(
'_' ).Matches( arg ) )
1505 if( !argv || argv->
AsString().IsEmpty() )
1509 aCtx->
ReportError( wxString::Format(
_(
"Missing net-chain name argument to %s" ),
1510 wxT(
"inNetChain()" ) ) );
1520 [item, argv]() ->
double
1530 const wxString& chainName = netinfo->
GetNetChain();
1532 if( chainName.IsEmpty() )
1537 return chainName.Matches( arg ) ? 1.0 : 0.0;
1562 return ( netinfo && !netinfo->
GetNetChain().IsEmpty() ) ? 1.0 : 0.0;
1577 if( !argv || argv->
AsString().IsEmpty() )
1581 aCtx->
ReportError( wxString::Format(
_(
"Missing netclass name argument to %s" ),
1582 wxT(
"inNetChainClass()" ) ) );
1592 [item, argv]() ->
double
1602 const wxString& chainName = netinfo->
GetNetChain();
1604 if( chainName.IsEmpty() )
1609 std::shared_ptr<NET_SETTINGS> ns = board->GetDesignSettings().m_NetSettings;
1613 const wxString& className = ns->GetNetChainClass( chainName );
1615 if( className.IsEmpty() )
1620 return className.Matches( arg ) ? 1.0 : 0.0;
1639 if( !arg || arg->
AsString().IsEmpty() )
1643 aCtx->
ReportError( wxString::Format(
_(
"Missing field name argument to %s." ),
1644 wxT(
"getField()" ) ) );
1654 [item, arg]() -> wxString
1660 const wxString& fieldName = arg->
AsString();
1669 return variant->GetFieldValue( fieldName );
1681 wxString
text = field ? field->
GetText() : wxString();
1702 if( !arg || arg->
AsString().IsEmpty() )
1706 aCtx->
ReportError( wxString::Format(
_(
"Missing netclass name argument to %s." ),
1707 wxT(
"hasNetclass()" ) ) );
1720 [item, arg]() ->
double
1744 if( !arg || arg->
AsString().IsEmpty() )
1748 aCtx->
ReportError( wxString::Format(
_(
"Missing netclass name argument to %s." ),
1749 wxT(
"hasExactNetclass()" ) ) );
1762 [item, arg]() ->
double
1783 if( !arg || arg->
AsString().IsEmpty() )
1787 aCtx->
ReportError( wxString::Format(
_(
"Missing component class name argument to %s." ),
1788 wxT(
"hasComponentClass()" ) ) );
1801 [item, arg]() ->
double
1806 footprint =
static_cast<FOOTPRINT*
>( item );
1837 aCtx->
ReportError( wxString::Format(
_(
"Missing property name argument to %s." ),
1838 wxT(
"customProperty()" ) ) );
1848 [item, arg]() -> wxString
1850 const wxString key = arg->
AsString();
1858 if( parentFp->GetCustomProperty( key, value ) )
1881 aCtx->
ReportError( wxString::Format(
_(
"Missing property name argument to %s." ),
1882 wxT(
"hasCustomProperty()" ) ) );
1892 [item, arg]() ->
double
1894 const wxString key = arg->
AsString();
1902 if( parentFp->GetCustomProperty( key, value ) )
constexpr int ARC_LOW_DEF
BASE_SET & set(size_t pos)
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
wxString GetNetname() const
NETINFO_ITEM * GetNet() const
Return NETINFO_ITEM object for a given item.
int GetDRCEpsilon() const
Return an epsilon which accounts for rounding errors, etc.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual bool IsConnected() const
Returns information if the object is derived from BOARD_CONNECTED_ITEM.
virtual std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const
virtual void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
Convert the item shape to a closed polygon.
virtual bool IsOnLayer(PCB_LAYER_ID aLayer) const
Test to see if this object is on the given layer.
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
FOOTPRINT * GetParentFootprint() const
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
BOARD_ITEM_CONTAINER * GetParent() const
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
Information pertinent to a Pcbnew printed circuit board.
SHARDED_CACHE< PTR_PTR_LAYER_CACHE_KEY, bool > m_IntersectsAreaCache
SHARDED_CACHE< ITEM_SELECTOR_LAYER_CACHE_KEY, bool > m_IntersectsCourtyardResultCache
SHARDED_CACHE< PTR_PTR_LAYER_CACHE_KEY, bool > m_EnclosedByAreaCache
SHARDED_CACHE< ITEM_SELECTOR_LAYER_CACHE_KEY, bool > m_EnclosedByAreaResultCache
SHARDED_CACHE< PTR_PTR_CACHE_KEY, bool > m_IntersectsBCourtyardCache
NETINFO_ITEM * FindNet(int aNetcode) const
Search for a net with the given netcode.
const ZONES & Zones() const
SHARDED_CACHE< PTR_PTR_CACHE_KEY, bool > m_IntersectsCourtyardCache
SHARDED_CACHE< PTR_PTR_LAYER_CACHE_KEY, bool > m_IntersectsKeepoutCache
const FOOTPRINTS & Footprints() const
std::unordered_map< wxString, LSET > m_LayerExpressionCache
SHARDED_CACHE< PTR_PTR_CACHE_KEY, bool > m_IntersectsFCourtyardCache
std::unordered_map< const ZONE *, SHAPE_POLY_SET > m_DeflatedZoneOutlineCache
SHARDED_CACHE< ITEM_SELECTOR_LAYER_CACHE_KEY, bool > m_IntersectsFCourtyardResultCache
SHARDED_CACHE< ITEM_SELECTOR_LAYER_CACHE_KEY, bool > m_IntersectsKeepoutResultCache
SHARDED_CACHE< ITEM_FIELD_CACHE_KEY, wxString > m_ItemFieldCache
std::optional< std::set< const PCB_VIA * > > m_StackedMicroviaCache
wxString GetCurrentVariant() const
SHARDED_CACHE< ITEM_SELECTOR_LAYER_CACHE_KEY, bool > m_IntersectsAreaResultCache
std::shared_mutex m_CachesMutex
std::shared_ptr< const FOOTPRINT_COURTYARD_INDEX > GetFootprintCourtyardIndex()
Return a spatial index of footprint courtyards, building it on first use.
std::unordered_map< wxString, std::vector< ZONE * > > m_ZonesByNameCache
BOARD_ITEM * ResolveItem(const KIID &aID, bool aAllowNullptrReturn=false) const
BOARD_DESIGN_SETTINGS & GetDesignSettings()
SHARDED_CACHE< ITEM_SELECTOR_LAYER_CACHE_KEY, bool > m_IntersectsBCourtyardResultCache
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
DRC_RTREE * GetCopperZoneRTree(ZONE *aZone) const
Look up a zone's filled-copper R-tree.
constexpr bool Intersects(const BOX2< Vec > &aRect) const
A lightweight representation of a component class.
bool ContainsClassName(const wxString &className) const
Determines if this (effective) component class contains a specific constituent class.
std::shared_ptr< FROM_TO_CACHE > GetFromToCache()
static int MatchDpSuffix(const wxString &aNetName, wxString &aComplementNet, wxString &aBaseDpName)
Check if the given net is a diff pair, returning its polarity and complement if so.
Implement an R-tree for fast spatial and layer indexing of connectable items.
A set of EDA_ITEMs (i.e., without duplicates).
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
bool GetCustomProperty(const wxString &aKey, wxString &aValue) const
virtual EDA_GROUP * GetParentGroup() const
KICAD_T Type() const
Returns the type of object.
EDA_ITEM_FLAGS GetFlags() const
virtual const wxString & GetText() const
Return the string associated with the text object.
static ENUM_MAP< T > & Instance()
static bool SniffTest(const wxString &aCandidate)
Returns true if a string has the correct formatting to be a KIID.
void ReportError(const wxString &aErrorMsg)
virtual const wxString & AsString() const
LSET is a set of PCB_LAYER_IDs.
static const LSET & FrontMask()
Return a mask holding all technical layers and the external CU layer on front side.
LSEQ UIOrder() const
Return the copper, technical and user layers in the order shown in layer widget.
static const LSET & BackMask()
Return a mask holding all technical layers and the external CU layer on back side.
bool Contains(PCB_LAYER_ID aLayer) const
See if the layer set contains a PCB layer.
A collection of nets and the parameters used to route or test these nets.
bool ContainsNetclassWithName(const wxString &netclass) const
Determines if the given netclass name is a constituent of this (maybe aggregate) netclass.
bool NameEquals(const wxString &aName) const
Compares a name with GetName() without constructing the aggregate name.
Handle the data for a net.
const wxString & GetNetChain() const
const wxString & GetNetname() const
PAD_ATTRIB GetAttribute() const
PCBEXPR_BUILTIN_FUNCTIONS()
void RegisterAllFunctions()
std::map< wxString, LIBEVAL::FUNC_CALL_REF > m_funcs
void RegisterFunc(const wxString &funcSignature, LIBEVAL::FUNC_CALL_REF funcPtr, bool aIsGeometryDependent=false)
int GetConstraint() const
PCB_LAYER_ID GetLayer() const
BOARD_ITEM * GetItem(int index) const
BOARD_ITEM * GetObject(const LIBEVAL::CONTEXT *aCtx) const
static std::vector< std::vector< PCB_VIA * > > CollectMicroviaColumns(BOARD *aBoard)
Runs of microvias that land on one another, each ordered from its outermost hop down.
void Add(PCB_LAYER_ID aLayer)
SCOPED_LAYERSET(BOARD_ITEM *aItem)
SCOPED_LAYERSET & operator=(const SCOPED_LAYERSET &)=delete
SCOPED_LAYERSET(const SCOPED_LAYERSET &)=delete
Represent a set of closed polygons.
void ClearArcs()
Removes all arc references from all the outlines and holes in the polyset.
bool IsEmpty() const
Return true if the set is empty (no polygons at all)
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,...
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
void Deflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError)
int OutlineCount() const
Return the number of outlines in the set.
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.
bool Get(const KEY &aKey, VALUE &aValue) const
Look up a key. Returns false on a miss and leaves aValue untouched.
void Set(const KEY &aKey, const VALUE &aValue)
Handle a list of polygons defining a copper zone.
const BOX2I GetBoundingBox() const override
SHAPE_POLY_SET * Outline()
SHAPE_POLY_SET GetBoardOutline() const
virtual bool IsOnLayer(PCB_LAYER_ID) const override
Test to see if this object is on the given layer.
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
@ ALLOW_ACUTE_CORNERS
just inflate the polygon. Acute angles create spikes
@ DIFF_PAIR_GAP_CONSTRAINT
@ NET_CHAIN_LENGTH_CONSTRAINT
@ SILK_CLEARANCE_CONSTRAINT
#define ROUTER_TRANSIENT
transient items that should NOT be cached
#define HOLE_PROXY
Indicates the BOARD_ITEM is a proxy for its hole.
#define MALFORMED_COURTYARDS
bool IsFrontLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a front layer.
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a back layer.
PCB_LAYER_ID
A quick note on layer IDs:
PCB_LAYER_ID ToLAYER_ID(int aLayer)
@ PTH
Plated through hole pad.
Class to handle a set of BOARD_ITEMs.
static void intersectsFrontCourtyardFunc(LIBEVAL::CONTEXT *aCtx, void *self)
#define MISSING_SHEET_ARG(f)
bool collidesWithCourtyard(BOARD_ITEM *aItem, std::shared_ptr< SHAPE > &aItemShape, PCBEXPR_CONTEXT *aCtx, FOOTPRINT *aFootprint, PCB_LAYER_ID aSide)
static SHAPE_POLY_SET getDeflatedZoneOutline(BOARD *aBoard, ZONE *aArea)
static void intersectsBackCourtyardFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void memberOfGroupFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static bool searchFootprintsNearItem(BOARD *aBoard, const wxString &aArg, PCBEXPR_CONTEXT *aCtx, BOARD_ITEM *aItem, const std::function< bool(FOOTPRINT *)> &aFunc)
bool collidesWithArea(BOARD_ITEM *aItem, PCB_LAYER_ID aLayer, PCBEXPR_CONTEXT *aCtx, ZONE *aArea, bool aForKeepout)
#define MISSING_AREA_ARG(f)
static void isCoupledDiffPairFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void doIntersectsAreaFunc(LIBEVAL::CONTEXT *aCtx, void *self, bool aForKeepout)
static void isPlatedFunc(LIBEVAL::CONTEXT *aCtx, void *self)
bool searchAreas(BOARD *aBoard, const wxString &aArg, PCBEXPR_CONTEXT *aCtx, const std::function< bool(ZONE *)> &aFunc)
static void isBuriedVia(LIBEVAL::CONTEXT *aCtx, void *self)
static void existsOnLayerFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void hasCustomPropertyFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static bool testFootprintSelector(FOOTPRINT *aFp, const wxString &aSelector)
static void isBlindBuriedViaFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void memberOfSheetFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void hasComponentClassFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void isBlindVia(LIBEVAL::CONTEXT *aCtx, void *self)
static void hasExactNetclassFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void intersectsKeepoutFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void inNetChainFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void enclosedByAreaFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void customPropertyFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void memberOfSheetOrChildrenFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void memberOfFootprintFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void hasNetChainFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void isMicroVia(LIBEVAL::CONTEXT *aCtx, void *self)
static void getFieldFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void hasNetclassFunc(LIBEVAL::CONTEXT *aCtx, void *self)
bool fromToFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void isStackedViaFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void intersectsCourtyardFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void inNetChainClassFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void inDiffPairFunc(LIBEVAL::CONTEXT *aCtx, void *self)
static void intersectsAreaFunc(LIBEVAL::CONTEXT *aCtx, void *self)
#define MISSING_FP_ARG(f)
std::vector< FAB_LAYER_COLOR > dummy
wxString result
Test unit parsing edge cases and error handling.
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_ZONE_T
class ZONE, a copper pour area
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
@ PCB_PAD_T
class PAD, a pad in a footprint