KiCad PCB EDA Suite
Loading...
Searching...
No Matches
ALLEGRO::BOARD_BUILDER Class Reference

Class that builds a KiCad board from a BRD_DB (= FILE_HEADER + STRINGS + OBJECTS + bookkeeping) More...

#include <allegro_builder.h>

Classes

struct  ZoneFillEntry
 

Public Member Functions

 BOARD_BUILDER (const BRD_DB &aBrdDb, BOARD &aBoard, REPORTER &aReporter, PROGRESS_REPORTER *aProgressReporter, const LAYER_MAPPING_HANDLER &aLayerMappingHandler)
 
 ~BOARD_BUILDER ()
 
bool BuildBoard ()
 

Private Member Functions

VECTOR2I scale (const VECTOR2I &aVector) const
 
VECTOR2I scaleSize (const VECTOR2I &aSize) const
 
int scale (int aVal) const
 
template<typename T>
const TexpectBlockByKey (uint32_t aKey, uint8_t aType) const
 
void reportMissingBlock (uint32_t aKey, uint8_t aType) const
 
void reportUnexpectedBlockType (uint8_t aGot, uint8_t aExpected, uint32_t aKey=0, size_t aOffset=0, const wxString &aName=wxEmptyString) const
 
PCB_LAYER_ID getLayer (const LAYER_INFO &aLayerInfo) const
 
wxString get0x30StringValue (uint32_t a0x30Key) const
 Get just the string value from a 0x31 STRING WRAPPER -> 0x30 STRING GRAPHIC pair.
 
std::vector< std::unique_ptr< PCB_SHAPE > > buildShapes (const BLK_0x14_GRAPHIC &aGraphicList, BOARD_ITEM_CONTAINER &aParent)
 Build the shapes from an 0x14 shape list.
 
std::unique_ptr< PCB_TEXTbuildPcbText (const BLK_0x30_STR_WRAPPER &aStrWrapper, BOARD_ITEM_CONTAINER &aParent)
 
std::unique_ptr< PCB_SHAPEbuildRect (const BLK_0x24_RECT &aRect, BOARD_ITEM_CONTAINER &aParent)
 Build a rectangular shape from a 0x24 RECT block.
 
std::unique_ptr< PCB_SHAPEbuildRect (const BLK_0x0E_RECT &aShape, BOARD_ITEM_CONTAINER &aParent)
 Build a graphic polygon from a 0x0E RECT block.
 
std::unique_ptr< PCB_SHAPEbuildPolygon (const BLK_0x28_SHAPE &aShape, BOARD_ITEM_CONTAINER &aParent)
 Build a graphic polygon from a 0x28 SHAPE block.
 
std::vector< std::unique_ptr< BOARD_ITEM > > buildPadItems (const BLK_0x1C_PADSTACK &aPadstack, FOOTPRINT &aFp, const wxString &aPadName, int aNetcode)
 Construct "pad" items for a given 0x1C PADSTACK block.
 
std::unique_ptr< FOOTPRINTbuildFootprint (const BLK_0x2D_FOOTPRINT_INST &aFpInstance)
 
std::vector< std::unique_ptr< BOARD_ITEM > > buildTrack (const BLK_0x05_TRACK &aBlock, int aNetcode)
 
std::unique_ptr< BOARD_ITEMbuildVia (const BLK_0x33_VIA &aBlock, int aNetcode)
 
std::unique_ptr< ZONEbuildZone (const BLK_0x28_SHAPE &aShape, int aNetcode)
 
const SHAPE_LINE_CHAINbuildOutline (const BLK_0x28_SHAPE &aShape) const
 
const SHAPE_LINE_CHAINbuildSegmentChain (uint32_t aStartKey) const
 Walk a geometry chain (0x01 arcs and 0x15-17 segments) starting from the given key, following m_Next links.
 
int resolveShapeNet (const BLK_0x28_SHAPE &aShape) const
 Resolve the net code for a BOUNDARY shape by following the pointer chain: BOUNDARY.Ptr7 -> 0x2C TABLE -> Ptr1 -> 0x37 array -> first entry -> 0x1B NET.
 
