59 std::string ret =
TO_UTF8( txt );
61 for( std::string::iterator it = ret.begin(); it!=ret.end(); ++it )
63 if( (
unsigned char) *it <=
' ' )
92 text->SetText( wxString( wxT(
"??" ) ) );
121 std::unique_ptr< LIB_SYMBOL > part;
153 SCH_SYMBOL( aSymbol, aSel.LibId, aSheet, aSel.Unit, aSel.
Convert, aPosition, aParent )
156 for(
const std::pair<int, wxString>& i : aSel.
Fields )
159 SetRef( aSheet, i.second );
161 field->SetText( i.second );
189 field.SetParent(
this );
194 for(
const std::unique_ptr<SCH_PIN>&
pin : aSymbol.
m_pins )
196 m_pins.emplace_back( std::make_unique<SCH_PIN>( *
pin ) );
197 m_pins.back()->SetParent(
this );
277 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
279 if( ( (
pin->GetPosition().x -
m_pos.
x ) % min_grid_size ) != 0 )
282 if( ( (
pin->GetPosition().y -
m_pos.
y ) % min_grid_size ) != 0 )
307 wxCHECK2( ( aLibSymbol ==
nullptr ) || ( aLibSymbol->
IsRoot() ), aLibSymbol =
nullptr );
309 m_part.reset( aLibSymbol );
317 return m_part->GetDescription();
319 return wxEmptyString;
326 return m_part->GetKeyWords();
328 return wxEmptyString;
335 return m_part->GetDatasheetField().GetText();
337 return wxEmptyString;
343 std::map<wxString, wxString> altPinMap;
344 std::map<wxString, std::set<SCH_PIN*>> pinUuidMap;
345 std::set<SCH_PIN*> unassignedSchPins;
346 std::set<LIB_PIN*> unassignedLibPins;
348 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
350 pinUuidMap[
pin->GetNumber() ].insert(
pin.get() );
352 unassignedSchPins.insert(
pin.get() );
354 if( !
pin->GetAlt().IsEmpty() )
355 altPinMap[
pin->GetNumber() ] =
pin->GetAlt();
357 pin->SetLibPin(
nullptr );
365 std::vector<LIB_PIN*> pins =
m_part->GetAllLibPins();
376 auto ii = pinUuidMap.find( libPin->GetNumber() );
378 if( ii == pinUuidMap.end() || ii->second.empty() )
380 unassignedLibPins.insert( libPin );
384 auto it = ii->second.begin();
386 ii->second.erase( it );
387 pin->SetLibPin( libPin );
388 pin->SetPosition( libPin->GetPosition() );
390 unassignedSchPins.erase(
pin );
392 auto iii = altPinMap.find( libPin->GetNumber() );
394 if( iii != altPinMap.end() )
395 pin->SetAlt( iii->second );
401 for(
LIB_PIN* libPin : unassignedLibPins )
406 if( !unassignedSchPins.empty() )
408 auto it = unassignedSchPins.begin();
410 unassignedSchPins.erase( it );
415 pin =
m_pins.emplace_back( std::make_unique<SCH_PIN>(
SCH_PIN( libPin,
this ) ) ).get();
419 pin->SetLibPin( libPin );
420 pin->SetPosition( libPin->GetPosition() );
421 pin->SetNumber( libPin->GetNumber() );
423 auto iii = altPinMap.find( libPin->GetNumber() );
425 if( iii != altPinMap.end() )
426 pin->SetAlt( iii->second );
430 for(
auto it1 =
m_pins.begin(); it1 !=
m_pins.end() && !unassignedSchPins.empty(); )
432 auto it2 = unassignedSchPins.find( it1->get() );
434 if( it2 != unassignedSchPins.end() )
436 it1 =
m_pins.erase( it1 );
437 unassignedSchPins.erase( it2 );
448 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
489 return m_part->GetUnitCount();
499 return m_part->GetUnitDisplayName( aUnit );
507 return m_part->HasUnitDisplayName( aUnit );
540 for(
unsigned i = 0; i < tempPins.size(); ++ i )
543 LIB_PIN* tempPin = tempPins[ i ];
557 text->SetText(
dummy.GetShownText(
false ) );
569 field.Print( aSettings, aOffset );
590 const KIID_PATH& aSheetPath,
bool aTestFromEnd )
const
596 if( instance.m_Path == aSheetPath )
598 aInstance = instance;
602 else if( instance.m_Path.EndsWith( aSheetPath ) )
604 aInstance = instance;
628 " reference %s, unit %d from symbol %s.",
658 " reference %s, unit %d from symbol %s.",
675 "Adding symbol '%s' instance:\n"
700 std::vector<SCH_SYMBOL_INSTANCE>::iterator resultIt;
705 [searchPath](
const auto& it )
707 return it.m_Path == searchPath;
714 " reference %s, unit %d from symbol %s.",
716 resultIt->m_Reference,
730 "Adding symbol '%s' instance:\n"
759 if( instance.m_Path ==
path )
761 ref = instance.m_Reference;
801 if( instance.m_Path ==
path )
804 instance.m_Reference = ref;
812 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
813 pin->ClearDefaultNetName( sheet );
835 if( instance.m_Path ==
path )
836 return instance.m_Reference.Last() !=
'?';
847 refDesignator.Replace(
"~",
" " );
849 wxString prefix = refDesignator;
851 while( prefix.Length() )
853 wxUniCharRef last = prefix.Last();
855 if( ( last >=
'0' && last <=
'9' ) || last ==
'?' || last ==
'*' )
863 prefix.Trim(
false );
865 if( !prefix.IsEmpty() )
873 return schematic->Settings().SubReference( aUnit, aAddSeparator );
885 if( instance.m_Path ==
path )
886 return instance.m_Unit;
902 if( instance.m_Path ==
path )
904 instance.m_Unit = aUnitSelection;
917 instance.m_Unit = aUnitSelection;
922 bool aAllowExtraText )
const
938 bool aAllowExtraText )
const
967 for(
size_t ii = 0; ii <
m_fields.size(); ++ii )
969 if(
m_fields[ii].GetId() == aFieldId )
981 if( field.GetName() == aFieldName )
993 if( field.GetName() == aFieldName )
1007 if( !field.IsVisible() || field.GetText().IsEmpty() )
1011 aVector.push_back( &field );
1027 if( aFieldName ==
m_fields[i].GetName(
false ) )
1037 bool aCaseInsensitive )
1041 for(
unsigned i = start; i <
m_fields.size(); ++i )
1043 if( aCaseInsensitive )
1045 if( aFieldName.Upper() ==
m_fields[i].GetName(
false ).Upper() )
1050 if( aFieldName ==
m_fields[i].GetName(
false ) )
1060 bool aUpdateOtherFields,
bool aResetRef,
bool aResetOtherFields )
1064 std::vector<LIB_FIELD*> fields;
1066 m_part->GetFields( fields );
1068 for(
const LIB_FIELD* libField : fields )
1070 int id = libField->GetId();
1079 schField =
FindField( libField->GetCanonicalName() );
1083 wxString fieldName = libField->GetCanonicalName();
1098 SetRef( aPath,
m_part->GetReferenceField().GetText() );
1099 else if( aUpdateRef )
1100 SetRef( aPath, libField->GetText() );
1108 if( aResetOtherFields || aUpdateOtherFields )
1113 if( aResetOtherFields )
1115 else if( aUpdateOtherFields )
1116 schField->
SetText( libField->GetText() );
1120 if( aResetOtherFields || aUpdateOtherFields )
1121 schField->
SetText( libField->GetText() );
1130 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1131 aFunction(
pin.get() );
1134 aFunction( &field );
1140 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1142 if(
pin->GetNumber() == aNumber )
1159 std::vector<LIB_PIN*> pinList;
1162 m_part->GetPins( pinList, 0, 0 );
1170 auto it =
m_pinMap.find( aLibPin );
1175 wxFAIL_MSG_AT(
"Pin not found", __FILE__, __LINE__, __FUNCTION__ );
1182 std::vector<SCH_PIN*> pins;
1184 if( aSheet ==
nullptr )
1186 wxCHECK_MSG(
Schematic(), pins,
"Can't call GetPins on a symbol with no schematic" );
1193 for(
const std::unique_ptr<SCH_PIN>& p :
m_pins )
1195 if( unit && p->GetLibPin() && p->GetLibPin()->GetUnit()
1196 && ( p->GetLibPin()->GetUnit() != unit ) )
1201 pins.push_back( p.get() );
1213 wxT(
"Cannot swap data with invalid symbol." ) );
1221 for( std::unique_ptr<SCH_PIN>&
pin : symbol->
m_pins )
1222 pin->SetParent( symbol );
1224 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1225 pin->SetParent(
this );
1230 m_part.reset( libSymbol );
1263 aVars->push_back(
m_fields[i].GetCanonicalName().Upper() );
1266 aVars->push_back(
m_fields[i].GetName() );
1268 aVars->push_back( wxT(
"OP" ) );
1269 aVars->push_back( wxT(
"FOOTPRINT_LIBRARY" ) );
1270 aVars->push_back( wxT(
"FOOTPRINT_NAME" ) );
1271 aVars->push_back( wxT(
"UNIT" ) );
1272 aVars->push_back( wxT(
"SYMBOL_LIBRARY" ) );
1273 aVars->push_back( wxT(
"SYMBOL_NAME" ) );
1274 aVars->push_back( wxT(
"SYMBOL_DESCRIPTION" ) );
1275 aVars->push_back( wxT(
"SYMBOL_KEYWORDS" ) );
1276 aVars->push_back( wxT(
"EXCLUDE_FROM_BOM" ) );
1277 aVars->push_back( wxT(
"EXCLUDE_FROM_BOARD" ) );
1278 aVars->push_back( wxT(
"EXCLUDE_FROM_SIM" ) );
1279 aVars->push_back( wxT(
"DNP" ) );
1280 aVars->push_back( wxT(
"SHORT_NET_NAME(<pin_number>)" ) );
1281 aVars->push_back( wxT(
"NET_NAME(<pin_number>)" ) );
1282 aVars->push_back( wxT(
"NET_CLASS(<pin_number>)" ) );
1283 aVars->push_back( wxT(
"PIN_NAME(<pin_number>)" ) );
1289 static wxRegEx operatingPoint( wxT(
"^"
1292 "(.([0-9])?([a-zA-Z]*))?"
1295 wxCHECK( aPath,
false );
1302 if( operatingPoint.Matches( *token ) )
1304 wxString
pin( operatingPoint.GetMatch( *token, 1 ).Lower() );
1305 wxString precisionStr( operatingPoint.GetMatch( *token, 3 ) );
1306 wxString range( operatingPoint.GetMatch( *token, 4 ) );
1309 if( !precisionStr.IsEmpty() )
1310 precision = precisionStr[0] -
'0';
1312 if( range.IsEmpty() )
1313 range = wxS(
"~A" );
1323 spiceRef = spiceRef.Lower();
1330 else if(
pin == wxS(
":power" ) )
1332 if( range.IsEmpty() )
1333 range = wxS(
"~W" );
1335 *token = schematic->
GetOperatingPoint( spiceRef + wxS(
":power" ), precision, range );
1340 pin =
pin.SubString( 1, -1 );
1342 for(
const std::reference_wrapper<const SIM_MODEL::PIN>& modelPin : model.
GetPins() )
1344 SCH_PIN* symbolPin =
GetPin( modelPin.get().symbolPinNumber );
1348 if( model.
GetPins().size() == 2 )
1354 wxString signalName = spiceRef + wxS(
":" ) + modelPin.get().name;
1363 *token = wxS(
"?" );
1367 if( token->Contains(
':' ) )
1375 if( token->IsSameAs(
m_fields[ i ].GetCanonicalName().Upper() ) )
1378 *token =
GetRef( aPath,
true );
1380 *token =
m_fields[ i ].GetShownText( aPath,
false, aDepth + 1 );
1388 if( token->IsSameAs(
m_fields[ i ].GetName() )
1389 || token->IsSameAs(
m_fields[ i ].GetName().Upper() ) )
1391 *token =
m_fields[ i ].GetShownText( aPath,
false, aDepth + 1 );
1397 if( token->IsSameAs( wxT(
"SIM.DEVICE" ) )
1398 || token->IsSameAs( wxT(
"SIM.TYPE" ) )
1399 || token->IsSameAs( wxT(
"SIM.PINS" ) )
1400 || token->IsSameAs( wxT(
"SIM.PARAMS" ) )
1401 || token->IsSameAs( wxT(
"SIM.LIBRARY" ) )
1402 || token->IsSameAs( wxT(
"SIM.NAME" ) ) )
1404 *token = wxEmptyString;
1411 if( token->IsSameAs( templateFieldname.m_Name )
1412 || token->IsSameAs( templateFieldname.m_Name.Upper() ) )
1416 *token = wxEmptyString;
1421 if( token->IsSameAs( wxT(
"FOOTPRINT_LIBRARY" ) ) )
1425 wxArrayString parts = wxSplit( footprint,
':' );
1427 if( parts.Count() > 0 )
1428 *token = parts[ 0 ];
1430 *token = wxEmptyString;
1434 else if( token->IsSameAs( wxT(
"FOOTPRINT_NAME" ) ) )
1438 wxArrayString parts = wxSplit( footprint,
':' );
1440 if( parts.Count() > 1 )
1441 *token = parts[ std::min( 1, (
int) parts.size() - 1 ) ];
1443 *token = wxEmptyString;
1447 else if( token->IsSameAs( wxT(
"UNIT" ) ) )
1452 else if( token->IsSameAs( wxT(
"SYMBOL_LIBRARY" ) ) )
1457 else if( token->IsSameAs( wxT(
"SYMBOL_NAME" ) ) )
1462 else if( token->IsSameAs( wxT(
"SYMBOL_DESCRIPTION" ) ) )
1467 else if( token->IsSameAs( wxT(
"SYMBOL_KEYWORDS" ) ) )
1472 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
1475 : wxString( wxT(
"" ) );
1478 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
1481 : wxString( wxT(
"" ) );
1484 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
1487 : wxString( wxT(
"" ) );
1490 else if( token->IsSameAs( wxT(
"DNP" ) ) )
1492 *token = this->
GetDNP() ?
_(
"DNP" ) : wxString( wxT(
"" ) );
1495 else if( token->StartsWith( wxT(
"SHORT_NET_NAME(" ) )
1496 || token->StartsWith( wxT(
"NET_NAME(" ) )
1497 || token->StartsWith( wxT(
"NET_CLASS(" ) )
1498 || token->StartsWith( wxT(
"PIN_NAME(" ) ) )
1500 wxString pinNumber = token->AfterFirst(
'(' );
1501 pinNumber = pinNumber.BeforeLast(
')' );
1505 if(
pin->GetNumber() == pinNumber )
1507 if( token->StartsWith( wxT(
"PIN_NAME" ) ) )
1509 *token =
pin->GetAlt().IsEmpty() ?
pin->GetName() :
pin->GetAlt();
1516 *token = wxEmptyString;
1517 else if( token->StartsWith( wxT(
"SHORT_NET_NAME" ) ) )
1519 else if( token->StartsWith( wxT(
"NET_NAME" ) ) )
1520 *token = conn->
Name();
1521 else if( token->StartsWith( wxT(
"NET_CLASS" ) ) )
1522 *token =
pin->GetEffectiveNetClass( aPath )->GetName();
1545 if( instance.m_Path ==
path )
1547 if( instance.m_Reference.IsEmpty() || aResetPrefix )
1558 if( instance.m_Reference.IsEmpty() || aResetPrefix)
1565 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
1566 pin->ClearDefaultNetName( aSheetPath );
1574 if( currentReference.IsEmpty() || aResetPrefix )
1584 wxCHECK( aSheetPath.size() > 0,
false );
1589 if( instance.m_Path == aSheetPath )
1602 bool transform =
false;
1604 switch( aOrientation )
1614 temp.
x1 = temp.
y2 = 0;
1621 temp.
x1 = temp.
y2 = 0;
1630 temp.
y1 = temp.
x2 = 0;
1637 temp.
y1 = temp.
x2 = 0;
1723 wxFAIL_MSG(
"Invalid schematic symbol orientation type." );
1759 int rotate_values[] =
1779 for(
int type_rotate : rotate_values )
1791 wxFAIL_MSG(
"Schematic symbol orientation matrix internal error." );
1799void SCH_SYMBOL::Show(
int nestLevel, std::ostream& os )
const
1802 NestedSpace( nestLevel, os ) <<
'<' <<
GetClass().Lower().mb_str()
1804 <<
'"' <<
" chipName=\""
1812 const wxString& value =
GetFields()[i].GetText();
1814 if( !value.IsEmpty() )
1816 NestedSpace( nestLevel + 1, os ) <<
"<field" <<
" name=\""
1818 <<
'"' <<
" value=\""
1819 <<
TO_UTF8( value ) <<
"\"/>\n";
1823 NestedSpace( nestLevel, os ) <<
"</" <<
TO_UTF8(
GetClass().Lower() ) <<
">\n";
1838 int x0 = bBox.
GetX();
1844 int y0 = -bBox.
GetY();
1861 if( aIncludeFields )
1865 if( field.IsVisible() )
1866 bBox.
Merge( field.GetBoundingBox() );
1880 catch(
const boost::bad_pointer& exc )
1884 wxLogError( wxT(
"Boost bad pointer exception '%s' occurred." ), exc.what() );
1915 msgs.Add(
_(
"Simulation" ) );
1918 msgs.Add(
_(
"BOM" ) );
1921 msgs.Add(
_(
"Board" ) );
1924 msgs.Add(
_(
"DNP" ) );
1926 msg = wxJoin( msgs,
'|' );
1927 msg.Replace(
'|', wxS(
", " ) );
1930 aList.emplace_back(
_(
"Exclude from" ), msg );
1941 aList.emplace_back(
_(
"Power symbol" ),
1946 aList.emplace_back(
_(
"Reference" ),
1950 aList.emplace_back(
_(
"Value" ),
1953 aList.emplace_back(
_(
"Name" ),
1958 aList.emplace_back(
_(
"flags" ), wxString::Format(
"%X",
GetEditFlags() ) );
1963 msg =
_(
"Missing parent" );
1965 std::shared_ptr< LIB_SYMBOL > parent =
m_part->GetParent().lock();
1968 msg = parent->GetName();
1978 aList.emplace_back(
_(
"Library" ),
_(
"Undefined!!!" ) );
1986 msg =
_(
"<Unknown>" );
1988 aList.emplace_back(
_(
"Footprint" ), msg );
1991 aList.emplace_back(
_(
"Description" ) + wxT(
": " )
1993 _(
"Keywords" ) + wxT(
": " ) +
m_part->GetKeyWords() );
1998 aList.emplace_back(
_(
"Reference" ),
GetRef( currentSheet ) );
2000 aList.emplace_back(
_(
"Value" ),
2003 aList.emplace_back(
_(
"Name" ),
2008 if( libNickname.empty() )
2009 msg =
_(
"No library defined!" );
2011 msg.Printf(
_(
"Symbol not found in %s!" ), libNickname );
2013 aList.emplace_back(
_(
"Library" ), msg );
2020 return BITMAPS::add_component;
2037 field.SetTextPos( pos );
2055 field.SetTextPos( pos );
2074 field.SetTextPos( pos );
2096 aItemList.push_back( item );
2102 std::vector<DANGLING_END_ITEM>& aItemListByPos,
2105 bool changed =
false;
2107 for( std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2109 bool previousState =
pin->IsDangling();
2110 pin->SetIsDangling(
true );
2115 bool do_break =
false;
2117 for(
auto it = lower; it < aItemListByPos.end() && it->GetPosition() == pos; it++ )
2135 pin->SetIsDangling(
false );
2147 changed = ( changed || ( previousState !=
pin->IsDangling() ) );
2157 wxT(
"Cannot get physical position of pin." ) );
2173 wxCHECK( symbol,
false );
2184 if(
GetRef( aInstance ) != symbol->
GetRef( aInstance ) )
2195 for(
size_t i = 0; i <
m_pins.size(); i++ )
2207 std::vector<VECTOR2I> retval;
2209 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2213 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2215 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2218 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2221 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2247 return wxString::Format(
_(
"Symbol %s [%s]" ),
2254 const std::vector<KICAD_T>& aScanTypes )
2256 for(
KICAD_T scanType : aScanTypes )
2262 if( INSPECT_RESULT::QUIT == aInspector(
this, aTestData ) )
2263 return INSPECT_RESULT::QUIT;
2270 if( INSPECT_RESULT::QUIT == aInspector( &field, (
void*)
this ) )
2271 return INSPECT_RESULT::QUIT;
2278 return INSPECT_RESULT::QUIT;
2285 return INSPECT_RESULT::QUIT;
2291 return INSPECT_RESULT::QUIT;
2297 return INSPECT_RESULT::QUIT;
2302 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2306 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2308 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2311 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2314 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2317 if( INSPECT_RESULT::QUIT == aInspector(
pin.get(), (
void*)
this ) )
2318 return INSPECT_RESULT::QUIT;
2323 return INSPECT_RESULT::CONTINUE;
2332 auto symbol =
static_cast<const SCH_SYMBOL*
>( &aItem );
2336 if( rect.
GetArea() != symbol->GetBodyAndPinsBoundingBox().GetArea() )
2337 return rect.
GetArea() < symbol->GetBodyAndPinsBoundingBox().GetArea();
2339 if(
m_pos.
x != symbol->m_pos.x )
2340 return m_pos.
x < symbol->m_pos.x;
2342 if(
m_pos.
y != symbol->m_pos.y )
2343 return m_pos.
y < symbol->m_pos.y;
2366 return !( *
this == aSymbol );
2372 wxCHECK_MSG(
Type() == aItem.
Type(), *
this,
2373 wxT(
"Cannot assign object type " ) + aItem.
GetClass() + wxT(
" to type " ) +
2376 if( &aItem !=
this )
2386 m_part.reset( libSymbol );
2398 field.SetParent(
this );
2410 bBox.
Inflate( aAccuracy / 2 );
2426 rect.
Inflate( aAccuracy / 2 );
2441 if(
pin->GetType() == ELECTRICAL_PINTYPE::PT_NC )
2446 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2448 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2451 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2454 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2457 if(
pin->GetLocalPosition() == new_pos )
2488 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2491 LIB_PIN* tempPin = tempPins[ i ];
2508 text->SetText(
dummy.GetShownText(
false ) );
2515 for(
bool local_background : {
true,
false } )
2522 field.ClearRenderCache();
2523 field.Plot( aPlotter, local_background, aPlotSettings );
2535 std::vector<wxString> properties;
2539 wxString text_field = field.GetShownText( sheet,
false);
2541 if( text_field.IsEmpty() )
2544 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2545 field.GetName(), text_field ) );
2548 if( !
m_part->GetKeyWords().IsEmpty() )
2550 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ),
2552 m_part->GetKeyWords() ) );
2600 for(
unsigned i = 0; i < tempPins.size(); ++ i )
2603 LIB_PIN* tempPin = tempPins[ i ];
2618 if(
pin->IsBrightened() )
2629 pin->ClearBrightened();
2635 for(
const std::unique_ptr<SCH_PIN>&
pin :
m_pins )
2637 int pin_unit =
pin->GetLibPin() ?
pin->GetLibPin()->GetUnit()
2639 int pin_bodyStyle =
pin->GetLibPin() ?
pin->GetLibPin()->GetBodyStyle()
2642 if( pin_unit > 0 && pin_unit !=
GetUnit() )
2645 if( pin_bodyStyle > 0 && pin_bodyStyle !=
GetBodyStyle() )
2648 if(
pin->IsPointClickableAnchor( aPos ) )
2667 if( pin_list.size() != 1 )
2670 return pin_list[0]->GetType() == ELECTRICAL_PINTYPE::PT_POWER_IN;
2676 wxCHECK(
m_part,
false );
2678 return m_part->IsPower();
2687 auto symbol =
static_cast<const SCH_SYMBOL&
>( aOther );
2689 if(
GetLibId() != symbol.GetLibId() )
2695 if(
GetUnit() != symbol.GetUnit() )
2707 if(
m_pins.size() != symbol.m_pins.size() )
2710 for(
unsigned i = 0; i <
m_pins.size(); ++i )
2712 if( !( *
m_pins[i] == *symbol.m_pins[i] ) )
2725 auto symbol =
static_cast<const SCH_SYMBOL&
>( aOther );
2727 if(
GetLibId() != symbol.GetLibId() )
2759 _HKI(
"Orientation" ),
2766 auto hasLibPart = [](
INSPECTABLE* aItem ) ->
bool
2769 return symbol->GetLibSymbolRef().
get() !=
nullptr;
2777 .SetAvailableFunc( hasLibPart );
2782 .SetAvailableFunc( hasLibPart );
2784 auto isMultiUnitSymbol =
2788 return symbol->GetUnitCount() > 1;
2797 const wxString groupFields =
_HKI(
"Fields" );
2815 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)
void SetX(coord_type val)
bool Intersects(const BOX2< Vec > &aRect) const
void SetY(coord_type val)
coord_type GetHeight() const
coord_type GetWidth() const
void SetWidth(coord_type val)
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.
coord_type GetRight() const
ecoord_type GetArea() const
Return the area of the rectangle.
void SetHeight(coord_type val)
coord_type GetBottom() const
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.
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
wxDC * GetPrintDC() const
wxString AsString() const
wxString AsString() const
Field object used in symbol libraries.
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.
The base class for drawable items used by schematic library symbols.
void SetShape(GRAPHIC_PINSHAPE aShape)
void SetName(const wxString &aName)
void SetType(ELECTRICAL_PINTYPE aType)
VECTOR2I GetPosition() const override
void Plot(PLOTTER *aPlotter, bool aBackground, const VECTOR2I &aOffset, const TRANSFORM &aTransform, bool aDimmed) const override
Plot the draw item using the plot object.
Define a library symbol object.
bool IsRoot() const override
For symbols derived from other symbols, IsRoot() indicates no derivation.
static wxString LetterSubReference(int aUnit, int aFirstId)
void GetPins(LIB_PINS &aList, int aUnit=0, int aBodyStyle=0) const
Return a list of pin object pointers from the draw item list.
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
void AddDrawItem(LIB_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
void Print(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset, int aMulti, int aBodyStyle, const LIB_SYMBOL_OPTIONS &aOpts, bool aDimmed)
Print symbol.
void Plot(PLOTTER *aPlotter, int aUnit, int aBodyStyle, bool aBackground, const VECTOR2I &aOffset, const TRANSFORM &aTransform, bool aDimmed) const
Plot lib symbol to plotter.
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
Define a symbol library graphical text item.
A singleton reporter that reports to nowhere.
Base plotter engine class.
virtual void ThickSegment(const VECTOR2I &start, const VECTOR2I &end, int width, OUTLINE_MODE tracemode, void *aData)
virtual void Bookmark(const BOX2I &aBox, const wxString &aName, const wxString &aGroupName=wxEmptyString)
Create a bookmark to a symbol.
virtual void StartBlock(void *aData)
calling this function allows one to define the beginning of a group of drawing items,...
virtual void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
virtual void SetColor(const COLOR4D &color)=0
virtual void EndBlock(void *aData)
calling this function allows one to define the end of a group of drawing items for instance in SVG or...
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
T get(const void *aObject) 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 LIB_FIELD &aSource)
Copy parameters from a LIB_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_ITEM & operator=(const SCH_ITEM &aPin)
virtual wxString GetClass() const override
Return the class name.
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.
wxString GetNumber() const
bool IsDangling() const override
wxString GetShownName() 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...
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
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 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.
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction) override
void GetLibPins(std::vector< LIB_PIN * > &aPinsList) const
Populate a vector with all the pins from the library object.
int GetUnitCount() const
Return the number of units per package of the symbol.
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.
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.
bool GetShowPinNumbers() const
void Print(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset) override
Print a symbol.
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...
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
LIB_ITEM * GetDrawItem(const VECTOR2I &aPosition, KICAD_T aType=TYPE_NOT_INIT)
Return the symbol library item at aPosition that is part of this symbol.
SYMBOL_ORIENTATION_PROP GetOrientationProp() const
int GetFieldCount() const
Return the number of fields in this symbol.
void SetBodyStyle(int aBodyStyle)
void UpdateUnit(int aUnit)
Change the unit number to aUnit without setting any internal flags.
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.
void SetMirrorY(bool aMirror)
void PlotPins(PLOTTER *aPlotter) const
Plot just the symbol pins.
void SetRefProp(const wxString aRef)
void SetValueFieldText(const wxString &aValue)
void RemoveField(const wxString &aFieldName)
Remove a user field from the symbol.
void SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
wxString GetSchSymbolLibraryName() const
SCH_FIELD * FindField(const wxString &aFieldName, bool aIncludeDefaultFields=true, bool aCaseInsensitive=false)
Search for a SCH_FIELD with aFieldName.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const
Return the reference for the given sheet path.
bool GetShowPinNames() const
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider) const override
Return a user-visible description string of this item.
void ClearBrightenedPins()
void SetShowPinNumbers(bool aShow)
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
void SetExcludedFromSim(bool aExclude) override
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 m_excludedFromSim
True to exclude from simulation.
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.
bool m_excludedFromBoard
True to exclude from netlist when updating board.
static std::unordered_map< TRANSFORM, int > s_transformToOrientationCache
VECTOR2I GetPinPhysicalPosition(const LIB_PIN *Pin) const
void UpdatePins()
Updates the cache of SCH_PIN objects for each pin.
std::vector< SCH_SYMBOL_INSTANCE > m_instanceReferences
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
void SetValueProp(const wxString aRef)
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_SETTINGS &aPlotSettings) const override
Plot the schematic item to aPlotter.
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.
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
void PrintBackground(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset) override
Print only the background parts of a symbol (if any)
wxString GetDescription() const
std::vector< SCH_FIELD > m_fields
Variable length list of fields.
std::unordered_map< LIB_PIN *, SCH_PIN * > m_pinMap
library pin pointer : SCH_PIN's index
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.
int m_unit
The unit for multiple part per package symbols.
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.
bool GetExcludedFromBOM() const
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 Rotate(const VECTOR2I &aCenter) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
void SetTransform(const TRANSFORM &aTransform)
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))
void ViewGetLayers(int aLayers[], int &aCount) const override
Return the layers the item is drawn on (which may be more than its "home" layer)
bool GetExcludedFromSim() const override
bool operator<(const SCH_ITEM &aItem) const override
bool m_DNP
True if symbol is set to 'Do Not Populate'.
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this symbol.
wxString GetKeyWords() const
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
SCH_FIELD * GetFieldById(int aFieldId)
Return a field in this symbol.
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()
bool HasUnitDisplayName(int aUnit)
Return true if the given unit aUnit has a display name set.
void SetExcludedFromBOM(bool aIncludeInBOM)
BOX2I doGetBoundingBox(bool aIncludePins, bool aIncludeFields) const
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a field to the symbol.
const wxString GetValueFieldText(bool aResolve, const SCH_SHEET_PATH *aPath, bool aAllowExtraText) const
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.
bool IsAnnotated(const SCH_SHEET_PATH *aSheet)
Check if the symbol has a valid annotation (reference) for the given sheet path.
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.
void SetShowPinNames(bool aShow)
bool m_isInNetlist
True if the symbol should appear in the netlist.
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
void SetUnit(int aUnit)
Change the unit number to aUnit.
const LIB_ID & GetLibId() const
wxString GetUnitDisplayName(int aUnit)
Return the display name for a given unit aUnit.
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
SCH_SYMBOL & operator=(const SCH_ITEM &aItem)
std::vector< LIB_PIN * > GetAllLibPins() const
bool GetExcludedFromBoard() const
void SetPrefix(const wxString &aPrefix)
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 m_excludedFromBOM
True to exclude from bill of materials export.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
std::vector< std::unique_ptr< SCH_PIN > > m_pins
a SCH_PIN for every LIB_PIN (all units)
void SetExcludedFromBoard(bool aIncludeOnBoard)
int m_bodyStyle
The alternate body style for symbols that have more than one body style defined.
void SetLibSymbol(LIB_SYMBOL *aLibSymbol)
Set this schematic symbol library symbol reference to aLibSymbol.
BOX2I GetBodyBoundingBox() const
Return a bounding box for the symbol body but not the pins or fields.
void SortInstances(bool(*aSortFunction)(const SCH_SYMBOL_INSTANCE &aLhs, const SCH_SYMBOL_INSTANCE &aRhs))
bool IsMovableFromAnchorPoint() const override
Return true for items which are moved with the anchor point at mouse cursor and false for items moved...
std::unique_ptr< LIB_SYMBOL > m_part
a flattened copy of the LIB_SYMBOL from the PROJECT's libraries.
bool operator==(const SCH_SYMBOL &aSymbol) const
SIM_MODEL & CreateModel(SIM_MODEL::TYPE aType, const std::vector< LIB_PIN * > &aPins, REPORTER &aReporter)
std::vector< std::reference_wrapper< const PIN > > GetPins() const
const SPICE_GENERATOR & SpiceGenerator() const
virtual std::string ItemName(const SPICE_ITEM &aItem) const
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
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.
@ LAYER_DEVICE_BACKGROUND
@ LAYER_SELECTION_SHADOWS
std::vector< LIB_PIN * > LIB_PINS
Helper for defining a list of pin object pointers.
void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
Message panel definition file.
wxString EllipsizeMenuText(const wxString &aString)
Ellipsize text (at the end) to be no more than 36 characters.
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)
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
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
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
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