72 _(
"The selected file does not appear to be a CADSTAR parts Library file" ) );
84 std::vector<LIB_SYMBOL*> retVal;
88 std::unique_ptr<LIB_SYMBOL> loadedPart =
loadLibPart( part );
93 retVal.push_back( loadedPart.release() );
100std::unique_ptr<LIB_SYMBOL>
104 std::unique_ptr<LIB_SYMBOL> retSym;
117 wxString::Format(
_(
"Unable to find symbol %s, referenced by part %s. The "
118 "part was not loaded." ),
127 std::unique_ptr<LIB_SYMBOL> kiSymDef(
loadSymdef( symbolID )->Duplicate() );
129 if( (
int)sym.
m_Pins.size() != kiSymDef->GetPinCount() )
132 wxString::Format(
_(
"Inconsistent pin numbers in symbol %s compared to the one "
133 "defined in part %s. The part was not loaded." ),
147 wxCHECK( termID > 0 && sym.
m_Pins.size() >=
size_t( termID ),
nullptr );
148 LIB_PIN*
pin = kiSymDef->GetPin( storedPinNum );
149 size_t termIdx = size_t( termID ) - 1;
158 wxString partPinNum = wxString::Format(
"%ld", sym.
m_Pins[termIdx].m_Identifier );
159 pin->SetNumber( partPinNum );
173 wxCHECK( kiSymDef->GetUnitCount() == 1,
nullptr );
175 retSym = std::move( kiSymDef );
177 retSym->SetUnitCount( aPart.
m_Symbols.size(),
true );
179 retSym->SetName( escapedPartName );
181 retSym->GetValueField().SetText( aPart.
m_Value.value_or(
"" ) );
183 retSym->SetDescription( aPart.
m_Description.value_or(
"" ) );
185 auto addFieldIfHasValue =
186 [&](
const wxString& aFieldName,
const std::optional<std::string>& aFieldValue )
188 if( aFieldValue.has_value() )
201 wxString modelVal = wxString::Format(
"model=\"%s\"", aPart.
m_SpiceModel.value() );
228 VECTOR2I symCenter = retSym->GetBodyBoundingBox( unit, 0,
false,
false ).GetCenter();
229 symCenter.
y = -symCenter.
y;
235 for(
auto& [signalName, csPinVector] : aPart.
m_HiddenPins )
239 std::unique_ptr<LIB_PIN>
pin = std::make_unique<LIB_PIN>( retSym.get() );
241 long pinNum = csPin.m_Identifier;
242 pin->SetNumber( wxString::Format(
"%ld", pinNum ) );
243 pin->SetName( signalName );
244 pin->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN );
246 pin->SetVisible(
false );
255 direction = { -direction.
y, direction.
x };
260 pin->SetPosition( symCenter + offset );
262 pin->SetShape( GRAPHIC_PINSHAPE::LINE );
263 pin->SetUnit( unit );
264 retSym->AddDrawItem(
pin.release() );
284 std::unique_ptr<LIB_SYMBOL>& aDestSym,
285 int aDestUnit,
bool aOverrideFields )
288 for(
LIB_ITEM* item : aDestSym->GetUnitDrawItems( aDestUnit, 0 ) )
289 aDestSym->RemoveDrawItem( item );
292 for(
LIB_ITEM* newItem : aSourceSym->GetUnitDrawItems( 1, 0 ) )
296 itemCopy->
SetUnit( aDestUnit );
297 aDestSym->AddDrawItem( itemCopy );
301 if( aOverrideFields )
303 std::vector<LIB_FIELD*> fieldsToCopy;
304 aSourceSym->GetFields( fieldsToCopy );
306 for(
LIB_FIELD* templateField : fieldsToCopy )
309 templateField->Copy( appliedField );
317 wxCHECK( aSchematic, );
367 m_reporter->
Report( wxString::Format(
_(
"The CADSTAR design contains variants which has "
368 "no KiCad equivalent. Only the master variant "
369 "('%s') was loaded." ),
376 m_reporter->
Report(
_(
"The CADSTAR design contains grouped items which has no KiCad "
377 "equivalent. Any grouped items have been ungrouped." ),
383 m_reporter->
Report(
_(
"The CADSTAR design contains re-use blocks which has no KiCad "
384 "equivalent. The re-use block information has been discarded during "
391 for( std::pair<LAYER_ID, SCH_SHEET*> sheetPair :
m_sheetMap )
396 BOX2I sheetBoundingBox;
411 if( field.IsVisible() )
412 bbox.
Merge( field.GetBoundingBox() );
418 wxString txt = txtItem->
GetText();
420 if( txt.Contains(
"${" ) )
427 bbox = item->GetBoundingBox();
430 sheetBoundingBox.
Merge( bbox );
443 auto roundToNearestGrid =
444 [&](
int aNumber ) ->
int
446 int error = aNumber %
grid;
447 int absError =
sign( error ) * error;
449 if( absError > (
grid / 2 ) )
450 return aNumber + (
sign( error ) *
grid ) - error;
452 return aNumber - error;
459 int longestSide = std::max( targetSheetSize.
x, targetSheetSize.
y );
460 int margin = ( (double) longestSide * 0.03 );
461 margin = roundToNearestGrid( margin );
462 targetSheetSize += margin * 2;
473 VECTOR2I sheetcentre( pageSizeIU.
x / 2, pageSizeIU.
y / 2 );
477 VECTOR2I translation = sheetcentre - itemsCentre;
478 translation.
x = roundToNearestGrid( translation.
x );
479 translation.
y = roundToNearestGrid( translation.
y );
482 std::vector<SCH_ITEM*> allItems;
485 std::back_inserter( allItems ) );
489 item->Move( translation );
497 m_reporter->
Report(
_(
"CADSTAR fonts are different to the ones in KiCad. This will likely "
498 "result in alignment issues. Please review the imported text elements "
499 "carefully and correct manually if required." ),
503 "Please review the import errors and warnings (if any)." ) );
516 constexpr long long maxDesignSizekicad = std::numeric_limits<int>::max();
518 if( designSizeXkicad > maxDesignSizekicad || designSizeYkicad > maxDesignSizekicad )
521 _(
"The design is too large and cannot be imported into KiCad. \n"
522 "Please reduce the maximum design size in CADSTAR by navigating to: \n"
523 "Design Tab -> Properties -> Design Options -> Maximum Design Size. \n"
524 "Current Design size: %.2f, %.2f millimeters. \n"
525 "Maximum permitted design size: %.2f, %.2f millimeters.\n" ),
541 if( orphanSheets.size() > 1 )
546 for(
LAYER_ID sheetID : orphanSheets )
562 else if( orphanSheets.size() > 0 )
564 LAYER_ID rootSheetID = orphanSheets.at( 0 );
566 wxFileName loadedFilePath = wxFileName(
Filename );
568 std::string filename = wxString::Format(
"%s_%02d", loadedFilePath.GetName(),
582 THROW_IO_ERROR(
_(
"The selected file is a CADSTAR symbol library. It does not contain a "
583 "schematic design so cannot be imported/opened in this way." ) );
587 THROW_IO_ERROR(
_(
"The CADSTAR schematic might be corrupt: there is no root sheet." ) );
596 BLOCK& block = blockPair.second;
599 if( block.
Type == BLOCK::TYPE::PARENT )
601 else if( block.
Type == BLOCK::TYPE::CHILD )
610 for( std::pair<TERMINAL_ID, TERMINAL> termPair : block.
Terminals )
613 wxString
name =
"YOU SHOULDN'T SEE THIS TEXT. THIS IS A BUG.";
617 if( block.
Type == BLOCK::TYPE::PARENT )
619 else if( block.
Type == BLOCK::TYPE::CHILD )
623 sheetPin->
SetShape( LABEL_FLAG_SHAPE::L_UNSPECIFIED );
644 PART_ID partID = partPair.first;
645 PART part = partPair.second;
655 GATE_ID gateID = gatePair.first;
656 PART::DEFINITION::GATE gate = gatePair.second;
659 if( symbolID.IsEmpty() )
661 m_reporter->
Report( wxString::Format(
_(
"Part definition '%s' references symbol "
662 "'%s' (alternate '%s') which could not be "
663 "found in the symbol library. The part has "
664 "not been loaded into the KiCad library." ),
687 wxString::Format(
_(
"Part definition '%s' has an incomplete definition (no"
688 " symbol definitions are associated with it). The part"
689 " has not been loaded into the KiCad library." ),
710 SYMBOL sym = symPair.second;
719 m_reporter->
Report( wxString::Format(
_(
"Symbol '%s' references part '%s' which "
720 "could not be found in the library. The "
721 "symbol was not loaded" ),
729 if( sym.
GateID.IsEmpty() )
783 partname.Replace( wxT(
"\n" ), wxT(
"\\n" ) );
784 partname.Replace( wxT(
"\r" ), wxT(
"\\r" ) );
785 partname.Replace( wxT(
"\t" ), wxT(
"\\t" ) );
786 partField->
SetText( partname );
809 wxASSERT( attrField->
GetName() == attrName );
811 attrVal.
Value.Replace( wxT(
"\n" ), wxT(
"\\n" ) );
812 attrVal.
Value.Replace( wxT(
"\r" ), wxT(
"\\r" ) );
813 attrVal.
Value.Replace( wxT(
"\t" ), wxT(
"\\t" ) );
827 _(
"Symbol ID '%s' references library symbol '%s' which could not be "
828 "found in the library. Did you export all items of the design?" ),
837 _(
"Symbol ID '%s' is a signal reference or global signal but it has too "
838 "many pins. The expected number of pins is 1 but %d were found." ),
860 wxString libPartName = libraryNetName;
866 if( libPartName != symbolInstanceNetName )
868 libPartName += wxT(
" (" ) + symbolInstanceNetName + wxT(
")" );
874 wxCHECK( templatePart, );
878 kiPart->
SetName( libPartName );
884 wxCHECK( pins.size() == 1, );
886 pins.at( 0 )->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN );
887 pins.at( 0 )->SetName( symbolInstanceNetName );
939 netLabel->
SetText(
"***UNKNOWN NET****" );
953 if( libSymDef.
Alternate.Lower().Contains(
"in" ) )
954 netLabel->
SetShape( LABEL_FLAG_SHAPE::L_INPUT );
955 else if( libSymDef.
Alternate.Lower().Contains(
"bi" ) )
956 netLabel->
SetShape( LABEL_FLAG_SHAPE::L_BIDI );
957 else if( libSymDef.
Alternate.Lower().Contains(
"out" ) )
958 netLabel->
SetShape( LABEL_FLAG_SHAPE::L_OUTPUT );
960 netLabel->
SetShape( LABEL_FLAG_SHAPE::L_UNSPECIFIED );
967 screen->
Append( netLabel );
972 wxASSERT_MSG(
false,
"Unknown Symbol Variant." );
977 m_reporter->
Report( wxString::Format(
_(
"Symbol ID '%s' is of an unknown type. It is "
978 "neither a symbol or a net power / symbol. "
979 "The symbol was not loaded." ),
988 if( symbolName.empty() )
989 symbolName = wxString::Format(
"ID: %s", sym.
ID );
993 m_reporter->
Report( wxString::Format(
_(
"Symbol '%s' is scaled in the original "
994 "CADSTAR schematic but this is not supported "
995 "in KiCad. When the symbol is reloaded from "
996 "the library, it will revert to the original "
1010 BUS bus = busPair.second;
1011 bool firstPt =
true;
1014 if( bus.
LayerID != wxT(
"NO_SHEET" ) )
1017 std::shared_ptr<BUS_ALIAS> kiBusAlias = std::make_shared<BUS_ALIAS>();
1019 kiBusAlias->SetName( bus.
Name );
1020 kiBusAlias->SetParent( screen );
1028 label->
SetText( wxT(
"{" ) + busname + wxT(
"}" ) );
1079 label->
SetText( wxT(
"{" ) + busname + wxT(
"}" ) );
1094 wxString netName = net.
Name;
1095 std::map<NETELEMENT_ID, SCH_LABEL*> netlabels;
1097 if( netName.IsEmpty() )
1098 netName = wxString::Format(
"$%ld", net.
SignalNum );
1102 for( std::pair<NETELEMENT_ID, NET_SCH::SYM_TERM> terminalPair : net.
Terminals )
1104 NET_SCH::SYM_TERM netTerm = terminalPair.second;
1113 if( netTerm.HasNetLabel )
1119 netTerm.NetLabel.TextCodeID,
1120 netTerm.NetLabel.Alignment,
1121 netTerm.NetLabel.Justification,
1122 netTerm.NetLabel.OrientAngle,
1123 netTerm.NetLabel.Mirror );
1141 && netTerm.HasNetLabel )
1151 applyTextSettings( label, netTerm.NetLabel.TextCodeID, netTerm.NetLabel.Alignment,
1152 netTerm.NetLabel.Justification );
1154 netlabels.insert( { netTerm.ID, label } );
1157 m_sheetMap.at( sheet )->GetScreen()->Append( label );
1161 auto getHierarchicalLabel =
1164 if( aNode.Contains(
"BLKT" ) )
1167 BLOCK_PIN_ID blockPinID = std::make_pair( blockTerm.BlockID,
1168 blockTerm.TerminalID );
1178 for( std::pair<NETELEMENT_ID, NET_SCH::BLOCK_TERM> blockPair : net.
BlockTerminals )
1180 SCH_HIERLABEL* label = getHierarchicalLabel( blockPair.first );
1187 for( std::pair<NETELEMENT_ID, NET_SCH::BUS_TERM> busPair : net.
BusTerminals )
1189 NET_SCH::BUS_TERM busTerm = busPair.second;
1193 m_busesMap.at( bus.
ID )->Members().emplace_back( netName );
1213 if( busTerm.HasNetLabel )
1216 busTerm.NetLabel.TextCodeID,
1217 busTerm.NetLabel.Alignment,
1218 busTerm.NetLabel.Justification );
1225 netlabels.insert( { busTerm.ID, label } );
1229 for( std::pair<NETELEMENT_ID, NET_SCH::DANGLER> danglerPair : net.
Danglers )
1231 NET_SCH::DANGLER dangler = danglerPair.second;
1237 if( dangler.HasNetLabel )
1240 dangler.NetLabel.TextCodeID,
1241 dangler.NetLabel.Alignment,
1242 dangler.NetLabel.Justification );
1246 netlabels.insert( { dangler.ID, label } );
1248 m_sheetMap.at( dangler.LayerID )->GetScreen()->Append( label );
1251 for( NET_SCH::CONNECTION_SCH conn : net.
Connections )
1253 if( conn.LayerID == wxT(
"NO_SHEET" ) )
1264 if( conn.Path.size() < 1 || conn.Path.front() != start )
1265 conn.Path.insert( conn.Path.begin(), start );
1267 if( conn.Path.size() < 2 || conn.Path.back() != end )
1268 conn.Path.push_back( end );
1270 bool firstPt =
true;
1271 bool secondPt =
false;
1277 for(
POINT pt : conn.Path )
1287 std::vector<NETELEMENT_ID> nodes;
1288 nodes.push_back( conn.StartNode );
1289 nodes.push_back( conn.EndNode );
1304 int leftSide = sheetPosition.
x;
1305 int rightSide = sheetPosition.
x + sheetSize.
x;
1306 int topSide = sheetPosition.
y;
1307 int botSide = sheetPosition.
y + sheetSize.
y;
1311 sheetEdge.
Append( leftSide, topSide );
1312 sheetEdge.
Append( rightSide, topSide );
1313 sheetEdge.
Append( rightSide, botSide );
1314 sheetEdge.
Append( leftSide, botSide );
1315 sheetEdge.
Append( leftSide, topSide );
1319 if( !wireChain.
Intersect( sheetEdge, wireToSheetIntersects ) )
1324 if( node == conn.StartNode )
1325 wireChain = wireChain.
Reverse();
1329 if( node == conn.StartNode )
1330 wireChain = wireChain.
Reverse();
1336 VECTOR2I intsctPt = wireToSheetIntersects.at( 0 ).p;
1337 int intsctIndx = wireChain.
FindSegment( intsctPt );
1338 wxASSERT_MSG( intsctIndx != -1,
"Can't find intersecting segment" );
1340 if( node == conn.StartNode )
1341 wireChain.
Replace( 0, intsctIndx, intsctPt );
1343 wireChain.
Replace( intsctIndx + 1, -1, intsctPt );
1351 auto fixNetLabelsAndSheetPins =
1356 if( netlabels.find( aNetEleID ) != netlabels.end() )
1357 netlabels.at( aNetEleID )->SetSpinStyle( spin.
MirrorY() );
1359 SCH_HIERLABEL* sheetPin = getHierarchicalLabel( aNetEleID );
1381 fixNetLabelsAndSheetPins( wireAngle, conn.StartNode );
1390 if( !conn.ConnectionLineCode.IsEmpty() )
1395 m_sheetMap.at( conn.LayerID )->GetScreen()->Append( wire );
1402 fixNetLabelsAndSheetPins( wireAngle, conn.EndNode );
1406 for( std::pair<NETELEMENT_ID, NET_SCH::JUNCTION_SCH> juncPair : net.
Junctions )
1408 NET_SCH::JUNCTION_SCH junc = juncPair.second;
1413 m_sheetMap.at( junc.LayerID )->GetScreen()->Append( kiJunc );
1415 if( junc.HasNetLabel )
1429 m_sheetMap.at( junc.LayerID )->GetScreen()->Append( label );
1440 FIGURE fig = figPair.second;
1451 TEXT txt = textPair.second;
1461 for( std::pair<DOCUMENTATION_SYMBOL_ID, DOCUMENTATION_SYMBOL> docSymPair :
1468 m_reporter->
Report( wxString::Format(
_(
"Documentation Symbol '%s' refers to symbol "
1469 "definition ID '%s' which does not exist in "
1470 "the library. The symbol was not loaded." ),
1483 bool mirrorInvert = docSym.
Mirror;
1485 for( std::pair<FIGURE_ID, FIGURE> figPair : docSymDef.
Figures )
1487 FIGURE fig = figPair.second;
1490 centreOfTransform, mirrorInvert );
1493 for( std::pair<TEXT_ID, TEXT> textPair : docSymDef.
Texts )
1495 TEXT txt = textPair.second;
1497 txt.
Mirror = ( txt.
Mirror ) ? !mirrorInvert : mirrorInvert;
1503 scalingFactor, centreOfTransform, mirrorInvert );
1522 auto findAndReplaceTextField =
1546 std::map<wxString, wxString>& txtVars = pj->
GetTextVars();
1562 wxString varValue = txtvalue.second;
1564 txtVars.insert( { varName, varValue } );
1569 wxString varName = txtvalue.first;
1570 wxString varValue = txtvalue.second;
1572 txtVars.insert( { varName, varValue } );
1577 m_reporter->
Report(
_(
"Text Variables could not be set as there is no project attached." ),
1585 std::unique_ptr<LIB_SYMBOL>& aKiCadSymbol )
1588 LIB_FIELD* existingField = aKiCadSymbol->FindField( aFieldName );
1590 if( existingField !=
nullptr )
1591 return existingField;
1593 int newfieldID = aKiCadSymbol->GetFieldCount();
1595 newfield->
SetName( aFieldName );
1597 aKiCadSymbol->AddField( newfield );
1616 std::unique_ptr<LIB_SYMBOL> kiSym = std::make_unique<LIB_SYMBOL>( csSym.
BuildLibName() );
1617 const int gateNumber = 1;
1620 for( std::pair<FIGURE_ID, FIGURE> figPair : csSym.
Figures )
1622 FIGURE fig = figPair.second;
1638 return getKiCadLibraryPoint( aPt, csSym.Origin );
1651 shape->
SetFillMode( FILL_T::FILLED_WITH_BG_BODYCOLOR );
1653 kiSym->AddDrawItem( shape );
1660 for( std::pair<TERMINAL_ID, TERMINAL> termPair : csSym.
Terminals )
1663 wxString pinNum = wxString::Format(
"%ld", term.
ID );
1664 wxString pinName = wxEmptyString;
1665 std::unique_ptr<LIB_PIN>
pin = std::make_unique<LIB_PIN>( kiSym.get() );
1668 pin->SetType( ELECTRICAL_PINTYPE::PT_PASSIVE );
1671 pin->SetLength( 0 );
1672 pin->SetShape( GRAPHIC_PINSHAPE::LINE );
1673 pin->SetUnit( gateNumber );
1674 pin->SetNumber( pinNum );
1675 pin->SetName( pinName );
1693 pin->SetNumberTextSize( pinNumberHeight );
1694 pin->SetNameTextSize( pinNameHeight );
1696 pinNumToTerminals.insert( {
pin->GetNumber(), term.
ID } );
1697 kiSym->AddDrawItem(
pin.release() );
1705 for( std::pair<TEXT_ID, TEXT> textPair : csSym.
Texts )
1707 TEXT csText = textPair.second;
1709 std::unique_ptr<LIB_TEXT> libtext = std::make_unique<LIB_TEXT>( kiSym.get() );
1710 libtext->SetText( csText.
Text );
1711 libtext->SetUnit( gateNumber );
1713 libtext->SetMultilineAllowed(
true );
1719 if( csText.
Text.Contains(
"\n" ) )
1721 wxArrayString strings;
1723 wxPoint firstLinePos;
1725 for(
size_t ii = 0; ii < strings.size(); ++ii )
1727 BOX2I bbox = libtext->GetTextBox( ii,
true );
1730 RotatePoint( linePos, libtext->GetTextPos(), -libtext->GetTextAngle() );
1733 textLine->
SetText( strings[ii] );
1740 kiSym->AddDrawItem( textLine );
1746 libtext->SetMultilineAllowed(
false );
1747 kiSym->AddDrawItem( libtext.release() );
1769 wxCHECK( partField,
nullptr );
1785 for(
auto& [attributeId, textLocation] : csSym.
TextLocations )
1810 if( attrValue.HasLocation )
1817 m_symDefMap.insert( { aSymdefID, std::move( kiSym ) } );
1824 const PART& aCadstarPart,
1830 std::unique_ptr<LIB_SYMBOL> kiSymDef(
loadSymdef( aSymdefID )->Duplicate() );
1831 wxCHECK( kiSymDef, );
1834 std::unique_ptr<LIB_SYMBOL> tempSymbol( aSymbol );
1842 LIB_PIN*
pin = kiSymDef->GetPin( storedPinNum );
1847 if( pinNum.IsEmpty() )
1849 if( !csPin.Identifier.IsEmpty() )
1850 pinNum = csPin.Identifier;
1852 pinNum = wxString::Format(
"%ld", termID );
1854 pinNum = wxString::Format(
"%ld", csPin.ID );
1858 pin->SetNumber( pinNum );
1859 pin->SetName( pinName );
1861 pinNumMap.insert( { termID, pinNum } );
1872 tempSymbol->GetValueField().SetVisible(
false );
1881 wxString footprintRefName = wxEmptyString;
1882 wxString footprintAlternateName = wxEmptyString;
1889 wxString attributeValue = aAttributeVal.Value;
1890 attributeValue.Replace( wxT(
"\n" ), wxT(
"\\n" ) );
1891 attributeValue.Replace( wxT(
"\r" ), wxT(
"\\r" ) );
1892 attributeValue.Replace( wxT(
"\t" ), wxT(
"\\t" ) );
1898 if( attrName == wxT(
"(PartDefinitionNameStem)" ) )
1901 attributeValue.Replace( wxT(
" " ),
"_" );
1902 tempSymbol->GetReferenceField().SetText( attributeValue );
1905 else if( attrName == wxT(
"(PartDescription)" ) )
1907 tempSymbol->SetDescription( attributeValue );
1910 else if( attrName == wxT(
"(PartDefinitionReferenceName)" ) )
1912 footprintRefName = attributeValue;
1915 else if( attrName == wxT(
"(PartDefinitionAlternateName)" ) )
1917 footprintAlternateName = attributeValue;
1921 bool attrIsNew = tempSymbol->FindField( attrName ) ==
nullptr;
1924 wxASSERT( attrField->
GetName() == attrName );
1925 attrField->
SetText( aAttributeVal.Value );
1926 attrField->
SetUnit( gateNumber );
1928 const ATTRIBUTE_ID& attrid = aAttributeVal.AttributeID;
1931 if( aAttributeVal.HasLocation )
1937 else if( attrIsNew )
1947 loadLibraryField( attrVal );
1951 loadLibraryField( attrVal );
1957 tempSymbol->SetShowPinNames(
false );
1958 tempSymbol->SetShowPinNumbers(
false );
1961 aSymbol = tempSymbol.release();
1966 const wxString& aFootprintName,
1967 const wxString& aFootprintAlternate )
1969 wxString fpNameInLibrary =
generateLibName( aFootprintName, aFootprintAlternate );
1971 if( !fpNameInLibrary.IsEmpty() )
1973 wxArrayString fpFilters;
1974 fpFilters.Add( aFootprintName );
1976 if( !aFootprintAlternate.IsEmpty() )
1977 fpFilters.Add( fpNameInLibrary );
1979 aKiCadSymbol->SetFPFilters( fpFilters );
1982 aKiCadSymbol->GetFootprintField().SetText( libID.
Format() );
1991 int aLineThickness )
1993 const VERTEX* prev = &aCadstarVertices.at( 0 );
1998 for(
size_t i = 1; i < aCadstarVertices.size(); i++ )
2000 cur = &aCadstarVertices.at( i );
2011 centerPoint = ( startPoint + endPoint ) / 2;
2022 shape =
new LIB_SHAPE( aSymbol, SHAPE_T::POLY );
2034 shape =
new LIB_SHAPE( aSymbol, SHAPE_T::ARC );
2041 shape->
SetEnd( startPoint );
2046 shape->
SetEnd( endPoint );
2052 shape->
SetUnit( aGateNumber );
2073 aCadstarAttrLoc.
Mirror );
2100 int compOrientation = 0;
2102 if( aCadstarSymbol.
Mirror )
2104 compAngle = -compAngle;
2105 compOrientation += SYMBOL_ORIENTATION_T::SYM_MIRROR_Y;
2110 EDA_ANGLE test2( aComponentOrientation );
2114 m_reporter->
Report( wxString::Format(
_(
"Symbol '%s' is rotated by an angle of %.1f "
2115 "degrees in the original CADSTAR design but "
2116 "KiCad only supports rotation angles multiples "
2117 "of 90 degrees. The connecting wires will need "
2128 m_reporter->
Report( wxString::Format(
_(
"Symbol '%s' references sheet ID '%s' which does "
2129 "not exist in the design. The symbol was not "
2139 wxString gate = ( aCadstarSymbol.
GateID.IsEmpty() ) ? wxString( wxT(
"A" ) ) : aCadstarSymbol.
GateID;
2140 wxString partGateIndex = aCadstarSymbol.
PartRef.
RefID + gate;
2147 std::map<wxString, LIB_PIN*> pinNumToLibPinMap;
2149 for(
auto& term : termNumMap )
2151 wxString pinNum = term.second;
2152 pinNumToLibPinMap.insert( { pinNum,
2156 auto replacePinNumber =
2157 [&]( wxString aOldPinNum, wxString aNewPinNum )
2159 if( aOldPinNum == aNewPinNum )
2162 LIB_PIN* libpin = pinNumToLibPinMap.at( aOldPinNum );
2167 for(
auto& pinPair : aCadstarSymbol.
PinNumbers )
2169 SYMBOL::PIN_NUM
pin = pinPair.second;
2171 replacePinNumber( termNumMap.at(
pin.TerminalID ),
2172 wxString::Format(
"%ld",
pin.PinNum ) );
2176 for(
auto& pinPair : aCadstarSymbol.
PinNames )
2179 replacePinNumber( termNumMap.at(
pin.TerminalID ),
pin.NameOrLabel );
2209 if( textIsVertical )
2212 alignment =
mirrorX( alignment );
2220 aCadstarAttrLoc.
Mirror );
2227 int compOrientation = SYMBOL_ORIENTATION_T::SYM_ORIENT_0;
2234 compOrientation = SYMBOL_ORIENTATION_T::SYM_ORIENT_0;
2235 aReturnedOrientation =
ANGLE_0;
2239 compOrientation = SYMBOL_ORIENTATION_T::SYM_ORIENT_90;
2244 compOrientation = SYMBOL_ORIENTATION_T::SYM_ORIENT_180;
2249 compOrientation = SYMBOL_ORIENTATION_T::SYM_ORIENT_270;
2253 return compOrientation;
2262 auto logUnknownNetElementError =
2265 m_reporter->
Report( wxString::Format(
_(
"Net %s references unknown net element %s. "
2266 "The net was not properly loaded and may "
2267 "require manual fixing." ),
2276 if( aNetElementID.Contains(
"J" ) )
2279 return logUnknownNetElementError();
2281 return aNet.
Junctions.at( aNetElementID ).Location;
2283 else if( aNetElementID.Contains(
"P" ) )
2286 return logUnknownNetElementError();
2292 return logUnknownNetElementError();
2299 return logUnknownNetElementError();
2305 VECTOR2I pinOffset = libpinPosition - libOrigin;
2309 VECTOR2I pinPosition = symbolOrigin + pinOffset;
2313 pinPosition.
x = ( 2 * symbolOrigin.
x ) - pinPosition.
x;
2318 RotatePoint( pinPosition, symbolOrigin, -adjustedOrientation );
2321 retval.
x = pinPosition.
x;
2322 retval.
y = pinPosition.
y;
2326 else if( aNetElementID.Contains(
"BT" ) )
2329 return logUnknownNetElementError();
2331 return aNet.
BusTerminals.at( aNetElementID ).SecondPoint;
2333 else if( aNetElementID.Contains(
"BLKT" ) )
2336 return logUnknownNetElementError();
2342 return logUnknownNetElementError();
2344 return Schematic.
Blocks.at( blockid ).Terminals.at( termid ).Position;
2346 else if( aNetElementID.Contains(
"D" ) )
2349 return logUnknownNetElementError();
2351 return aNet.
Danglers.at( aNetElementID ).Position;
2355 return logUnknownNetElementError();
2362 wxString netname = aNet.
Name;
2364 if( netname.IsEmpty() )
2365 netname = wxString::Format(
"$%ld", aNet.
SignalNum );
2377 const double& aScalingFactor,
2379 const bool& aMirrorInvert )
2384 const VERTEX* prev = &aCadstarVertices.at( 0 );
2388 "First vertex should always be a point vertex" );
2390 auto pointTransform =
2394 aScalingFactor, aTransformCentre, aMirrorInvert );
2397 for(
size_t ii = 1; ii < aCadstarVertices.size(); ii++ )
2399 cur = &aCadstarVertices.at( ii );
2401 VECTOR2I transformedStartPoint = pointTransform( prev->
End );
2402 VECTOR2I transformedEndPoint = pointTransform( cur->
End );
2424 segment->
SetLayer( aKiCadSchLayerID );
2436 wxFAIL_MSG(
"Unknown CADSTAR Vertex type" );
2446 const LAYER_ID& aCadstarSheetIDOverride,
2450 const double& aScalingFactor,
2452 const bool& aMirrorInvert )
2455 aCadstarSheetIDOverride, aKiCadSchLayerID, aMoveVector, aRotation,
2456 aScalingFactor, aTransformCentre, aMirrorInvert );
2461 aKiCadSchLayerID, aMoveVector, aRotation, aScalingFactor,
2462 aTransformCentre, aMirrorInvert );
2473 "Sheet already loaded!" );
2476 aParentSheet.
Last(),
2492 wxString loadedFilename = wxFileName(
Filename ).GetName();
2493 std::string filename = wxString::Format(
"%s_%02d", loadedFilename, sheetNum ).ToStdString();
2498 filenameField.
SetText( filename );
2505 wxString pageNumStr = wxString::Format(
"%d",
getSheetNumber( aCadstarSheetID ) );
2510 m_sheetMap.insert( { aCadstarSheetID, sheet } );
2520 "FIXME! Parent sheet should be loaded before attempting to load subsheets" );
2524 BLOCK& block = blockPair.second;
2526 if( block.
LayerID == aCadstarSheetID && block.
Type == BLOCK::TYPE::CHILD )
2530 if( block.
Figures.size() > 0 )
2533 "is drawn on sheet '%s' but is not "
2534 "linked to another sheet in the "
2535 "design. KiCad requires all sheet "
2536 "symbols to be associated to a sheet, "
2537 "so the block was not loaded." ),
2549 std::pair<VECTOR2I, VECTOR2I> blockExtents;
2551 if( block.
Figures.size() > 0 )
2557 THROW_IO_ERROR( wxString::Format(
_(
"The CADSTAR schematic might be corrupt: "
2558 "Block %s references a child sheet but has no "
2559 "Figure defined." ),
2572 field.SetVisible(
false );
2619 std::vector<LAYER_ID> childSheets, orphanSheets;
2624 BLOCK& block = blockPair.second;
2627 if( block.
Type == BLOCK::TYPE::CHILD )
2628 childSheets.push_back( assocSheetID );
2634 if( std::find( childSheets.begin(), childSheets.end(), sheetID ) == childSheets.end() )
2635 orphanSheets.push_back( sheetID );
2638 return orphanSheets;
2648 if( sheetID == aCadstarSheetID )
2660 wxCHECK_MSG( aItem, ,
"aItem is null" );
2662 if( aCadstarSheetID ==
"ALL_SHEETS" )
2668 LAYER_ID sheetID = sheetPair.first;
2675 aItem = duplicateItem;
2677 else if( aCadstarSheetID ==
"NO_SHEET" )
2679 wxASSERT_MSG(
false,
2680 "Trying to add an item to NO_SHEET? This might be a documentation symbol." );
2686 m_sheetMap.at( aCadstarSheetID )->GetScreen()->Append( aItem );
2691 wxASSERT_MSG(
false,
"Unknown Sheet ID." );
2699 const wxString& aSymDefAlternate )
2710 wxString refKey = symdef.ReferenceName.Lower();
2711 wxString altKey = symdef.Alternate.Lower();
2723 else if( altKey.IsEmpty() )
2731 wxString refKeyToFind = aSymdefName.Lower();
2732 wxString altKeyToFind = aSymDefAlternate.Lower();
2774 LINE_STYLE::SOLID );
2784 default:
return LINE_STYLE::DEFAULT;
2813 aCadstarAttributeID );
2839CADSTAR_SCH_ARCHIVE_LOADER::PART::DEFINITION::PIN
2843 for( std::pair<PART_DEFINITION_PIN_ID, PART::DEFINITION::PIN> pinPair :
2846 PART::DEFINITION::PIN partPin = pinPair.second;
2848 if( partPin.TerminalGate == aGateID && partPin.TerminalPin == aTerminalID )
2852 return PART::DEFINITION::PIN();
2860 case CADSTAR_PIN_TYPE::UNCOMMITTED:
return ELECTRICAL_PINTYPE::PT_PASSIVE;
2861 case CADSTAR_PIN_TYPE::INPUT:
return ELECTRICAL_PINTYPE::PT_INPUT;
2862 case CADSTAR_PIN_TYPE::OUTPUT_OR:
return ELECTRICAL_PINTYPE::PT_OPENCOLLECTOR;
2863 case CADSTAR_PIN_TYPE::OUTPUT_NOT_OR:
return ELECTRICAL_PINTYPE::PT_OUTPUT;
2864 case CADSTAR_PIN_TYPE::OUTPUT_NOT_NORM_OR:
return ELECTRICAL_PINTYPE::PT_OUTPUT;
2865 case CADSTAR_PIN_TYPE::POWER:
return ELECTRICAL_PINTYPE::PT_POWER_IN;
2866 case CADSTAR_PIN_TYPE::GROUND:
return ELECTRICAL_PINTYPE::PT_POWER_IN;
2867 case CADSTAR_PIN_TYPE::TRISTATE_BIDIR:
return ELECTRICAL_PINTYPE::PT_BIDI;
2868 case CADSTAR_PIN_TYPE::TRISTATE_INPUT:
return ELECTRICAL_PINTYPE::PT_INPUT;
2869 case CADSTAR_PIN_TYPE::TRISTATE_DRIVER:
return ELECTRICAL_PINTYPE::PT_OUTPUT;
2872 return ELECTRICAL_PINTYPE::PT_UNSPECIFIED;
2877 if( aCadstarGateID.IsEmpty() )
2880 return (
int) aCadstarGateID.Upper().GetChar( 0 ) - (int) wxUniChar(
'A' ) + 1;
2923 switch( aCadstarAlignment )
2942 default: wxFAIL_MSG(
"Unknown Cadstar Alignment" );
return aCadstarAlignment;
2950 switch( aCadstarAlignment )
2964 default: wxFAIL_MSG(
"Unknown Cadstar Alignment" );
return aCadstarAlignment;
2974 aKiCadTextItem->
SetText( escapedText );
2985 if( textWidth == 0 )
3005 const long long aCadstarOrientAngle,
3014 ALIGNMENT textAlignment = aCadstarAlignment;
3020 textAlignment =
mirrorX( aCadstarAlignment );
3025 switch( aAlignment )
3080 wxCHECK( textEdaItem, );
3082 switch( textEdaItem->
Type() )
3108 textAlignment =
rotate180( textAlignment );
3112 textAlignment =
rotate180( textAlignment );
3115 wxFAIL_MSG(
"Unknown Quadrant" );
3119 setAlignment( aKiCadTextItem, textAlignment );
3128 setAlignment( aKiCadTextItem, textAlignment );
3130 int off =
static_cast<SCH_TEXT*
>( aKiCadTextItem )->GetTextOffset();
3152 static_cast<SCH_LABEL_BASE*
>( aKiCadTextItem )->SetSpinStyle( spin );
3156 wxFAIL_MSG(
"Unexpected item type" );
3175 aCadstarTextElement.
Mirror );
3182 long long aScalingFactorNumerator,
3183 long long aScalingFactorDenominator )
3187 if( aScalingFactorNumerator == aScalingFactorDenominator )
3191 [&](
int aLength ) ->
int
3193 return( aLength * aScalingFactorNumerator ) / aScalingFactorDenominator;
3199 return VECTOR2I( scaleLen( aCoord.x ), scaleLen( aCoord.y ) );
3205 return VECTOR2I( scaleLen( aSize.x ), scaleLen( aSize.y ) );
3212 switch( item.Type() )
3214 case KICAD_T::LIB_SHAPE_T:
3218 if( shape.
GetShape() == SHAPE_T::ARC )
3224 else if( shape.
GetShape() == SHAPE_T::POLY )
3234 case KICAD_T::LIB_PIN_T:
3238 pin.SetPosition( scalePt(
pin.GetPosition() ) );
3239 pin.SetLength( scaleLen(
pin.GetLength() ) );
3243 case KICAD_T::LIB_TEXT_T:
3279 if( aGateNumber > 0 && shape.
GetUnit() != aGateNumber )
3282 if( shape.
GetShape() != SHAPE_T::POLY )
3292 if( pt0 != pt1 && uniqueSegments.count( pt0 ) == 0 && uniqueSegments.count( pt1 ) == 0 )
3295 if( pt0.
x == pt1.
x || pt0.
y == pt1.
y )
3297 uniqueSegments.insert( { pt0, poly } );
3298 uniqueSegments.insert( { pt1, poly } );
3305 aSymbolToFix->
GetPins( pins, aGateNumber );
3307 for(
auto&
pin : pins )
3309 auto setPinOrientation =
3316 pin->SetOrientation( PIN_ORIENTATION::PIN_RIGHT );
3318 pin->SetOrientation( PIN_ORIENTATION::PIN_UP );
3320 pin->SetOrientation( PIN_ORIENTATION::PIN_LEFT );
3322 pin->SetOrientation( PIN_ORIENTATION::PIN_DOWN );
3325 if( uniqueSegments.count(
pin->GetPosition() ) )
3331 if( otherPt ==
pin->GetPosition() )
3332 otherPt = poly.
CPoint( 1 );
3343std::pair<VECTOR2I, VECTOR2I>
3351 if( upperLeft.
x > v.
End.
x )
3352 upperLeft.
x = v.
End.
x;
3354 if( upperLeft.
y < v.
End.
y )
3355 upperLeft.
y = v.
End.
y;
3357 if( lowerRight.
x < v.
End.
x )
3358 lowerRight.
x = v.
End.
x;
3360 if( lowerRight.
y > v.
End.
y )
3361 lowerRight.
y = v.
End.
y;
3368 if( upperLeft.
x > v.
End.
x )
3369 upperLeft.
x = v.
End.
x;
3371 if( upperLeft.
y < v.
End.
y )
3372 upperLeft.
y = v.
End.
y;
3374 if( lowerRight.
x < v.
End.
x )
3375 lowerRight.
x = v.
End.
x;
3377 if( lowerRight.
y > v.
End.
y )
3378 lowerRight.
y = v.
End.
y;
3385 VECTOR2I size = lowerRightKiCad - upperLeftKiCad;
3387 return { upperLeftKiCad,
VECTOR2I( abs( size.
x ), abs( size.
y ) ) };
3417 const double& aScalingFactor,
3419 const bool& aMirrorInvert )
3423 if( aScalingFactor != 1.0 )
3426 retVal -= aTransformCentre;
3427 retVal.
x =
KiROUND( retVal.
x * aScalingFactor );
3428 retVal.
y =
KiROUND( retVal.
y * aScalingFactor );
3429 retVal += aTransformCentre;
3433 MIRROR( retVal.
x, aTransformCentre.
x );
3435 if( !aRotation.
IsZero() )
3436 RotatePoint( retVal, aTransformCentre, aRotation );
3438 if( aMoveVector !=
VECTOR2I{ 0, 0 } )
3439 retVal += aMoveVector;
3447 return sqrt( ( (
double) aPoint.
x * (
double) aPoint.
x )
3448 + ( (
double) aPoint.
y * (
double) aPoint.
y ) );
constexpr EDA_IU_SCALE schIUScale
constexpr double SCH_IU_PER_MM
CADSTAR_PIN_TYPE
file: cadstar_archive_objects.h Contains common object definitions
#define SYMBOL_NAME_ATTRID
Symbol Name attribute ID - used for placement of designators on the schematic.
#define SIGNALNAME_ORIGIN_ATTRID
#define LINK_ORIGIN_ATTRID
const wxString PartAcceptanceFieldName
const wxString PartNumberFieldName
const wxString PartNameFieldName
const wxString PartVersionFieldName
Loads a csa file into a KiCad SCHEMATIC object.
coord_type GetTop() const
coord_type GetRight() const
coord_type GetLeft() const
const Vec & GetSize() const
coord_type GetBottom() const
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
@ ANTICLOCKWISE_SEMICIRCLE
static wxString EscapeFieldText(const wxString &aFieldText)
@ FRACTIONALGRID
Param1 = Units, Param2 = Divisor.
static const long FONT_BOLD
static const std::map< TEXT_FIELD_NAME, wxString > CADSTAR_TO_KICAD_FIELDS
Map between CADSTAR fields and KiCad text variables.
long TERMINAL_ID
Terminal is the pin identifier in the schematic.
TEXT_FIELD_NAME
These are special fields in text objects enclosed between the tokens '<@' and '>' such as <@[FIELD_NA...
ALIGNMENT
From CADSTAR Help: "Text Alignment enables you to define the position of an alignment origin for all ...
@ NO_ALIGNMENT
NO_ALIGNMENT has different meaning depending on the object type.
static const long UNDEFINED_VALUE
static wxString generateLibName(const wxString &aRefName, const wxString &aAlternateName)
wxString LAYER_ID
ID of a Sheet (if schematic) or board Layer (if PCB)
static void FixTextPositionNoAlignment(EDA_TEXT *aKiCadTextItem)
Corrects the position of a text element that had NO_ALIGNMENT in CADSTAR.
@ OUTLINE
Unfilled closed shape.
@ OPENSHAPE
Unfilled open shape. Cannot have cutouts.
@ SOLID
Filled closed shape (solid fill).
@ HATCHED
Filled closed shape (hatch fill).
static const double TXT_HEIGHT_RATIO
CADSTAR fonts are drawn on a 24x24 integer matrix, where the each axis goes from 0 to 24.
void checkPoint()
Updates m_progressReporter or throws if user cancelled.
static wxString HandleTextOverbar(wxString aCadstarString)
Convert a string with CADSTAR overbar characters to equivalent in KiCad.
JUSTIFICATION
From CADSTAR Help: "Multi Line Text can also be justified as Left, Centre or Right.
PROGRESS_REPORTER * m_progressReporter
bool CheckFileHeader(const std::filesystem::path &aPath) const
CADSTAR_PARTS_LIB_MODEL ReadFile(const std::filesystem::path &aPath) const
void Load(SCHEMATIC *aSchematic, SCH_SHEET *aRootSheet)
Loads a CADSTAR Schematic Archive file into the KiCad SCHEMATIC object given.
ROUTECODE getRouteCode(const ROUTECODE_ID &aCadstarRouteCodeID)
std::map< BLOCK_PIN_ID, SCH_HIERLABEL * > m_sheetPinMap
Cadstar->KiCad Sheet Pins.
const int SMALL_LABEL_SIZE
VECTOR2I applyTransform(const VECTOR2I &aPoint, const VECTOR2I &aMoveVector={ 0, 0 }, const EDA_ANGLE &aRotation=ANGLE_0, const double &aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, const bool &aMirrorInvert=false)
std::map< SYMBOL_ID, SCH_GLOBALLABEL * > m_globalLabelsMap
Cadstar->KiCad Global Labels.
SCH_SYMBOL * loadSchematicSymbol(const SYMBOL &aCadstarSymbol, const LIB_SYMBOL &aKiCadPart, EDA_ANGLE &aComponentOrientation)
void applyTextSettings(EDA_TEXT *aKiCadTextItem, const TEXTCODE_ID &aCadstarTextCodeID, const ALIGNMENT &aCadstarAlignment, const JUSTIFICATION &aCadstarJustification, const long long aCadstarOrientAngle=0, bool aMirrored=false)
wxString getAttributeName(const ATTRIBUTE_ID &aCadstarAttributeID)
std::vector< LIB_SYMBOL * > m_loadedSymbols
Loaded symbols so far.
PART getPart(const PART_ID &aCadstarPartID)
static LIB_FIELD * addNewFieldToSymbol(const wxString &aFieldName, std::unique_ptr< LIB_SYMBOL > &aKiCadSymbol)
std::vector< LAYER_ID > findOrphanSheets()
std::map< BUS_ID, std::shared_ptr< BUS_ALIAS > > m_busesMap
Cadstar->KiCad Buses.
int getSheetNumber(LAYER_ID aCadstarSheetID)
SCH_TEXT * getKiCadSchText(const TEXT &aCadstarTextElement)
std::map< TERMINAL_ID, wxString > TERMINAL_TO_PINNUM_MAP
Map between a terminal ID in a symbol definition to the pin number that should be imported into KiCad...
wxString getNetName(const NET_SCH &aNet)
std::pair< BLOCK_ID, TERMINAL_ID > BLOCK_PIN_ID
std::map< SYMBOL_ID, SCH_SYMBOL * > m_powerSymMap
Cadstar->KiCad Power Symbols.
std::pair< PART_ID, GATE_ID > PART_GATE_ID
void loadLibrarySymbolShapeVertices(const std::vector< VERTEX > &aCadstarVertices, VECTOR2I aSymbolOrigin, LIB_SYMBOL *aSymbol, int aGateNumber, int aLineThickness)
void loadDocumentationSymbols()
VECTOR2I getKiCadLibraryPoint(const VECTOR2I &aCadstarPoint, const VECTOR2I &aCadstarCentre)
PART::DEFINITION::PIN getPartDefinitionPin(const PART &aCadstarPart, const GATE_ID &aGateID, const TERMINAL_ID &aTerminalID)
std::map< wxString, TERMINAL_ID > PINNUM_TO_TERMINAL_MAP
std::map< SYMDEF_ID, PINNUM_TO_TERMINAL_MAP > m_symDefTerminalsMap
int getTextHeightFromTextCode(const TEXTCODE_ID &aCadstarTextCodeID)
double getPolarRadius(const VECTOR2I &aPoint)
void setFootprintOnSymbol(std::unique_ptr< LIB_SYMBOL > &aKiCadSymbol, const wxString &aFootprintName, const wxString &aFootprintAlternate)
void applyTextCodeIfExists(EDA_TEXT *aKiCadTextItem, const TEXTCODE_ID &aCadstarTextCodeID)
void copySymbolItems(std::unique_ptr< LIB_SYMBOL > &aSourceSym, std::unique_ptr< LIB_SYMBOL > &aDestSym, int aDestUnit, bool aOverrideFields=true)
int getLineThickness(const LINECODE_ID &aCadstarLineCodeID)
TEXTCODE getTextCode(const TEXTCODE_ID &aCadstarTextCodeID)
SPIN_STYLE getSpinStyle(const long long &aCadstarOrientation, bool aMirror)
std::map< wxString, LIB_SYMBOL * > m_powerSymLibMap
NetName->KiCad Power Lib Symbol.
std::map< std::pair< wxString, wxString >, SYMDEF_ID > m_SymDefNamesCache
Cache storing symbol names and alternates to symdef IDs.
std::map< PART_ID, TERMINAL_TO_PINNUM_MAP > m_pinNumsMap
Cadstar Part->KiCad Pin number map.
void loadHierarchicalSheetPins()
void loadSheetAndChildSheets(LAYER_ID aCadstarSheetID, const VECTOR2I &aPosition, VECTOR2I aSheetSize, const SCH_SHEET_PATH &aParentSheet)
std::vector< LIB_SYMBOL * > LoadPartsLib(const wxString &aFilename)
ELECTRICAL_PINTYPE getKiCadPinType(const CADSTAR_PIN_TYPE &aPinType)
wxString m_footprintLibName
Name of the footprint library to prepend all footprints with.
void loadItemOntoKiCadSheet(LAYER_ID aCadstarSheetID, SCH_ITEM *aItem)
int getKiCadLength(long long aCadstarLength)
std::map< PART_ID, LIB_SYMBOL * > m_partMap
Cadstar->KiCad Parts.
bool isAttributeVisible(const ATTRIBUTE_ID &aCadstarAttributeID)
VECTOR2I getKiCadPoint(const VECTOR2I &aCadstarPoint)
EDA_ANGLE getAngle(const long long &aCadstarAngle)
const double ARC_ACCURACY
std::map< wxString, SYMDEF_ID > m_DefaultSymDefNamesCache
Cache storing symbol names (default alternate) to symdef IDs.
void loadSymbolGateAndPartFields(const SYMDEF_ID &aSymdefID, const PART &aCadstarPart, const GATE_ID &aGateID, LIB_SYMBOL *aSymbol)
void loadFigure(const FIGURE &aCadstarFigure, const LAYER_ID &aCadstarSheetIDOverride, SCH_LAYER_ID aKiCadSchLayerID, const VECTOR2I &aMoveVector={ 0, 0 }, const EDA_ANGLE &aRotation=ANGLE_0, const double &aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, const bool &aMirrorInvert=false)
std::map< PART_GATE_ID, SYMDEF_ID > m_partSymbolsMap
Map holding the symbols loaded so far for a particular PART_ID and GATE_ID.
void applyToLibraryFieldAttribute(const ATTRIBUTE_LOCATION &aCadstarAttrLoc, VECTOR2I aSymbolOrigin, LIB_FIELD *aKiCadField)
LIB_SYMBOL * getScaledLibPart(const LIB_SYMBOL *aSymbol, long long aScalingFactorNumerator, long long aScalingFactorDenominator)
SYMDEF_ID getSymDefFromName(const wxString &aSymdefName, const wxString &aSymDefAlternate)
std::pair< VECTOR2I, VECTOR2I > getFigureExtentsKiCad(const FIGURE &aCadstarFigure)
std::map< LAYER_ID, SCH_SHEET * > m_sheetMap
Cadstar->KiCad Sheets.
POINT getLocationOfNetElement(const NET_SCH &aNet, const NETELEMENT_ID &aNetElementID)
void fixUpLibraryPins(LIB_SYMBOL *aSymbolToFix, int aGateNumber)
std::map< SYMDEF_ID, std::unique_ptr< const LIB_SYMBOL > > m_symDefMap
Cadstar->KiCad Lib Symbols loaded so far.
std::unique_ptr< LIB_SYMBOL > loadLibPart(const CADSTAR_PART_ENTRY &aPart)
ALIGNMENT rotate180(const ALIGNMENT &aCadstarAlignment)
long long getCadstarAngle(const EDA_ANGLE &aAngle)
LINE_STYLE getLineStyle(const LINECODE_ID &aCadstarLineCodeID)
void loadChildSheets(LAYER_ID aCadstarSheetID, const SCH_SHEET_PATH &aSheet)
VECTOR2I m_designCenter
Required for calculating the offset to apply to the Cadstar design so that it fits in the KiCad canva...
ALIGNMENT mirrorX(const ALIGNMENT &aCadstarAlignment)
int getComponentOrientation(const EDA_ANGLE &aOrientAngle, EDA_ANGLE &aReturnedOrientation)
void loadShapeVertices(const std::vector< VERTEX > &aCadstarVertices, LINECODE_ID aCadstarLineCodeID, LAYER_ID aCadstarSheetID, SCH_LAYER_ID aKiCadSchLayerID, const VECTOR2I &aMoveVector={ 0, 0 }, const EDA_ANGLE &aRotation=ANGLE_0, const double &aScalingFactor=1.0, const VECTOR2I &aTransformCentre={ 0, 0 }, const bool &aMirrorInvert=false)
const LIB_SYMBOL * loadSymdef(const SYMDEF_ID &aSymdefID)
int getKiCadUnitNumberFromGate(const GATE_ID &aCadstarGateID)
void loadSymbolFieldAttribute(const ATTRIBUTE_LOCATION &aCadstarAttrLoc, const EDA_ANGLE &aComponentOrientation, bool aIsMirrored, SCH_FIELD *aKiCadField)
void loadSchematicSymbolInstances()
ASSIGNMENTS_SCM Assignments
CADSTAR_SCHEMATIC Schematic
int KiCadUnitDivider
Use this value to convert units in this CSA file to KiCad units.
PARTNAMECOL SymbolPartNameColor
void Parse()
Parses the file.
A base class for most all the KiCad significant classes used in schematics and boards.
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
KICAD_T Type() const
Returns the type of object.
virtual void SetParent(EDA_ITEM *aParent)
EDA_ITEM * GetParent() const
SHAPE_POLY_SET & GetPolyShape()
void SetPolyShape(const SHAPE_POLY_SET &aShape)
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
void SetStart(const VECTOR2I &aStart)
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
void SetEnd(const VECTOR2I &aEnd)
void SetArcGeometry(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Set the three controlling points for an arc.
void SetFillMode(FILL_T aFill)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
int GetTextHeight() const
void SetTextSize(VECTOR2I aNewSize)
const EDA_ANGLE & GetTextAngle() const
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetTextPos(const VECTOR2I &aPoint)
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
void SetTextWidth(int aWidth)
virtual void SetVisible(bool aVisible)
void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
void SetTextHeight(int aHeight)
virtual void SetText(const wxString &aText)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
int GetTextThickness() const
void SetItalic(bool aItalic)
void SetMultilineAllowed(bool aAllow)
VECTOR2I GetTextSize() const
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
iterator end()
Returns a read/write iterator that points to one past the last element in the EE_RTREE.
iterator begin()
Returns a read/write iterator that points to the first element in the EE_RTREE N.B.
Field object used in symbol libraries.
void SetName(const wxString &aName)
Set a user definable field name to aName.
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
A logical library item identifier and consists of various portions much like a URI.
int SetLibItemName(const UTF8 &aLibItemName)
Override the library item name portion of the LIB_ID to aLibItemName.
The base class for drawable items used by schematic library symbols.
void SetPosition(const VECTOR2I &aPosition) override
void SetNumber(const wxString &aNumber)
void SetStroke(const STROKE_PARAMS &aStroke)
void AddPoint(const VECTOR2I &aPosition)
void SetPosition(const VECTOR2I &aPosition) override
VECTOR2I GetPosition() const override
Define a library symbol object.
void SetShowPinNames(bool aShow)
Set or clear the pin name visibility flag.
LIB_FIELD & GetReferenceField()
Return reference to the reference designator field.
void SetUnitCount(int aCount, bool aDuplicateDrawItems=true)
Set the units per symbol count.
void SetShowPinNumbers(bool aShow)
Set or clear the pin number visibility flag.
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
wxString GetName() const override
void AddDrawItem(LIB_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
LIB_FIELD & GetValueField()
Return reference to the value field.
std::vector< LIB_PIN * > GetAllLibPins() const
Return a list of pin pointers for all units / converts.
void GetPins(LIB_PINS &aList, int aUnit=0, int aConvert=0) const
Return a list of pin object pointers from the draw item list.
virtual void SetName(const wxString &aName)
Define a symbol library graphical text item.
VECTOR2I GetPosition() const override
ITERATOR_BASE< LIB_ITEM, MULTIVECTOR< LIB_ITEM, FIRST_TYPE_VAL, LAST_TYPE_VAL >, typename ITEM_PTR_VECTOR::iterator > ITERATOR
The const iterator.
ITERATOR end(int aType=UNDEFINED_TYPE)
ITERATOR begin(int aType=UNDEFINED_TYPE)
Describe the page size and margins of a paper page on which to eventually print or plot.
void SetHeightMils(double aHeightInMils)
const VECTOR2D GetSizeIU(double aIUScale) const
Gets the page size in internal units.
void SetWidthMils(double aWidthInMils)
virtual void SetNumPhases(int aNumPhases)=0
Set the number of phases.
virtual void BeginPhase(int aPhase)=0
Initialize the aPhase virtual zone of the dialog progress bar.
virtual void SetMaxProgress(int aMaxProgress)=0
Fix the value that gives the 100 percent progress bar length (inside the current virtual zone).
Container for project specific data.
virtual const wxString GetProjectPath() const
Return the full path of the project.
virtual std::map< wxString, wxString > & GetTextVars() const
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)=0
Report a string with a given severity.
Holds all the data relating to one schematic.
PROJECT & Prj() const override
Return a reference to the project this schematic is part of.
void SetSize(const VECTOR2I &aSize)
Class for a wire to bus entry.
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
void SetPosition(const VECTOR2I &aPosition) override
void SetText(const wxString &aText) override
void SetSpinStyle(SPIN_STYLE aSpinStyle) override
void SetSpinStyle(SPIN_STYLE aSpinStyle) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
void SetLayer(SCH_LAYER_ID aLayer)
Set the layer this item is on.
SCH_ITEM * Duplicate(bool doClone=false) const
Routine to create a new copy of given item.
void SetPosition(const VECTOR2I &aPosition) override
void SetShape(LABEL_FLAG_SHAPE aShape)
void SetPosition(const VECTOR2I &aPosition) override
void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual) override
virtual void SetSpinStyle(SPIN_STYLE aSpinStyle)
Segment description base class to describe items which have 2 end points (track, wire,...
void SetStartPoint(const VECTOR2I &aPosition)
void SetLineWidth(const int aSize)
VECTOR2I GetEndPoint() const
VECTOR2I GetStartPoint() const
void SetLineStyle(const LINE_STYLE aStyle)
void SetEndPoint(const VECTOR2I &aPosition)
const PAGE_INFO & GetPageSettings() const
void Append(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
void AddBusAlias(std::shared_ptr< BUS_ALIAS > aAlias)
Add a bus alias definition (and transfers ownership of the pointer).
void SetPageSettings(const PAGE_INFO &aPageSettings)
EE_RTREE & Items()
Gets the full RTree, usually for iterating.
void SetFileName(const wxString &aFileName)
Set the file name for this screen to aFileName.
void Update(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Update aItem's bounding box in the tree.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void AddPin(SCH_SHEET_PIN *aSheetPin)
Add aSheetPin to the sheet.
std::vector< SCH_FIELD > & GetFields()
bool LocatePathOfScreen(SCH_SCREEN *aScreen, SCH_SHEET_PATH *aList)
Search the existing hierarchy for an instance of screen loaded from aFileName.
SCH_SCREEN * GetScreen() const
VECTOR2I GetPosition() const override
void SetFields(const std::vector< SCH_FIELD > &aFields)
Set multiple schematic fields.
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual) override
static bool ClassOf(const EDA_ITEM *aItem)
void SetPosition(const VECTOR2I &aPosition) override
int GetFieldCount() const
Return the number of fields in this symbol.
SCH_FIELD * FindField(const wxString &aFieldName, bool aIncludeDefaultFields=true, bool aCaseInsensitive=false)
Search for a SCH_FIELD with aFieldName.
SCH_FIELD * GetField(MANDATORY_FIELD_T aFieldType)
Return a mandatory field in this symbol.
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
void SetOrientation(int aOrientation)
Compute the new transform matrix based on aOrientation for the symbol which is applied to the current...
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
BOX2I GetBodyAndPinsBoundingBox() const
Return a bounding box for the symbol body and pins but not the fields.
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly)
Populate a std::vector with SCH_FIELDs.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
VECTOR2I GetPosition() const override
void SetPosition(const VECTOR2I &aPosition) override
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
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...
const SHAPE_LINE_CHAIN Reverse() const
Reverse point order in the line chain.
void SetPoint(int aIndex, const VECTOR2I &aPos)
Move a point to a specific location.
int FindSegment(const VECTOR2I &aP, int aThreshold=1) const
Search for segment containing point aP.
int Intersect(const SEG &aSeg, INTERSECTIONS &aIp) const
Find all intersection points between our line chain and the segment aSeg.
void Replace(int aStartIndex, int aEndIndex, const VECTOR2I &aP)
Replace points with indices in range [start_index, end_index] with a single point aP.
virtual size_t GetPointCount() const override
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
const VECTOR2I NearestPoint(const VECTOR2I &aP, bool aAllowInternalShapePoints=true) const
Find a point on the line chain that is closest to point aP.
std::vector< INTERSECTION > INTERSECTIONS
const std::vector< VECTOR2I > & CPoints() const
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
SPIN_STYLE MirrorX()
Mirror the label spin style across the X axis or simply swaps up and bottom.
SPIN_STYLE MirrorY()
Mirror the label spin style across the Y axis or simply swaps left and right.
Simple container to manage line stroke parameters.
T EuclideanNorm() const
Compute the Euclidean norm of the vector, which is defined as sqrt(x ** 2 + y ** 2).
#define DEFAULT_WIRE_WIDTH_MILS
The default bus width in mils. (can be changed in preference menu)
static constexpr EDA_ANGLE & ANGLE_180
static constexpr EDA_ANGLE & ANGLE_HORIZONTAL
static constexpr EDA_ANGLE & ANGLE_VERTICAL
static constexpr EDA_ANGLE & ANGLE_45
static constexpr EDA_ANGLE & ANGLE_90
static constexpr EDA_ANGLE & ANGLE_0
static constexpr EDA_ANGLE & ANGLE_270
static constexpr EDA_ANGLE & ANGLE_135
const std::string KiCadSchematicFileExtension
#define THROW_IO_ERROR(msg)
SCH_LAYER_ID
Eeschema drawing layers.
std::vector< LIB_PIN * > LIB_PINS
Helper for defining a list of pin object pointers.
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
ELECTRICAL_PINTYPE
The symbol library pin object electrical types used in ERC tests.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
std::vector< SCH_FIELD > SCH_FIELDS
A container for several SCH_FIELD items.
#define SIM_DEVICE_TYPE_FIELD
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
bool ReplaceIllegalFileNameChars(std::string *aName, int aReplaceChar)
Checks aName for illegal file name characters.
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
LINE_STYLE
Dashed line types.
std::map< ATTRIBUTE_ID, ATTRCOL > AttributeColors
JUSTIFICATION Justification
Note: Justification has no effect on single lines of text.
ALIGNMENT Alignment
In CADSTAR The default alignment for a TEXT object (when "(No Alignment()" is selected) Bottom Left o...
ATTRIBUTE_LOCATION AttributeLocation
bool HasLocation
Flag to know if this ATTRIBUTE_VALUE has a location i.e.
std::map< LINECODE_ID, LINECODE > LineCodes
std::map< ATTRIBUTE_ID, ATTRNAME > AttributeNames
std::map< ROUTECODE_ID, ROUTECODE > RouteCodes
std::map< TEXTCODE_ID, TEXTCODE > TextCodes
Represents a cutout in a closed shape (e.g.
std::vector< VERTEX > Vertices
long ScaleRatioNumerator
Documentation symbols can be arbitrarily scaled when added to a design.
long ScaleRatioDenominator
Documentation symbols can be arbitrarily scaled when added to a design.
POINT Origin
Origin of the component (this is used as the reference point when placing the component in the design...
LAYER_ID LayerID
Move all objects in the Symdef to this layer.
DOCUMENTATION_SYMBOL_ID ID
SYMDEF_ID SymdefID
Normally documentation symbols only have TEXT, FIGURE and TEXT_LOCATION objects which are all drawn o...
long Modifier1
It seems this is related to weight. 400=Normal, 700=Bold.
GRID ScreenGrid
From CADSTAR Help: "There is one Screen Grid, which is visible as dots on the screen.
long Param1
Either Units or X step, depending on Type (see GRID_TYPE for more details)
long Param2
Either Divisor or Y step, depending on Type (see GRID_TYPE for more details)
wxString Name
This is undefined (wxEmptyString) if the net is unnamed.
long SignalNum
This is undefined if the net has been given a name.
std::map< TEXT_FIELD_NAME, wxString > TextFieldToValuesMap
Values for the text field elements used in the CADSTAR design extracted from the text element instanc...
std::map< wxString, wxString > FilenamesToTextMap
CADSTAR doesn't have user defined text fields but does allow loading text from a file.
std::set< TEXT_FIELD_NAME > InconsistentTextFields
Text fields need to be updated in CADSTAR and it is possible that they are not consistent across text...
std::map< PART_ID, PART > PartDefinitions
bool HidePinNames
Specifies whether to display the pin names/identifier in the schematic symbol or not.
std::map< GATE_ID, GATE > GateSymbols
std::map< ATTRIBUTE_ID, ATTRIBUTE_VALUE > AttributeValues
Some attributes are defined within the part definition, whilst others are defined in the part.
std::map< PART_DEFINITION_PIN_ID, PIN > Pins
std::map< ATTRIBUTE_ID, ATTRIBUTE_VALUE > AttributeValues
Some attributes are defined within the part definition, whilst others are defined in the part itself.
Represents a point in x,y coordinates.
SHAPE_POLY_SET ConvertToPolySet(const std::function< VECTOR2I(const VECTOR2I &)> aCadstarToKicadPointCallback, double aAccuracy) const
std::vector< VERTEX > Vertices
std::vector< CUTOUT > Cutouts
Not Applicable to OPENSHAPE Type.
std::map< FIGURE_ID, FIGURE > Figures
std::map< ATTRIBUTE_ID, TEXT_LOCATION > TextLocations
This contains location of any attributes, including designator position.
POINT Origin
Origin of the component (this is used as the reference point when placing the component in the design...
wxString Alternate
This is in addition to ReferenceName.
std::map< TEXT_ID, TEXT > Texts
std::map< ATTRIBUTE_ID, ATTRIBUTE_VALUE > AttributeValues
These attributes might also have a location.
wxString BuildLibName() const
long Width
Defaults to 0 if using system fonts or, if using CADSTAR font, default to equal height (1:1 aspect ra...
Corresponds to CADSTAR "origin".
ALIGNMENT Alignment
In CADSTAR The default alignment for a TEXT object (when "(No Alignment()" is selected) Bottom Left o...
JUSTIFICATION Justification
Note: Justification has no effect on single lines of text.
std::map< VARIANT_ID, VARIANT > Variants
< Nodename = "VARIANT" or "VMASTER" (master variant
Represents a vertex in a shape.
SHAPE_ARC BuildArc(const VECTOR2I &aPrevPoint, const std::function< VECTOR2I(const VECTOR2I &)> aCadstarToKicadPointCallback) const
CADSTAR Parts Library (*.lib) model - a data structure describing the contents of the file format.
std::vector< CADSTAR_PART_ENTRY > m_PartEntries
std::string m_ComponentStem
std::map< std::string, std::vector< CADSTAR_PART_PIN > > m_HiddenPins
Pins with an implied electrical connection to a net, not part of any symbol (Note: we probably will n...
std::map< std::string, CADSTAR_ATTRIBUTE_VALUE > m_SchAttributes
Dollar sign ($) line $[!]<SCM Attribute name>(<Attribute value>) Attributes related to the schematic ...
std::map< std::string, CADSTAR_ATTRIBUTE_VALUE > m_SchAndPcbAttributes
At symbol (@) line [@[!]<SCM/PCB Attribute name>(<Attribute value>)] Attributes related to the PCB co...
std::vector< CADSTAR_PART_SYMBOL_ENTRY > m_Symbols
Symbols that form this part.
std::map< std::string, std::string > m_UserAttributes
Star (*) line *<User-defined name> This line is ignored by CADSTAR.
std::map< long, std::string > m_PinNamesMap
Map of pin identifiers to alphanumeric pin names Pin names can be a maximum of 10 characters (Typical...
std::optional< std::string > m_AcceptancePartName
std::optional< std::string > m_Pcb_alternate
std::optional< std::string > m_Version
std::optional< std::string > m_Description
std::optional< std::string > m_Number
std::string m_Pcb_component
std::optional< std::string > m_SpiceModel
std::map< std::string, CADSTAR_ATTRIBUTE_VALUE > m_PcbAttributes
Percentage sign (%) line %[!]<PCB Attribute name>(<Attribute value>) Attributes related to the PCB co...
std::optional< std::string > m_Value
std::map< std::string, CADSTAR_ATTRIBUTE_VALUE > m_PartAttributes
Tilde (~) line ~[!]<Parts Library Attribute Name>(<Attribute Value>) Attributes related to the Part i...
std::map< long, std::string > m_PinLabelsMap
Map of pin identifiers to alphanumeric pin labels.
std::vector< CADSTAR_PART_PIN > m_Pins
std::optional< std::string > m_SymbolAlternateName
TYPE Type
Determines what the associated layer is, whether parent, child or clone.
ATTRIBUTE_LOCATION BlockLabel
LAYER_ID LayerID
The sheet block is on (TODO: verify this is true)
LAYER_ID AssocLayerID
Parent or Child linked sheet.
std::map< TERMINAL_ID, TERMINAL > Terminals
std::map< FIGURE_ID, FIGURE > Figures
LAYER_ID LayerID
Sheet on which bus is located.
std::map< SYMBOL_ID, SYMBOL > Symbols
std::map< REUSEBLOCK_ID, REUSEBLOCK > ReuseBlocks
VARIANT_HIERARCHY VariantHierarchy
std::map< DOCUMENTATION_SYMBOL_ID, DOCUMENTATION_SYMBOL > DocumentationSymbols
std::map< FIGURE_ID, FIGURE > Figures
std::map< TEXT_ID, TEXT > Texts
std::map< BLOCK_ID, BLOCK > Blocks
std::map< BUS_ID, BUS > Buses
std::map< GROUP_ID, GROUP > Groups
std::map< NET_ID, NET_SCH > Nets
ATTRIBUTE_LOCATION AttrLoc
std::map< SYMDEF_ID, SYMDEF_SCM > SymbolDefinitions
std::map< NETELEMENT_ID, DANGLER > Danglers
std::map< NETELEMENT_ID, SYM_TERM > Terminals
std::vector< CONNECTION_SCH > Connections
std::map< NETELEMENT_ID, BUS_TERM > BusTerminals
std::map< NETELEMENT_ID, BLOCK_TERM > BlockTerminals
std::map< NETELEMENT_ID, JUNCTION_SCH > Junctions
ATTRIBUTE_LOCATION AttrLoc
std::vector< LAYER_ID > SheetOrder
A vector to also store the order in which sheets are to be displayed.
std::map< LAYER_ID, SHEET_NAME > SheetNames
LAYER_ID LayerID
Sheet on which symbol is located.
SYMBOL_ID VariantParentSymbolID
std::map< ATTRIBUTE_ID, ATTRIBUTE_VALUE > AttributeValues
GATE_ID GateID
The gate this symbol represents within the associated Part.
long ScaleRatioNumerator
Symbols can be arbitrarily scaled in CADSTAR.
std::map< TERMINAL_ID, SYMPINNAME_LABEL > PinNames
Identifier of the pin in the PCB Equivalent to KiCad's Pin Number.
std::map< TERMINAL_ID, PIN_NUM > PinNumbers
This seems to only appear in older designs and is similar to PinNames but only allowing numerical val...
long ScaleRatioDenominator
SYMBOLVARIANT SymbolVariant
std::map< TERMINAL_ID, PIN_NUM_LABEL_LOC > PinLabelLocations
std::map< TERMINAL_ID, PIN_NUM_LABEL_LOC > PinNumberLocations
std::map< TERMINAL_ID, TERMINAL > Terminals
POINT Position
Pad position within the component's coordinate frame.
constexpr int IUToMils(int iu) const
constexpr int MilsToIU(int mils) const
@ VALUE_FIELD
Field Value of part, i.e. "3.3K".
@ REFERENCE_FIELD
Field Reference of part, i.e. "IC21".
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
int LexicographicalCompare(const VECTOR2< T > &aA, const VECTOR2< T > &aB)
Definition of file extensions used in Kicad.