wxString resolveMatchGroupName (const BLK_0x1B_NET &aNet) const
 Follow m_MatchGroupPtr through the 0x26/0x2C pointer chain to get the match group name for a NET.
 
wxString resolveConstraintSetNameFromField (uint32_t aFieldKey) const
 Extract constraint set name from a 0x03 FIELD block pointer.
 
void cacheFontDefs ()
 
void setupLayers ()
 
void createNets ()
 
void createTracks ()
 
void createBoardOutline ()
 
void createBoardText ()
 
void createZones ()
 
void applyZoneFills ()
 
void enablePadTeardrops ()
 
void applyConstraintSets ()
 
void applyNetConstraints ()
 
void applyMatchGroups ()
 
const BLK_0x36_DEF_TABLE::FontDef_X08getFontDef (unsigned aIndex) const
 Get the font definition for a given index in a 0x30, etc.
 
const BLK_0x07_COMPONENT_INSTgetFpInstRef (const BLK_0x2D_FOOTPRINT_INST &aFpInstance) const
 Look up 0x07 FP instance data (0x07) for a given 0x2D FP instance.
 

Private Attributes

const BRD_DBm_brdDb
 
BOARDm_board
 
REPORTERm_reporter
 
PROGRESS_REPORTERm_progressReporter
 
LAYER_MAPPING_HANDLER m_layerMappingHandler
 
std::vector< const BLK_0x36_DEF_TABLE::FontDef_X08 * > m_fontDefList
 
std::unordered_map< uint32_t, NETINFO_ITEM * > m_netCache
 
std::vector< ZoneFillEntrym_zoneFillShapes
 
std::unique_ptr< LAYER_MAPPERm_layerMapper
 
std::unordered_map< uint32_t, SHAPE_LINE_CHAINm_outlineCache
 
std::unordered_map< uint32_t, SHAPE_LINE_CHAINm_segChainCache
 
double m_scale
 

Detailed Description

Class that builds a KiCad board from a BRD_DB (= FILE_HEADER + STRINGS + OBJECTS + bookkeeping)

Definition at line 55 of file allegro_builder.h.

Constructor & Destructor Documentation

◆ BOARD_BUILDER()

BOARD_BUILDER::BOARD_BUILDER ( const BRD_DB & aBrdDb,
BOARD & aBoard,
REPORTER & aReporter,
PROGRESS_REPORTER * aProgressReporter,
const LAYER_MAPPING_HANDLER & aLayerMappingHandler )

◆ ~BOARD_BUILDER()

BOARD_BUILDER::~BOARD_BUILDER ( )

Definition at line 867 of file allegro_builder.cpp.

Member Function Documentation

◆ applyConstraintSets()

◆ applyMatchGroups()

◆ applyNetConstraints()

◆ applyZoneFills()

◆ BuildBoard()

◆ buildFootprint()

std::unique_ptr< FOOTPRINT > BOARD_BUILDER::buildFootprint ( const BLK_0x2D_FOOTPRINT_INST & aFpInstance)
private

Definition at line 2344 of file allegro_builder.cpp.

