|
KiCad PCB EDA Suite
|
Builder class to convert PADS symbol definitions to KiCad LIB_SYMBOL objects. More...
#include <pads_sch_symbol_builder.h>
Public Member Functions | |
| PADS_SCH_SYMBOL_BUILDER (const PARAMETERS &aParams) | |
| ~PADS_SCH_SYMBOL_BUILDER () | |
| LIB_SYMBOL * | BuildSymbol (const SYMBOL_DEF &aSymbolDef) |
| Build a KiCad LIB_SYMBOL from a PADS symbol definition. | |
| LIB_SYMBOL * | GetOrCreateSymbol (const SYMBOL_DEF &aSymbolDef) |
| Get or create a symbol for the given definition. | |
| bool | HasSymbol (const std::string &aName) const |
| Check if a symbol with the given name already exists. | |
| LIB_SYMBOL * | GetSymbol (const std::string &aName) const |
| Get a cached symbol by name. | |
| LIB_SYMBOL * | BuildKiCadPowerSymbol (const std::string &aKiCadName) |
| Build a power symbol using hard-coded KiCad-standard graphics. | |
| LIB_SYMBOL * | BuildMultiUnitSymbol (const PARTTYPE_DEF &aPartType, const std::vector< SYMBOL_DEF > &aSymbolDefs) |
| Build a composite multi-unit LIB_SYMBOL from a multi-gate PARTTYPE. | |
| LIB_SYMBOL * | GetOrCreateMultiUnitSymbol (const PARTTYPE_DEF &aPartType, const std::vector< SYMBOL_DEF > &aSymbolDefs) |
| Get or create a multi-unit symbol for the given PARTTYPE. | |
| LIB_SYMBOL * | GetOrCreatePartTypeSymbol (const PARTTYPE_DEF &aPartType, const SYMBOL_DEF &aSymbolDef) |
| Get or create a single-gate symbol with PARTTYPE-specific pin remapping. | |
| void | AddHiddenPowerPins (LIB_SYMBOL *aSymbol, const std::vector< PARTTYPE_DEF::SIGPIN > &aSigpins) |
| Add hidden power pins from PARTTYPE SIGPIN entries to an existing symbol. | |
Static Public Member Functions | |
| static bool | IsPowerSymbol (const std::string &aName) |
| Check if a symbol name indicates a power symbol. | |
| static std::optional< LIB_ID > | GetKiCadPowerSymbolId (const std::string &aPadsName) |
| Get KiCad power library symbol ID for a PADS power symbol. | |
| static std::string | GetPowerStyleFromVariant (const std::string &aDecalName, const std::string &aPinType) |
| Map a PADS special_variant to a power symbol style name. | |
Private Member Functions | |
| int | toKiCadUnits (double aPadsValue) const |
| Convert PADS coordinate to KiCad internal units. | |
| SCH_SHAPE * | createShape (const SYMBOL_GRAPHIC &aGraphic) |
| Create a SCH_SHAPE from a PADS graphic element. | |
| std::vector< SCH_SHAPE * > | createShapes (const SYMBOL_GRAPHIC &aGraphic) |
| Create one or more SCH_SHAPEs from a PADS graphic element. | |
| SCH_PIN * | createPin (const SYMBOL_PIN &aPin, LIB_SYMBOL *aParent) |
| Create a SCH_PIN from a PADS pin definition. | |
| int | mapPinType (PIN_TYPE aPadsType) |
| Map PADS pin type to KiCad electrical type. | |
Private Attributes | |
| const PARAMETERS & | m_params |
| std::map< std::string, std::unique_ptr< LIB_SYMBOL > > | m_symbolCache |
Builder class to convert PADS symbol definitions to KiCad LIB_SYMBOL objects.
This class handles the conversion of parsed PADS symbol definitions (graphics and pins) to KiCad's embedded symbol format for schematic import.
Definition at line 44 of file pads_sch_symbol_builder.h.
| PADS_SCH::PADS_SCH_SYMBOL_BUILDER::PADS_SCH_SYMBOL_BUILDER | ( | const PARAMETERS & | aParams | ) |
Definition at line 42 of file pads_sch_symbol_builder.cpp.
References m_params.
| PADS_SCH::PADS_SCH_SYMBOL_BUILDER::~PADS_SCH_SYMBOL_BUILDER | ( | ) |
Definition at line 48 of file pads_sch_symbol_builder.cpp.
| void PADS_SCH::PADS_SCH_SYMBOL_BUILDER::AddHiddenPowerPins | ( | LIB_SYMBOL * | aSymbol, |
| const std::vector< PARTTYPE_DEF::SIGPIN > & | aSigpins ) |
Add hidden power pins from PARTTYPE SIGPIN entries to an existing symbol.
Each SIGPIN becomes an invisible PT_POWER_IN pin at position (0,0). Duplicate pin numbers are skipped.
Definition at line 940 of file pads_sch_symbol_builder.cpp.
References LIB_SYMBOL::AddDrawItem(), LIB_SYMBOL::GetDrawItems(), LINE, pin, PT_POWER_IN, and SCH_PIN_T.
Referenced by SCH_IO_PADS::LoadSchematicFile().
| LIB_SYMBOL * PADS_SCH::PADS_SCH_SYMBOL_BUILDER::BuildKiCadPowerSymbol | ( | const std::string & | aKiCadName | ) |
Build a power symbol using hard-coded KiCad-standard graphics.
| aKiCadName | KiCad power symbol name (e.g. "GND", "VCC", "VEE"). |
Definition at line 668 of file pads_sch_symbol_builder.cpp.
References LIB_SYMBOL::AddDrawItem(), SCH_SHAPE::AddPoint(), FILLED_SHAPE, LIB_SYMBOL::GetReferenceField(), LAYER_DEVICE, pin, PIN_DOWN, PIN_UP, POLY, PT_POWER_IN, RECTANGLE, schIUScale, EDA_SHAPE::SetEnd(), EDA_SHAPE::SetFillMode(), LIB_SYMBOL::SetGlobalPower(), SYMBOL::SetShowPinNames(), SYMBOL::SetShowPinNumbers(), EDA_SHAPE::SetStart(), SCH_SHAPE::SetStroke(), SCH_FIELD::SetText(), EDA_TEXT::SetVisible(), and SOLID.
Referenced by BOOST_AUTO_TEST_CASE(), and SCH_IO_PADS::LoadSchematicFile().
| LIB_SYMBOL * PADS_SCH::PADS_SCH_SYMBOL_BUILDER::BuildMultiUnitSymbol | ( | const PARTTYPE_DEF & | aPartType, |
| const std::vector< SYMBOL_DEF > & | aSymbolDefs ) |
Build a composite multi-unit LIB_SYMBOL from a multi-gate PARTTYPE.
Each gate becomes a separate unit with its own graphics, pins, and text. Pin numbers/names/types are taken from the GATE_DEF pin list rather than from the CAEDECAL SYMBOL_DEF, which only has placeholder pin data.
| aPartType | The multi-gate PARTTYPE definition. |
| aSymbolDefs | All parsed CAEDECAL definitions for decal lookup. |
Definition at line 150 of file pads_sch_symbol_builder.cpp.
References LIB_SYMBOL::AddDrawItem(), createPin(), createShapes(), PADS_SCH::GATE_DEF::decal_names, PADS_SCH::PARTTYPE_DEF::gates, ADVANCED_CFG::GetCfg(), PADS_SCH::SYMBOL_DEF::graphics, LAYER_DEVICE, LIB_SYMBOL::LockUnits(), ADVANCED_CFG::m_PadsSchTextHeightScale, ADVANCED_CFG::m_PadsSchTextWidthScale, PADS_SCH::PARTTYPE_DEF::name, PADS_SCH::PADS_SCH_PARSER::ParsePinTypeChar(), pin, PADS_SCH::GATE_DEF::pins, PADS_SCH::SYMBOL_DEF::pins, SYMBOL::SetShowPinNames(), SYMBOL::SetShowPinNumbers(), EDA_TEXT::SetTextAngleDegrees(), EDA_TEXT::SetTextSize(), SCH_ITEM::SetUnit(), LIB_SYMBOL::SetUnitCount(), text, PADS_SCH::SYMBOL_DEF::texts, and toKiCadUnits().
Referenced by GetOrCreateMultiUnitSymbol().
| LIB_SYMBOL * PADS_SCH::PADS_SCH_SYMBOL_BUILDER::BuildSymbol | ( | const SYMBOL_DEF & | aSymbolDef | ) |
Build a KiCad LIB_SYMBOL from a PADS symbol definition.
| aSymbolDef | The parsed PADS symbol definition. |
Definition at line 81 of file pads_sch_symbol_builder.cpp.
References LIB_SYMBOL::AddDrawItem(), createPin(), createShapes(), ADVANCED_CFG::GetCfg(), PADS_SCH::SYMBOL_DEF::graphics, LAYER_DEVICE, ADVANCED_CFG::m_PadsSchTextHeightScale, ADVANCED_CFG::m_PadsSchTextWidthScale, PADS_SCH::SYMBOL_DEF::name, pin, PADS_SCH::SYMBOL_DEF::pins, SYMBOL::SetShowPinNames(), SYMBOL::SetShowPinNumbers(), EDA_TEXT::SetTextAngleDegrees(), EDA_TEXT::SetTextSize(), text, PADS_SCH::SYMBOL_DEF::texts, and toKiCadUnits().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and GetOrCreateSymbol().
|
private |
Create a SCH_PIN from a PADS pin definition.
Definition at line 593 of file pads_sch_symbol_builder.cpp.
References CLOCK, PADS_SCH::SYMBOL_PIN::clock, INVERTED, PADS_SCH::SYMBOL_PIN::inverted, PADS_SCH::SYMBOL_PIN::length, LINE, mapPinType(), PADS_SCH::SYMBOL_PIN::name, PADS_SCH::SYMBOL_PIN::number, pin, PADS_SCH::SYMBOL_PIN::pin_decal_name, PIN_DOWN, PIN_LEFT, PIN_RIGHT, PIN_UP, PADS_SCH::SYMBOL_PIN::position, PADS_SCH::SYMBOL_PIN::rotation, schIUScale, PADS_SCH::SYMBOL_PIN::side, toKiCadUnits(), PADS_SCH::SYMBOL_PIN::type, PADS_SCH::POINT::x, and PADS_SCH::POINT::y.
Referenced by BuildMultiUnitSymbol(), BuildSymbol(), and GetOrCreatePartTypeSymbol().
|
private |
Create a SCH_SHAPE from a PADS graphic element.
Returns nullptr for mixed line/arc paths (use createShapes instead).
Definition at line 379 of file pads_sch_symbol_builder.cpp.
References SCH_SHAPE::AddPoint(), PADS_SCH::ARC, ARC, center, PADS_SCH::SYMBOL_GRAPHIC::center, PADS_SCH::CIRCLE, CIRCLE, end, PADS_SCH::SYMBOL_GRAPHIC::end_angle, PADS_SCH::SYMBOL_GRAPHIC::filled, FILLED_SHAPE, LAYER_DEVICE, PADS_SCH::LINE, PADS_SCH::SYMBOL_GRAPHIC::line_style, PADS_SCH::SYMBOL_GRAPHIC::line_width, m_params, M_PI, PADS_COMMON::PadsLineStyleToKiCad(), PADS_SCH::SYMBOL_GRAPHIC::points, POLY, PADS_SCH::POLYLINE, PADS_SCH::SYMBOL_GRAPHIC::radius, radius, PADS_SCH::RECTANGLE, RECTANGLE, EDA_SHAPE::SetCenter(), EDA_SHAPE::SetEnd(), EDA_SHAPE::SetFillMode(), EDA_SHAPE::SetStart(), SCH_SHAPE::SetStroke(), PADS_SCH::SYMBOL_GRAPHIC::start_angle, toKiCadUnits(), PADS_SCH::SYMBOL_GRAPHIC::type, PADS_SCH::POINT::x, and PADS_SCH::POINT::y.
Referenced by createShapes().
|
private |
Create one or more SCH_SHAPEs from a PADS graphic element.
Handles mixed line/arc paths by emitting individual line and arc shapes.
Definition at line 490 of file pads_sch_symbol_builder.cpp.
References std::abs(), SCH_SHAPE::AddPoint(), PADS_SCH::ARC_DATA::angle, ARC, PADS_SCH::GRAPHIC_POINT::arc, PADS_SCH::ARC_DATA::bbox_x1, PADS_SCH::ARC_DATA::bbox_x2, PADS_SCH::ARC_DATA::bbox_y1, PADS_SCH::ARC_DATA::bbox_y2, center, PADS_SCH::GRAPHIC_POINT::coord, createShape(), PADS_SCH::SYMBOL_GRAPHIC::filled, FILLED_SHAPE, LAYER_DEVICE, PADS_SCH::SYMBOL_GRAPHIC::line_style, PADS_SCH::SYMBOL_GRAPHIC::line_width, m_params, next(), PADS_COMMON::PadsLineStyleToKiCad(), PADS_SCH::SYMBOL_GRAPHIC::points, POLY, radius, result, EDA_SHAPE::SetArcGeometry(), EDA_SHAPE::SetFillMode(), SCH_SHAPE::SetStroke(), toKiCadUnits(), PADS_SCH::POINT::x, VECTOR2< T >::x, PADS_SCH::POINT::y, and VECTOR2< T >::y.
Referenced by BuildMultiUnitSymbol(), BuildSymbol(), and GetOrCreatePartTypeSymbol().
|
static |
Get KiCad power library symbol ID for a PADS power symbol.
| aPadsName | PADS symbol name. |
Definition at line 1024 of file pads_sch_symbol_builder.cpp.
References LIB_ID::SetLibItemName(), and LIB_ID::SetLibNickname().
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and SCH_IO_PADS::LoadSchematicFile().
| LIB_SYMBOL * PADS_SCH::PADS_SCH_SYMBOL_BUILDER::GetOrCreateMultiUnitSymbol | ( | const PARTTYPE_DEF & | aPartType, |
| const std::vector< SYMBOL_DEF > & | aSymbolDefs ) |
Get or create a multi-unit symbol for the given PARTTYPE.
Cached by PARTTYPE name so that all instances of the same multi-gate part share one composite LIB_SYMBOL.
Definition at line 253 of file pads_sch_symbol_builder.cpp.
References BuildMultiUnitSymbol(), m_symbolCache, and PADS_SCH::PARTTYPE_DEF::name.
Referenced by SCH_IO_PADS::LoadSchematicFile().
| LIB_SYMBOL * PADS_SCH::PADS_SCH_SYMBOL_BUILDER::GetOrCreatePartTypeSymbol | ( | const PARTTYPE_DEF & | aPartType, |
| const SYMBOL_DEF & | aSymbolDef ) |
Get or create a single-gate symbol with PARTTYPE-specific pin remapping.
Since mergePartTypeData() no longer mutates shared SYMBOL_DEF pins, this method applies pin number/name/type overrides from GATE_DEF::pins at build time. Cached by PARTTYPE name to keep separate symbols when multiple PARTTYPEs share the same CAEDECAL.
Definition at line 268 of file pads_sch_symbol_builder.cpp.
References LIB_SYMBOL::AddDrawItem(), createPin(), createShapes(), PADS_SCH::PARTTYPE_DEF::gates, ADVANCED_CFG::GetCfg(), PADS_SCH::SYMBOL_DEF::graphics, LAYER_DEVICE, ADVANCED_CFG::m_PadsSchTextHeightScale, ADVANCED_CFG::m_PadsSchTextWidthScale, m_symbolCache, PADS_SCH::PARTTYPE_DEF::name, PADS_SCH::SYMBOL_DEF::name, PADS_SCH::PADS_SCH_PARSER::ParsePinTypeChar(), pin, PADS_SCH::GATE_DEF::pins, PADS_SCH::SYMBOL_DEF::pins, SYMBOL::SetShowPinNames(), SYMBOL::SetShowPinNumbers(), EDA_TEXT::SetTextAngleDegrees(), EDA_TEXT::SetTextSize(), text, PADS_SCH::SYMBOL_DEF::texts, and toKiCadUnits().
Referenced by SCH_IO_PADS::LoadSchematicFile().
| LIB_SYMBOL * PADS_SCH::PADS_SCH_SYMBOL_BUILDER::GetOrCreateSymbol | ( | const SYMBOL_DEF & | aSymbolDef | ) |
Get or create a symbol for the given definition.
If the symbol has already been created, returns a pointer to the existing symbol. Otherwise creates a new symbol and caches it.
| aSymbolDef | The parsed PADS symbol definition. |
Definition at line 136 of file pads_sch_symbol_builder.cpp.
References BuildSymbol(), m_symbolCache, and PADS_SCH::SYMBOL_DEF::name.
Referenced by BOOST_AUTO_TEST_CASE(), and SCH_IO_PADS::LoadSchematicFile().
|
static |
Map a PADS special_variant to a power symbol style name.
Uses the variant's decal_name pattern (RAIL, ARROW, BUBBLE) and pin_type to determine the appropriate KiCad power symbol style.
| aDecalName | Variant decal name (e.g. "+RAIL", "AGND", "+BUBBLE"). |
| aPinType | Variant pin type ("G" for ground, "P" for power). |
Definition at line 906 of file pads_sch_symbol_builder.cpp.
Referenced by SCH_IO_PADS::LoadSchematicFile().
| LIB_SYMBOL * PADS_SCH::PADS_SCH_SYMBOL_BUILDER::GetSymbol | ( | const std::string & | aName | ) | const |
Get a cached symbol by name.
| aName | Symbol name. |
Definition at line 368 of file pads_sch_symbol_builder.cpp.
References m_symbolCache.
| bool PADS_SCH::PADS_SCH_SYMBOL_BUILDER::HasSymbol | ( | const std::string & | aName | ) | const |
Check if a symbol with the given name already exists.
Definition at line 362 of file pads_sch_symbol_builder.cpp.
References m_symbolCache.
Referenced by BOOST_AUTO_TEST_CASE().
|
static |
Check if a symbol name indicates a power symbol.
| aName | Symbol name to check. |
Definition at line 995 of file pads_sch_symbol_builder.cpp.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), and SCH_IO_PADS::LoadSchematicFile().
|
private |
Map PADS pin type to KiCad electrical type.
Definition at line 977 of file pads_sch_symbol_builder.cpp.
References PADS_SCH::BIDIRECTIONAL, PADS_SCH::INPUT, PADS_SCH::OPEN_COLLECTOR, PADS_SCH::OPEN_EMITTER, PADS_SCH::OUTPUT, PADS_SCH::PASSIVE, PADS_SCH::POWER, PT_BIDI, PT_INPUT, PT_OPENCOLLECTOR, PT_OPENEMITTER, PT_OUTPUT, PT_PASSIVE, PT_POWER_IN, PT_TRISTATE, PT_UNSPECIFIED, PADS_SCH::TRISTATE, and PADS_SCH::UNSPECIFIED.
Referenced by createPin().
|
private |
Convert PADS coordinate to KiCad internal units.
Definition at line 53 of file pads_sch_symbol_builder.cpp.
References PADS_SCH::INCHES, m_params, PADS_SCH::METRIC, PADS_SCH::MILS, and schIUScale.
Referenced by BuildMultiUnitSymbol(), BuildSymbol(), createPin(), createShape(), createShapes(), and GetOrCreatePartTypeSymbol().
|
private |
Definition at line 191 of file pads_sch_symbol_builder.h.
Referenced by createShape(), createShapes(), PADS_SCH_SYMBOL_BUILDER(), and toKiCadUnits().
|
private |
Definition at line 192 of file pads_sch_symbol_builder.h.
Referenced by GetOrCreateMultiUnitSymbol(), GetOrCreatePartTypeSymbol(), GetOrCreateSymbol(), GetSymbol(), and HasSymbol().