58 std::string ret =
TO_UTF8( txt );
62 if( (
unsigned char) c <=
' ' )
117 std::unique_ptr< LIB_SYMBOL > part;
146 SCH_SYMBOL( aSymbol, aSel.LibId, aSheet, aSel.Unit, aSel.
Convert, aPosition, aParent )
149 for(
const std::pair<int, wxString>& i : aSel.
Fields )
152 SetRef( aSheet, i.second );
154 field->SetText( i.second );
179 field.SetParent(
this );
184 for(
const std::unique_ptr<SCH_PIN>&
pin : aSymbol.
m_pins )
186 m_pins.emplace_back( std::make_unique<SCH_PIN>( *
pin ) );
187 m_pins.back()->SetParent(
this );
251 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
253 if( ( (
pin->GetPosition().x -
m_pos.
x ) % min_grid_size ) != 0 )
256 if( ( (
pin->GetPosition().y -
m_pos.
y ) % min_grid_size ) != 0 )
281 wxCHECK2( !aLibSymbol || aLibSymbol->
IsRoot(), aLibSymbol =
nullptr );
283 m_part.reset( aLibSymbol );
291 return m_part->GetDescription();
293 return wxEmptyString;
300 return m_part->GetKeyWords();
302 return wxEmptyString;
309 return m_part->GetDatasheetField().GetText();
311 return wxEmptyString;
317 std::map<wxString, wxString> altPinMap;
318 std::map<wxString, std::set<SCH_PIN*>> pinUuidMap;
319 std::set<SCH_PIN*> unassignedSchPins;
320 std::set<SCH_PIN*> unassignedLibPins;
322 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
324 pinUuidMap[
pin->GetNumber() ].insert(
pin.get() );
326 unassignedSchPins.insert(
pin.get() );
328 if( !
pin->GetAlt().IsEmpty() )
329 altPinMap[
pin->GetNumber() ] =
pin->GetAlt();
331 pin->SetLibPin(
nullptr );
348 auto ii = pinUuidMap.find( libPin->GetNumber() );
350 if( ii == pinUuidMap.end() || ii->second.empty() )
352 unassignedLibPins.insert( libPin );
356 auto it = ii->second.begin();
358 ii->second.erase( it );
359 pin->SetLibPin( libPin );
360 pin->SetPosition( libPin->GetPosition() );
362 unassignedSchPins.erase(
pin );
364 auto iii = altPinMap.find( libPin->GetNumber() );
366 if( iii != altPinMap.end() )
367 pin->SetAlt( iii->second );
373 for(
SCH_PIN* libPin : unassignedLibPins )
378 if( !unassignedSchPins.empty() )
380 auto it = unassignedSchPins.begin();
382 unassignedSchPins.erase( it );
387 pin =
m_pins.emplace_back( std::make_unique<SCH_PIN>(
SCH_PIN(
this, libPin ) ) ).get();
391 pin->SetLibPin( libPin );
392 pin->SetPosition( libPin->GetPosition() );
393 pin->SetNumber( libPin->GetNumber() );
395 auto iii = altPinMap.find( libPin->GetNumber() );
397 if( iii != altPinMap.end() )
398 pin->SetAlt( iii->second );
402 for(
auto it1 =
m_pins.begin(); it1 !=
m_pins.end() && !unassignedSchPins.empty(); )
404 auto it2 = unassignedSchPins.find( it1->get() );
406 if( it2 != unassignedSchPins.end() )
408 it1 =
m_pins.erase( it1 );
409 unassignedSchPins.erase( it2 );
420 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
456 return m_part->HasAlternateBodyStyle();
471 return m_part->GetUnitCount();
481 return m_part->GetUnitDisplayName( aUnit );
489 return m_part->HasUnitDisplayName( aUnit );
494 const VECTOR2I& aOffset,
bool aDimmed )
511 const VECTOR2I& aOffset,
bool aForceNoFill,
bool aDimmed )
528 for(
unsigned i = 0; i < tempPins.size(); ++ i )
531 SCH_PIN* tempPin = tempPins[ i ];
545 text->SetText(
dummy.GetShownText(
false ) );
554 dummy()->Print( &localRenderSettings, 0, 0,
m_pos + aOffset, aForceNoFill, aDimmed );
558 field.Print( &localRenderSettings,
m_unit,
m_bodyStyle, aOffset, aForceNoFill, aDimmed );
569 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
570 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
586 const KIID_PATH& aSheetPath,
bool aTestFromEnd )
const
592 if( instance.m_Path == aSheetPath )
594 aInstance = instance;
598 else if( instance.m_Path.EndsWith( aSheetPath ) )
600 aInstance = instance;
624 " reference %s, unit %d from symbol %s." ),
646 " reference %s, unit %d from symbol %s." ),
687 std::vector<SCH_SYMBOL_INSTANCE>::iterator resultIt;
692 [searchPath](
const auto& it )
694 return it.m_Path == searchPath;
701 " reference %s, unit %d from symbol %s." ),
703 resultIt->m_Reference,
745 if( instance.m_Path ==
path )
747 ref = instance.m_Reference;
787 if( instance.m_Path ==
path )
790 instance.m_Reference = ref;
798 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
799 pin->ClearDefaultNetName( sheet );
821 if( instance.m_Path ==
path )
822 return instance.m_Reference.Last() !=
'?';
833 refDesignator.Replace(
"~",
" " );
835 wxString prefix = refDesignator;
837 while( prefix.Length() )
839 wxUniCharRef last = prefix.Last();
841 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
849 prefix.Trim(
false );
851 if( !prefix.IsEmpty() )
859 return schematic->Settings().SubReference( aUnit, aAddSeparator );
871 if( instance.m_Path ==
path )
872 return instance.m_Unit;
888 if( instance.m_Path ==
path )
890 instance.m_Unit = aUnitSelection;
903 instance.m_Unit = aUnitSelection;
908 bool aAllowExtraText )
const
924 bool aAllowExtraText )
const
955 if( field.GetId() == aFieldId )
967 if( field.GetName() == aFieldName )
979 if( field.GetName() == aFieldName )
993 if( !field.IsVisible() || field.GetText().IsEmpty() )
997 aVector.push_back( &field );
1013 if( aFieldName ==
m_fields[i].GetName(
false ) )
1023 bool aCaseInsensitive )
1027 for(
unsigned i = start; i <
m_fields.size(); ++i )
1029 if( aCaseInsensitive )
1031 if( aFieldName.Upper() ==
m_fields[i].GetName(
false ).Upper() )
1036 if( aFieldName ==
m_fields[i].GetName(
false ) )
1046 bool aUpdateOtherFields,
bool aResetRef,
bool aResetOtherFields )
1050 std::vector<SCH_FIELD*> fields;
1051 m_part->GetFields( fields );
1053 for(
const SCH_FIELD* libField : fields )
1055 int id = libField->GetId();
1058 if( libField->IsMandatory() )
1064 schField =
FindField( libField->GetCanonicalName() );
1068 wxString fieldName = libField->GetCanonicalName();
1083 SetRef( aPath,
m_part->GetReferenceField().GetText() );
1084 else if( aUpdateRef )
1085 SetRef( aPath, libField->GetText() );
1093 if( aResetOtherFields || aUpdateOtherFields )
1098 if( aResetOtherFields )
1100 else if( aUpdateOtherFields )
1101 schField->
SetText( libField->GetText() );
1105 if( aResetOtherFields || aUpdateOtherFields )
1106 schField->
SetText( libField->GetText() );
1116 bool updateValue =
true;
1117 bool updateExclFromBOM =
true;
1118 bool updateExclFromBoard =
true;
1119 bool updateDNP =
true;
1120 bool updateOtherFields =
true;
1121 bool updatePins =
true;
1125 updateValue = aProperty->
Name() ==
_HKI(
"Value" );
1126 updateExclFromBoard = aProperty->
Name() ==
_HKI(
"Exclude From Board" );
1127 updateExclFromBOM = aProperty->
Name() ==
_HKI(
"Exclude From Bill of Materials" );
1128 updateDNP = aProperty->
Name() ==
_HKI(
"Do not Populate" );
1129 updateOtherFields =
false;
1134 && !updateExclFromBOM
1135 && !updateExclFromBoard
1137 && !updateOtherFields
1147 wxString ref =
GetRef( &aSourceSheet );
1152 std::vector<SCH_SYMBOL*> otherUnits;
1158 aCommit.
Modify( otherUnit, screen );
1163 if( updateOtherFields )
1181 newField.
Offset( otherUnit->GetPosition() );
1184 otherUnit->AddField( newField );
1188 for(
size_t ii = otherUnit->GetFields().size() - 1; ii >
DATASHEET_FIELD; ii-- )
1190 SCH_FIELD& otherField = otherUnit->GetFields().at( ii );
1193 otherUnit->GetFields().erase( otherUnit->GetFields().begin() + ii );
1197 if( updateExclFromBOM )
1200 if( updateExclFromBoard )
1204 otherUnit->SetDNP(
m_DNP );
1208 for(
const std::unique_ptr<SCH_PIN>& model_pin :
m_pins )
1210 SCH_PIN* src_pin = otherUnit->GetPin( model_pin->GetNumber() );
1213 src_pin->
SetAlt( model_pin->GetAlt() );
1224 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1225 aFunction(
pin.get() );
1228 aFunction( &field );
1234 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1236 if(
pin->GetNumber() == aNumber )
1246 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1248 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
1250 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
1253 if( pin_unit > 0 && pin_unit !=
GetUnit() )
1256 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
1259 if(
pin->IsPointClickableAnchor( aPos ) )
1272 return std::vector<SCH_PIN*>();
1279 return m_part->GetAllLibPins();
1281 return std::vector<SCH_PIN*>();
1293 auto it =
m_pinMap.find( aLibPin );
1298 wxFAIL_MSG_AT(
"Pin not found", __FILE__, __LINE__, __FUNCTION__ );
1305 std::vector<SCH_PIN*> pins;
1307 if( aSheet ==
nullptr )
1309 wxCHECK_MSG(
Schematic(), pins,
"Can't call GetPins on a symbol with no schematic" );
1316 for(
const std::unique_ptr<SCH_PIN>& p :
m_pins )
1318 if( unit && p->GetLibPin() && p->GetLibPin()->GetUnit()
1319 && ( p->GetLibPin()->GetUnit() != unit ) )
1324 pins.push_back( p.get() );
1336 wxT(
"Cannot swap data with invalid symbol." ) );
1344 for( std::unique_ptr<SCH_PIN>&
pin : symbol->
m_pins )
1345 pin->SetParent( symbol );
1347 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1348 pin->SetParent(
this );
1353 m_part.reset( libSymbol );
1386 aVars->push_back(
m_fields[i].GetCanonicalName().Upper() );
1389 aVars->push_back(
m_fields[i].GetName() );
1391 aVars->push_back( wxT(
"OP" ) );
1392 aVars->push_back( wxT(
"FOOTPRINT_LIBRARY" ) );
1393 aVars->push_back( wxT(
"FOOTPRINT_NAME" ) );
1394 aVars->push_back( wxT(
"UNIT" ) );
1395 aVars->push_back( wxT(
"SHORT_REFERENCE" ) );
1396 aVars->push_back( wxT(
"SYMBOL_LIBRARY" ) );
1397 aVars->push_back( wxT(
"SYMBOL_NAME" ) );
1398 aVars->push_back( wxT(
"SYMBOL_DESCRIPTION" ) );
1399 aVars->push_back( wxT(
"SYMBOL_KEYWORDS" ) );
1400 aVars->push_back( wxT(
"EXCLUDE_FROM_BOM" ) );
1401 aVars->push_back( wxT(
"EXCLUDE_FROM_BOARD" ) );
1402 aVars->push_back( wxT(
"EXCLUDE_FROM_SIM" ) );
1403 aVars->push_back( wxT(
"DNP" ) );
1404 aVars->push_back( wxT(
"SHORT_NET_NAME(<pin_number>)" ) );
1405 aVars->push_back( wxT(
"NET_NAME(<pin_number>)" ) );
1406 aVars->push_back( wxT(
"NET_CLASS(<pin_number>)" ) );
1407 aVars->push_back( wxT(
"PIN_NAME(<pin_number>)" ) );
1413 static wxRegEx operatingPoint( wxT(
"^"
1416 "(.([0-9])?([a-zA-Z]*))?"
1419 wxCHECK( aPath,
false );
1426 if( operatingPoint.Matches( *token ) )
1428 wxString
pin( operatingPoint.GetMatch( *token, 1 ).Lower() );
1429 wxString precisionStr( operatingPoint.GetMatch( *token, 3 ) );
1430 wxString range( operatingPoint.GetMatch( *token, 4 ) );
1433 if( !precisionStr.IsEmpty() )
1434 precision = precisionStr[0] -
'0';
1436 if( range.IsEmpty() )
1437 range = wxS(
"~A" );
1447 spiceRef = spiceRef.Lower();
1454 else if(
pin == wxS(
":power" ) )
1456 if( range.IsEmpty() )
1457 range = wxS(
"~W" );
1459 *token = schematic->
GetOperatingPoint( spiceRef + wxS(
":power" ), precision, range );
1464 pin =
pin.SubString( 1, -1 );
1466 for(
const std::reference_wrapper<const SIM_MODEL_PIN>& modelPin : model.
GetPins() )
1468 SCH_PIN* symbolPin =
GetPin( modelPin.get().symbolPinNumber );
1472 if( model.
GetPins().size() == 2 )
1478 wxString signalName = spiceRef + wxS(
":" ) + modelPin.get().modelPinName;
1487 *token = wxS(
"?" );
1491 if( token->Contains(
':' ) )
1497 wxString upperToken = token->Upper();
1501 wxString field =
m_fields[i].GetCanonicalName();
1503 wxString textToken =
m_fields[i].GetText();
1504 textToken.Replace(
" ", wxEmptyString );
1505 wxString tokenString =
"${" + field +
"}";
1508 if( textToken.IsSameAs( tokenString,
false ) )
1511 if( token->IsSameAs( field,
false ) )
1514 *token =
GetRef( aPath,
true );
1516 *token =
m_fields[ i ].GetShownText( aPath,
false, aDepth + 1 );
1524 wxString field =
m_fields[ i ].GetName();
1526 wxString textToken =
m_fields[i].GetText();
1527 textToken.Replace(
" ", wxEmptyString );
1528 wxString tokenString =
"${" + field +
"}";
1530 if( textToken.IsSameAs( tokenString,
false ) )
1533 if( token->IsSameAs( field,
false ) )
1535 *token =
m_fields[ i ].GetShownText( aPath,
false, aDepth + 1 );
1541 if( token->IsSameAs( wxT(
"SIM.DEVICE" ) )
1542 || token->IsSameAs( wxT(
"SIM.TYPE" ) )
1543 || token->IsSameAs( wxT(
"SIM.PINS" ) )
1544 || token->IsSameAs( wxT(
"SIM.PARAMS" ) )
1545 || token->IsSameAs( wxT(
"SIM.LIBRARY" ) )
1546 || token->IsSameAs( wxT(
"SIM.NAME" ) ) )
1548 *token = wxEmptyString;
1555 if( token->IsSameAs( templateFieldname.m_Name )
1556 || token->IsSameAs( templateFieldname.m_Name.Upper() ) )
1560 *token = wxEmptyString;
1565 if( token->IsSameAs( wxT(
"FOOTPRINT_LIBRARY" ) ) )
1569 wxArrayString parts = wxSplit( footprint,
':' );
1571 if( parts.Count() > 0 )
1572 *token = parts[ 0 ];
1574 *token = wxEmptyString;
1578 else if( token->IsSameAs( wxT(
"FOOTPRINT_NAME" ) ) )
1582 wxArrayString parts = wxSplit( footprint,
':' );
1584 if( parts.Count() > 1 )
1585 *token = parts[ std::min( 1, (
int) parts.size() - 1 ) ];
1587 *token = wxEmptyString;
1591 else if( token->IsSameAs( wxT(
"UNIT" ) ) )
1596 else if( token->IsSameAs( wxT(
"SHORT_REFERENCE" ) ) )
1601 else if( token->IsSameAs( wxT(
"SYMBOL_LIBRARY" ) ) )
1606 else if( token->IsSameAs( wxT(
"SYMBOL_NAME" ) ) )
1611 else if( token->IsSameAs( wxT(
"SYMBOL_DESCRIPTION" ) ) )
1616 else if( token->IsSameAs( wxT(
"SYMBOL_KEYWORDS" ) ) )
1621 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
1623 *token = wxEmptyString;
1626 *token =
_(
"Excluded from BOM" );
1630 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
1632 *token = wxEmptyString;
1635 *token =
_(
"Excluded from board" );
1639 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
1641 *token = wxEmptyString;
1644 *token =
_(
"Excluded from simulation" );
1648 else if( token->IsSameAs( wxT(
"DNP" ) ) )
1650 *token = wxEmptyString;
1652 if( aPath->
GetDNP() || this->GetDNP() )
1653 *token =
_(
"DNP" );
1657 else if( token->StartsWith( wxT(
"SHORT_NET_NAME(" ) )
1658 || token->StartsWith( wxT(
"NET_NAME(" ) )
1659 || token->StartsWith( wxT(
"NET_CLASS(" ) )
1660 || token->StartsWith( wxT(
"PIN_NAME(" ) ) )
1662 wxString pinNumber = token->AfterFirst(
'(' );
1663 pinNumber = pinNumber.BeforeLast(
')' );
1667 if(
pin->GetNumber() == pinNumber )
1669 if( token->StartsWith( wxT(
"PIN_NAME" ) ) )
1671 *token =
pin->GetAlt().IsEmpty() ?
pin->GetName() :
pin->GetAlt();
1678 *token = wxEmptyString;
1679 else if( token->StartsWith( wxT(
"SHORT_NET_NAME" ) ) )
1681 else if( token->StartsWith( wxT(
"NET_NAME" ) ) )
1682 *token = conn->
Name();
1683 else if( token->StartsWith( wxT(
"NET_CLASS" ) ) )
1684 *token =
pin->GetEffectiveNetClass( aPath )->GetName();
1707 if( instance.m_Path ==
path )
1709 if( instance.m_Reference.IsEmpty() || aResetPrefix )
1720 if( instance.m_Reference.IsEmpty() || aResetPrefix)
1727 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1728 pin->ClearDefaultNetName( aSheetPath );
1736 if( currentReference.IsEmpty() || aResetPrefix )
1746 wxCHECK( aSheetPath.size() > 0,
false );
1751 if( instance.m_Path == aSheetPath )
1764 bool transform =
false;
1766 switch( aOrientation )
1887 wxFAIL_MSG(
"Invalid schematic symbol orientation type." );
1923 int rotate_values[] =
1943 for(
int type_rotate : rotate_values )
1955 wxFAIL_MSG(
"Schematic symbol orientation matrix internal error." );
1963void SCH_SYMBOL::Show(
int nestLevel, std::ostream& os )
const
1966 NestedSpace( nestLevel, os ) <<
'<' <<
GetClass().Lower().mb_str()
1968 <<
'"' <<
" chipName=\""
1976 const wxString& value =
GetFields()[i].GetText();
1978 if( !value.IsEmpty() )
1980 NestedSpace( nestLevel + 1, os ) <<
"<field" <<
" name=\""
1982 <<
'"' <<
" value=\""
1983 <<
TO_UTF8( value ) <<
"\"/>\n";
1987 NestedSpace( nestLevel, os ) <<
"</" <<
TO_UTF8(
GetClass().Lower() ) <<
">\n";
2007 if( aIncludeFields )
2011 if( field.IsVisible() )
2012 bBox.
Merge( field.GetBoundingBox() );
2026 catch(
const boost::bad_pointer& e )
2028 wxFAIL_MSG( wxString::Format( wxT(
"Boost pointer exception occurred: %s" ), e.what() ) );
2059 msgs.Add(
_(
"Simulation" ) );
2062 msgs.Add(
_(
"BOM" ) );
2065 msgs.Add(
_(
"Board" ) );
2068 msgs.Add(
_(
"DNP" ) );
2070 msg = wxJoin( msgs,
'|' );
2071 msg.Replace(
'|', wxS(
", " ) );
2074 aList.emplace_back(
_(
"Exclude from" ), msg );
2085 aList.emplace_back(
_(
"Power symbol" ),
2090 aList.emplace_back(
_(
"Reference" ),
2094 aList.emplace_back(
_(
"Value" ),
2097 aList.emplace_back(
_(
"Name" ),
2102 aList.emplace_back(
_(
"flags" ), wxString::Format(
"%X",
GetEditFlags() ) );
2107 msg =
_(
"Missing parent" );
2109 std::shared_ptr< LIB_SYMBOL > parent =
m_part->GetParent().lock();
2112 msg = parent->GetName();
2122 aList.emplace_back(
_(
"Library" ),
_(
"Undefined!!!" ) );
2130 msg =
_(
"<Unknown>" );
2132 aList.emplace_back(
_(
"Footprint" ), msg );
2135 aList.emplace_back(
_(
"Description" ) + wxT(
": " )
2137 _(
"Keywords" ) + wxT(
": " ) +
m_part->GetKeyWords() );
2142 aList.emplace_back(
_(
"Reference" ),
GetRef( currentSheet ) );
2144 aList.emplace_back(
_(
"Value" ),
2147 aList.emplace_back(
_(
"Name" ),
2152 if( libNickname.empty() )
2153 msg =
_(
"No library defined!" );
2155 msg.Printf(
_(
"Symbol not found in %s!" ), libNickname );
2157 aList.emplace_back(
_(
"Library" ), msg );
2164 return BITMAPS::add_component;
2181 field.SetTextPos( pos );
2199 field.SetTextPos( pos );
2218 field.SetTextPos( pos );
2232 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2240 aItemList.push_back( item );
2246 std::vector<DANGLING_END_ITEM>& aItemListByPos,
2249 bool changed =
false;
2251 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2253 bool previousState =
pin->IsDangling();
2254 pin->SetIsDangling(
true );
2259 bool do_break =
false;
2261 for(
auto it = lower; it < aItemListByPos.end() && it->GetPosition() == pos; it++ )
2279 pin->SetIsDangling(
false );
2291 changed = ( changed || ( previousState !=
pin->IsDangling() ) );
2301 wxT(
"Cannot get physical position of pin." ) );
2317 wxCHECK( symbol,
false );
2323 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2325 if(
pin->IsDangling() )
2338 if(
GetRef( aInstance ) != symbol->
GetRef( aInstance ) )
2343 && (
GetValue(
true, aInstance,
false ) != symbol->
GetValue(
true, aInstance,
false ) ) )
2349 for(
size_t i = 0; i <
m_pins.size(); i++ )
2361 std::vector<VECTOR2I> retval;
2363 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2367 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2369 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2372 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2375 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2401 return wxString::Format(
_(
"Symbol %s [%s]" ),
2408 const std::vector<KICAD_T>& aScanTypes )
2410 for(
KICAD_T scanType : aScanTypes )
2416 if( INSPECT_RESULT::QUIT == aInspector(
this, aTestData ) )
2417 return INSPECT_RESULT::QUIT;
2424 if( INSPECT_RESULT::QUIT == aInspector( &field, (
void*)
this ) )
2425 return INSPECT_RESULT::QUIT;
2432 return INSPECT_RESULT::QUIT;
2439 return INSPECT_RESULT::QUIT;
2445 return INSPECT_RESULT::QUIT;
2451 return INSPECT_RESULT::QUIT;
2456 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2460 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2462 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2465 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2468 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2471 if( INSPECT_RESULT::QUIT == aInspector(
pin.get(), (
void*)
this ) )
2472 return INSPECT_RESULT::QUIT;
2477 return INSPECT_RESULT::CONTINUE;
2520 return !( *
this == aSymbol );
2526 wxCHECK_MSG(
Type() == aSymbol.
Type(), *
this,
2527 wxT(
"Cannot assign object type " ) + aSymbol.
GetClass() + wxT(
" to type " ) +
2530 if( &aSymbol !=
this )
2547 field.SetParent(
this );
2559 bBox.
Inflate( aAccuracy / 2 );
2575 rect.
Inflate( aAccuracy / 2 );
2588 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2590 if(
pin->GetType() == ELECTRICAL_PINTYPE::PT_NC )
2595 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2597 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2600 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2603 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2606 if(
pin->GetLocalPosition() == new_pos )
2621 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
2635 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2638 SCH_PIN* tempPin = tempPins[ i ];
2655 text->SetText(
dummy.GetShownText(
false ) );
2664 for(
bool local_background : {
true,
false } )
2671 field.ClearRenderCache();
2685 std::vector<wxString> properties;
2689 wxString text_field = field.GetShownText( sheet,
false);
2691 if( text_field.IsEmpty() )
2694 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2695 field.GetName(), text_field ) );
2698 if( !
m_part->GetKeyWords().IsEmpty() )
2700 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2702 m_part->GetKeyWords() ) );
2724 std::max( bbox.
GetY() - pins.
GetY(),
2728 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2729 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2738 strokeWidth,
FILLED,
nullptr );
2758 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2761 SCH_PIN* tempPin = tempPins[ i ];
2776 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2778 if(
pin->IsBrightened() )
2788 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2789 pin->ClearBrightened();
2800 wxCHECK(
m_part,
false );
2801 return m_part->GetShowPinNames();
2807 m_part->SetShowPinNames( aShow );
2812 wxCHECK(
m_part,
false );
2813 return m_part->GetShowPinNumbers();
2819 m_part->SetShowPinNumbers( aShow );
2825 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2827 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2829 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2832 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2835 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2838 if(
pin->IsPointClickableAnchor( aPos ) )
2857 if( pin_list.size() != 1 )
2860 return pin_list[0]->GetType() == ELECTRICAL_PINTYPE::PT_POWER_IN;
2866 wxCHECK(
m_part,
false );
2868 return m_part->IsPower();
2874 wxCHECK(
m_part,
false );
2876 return m_part->IsNormal();
2882 std::unordered_set<wxString> componentClass;
2884 auto getComponentClassFields = [&](
const auto& fields )
2888 if( field.GetCanonicalName() == wxT(
"Component Class" ) )
2890 if( field.GetShownText( aPath,
false ) != wxEmptyString )
2891 componentClass.insert( field.GetShownText( aPath,
false ) );
2897 getComponentClassFields(
m_fields );
2904 getComponentClassFields( label->GetFields() );
2908 return componentClass;
2940 for(
unsigned i = 0; i <
m_pins.size(); ++i )
2989 _HKI(
"Orientation" ),
3000 return symbol->GetLibSymbolRef() !=
nullptr;
3007 .SetAvailableFunc( hasLibPart );
3011 .SetAvailableFunc( hasLibPart );
3013 const wxString groupFields =
_HKI(
"Fields" );
3035 return symbol->IsMulti();
3040 auto multiBodyStyle =
3044 return symbol->HasAlternateBodyStyle();
3057 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
Color settings are a bit different than most of the settings objects in that there can be more than o...
COLOR4D GetColor(int aLayer) const
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Create an undo entry for an item that has been already modified.
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.
void Print(const SCH_RENDER_SETTINGS *aSettings, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aForceNoFill, bool aDimmed) override
Print an item.
std::vector< SCH_PIN * > GetPins(int aUnit=0, int aBodyStyle=0) const
Return a list of pin object pointers from the draw item list.
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)
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
A singleton reporter that reports to nowhere.
virtual SETTINGS_MANAGER & GetSettingsManager() const
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
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
FIELDS_AUTOPLACED 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's index
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.
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.
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)
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 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
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 assignements in sync i...
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
std::vector< SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve a list of the SCH_PINs for the given sheet path.
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
void SetTransform(const TRANSFORM &aTransform)
std::unique_ptr< LIB_SYMBOL > m_part
A flattened copy of the LIB_SYMBOL from the PROJECT'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
TRANSFORM & GetTransform()
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.
int GetOrientation() const
Get the display symbol orientation.
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.
BOX2I GetBodyAndPinsBoundingBox() const
Return a bounding box for the symbol body and pins but not the fields.
TRANSFORM m_transform
The rotation/mirror transformation.
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)
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 GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly)
Populate a std::vector with SCH_FIELDs.
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
Returns the component classes this symbol belongs in.
std::vector< std::unique_ptr< SCH_PIN > > m_pins
a SCH_PIN for every SCH_PIN (all units)
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
VECTOR2I GetPinPhysicalPosition(const SCH_PIN *Pin) const
BOX2I GetBodyBoundingBox() const
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
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
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
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' flaga.
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
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
#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.
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.
PGM_BASE & Pgm()
The global Program "get" accessor.
#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 LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
static struct SCH_SYMBOL_DESC _SCH_SYMBOL_DESC
@ SYM_ROTATE_COUNTERCLOCKWISE
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.
static const wxString GetDefaultFieldName(int aFieldNdx, bool aTranslateForHI=false)
Return a default symbol field name for field aFieldNdx for all components.
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".
@ MANDATORY_FIELDS
The first 5 are mandatory, and must be instantiated in SCH_COMPONENT and LIB_PART constructors.
@ 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