References ANGLE_180, APPEND, ALLEGRO::LAYER_INFO::ASSEMBLY_BOTTOM, ALLEGRO::LAYER_INFO::ASSEMBLY_TOP, buildPadItems(), buildPcbText(), buildPolygon(), buildRect(), buildShapes(), ALLEGRO::LAYER_INFO::COMPONENT_VALUE, DEGREES_T, ALLEGRO::LAYER_INFO::DEVICE_TYPE, expectBlockByKey(), FlipLayer(), ALLEGRO::BLOCK< T >::GetData(), getFpInstRef(), IsBackLayer(), ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_AreasPtr, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_AssemblyPtr, m_board, m_brdDb, ALLEGRO::BLK_0x0D_PAD::m_CoordsX, ALLEGRO::BLK_0x0D_PAD::m_CoordsY, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_CoordX, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_CoordY, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_FirstPadPtr, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_GraphicPtr, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_Key, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_Layer, ALLEGRO::BLK_0x0D_PAD::m_NameStrId, ALLEGRO::BLK_0x04_NET_ASSIGNMENT::m_Net, m_netCache, ALLEGRO::BLK_0x0D_PAD::m_PadStack, ALLEGRO::BLK_0x07_COMPONENT_INST::m_RefDesStrPtr, m_reporter, ALLEGRO::BLK_0x0D_PAD::m_Rotation, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_Rotation, ALLEGRO::BLK_0x2D_FOOTPRINT_INST::m_TextPtr, pad, PadGetNextInFootprint(), PCB_PAD_T, ALLEGRO::LAYER_INFO::REF_DES, REFERENCE, RPT_SEVERITY_WARNING, scale, LL_WALKER::SetNextFunc(), EDA_TEXT::SetText(), EDA_TEXT::SetVisible(), ALLEGRO::LAYER_INFO::SILKSCREEN_BOTTOM, ALLEGRO::LAYER_INFO::SILKSCREEN_TOP, text, ALLEGRO::LAYER_INFO::TOLERANCE, TOP_BOTTOM, traceAllegroBuilder, NETINFO_LIST::UNCONNECTED, USER, ALLEGRO::LAYER_INFO::USER_PART_NUMBER, and VALUE.

Referenced by BuildBoard().

◆ buildOutline()

◆ buildPadItems()

std::vector< std::unique_ptr< BOARD_ITEM > > BOARD_BUILDER::buildPadItems ( const BLK_0x1C_PADSTACK & aPadstack,
FOOTPRINT & aFp,
const wxString & aPadName,
int aNetcode )
private

Construct "pad" items for a given 0x1C PADSTACK block.

If this is zero just skip entirely

Definition at line 1829 of file allegro_builder.cpp.

References std::abs(), ANGLE_0, ANGLE_360, ALLEGRO::BLK_0x1C_PADSTACK::ANTIPAD, SHAPE_LINE_CHAIN::Append(), B_Cu, SHAPE_LINE_CHAIN::BBox(), center, CHAMFERED_RECT, CIRCLE, SHAPE_LINE_CHAIN::CLastPoint(), PADSTACK::CopperLayer(), CUSTOM, PADSTACK::CUSTOM, PADSTACK::Drill(), end, expectBlockByKey(), F_Cu, PADSTACK::FRONT_INNER_BACK, ALLEGRO::BLOCK< T >::GetData(), BOX2< Vec >::GetHeight(), BOX2< Vec >::GetWidth(), ALLEGRO::COND_FIELD_BASE< T >::has_value(), In1_Cu, KiROUND(), m_brdDb, ALLEGRO::BLK_0x1C_PADSTACK::m_Components, ALLEGRO::BLK_0x1C_PADSTACK::m_Drill, ALLEGRO::BLK_0x1C_PADSTACK::m_DrillArr, ALLEGRO::BLK_0x28_SHAPE::m_FirstSegmentPtr, ALLEGRO::PADSTACK_COMPONENT::m_H, ALLEGRO::BLK_0x28_SHAPE::m_Key, ALLEGRO::BLK_0x1C_PADSTACK::m_LayerCount, ALLEGRO::BLK_0x1C_PADSTACK::m_NumCompsPerLayer, ALLEGRO::BLK_0x1C_PADSTACK::m_NumFixedCompEntries, ALLEGRO::BLK_0x1C_PADSTACK::m_PadStr, m_reporter, ALLEGRO::BLK_0x1C_PADSTACK::m_SlotAndUnknownArr, ALLEGRO::PADSTACK_COMPONENT::m_StrPtr, ALLEGRO::PADSTACK_COMPONENT::m_Type, ALLEGRO::PADSTACK_COMPONENT::m_W, ALLEGRO::PADSTACK_COMPONENT::m_X3, ALLEGRO::PADSTACK_COMPONENT::m_X4, ALLEGRO::PADSTACK_COMPONENT::m_Z1, PADSTACK::NORMAL, EDA_ANGLE::Normalize(), OBLONG, OVAL, ALLEGRO::BLK_0x1C_PADSTACK::PAD, pad, SHAPE_LINE_CHAIN::PointCount(), POLY, PTH, PAD::PTHMask(), RECT_CHAMFER_ALL, RECTANGLE, ROUNDRECT, RPT_SEVERITY_WARNING, S, scale, scaleSize(), SHAPE_LINE_CHAIN::SetClosed(), PADSTACK::SetLayerSet(), PADSTACK::SetMode(), PADSTACK::DRILL_PROPS::shape, PADSTACK::DRILL_PROPS::size, SMD, PAD::SMDMask(), ALLEGRO::BLK_0x1C_PADSTACK::THERMAL_RELIEF, ToLAYER_ID(), traceAllegroBuilder, ALLEGRO::PADSTACK_COMPONENT::TYPE_CHAMFERED_RECTANGLE, ALLEGRO::PADSTACK_COMPONENT::TYPE_CIRCLE, ALLEGRO::PADSTACK_COMPONENT::TYPE_NULL, ALLEGRO::PADSTACK_COMPONENT::TYPE_OBLONG_X, ALLEGRO::PADSTACK_COMPONENT::TYPE_OBLONG_Y, ALLEGRO::PADSTACK_COMPONENT::TYPE_OCTAGON, ALLEGRO::PADSTACK_COMPONENT::TYPE_PENTAGON, ALLEGRO::PADSTACK_COMPONENT::TYPE_RECTANGLE, ALLEGRO::PADSTACK_COMPONENT::TYPE_ROUNDED_RECTANGLE, ALLEGRO::PADSTACK_COMPONENT::TYPE_SHAPE_SYMBOL, ALLEGRO::PADSTACK_COMPONENT::TYPE_SQUARE, ALLEGRO::V_172, and ALLEGRO::COND_FIELD_BASE< T >::value().

