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 auto& [fieldId, fieldValue] : aSel.
Fields )
122 if( fieldId == FIELD_T::REFERENCE )
123 SetRef( aSheet, fieldValue );
125 field->SetText( fieldValue );
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 );
224 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
226 if( ( (
pin->GetPosition().x -
m_pos.
x ) % min_grid_size ) != 0 )
229 if( ( (
pin->GetPosition().y -
m_pos.
y ) % min_grid_size ) != 0 )
254 wxCHECK2( !aLibSymbol || aLibSymbol->
IsRoot(), aLibSymbol =
nullptr );
256 m_part.reset( aLibSymbol );
264 return m_part->GetDescription();
266 return wxEmptyString;
273 return m_part->GetKeyWords();
275 return wxEmptyString;
282 return m_part->GetDatasheetField().GetText();
284 return wxEmptyString;
290 std::map<wxString, wxString> altPinMap;
291 std::map<wxString, std::set<SCH_PIN*>> pinUuidMap;
292 std::set<SCH_PIN*> unassignedSchPins;
293 std::set<SCH_PIN*> unassignedLibPins;
295 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
297 pinUuidMap[
pin->GetNumber() ].insert(
pin.get() );
299 unassignedSchPins.insert(
pin.get() );
301 if( !
pin->GetAlt().IsEmpty() )
302 altPinMap[
pin->GetNumber() ] =
pin->GetAlt();
304 pin->SetLibPin(
nullptr );
321 auto ii = pinUuidMap.find( libPin->GetNumber() );
323 if( ii == pinUuidMap.end() || ii->second.empty() )
325 unassignedLibPins.insert( libPin );
329 auto it = ii->second.begin();
331 ii->second.erase( it );
332 pin->SetLibPin( libPin );
333 pin->SetPosition( libPin->GetPosition() );
335 unassignedSchPins.erase(
pin );
337 auto iii = altPinMap.find( libPin->GetNumber() );
339 if( iii != altPinMap.end() )
340 pin->SetAlt( iii->second );
346 for(
SCH_PIN* libPin : unassignedLibPins )
351 if( !unassignedSchPins.empty() )
353 auto it = unassignedSchPins.begin();
355 unassignedSchPins.erase( it );
360 pin =
m_pins.emplace_back( std::make_unique<SCH_PIN>(
SCH_PIN(
this, libPin ) ) ).get();
364 pin->SetLibPin( libPin );
365 pin->SetPosition( libPin->GetPosition() );
366 pin->SetNumber( libPin->GetNumber() );
368 auto iii = altPinMap.find( libPin->GetNumber() );
370 if( iii != altPinMap.end() )
371 pin->SetAlt( iii->second );
375 for(
auto it1 =
m_pins.begin(); it1 !=
m_pins.end() && !unassignedSchPins.empty(); )
377 auto it2 = unassignedSchPins.find( it1->get() );
379 if( it2 != unassignedSchPins.end() )
381 it1 =
m_pins.erase( it1 );
382 unassignedSchPins.erase( it2 );
393 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
429 return m_part->HasAlternateBodyStyle();
438 return m_part->GetUnitCount();
447 return m_part->GetUnitDisplayName( aUnit, aLabel );
449 return wxString::Format(
_(
"Unit %s" ),
SubReference( aUnit ) );
458 return m_part->GetBodyStyleDescription( aBodyStyle, aLabel );
459 else if( aBodyStyle == BODY_STYLE::DEMORGAN )
460 return aLabel ?
_(
"Alternate" ) : wxString(
_HKI(
"Alternate" ) );
461 else if( aBodyStyle == BODY_STYLE::BASE )
462 return aLabel ?
_(
"Standard" ) : wxString(
_HKI(
"Standard" ) );
469 bool aTestFromEnd )
const
475 if( instance.m_Path == aSheetPath )
477 aInstance = instance;
481 else if( instance.m_Path.EndsWith( aSheetPath ) )
483 aInstance = instance;
508 " reference %s, unit %d from symbol %s." ),
566 if( instance.m_Path ==
path )
568 ref = instance.m_Reference;
578 if( ref.IsEmpty() && !
GetField( FIELD_T::REFERENCE )->GetText().IsEmpty() )
608 if( instance.m_Path ==
path )
611 instance.m_Reference = ref;
619 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
620 pin->ClearDefaultNetName( sheet );
642 if( instance.m_Path ==
path )
643 return !instance.m_Reference.IsEmpty() && instance.m_Reference.Last() !=
'?';
654 refDesignator.Replace(
"~",
" " );
656 wxString prefix = refDesignator;
658 while( prefix.Length() )
660 wxUniCharRef last = prefix.Last();
662 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
670 prefix.Trim(
false );
672 if( !prefix.IsEmpty() )
680 return schematic->Settings().SubReference( aUnit, aAddSeparator );
692 if( instance.m_Path ==
path )
693 return instance.m_Unit;
709 if( instance.m_Path ==
path )
711 instance.m_Unit = aUnitSelection;
724 instance.m_Unit = aUnitSelection;
729 bool aAllowExtraText )
const
745 bool aAllowExtraText )
const
765 m_fields.emplace_back(
this, aFieldType );
794 if( !field.IsVisible() || field.GetText().IsEmpty() )
798 aVector.push_back(
const_cast<SCH_FIELD*
>( &field ) );
801 std::sort( aVector.begin(), aVector.end(),
804 return lhs->GetOrdinal() < rhs->GetOrdinal();
824 for(
unsigned ii = 0; ii <
m_fields.size(); ++ii )
829 if( aFieldName ==
m_fields[ii].GetName(
false ) )
842 if( field.GetName().IsSameAs( aFieldName,
false ) )
851 bool aUpdateOtherFields,
bool aResetRef,
bool aResetOtherFields )
855 std::vector<SCH_FIELD*> fields;
856 m_part->GetFields( fields );
858 for(
const SCH_FIELD* libField : fields )
861 FIELD_T fieldType = FIELD_T::USER;
863 if( libField->IsMandatory() )
865 fieldType = libField->
GetId();
870 schField =
GetField( libField->GetCanonicalName() );
874 schField =
AddField(
SCH_FIELD(
this, FIELD_T::USER, libField->GetCanonicalName() ) );
880 schField->
SetPrivate( libField->IsPrivate() );
888 if( fieldType == FIELD_T::REFERENCE && aPath )
891 SetRef( aPath,
m_part->GetField( FIELD_T::REFERENCE )->GetText() );
892 else if( aUpdateRef )
893 SetRef( aPath, libField->GetText() );
895 else if( fieldType == FIELD_T::VALUE )
899 else if( fieldType == FIELD_T::DATASHEET )
901 if( aResetOtherFields )
903 else if( aUpdateOtherFields )
904 schField->
SetText( libField->GetText() );
908 if( aResetOtherFields || aUpdateOtherFields )
909 schField->
SetText( libField->GetText() );
919 bool updateValue =
true;
920 bool updateExclFromBOM =
true;
921 bool updateExclFromBoard =
true;
922 bool updateDNP =
true;
923 bool updateOtherFields =
true;
924 bool updatePins =
true;
928 updateValue = aProperty->
Name() ==
_HKI(
"Value" );
929 updateExclFromBoard = aProperty->
Name() ==
_HKI(
"Exclude From Board" );
930 updateExclFromBOM = aProperty->
Name() ==
_HKI(
"Exclude From Bill of Materials" );
931 updateDNP = aProperty->
Name() ==
_HKI(
"Do not Populate" );
932 updateOtherFields =
false;
937 && !updateExclFromBOM
938 && !updateExclFromBoard
940 && !updateOtherFields
950 wxString ref =
GetRef( &aSourceSheet );
955 std::vector<SCH_SYMBOL*> otherUnits;
961 aCommit.
Modify( otherUnit, screen );
964 otherUnit->SetValueFieldText(
GetField( FIELD_T::VALUE )->GetText() );
966 if( updateOtherFields )
970 if( field.GetId() == FIELD_T::REFERENCE || field.GetId() == FIELD_T::VALUE )
978 if( field.IsMandatory() )
979 otherField = otherUnit->GetField( field.GetId() );
981 otherField = otherUnit->GetField( field.GetName() );
985 otherField->
SetText( field.GetText() );
993 newField.
Offset( otherUnit->GetPosition() );
996 otherUnit->AddField( newField );
1000 for(
int ii = (
int) otherUnit->GetFields().size() - 1; ii >= 0; ii-- )
1002 SCH_FIELD& otherField = otherUnit->GetFields()[ii];
1005 otherUnit->GetFields().erase( otherUnit->GetFields().begin() + ii );
1009 if( updateExclFromBOM )
1012 if( updateExclFromBoard )
1016 otherUnit->SetDNP(
m_DNP );
1020 for(
const std::unique_ptr<SCH_PIN>& model_pin :
m_pins )
1022 SCH_PIN* src_pin = otherUnit->GetPin( model_pin->GetNumber() );
1025 src_pin->
SetAlt( model_pin->GetAlt() );
1036 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1037 aFunction(
pin.get() );
1040 aFunction( &field );
1046 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1048 if(
pin->GetNumber() == aNumber )
1058 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1060 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
1062 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
1065 if( pin_unit > 0 && pin_unit !=
GetUnit() )
1068 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
1071 if(
pin->GetPosition() == aPos )
1084 return std::vector<SCH_PIN*>();
1091 return m_part->GetPins();
1093 return std::vector<SCH_PIN*>();
1105 auto it =
m_pinMap.find( aLibPin );
1110 wxFAIL_MSG_AT(
"Pin not found", __FILE__, __LINE__, __FUNCTION__ );
1117 std::vector<SCH_PIN*> pins;
1126 for(
const std::unique_ptr<SCH_PIN>& p :
m_pins )
1128 if( unit && p->GetLibPin() && p->GetLibPin()->GetUnit()
1129 && ( p->GetLibPin()->GetUnit() != unit ) )
1134 pins.push_back( p.get() );
1150 wxT(
"Cannot swap data with invalid symbol." ) );
1158 for( std::unique_ptr<SCH_PIN>&
pin : symbol->
m_pins )
1159 pin->SetParent( symbol );
1161 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1162 pin->SetParent(
this );
1167 m_part.reset( libSymbol );
1201 if( field.IsPrivate() )
1204 if( field.IsMandatory() )
1205 aVars->push_back( field.GetCanonicalName().Upper() );
1207 aVars->push_back( field.GetName() );
1210 aVars->push_back( wxT(
"OP" ) );
1211 aVars->push_back( wxT(
"FOOTPRINT_LIBRARY" ) );
1212 aVars->push_back( wxT(
"FOOTPRINT_NAME" ) );
1213 aVars->push_back( wxT(
"UNIT" ) );
1214 aVars->push_back( wxT(
"SHORT_REFERENCE" ) );
1215 aVars->push_back( wxT(
"SYMBOL_LIBRARY" ) );
1216 aVars->push_back( wxT(
"SYMBOL_NAME" ) );
1217 aVars->push_back( wxT(
"SYMBOL_DESCRIPTION" ) );
1218 aVars->push_back( wxT(
"SYMBOL_KEYWORDS" ) );
1219 aVars->push_back( wxT(
"EXCLUDE_FROM_BOM" ) );
1220 aVars->push_back( wxT(
"EXCLUDE_FROM_BOARD" ) );
1221 aVars->push_back( wxT(
"EXCLUDE_FROM_SIM" ) );
1222 aVars->push_back( wxT(
"DNP" ) );
1223 aVars->push_back( wxT(
"SHORT_NET_NAME(<pin_number>)" ) );
1224 aVars->push_back( wxT(
"NET_NAME(<pin_number>)" ) );
1225 aVars->push_back( wxT(
"NET_CLASS(<pin_number>)" ) );
1226 aVars->push_back( wxT(
"PIN_NAME(<pin_number>)" ) );
1232 static wxRegEx operatingPoint( wxT(
"^"
1239 wxCHECK( aPath,
false );
1246 if( operatingPoint.Matches( *token ) )
1248 wxString
pin( operatingPoint.GetMatch( *token, 1 ).Lower() );
1249 wxString precisionStr( operatingPoint.GetMatch( *token, 3 ) );
1250 wxString rangeStr( operatingPoint.GetMatch( *token, 4 ) );
1252 int precision = precisionStr.IsEmpty() ? 3 : precisionStr[0] -
'0';
1253 wxString range = rangeStr.IsEmpty() ? wxString( wxS(
"~A" ) ) : rangeStr;
1257 std::vector<EMBEDDED_FILES*> embeddedFilesStack;
1261 embeddedFilesStack.push_back(
m_part->GetEmbeddedFiles() );
1267 true, aDepth + 1, devnull ).model;
1272 spiceRef = spiceRef.Lower();
1279 else if(
pin == wxS(
":power" ) )
1281 if( rangeStr.IsEmpty() )
1282 range = wxS(
"~W" );
1284 *token = schematic->
GetOperatingPoint( spiceRef + wxS(
":power" ), precision, range );
1289 pin =
pin.SubString( 1, -1 );
1291 for(
const std::reference_wrapper<const SIM_MODEL_PIN>& modelPin : model.
GetPins() )
1293 SCH_PIN* symbolPin =
GetPin( modelPin.get().symbolPinNumber );
1297 if( model.
GetPins().size() == 2 )
1303 wxString signalName = spiceRef + wxS(
":" ) + modelPin.get().modelPinName;
1312 *token = wxS(
"?" );
1316 if( token->Contains(
':' ) )
1324 wxString fieldName = field.IsMandatory() ? field.GetCanonicalName()
1327 wxString textToken = field.GetText();
1328 textToken.Replace(
" ", wxEmptyString );
1329 wxString tokenString =
"${" + fieldName +
"}";
1332 if( textToken.IsSameAs( tokenString,
false ) )
1335 if( token->IsSameAs( fieldName,
false ) )
1337 if( field.GetId() == FIELD_T::REFERENCE )
1338 *token =
GetRef( aPath,
true );
1340 *token = field.GetShownText( aPath,
false, aDepth + 1 );
1347 if( token->IsSameAs( wxT(
"SIM.DEVICE" ) )
1348 || token->IsSameAs( wxT(
"SIM.TYPE" ) )
1349 || token->IsSameAs( wxT(
"SIM.PINS" ) )
1350 || token->IsSameAs( wxT(
"SIM.PARAMS" ) )
1351 || token->IsSameAs( wxT(
"SIM.LIBRARY" ) )
1352 || token->IsSameAs( wxT(
"SIM.NAME" ) ) )
1354 *token = wxEmptyString;
1361 if( token->IsSameAs( templateFieldname.m_Name )
1362 || token->IsSameAs( templateFieldname.m_Name.Upper() ) )
1366 *token = wxEmptyString;
1371 if( token->IsSameAs( wxT(
"FOOTPRINT_LIBRARY" ) ) )
1375 wxArrayString parts = wxSplit( footprint,
':' );
1377 if( parts.Count() > 0 )
1378 *token = parts[ 0 ];
1380 *token = wxEmptyString;
1384 else if( token->IsSameAs( wxT(
"FOOTPRINT_NAME" ) ) )
1388 wxArrayString parts = wxSplit( footprint,
':' );
1390 if( parts.Count() > 1 )
1391 *token = parts[ std::min( 1, (
int) parts.size() - 1 ) ];
1393 *token = wxEmptyString;
1397 else if( token->IsSameAs( wxT(
"UNIT" ) ) )
1402 else if( token->IsSameAs( wxT(
"SHORT_REFERENCE" ) ) )
1404 *token =
GetRef( aPath,
false );
1407 else if( token->IsSameAs( wxT(
"SYMBOL_LIBRARY" ) ) )
1412 else if( token->IsSameAs( wxT(
"SYMBOL_NAME" ) ) )
1417 else if( token->IsSameAs( wxT(
"SYMBOL_DESCRIPTION" ) ) )
1422 else if( token->IsSameAs( wxT(
"SYMBOL_KEYWORDS" ) ) )
1427 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
1429 *token = wxEmptyString;
1432 *token =
_(
"Excluded from BOM" );
1436 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
1438 *token = wxEmptyString;
1441 *token =
_(
"Excluded from board" );
1445 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
1447 *token = wxEmptyString;
1450 *token =
_(
"Excluded from simulation" );
1454 else if( token->IsSameAs( wxT(
"DNP" ) ) )
1456 *token = wxEmptyString;
1458 if( aPath->
GetDNP() || this->ResolveDNP() )
1459 *token =
_(
"DNP" );
1463 else if( token->StartsWith( wxT(
"SHORT_NET_NAME(" ) )
1464 || token->StartsWith( wxT(
"NET_NAME(" ) )
1465 || token->StartsWith( wxT(
"NET_CLASS(" ) )
1466 || token->StartsWith( wxT(
"PIN_NAME(" ) ) )
1468 wxString pinNumber = token->AfterFirst(
'(' );
1469 pinNumber = pinNumber.BeforeLast(
')' );
1473 if(
pin->GetNumber() == pinNumber )
1475 if( token->StartsWith( wxT(
"PIN_NAME" ) ) )
1477 *token =
pin->GetAlt().IsEmpty() ?
pin->GetName() :
pin->GetAlt();
1484 *token = wxEmptyString;
1485 else if( token->StartsWith( wxT(
"SHORT_NET_NAME" ) ) )
1487 else if( token->StartsWith( wxT(
"NET_NAME" ) ) )
1488 *token = conn->
Name();
1489 else if( token->StartsWith( wxT(
"NET_CLASS" ) ) )
1490 *token =
pin->GetEffectiveNetClass( aPath )->GetName();
1513 if( instance.m_Path ==
path )
1515 if( instance.m_Reference.IsEmpty() || aResetPrefix )
1526 if( instance.m_Reference.IsEmpty() || aResetPrefix)
1533 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1534 pin->ClearDefaultNetName( aSheetPath );
1540 wxString currentReference =
GetField( FIELD_T::REFERENCE )->
GetText();
1542 if( currentReference.IsEmpty() || aResetPrefix )
1552 wxCHECK( aSheetPath.size() > 0,
false );
1557 if( instance.m_Path == aSheetPath )
1570 bool transform =
false;
1572 switch( aOrientation )
1693 wxFAIL_MSG(
"Invalid schematic symbol orientation type." );
1729 int rotate_values[] =
1750 for(
int type_rotate : rotate_values )
1762 wxFAIL_MSG(
"Schematic symbol orientation matrix internal error." );
1770void SCH_SYMBOL::Show(
int nestLevel, std::ostream& os )
const
1773 NestedSpace( nestLevel, os ) <<
'<' <<
GetClass().Lower().mb_str()
1775 <<
'"' <<
" chipName=\""
1781 for(
int i = 1; i < (int)
GetFields().size(); ++i )
1783 const wxString& value =
GetFields()[i].GetText();
1785 if( !value.IsEmpty() )
1787 NestedSpace( nestLevel + 1, os ) <<
"<field" <<
" name=\""
1789 <<
'"' <<
" value=\""
1790 <<
TO_UTF8( value ) <<
"\"/>\n";
1794 NestedSpace( nestLevel, os ) <<
"</" <<
TO_UTF8(
GetClass().Lower() ) <<
">\n";
1815 if( aIncludeFields )
1819 if( field.IsVisible() )
1820 bBox.
Merge( field.GetBoundingBox() );
1834 catch(
const boost::bad_pointer& e )
1836 wxFAIL_MSG( wxString::Format( wxT(
"Boost pointer exception occurred: %s" ), e.what() ) );
1867 msgs.Add(
_(
"Simulation" ) );
1870 msgs.Add(
_(
"BOM" ) );
1873 msgs.Add(
_(
"Board" ) );
1876 msgs.Add(
_(
"DNP" ) );
1878 msg = wxJoin( msgs,
'|' );
1879 msg.Replace(
'|', wxS(
", " ) );
1882 aList.emplace_back(
_(
"Exclude from" ), msg );
1893 aList.emplace_back(
_(
"Power symbol" ),
1898 aList.emplace_back(
_(
"Reference" ),
1902 aList.emplace_back(
_(
"Value" ),
1905 aList.emplace_back(
_(
"Name" ),
1911 aList.emplace_back(
_(
"flags" ), wxString::Format(
"%X",
GetEditFlags() ) );
1916 msg =
_(
"Missing parent" );
1918 std::shared_ptr< LIB_SYMBOL > parent =
m_part->GetParent().lock();
1921 msg = parent->GetName();
1931 aList.emplace_back(
_(
"Library" ),
_(
"Undefined!!!" ) );
1939 msg =
_(
"<Unknown>" );
1941 aList.emplace_back(
_(
"Footprint" ), msg );
1944 aList.emplace_back(
_(
"Description" ) + wxT(
": " )
1945 +
GetField( FIELD_T::DESCRIPTION )->GetText(),
1946 _(
"Keywords" ) + wxT(
": " ) +
m_part->GetKeyWords() );
1951 aList.emplace_back(
_(
"Reference" ),
GetRef( currentSheet ) );
1954 aList.emplace_back(
_(
"Value" ),
1957 aList.emplace_back(
_(
"Name" ),
1962 if( libNickname.empty() )
1963 msg =
_(
"No library defined!" );
1965 msg.Printf(
_(
"Symbol not found in %s!" ), libNickname );
1967 aList.emplace_back(
_(
"Library" ), msg );
1974 return BITMAPS::add_component;
1997 field.SetTextPos( pos );
2015 field.SetTextPos( pos );
2034 field.SetTextPos( pos );
2055 if( drawItem.Matches( aSearchData, aAuxData ) )
2066 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2074 aItemList.push_back( item );
2080 std::vector<DANGLING_END_ITEM>& aItemListByPos,
2083 bool changed =
false;
2085 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2087 bool previousState =
pin->IsDangling();
2088 pin->SetIsDangling(
true );
2093 bool do_break =
false;
2095 for(
auto it = lower; it < aItemListByPos.end() && it->GetPosition() == pos; it++ )
2114 pin->SetIsDangling(
false );
2126 changed = ( changed || ( previousState !=
pin->IsDangling() ) );
2152 wxCHECK( symbol,
false );
2158 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2160 if(
pin->IsDangling() )
2173 if(
GetRef( aInstance ) != symbol->
GetRef( aInstance ) )
2178 && (
GetValue(
true, aInstance,
false ) != symbol->
GetValue(
true, aInstance,
false ) ) )
2184 for(
size_t i = 0; i <
m_pins.size(); i++ )
2196 std::vector<VECTOR2I> retval;
2198 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2202 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2204 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2207 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2210 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2236 return wxString::Format(
_(
"Symbol %s [%s]" ),
2243 const std::vector<KICAD_T>& aScanTypes )
2245 for(
KICAD_T scanType : aScanTypes )
2250 if( INSPECT_RESULT::QUIT == aInspector(
this, aTestData ) )
2251 return INSPECT_RESULT::QUIT;
2258 if( INSPECT_RESULT::QUIT == aInspector( &field, (
void*)
this ) )
2259 return INSPECT_RESULT::QUIT;
2265 if( INSPECT_RESULT::QUIT == aInspector(
GetField( FIELD_T::REFERENCE ), (
void*)
this ) )
2266 return INSPECT_RESULT::QUIT;
2272 if( INSPECT_RESULT::QUIT == aInspector(
GetField( FIELD_T::VALUE ), (
void*)
this ) )
2273 return INSPECT_RESULT::QUIT;
2278 if( INSPECT_RESULT::QUIT == aInspector(
GetField( FIELD_T::FOOTPRINT ), (
void*)
this ) )
2279 return INSPECT_RESULT::QUIT;
2284 if( INSPECT_RESULT::QUIT == aInspector(
GetField( FIELD_T::DATASHEET ), (
void*)
this ) )
2285 return INSPECT_RESULT::QUIT;
2290 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2294 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2296 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2299 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2302 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2305 if( INSPECT_RESULT::QUIT == aInspector(
pin.get(), (
void*)
this ) )
2306 return INSPECT_RESULT::QUIT;
2311 return INSPECT_RESULT::CONTINUE;
2339 std::vector<SCH_FIELD*> fields, otherFields;
2342 aSymbol.
GetFields( otherFields,
false );
2344 if( fields.size() != otherFields.size() )
2347 for(
int ii = 0; ii < (int) fields.size(); ii++ )
2349 if( fields[ii]->GetId() == FIELD_T::REFERENCE )
2352 if( fields[ii]->GetText().Cmp( otherFields[ii]->GetText() ) != 0 )
2362 return !( *
this == aSymbol );
2368 wxCHECK_MSG(
Type() == aSymbol.
Type(), *
this,
2369 wxT(
"Cannot assign object type " ) + aSymbol.
GetClass() + wxT(
" to type " ) +
2372 if( &aSymbol !=
this )
2389 field.SetParent(
this );
2401 bBox.
Inflate( aAccuracy / 2 );
2417 rect.
Inflate( aAccuracy / 2 );
2430 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2432 if(
pin->GetType() == ELECTRICAL_PINTYPE::PT_NC )
2437 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2439 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2442 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2445 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2448 if(
pin->GetLocalPosition() == new_pos )
2463 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
2477 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2480 SCH_PIN* tempPin = tempPins[ i ];
2497 text->SetText(
dummy.GetShownText(
false ) );
2506 for(
bool local_background : {
true,
false } )
2513 field.ClearRenderCache();
2527 std::vector<wxString> properties;
2531 wxString text_field = field.GetShownText( sheet,
false);
2533 if( text_field.IsEmpty() )
2536 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2537 field.GetName(), text_field ) );
2540 if( !
m_part->GetKeyWords().IsEmpty() )
2542 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2544 m_part->GetKeyWords() ) );
2565 std::max( bbox.
GetY() - pins.
GetY(),
2569 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2570 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2580 strokeWidth,
nullptr );
2600 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2603 SCH_PIN* tempPin = tempPins[ i ];
2618 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2620 if(
pin->IsBrightened() )
2630 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2631 pin->ClearBrightened();
2649 m_part->SetShowPinNames( aShow );
2662 m_part->SetShowPinNumbers( aShow );
2668 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2670 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2672 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2675 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2678 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2681 if(
pin->IsPointClickableAnchor( aPos ) )
2700 if( pin_list.size() != 1 )
2703 return pin_list[0]->GetType() == ELECTRICAL_PINTYPE::PT_POWER_IN;
2718 if( pin_list.size() != 1 )
2721 return pin_list[0]->GetType() == ELECTRICAL_PINTYPE::PT_POWER_IN;
2730 return m_part->IsLocalPower();
2739 return m_part->IsGlobalPower();
2751 wxCHECK(
m_part,
false );
2753 return m_part->IsNormal();
2759 std::unordered_set<wxString> componentClass;
2761 auto getComponentClassFields =
2762 [&](
const std::vector<SCH_FIELD>& fields )
2766 if( field.GetCanonicalName() == wxT(
"Component Class" ) )
2768 if( field.GetShownText( aPath,
false ) != wxEmptyString )
2769 componentClass.insert( field.GetShownText( aPath,
false ) );
2775 getComponentClassFields(
m_fields );
2782 getComponentClassFields( label->GetFields() );
2786 return componentClass;
2818 for(
unsigned i = 0; i <
m_pins.size(); ++i )
2867 _HKI(
"Orientation" ),
2878 return symbol->GetLibSymbolRef() !=
nullptr;
2885 .SetAvailableFunc( hasLibPart );
2889 .SetAvailableFunc( hasLibPart );
2891 const wxString groupFields =
_HKI(
"Fields" );
2913 return symbol->IsMulti();
2918 auto multiBodyStyle =
2922 return symbol->HasAlternateBodyStyle();
2932 wxPGChoices choices;
2936 for(
int ii = 1; ii <= symbol->GetUnitCount(); ii++ )
2937 choices.Add( symbol->GetUnitDisplayName( ii,
false ) );
2948 wxPGChoices choices;
2952 for(
int ii : { BODY_STYLE::BASE, BODY_STYLE::DEMORGAN } )
2953 choices.Add( symbol->GetBodyStyleDescription( ii,
false ) );
2959 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, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
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 bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
virtual void SetParentGroup(EDA_GROUP *aGroup)
virtual void SetParent(EDA_ITEM *aParent)
EDA_ITEM * m_parent
Owner.
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.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
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.
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, wxChar aInitialLetter)
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 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 ThickSegment(const VECTOR2I &start, const VECTOR2I &end, int width, void *aData)
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 & SetChoicesFunc(std::function< wxPGChoices(INSPECTABLE *)> aFunc)
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.
wxString GetOperatingPoint(const wxString &aNetName, int aPrecision, const wxString &aRange)
SCHEMATIC_SETTINGS & Settings() const
PROJECT & Project() const
Return a reference to the project this schematic is part of.
EMBEDDED_FILES * GetEmbeddedFiles() override
SCH_SHEET_PATH & CurrentSheet() const
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
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.
virtual void SetExcludedFromBOM(bool aExcludeFromBOM)
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 SetAlt(const wxString &aAlt)
Set the name of the alternate pin.
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.
wxString GetUnitDisplayName(int aUnit, bool aLabel) const override
Return the display name for a given unit aUnit.
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.
wxString GetDescription() const override
std::unordered_map< SCH_PIN *, SCH_PIN * > m_pinMap
Library pin pointer : SCH_PIN indices.
void SetMirrorX(bool aMirror)
bool IsSymbolLikePowerGlobalLabel() const
EMBEDDED_FILES * GetEmbeddedFiles() override
SCH_SYMBOLs don't currently support embedded files, but their LIB_SYMBOL counterparts do.
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 reference to the vector holding the symbol's fields.
BOX2I GetBodyAndPinsBoundingBox() const override
Return a bounding box for the symbol body and pins but not the fields.
wxString GetBodyStyleProp() const override
void SetRefProp(const wxString &aRef)
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
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 SetBodyStyleProp(const wxString &aBodyStyle) override
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 SetShowPinNames(bool aShow) override
Set or clear the pin name visibility flag.
wxString GetKeyWords() const override
wxString GetSchSymbolLibraryName() const
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.
bool IsGlobalPower() const override
wxString GetRefProp() const
wxString GetBodyStyleDescription(int aBodyStyle, bool aLabel) const override
bool AddSheetPathReferenceEntryIfMissing(const KIID_PATH &aSheetPath)
Add an instance to the alternate references list (m_instanceReferences), if this entry does not alrea...
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...
SCH_FIELD * FindFieldCaseInsensitive(const wxString &aFieldName)
Search for a SCH_FIELD with aFieldName.
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
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
const wxString GetFootprintFieldText(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
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.
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this symbol.
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
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.
wxString GetUnitProp() const override
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
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
bool IsLocalPower() const override
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
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.
bool IsSymbolLikePowerLocalLabel() const
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.
void SetUnitProp(const wxString &aUnit) override
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
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
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
SIM_MODEL & CreateModel(SIM_MODEL::TYPE aType, const std::vector< SCH_PIN * > &aPins, REPORTER &aReporter)
void SetFilesStack(std::vector< EMBEDDED_FILES * > aFilesStack)
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'.
void SetExcludedFromBoard(bool aExcludeFromBoard) override
Set or clear exclude from board netlist flag.
virtual void SetShowPinNumbers(bool aShow)
Set or clear the pin number visibility flag.
void SetDNP(bool aDNP) override
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 GetExcludedFromBoard() const override
void SetExcludedFromBOM(bool aExcludeFromBOM) override
Set or clear the exclude from schematic bill of materials flag.
virtual bool GetShowPinNames() const
bool GetDNP() const override
Set or clear the 'Do Not Populate' flag.
SYMBOL & operator=(const SYMBOL &aItem)
virtual bool GetShowPinNumbers() const
TRANSFORM m_transform
The rotation/mirror transformation.
bool GetExcludedFromBOM() const override
bool GetExcludedFromSim() const override
const std::vector< TEMPLATE_FIELDNAME > & 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
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)
void CollectOtherUnits(const wxString &aRef, int aUnit, const LIB_ID &aLibId, SCH_SHEET_PATH &aSheet, std::vector< SCH_SYMBOL * > *otherUnits)
const SCH_FIELD * FindField(const std::vector< SCH_FIELD > &aFields, FIELD_T aFieldId)
int NextFieldOrdinal(const std::vector< SCH_FIELD > &aFields)
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< FIELD_T, 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
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
wxString GetCanonicalFieldName(FIELD_T aFieldType)
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