108 return static_cast<const SCH_SHAPE&
>( aItem ).IsHatchedFill();
115 if( !aPoints.empty() && aPoints.front() != aPoints.back() )
116 aPoints.push_back( aPoints.front() );
133 std::vector<VECTOR2I> points(
chain.CPoints().begin(),
chain.CPoints().end() );
182 if( !aNumber.StartsWith( wxT(
"[" ) ) )
192 for(
size_t i = 0; i + 1 < aNumber.length(); ++i )
194 if( aNumber[i] !=
'\\' )
199 wxString
next( aNumber[i + 1] );
220 return valid && !( expanded.size() == 1 && expanded.front() == aNumber );
242 std::vector<SCH_SHAPE*> ellipses;
247 ellipses.push_back(
static_cast<SCH_SHAPE*
>( &item ) );
308 std::vector<SCH_SHAPE*> rects;
313 rects.push_back(
static_cast<SCH_SHAPE*
>( &item ) );
417 std::vector<SCH_SYMBOL*> symbols;
422 symbols.push_back(
static_cast<SCH_SYMBOL*
>( item ) );
425 std::map<std::pair<wxString, int>,
LIB_SYMBOL*> bakedSymbols;
429 wxCHECK_RET( symbol->GetLibSymbolRef() && !symbol->IsMissingLibSymbol(),
430 wxT(
"Cannot bake a body style without its library symbol." ) );
432 const wxString sourceName = symbol->GetSchSymbolLibraryName();
433 const int bodyStyle = symbol->GetBodyStyle();
434 const auto key = std::make_pair( sourceName, bodyStyle );
441 baked = symbol->GetLibSymbolRef()->
Flatten().release();
442 std::vector<SCH_ITEM*> remove;
446 if( item.GetBodyStyle() && item.GetBodyStyle() != bodyStyle )
447 remove.push_back( &item );
448 else if( item.GetBodyStyle() == bodyStyle )
458 const wxString baseName = wxString::Format( wxT(
"%s__KiCad9_body_%d" ), sourceName, bodyStyle );
459 wxString
name = baseName;
462 name = wxString::Format( wxT(
"%s_%d" ), baseName, suffix );
469 aScreen->
Remove( symbol );
475 symbol->SetLibSymbol(
new LIB_SYMBOL( *baked ) );
476 aScreen->
Append( symbol );
499 if(
static_cast<const SCH_SYMBOL*
>( item )->GetExcludedFromPosFiles() )
516 static_cast<SCH_SYMBOL*
>( item )->SetExcludedFromPosFiles(
false );
536 if(
group->AsEdaItem()->IsLocked() )
563 item->SetLocked(
false );
592 std::vector<SCH_SHAPE*> ellipses;
597 ellipses.push_back(
static_cast<SCH_SHAPE*
>( item ) );
623 if(
static_cast<SCH_SHAPE*
>( item )->IsHatchedFill() )
666 for(
const auto& [
name, variant] : instance.m_Variants )
668 if( !variant.m_PinMapOverride.IsDefault() )
674 return lib && ( lib->GetPinMaps() !=
PIN_MAP_SET() || !lib->GetAssociatedFootprints().empty() );
746 return static_cast<int>( std::distance( groups.begin(), groups.end() ) );
752 std::vector<SCH_GROUP*> groups;
755 groups.push_back(
static_cast<SCH_GROUP*
>( item ) );
817 std::vector<SCH_SHAPE*> rects;
822 rects.push_back(
static_cast<SCH_SHAPE*
>( item ) );
915 std::vector<SCH_ITEM*> remove;
919 if( aMatches( &item ) )
920 remove.push_back( &item );
931 std::vector<SCH_ITEM*> remove;
935 if( aMatches( item ) )
936 remove.push_back( item );
943 group->RemoveItem( item );
1028 aVisit(
const_cast<LIB_SYMBOL*
>( aSymbol ) );
1031 aVisit(
const_cast<SCH_ITEM*
>( &item ) );
1037 std::set<EDA_ITEM*> visited;
1040 if( visited.insert( item ).second )
1047 item->RunOnChildren(
1069 if( aPredicate( item ) )
1078 const wxString token = aToken.AfterLast(
':' );
1079 return token.StartsWith( wxT(
"PROPERTY." ) ) || token == wxT(
"SYMBOL_IS_POWER" )
1080 || token == wxT(
"SYMBOL_IS_LOCAL_POWER" );
1087 std::function<bool( wxString* )> scan = [&]( wxString* token )
1099 std::function<bool( wxString* )> preserve = []( wxString* )
1109 return aText.Contains( wxT(
"\\${" ) ) || aText.Contains( wxT(
"\\@{" ) );
1114 std::set<wxString>& aVisiting,
const TITLE_BLOCK* aTitles =
nullptr )
1117 std::function<bool( wxString* )> scan = [&]( wxString* token )
1124 auto value = vars.find( *token );
1126 if( value != vars.end() && aVisiting.insert( *token ).second )
1128 found |=
textNeedsDowngrade( value->second, aProject, aLegacyExpressions, aVisiting, aTitles );
1129 aVisiting.erase( *token );
1133 if( aTitles && aVisiting.insert( *token ).second )
1137 if( *token == wxT(
"TITLE" ) )
1138 value = aTitles->GetTitle();
1139 else if( *token == wxT(
"ISSUE_DATE" ) )
1140 value = aTitles->GetDate();
1141 else if( *token == wxT(
"REVISION" ) )
1142 value = aTitles->GetRevision();
1143 else if( *token == wxT(
"COMPANY" ) )
1144 value = aTitles->GetCompany();
1145 else if( token->length() == 8 && token->StartsWith( wxT(
"COMMENT" ) ) && ( *token )[7] >=
'1'
1146 && ( *token )[7] <=
'9' )
1147 value = aTitles->GetComment( ( *token )[7].GetValue() -
'1' );
1149 found |=
textNeedsDowngrade( value, aProject, aLegacyExpressions, aVisiting, aTitles );
1150 aVisiting.erase( *token );
1163 for(
size_t pos = 0; pos + 1 < aText.length(); ++pos )
1165 if( aText[pos] ==
'\\' && ( aText[pos + 1] ==
'$' || aText[pos + 1] ==
'@' ) )
1171 if( aText[pos] !=
'@' || aText[pos + 1] !=
'{' )
1174 size_t end = pos + 2;
1177 for( ;
end < aText.length() && depth; ++
end )
1179 if( aText[
end] ==
'{' )
1181 else if( aText[
end] ==
'}' )
1191 const wxString expression = aText.Mid( pos,
end - pos );
1192 wxString value = aItem->
ResolveText( expression, aPath, 0, wxEmptyString );
1202 aText = aText.Left( pos ) + value + aText.Mid(
end );
1203 pos += value.length();
1227 if( !
text || !item )
1232 std::set<wxString> visiting;
1243 if( !aLibrary && ( aPaths.empty() || !
project ) )
1249 std::optional<wxString> replacement;
1250 bool failed =
false;
1253 std::function<bool( wxString* )> resolver = [&]( wxString* token )
1255 std::set<wxString> dependencies;
1261 const wxString reference = wxT(
"${" ) + *token + wxT(
"}" );
1262 wxString value = item->
ResolveText( reference,
path, 0, wxEmptyString );
1266 || value.Contains( wxT(
"<Unresolved:" ) ) || ( aLegacyExpressions &&
hasEscapedTextControl( value ) ) )
1277 if( aLegacyExpressions )
1285 replacement = value;
1296 if( failed || !replacement )
1318 std::vector<SCH_SHEET_PATH> paths;
1324 if(
const SCHEMATIC* schematic = owner )
1328 if(
path.LastScreen() == aScreen )
1329 paths.push_back(
path );
1333 std::set<EDA_ITEM*> visited;
1334 auto planItem = [&](
SCH_ITEM* item )
1336 if( visited.insert( item ).second )
1343 item->RunOnChildren(
1367 for(
int i = 0; i < 9; ++i )
1368 borderText.push_back( titles.
GetComment( i ) );
1370 for(
const wxString& value : borderText )
1372 std::set<wxString> visiting;
1387 _(
"Dynamic evaluation of unsupported references and expressions is removed. Resolved literal "
1388 "values are kept." ),
1395 _(
"The target cannot preserve these references, literal escapes or page-border expressions and a "
1396 "reliable compatible value is unavailable." ),
1405 text->SetText( value );
1413 const wxString range = aText.AfterFirst(
'[' ).BeforeFirst(
']' );
1414 const wxString begin = range.BeforeFirst(
'.' );
1415 const wxString
end = range.AfterLast(
'.' );
1416 return ( begin.length() > 1 && begin[0] ==
'0' ) || (
end.length() > 1 &&
end[0] ==
'0' );
1419 std::vector<wxString> members;
1423 for(
const wxString& member : members )
1447 const size_t length = aBus.length();
1450 bool quoted =
false;
1451 auto digit = []( wxUniChar c )
1453 return c >=
'0' && c <=
'9';
1455 auto formatting = []( wxUniChar c )
1457 return c ==
'_' || c ==
'^' || c ==
'~';
1459 auto escaped = [&](
size_t pos )
1462 for( ; pos && aBus[pos - 1] ==
'\\'; --pos )
1464 return slashes % 2 == 1;
1467 for( ; i < length; ++i )
1469 if( !aPreTen && aBus[i] ==
'"' && !escaped( i ) )
1477 if( aBus[i] ==
'\\' && i + 1 < length )
1478 result.m_prefix += aBus[++i];
1480 result.m_prefix += aBus[i];
1484 if( aBus[i] ==
'{' )
1486 if( i == 0 || !formatting( aBus[i - 1] ) )
1491 if( !
result.m_prefix.IsEmpty() )
1492 result.m_prefix.RemoveLast();
1496 else if( aBus[i] ==
'}' )
1503 if( !aPreTen && aBus[i] ==
'\\' && i + 1 < length && aBus[i + 1] ==
' ' )
1505 result.m_prefix += aBus[++i];
1509 if( aBus[i] ==
' ' || aBus[i] ==
']' )
1511 if( aBus[i] ==
'[' )
1513 result.m_prefix += aBus[i];
1520 for( ; i < length; ++i )
1522 if( aBus[i] ==
'.' && i + 1 < length && aBus[i + 1] ==
'.' )
1524 number.ToLong( &
result.m_begin );
1528 if( !digit( aBus[i] ) )
1537 for( ; i < length; ++i )
1539 if( aBus[i] ==
']' )
1541 number.ToLong( &
result.m_end );
1545 if( !digit( aBus[i] ) )
1550 for( ; i < length; ++i )
1552 if( aBus[i] ==
'}' )
1554 else if( aPreTen || ( aBus[i] !=
'+' && aBus[i] !=
'-' && aBus[i] !=
'P' && aBus[i] !=
'N' ) )
1565 wxString currentPrefix;
1570 || ( current && legacy.
m_prefix != currentPrefix ) )
1573 std::vector<wxString> members;
1576 for(
const wxString& member : members )
1606 if( !
text || !label )
1611 if( schematic && schematic->
IsValid() )
1615 if(
path.LastScreen() != aScreen )
1624 count += incompatible;
1653 _(
"The target removes the leading zeros from bus members and would change their net names." ),
1663 _(
"The target would reinterpret a literal as a bus, rename formatted bus members or overflow "
1664 "while expanding the range." ),
1727 for(
const auto& [
name, variant] : instance.m_Variants )
1728 count += variant.m_SymbolOverride.has_value();
1745 for(
auto& [
name, variant] : instance.m_Variants )
1746 variant.m_SymbolOverride.reset();
1811 if( !solid( ending->GetStroke().GetLineStyle() ) )
1814 const auto& color = ending->GetStroke().GetColor();
1868 source.SetStroke( stroke );
1873 std::vector<SCH_SHAPE*>
result;
1887 result.push_back( shape );
1896 std::vector<SCH_ITEM*> items;
1901 items.push_back( &item );
1912 if( shapes.empty() )
1920 shape->SetParent( aSymbol );
1932 std::vector<SCH_ITEM*> items;
1937 items.push_back( item );
1949 if( shapes.empty() )
1956 group->RemoveItem( item );
1962 shape->SetParentGroup(
nullptr );
1963 aScreen->
Append( shape );
1966 group->AddItem( shape );
2001 const auto isRotatedBitmap = [](
const EDA_ITEM* aItem )
2016 const auto hasOpacity = [](
const EDA_ITEM* aItem )
2062 _(
"Custom user-property metadata is removed." ),
2065 _(
"Alternate-symbol choices in retained variant definitions are removed. The base symbol is unchanged." ),
2070 _(
"Selected custom body styles" ),
2071 _(
"The selected drawing and pins are baked into a separate base-style symbol." ),
2078 _(
"Symbols selecting a custom body style are omitted, including their pins. Connectivity may change." ) },
2080 _(
"The selected drawing cannot be preserved without its library symbol." ),
2083 _(
"The lock is not kept." ),
2090 _(
"Lock metadata is removed; the supported items are kept." ) },
2092 _(
"Solid line bodies and endings are approximated by filled polygons." ),
2095 _(
"Line-ending embellishments are removed. The original supported body is kept." ) },
2097 _(
"Approximated by a polygon." ),
2099 _(
"Ellipse graphics are omitted instead of approximated." ) },
2101 _(
"Converted to a solid fill." ),
2104 _(
"The hatch fill is omitted; the supported outline is kept." ) },
2106 _(
"No equivalent in the target. The map is removed." ),
2109 _(
"Grouping is removed; the items are kept." ),
2116 _(
"Group metadata is removed; the supported items are kept." ) },
2118 _(
"Jumper pin groupings are removed." ),
2121 _(
"Custom names are removed. The target can select only the base and De Morgan styles." ),
2124 _(
"The target cannot exclude schematic symbols from position files." ),
2127 _(
"Approximated by a polygon." ),
2130 _(
"Rounded rectangles are omitted instead of approximated." ) },
2132 _(
"The target would treat it as global power and merge nets across sheets." ),
2135 _(
"DNP and exclusion flags on rule areas are removed." ),
2138 _(
"The target misreads the escaping and would rename the pins." ),
2141 _(
"The target reads the brackets as one literal pin number and the netlist changes." ),
2144 _(
"The target cannot store an image rotation." ),
2147 _(
"The target cannot store an image opacity. Opacity will be ignored." ),
2155 bool aDropInsteadOfApproximate )
2160 wxT(
"Schematic format changed. Review the downgrade rules and denylist, then "
2161 "update SCH_DOWNGRADE_COVERED." ) );
2185 _(
"Dashed, filled, differently colored or non-graphical endings cannot be approximated "
2186 "faithfully. Explicitly dropping approximations keeps the supported body." ),
2195 if(
int count = rule.m_count( aScreen ); count > 0 )
2199 omit ? rule.m_omitDetail : rule.m_detail, count );
2233 _(
"The target can only open a single root sheet." ), 1 );
2251 _(
"The target keeps variants but cannot store a variant's alternate symbol, so the "
2252 "variant would resolve to the base symbol." ),
2260 int incompatible = 0;
2264 for(
const wxString& member : alias->Members() )
2294 const auto& apply = omit ? rule.m_omit : rule.m_apply;
2295 wxASSERT_MSG( !omit || apply, wxT(
"A LOWER rule needs an omission transform." ) );
2305 bool aDropInsteadOfApproximate )
2308 wxT(
"Symbol library format changed. Review the symbol downgrade path, then "
2309 "update SYMLIB_DOWNGRADE_COVERED." ) );
2325 _(
"Dashed, filled or differently colored endings cannot be approximated faithfully. "
2326 "Explicitly dropping approximations keeps the supported body." ),
2332 if( aTarget.
m_schVersion >= rule.m_introducedIn || !rule.m_countSymbol )
2335 if(
int count = rule.m_countSymbol( aSymbol ); count > 0 )
2339 omit ? rule.m_omitDetail : rule.m_detail, count );
2358 const auto& apply = omit ? rule.m_omitSymbol : rule.m_applySymbol;
2359 wxASSERT_MSG( !omit || !rule.m_applySymbol || apply,
2360 wxT(
"A symbol LOWER rule needs an omission transform." ) );
2420 wxFAIL_MSG( wxT(
"No writer for this downgrade target." ) );
2432 wxFAIL_MSG( wxT(
"No writer for this downgrade target." ) );
2451 return wxEmptyString;
2476 const wxString& aVariantName )
2480 snap.
m_dnp = aSymbol->
GetDNP( &aPath, aVariantName );
2489 if( instance.m_Path != aPath.
Path() )
2492 auto it = instance.m_Variants.find( aVariantName );
2494 if( it != instance.m_Variants.end() )
2529 const wxString& aVariantName )
2533 snap.
m_dnp = aSheet->
GetDNP( &aPath, aVariantName );
2540 if( instance.m_Path != aPath.
Path() )
2543 auto it = instance.m_Variants.find( aVariantName );
2545 if( it != instance.m_Variants.end() )
2557 std::map<SCH_SYMBOL*, SYMBOL_VARIANT_SNAPSHOT> symbols;
2558 std::map<SCH_SHEET*, SHEET_VARIANT_SNAPSHOT> sheets;
2559 std::map<SCH_SYMBOL*, SCH_SCREEN*> screens;
2578 *aConflict = wxString::Format(
2579 _(
"Alternate symbol '%s' cannot be resolved and validated against the base symbol." ),
2586 auto [it, inserted] = symbols.emplace( symbol, snap );
2587 screens.emplace( symbol, screen );
2591 if( !inserted && !( it->second == snap ) )
2594 *aConflict = wxString::Format(
2595 _(
"Shared symbol '%s' has different effective values between sheet instances." ),
2606 auto [it, inserted] = sheets.emplace( sheet, snap );
2608 if( !inserted && !( it->second == snap ) )
2611 *aConflict = wxString::Format(
2612 _(
"Shared sheet '%s' has different effective values between sheet instances." ),
2620 for(
auto& [symbol, snap] : symbols )
2622 if( snap.m_alternate )
2625 std::unique_ptr<LIB_SYMBOL> baked = snap.m_alternate->Flatten();
2626 const wxString baseName = baked->GetName() + wxT(
"__KiCad_variant" );
2627 wxString
name = baseName;
2630 name = wxString::Format( wxT(
"%s_%d" ), baseName, suffix );
2632 baked->SetName(
name );
2633 baked->SetLibId(
LIB_ID( wxEmptyString,
name ) );
2634 screen->
Remove( symbol );
2635 symbol->SetLibId( *snap.m_symbolOverride );
2636 symbol->SetSchSymbolLibraryName(
name );
2637 symbol->SetLibSymbol(
new LIB_SYMBOL( *baked ) );
2639 screen->
Append( symbol );
2642 symbol->SetDNP( snap.m_dnp );
2643 symbol->SetExcludedFromSim( snap.m_excludedFromSim );
2644 symbol->SetExcludedFromBOM( snap.m_excludedFromBOM );
2645 symbol->SetExcludedFromBoard( snap.m_excludedFromBoard );
2646 symbol->SetExcludedFromPosFiles( snap.m_excludedFromPosFiles );
2647 symbol->SetPinMapOverride( snap.m_pinMap );
2649 auto& instances =
const_cast<std::vector<SCH_SYMBOL_INSTANCE>&
>( symbol->GetInstances() );
2653 auto variant = instance.m_Variants.find( aVariantName );
2655 if( variant != instance.m_Variants.end() )
2657 variant->second.m_SymbolOverride.reset();
2658 variant->second.m_PinMapOverride = {};
2662 for(
const auto& [
name, value] : snap.m_fieldOverrides )
2664 for(
SCH_FIELD& field : symbol->GetFields() )
2667 field.SetText( value );
2672 for(
auto& [sheet, snap] : sheets )
2674 sheet->SetDNP( snap.m_dnp );
2675 sheet->SetExcludedFromSim( snap.m_excludedFromSim );
2676 sheet->SetExcludedFromBOM( snap.m_excludedFromBOM );
2677 sheet->SetExcludedFromBoard( snap.m_excludedFromBoard );
2679 for(
const auto& [
name, value] : snap.m_fieldOverrides )
2681 for(
SCH_FIELD& field : sheet->GetFields() )
2686 if( !invariant && field.GetName() ==
name )
2687 field.SetText( value );
constexpr EDA_IU_SCALE schIUScale
int GetLegacyPPI() const
Recompute the PPI the way it was computed before the pixels/cm truncation fix.
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
What an export to a given target will keep, approximate, drop, or block.
void Add(DOWNGRADE_BUCKET aBucket, const wxString &aFeature, const wxString &aDetail=wxEmptyString, int aCount=1)
A set of EDA_ITEMs (i.e., without duplicates).
A base class for most all the KiCad significant classes used in schematics and boards.
void ClearCustomProperties()
virtual EDA_GROUP * GetParentGroup() const
KICAD_T Type() const
Returns the type of object.
EDA_ITEM * GetParent() const
const std::map< wxString, wxString > & GetCustomProperties() const
Custom user-defined string key/value properties attached to this item.
virtual void SetEnd(const VECTOR2I &aEnd)
int GetEllipseMinorRadius() const
const VECTOR2I & GetEllipseCenter() const
void SetEndEnding(const LINE_ENDING &aEnding)
EDA_ANGLE GetEllipseEndAngle() const
FILL_T GetFillMode() const
virtual void SetCornerRadius(int aRadius)
int GetEllipseMajorRadius() const
EDA_ANGLE GetEllipseRotation() const
void SetStartEnding(const LINE_ENDING &aEnding)
bool IsHatchedFill() const
void SetFillColor(const COLOR4D &aColor)
LINE_STYLE GetLineStyle() const
virtual void SetShape(SHAPE_T aShape)
std::vector< VECTOR2I > GetRectCorners() const
EDA_ANGLE GetEllipseStartAngle() const
const LINE_ENDING & GetStartEnding() const
const LINE_ENDING & GetEndEnding() const
void SetPolyPoints(const std::vector< VECTOR2I > &aPoints)
int GetCornerRadius() const
void SetFillMode(FILL_T aFill)
virtual void SetPolyShape(const SHAPE_POLY_SET &aShape)
virtual void SetStart(const VECTOR2I &aStart)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
EE_TYPE OfType(KICAD_T aType) const
A logical library item identifier and consists of various portions much like a URI.
Define a library symbol object.
const LIB_ID & GetLibId() const override
void SetDuplicatePinNumbersAreJumpers(bool aEnabled)
bool IsMultiBodyStyle() const override
JUMPER_GROUP_SET & JumperPinGroups()
Each jumper pin group is a set of pin numbers that should be treated as internally connected.
void SetAssociatedFootprints(std::vector< ASSOCIATED_FOOTPRINT > aList)
void SetBodyStyleNames(const std::vector< wxString > &aBodyStyleNames)
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
bool IsLocalPower() const override
void RemoveDrawItem(SCH_ITEM *aItem)
Remove draw aItem from list.
void SetHasDeMorganBodyStyles(bool aFlag)
void SetPinMaps(const PIN_MAP_SET &aPinMaps)
bool HasDeMorganBodyStyles() const override
const PIN_MAP_SET & GetPinMaps() const
Pin-to-pad mapping (issue #2282).
std::unique_ptr< LIB_SYMBOL > Flatten() const
Return a flattened symbol inheritance to the caller.
void SetLibId(const LIB_ID &aLibId)
bool GetDuplicatePinNumbersAreJumpers() const
std::vector< SCH_PIN * > GetGraphicalPins(int aUnit=0, int aBodyStyle=0) const override
Graphical pins: Return schematic pin objects as drawn (unexpanded), filtered by unit/body.
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
virtual void SetName(const wxString &aName)
const std::vector< ASSOCIATED_FOOTPRINT > & GetAssociatedFootprints() const
Decorative shape (arrowhead, circle, square) at the start or end of a graphic line,...
static bool ParseBusGroup(const wxString &aGroup, wxString *name, std::vector< wxString > *aMemberList, size_t *aPrefixEnd=nullptr)
Parse a bus group label into the name and a list of components.
static bool ParseBusVector(const wxString &aBus, wxString *aName, std::vector< wxString > *aMemberList)
Parse a bus vector (e.g.
A symbol-owned ordered set of named pin maps.
Container for project specific data.
virtual std::map< wxString, wxString > & GetTextVars() const
A REFERENCE_IMAGE is a wrapper around a BITMAP_IMAGE that is displayed in an editor as a reference fo...
EDA_ANGLE GetOrientation() const
double GetOpacity() const
const BITMAP_BASE & GetImage() const
Get the underlying image.
double GetImageScale() const
void SetImageScale(double aScale)
Set the image "zoom" value.
Holds all the data relating to one schematic.
const std::vector< std::shared_ptr< BUS_ALIAS > > & GetAllBusAliases() const
SCH_SHEET_LIST BuildUnorderedSheetList() const
PROJECT & Project() const
Return a reference to the project this schematic is part of.
bool IsValid() const
A simple test if the schematic is loaded, not a complete one.
std::vector< SCH_SHEET * > GetTopLevelSheets() const
Get the list of top-level sheets.
Object to handle a bitmap image that can be inserted in a schematic.
void SetOpacity(double aOpacity)
REFERENCE_IMAGE & GetReferenceImage()
virtual const wxString & GetText() const override
Return the string associated with the text object.
A set of SCH_ITEMs (i.e., without duplicates).
Base class for any item which can be embedded within the SCHEMATIC container class,...
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
bool IsLocked() const override
void SetLayer(SCH_LAYER_ID aLayer)
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
wxString ResolveText(const wxString &aText, const SCH_SHEET_PATH *aPath, int aDepth=0) const
wxString GetShownText(const SCH_SHEET_PATH *aPath, RESOLUTION_CONTEXT aContext, int aDepth=0) const override
Segment description base class to describe items which have 2 end points (track, wire,...
int GetPenWidth() const override
virtual STROKE_PARAMS GetStroke() const override
const LINE_ENDING & GetEndEnding() const
VECTOR2I GetEndPoint() const
VECTOR2I GetStartPoint() const
const LINE_ENDING & GetStartEnding() const
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void SetDNP(bool aDNP, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
void SetExcludedFromSim(bool aExcludeFromSim, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
void SetExcludedFromBOM(bool aExcludeFromBOM, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from schematic bill of materials flag.
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void SetExcludedFromBoard(bool aExclude, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear exclude from board netlist flag.
Container class that holds multiple SCH_SCREEN objects in a hierarchy.
void Append(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
void AddLibSymbol(LIB_SYMBOL *aLibSymbol)
Add aLibSymbol to the library symbol map.
const std::map< wxString, LIB_SYMBOL * > & GetLibSymbols() const
Fetch a list of unique LIB_SYMBOL object pointers required to properly render each SCH_SYMBOL in this...
EE_RTREE & Items()
Get the full RTree, usually for iterating.
bool Remove(SCH_ITEM *aItem, bool aUpdateLibSymbol=true)
Remove aItem from the schematic associated with this screen.
TITLE_BLOCK & GetTitleBlock()
void SetStroke(const STROKE_PARAMS &aStroke) override
STROKE_PARAMS GetStroke() const override
int GetEffectiveWidth() const override
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.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flags.
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
const std::vector< SCH_SHEET_INSTANCE > & GetInstances() const
void ClearPinMapOverrides()
Clear the base pin-to-pad map override and every variant's override.
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
const std::vector< SCH_SYMBOL_INSTANCE > & GetInstances() const
PIN_MAP_INSTANCE_OVERRIDE GetPinMapOverride(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
bool IsMissingLibSymbol() const
Check to see if the library symbol is set to the dummy library symbol.
const LIB_ID & GetLibId() const override
LIB_SYMBOL * GetVariantLibSymbol(const wxString &aVariantName, const SCH_SHEET_PATH &aPath) const
Resolve the alternate library symbol for a given variant.
bool GetExcludedFromPosFiles(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
wxString GetFieldText(const SCH_FIELD *aField, const wxString &aFieldName, const SCH_SHEET_PATH *aPath, const wxString &aVariantName) const
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this symbol.
Writes a schematic or symbol library in the KiCad 10.0 file format.
void SaveSchematicFile(const wxString &aFileName, SCH_SHEET *aSheet, SCHEMATIC *aSchematic)
static constexpr int FORMAT_VERSION
void SaveSymbolLibrary(const wxString &aFileName, const std::vector< LIB_SYMBOL * > &aSymbols)
static constexpr int SYMBOL_LIB_VERSION
Writes a schematic or symbol library in the KiCad 9.0 file format.
void SaveSymbolLibrary(const wxString &aFileName, const std::vector< LIB_SYMBOL * > &aSymbols)
static constexpr int FORMAT_VERSION
void SaveSchematicFile(const wxString &aFileName, SCH_SHEET *aSheet, SCHEMATIC *aSchematic)
static constexpr int SYMBOL_LIB_VERSION
SHAPE_LINE_CHAIN ConvertToPolyline(int aMaxError) const
Build a polyline approximation of the ellipse or arc.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
const std::vector< VECTOR2I > & CPoints() const
Represent a set of closed polygons.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline)
void Simplify()
Simplify the polyset (merges overlapping polys, eliminates degeneracy/self-intersections)
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
int NewOutline()
Creates a new empty polygon in the set and returns its index.
int OutlineCount() const
Return the number of outlines in the set.
SHAPE_POLY_SET Fillet(int aRadius, int aErrorMax)
Return a filleted version of the polygon set.
void Fracture(bool aSimplify=true)
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
Simple container to manage line stroke parameters.
void SetWidth(int aWidth)
KIGFX::COLOR4D GetColor() const
bool GetExcludedFromPosFiles(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void SetExcludedFromPosFiles(bool aExclude, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear exclude from position files flag.
Hold the information shown in the lower right corner of a plot, printout, or editing view.
const wxString & GetCompany() const
const wxString & GetRevision() const
const wxString & GetDate() const
const wxString & GetComment(int aIdx) const
const wxString & GetTitle() const
void FinalizeTextVarExpansion(wxString &aText, RESOLUTION_CONTEXT aContext)
wxString ExpandTextVars(const wxString &aSource, const PROJECT *aProject, RESOLUTION_CONTEXT aContext)
std::vector< TEXT_VAR_REF_KEY > ExtractTextVarReferences(const wxString &aSource)
Lex-scan aSource and return every ${...} reference that appears, without resolving.
DOWNGRADE_BUCKET
What happens to a feature when we export to an older KiCad.
@ BLOCK
Cannot be represented at all, export to this target is not possible.
@ LOWER
Approximated down to a simpler equivalent.
@ DROP
No equivalent, left out.
static bool empty(const wxTextEntryBase *aCtrl)
wxString FindUnsupportedToken(const wxString &aSerialized, const DATED_TOKEN *aNodes, size_t aNodeCount, const DATED_TOKEN *aValues, size_t aValueCount, int aTargetVersion)
Scan serialized s-expression text against dated node and value denylists.
@ FILLED_SHAPE
Fill with object color.
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
static std::vector< PENDING_PROPERTY > plan(const EDA_ITEM &aSource, const EDA_ITEM &aTarget, const std::set< wxString > &aEnabledKeys)
Target properties to write, paired with values read off the source.
static constexpr int SCH_VER_PIN_MAPS
static int countJumperPinGroups(const SCH_SCREEN *aScreen)
static void unlockItems(SCH_SCREEN *aScreen)
static bool hasLineEndings(const SCH_ITEM *aItem)
static constexpr int SCH_VER_ELLIPSE
static int countCustomProperties(const SCH_SCREEN *aScreen)
COMPATIBILITY_REPORT ClassifySchematicStructureForDowngrade(const SCHEMATIC &aSchematic, const DOWNGRADE_TARGET &aTarget)
Schematic-wide structure the per-screen rules cannot see. Does not modify it.
static constexpr int SCH_VER_IMAGE_ROTATION
static constexpr int SCH_VER_GROUPS
static int countEscapedStackedPins(const SCH_SCREEN *aScreen)
void DowngradeScreenInPlace(SCH_SCREEN *aScreen, const DOWNGRADE_TARGET &aTarget, bool aDropInsteadOfApproximate)
Approximate or remove, in place, what the target cannot represent.
static std::vector< SCREEN_RULE > screenRules()
static constexpr int SYMLIB_VER_LINE_ENDINGS
static void omitScreenItems(SCH_SCREEN *aScreen, const std::function< bool(const SCH_ITEM *)> &aMatches)
static int countSymbolEscapedStackedPins(const LIB_SYMBOL *aSymbol)
static void dropBitmapOpacity(SCH_SCREEN *aScreen)
static int countSymbolRoundedRects(const LIB_SYMBOL *aSymbol)
static void omitSymbolRoundedRects(LIB_SYMBOL *aSymbol)
static SHEET_VARIANT_SNAPSHOT snapshotSheet(const SCH_SHEET *aSheet, const SCH_SHEET_PATH &aPath, const wxString &aVariantName)
static void dropAlternateSymbols(SCH_SCREEN *aScreen)
static void dropSymbolPinMaps(LIB_SYMBOL *aSymbol)
static int countPinMaps(const SCH_SCREEN *aScreen)
static int countSymbolLineEndings(const LIB_SYMBOL *aSymbol)
static int countUnresolvedCustomBodyStyles(const SCH_SCREEN *aScreen)
static bool usesPlainStackedPinNumber(const wxString &aNumber)
static bool hasActiveExpression(const wxString &aText)
static int countSymbolLocalPower(const LIB_SYMBOL *aSymbol)
static void planTextDowngrade(EDA_ITEM *aItem, const std::vector< SCH_SHEET_PATH > &aPaths, bool aLibrary, bool aLegacyExpressions, TEXT_DOWNGRADE_PLAN &aPlan, const TITLE_BLOCK *aTitles=nullptr)
static constexpr int SCH_VER_IMAGE_OPACITY
static void dropRuleAreaFlags(SCH_SCREEN *aScreen)
static int countRuleAreaFlags(const SCH_SCREEN *aScreen)
static int countPositionExclusions(const SCH_SCREEN *aScreen)
static void omitHatchedFills(SCH_SCREEN *aScreen)
static void dropPinMaps(SCH_SCREEN *aScreen)
static bool hasIncompatibleBusVector(const wxString &aText, bool aPreTen)
static void ungroupAll(SCH_SCREEN *aScreen)
bool FlattenSchematicVariant(SCHEMATIC &aSchematic, const wxString &aVariantName, wxString *aConflict)
Bake a variant into the base attributes of every symbol and sheet.
static void omitSelectedCustomBodyStyles(SCH_SCREEN *aScreen)
static void lowerEllipses(SCH_SCREEN *aScreen)
static void dropSymbolCustomProperties(LIB_SYMBOL *aSymbol)
static void omitEllipses(SCH_SCREEN *aScreen)
static constexpr int SCH_DOWNGRADE_COVERED
static SCH_SHAPE lineEndingShape(const SCH_ITEM *aItem)
static void roundedRectToPolygon(SCH_SHAPE *aShape)
static constexpr int SCH_VER_LINE_ENDINGS
static constexpr int SCH_VER_RULE_AREA_FLAGS
static bool hasEscapedTextControl(const wxString &aText)
static int countStackedPins(const SCH_SCREEN *aScreen)
static bool isEllipse(const SCH_ITEM *aItem)
static bool hasPaddedBusVector(const wxString &aText)
static wxString bakeLegacyExpressions(wxString aText, const SCH_ITEM *aItem, const SCH_SHEET_PATH *aPath, bool &aFailed)
static void lowerRoundedRects(SCH_SCREEN *aScreen)
static int countLocalPowerSymbols(const SCH_SCREEN *aScreen)
void SaveSymbolLibraryForTarget(const std::vector< LIB_SYMBOL * > &aSymbols, const wxString &aPath, const DOWNGRADE_TARGET &aTarget)
Save a .kicad_sym library stamped for the target.
int SymbolLibDowngradeCoveredVersion()
The symbol library format the denylist was generated against.
static void dropLineEndings(SCH_SCREEN *aScreen)
static constexpr DATED_TOKEN SCH_TOKENS[]
static void dropSymbolPositionExclusions(LIB_SYMBOL *aSymbol)
static void omitSymbolHatchedFills(LIB_SYMBOL *aSymbol)
static void omitSymbolGraphics(LIB_SYMBOL *aSymbol, const std::function< bool(const SCH_ITEM *)> &aMatches)
static constexpr int SCH_VER_LOCAL_POWER
static constexpr int SYMLIB_DOWNGRADE_COVERED
static bool isRoundedRect(const SCH_ITEM *aItem)
static void closePolyline(std::vector< VECTOR2I > &aPoints)
static FROZEN_BUS_VECTOR frozenBusVector(const wxString &aBus, bool aPreTen)
static int countSymbolEllipses(const LIB_SYMBOL *aSymbol)
static bool hasPostTargetTextVars(const wxString &aText)
static void reportTextPlan(const TEXT_DOWNGRADE_PLAN &aPlan, COMPATIBILITY_REPORT &aReport)
COMPATIBILITY_REPORT ClassifyLibSymbolForDowngrade(const LIB_SYMBOL *aSymbol, const DOWNGRADE_TARGET &aTarget, bool aDropInsteadOfApproximate)
Report what a library symbol would lose if exported to an older KiCad. Does not modify it.
static constexpr KICAD_T FILLABLE_TYPES[]
static int countNamedBodyStyles(const SCH_SCREEN *aScreen)
static bool hasOwnLock(const SCH_ITEM *aItem)
void DowngradeLibSymbolInPlace(LIB_SYMBOL *aSymbol, const DOWNGRADE_TARGET &aTarget, bool aDropInsteadOfApproximate)
Symbol-scoped downgrade for standalone .kicad_sym files the screen pass never sees.
static int countLineEndings(const SCH_SCREEN *aScreen)
static void compensateReferenceImageScales(SCH_SCREEN *aScreen)
static int countRoundedRects(const SCH_SCREEN *aScreen)
static constexpr int SCH_VER_ALTERNATE_SYMBOLS
static void lowerLineEndings(SCH_SCREEN *aScreen)
static int countSymbolHatchedFills(const LIB_SYMBOL *aSymbol)
static bool canLowerLineEndings(const SCH_ITEM *aItem)
static constexpr int SCH_VER_JUMPER_PINS
static void bakeSelectedCustomBodyStyles(SCH_SCREEN *aScreen)
static void dropNamedBodyStyles(SCH_SCREEN *aScreen)
static TEXT_DOWNGRADE_PLAN screenTextPlan(const SCH_SCREEN *aScreen, bool aLegacyExpressions)
static void omitRoundedRects(SCH_SCREEN *aScreen)
static void lowerSymbolHatchedFills(LIB_SYMBOL *aSymbol)
static int countLockedItems(const SCH_SCREEN *aScreen)
static void visitSymbolItems(const LIB_SYMBOL *aSymbol, const std::function< void(EDA_ITEM *)> &aVisit)
static constexpr int SCH_VER_CUSTOM_PROPERTIES
static void visitScreenItems(const SCH_SCREEN *aScreen, const std::function< void(EDA_ITEM *)> &aVisit)
static void dropJumperPinGroups(SCH_SCREEN *aScreen)
static int countGroups(const SCH_SCREEN *aScreen)
static constexpr int SCH_VER_LOCKING
static int countSymbolPinMaps(const LIB_SYMBOL *aSymbol)
static constexpr int SCH_VER_IMAGE_PPI
static void lowerHatchedFills(SCH_SCREEN *aScreen)
static void lowerSymbolLineEndings(LIB_SYMBOL *aSymbol)
static int countPaddedBusLabels(const SCH_SCREEN *aScreen)
static constexpr int SCH_VER_ROUNDED_RECT
void SaveSchematicForTarget(SCH_SHEET *aSheet, SCHEMATIC *aSchematic, const wxString &aPath, const DOWNGRADE_TARGET &aTarget)
Save a schematic sheet file stamped for the target, using the writer for that version.
static void lowerSymbolEllipses(LIB_SYMBOL *aSymbol)
static void reportIncompatibleBuses(int aCount, COMPATIBILITY_REPORT &aReport)
static constexpr int SCH_VER_POSITION_EXCLUSIONS
static constexpr int SCH_VER_BODY_STYLES
static void dropPositionExclusions(SCH_SCREEN *aScreen)
static bool textNeedsDowngrade(const wxString &aText, const PROJECT *aProject, bool aLegacyExpressions, std::set< wxString > &aVisiting, const TITLE_BLOCK *aTitles=nullptr)
static void clearLineEndings(SCH_ITEM *aItem)
static void lowerSymbolRoundedRects(LIB_SYMBOL *aSymbol)
static constexpr int SCH_VER_SHAPE_HATCH
static void omitSymbolEllipses(LIB_SYMBOL *aSymbol)
static int countSymbolStackedPins(const LIB_SYMBOL *aSymbol)
static bool isHatchedFillItem(const SCH_ITEM &aItem)
static int countSymbolCustomProperties(const LIB_SYMBOL *aSymbol)
static SYMBOL_VARIANT_SNAPSHOT snapshotSymbol(const SCH_SYMBOL *aSymbol, const SCH_SHEET_PATH &aPath, const wxString &aVariantName)
static void dropSymbolBodyStyleNames(LIB_SYMBOL *aSymbol)
static void dropSymbolJumperPins(LIB_SYMBOL *aSymbol)
static std::vector< SCH_SHAPE * > lineEndingPolygons(SCH_ITEM *aItem)
static int countRotatedBitmaps(const SCH_SCREEN *aScreen)
static bool hasRuleAreaFlags(const SCH_RULE_AREA *aArea)
static int countSelectedCustomBodyStyles(const SCH_SCREEN *aScreen)
wxString FindUnsupportedSchToken(const wxString &aSerialized, const DOWNGRADE_TARGET &aTarget)
Scan serialized schematic text for tokens the target cannot parse.
static int countHatchedFills(const SCH_SCREEN *aScreen)
static int countScreenItems(const SCH_SCREEN *aScreen, const std::function< bool(EDA_ITEM *)> &aPredicate)
static bool hasPinMaps(const SCH_SYMBOL *aSymbol)
static bool hasEscapedStackedPinNumber(const wxString &aNumber)
static int countSymbolPositionExclusions(const LIB_SYMBOL *aSymbol)
static void applyTextPlan(const TEXT_DOWNGRADE_PLAN &aPlan)
static int countIncompatibleBusLabels(const SCH_SCREEN *aScreen, bool aPreTen)
static bool isPostTargetTextVar(const wxString &aToken)
static void reportPaddedBuses(int aCount, COMPATIBILITY_REPORT &aReport)
static void dropSymbolLineEndings(LIB_SYMBOL *aSymbol)
int SchDowngradeCoveredVersion()
The format the denylist was generated against. A format bump forces a review.
static constexpr DATED_TOKEN SCH_VALUES[]
COMPATIBILITY_REPORT ClassifyScreenForDowngrade(const SCH_SCREEN *aScreen, const DOWNGRADE_TARGET &aTarget, bool aDropInsteadOfApproximate)
Report what a schematic screen would lose if exported to an older KiCad.
static int countSymbolNamedBodyStyles(const LIB_SYMBOL *aSymbol)
static void dropCustomProperties(SCH_SCREEN *aScreen)
static void ellipseToPolygon(SCH_SHAPE *aShape)
static int countSymbolJumperPins(const LIB_SYMBOL *aSymbol)
static int countAlternateSymbols(const SCH_SCREEN *aScreen)
static constexpr int SCH_VER_STACKED_PINS
static constexpr int SCH_VER_STACKED_PIN_ESCAPES
static int countEllipses(const SCH_SCREEN *aScreen)
static TEXT_DOWNGRADE_PLAN symbolTextPlan(const LIB_SYMBOL *aSymbol, bool aLegacyExpressions)
static int countBitmapsWithOpacity(const SCH_SCREEN *aScreen)
constexpr int SCH_VER_VARIANTS
Format dates for rules the jobs handler applies at schematic scope.
constexpr int SCH_VER_FLAT_HIERARCHY
constexpr int SCH_VER_NET_CHAINS
#define SEXPR_SYMBOL_LIB_FILE_VERSION
This file contains the file format version information for the s-expression schematic and symbol libr...
#define SEXPR_SCHEMATIC_FILE_VERSION
Schematic file version.
Class to handle a set of SCH_ITEMs.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
std::vector< wxString > ExpandStackedPinNotation(const wxString &aPinName, bool *aValid)
Expand stacked pin notation like [1,2,3], [1-4], [A1-A4], or [AA1-AA3,AB4,CD12-CD14] into individual ...
wxString EscapeStackedPinItem(const wxString &aPinNumber)
Escape the characters that carry structural meaning inside stacked pin notation ('[',...
LINE_STYLE
Dashed line types.
A token dated by the format that introduced it, for the fail-closed downgrade gates.
An older KiCad release we can export a project back to.
int m_schVersion
SEXPR_SCHEMATIC_FILE_VERSION for the target.
int m_symLibVersion
SEXPR_SYMBOL_LIB_FILE_VERSION for the target.
Per-instance override of the active pin map and a sparse delta on top.
A simple container for sheet instance information.
A simple container for schematic symbol instance information.
std::function< void(SCH_SCREEN *)> m_apply
std::function< int(const SCH_SCREEN *)> m_count
DOWNGRADE_BUCKET m_bucket
std::function< void(SCH_SCREEN *)> m_omit
std::function< void(LIB_SYMBOL *)> m_applySymbol
std::function< void(LIB_SYMBOL *)> m_omitSymbol
std::function< int(const LIB_SYMBOL *)> m_countSymbol
Symbol-scoped part, for .kicad_sym files.
bool operator==(const SHEET_VARIANT_SNAPSHOT &) const =default
std::map< wxString, wxString > m_fieldOverrides
std::optional< LIB_ID > m_symbolOverride
bool m_excludedFromPosFiles
PIN_MAP_INSTANCE_OVERRIDE m_pinMap
std::map< wxString, wxString > m_fieldOverrides
bool operator==(const SYMBOL_VARIANT_SNAPSHOT &) const =default
std::map< EDA_TEXT *, wxString > m_replacements
@ SHEET_REF_SUFFIX
Optional sheet field appended to the references of the sheet's symbols.
@ REFERENCE
Field Reference of part, i.e. "IC21".
const SHAPE_LINE_CHAIN chain
wxString result
Test unit parsing edge cases and error handling.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
VECTOR2< int32_t > VECTOR2I