Referenced by buildFootprint().

◆ buildPcbText()

◆ buildPolygon()

std::unique_ptr< PCB_SHAPE > BOARD_BUILDER::buildPolygon ( const BLK_0x28_SHAPE & aShape,
BOARD_ITEM_CONTAINER & aParent )
private

Build a graphic polygon from a 0x28 SHAPE block.

Definition at line 1782 of file allegro_builder.cpp.

References buildOutline(), chain, getLayer(), ALLEGRO::BLK_0x28_SHAPE::m_Key, ALLEGRO::BLK_0x28_SHAPE::m_Layer, POLY, and traceAllegroBuilder.

Referenced by buildFootprint().

◆ buildRect() [1/2]

std::unique_ptr< PCB_SHAPE > BOARD_BUILDER::buildRect ( const BLK_0x0E_RECT & aShape,
BOARD_ITEM_CONTAINER & aParent )
private

Build a graphic polygon from a 0x0E RECT block.

Definition at line 1757 of file allegro_builder.cpp.

References DEGREES_T, getLayer(), ALLEGRO::BLK_0x0E_RECT::m_Coords, ALLEGRO::BLK_0x0E_RECT::m_Layer, ALLEGRO::BLK_0x0E_RECT::m_Rotation, RECTANGLE, and scale.

◆ buildRect() [2/2]

std::unique_ptr< PCB_SHAPE > BOARD_BUILDER::buildRect ( const BLK_0x24_RECT & aRect,
BOARD_ITEM_CONTAINER & aParent )
private

Build a rectangular shape from a 0x24 RECT block.

Definition at line 1732 of file allegro_builder.cpp.

References DEGREES_T, getLayer(), ALLEGRO::BLK_0x24_RECT::m_Coords, ALLEGRO::BLK_0x24_RECT::m_Layer, ALLEGRO::BLK_0x24_RECT::m_Rotation, RECTANGLE, and scale.

Referenced by buildFootprint().

◆ buildSegmentChain()

const SHAPE_LINE_CHAIN & BOARD_BUILDER::buildSegmentChain ( uint32_t aStartKey) const
private

Walk a geometry chain (0x01 arcs and 0x15-17 segments) starting from the given key, following m_Next links.

Used for building hole outlines from 0x34 KEEPOUT blocks.

Definition at line 3067 of file allegro_builder.cpp.

