37#define BLK_DATA( BLK, T ) static_cast<const BLOCK<T>&>( BLK ).GetData()
117 std::optional<uint32_t> key =
GetBlockKey( *
this );
118 return key.value_or( 0 );
148 wxLogTrace(
"ALLEGRO_EXTRACT",
"Failed to resolve DB_REF target key %#010x for %s",
179 "%s: Must set m_NextRefGetter before resolving DB_REF_CHAIN",
DebugString() ) );
193 std::set<uint32_t> visitedKeys;
195 while( n !=
nullptr )
203 if( visitedKeys.count( nextKey ) > 0 )
205 THROW_IO_ERROR( wxString::Format(
"Detected loop in DB_REF_CHAIN at key %#010x for %s",
208 visitedKeys.insert( nextKey );
221 n = aResolver.
Resolve( nextKey );
225 wxLogTrace(
"ALLEGRO_EXTRACT",
"Failed to resolve DB_REF_CHAIN up to tail %#010x for %s",
m_Tail,
m_DebugName ?
m_DebugName :
"<unknown>" );
252 aObjectCount = std::min( aObjectCount,
static_cast<size_t>( 1e6 ) );
253 aStringCount = std::min( aStringCount,
static_cast<size_t>( 1e6 ) );
264 bool skipDbObj =
false;
271 uint8_t t = aBlock->GetBlockType();
272 skipDbObj = ( t == 0x01 || t == 0x14 || t == 0x15 || t == 0x16 || t == 0x17 );
277 std::unique_ptr<DB_OBJ> dbObj =
m_ObjFactory.CreateObject( *aBlock );
283 if( aBlock->GetKey() != 0 )
286 m_Blocks.push_back( std::move( aBlock ) );
291 std::unique_ptr<DB_OBJ> obj;
298 obj = std::make_unique<ARC>( arcBlk );
304 obj = std::make_unique<FIELD>( blk03 );
310 obj = std::make_unique<NET_ASSIGN>(
m_brdDb, netBlk );
316 obj = std::make_unique<TRACK>(
m_brdDb, trackBlk );
322 obj = std::make_unique<COMPONENT>(
m_brdDb, compBlk );
328 obj = std::make_unique<COMPONENT_INST>( strBlk );
334 obj = std::make_unique<PIN_NUMBER>( symbolBlk );
340 obj = std::make_unique<RECT_OBJ>(
m_brdDb, pinBlk );
346 obj = std::make_unique<FUNCTION_SLOT>( funcSlotBlk );
352 obj = std::make_unique<FUNCTION_INSTANCE>( funcInstBlk );
358 obj = std::make_unique<PIN_NAME>( pinNameBlk );
364 obj = std::make_unique<XREF_OBJ>( blk );
370 obj = std::make_unique<GRAPHIC_SEG>(
m_brdDb, lineBlk );
378 obj = std::make_unique<LINE>( seg );
384 obj = std::make_unique<NET>(
m_brdDb, netBlk );
390 obj = std::make_unique<UNKNOWN_0x20>(
m_brdDb, blk );
396 obj = std::make_unique<SHAPE>(
m_brdDb, shapeBlk );
402 obj = std::make_unique<FOOTPRINT_DEF>(
m_brdDb, fpBlk );
408 obj = std::make_unique<FOOTPRINT_INSTANCE>( fpInstBlk );
414 obj = std::make_unique<CONNECTION_OBJ>(
m_brdDb, padBlk );
420 obj = std::make_unique<PLACED_PAD>(
m_brdDb, placedPadBlk );
426 obj = std::make_unique<VIA>(
m_brdDb, viaBlk );
432 obj = std::make_unique<PTR_ARRAY>(
m_brdDb, arrBlk );
460 m_Objects[aObject->GetKey()] = std::move( aObject );
469 return it->second.get();
491 obj->m_Valid = obj->ResolveRefs( *
this );
497 THROW_IO_ERROR( wxString::Format(
"Failed to resolve references for object key %#010x", key ) );
506 obj->m_Valid = obj->ResolveRefs( *
this );
511 std::function<
const DB_REF&(
const DB_OBJ& aObj )> aVisitor )
const
515 size_t iterations = 0;
519 const DB_REF& nextRef = aVisitor( *node );
527 if( iterations++ >= 1e6 )
543 return objType == aType;
552 return std::find( aTypes.begin(), aTypes.end(), objType ) != aTypes.end();
578 ok &=
m_Next.Resolve( aResolver );
596 ok &=
m_Next.Resolve( aResolver );
597 ok &=
m_Net.Resolve( aResolver );
608 if(
m_Net.m_Target ==
nullptr )
610 THROW_IO_ERROR( wxString::Format(
"NET_ASSIGN::GetNet: NET reference is null for key %#010x",
m_Key ) );
627 ok &=
m_Next.Resolve( aResolver );
644 m_FieldValue = wxString(std::get<std::string>( aBlk.m_Substruct ) );
649 m_FieldValue = std::get<uint32_t>( aBlk.m_Substruct );
662 catch(
const std::bad_variant_access& )
664 THROW_IO_ERROR(
"FIELD::ExpectString: Field value is not a string" );
678 const FIELD& field =
static_cast<const FIELD&
>( *obj );
679 if( field.
m_Hdr1 == aFieldCode )
685 catch(
const std::bad_variant_access& )
687 THROW_IO_ERROR( wxString::Format(
"FIELD code %#04x is not an integer (subtype: %#04x )", aFieldCode,
706 const FIELD& field =
static_cast<const FIELD&
>( *obj );
707 if( field.
m_Hdr1 == aFieldCode )
713 catch(
const std::bad_variant_access& )
715 THROW_IO_ERROR( wxString::Format(
"FIELD code %#04x is not a string (subtype: %#04x )", aFieldCode,
732 const FIELD& field =
static_cast<const FIELD&
>( *obj );
734 if( field.
m_Hdr1 == aFieldCode )
759 ok &=
m_Next.Resolve( aResolver );
765 ok &=
m_Fields.Resolve( aResolver );
781 m_TextStr( this, aBlk.m_RefDesStrPtr,
"m_TextStr" ),
784 m_Pads( this, aBlk.m_FirstPadPtr, aBlk.
m_Key,
"m_Pads" )
789 return pad.m_NextInCompInst;
799 ok &=
m_Next.Resolve( aResolver );
801 ok &=
m_Pads.Resolve( aResolver );
817 THROW_IO_ERROR(
"COMPONENT_INST::GetFunctionInstance: Null reference to FUNCTION_INSTANCE" );
826 if(
m_Next.m_Target ==
nullptr )
828 wxLogTrace(
"ALLEGRO_EXTRACT",
"COMPONENT_INST::GetNextInstance: Null m_Next reference for key %#010x",
m_Key );
845 m_PinName( this, aBlk.m_PinNamePtr,
"m_PinName" )
854 ok &=
m_Next.Resolve( aResolver );
892 ok &=
m_Next.Resolve( aResolver );
900 m_PinNameStr( this, aBlk.m_PinNameStrPtr,
"m_PinNameStr" ),
901 m_PinNumber( this, aBlk.m_PinNumberPtr,
"m_PinNumber" )
910 ok &=
m_Next.Resolve( aResolver );
948 m_Ptr1.Resolve( aResolver );
949 m_Ptr2.Resolve( aResolver );
950 m_Ptr3.Resolve( aResolver );
959 m_Segment( this, aBlk.m_SegmentPtr,
"m_Segment" )
968 ok &=
m_Parent.Resolve( aResolver );
969 ok &=
m_Next.Resolve( aResolver );
1000 m_Next.Resolve( aResolver );
1008 m_FpStr( this, aBlk.m_FpStrRef,
"m_FpStr" ),
1009 m_SymLibPath( this, aBlk.m_SymLibPathPtr,
"m_SymLibPath" ),
1023 ok &=
m_Next.Resolve( aResolver );
1024 ok &=
m_FpStr.Resolve( aResolver );
1034 wxLogTrace(
"ALLEGRO_EXTRACT",
"FOOTPRINT_DEF::ResolveRefs: Unexpected type in footprint instance chain: %d",
static_cast<int>( aObj.
GetType() ) );
1042 wxLogTrace(
"ALLEGRO_EXTRACT",
"Resolved %zu footprint instances for footprint def key %#010x",
m_Instances.m_Chain.size(),
GetKey() );
1065 m_Pads( this, aBlk.m_FirstPadPtr, aBlk.
m_Key,
"m_Pads" ),
1073 wxLogTrace(
"ALLEGRO_EXTRACT",
"FOOTPRINT_INSTANCE::m_Pads: Unexpected type in pad chain: %d",
static_cast<int>( aObj.GetType() ) );
1077 return static_cast<const PLACED_PAD&
>( aObj ).m_NextInFp;
1096 ok &=
m_Next.Resolve( aResolver );
1098 ok &=
m_Pads.Resolve( aResolver );
1115 return componentInstance;
1132 m_Component( this, aBlk.m_Ptr0x06,
"m_Component" ),
1133 m_PinName( this, aBlk.m_Ptr0x11,
"m_PinName" )
1161 m_Slot( this, aBlk.m_Slots,
"m_Slot" ),
1173 ok &=
m_Slot.Resolve( aResolver );
1174 ok &=
m_Fields.Resolve( aResolver );
1193 "FUNCTION_INSTANCE::GetComponentInstance: Null reference to COMPONENT_INST" );
1202 if(
m_Slot.m_Target ==
nullptr )
1204 THROW_IO_ERROR(
"FUNCTION_INSTANCE::GetFunctionSlot: Null reference to FUNCTION_SLOT" );
1230 ok &=
m_Next.Resolve( aResolver );
1289 m_Next.Resolve( aResolver );
1310 m_Next.Resolve( aResolver );
1320 m_NetAssign( this, aBlk.m_NetAssignment,
"m_NetAssign" ),
1331 ok &=
m_Next.Resolve( aResolver );
1345 m_NetAssign( this, aBlk.m_NetPtr,
"m_NetAssign" ),
1346 m_PinNumber( this, aBlk.m_PtrPinNumber,
"m_PinNumber" ),
1360 ok &=
m_Next.Resolve( aResolver );
1391 if( pinName ==
nullptr )
1405 return &netAssign->
GetNet();
1420 ok &=
m_Next.Resolve( aResolver );
1428 m_Parent( this, aBlk.m_GroupPtr,
"m_GroupPtr" )
1431 for(
size_t i = 0; i < aBlk.
m_Count; ++i )
1433 m_Ptrs.emplace_back( this, aBlk.m_Ptrs[i], nullptr );
1442 ok &=
m_Next.Resolve( aResolver );
1443 ok &=
m_Parent.Resolve( aResolver );
1445 for(
auto& ptr :
m_Ptrs )
1448 ptr.Resolve( aResolver );
1528 wxLogTrace(
"ALLEGRO_EXTRACT",
1529 "Strict reference resolution failed (%s), retrying with best-effort",
1541 const auto fpDefNextFunc = [&](
const DB_OBJ& aObj ) ->
const DB_REF&
1559 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting footprint instances for footprint def key %#010x", aFpDef.
GetKey() );
1564 const auto fpInstNextFunc = [&](
const DB_OBJ& aObj )
1566 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting footprint instance key %#010x", aObj.GetKey() );
1569 wxLogTrace(
"ALLEGRO_EXTRACT",
" Not a footprint instance, skipping key %#010x", aObj.GetKey() );
1579 if( componentInstance )
1585 aVisitor( viewObjs );
1594 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting footprint instances" );
1610 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting function instances" );
1612 const auto componentVisitor = [&](
const VIEW_OBJS& aViewObjs )
1614 aVisitor( aViewObjs );
1624 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting components" );
1630 const auto x06NextFunc = [&](
const DB_OBJ& aObj ) ->
const DB_REF&
1634 wxLogTrace(
"ALLEGRO_EXTRACT",
" Not a component object, skipping key %#010x", aObj.GetKey() );
1642 const auto compInstVisitor = [&](
const DB_OBJ& aCompInst )
1644 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting component instance key %#010x", aCompInst.GetKey() );
1648 wxLogTrace(
"ALLEGRO_EXTRACT",
" Not a component instance, skipping key %#010x", aCompInst.GetKey() );
1658 aVisitor( viewObjs );
1672 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting component pins" );
1674 const auto componentVisitor = [&](
const VIEW_OBJS& aViewObjs )
1679 if( compInst ==
nullptr )
1681 wxLogTrace(
"ALLEGRO_EXTRACT",
" No component instance in view objs, skipping" );
1685 const auto padVisitor = [&](
const DB_OBJ& aObj )
1687 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting pad key %#010x", aObj.GetKey() );
1690 wxLogTrace(
"ALLEGRO_EXTRACT",
" Not a placed pad, skipping key %#010x, type", aObj.GetKey() );
1697 viewObj.
m_Pad = &placedPad;
1700 aVisitor( viewObj );
1712 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting nets" );
1717 const auto netNextFunc = [&](
const DB_OBJ& aObj ) ->
const DB_REF&
1719 if( aObj.GetType() !=
BRD_NET )
1721 wxLogTrace(
"ALLEGRO_EXTRACT",
" Not a net object, skipping key %#010x", aObj.GetKey() );
1725 const NET& net =
static_cast<const NET&
>( aObj );
1727 viewObjs.
m_Net = &net;
1729 aVisitor( viewObjs );
1740 wxLogTrace(
"ALLEGRO_EXTRACT",
"Visiting connected geometry" );
1745 const auto netVisitor = [&](
const VIEW_OBJS& aViewObjs )
static uint32_t GetPrimaryNext(const BLOCK_BASE &aBlock)
Gets the next block in the linked list.
static const DB_REF & GetPrimaryNext(const DB_OBJ &obj)
Next ref getter for any chain where all objects uses the default "next" field.
static void collectSentinelKeys(const FILE_HEADER &aHeader, DB &aDb)
static bool CheckTypeIsOneOf(const DB_REF &aRef, const std::vector< DB_OBJ::TYPE_ID > &aTypes, bool aCanBeNull)
static bool CheckTypeIs(const DB_REF &aRef, DB_OBJ::TYPE_ID aType, bool aCanBeNull)
static std::optional< uint32_t > GetBlockKey(const BLOCK_BASE &block)
The base class for all blocks in the main body of an Allegro file.
uint8_t GetBlockType() const
std::unique_ptr< DB_OBJ > CreateObject(const BLOCK_BASE &aBlock) const
An Allegro database that represents a .brd file (amd presumably .dra)
void VisitConnectedGeometry(VIEW_OBJS_VISITOR aVisitor) const
std::unordered_map< uint32_t, BLOCK_BASE * > m_ObjectKeyMap
std::unique_ptr< FILE_HEADER > m_Header
std::vector< std::unique_ptr< BLOCK_BASE > > m_Blocks
void visitFootprintInstances(const FOOTPRINT_DEF &aFpDef, VIEW_OBJS_VISITOR aVisitor) const
void VisitNets(VIEW_OBJS_VISITOR aVisitor) const
void VisitFunctionInstances(VIEW_OBJS_VISITOR aVisitor) const
Access the function instances in the database.
std::function< void(const FOOTPRINT_DEF &aFpDef)> FP_DEF_VISITOR
void VisitFootprintDefs(FP_DEF_VISITOR aFpDef) const
Access the footprint defs in the database.
void ReserveCapacity(size_t aObjectCount, size_t aStringCount)
Pre-allocate storage for the expected number of objects and strings.
bool ResolveAndValidate()
Iterate all the links we know about and fill in the object links.
void VisitComponents(VIEW_OBJS_VISITOR aVisitor) const
void VisitFootprintInstances(VIEW_OBJS_VISITOR aVisitor) const
Access the footprint instances in the database.
void InsertBlock(std::unique_ptr< BLOCK_BASE > aBlock) override
void VisitComponentPins(VIEW_OBJS_VISITOR aVisitor) const
Visit all component pins in the database.
Some interface that can yield DB_OBJs for keys.
virtual DB_OBJ * Resolve(uint32_t aKey) const =0
Resolve the given reference.
virtual bool IsSentinel(uint32_t aKey) const
In v18+ files, linked list sentinel nodes are real blocks with small keys.
virtual const wxString * ResolveString(uint32_t aKey) const =0
An ALLEGRO::DB is the represention of the actual data stored within an Allegro file,...
const wxString * ResolveString(uint32_t aRef) const override
std::unordered_map< uint32_t, wxString > m_StringTable
void AddObject(std::unique_ptr< DB_OBJ > aObject)
void ResolveObjectLinksBestEffort()
Resolve all DB_OBJ references without throwing on failure.
std::unordered_map< uint32_t, std::unique_ptr< DB_OBJ > > m_Objects
void AddSentinelKey(uint32_t aKey)
void visitLinkedList(const FILE_HEADER::LINKED_LIST aLList, std::function< const DB_REF &(const DB_OBJ &aObj)> aVisitor) const
bool IsSentinel(uint32_t aKey) const override
In v18+ files, linked list sentinel nodes are real blocks with small keys.
void ResolveObjectLinks()
Iterate the database and resolve links.
DB_OBJ * Resolve(uint32_t aRef) const override
Implement the object resolver interface.
void reserveObjects(size_t aCount)
std::optional< int > GetOptFieldExpectInt(uint16_t aFieldCode) const
Get the integer value of the field with the given code, if in the list.
const wxString * GetOptFieldExpectString(uint16_t aFieldCode) const
std::optional< std::variant< wxString, uint32_t > > GetOptField(uint16_t aFieldCode) const
Get the raw variant value of the field with the given code, if present.
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
SHAPE(const BRD_DB &aBrd, const BLK_0x28_SHAPE &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
UNKNOWN_0x20(const BRD_DB &aBrd, const BLK_0x20_UNKNOWN &aBlk)
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString Problem() const
what was the problem?
#define THROW_IO_ERROR(msg)
macro which captures the "call site" values of FILE_, __FUNCTION & LINE
std::function< void(const VIEW_OBJS &aViewObjs)> VIEW_OBJS_VISITOR
FMT_VER
The format of an Allego file.
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
ARC(const BLK_0x01_ARC &aBlk)
Arc segment used in tracks, zone outlines, and shape boundaries.
Field/property references with variable-typed substructs.
Net assignment linking a net (0x1B) to its member objects.
Component/symbol definitions.
Component instance reference data.
Pin number within a component.
uint32_t m_Rotation
Rotation in millidegrees.
Function slot in a multi-slot component (e.g.
Function instance linking a component instance (0x07) to its schematic function, pin cross-references...
Pin name within a component, linked from function slots (0x0F).
Cross-reference between objects.
Graphics container holding a chain of line segments and arcs.
0x15 , 0x16, 0x17 are segments:
Polygon shape defined by a linked list of segments starting at m_FirstSegmentPtr (0x15/0x16/0x17 line...
Connection point at a track junction or pad-to-track transition.
Placed pad instance linking a pad definition (0x0D via m_PadPtr) to its parent footprint (m_ParentFp)...
std::array< int32_t, 4 > m_Coords
Via instance with board position, padstack reference (m_Padstack for drill/annular ring definitions),...
Fixed-capacity pointer array (100 entries).
BRD_DB_OBJ(BRD_TYPE aType, uint32_t aKey, uint32_t aNextKey)
COMPONENT_INST 0x07 objects.
const wxString * GetRefDesStr() const
const COMPONENT_INST * GetNextInstance() const
COMPONENT_INST(const BLK_0x07_COMPONENT_INST &aBlk)
const COMPONENT * GetParentComponent() const
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
const FUNCTION_INSTANCE & GetFunctionInstance() const
const wxString * GetComponentDeviceType() const
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
DB_STR_REF m_CompDeviceType
COMPONENT(const BRD_DB &aBrd, const BLK_0x06_COMPONENT &aBlk)
CONNECTION_OBJ(const BRD_DB &aBrd, const BLK_0x2E_CONNECTION &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
A DB_OBJ represents one object in an Allegro database.
virtual TYPE_ID GetType() const =0
All blocks are denoted by a type which allows dispatch to the appropriate subclass.
virtual const DB_REF & GetNext() const
Return the reference to the next object in the default chain for this object.
std::vector< DB_OBJ * > m_Chain
void Visit(std::function< void(const DB_OBJ &aObj)> aVisitor) const
Visit all objects in the chain.
std::function< const DB_REF &(const DB_OBJ &)> m_NextRefGetter
bool Resolve(const DB_OBJ_RESOLVER &aResolver) override
bool Resolve(const DB_OBJ_RESOLVER &aResolver) override
const wxString * m_String
bool Resolve(const DB_OBJ_RESOLVER &aResolver) override
const wxString & ExpectString() const
std::variant< wxString, uint32_t > m_FieldValue
FIELD(const BLK_0x03_FIELD &aBlk)
A FUNCTION (0x10) object represents a logical function, which is an instance of a single function slo...
const FUNCTION_SLOT & GetFunctionSlot() const
const COMPONENT_INST & GetComponentInstance() const
FUNCTION_INSTANCE(const BLK_0x10_FUNCTION_INST &aBlk)
const wxString * GetName() const
DB_REF m_ComponentInstance
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
DB_STR_REF m_FunctionName
A FUNCTION_SLOT (0x0F) object represents a single function slot within a symbol.
FUNCTION_SLOT(const BLK_0x0F_FUNCTION_SLOT &aBlk)
const wxString * GetName() const
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
GRAPHIC_SEG(const BRD_DB &aBrd, const BLK_0x14_GRAPHIC &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
LINE(const BLK_0x15_16_17_SEGMENT &aBlk)
const ALLEGRO::NET & GetNet() const
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
NET_ASSIGN(const BRD_DB &aBrd, const BLK_0x04_NET_ASSIGNMENT &aBlk)
DB_REF m_Net
Reference to an 0x05 TRACK or 0x32 PLACED_PAD object.
const wxString * GetLogicalPath() const
std::optional< int > GetNetMaxNeckLength() const
NET(const BRD_DB &aBrd, const BLK_0x1B_NET &aBlk)
std::optional< int > GetNetMinLineWidth() const
std::optional< int > GetNetMaxLineWidth() const
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
const wxString * GetName() const
DB_REF_CHAIN m_FieldsChain
DB_REF_CHAIN m_NetAssignments
std::optional< int > GetNetMinNeckWidth() const
const PIN_NUMBER * GetPinNumber() const
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
PIN_NAME(const BLK_0x11_PIN_NAME &aBlk)
const wxString * GetName() const
DB_STR_REF m_PinNumberStr
const wxString * GetNumber() const
PIN_NUMBER(const BLK_0x08_PIN_NUMBER &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
const PIN_NAME * GetPinName() const
const NET * GetNet() const
PLACED_PAD(const BRD_DB &aBrd, const BLK_0x32_PLACED_PAD &aBlk)
const wxString * GetPinName() const
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
const wxString * GetPinNumber() const
std::vector< DB_REF > m_Ptrs
PTR_ARRAY(const BRD_DB &aBrd, const BLK_0x37_PTR_ARRAY &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
RECT_OBJ(const BRD_DB &aBrd, const BLK_0x0E_RECT &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
virtual std::string DebugString() const
TRACK(const BRD_DB &aBrd, const BLK_0x05_TRACK &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
VIA(const BRD_DB &aBrd, const BLK_0x33_VIA &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.
When processing a view, some objects are available and some are not.
const FOOTPRINT_INSTANCE * m_FootprintInstance
const FUNCTION_INSTANCE * m_Function
const COMPONENT * m_Component
const COMPONENT_INST * m_ComponentInstance
XREF_OBJ(const BLK_0x12_XREF &aBlk)
bool ResolveRefs(const DB_OBJ_RESOLVER &aResolver) override
Called when all objects in the DB are read and can be resolved by their IDs by other objects.