54 std::string ret =
TO_UTF8( txt );
58 if( (
unsigned char) c <=
' ' )
113 std::unique_ptr< LIB_SYMBOL > part;
142 SCH_SYMBOL( aSymbol, aSel.LibId, aSheet, aSel.Unit, aSel.
Convert, aPosition, aParent )
145 for(
const std::pair<int, wxString>& i : aSel.
Fields )
148 SetRef( aSheet, i.second );
150 field->SetText( i.second );
175 field.SetParent(
this );
180 for(
const std::unique_ptr<SCH_PIN>&
pin : aSymbol.
m_pins )
182 m_pins.emplace_back( std::make_unique<SCH_PIN>( *
pin ) );
183 m_pins.back()->SetParent(
this );
247 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
249 if( ( (
pin->GetPosition().x -
m_pos.
x ) % min_grid_size ) != 0 )
252 if( ( (
pin->GetPosition().y -
m_pos.
y ) % min_grid_size ) != 0 )
277 wxCHECK2( !aLibSymbol || aLibSymbol->
IsRoot(), aLibSymbol =
nullptr );
279 m_part.reset( aLibSymbol );
287 return m_part->GetDescription();
289 return wxEmptyString;
296 return m_part->GetKeyWords();
298 return wxEmptyString;
305 return m_part->GetDatasheetField().GetText();
307 return wxEmptyString;
313 std::map<wxString, wxString> altPinMap;
314 std::map<wxString, std::set<SCH_PIN*>> pinUuidMap;
315 std::set<SCH_PIN*> unassignedSchPins;
316 std::set<SCH_PIN*> unassignedLibPins;
318 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
320 pinUuidMap[
pin->GetNumber() ].insert(
pin.get() );
322 unassignedSchPins.insert(
pin.get() );
324 if( !
pin->GetAlt().IsEmpty() )
325 altPinMap[
pin->GetNumber() ] =
pin->GetAlt();
327 pin->SetLibPin(
nullptr );
344 auto ii = pinUuidMap.find( libPin->GetNumber() );
346 if( ii == pinUuidMap.end() || ii->second.empty() )
348 unassignedLibPins.insert( libPin );
352 auto it = ii->second.begin();
354 ii->second.erase( it );
355 pin->SetLibPin( libPin );
356 pin->SetPosition( libPin->GetPosition() );
358 unassignedSchPins.erase(
pin );
360 auto iii = altPinMap.find( libPin->GetNumber() );
362 if( iii != altPinMap.end() )
363 pin->SetAlt( iii->second );
369 for(
SCH_PIN* libPin : unassignedLibPins )
374 if( !unassignedSchPins.empty() )
376 auto it = unassignedSchPins.begin();
378 unassignedSchPins.erase( it );
383 pin =
m_pins.emplace_back( std::make_unique<SCH_PIN>(
SCH_PIN(
this, libPin ) ) ).get();
387 pin->SetLibPin( libPin );
388 pin->SetPosition( libPin->GetPosition() );
389 pin->SetNumber( libPin->GetNumber() );
391 auto iii = altPinMap.find( libPin->GetNumber() );
393 if( iii != altPinMap.end() )
394 pin->SetAlt( iii->second );
398 for(
auto it1 =
m_pins.begin(); it1 !=
m_pins.end() && !unassignedSchPins.empty(); )
400 auto it2 = unassignedSchPins.find( it1->get() );
402 if( it2 != unassignedSchPins.end() )
404 it1 =
m_pins.erase( it1 );
405 unassignedSchPins.erase( it2 );
416 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
439 return m_part->HasAlternateBodyStyle();
454 return m_part->GetUnitCount();
464 return m_part->GetUnitDisplayName( aUnit );
472 return m_part->HasUnitDisplayName( aUnit );
477 const VECTOR2I& aOffset,
bool aDimmed )
494 const VECTOR2I& aOffset,
bool aForceNoFill,
bool aDimmed )
511 for(
unsigned i = 0; i < tempPins.size(); ++ i )
514 SCH_PIN* tempPin = tempPins[ i ];
528 text->SetText(
dummy.GetShownText(
false ) );
537 dummy()->Print( &localRenderSettings, 0, 0,
m_pos + aOffset, aForceNoFill, aDimmed );
541 field.Print( &localRenderSettings,
m_unit,
m_bodyStyle, aOffset, aForceNoFill, aDimmed );
552 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
553 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
569 const KIID_PATH& aSheetPath,
bool aTestFromEnd )
const
575 if( instance.m_Path == aSheetPath )
577 aInstance = instance;
581 else if( instance.m_Path.EndsWith( aSheetPath ) )
583 aInstance = instance;
607 " reference %s, unit %d from symbol %s." ),
629 " reference %s, unit %d from symbol %s." ),
670 std::vector<SCH_SYMBOL_INSTANCE>::iterator resultIt;
675 [searchPath](
const auto& it )
677 return it.m_Path == searchPath;
684 " reference %s, unit %d from symbol %s." ),
686 resultIt->m_Reference,
728 if( instance.m_Path ==
path )
730 ref = instance.m_Reference;
767 if( instance.m_Path ==
path )
770 instance.m_Reference = ref;
778 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
779 pin->ClearDefaultNetName( sheet );
801 if( instance.m_Path ==
path )
802 return instance.m_Reference.Last() !=
'?';
813 refDesignator.Replace(
"~",
" " );
815 wxString prefix = refDesignator;
817 while( prefix.Length() )
819 wxUniCharRef last = prefix.Last();
821 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
829 prefix.Trim(
false );
831 if( !prefix.IsEmpty() )
839 return schematic->Settings().SubReference( aUnit, aAddSeparator );
851 if( instance.m_Path ==
path )
852 return instance.m_Unit;
868 if( instance.m_Path ==
path )
870 instance.m_Unit = aUnitSelection;
883 instance.m_Unit = aUnitSelection;
888 bool aAllowExtraText )
const
904 bool aAllowExtraText )
const
935 if( field.GetId() == aFieldId )
947 if( field.GetName() == aFieldName )
959 if( field.GetName() == aFieldName )
973 if( !field.IsVisible() || field.GetText().IsEmpty() )
977 aVector.push_back( &field );
993 if( aFieldName ==
m_fields[i].GetName(
false ) )
1003 bool aCaseInsensitive )
1007 for(
unsigned i = start; i <
m_fields.size(); ++i )
1009 if( aCaseInsensitive )
1011 if( aFieldName.Upper() ==
m_fields[i].GetName(
false ).Upper() )
1016 if( aFieldName ==
m_fields[i].GetName(
false ) )
1026 bool aUpdateOtherFields,
bool aResetRef,
bool aResetOtherFields )
1030 std::vector<SCH_FIELD*> fields;
1031 m_part->GetFields( fields );
1033 for(
const SCH_FIELD* libField : fields )
1035 int id = libField->GetId();
1038 if( libField->IsMandatory() )
1044 schField =
FindField( libField->GetCanonicalName() );
1048 wxString fieldName = libField->GetCanonicalName();
1063 SetRef( aPath,
m_part->GetReferenceField().GetText() );
1064 else if( aUpdateRef )
1065 SetRef( aPath, libField->GetText() );
1073 if( aResetOtherFields || aUpdateOtherFields )
1078 if( aResetOtherFields )
1080 else if( aUpdateOtherFields )
1081 schField->
SetText( libField->GetText() );
1085 if( aResetOtherFields || aUpdateOtherFields )
1086 schField->
SetText( libField->GetText() );
1095 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1096 aFunction(
pin.get() );
1099 aFunction( &field );
1105 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1107 if(
pin->GetNumber() == aNumber )
1117 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1119 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
1121 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
1124 if( pin_unit > 0 && pin_unit !=
GetUnit() )
1127 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
1130 if(
pin->IsPointClickableAnchor( aPos ) )
1143 return std::vector<SCH_PIN*>();
1150 return m_part->GetAllLibPins();
1152 return std::vector<SCH_PIN*>();
1164 auto it =
m_pinMap.find( aLibPin );
1169 wxFAIL_MSG_AT(
"Pin not found", __FILE__, __LINE__, __FUNCTION__ );
1176 std::vector<SCH_PIN*> pins;
1178 if( aSheet ==
nullptr )
1180 wxCHECK_MSG(
Schematic(), pins,
"Can't call GetPins on a symbol with no schematic" );
1187 for(
const std::unique_ptr<SCH_PIN>& p :
m_pins )
1189 if( unit && p->GetLibPin() && p->GetLibPin()->GetUnit()
1190 && ( p->GetLibPin()->GetUnit() != unit ) )
1195 pins.push_back( p.get() );
1207 wxT(
"Cannot swap data with invalid symbol." ) );
1215 for( std::unique_ptr<SCH_PIN>&
pin : symbol->
m_pins )
1216 pin->SetParent( symbol );
1218 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1219 pin->SetParent(
this );
1224 m_part.reset( libSymbol );
1257 aVars->push_back(
m_fields[i].GetCanonicalName().Upper() );
1260 aVars->push_back(
m_fields[i].GetName() );
1262 aVars->push_back( wxT(
"OP" ) );
1263 aVars->push_back( wxT(
"FOOTPRINT_LIBRARY" ) );
1264 aVars->push_back( wxT(
"FOOTPRINT_NAME" ) );
1265 aVars->push_back( wxT(
"UNIT" ) );
1266 aVars->push_back( wxT(
"SYMBOL_LIBRARY" ) );
1267 aVars->push_back( wxT(
"SYMBOL_NAME" ) );
1268 aVars->push_back( wxT(
"SYMBOL_DESCRIPTION" ) );
1269 aVars->push_back( wxT(
"SYMBOL_KEYWORDS" ) );
1270 aVars->push_back( wxT(
"EXCLUDE_FROM_BOM" ) );
1271 aVars->push_back( wxT(
"EXCLUDE_FROM_BOARD" ) );
1272 aVars->push_back( wxT(
"EXCLUDE_FROM_SIM" ) );
1273 aVars->push_back( wxT(
"DNP" ) );
1274 aVars->push_back( wxT(
"SHORT_NET_NAME(<pin_number>)" ) );
1275 aVars->push_back( wxT(
"NET_NAME(<pin_number>)" ) );
1276 aVars->push_back( wxT(
"NET_CLASS(<pin_number>)" ) );
1277 aVars->push_back( wxT(
"PIN_NAME(<pin_number>)" ) );
1283 static wxRegEx operatingPoint( wxT(
"^"
1286 "(.([0-9])?([a-zA-Z]*))?"
1289 wxCHECK( aPath,
false );
1296 if( operatingPoint.Matches( *token ) )
1298 wxString
pin( operatingPoint.GetMatch( *token, 1 ).Lower() );
1299 wxString precisionStr( operatingPoint.GetMatch( *token, 3 ) );
1300 wxString range( operatingPoint.GetMatch( *token, 4 ) );
1303 if( !precisionStr.IsEmpty() )
1304 precision = precisionStr[0] -
'0';
1306 if( range.IsEmpty() )
1307 range = wxS(
"~A" );
1317 spiceRef = spiceRef.Lower();
1324 else if(
pin == wxS(
":power" ) )
1326 if( range.IsEmpty() )
1327 range = wxS(
"~W" );
1329 *token = schematic->
GetOperatingPoint( spiceRef + wxS(
":power" ), precision, range );
1334 pin =
pin.SubString( 1, -1 );
1336 for(
const std::reference_wrapper<const SIM_MODEL_PIN>& modelPin : model.
GetPins() )
1338 SCH_PIN* symbolPin =
GetPin( modelPin.get().symbolPinNumber );
1342 if( model.
GetPins().size() == 2 )
1348 wxString signalName = spiceRef + wxS(
":" ) + modelPin.get().modelPinName;
1357 *token = wxS(
"?" );
1361 if( token->Contains(
':' ) )
1367 wxString upperToken = token->Upper();
1371 wxString field =
m_fields[i].GetCanonicalName();
1373 wxString textToken =
m_fields[i].GetText();
1374 textToken.Replace(
" ", wxEmptyString );
1375 wxString tokenString =
"${" + field +
"}";
1378 if( textToken.IsSameAs( tokenString,
false ) )
1381 if( token->IsSameAs( field,
false ) )
1384 *token =
GetRef( aPath,
true );
1386 *token =
m_fields[ i ].GetShownText( aPath,
false, aDepth + 1 );
1394 wxString field =
m_fields[ i ].GetName();
1396 wxString textToken =
m_fields[i].GetText();
1397 textToken.Replace(
" ", wxEmptyString );
1398 wxString tokenString =
"${" + field +
"}";
1400 if( textToken.IsSameAs( tokenString,
false ) )
1403 if( token->IsSameAs( field,
false ) )
1405 *token =
m_fields[ i ].GetShownText( aPath,
false, aDepth + 1 );
1411 if( token->IsSameAs( wxT(
"SIM.DEVICE" ) )
1412 || token->IsSameAs( wxT(
"SIM.TYPE" ) )
1413 || token->IsSameAs( wxT(
"SIM.PINS" ) )
1414 || token->IsSameAs( wxT(
"SIM.PARAMS" ) )
1415 || token->IsSameAs( wxT(
"SIM.LIBRARY" ) )
1416 || token->IsSameAs( wxT(
"SIM.NAME" ) ) )
1418 *token = wxEmptyString;
1425 if( token->IsSameAs( templateFieldname.m_Name )
1426 || token->IsSameAs( templateFieldname.m_Name.Upper() ) )
1430 *token = wxEmptyString;
1435 if( token->IsSameAs( wxT(
"FOOTPRINT_LIBRARY" ) ) )
1439 wxArrayString parts = wxSplit( footprint,
':' );
1441 if( parts.Count() > 0 )
1442 *token = parts[ 0 ];
1444 *token = wxEmptyString;
1448 else if( token->IsSameAs( wxT(
"FOOTPRINT_NAME" ) ) )
1452 wxArrayString parts = wxSplit( footprint,
':' );
1454 if( parts.Count() > 1 )
1455 *token = parts[ std::min( 1, (
int) parts.size() - 1 ) ];
1457 *token = wxEmptyString;
1461 else if( token->IsSameAs( wxT(
"UNIT" ) ) )
1466 else if( token->IsSameAs( wxT(
"SYMBOL_LIBRARY" ) ) )
1471 else if( token->IsSameAs( wxT(
"SYMBOL_NAME" ) ) )
1476 else if( token->IsSameAs( wxT(
"SYMBOL_DESCRIPTION" ) ) )
1481 else if( token->IsSameAs( wxT(
"SYMBOL_KEYWORDS" ) ) )
1486 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
1488 *token = wxEmptyString;
1491 *token =
_(
"Excluded from BOM" );
1495 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
1497 *token = wxEmptyString;
1500 *token =
_(
"Excluded from board" );
1504 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
1506 *token = wxEmptyString;
1509 *token =
_(
"Excluded from simulation" );
1513 else if( token->IsSameAs( wxT(
"DNP" ) ) )
1515 *token = wxEmptyString;
1517 if( aPath->
GetDNP() || this->GetDNP() )
1518 *token =
_(
"DNP" );
1522 else if( token->StartsWith( wxT(
"SHORT_NET_NAME(" ) )
1523 || token->StartsWith( wxT(
"NET_NAME(" ) )
1524 || token->StartsWith( wxT(
"NET_CLASS(" ) )
1525 || token->StartsWith( wxT(
"PIN_NAME(" ) ) )
1527 wxString pinNumber = token->AfterFirst(
'(' );
1528 pinNumber = pinNumber.BeforeLast(
')' );
1532 if(
pin->GetNumber() == pinNumber )
1534 if( token->StartsWith( wxT(
"PIN_NAME" ) ) )
1536 *token =
pin->GetAlt().IsEmpty() ?
pin->GetName() :
pin->GetAlt();
1543 *token = wxEmptyString;
1544 else if( token->StartsWith( wxT(
"SHORT_NET_NAME" ) ) )
1546 else if( token->StartsWith( wxT(
"NET_NAME" ) ) )
1547 *token = conn->
Name();
1548 else if( token->StartsWith( wxT(
"NET_CLASS" ) ) )
1549 *token =
pin->GetEffectiveNetClass( aPath )->GetName();
1572 if( instance.m_Path ==
path )
1574 if( instance.m_Reference.IsEmpty() || aResetPrefix )
1585 if( instance.m_Reference.IsEmpty() || aResetPrefix)
1592 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1593 pin->ClearDefaultNetName( aSheetPath );
1601 if( currentReference.IsEmpty() || aResetPrefix )
1611 wxCHECK( aSheetPath.size() > 0,
false );
1616 if( instance.m_Path == aSheetPath )
1629 bool transform =
false;
1631 switch( aOrientation )
1752 wxFAIL_MSG(
"Invalid schematic symbol orientation type." );
1788 int rotate_values[] =
1808 for(
int type_rotate : rotate_values )
1820 wxFAIL_MSG(
"Schematic symbol orientation matrix internal error." );
1828void SCH_SYMBOL::Show(
int nestLevel, std::ostream& os )
const
1831 NestedSpace( nestLevel, os ) <<
'<' <<
GetClass().Lower().mb_str()
1833 <<
'"' <<
" chipName=\""
1841 const wxString& value =
GetFields()[i].GetText();
1843 if( !value.IsEmpty() )
1845 NestedSpace( nestLevel + 1, os ) <<
"<field" <<
" name=\""
1847 <<
'"' <<
" value=\""
1848 <<
TO_UTF8( value ) <<
"\"/>\n";
1852 NestedSpace( nestLevel, os ) <<
"</" <<
TO_UTF8(
GetClass().Lower() ) <<
">\n";
1872 if( aIncludeFields )
1876 if( field.IsVisible() )
1877 bBox.
Merge( field.GetBoundingBox() );
1891 catch(
const boost::bad_pointer& e )
1893 wxFAIL_MSG( wxString::Format( wxT(
"Boost pointer exception occurred: %s" ), e.what() ) );
1924 msgs.Add(
_(
"Simulation" ) );
1927 msgs.Add(
_(
"BOM" ) );
1930 msgs.Add(
_(
"Board" ) );
1933 msgs.Add(
_(
"DNP" ) );
1935 msg = wxJoin( msgs,
'|' );
1936 msg.Replace(
'|', wxS(
", " ) );
1939 aList.emplace_back(
_(
"Exclude from" ), msg );
1950 aList.emplace_back(
_(
"Power symbol" ),
1955 aList.emplace_back(
_(
"Reference" ),
1959 aList.emplace_back(
_(
"Value" ),
1962 aList.emplace_back(
_(
"Name" ),
1967 aList.emplace_back(
_(
"flags" ), wxString::Format(
"%X",
GetEditFlags() ) );
1972 msg =
_(
"Missing parent" );
1974 std::shared_ptr< LIB_SYMBOL > parent =
m_part->GetParent().lock();
1977 msg = parent->GetName();
1987 aList.emplace_back(
_(
"Library" ),
_(
"Undefined!!!" ) );
1995 msg =
_(
"<Unknown>" );
1997 aList.emplace_back(
_(
"Footprint" ), msg );
2000 aList.emplace_back(
_(
"Description" ) + wxT(
": " )
2002 _(
"Keywords" ) + wxT(
": " ) +
m_part->GetKeyWords() );
2007 aList.emplace_back(
_(
"Reference" ),
GetRef( currentSheet ) );
2009 aList.emplace_back(
_(
"Value" ),
2012 aList.emplace_back(
_(
"Name" ),
2017 if( libNickname.empty() )
2018 msg =
_(
"No library defined!" );
2020 msg.Printf(
_(
"Symbol not found in %s!" ), libNickname );
2022 aList.emplace_back(
_(
"Library" ), msg );
2029 return BITMAPS::add_component;
2046 field.SetTextPos( pos );
2064 field.SetTextPos( pos );
2083 field.SetTextPos( pos );
2097 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2105 aItemList.push_back( item );
2111 std::vector<DANGLING_END_ITEM>& aItemListByPos,
2114 bool changed =
false;
2116 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2118 bool previousState =
pin->IsDangling();
2119 pin->SetIsDangling(
true );
2124 bool do_break =
false;
2126 for(
auto it = lower; it < aItemListByPos.end() && it->GetPosition() == pos; it++ )
2144 pin->SetIsDangling(
false );
2156 changed = ( changed || ( previousState !=
pin->IsDangling() ) );
2166 wxT(
"Cannot get physical position of pin." ) );
2182 wxCHECK( symbol,
false );
2193 if(
GetRef( aInstance ) != symbol->
GetRef( aInstance ) )
2198 && (
GetValue(
true, aInstance,
false ) != symbol->
GetValue(
true, aInstance,
false ) ) )
2204 for(
size_t i = 0; i <
m_pins.size(); i++ )
2216 std::vector<VECTOR2I> retval;
2218 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2222 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2224 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2227 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2230 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2256 return wxString::Format(
_(
"Symbol %s [%s]" ),
2263 const std::vector<KICAD_T>& aScanTypes )
2265 for(
KICAD_T scanType : aScanTypes )
2271 if( INSPECT_RESULT::QUIT == aInspector(
this, aTestData ) )
2272 return INSPECT_RESULT::QUIT;
2279 if( INSPECT_RESULT::QUIT == aInspector( &field, (
void*)
this ) )
2280 return INSPECT_RESULT::QUIT;
2287 return INSPECT_RESULT::QUIT;
2294 return INSPECT_RESULT::QUIT;
2300 return INSPECT_RESULT::QUIT;
2306 return INSPECT_RESULT::QUIT;
2311 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2315 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2317 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2320 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2323 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2326 if( INSPECT_RESULT::QUIT == aInspector(
pin.get(), (
void*)
this ) )
2327 return INSPECT_RESULT::QUIT;
2332 return INSPECT_RESULT::CONTINUE;
2375 return !( *
this == aSymbol );
2381 wxCHECK_MSG(
Type() == aSymbol.
Type(), *
this,
2382 wxT(
"Cannot assign object type " ) + aSymbol.
GetClass() + wxT(
" to type " ) +
2385 if( &aSymbol !=
this )
2402 field.SetParent(
this );
2414 bBox.
Inflate( aAccuracy / 2 );
2430 rect.
Inflate( aAccuracy / 2 );
2443 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2445 if(
pin->GetType() == ELECTRICAL_PINTYPE::PT_NC )
2450 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2452 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2455 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2458 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2461 if(
pin->GetLocalPosition() == new_pos )
2476 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
2490 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2493 SCH_PIN* tempPin = tempPins[ i ];
2510 text->SetText(
dummy.GetShownText(
false ) );
2519 for(
bool local_background : {
true,
false } )
2526 field.ClearRenderCache();
2540 std::vector<wxString> properties;
2544 wxString text_field = field.GetShownText( sheet,
false);
2546 if( text_field.IsEmpty() )
2549 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2550 field.GetName(), text_field ) );
2553 if( !
m_part->GetKeyWords().IsEmpty() )
2555 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2557 m_part->GetKeyWords() ) );
2579 std::max( bbox.
GetY() - pins.
GetY(),
2583 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
2584 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
2593 strokeWidth,
FILLED,
nullptr );
2613 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2616 SCH_PIN* tempPin = tempPins[ i ];
2631 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2633 if(
pin->IsBrightened() )
2643 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2644 pin->ClearBrightened();
2655 wxCHECK(
m_part,
false );
2656 return m_part->GetShowPinNames();
2662 m_part->SetShowPinNames( aShow );
2667 wxCHECK(
m_part,
false );
2668 return m_part->GetShowPinNumbers();
2674 m_part->SetShowPinNumbers( aShow );
2680 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2682 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2684 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2687 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2690 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2693 if(
pin->IsPointClickableAnchor( aPos ) )
2712 if( pin_list.size() != 1 )
2715 return pin_list[0]->GetType() == ELECTRICAL_PINTYPE::PT_POWER_IN;
2721 wxCHECK(
m_part,
false );
2723 return m_part->IsPower();
2729 wxCHECK(
m_part,
false );
2731 return m_part->IsNormal();
2763 for(
unsigned i = 0; i <
m_pins.size(); ++i )
2812 _HKI(
"Orientation" ),
2823 return symbol->GetLibSymbolRef() !=
nullptr;
2830 .SetAvailableFunc( hasLibPart );
2834 .SetAvailableFunc( hasLibPart );
2836 const wxString groupFields =
_HKI(
"Fields" );
2858 return symbol->IsMulti();
2863 auto multiBodyStyle =
2867 return symbol->HasAlternateBodyStyle();
2880 const wxString groupAttributes =
_HKI(
"Attributes" );
constexpr EDA_IU_SCALE schIUScale
BITMAPS
A list of all bitmap identifiers.
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
const Vec & GetOrigin() const
void Offset(coord_type dx, coord_type dy)
size_type GetHeight() const
bool Intersects(const BOX2< Vec > &aRect) const
size_type GetWidth() const
bool Contains(const Vec &aPoint) const
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
ecoord_type GetArea() const
Return the area of the rectangle.
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
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
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)
static ENUM_MAP< T > & Instance()
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.
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 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
void SwapFlags(SCH_ITEM *aItem)
Swap the non-temp and non-edit flags.
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.
wxString SubReference(int aUnit, bool aAddSeparator=true) const
wxString GetClass() const override
Return the class name.
void RemoveInstance(const SCH_SHEET_PATH &aInstancePath)
static bool IsReferenceStringValid(const wxString &aReferenceString)
Test for an acceptable reference string.
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 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::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 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.
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
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
VECTOR2< int32_t > VECTOR2I