References ANGLE_0, ANGLE_360, SHAPE_LINE_CHAIN::Append(), center, SHAPE_LINE_CHAIN::CLastPoint(), end, ALLEGRO::BLOCK_BASE::GetBlockType(), ALLEGRO::BLOCK< T >::GetData(), KiROUND(), m_brdDb, m_segChainCache, EDA_ANGLE::Normalize(), SHAPE_LINE_CHAIN::PointCount(), and scale.

Referenced by applyZoneFills().

◆ buildShapes()

◆ buildTrack()

◆ buildVia()

◆ buildZone()

◆ cacheFontDefs()

◆ createBoardOutline()

◆ createBoardText()

void BOARD_BUILDER::createBoardText ( )
private

◆ createNets()

void BOARD_BUILDER::createNets ( )
private

◆ createTracks()

◆ createZones()

◆ enablePadTeardrops()

void BOARD_BUILDER::enablePadTeardrops ( )
private

◆ expectBlockByKey()

template<typename T>
const T * ALLEGRO::BOARD_BUILDER::expectBlockByKey ( uint32_t aKey,
uint8_t aType ) const
inlineprivate

◆ get0x30StringValue()

wxString BOARD_BUILDER::get0x30StringValue ( uint32_t a0x30Key) const
private

Get just the string value from a 0x31 STRING WRAPPER -> 0x30 STRING GRAPHIC pair.

Throws away all the other string data like pos/size/etc.

Definition at line 925 of file allegro_builder.cpp.

References expectBlockByKey(), ALLEGRO::BLK_0x30_STR_WRAPPER::m_StrGraphicPtr, ALLEGRO::BLK_0x31_SGRAPHIC::m_Value, and THROW_IO_ERROR.

◆ getFontDef()

const BLK_0x36_DEF_TABLE::FontDef_X08 * BOARD_BUILDER::getFontDef ( unsigned aIndex) const
private

Get the font definition for a given index in a 0x30, etc.

Returns
the definition if it exists, else nullptr (which is probably an error in the importer logic)

Definition at line 1507 of file allegro_builder.cpp.

References m_fontDefList, m_reporter, and RPT_SEVERITY_WARNING.

Referenced by buildPcbText().

◆ getFpInstRef()

const BLK_0x07_COMPONENT_INST * BOARD_BUILDER::getFpInstRef ( const BLK_0x2D_FOOTPRINT_INST & aFpInstance) const
private

◆ getLayer()

PCB_LAYER_ID BOARD_BUILDER::getLayer ( const LAYER_INFO & aLayerInfo) const
private

◆ reportMissingBlock()

void BOARD_BUILDER::reportMissingBlock ( uint32_t aKey,
uint8_t aType ) const
private

Definition at line 904 of file allegro_builder.cpp.

References m_reporter, and RPT_SEVERITY_WARNING.

Referenced by expectBlockByKey().

◆ reportUnexpectedBlockType()

void BOARD_BUILDER::reportUnexpectedBlockType ( uint8_t aGot,
uint8_t aExpected,
uint32_t aKey = 0,
size_t aOffset = 0,
const wxString & aName = wxEmptyString ) const
private

Definition at line 911 of file allegro_builder.cpp.

References m_reporter, name, and RPT_SEVERITY_WARNING.

Referenced by createNets(), createTracks(), and expectBlockByKey().

◆ resolveConstraintSetNameFromField()

wxString BOARD_BUILDER::resolveConstraintSetNameFromField ( uint32_t aFieldKey) const
private

Extract constraint set name from a 0x03 FIELD block pointer.

Some boards store the constraint set name in a FIELD block referenced by m_FieldPtr in the 0x1D block instead of the main string table. The FIELD string is a schematic cross-reference like "@lib.xxx(view):\CONSTRAINT_SET_NAME\".

Definition at line 1021 of file allegro_builder.cpp.

References ALLEGRO::BLOCK_BASE::GetBlockType(), ALLEGRO::BLOCK< T >::GetData(), m_brdDb, and ALLEGRO::BLK_0x03_FIELD::m_Substruct.

Referenced by applyConstraintSets().

◆ resolveMatchGroupName()

