58 std::string ret =
TO_UTF8( txt );
62 if( (
unsigned char) c <=
' ' )
88 std::unique_ptr< LIB_SYMBOL > part;
117 SCH_SYMBOL( aSymbol, aSel.LibId, aSheet, aSel.Unit, aSel.
Convert, aPosition, aParent )
120 for(
const std::pair<int, wxString>& i : aSel.
Fields )
123 SetRef( aSheet, i.second );
125 field->SetText( i.second );
150 field.SetParent(
this );
155 for(
const std::unique_ptr<SCH_PIN>&
pin : aSymbol.
m_pins )
157 m_pins.emplace_back( std::make_unique<SCH_PIN>( *
pin ) );
158 m_pins.back()->SetParent(
this );
223 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
225 if( ( (
pin->GetPosition().x -
m_pos.
x ) % min_grid_size ) != 0 )
228 if( ( (
pin->GetPosition().y -
m_pos.
y ) % min_grid_size ) != 0 )
253 wxCHECK2( !aLibSymbol || aLibSymbol->
IsRoot(), aLibSymbol =
nullptr );
255 m_part.reset( aLibSymbol );
263 return m_part->GetDescription();
265 return wxEmptyString;
272 return m_part->GetKeyWords();
274 return wxEmptyString;
281 return m_part->GetDatasheetField().GetText();
283 return wxEmptyString;
289 std::map<wxString, wxString> altPinMap;
290 std::map<wxString, std::set<SCH_PIN*>> pinUuidMap;
291 std::set<SCH_PIN*> unassignedSchPins;
292 std::set<SCH_PIN*> unassignedLibPins;
294 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
296 pinUuidMap[
pin->GetNumber() ].insert(
pin.get() );
298 unassignedSchPins.insert(
pin.get() );
300 if( !
pin->GetAlt().IsEmpty() )
301 altPinMap[
pin->GetNumber() ] =
pin->GetAlt();
303 pin->SetLibPin(
nullptr );
320 auto ii = pinUuidMap.find( libPin->GetNumber() );
322 if( ii == pinUuidMap.end() || ii->second.empty() )
324 unassignedLibPins.insert( libPin );
328 auto it = ii->second.begin();
330 ii->second.erase( it );
331 pin->SetLibPin( libPin );
332 pin->SetPosition( libPin->GetPosition() );
334 unassignedSchPins.erase(
pin );
336 auto iii = altPinMap.find( libPin->GetNumber() );
338 if( iii != altPinMap.end() )
339 pin->SetAlt( iii->second );
345 for(
SCH_PIN* libPin : unassignedLibPins )
350 if( !unassignedSchPins.empty() )
352 auto it = unassignedSchPins.begin();
354 unassignedSchPins.erase( it );
359 pin =
m_pins.emplace_back( std::make_unique<SCH_PIN>(
SCH_PIN(
this, libPin ) ) ).get();
363 pin->SetLibPin( libPin );
364 pin->SetPosition( libPin->GetPosition() );
365 pin->SetNumber( libPin->GetNumber() );
367 auto iii = altPinMap.find( libPin->GetNumber() );
369 if( iii != altPinMap.end() )
370 pin->SetAlt( iii->second );
374 for(
auto it1 =
m_pins.begin(); it1 !=
m_pins.end() && !unassignedSchPins.empty(); )
376 auto it2 = unassignedSchPins.find( it1->get() );
378 if( it2 != unassignedSchPins.end() )
380 it1 =
m_pins.erase( it1 );
381 unassignedSchPins.erase( it2 );
392 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
428 return m_part->HasAlternateBodyStyle();
437 return m_part->GetUnitCount();
447 return m_part->GetUnitDisplayName( aUnit );
455 return m_part->HasUnitDisplayName( aUnit );
460 const VECTOR2I& aOffset,
bool aDimmed )
477 const VECTOR2I& aOffset,
bool aForceNoFill,
bool aDimmed )
494 for(
unsigned i = 0; i < tempPins.size(); ++ i )
497 SCH_PIN* tempPin = tempPins[ i ];
511 text->SetText(
dummy.GetShownText(
false ) );
525 field.Print( &localRenderSettings,
m_unit,
m_bodyStyle, aOffset, aForceNoFill, aDimmed );
534 std::max( bbox.
GetY() - pins.
GetY(),
537 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
538 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
554 const KIID_PATH& aSheetPath,
bool aTestFromEnd )
const
560 if( instance.m_Path == aSheetPath )
562 aInstance = instance;
566 else if( instance.m_Path.EndsWith( aSheetPath ) )
568 aInstance = instance;
592 " reference %s, unit %d from symbol %s." ),
614 " reference %s, unit %d from symbol %s." ),
655 std::vector<SCH_SYMBOL_INSTANCE>::iterator resultIt;
660 [searchPath](
const auto& it )
662 return it.m_Path == searchPath;
669 " reference %s, unit %d from symbol %s." ),
671 resultIt->m_Reference,
713 if( instance.m_Path ==
path )
715 ref = instance.m_Reference;
755 if( instance.m_Path ==
path )
758 instance.m_Reference = ref;
766 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
767 pin->ClearDefaultNetName( sheet );
789 if( instance.m_Path ==
path )
790 return instance.m_Reference.Last() !=
'?';
801 refDesignator.Replace(
"~",
" " );
803 wxString prefix = refDesignator;
805 while( prefix.Length() )
807 wxUniCharRef last = prefix.Last();
809 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
817 prefix.Trim(
false );
819 if( !prefix.IsEmpty() )
827 return schematic->Settings().SubReference( aUnit, aAddSeparator );
839 if( instance.m_Path ==
path )
840 return instance.m_Unit;
856 if( instance.m_Path ==
path )
858 instance.m_Unit = aUnitSelection;
871 instance.m_Unit = aUnitSelection;
876 bool aAllowExtraText )
const
892 bool aAllowExtraText )
const
923 if( field.GetId() == aFieldId )
935 if( field.GetName() == aFieldName )
947 if( field.GetName() == aFieldName )
961 if( !field.IsVisible() || field.GetText().IsEmpty() )
965 aVector.push_back( &field );
979 for(
unsigned ii = 0; ii <
m_fields.size(); ++ii )
984 if( aFieldName ==
m_fields[ii].GetName(
false ) )
994 bool aCaseInsensitive )
998 if( field.IsMandatory() && !aIncludeDefaultFields )
1001 if( aCaseInsensitive )
1003 if( aFieldName.Upper() == field.GetName(
false ).Upper() )
1008 if( aFieldName == field.GetName(
false ) )
1018 bool aUpdateOtherFields,
bool aResetRef,
bool aResetOtherFields )
1022 std::vector<SCH_FIELD*> fields;
1023 m_part->GetFields( fields );
1025 for(
const SCH_FIELD* libField : fields )
1027 int id = libField->GetId();
1030 if( libField->IsMandatory() )
1036 schField =
FindField( libField->GetCanonicalName() );
1041 libField->GetCanonicalName() );
1046 schField->
SetPrivate( libField->IsPrivate() );
1057 SetRef( aPath,
m_part->GetReferenceField().GetText() );
1058 else if( aUpdateRef )
1059 SetRef( aPath, libField->GetText() );
1067 if( aResetOtherFields || aUpdateOtherFields )
1072 if( aResetOtherFields )
1074 else if( aUpdateOtherFields )
1075 schField->
SetText( libField->GetText() );
1079 if( aResetOtherFields || aUpdateOtherFields )
1080 schField->
SetText( libField->GetText() );
1090 bool updateValue =
true;
1091 bool updateExclFromBOM =
true;
1092 bool updateExclFromBoard =
true;
1093 bool updateDNP =
true;
1094 bool updateOtherFields =
true;
1095 bool updatePins =
true;
1099 updateValue = aProperty->
Name() ==
_HKI(
"Value" );
1100 updateExclFromBoard = aProperty->
Name() ==
_HKI(
"Exclude From Board" );
1101 updateExclFromBOM = aProperty->
Name() ==
_HKI(
"Exclude From Bill of Materials" );
1102 updateDNP = aProperty->
Name() ==
_HKI(
"Do not Populate" );
1103 updateOtherFields =
false;
1108 && !updateExclFromBOM
1109 && !updateExclFromBoard
1111 && !updateOtherFields
1121 wxString ref =
GetRef( &aSourceSheet );
1126 std::vector<SCH_SYMBOL*> otherUnits;
1132 aCommit.
Modify( otherUnit, screen );
1137 if( updateOtherFields )
1155 newField.
Offset( otherUnit->GetPosition() );
1158 otherUnit->AddField( newField );
1162 for(
size_t ii = otherUnit->GetFields().size() - 1; ii >
DATASHEET_FIELD; ii-- )
1164 SCH_FIELD& otherField = otherUnit->GetFields().at( ii );
1167 otherUnit->GetFields().erase( otherUnit->GetFields().begin() + ii );
1171 if( updateExclFromBOM )
1174 if( updateExclFromBoard )
1178 otherUnit->SetDNP(
m_DNP );
1182 for(
const std::unique_ptr<SCH_PIN>& model_pin :
m_pins )
1184 SCH_PIN* src_pin = otherUnit->GetPin( model_pin->GetNumber() );
1187 src_pin->
SetAlt( model_pin->GetAlt() );
1198 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1199 aFunction(
pin.get() );
1202 aFunction( &field );
1208 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1210 if(
pin->GetNumber() == aNumber )
1220 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1222 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
1224 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
1227 if( pin_unit > 0 && pin_unit !=
GetUnit() )
1230 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
1233 if(
pin->IsPointClickableAnchor( aPos ) )
1246 return std::vector<SCH_PIN*>();
1253 return m_part->GetPins();
1255 return std::vector<SCH_PIN*>();
1267 auto it =
m_pinMap.find( aLibPin );
1272 wxFAIL_MSG_AT(
"Pin not found", __FILE__, __LINE__, __FUNCTION__ );
1279 std::vector<SCH_PIN*> pins;
1281 if( aSheet ==
nullptr )
1283 wxCHECK_MSG(
Schematic(), pins,
"Can't call GetPins on a symbol with no schematic" );
1290 for(
const std::unique_ptr<SCH_PIN>& p :
m_pins )
1292 if( unit && p->GetLibPin() && p->GetLibPin()->GetUnit()
1293 && ( p->GetLibPin()->GetUnit() != unit ) )
1298 pins.push_back( p.get() );
1316 wxT(
"Cannot swap data with invalid symbol." ) );
1324 for( std::unique_ptr<SCH_PIN>&
pin : symbol->
m_pins )
1325 pin->SetParent( symbol );
1327 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1328 pin->SetParent(
this );
1333 m_part.reset( libSymbol );
1367 if( field.IsPrivate() )
1370 if( field.IsMandatory() )
1371 aVars->push_back( field.GetCanonicalName().Upper() );
1373 aVars->push_back( field.GetName() );
1376 aVars->push_back( wxT(
"OP" ) );
1377 aVars->push_back( wxT(
"FOOTPRINT_LIBRARY" ) );
1378 aVars->push_back( wxT(
"FOOTPRINT_NAME" ) );
1379 aVars->push_back( wxT(
"UNIT" ) );
1380 aVars->push_back( wxT(
"SHORT_REFERENCE" ) );
1381 aVars->push_back( wxT(
"SYMBOL_LIBRARY" ) );
1382 aVars->push_back( wxT(
"SYMBOL_NAME" ) );
1383 aVars->push_back( wxT(
"SYMBOL_DESCRIPTION" ) );
1384 aVars->push_back( wxT(
"SYMBOL_KEYWORDS" ) );
1385 aVars->push_back( wxT(
"EXCLUDE_FROM_BOM" ) );
1386 aVars->push_back( wxT(
"EXCLUDE_FROM_BOARD" ) );
1387 aVars->push_back( wxT(
"EXCLUDE_FROM_SIM" ) );
1388 aVars->push_back( wxT(
"DNP" ) );
1389 aVars->push_back( wxT(
"SHORT_NET_NAME(<pin_number>)" ) );
1390 aVars->push_back( wxT(
"NET_NAME(<pin_number>)" ) );
1391 aVars->push_back( wxT(
"NET_CLASS(<pin_number>)" ) );
1392 aVars->push_back( wxT(
"PIN_NAME(<pin_number>)" ) );
1398 static wxRegEx operatingPoint( wxT(
"^"
1401 "(.([0-9])?([a-zA-Z]*))?"
1404 wxCHECK( aPath,
false );
1411 if( operatingPoint.Matches( *token ) )
1413 wxString
pin( operatingPoint.GetMatch( *token, 1 ).Lower() );
1414 wxString precisionStr( operatingPoint.GetMatch( *token, 3 ) );
1415 wxString range( operatingPoint.GetMatch( *token, 4 ) );
1418 if( !precisionStr.IsEmpty() )
1419 precision = precisionStr[0] -
'0';
1421 if( range.IsEmpty() )
1422 range = wxS(
"~A" );
1432 spiceRef = spiceRef.Lower();
1439 else if(
pin == wxS(
":power" ) )
1441 if( range.IsEmpty() )
1442 range = wxS(
"~W" );
1444 *token = schematic->
GetOperatingPoint( spiceRef + wxS(
":power" ), precision, range );
1449 pin =
pin.SubString( 1, -1 );
1451 for(
const std::reference_wrapper<const SIM_MODEL_PIN>& modelPin : model.
GetPins() )
1453 SCH_PIN* symbolPin =
GetPin( modelPin.get().symbolPinNumber );
1457 if( model.
GetPins().size() == 2 )
1463 wxString signalName = spiceRef + wxS(
":" ) + modelPin.get().modelPinName;
1472 *token = wxS(
"?" );
1476 if( token->Contains(
':' ) )
1482 wxString upperToken = token->Upper();
1486 wxString fieldName = field.IsMandatory() ? field.GetCanonicalName()
1489 wxString textToken = field.GetText();
1490 textToken.Replace(
" ", wxEmptyString );
1491 wxString tokenString =
"${" + fieldName +
"}";
1494 if( textToken.IsSameAs( tokenString,
false ) )
1497 if( token->IsSameAs( fieldName,
false ) )
1500 *token =
GetRef( aPath,
true );
1502 *token = field.GetShownText( aPath,
false, aDepth + 1 );
1509 if( token->IsSameAs( wxT(
"SIM.DEVICE" ) )
1510 || token->IsSameAs( wxT(
"SIM.TYPE" ) )
1511 || token->IsSameAs( wxT(
"SIM.PINS" ) )
1512 || token->IsSameAs( wxT(
"SIM.PARAMS" ) )
1513 || token->IsSameAs( wxT(
"SIM.LIBRARY" ) )
1514 || token->IsSameAs( wxT(
"SIM.NAME" ) ) )
1516 *token = wxEmptyString;
1523 if( token->IsSameAs( templateFieldname.m_Name )
1524 || token->IsSameAs( templateFieldname.m_Name.Upper() ) )
1528 *token = wxEmptyString;
1533 if( token->IsSameAs( wxT(
"FOOTPRINT_LIBRARY" ) ) )
1537 wxArrayString parts = wxSplit( footprint,
':' );
1539 if( parts.Count() > 0 )
1540 *token = parts[ 0 ];
1542 *token = wxEmptyString;
1546 else if( token->IsSameAs( wxT(
"FOOTPRINT_NAME" ) ) )
1550 wxArrayString parts = wxSplit( footprint,
':' );
1552 if( parts.Count() > 1 )
1553 *token = parts[ std::min( 1, (
int) parts.size() - 1 ) ];
1555 *token = wxEmptyString;
1559 else if( token->IsSameAs( wxT(
"UNIT" ) ) )
1564 else if( token->IsSameAs( wxT(
"SHORT_REFERENCE" ) ) )
1566 *token =
GetRef( aPath,
false );
1569 else if( token->IsSameAs( wxT(
"SYMBOL_LIBRARY" ) ) )
1574 else if( token->IsSameAs( wxT(
"SYMBOL_NAME" ) ) )
1579 else if( token->IsSameAs( wxT(
"SYMBOL_DESCRIPTION" ) ) )
1584 else if( token->IsSameAs( wxT(
"SYMBOL_KEYWORDS" ) ) )
1589 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
1591 *token = wxEmptyString;
1594 *token =
_(
"Excluded from BOM" );
1598 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
1600 *token = wxEmptyString;
1603 *token =
_(
"Excluded from board" );
1607 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
1609 *token = wxEmptyString;
1612 *token =
_(
"Excluded from simulation" );
1616 else if( token->IsSameAs( wxT(
"DNP" ) ) )
1618 *token = wxEmptyString;
1620 if( aPath->
GetDNP() || this->GetDNP() )
1621 *token =
_(
"DNP" );
1625 else if( token->StartsWith( wxT(
"SHORT_NET_NAME(" ) )
1626 || token->StartsWith( wxT(
"NET_NAME(" ) )
1627 || token->StartsWith( wxT(
"NET_CLASS(" ) )
1628 || token->StartsWith( wxT(
"PIN_NAME(" ) ) )
1630 wxString pinNumber = token->AfterFirst(
'(' );
1631 pinNumber = pinNumber.BeforeLast(
')' );
1635 if(
pin->GetNumber() == pinNumber )
1637 if( token->StartsWith( wxT(
"PIN_NAME" ) ) )
1639 *token =
pin->GetAlt().IsEmpty() ?
pin->GetName() :
pin->GetAlt();
1646 *token = wxEmptyString;
1647 else if( token->StartsWith( wxT(
"SHORT_NET_NAME" ) ) )
1649 else if( token->StartsWith( wxT(
"NET_NAME" ) ) )
1650 *token = conn->
Name();
1651 else if( token->StartsWith( wxT(
"NET_CLASS" ) ) )
1652 *token =
pin->GetEffectiveNetClass( aPath )->GetName();
1675 if( instance.m_Path ==
path )
1677 if( instance.m_Reference.IsEmpty() || aResetPrefix )
1688 if( instance.m_Reference.IsEmpty() || aResetPrefix)
1695 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1696 pin->ClearDefaultNetName( aSheetPath );
1704 if( currentReference.IsEmpty() || aResetPrefix )
1714 wxCHECK( aSheetPath.size() > 0,
false );
1719 if( instance.m_Path == aSheetPath )
1732 bool transform =
false;
1734 switch( aOrientation )
1855 wxFAIL_MSG(
"Invalid schematic symbol orientation type." );
1891 int rotate_values[] =
1911 for(
int type_rotate : rotate_values )
1923 wxFAIL_MSG(
"Schematic symbol orientation matrix internal error." );
1931void SCH_SYMBOL::Show(
int nestLevel, std::ostream& os )
const
1934 NestedSpace( nestLevel, os ) <<
'<' <<
GetClass().Lower().mb_str()
1936 <<
'"' <<
" chipName=\""
1944 const wxString& value =
GetFields()[i].GetText();
1946 if( !value.IsEmpty() )
1948 NestedSpace( nestLevel + 1, os ) <<
"<field" <<
" name=\""
1950 <<
'"' <<
" value=\""
1951 <<
TO_UTF8( value ) <<
"\"/>\n";
1955 NestedSpace( nestLevel, os ) <<
"</" <<
TO_UTF8(
GetClass().Lower() ) <<
">\n";
1976 if( aIncludeFields )
1980 if( field.IsVisible() )
1981 bBox.
Merge( field.GetBoundingBox() );
1995 catch(
const boost::bad_pointer& e )
1997 wxFAIL_MSG( wxString::Format( wxT(
"Boost pointer exception occurred: %s" ), e.what() ) );
2028 msgs.Add(
_(
"Simulation" ) );
2031 msgs.Add(
_(
"BOM" ) );
2034 msgs.Add(
_(
"Board" ) );
2037 msgs.Add(
_(
"DNP" ) );
2039 msg = wxJoin( msgs,
'|' );
2040 msg.Replace(
'|', wxS(
", " ) );
2043 aList.emplace_back(
_(
"Exclude from" ), msg );
2054 aList.emplace_back(
_(
"Power symbol" ),
2060 aList.emplace_back(
_(
"Reference" ),
2064 aList.emplace_back(
_(
"Value" ),
2068 aList.emplace_back(
_(
"Name" ),
2074 aList.emplace_back(
_(
"flags" ), wxString::Format(
"%X",
GetEditFlags() ) );
2079 msg =
_(
"Missing parent" );
2081 std::shared_ptr< LIB_SYMBOL > parent =
m_part->GetParent().lock();
2084 msg = parent->GetName();
2094 aList.emplace_back(
_(
"Library" ),
_(
"Undefined!!!" ) );
2102 msg =
_(
"<Unknown>" );
2104 aList.emplace_back(
_(
"Footprint" ), msg );
2107 aList.emplace_back(
_(
"Description" ) + wxT(
": " )
2109 _(
"Keywords" ) + wxT(
": " ) +
m_part->GetKeyWords() );
2114 aList.emplace_back(
_(
"Reference" ),
GetRef( currentSheet ) );
2117 aList.emplace_back(
_(
"Value" ),
2121 aList.emplace_back(
_(
"Name" ),
2126 if( libNickname.empty() )
2127 msg =
_(
"No library defined!" );
2129 msg.Printf(
_(
"Symbol not found in %s!" ), libNickname );
2131 aList.emplace_back(
_(
"Library" ), msg );
2138 return BITMAPS::add_component;
2155 field.SetTextPos( pos );
2173 field.SetTextPos( pos );
2192 field.SetTextPos( pos );
2201 if( drawItem.Matches( aSearchData, aAuxData ) )
2212 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2220 aItemList.push_back( item );
2226 std::vector<DANGLING_END_ITEM>& aItemListByPos,
2229 bool changed =
false;
2231 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2233 bool previousState =
pin->IsDangling();
2234 pin->SetIsDangling(
true );
2239 bool do_break =
false;
2241 for(
auto it = lower; it < aItemListByPos.end() && it->GetPosition() == pos; it++ )
2260 pin->SetIsDangling(
false );
2272 changed = ( changed || ( previousState !=
pin->IsDangling() ) );
2298 wxCHECK( symbol,
false );
2304 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2306 if(
pin->IsDangling() )
2319 if(
GetRef( aInstance ) != symbol->
GetRef( aInstance ) )
2324 && (
GetValue(
true, aInstance,
false ) != symbol->
GetValue(
true, aInstance,
false ) ) )
2330 for(
size_t i = 0; i <
m_pins.size(); i++ )
2342 std::vector<VECTOR2I> retval;
2344 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2348 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2350 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2353 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2356 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2382 return wxString::Format(
_(
"Symbol %s [%s]" ),
2389 const std::vector<KICAD_T>& aScanTypes )
2391 for(
KICAD_T scanType : aScanTypes )
2397 if( INSPECT_RESULT::QUIT == aInspector(
this, aTestData ) )
2398 return INSPECT_RESULT::QUIT;
2405 if( INSPECT_RESULT::QUIT == aInspector( &field, (
void*)
this ) )
2406 return INSPECT_RESULT::QUIT;
2413 return INSPECT_RESULT::QUIT;
2420 return INSPECT_RESULT::QUIT;
2426 return INSPECT_RESULT::QUIT;
2432 return INSPECT_RESULT::QUIT;
2437 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2441 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2443 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2446 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2449 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2452 if( INSPECT_RESULT::QUIT == aInspector(
pin.get(), (
void*)
this ) )
2453 return INSPECT_RESULT::QUIT;
2458 return INSPECT_RESULT::CONTINUE;
2504 return !( *
this == aSymbol );
2510 wxCHECK_MSG(
Type() == aSymbol.
Type(), *
this,
2511 wxT(
"Cannot assign object type " ) + aSymbol.
GetClass() + wxT(
" to type " ) +
2514 if( &aSymbol !=
this )
2531 field.SetParent(
this );
2543 bBox.
Inflate( aAccuracy / 2 );
2559 rect.
Inflate( aAccuracy / 2 );
2572 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2574 if(
pin->GetType() == ELECTRICAL_PINTYPE::PT_NC )
2579 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2581 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2584 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2587 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2590 if(
pin->GetLocalPosition() == new_pos )
2605 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
2619 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2622 SCH_PIN* tempPin = tempPins[ i ];
2639 text->SetText(
dummy.GetShownText(
false ) );
2648 for(
bool local_background : {
true,
false } )
2655 field.ClearRenderCache();
2669 std::vector<wxString> properties;
2673 wxString text_field = field.GetShownText( sheet,
false);
2675 if( text_field.IsEmpty() )
2678 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2679 field.GetName(), text_field ) );
2682 if( !
m_part->GetKeyWords().IsEmpty() )
2684 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2686 m_part->GetKeyWords() ) );
2707 std::max( bbox.
GetY() - pins.
GetY(),
2711 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2712 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2722 strokeWidth,
FILLED,
nullptr );
2742 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2745 SCH_PIN* tempPin = tempPins[ i ];
2760 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2762 if(
pin->IsBrightened() )
2772 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2773 pin->ClearBrightened();
2791 m_part->SetShowPinNames( aShow );
2804 m_part->SetShowPinNumbers( aShow );
2810 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2812 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2814 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2817 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2820 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2823 if(
pin->IsPointClickableAnchor( aPos ) )
2842 if( pin_list.size() != 1 )
2845 return pin_list[0]->GetType() == ELECTRICAL_PINTYPE::PT_POWER_IN;
2854 return m_part->IsPower();
2860 wxCHECK(
m_part,
false );
2862 return m_part->IsNormal();
2868 std::unordered_set<wxString> componentClass;
2870 auto getComponentClassFields = [&](
const auto& fields )
2874 if( field.GetCanonicalName() == wxT(
"Component Class" ) )
2876 if( field.GetShownText( aPath,
false ) != wxEmptyString )
2877 componentClass.insert( field.GetShownText( aPath,
false ) );
2883 getComponentClassFields(
m_fields );
2890 getComponentClassFields( label->GetFields() );
2894 return componentClass;
2926 for(
unsigned i = 0; i <
m_pins.size(); ++i )
2975 _HKI(
"Orientation" ),
2986 return symbol->GetLibSymbolRef() !=
nullptr;
2993 .SetAvailableFunc( hasLibPart );
2997 .SetAvailableFunc( hasLibPart );
2999 const wxString groupFields =
_HKI(
"Fields" );
3021 return symbol->IsMulti();
3026 auto multiBodyStyle =
3030 return symbol->HasAlternateBodyStyle();
3043 const wxString groupAttributes =
_HKI(
"Attributes" );
constexpr EDA_IU_SCALE schIUScale
BITMAPS
A list of all bitmap identifiers.
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr const Vec GetEnd() const
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
constexpr coord_type GetY() const
constexpr size_type GetWidth() const
constexpr coord_type GetX() const
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
constexpr ecoord_type GetArea() const
Return the area of the rectangle.
constexpr size_type GetHeight() const
constexpr bool Contains(const Vec &aPoint) const
constexpr const Vec & GetOrigin() const
constexpr void Offset(coord_type dx, coord_type dy)
constexpr bool Intersects(const BOX2< Vec > &aRect) const
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Modify a given item in the model.
static std::vector< DANGLING_END_ITEM >::iterator get_lower_pos(std::vector< DANGLING_END_ITEM > &aItemListByPos, const VECTOR2I &aPos)
Helper class used to store the state of schematic items that can be connected to other schematic item...
DANGLING_END_T GetType() const
const EDA_ITEM * GetParent() const
The base class for create windows for drawing purpose.
A base class for most all the KiCad significant classes used in schematics and boards.
EDA_ITEM_FLAGS GetEditFlags() const
void SetFlags(EDA_ITEM_FLAGS aMask)
KICAD_T Type() const
Returns the type of object.
virtual void SetParent(EDA_ITEM *aParent)
EDA_ITEM * m_parent
Linked list: Link (parent struct).
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetTextPos(const VECTOR2I &aPoint)
void Offset(const VECTOR2I &aOffset)
static ENUM_MAP< T > & Instance()
A text control validator used for validating the text allowed in fields.
bool DoValidate(const wxString &aValue, wxWindow *aParent)
Class that other classes need to inherit from, in order to be inspectable.
A color representation with 4 components: red, green, blue, alpha.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
wxDC * GetPrintDC() const
wxString AsString() const
wxString AsString() const
A logical library item identifier and consists of various portions much like a URI.
const wxString GetUniStringLibItemName() const
Get strings for display messages in dialogs.
const wxString GetUniStringLibNickname() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Define a library symbol object.
std::vector< SCH_PIN * > GetPins(int aUnit, int aBodyStyle) const
Return a list of pin object pointers from the draw item list.
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aForceNoFill, bool aDimmed) override
Print an item.
bool IsRoot() const override
For symbols derived from other symbols, IsRoot() indicates no derivation.
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Plot the item to aPlotter.
static wxString LetterSubReference(int aUnit, int aFirstId)
static LIB_SYMBOL * GetDummy()
Returns a dummy LIB_SYMBOL, used when one is missing in the schematic.
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
const BOX2I GetBodyBoundingBox(int aUnit, int aBodyStyle, bool aIncludePins, bool aIncludePrivateItems) const
Get the symbol bounding box excluding fields.
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
A singleton reporter that reports to nowhere.
Base plotter engine class.
virtual void ThickSegment(const VECTOR2I &start, const VECTOR2I &end, int width, OUTLINE_MODE tracemode, void *aData)
virtual void Bookmark(const BOX2I &aBox, const wxString &aName, const wxString &aGroupName=wxEmptyString)
Create a bookmark to a symbol.
virtual void StartBlock(void *aData)
calling this function allows one to define the beginning of a group of drawing items,...
virtual void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
virtual void SetColor(const COLOR4D &color)=0
virtual void EndBlock(void *aData)
calling this function allows one to define the end of a group of drawing items for instance in SVG or...
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
const wxString & Name() const
Provide class metadata.Helper macro to map type hashes to names.
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
static PROPERTY_MANAGER & Instance()
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
TEMPLATES m_TemplateFieldNames
Holds all the data relating to one schematic.
SCH_SHEET_PATH & CurrentSheet() const override
wxString GetOperatingPoint(const wxString &aNetName, int aPrecision, const wxString &aRange)
SCHEMATIC_SETTINGS & Settings() const
PROJECT & Prj() const override
Return a reference to the project this schematic is part of.
bool ResolveCrossReference(wxString *token, int aDepth) const
Resolves text vars that refer to other items.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
wxString LocalName() const
wxString Name(bool aIgnoreSheet=false) const
Schematic editor (Eeschema) main window.
SCH_SHEET_PATH & GetCurrentSheet() const
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
void ImportValues(const SCH_FIELD &aSource)
Copy parameters from a SCH_FIELD source.
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
void SetText(const wxString &aText) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
SCH_RENDER_SETTINGS * getRenderSettings(PLOTTER *aPlotter) const
void SetPrivate(bool aPrivate)
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
AUTOPLACE_ALGO m_fieldsAutoplaced
std::unordered_set< SCH_RULE_AREA * > m_rule_areas_cache
Store pointers to rule areas which this item is contained within.
void SwapFlags(SCH_ITEM *aItem)
Swap the non-temp and non-edit flags.
void SetAlt(const wxString &aAlt)
void SetName(const wxString &aName)
const wxString & GetName() const
bool IsDangling() const override
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Plot the item to aPlotter.
void SetShape(GRAPHIC_PINSHAPE aShape)
VECTOR2I GetPosition() const override
wxString GetShownName() const
void SetType(ELECTRICAL_PINTYPE aType)
const wxString & GetNumber() const
GRAPHIC_PINSHAPE GetShape() const
ELECTRICAL_PINTYPE GetType() const
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
bool GetExcludedFromBOM() const
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
bool GetExcludedFromSim() const
bool GetExcludedFromBoard() const
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
void SetValueProp(const wxString &aRef)
SCH_SYMBOL & operator=(const SCH_SYMBOL &aItem)
size_t GetFullPinCount() const
void UpdatePrefix()
Set the prefix based on the current reference designator.
wxString m_prefix
C, R, U, Q etc - the first character(s) which typically indicate what the symbol is.
SCH_FIELD * GetFieldByName(const wxString &aFieldName)
Return a field in this symbol.
wxString GetDescription() const override
std::unordered_map< SCH_PIN *, SCH_PIN * > m_pinMap
Library pin pointer : SCH_PIN indices.
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction) override
void SetMirrorX(bool aMirror)
bool IsSymbolLikePowerGlobalLabel() const
wxString GetSymbolIDAsString() const
LIB_ID m_lib_id
Name and library the symbol was loaded from, i.e. 74xx:74LS00.
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
bool GetShowPinNumbers() const override
wxString GetDatasheet() const
Return the documentation text for the given part alias.
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
void SetLibId(const LIB_ID &aName)
std::vector< SCH_FIELD > & GetFields()
Return a vector of fields from the symbol.
BOX2I GetBodyAndPinsBoundingBox() const override
Return a bounding box for the symbol body and pins but not the fields.
void SetRefProp(const wxString &aRef)
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aForceNoFill, bool aDimmed) override
Print a symbol.
wxString GetUnitDisplayName(int aUnit) const
Return the display name for a given unit aUnit.
INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes) override
May be re-implemented for each derived class in order to handle all the types given by its member dat...
SCH_ITEM * GetDrawItem(const VECTOR2I &aPosition, KICAD_T aType=TYPE_NOT_INIT)
Return the symbol library item at aPosition that is part of this symbol.
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
int GetNextFieldId() const
void PlotDNP(PLOTTER *aPlotter) const
Plot the red 'X' over the symbol.
bool operator!=(const SCH_SYMBOL &aSymbol) const
void SetShowPinNumbers(bool aShow) override
Set or clear the pin number visibility flag.
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
int GetFieldCount() const
Return the number of fields in this symbol.
void SetBodyStyleUnconditional(int aBodyStyle)
Similar to SetBodyStyle(), but always set the body style, regardless the lib symbol properties (the L...
wxString SubReference(int aUnit, bool aAddSeparator=true) const
wxString GetClass() const override
Return the class name.
void RemoveInstance(const SCH_SHEET_PATH &aInstancePath)
bool IsAnnotated(const SCH_SHEET_PATH *aSheet) const
Check if the symbol has a valid annotation (reference) for the given sheet path.
void SetMirrorY(bool aMirror)
void PlotPins(PLOTTER *aPlotter) const
Plot just the symbol pins.
void SetValueFieldText(const wxString &aValue)
std::vector< SCH_PIN * > GetPins() const override
void RemoveField(const wxString &aFieldName)
Remove a user field from the symbol.
void SetBodyStyle(int aBodyStyle) override
void SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
void SetShowPinNames(bool aShow) override
Set or clear the pin name visibility flag.
wxString GetKeyWords() const override
wxString GetSchSymbolLibraryName() const
SCH_FIELD * FindField(const wxString &aFieldName, bool aIncludeDefaultFields=true, bool aCaseInsensitive=false)
Search for a SCH_FIELD with aFieldName.
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) override
Populate a std::vector with SCH_FIELDs.
void SetBodyStyleProp(int aBodyStyle)
void ClearBrightenedPins()
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool HasConnectivityChanges(const SCH_ITEM *aItem, const SCH_SHEET_PATH *aInstance=nullptr) const override
Check if aItem has connectivity changes against this object.
wxString GetRefProp() const
bool AddSheetPathReferenceEntryIfMissing(const KIID_PATH &aSheetPath)
Add an instance to the alternate references list (m_instanceReferences), if this entry does not alrea...
SCH_FIELD * GetField(MANDATORY_FIELD_T aFieldType)
Return a mandatory field in this symbol.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
static std::unordered_map< TRANSFORM, int > s_transformToOrientationCache
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
std::vector< SCH_SYMBOL_INSTANCE > m_instanceReferences
Define the hierarchical path and reference of the symbol.
const wxString GetValue(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const override
void SyncOtherUnits(const SCH_SHEET_PATH &aSourceSheet, SCH_COMMIT &aCommit, PROPERTY_BASE *aProperty)
Keep fields other than the reference, include/exclude flags, and alternate pin assignments in sync in...
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
bool IsPointClickableAnchor(const VECTOR2I &aPos) const override
void UpdateFields(const SCH_SHEET_PATH *aPath, bool aUpdateStyle, bool aUpdateRef, bool aUpdateOtherFields, bool aResetRef, bool aResetOtherFields)
Restore fields to the original library values.
wxString m_schLibSymbolName
The name used to look up a symbol in the symbol library embedded in a schematic.
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
void ClearAnnotation(const SCH_SHEET_PATH *aSheetPath, bool aResetPrefix)
Clear exiting symbol annotation.
void SetOrientationProp(SYMBOL_ORIENTATION_PROP aAngle)
Orientation/mirroring access for property manager.
bool GetShowPinNames() const override
const wxString GetFootprintFieldText(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
int GetBodyStyleProp() const
std::vector< SCH_PIN * > GetAllLibPins() const
void SetOrientation(int aOrientation)
Compute the new transform matrix based on aOrientation for the symbol which is applied to the current...
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
void SetFootprintFieldText(const wxString &aFootprint)
bool doIsConnected(const VECTOR2I &aPosition) const override
Provide the object specific test to see if it is connected to aPosition.
void AddHierarchicalReference(const KIID_PATH &aPath, const wxString &aRef, int aUnit)
Add a full hierarchical reference to this symbol.
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
VECTOR2I GetPosition() const override
std::unique_ptr< LIB_SYMBOL > m_part
A flattened copy of the LIB_SYMBOL from the PROJECT object's libraries.
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the symbol.
void Init(const VECTOR2I &pos=VECTOR2I(0, 0))
bool HasAlternateBodyStyle() const override
Test if symbol has more than one body conversion type (DeMorgan).
const LIB_ID & GetLibId() const override
bool operator<(const SCH_ITEM &aItem) const override
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this symbol.
void SetUnitProp(int aUnit)
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
SCH_FIELD * GetFieldById(int aFieldId)
Return a field in this symbol.
std::vector< SCH_PIN * > GetLibPins() const
Populate a vector with all the pins from the library object that match the current unit and bodyStyle...
bool UpdateDanglingState(std::vector< DANGLING_END_ITEM > &aItemListByType, std::vector< DANGLING_END_ITEM > &aItemListByPos, const SCH_SHEET_PATH *aPath=nullptr) override
Test if the symbol's dangling state has changed for all pins.
bool GetInstance(SCH_SYMBOL_INSTANCE &aInstance, const KIID_PATH &aSheetPath, bool aTestFromEnd=false) const
BOX2I doGetBoundingBox(bool aIncludePins, bool aIncludeFields) const
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
void GetEndPoints(std::vector< DANGLING_END_ITEM > &aItemList) override
Add the schematic item end points to aItemList if the item has end points.
std::vector< VECTOR2I > GetConnectionPoints() const override
Add all the connection points for this item to aPoints.
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
bool m_isInNetlist
True if the symbol should appear in netlist.
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
wxString GetValueProp() const
void PrintBackground(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Print only the background parts of a symbol (if any)
int GetUnitCount() const override
Return the number of units per package of the symbol.
void SetPrefix(const wxString &aPrefix)
int GetOrientation() const override
Get the display symbol orientation.
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Plot the item to aPlotter.
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
bool IsNormal() const override
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
std::unordered_set< wxString > GetComponentClassNames(const SCH_SHEET_PATH *aPath) const
Return the component classes this symbol belongs in.
std::vector< std::unique_ptr< SCH_PIN > > m_pins
A SCH_PIN for every #LIB_PIN.
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
VECTOR2I GetPinPhysicalPosition(const SCH_PIN *Pin) const
BOX2I GetBodyBoundingBox() const override
Return a bounding box for the symbol body but not the pins or fields.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
bool HasUnitDisplayName(int aUnit) const
Return true if the given unit aUnit has a display name set.
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
bool IsMovableFromAnchorPoint() const override
Return true for items which are moved with the anchor point at mouse cursor and false for items moved...
bool IsPower() const override
bool operator==(const SCH_SYMBOL &aSymbol) const
SIM_MODEL & CreateModel(SIM_MODEL::TYPE aType, const std::vector< SCH_PIN * > &aPins, REPORTER &aReporter)
const SPICE_GENERATOR & SpiceGenerator() const
std::vector< std::reference_wrapper< const SIM_MODEL_PIN > > GetPins() const
virtual std::string ItemName(const SPICE_ITEM &aItem) const
A base class for LIB_SYMBOL and SCH_SYMBOL.
bool m_DNP
True if symbol is set to 'Do Not Populate'.
bool GetExcludedFromBoard() const
virtual void SetShowPinNumbers(bool aShow)
Set or clear the pin number visibility flag.
bool GetExcludedFromBOM() const
const TRANSFORM & GetTransform() const
void SetExcludedFromSim(bool aExcludeFromSim) override
Set or clear the exclude from simulation flag.
virtual void SetShowPinNames(bool aShow)
Set or clear the pin name visibility flag.
bool GetDNP() const
Set or clear the 'Do Not Populate' flag.
virtual bool GetShowPinNames() const
void SetExcludedFromBOM(bool aExcludeFromBOM)
Set or clear the exclude from schematic bill of materials flag.
SYMBOL & operator=(const SYMBOL &aItem)
void SetExcludedFromBoard(bool aExcludeFromBoard)
Set or clear exclude from board netlist flag.
virtual bool GetShowPinNumbers() const
TRANSFORM m_transform
The rotation/mirror transformation.
bool GetExcludedFromSim() const override
const TEMPLATE_FIELDNAMES & GetTemplateFieldNames()
Return a template field name list for read only access.
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
T Convert(const wxString &aValue)
Convert a wxString to a generic type T.
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_270
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
#define STRUCT_DELETED
flag indication structures to be erased
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define IS_DANGLING
indicates a pin is dangling
void CollectOtherUnits(const wxString &aRef, int aUnit, const LIB_ID &aLibId, SCH_SHEET_PATH &aSheet, std::vector< SCH_SYMBOL * > *otherUnits)
void GRFilledSegment(wxDC *aDC, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aWidth, const COLOR4D &aColor)
const wxChar *const traceSchSheetPaths
Flag to enable debug output of schematic symbol sheet path manipulation code.
SCH_LAYER_ID
Eeschema drawing layers.
constexpr void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
Message panel definition file.
KICOMMON_API wxString EllipsizeMenuText(const wxString &aString)
Ellipsize text (at the end) to be no more than 36 characters.
KICOMMON_API wxString EllipsizeStatusText(wxWindow *aWindow, const wxString &aString)
Ellipsize text (at the end) to be no more than 1/3 of the window width.
wxString GetRefDesPrefix(const wxString &aRefDes)
Get the (non-numeric) prefix from a refdes - e.g.
wxString GetRefDesUnannotated(const wxString &aSource)
Return an unannotated refdes from either a prefix or an existing refdes.
#define NO_SETTER(owner, type)
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
Collection of utility functions for component reference designators (refdes)
std::string toUTFTildaText(const wxString &txt)
Convert a wxString to UTF8 and replace any control characters with a ~, where a control character is ...
static struct SCH_SYMBOL_DESC _SCH_SYMBOL_DESC
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
constexpr int MilsToIU(int mils) const
std::vector< std::pair< int, wxString > > Fields
A simple container for schematic symbol instance information.
Hold a name of a symbol's field, field value, and default visibility.
@ SYM_ROTATE_COUNTERCLOCKWISE
wxString GetCanonicalFieldName(int idx)
MANDATORY_FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ DATASHEET_FIELD
name of datasheet
@ FOOTPRINT_FIELD
Field Name Module PCB, i.e. "16DIP300".
@ VALUE_FIELD
Field Value of part, i.e. "3.3K".
@ REFERENCE_FIELD
Field Reference of part, i.e. "IC21".
@ DESCRIPTION_FIELD
Field Description of part, i.e. "1/4W 1% Metal Film Resistor".
wxLogTrace helper definitions.
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.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ SCH_FIELD_LOCATE_REFERENCE_T
@ SCH_FIELD_LOCATE_FOOTPRINT_T
@ SCH_FIELD_LOCATE_VALUE_T
@ SCH_FIELD_LOCATE_DATASHEET_T
@ SCH_SYMBOL_LOCATE_POWER_T
Custom text control validator definitions.
VECTOR2< int32_t > VECTOR2I