wxString BOARD_BUILDER::resolveMatchGroupName ( const BLK_0x1B_NET & aNet) const
private

Follow m_MatchGroupPtr through the 0x26/0x2C pointer chain to get the match group name for a NET.

V172+: NET.m_MatchGroupPtr -> 0x26 -> m_GroupPtr -> 0x2C TABLE -> string Pre-V172: NET.m_MatchGroupPtr -> 0x2C TABLE -> string

Returns
the group name, or empty string if none

Definition at line 1312 of file allegro_builder.cpp.

References expectBlockByKey(), ALLEGRO::BLOCK_BASE::GetBlockType(), ALLEGRO::BLOCK< T >::GetData(), m_brdDb, ALLEGRO::BLK_0x1B_NET::m_MatchGroupPtr, ALLEGRO::BLK_0x2C_TABLE::m_StringPtr, name, and next().

Referenced by applyMatchGroups().

◆ resolveShapeNet()

int BOARD_BUILDER::resolveShapeNet ( const BLK_0x28_SHAPE & aShape) const
private

◆ scale() [1/2]

VECTOR2I BOARD_BUILDER::scale ( const VECTOR2I & aVector) const
private

Definition at line 886 of file allegro_builder.cpp.

References m_scale, safeScale(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ scale() [2/2]

int BOARD_BUILDER::scale ( int aVal) const
private

Definition at line 891 of file allegro_builder.cpp.

References m_scale, and safeScale().

◆ scaleSize()

VECTOR2I BOARD_BUILDER::scaleSize ( const VECTOR2I & aSize) const
private

Definition at line 897 of file allegro_builder.cpp.

References std::abs(), m_scale, safeScale(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by buildPadItems().

◆ setupLayers()

void BOARD_BUILDER::setupLayers ( )
private

Definition at line 1479 of file allegro_builder.cpp.

References expectBlockByKey(), m_brdDb, m_layerMapper, and traceAllegroBuilder.

Referenced by BuildBoard().

Member Data Documentation

◆ m_board

◆ m_brdDb

◆ m_fontDefList

std::vector<const BLK_0x36_DEF_TABLE::FontDef_X08*> ALLEGRO::BOARD_BUILDER::m_fontDefList
private

Definition at line 204 of file allegro_builder.h.

Referenced by cacheFontDefs(), and getFontDef().

◆ m_layerMapper

std::unique_ptr<LAYER_MAPPER> ALLEGRO::BOARD_BUILDER::m_layerMapper
private

◆ m_layerMappingHandler

LAYER_MAPPING_HANDLER ALLEGRO::BOARD_BUILDER::m_layerMappingHandler
private

Definition at line 201 of file allegro_builder.h.

Referenced by BOARD_BUILDER().

◆ m_netCache

std::unordered_map<uint32_t, NETINFO_ITEM*> ALLEGRO::BOARD_BUILDER::m_netCache
private

◆ m_outlineCache

std::unordered_map<uint32_t, SHAPE_LINE_CHAIN> ALLEGRO::BOARD_BUILDER::m_outlineCache
mutableprivate

Definition at line 221 of file allegro_builder.h.

Referenced by buildOutline().

◆ m_progressReporter

PROGRESS_REPORTER* ALLEGRO::BOARD_BUILDER::m_progressReporter
private

Definition at line 200 of file allegro_builder.h.

Referenced by BOARD_BUILDER(), and BuildBoard().

◆ m_reporter

◆ m_scale

double ALLEGRO::BOARD_BUILDER::m_scale
private

◆ m_segChainCache

std::unordered_map<uint32_t, SHAPE_LINE_CHAIN> ALLEGRO::BOARD_BUILDER::m_segChainCache
mutableprivate

Definition at line 224 of file allegro_builder.h.

Referenced by buildSegmentChain().

◆ m_zoneFillShapes

std::vector<ZoneFillEntry> ALLEGRO::BOARD_BUILDER::m_zoneFillShapes
private

Definition at line 216 of file allegro_builder.h.

Referenced by applyZoneFills(), createTracks(), and createZones().


The documentation for this class was generated from the following files: