42#include <api/schematic/schematic_types.pb.h>
89 using namespace kiapi::common::types;
90 using namespace kiapi::schematic::types;
94 sheet.mutable_id()->set_value(
m_Uuid.AsStdString() );
97 sheet.set_locked(
IsLocked() ? LockedState::LS_LOCKED : LockedState::LS_UNLOCKED );
101 sheet.set_dnp(
GetDNP() );
103 StrokeAttributes* borderStroke = sheet.mutable_border_stroke();
110 GraphicFillAttributes* fill = sheet.mutable_fill();
112 : GraphicFillType::GFT_FILLED_WITH_COLOR );
117 google::protobuf::Any
any;
120 any.UnpackTo( sheet.mutable_name_field() );
123 any.UnpackTo( sheet.mutable_filename_field() );
127 if( field.IsMandatory() )
130 field.Serialize(
any );
131 any.UnpackTo( sheet.add_user_fields() );
137 any.UnpackTo( sheet.add_pins() );
140 aContainer.PackFrom( sheet );
147 using namespace kiapi::common::types;
148 using namespace kiapi::schematic::types;
152 if( !aContainer.UnpackTo( &sheet ) )
158 SetLocked( sheet.locked() == LockedState::LS_LOCKED );
168 if( sheet.fill().fill_type() == GraphicFillType::GFT_UNFILLED || !sheet.fill().has_color() )
184 google::protobuf::Any
any;
186 any.PackFrom( sheet.name_field() );
189 any.PackFrom( sheet.filename_field() );
192 for(
const auto& field : sheet.user_fields() )
196 any.PackFrom( field );
200 for(
const auto& pinProto : sheet.pins() )
202 auto pin = std::make_unique<SCH_SHEET_PIN>(
this );
203 any.PackFrom( pinProto );
205 if( !
pin->Deserialize(
any ) )
240 m_pins.emplace_back( new SCH_SHEET_PIN( *pin ) );
241 m_pins.back()->SetParent( this );
245 field.SetParent(
this );
310 wxCHECK_MSG(
Schematic(),
false,
"Can't call IsVirtualRootSheet without setting a schematic" );
318 wxCHECK_MSG(
Schematic(),
false,
"Can't call IsTopLevelSheet without setting a schematic" );
327 [&](
const wxString& aVar )
330 aVars->push_back( aVar );
335 if( field.IsMandatory() )
336 add( field.GetCanonicalName().Upper() );
338 add( field.GetName() );
343 if( sheetPath.
size() >= 2 )
355 add( wxT(
"SHEETPATH" ) );
356 add( wxT(
"EXCLUDE_FROM_BOM" ) );
357 add( wxT(
"EXCLUDE_FROM_BOARD" ) );
358 add( wxT(
"EXCLUDE_FROM_SIM" ) );
360 add( wxT(
"ERC_ERROR <message_text>" ) );
361 add( wxT(
"ERC_WARNING <message_text>" ) );
363 m_screen->GetTitleBlock().GetContextualTextVars( aVars );
369 wxCHECK( aPath,
false );
376 if( token->Contains(
':' ) )
378 if( schematic->ResolveCrossReference( token, aDepth + 1 ) )
384 wxString fieldName = field.IsMandatory() ? field.GetCanonicalName().Upper()
387 if( token->IsSameAs( fieldName ) )
389 *token = field.GetShownText( aPath,
false, aDepth + 1 );
395 wxString variant = schematic->GetCurrentVariant();
404 if( token->IsSameAs( wxT(
"#" ) ) )
409 else if( token->IsSameAs( wxT(
"##" ) ) )
411 *token = wxString::Format( wxT(
"%d" ), (
int) schematic->Hierarchy().size() );
414 else if( token->IsSameAs( wxT(
"SHEETPATH" ) ) )
419 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOM" ) ) )
421 *token = wxEmptyString;
423 if( aPath->
GetExcludedFromBOM( variant ) || this->ResolveExcludedFromBOM( aPath, variant ) )
424 *token =
_(
"Excluded from BOM" );
428 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_BOARD" ) ) )
430 *token = wxEmptyString;
432 if( aPath->
GetExcludedFromBoard( variant ) || this->ResolveExcludedFromBoard( aPath, variant ) )
433 *token =
_(
"Excluded from board" );
437 else if( token->IsSameAs( wxT(
"EXCLUDE_FROM_SIM" ) ) )
439 *token = wxEmptyString;
441 if( aPath->
GetExcludedFromSim( variant ) || this->ResolveExcludedFromSim( aPath, variant ) )
442 *token =
_(
"Excluded from simulation" );
446 else if( token->IsSameAs( wxT(
"DNP" ) ) )
448 *token = wxEmptyString;
450 if( aPath->
GetDNP( variant ) || this->ResolveDNP( aPath, variant ) )
458 if( aPath->
size() >= 2 )
463 if(
path.Last()->ResolveTextVar( &
path, token, aDepth + 1 ) )
468 if( schematic->ResolveTextVar( aPath, token, aDepth + 1 ) )
479 wxString::Format( wxT(
"SCH_SHEET object cannot swap data with %s object." ),
492 sheetPin->SetParent(
this );
498 field.SetParent(
this );
520 m_fields.emplace_back(
this, aFieldType );
566 const wxString& aVariantName )
568 wxCHECK( !aFieldName.IsEmpty(), );
574 switch( field->
GetId() )
579 wxString tmp = aFieldText;
580 tmp.Replace( wxT(
"\\" ), wxT(
"/" ) );
591 wxString defaultText = field->
GetText( aPath );
593 if( aVariantName.IsEmpty() )
595 if( aFieldText != defaultText )
602 wxCHECK( instance, );
604 if( instance->
m_Variants.contains( aVariantName ) )
606 if( aFieldText != defaultText )
607 instance->
m_Variants[aVariantName].m_Fields[aFieldName] = aFieldText;
609 instance->
m_Variants[aVariantName].m_Fields.erase( aFieldName );
611 else if( aFieldText != defaultText )
616 newVariant.
m_Fields[aFieldName] = aFieldText;
617 instance->
m_Variants.insert( std::make_pair( aVariantName, newVariant ) );
628 const wxString& aVariantName )
const
630 wxCHECK( !aFieldName.IsEmpty(), wxEmptyString );
634 wxCHECK( field, wxEmptyString );
636 switch( field->
GetId() )
644 if( aVariantName.IsEmpty() )
652 if( instance->
m_Variants.contains( aVariantName )
653 && instance->
m_Variants.at( aVariantName ).m_Fields.contains( aFieldName ) )
654 return instance->
m_Variants.at( aVariantName ).m_Fields.at( aFieldName );
666 wxASSERT( aSheetPin !=
nullptr );
670 m_pins.push_back( aSheetPin );
677 wxASSERT( aSheetPin !=
nullptr );
682 if( *i == aSheetPin )
696 if(
pin->GetText().Cmp( aName ) == 0 )
708 if( sheetPin->GetPosition() == aPosition )
723 switch(
pin->GetSide() )
733 return topBottom > 0 && leftRight == 0;
753 if( HLabel ==
nullptr )
763 constexpr int gridSize =
schIUScale.MilsToIU( 50 );
765 int base = aVal / gridSize;
766 int excess = abs( aVal % gridSize );
770 return ( base + 1 ) * gridSize;
772 else if( excess > 0 )
774 return ( base ) * gridSize;
778 return ( base - 1 ) * gridSize;
786 int pinsRight =
m_pos.x;
788 for(
size_t i = 0; i <
m_pins.size(); i++ )
796 pinsLeft = std::min( pinsLeft, pinRect.
GetLeft() );
797 pinsRight = std::max( pinsRight, pinRect.
GetRight() );
806 if( pinsLeft >= pinsRight )
809 pinMinWidth = pinsRight -
m_pos.x;
820 int pinsBottom =
m_pos.y;
822 for(
size_t i = 0; i <
m_pins.size(); i++ )
830 pinsTop = std::min( pinsTop, pinRect.
GetTop() );
831 pinsBottom = std::max( pinsBottom, pinRect.
GetBottom() );
840 if( pinsTop >= pinsBottom )
843 pinMinHeight = pinsBottom -
m_pos.y;
853 std::vector<SCH_SHEET_PIN*> pins =
m_pins;
881 if(
pin->HitTest( aPosition ) )
906 int margin = borderMargin +
KiROUND( std::max( textSize.
x, textSize.
y ) * 0.5 );
926 margin = borderMargin +
KiROUND( std::max( textSize.
x, textSize.
y ) * 0.4 );
964 end.x = std::max(
m_size.x, textLength );
982 bbox.
Merge( field.GetBoundingBox() );
1038 if( screen && screen->
GetFileName().Cmp( aFilename ) == 0 )
1083 if(
m_screen->GetFileName().Cmp( aFilename ) == 0 )
1126 wxString currentVariant;
1131 path.push_back(
this );
1135 aList.emplace_back(
_(
"Hierarchical Path" ),
path.PathHumanReadable(
false,
true ) );
1145 msgs.Add(
_(
"Simulation" ) );
1148 msgs.Add(
_(
"BOM" ) );
1151 msgs.Add(
_(
"Board" ) );
1153 if(
GetDNP( currentSheet, currentVariant ) )
1154 msgs.Add(
_(
"DNP" ) );
1156 msg = wxJoin( msgs,
'|' );
1157 msg.Replace(
'|', wxS(
", " ) );
1160 aList.emplace_back(
_(
"Exclude from" ), msg );
1166 std::map<SCH_SHEET_PIN*, SCH_NO_CONNECT*> noConnects;
1173 noConnects[sheetPin] =
static_cast<SCH_NO_CONNECT*
>( noConnect );
1188 field.Move(
delta );
1194 m_pos += aMoveVector;
1197 pin->Move( aMoveVector );
1200 field.Move( aMoveVector );
1226 sheetPin->Rotate( aCenter, aRotateCCW );
1240 field.SetTextPos( pos );
1255 sheetPin->MirrorVertically( aCenter );
1261 field.SetTextPos( pos );
1275 sheetPin->MirrorHorizontally( aCenter );
1281 field.SetTextPos( pos );
1307 sheetPin->ConstrainOnEdge( sheetPin->GetPosition(),
false );
1324 pin->SetNumber(
id );
1336 while( !sheetPath.
empty() && sheetPath.
Last() !=
this )
1339 if( sheetPath.
empty() )
1355 wxT(
"Invalid item in schematic sheet pin list. Bad programmer!" ) );
1357 sheetPin->GetEndPoints( aItemList );
1363 std::vector<DANGLING_END_ITEM>& aItemListByPos,
1366 bool changed =
false;
1369 changed |= sheetPin->UpdateDanglingState( aItemListByType, aItemListByPos );
1385 wxCHECK( sheet,
false );
1399 for(
size_t i = 0; i <
m_pins.size(); i++ )
1411 std::vector<VECTOR2I> retval;
1414 retval.push_back( sheetPin->GetPosition() );
1421 const std::vector<KICAD_T>& aScanTypes )
1423 for(
KICAD_T scanType : aScanTypes )
1460 aFunction( &field );
1471 return wxString::Format(
_(
"Hierarchical Sheet '%s'" ),
1513 int aUnit,
int aBodyStyle,
const VECTOR2I& aOffset,
bool aDimmed )
1522 wxString variantName;
1530 bool dnp =
GetDNP( &instance, variantName );
1544 if( aDimmed || dnp )
1547 borderColor = borderColor.
Mix( backgroundColor, 0.5f );
1550 if( aBackground && backgroundColor.
a > 0.0 )
1552 aPlotter->
SetColor( backgroundColor );
1571 std::vector<wxString> properties;
1577 properties.emplace_back( wxString::Format( wxT(
"!%s = %s" ), field.GetName(),
1578 field.GetShownText(
false ) ) );
1586 sheetPin->Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed || dnp );
1590 field.Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed || dnp );
1600 margins.
x = std::max( margins.
x * 0.6, margins.
y * 0.3 );
1601 margins.
y = std::max( margins.
y * 0.6, margins.
x * 0.3 );
1610 strokeWidth,
nullptr );
1617 wxCHECK_MSG(
Type() == aItem.
Type(), *
this,
1618 wxT(
"Cannot assign object type " ) + aItem.
GetClass() + wxT(
" to type " ) +
1621 if( &aItem !=
this )
1634 m_pins.back()->SetParent(
this );
1666 for(
int ii =
m_instances.size() - 1; ii >= 0; --ii )
1672 " page %s, from project %s.",
1700 if( instance.m_Path == aPath )
1706 (
GetName().IsEmpty() ) ? wxString( wxT(
"root" ) ) :
GetName() );
1719 bool aTestFromEnd )
const
1725 if( instance.m_Path == aSheetPath )
1727 aInstance = instance;
1731 else if( instance.m_Path.EndsWith( aSheetPath ) )
1733 aInstance = instance;
1746 if( instance.m_Path == aSheetPath )
1758 if( instance.m_Path == aSheetPath )
1770 if( instance.m_Path.size() == 0 )
1782 if( instance.m_Path.size() == 0 )
1796 wxString pageNumber;
1800 if( instance.m_Path == aParentPath )
1802 pageNumber = instance.m_PageNumber;
1815 if( instance.m_Path == aPath )
1817 instance.m_PageNumber = aPageNumber;
1827 if( &aOther ==
this )
1834 std::vector<SCH_SHEET_INSTANCE> instances =
GetInstances();
1835 std::vector<SCH_SHEET_INSTANCE> otherInstances = aOther.
GetInstances();
1841 std::sort( instances.begin(), instances.end(),
1844 if( aLhs.m_Path > aRhs.m_Path )
1849 std::sort( otherInstances.begin(), otherInstances.end(),
1852 if( aLhs.m_Path > aRhs.m_Path )
1858 auto itThis = instances.begin();
1859 auto itOther = otherInstances.begin();
1861 while( itThis != instances.end() )
1863 if( ( itThis->m_Path == itOther->m_Path )
1864 && ( itThis->m_PageNumber != itOther->m_PageNumber ) )
1879 if( aPageNumberA == aPageNumberB )
1884 bool isIntegerPageA = aPageNumberA.ToLong( &pageA );
1885 bool isIntegerPageB = aPageNumberB.ToLong( &pageB );
1887 if( isIntegerPageA && isIntegerPageB )
1896 if( isIntegerPageA )
1898 else if( isIntegerPageB )
1905 wxCHECK(
result != 0, 0 );
1950 for(
size_t i = 0; i <
GetFields().size(); ++i )
1982 instance->
m_Variants.insert( std::make_pair( aVariant.
m_Name, aVariant ) );
1991 if( !instance || !instance->
m_Variants.contains( aVariantName ) )
1999 const wxString& aNewName )
2004 if( !instance || !instance->
m_Variants.contains( aOldName ) )
2009 variant.
m_Name = aNewName;
2011 instance->
m_Variants.insert( std::make_pair( aNewName, variant ) );
2016 const wxString& aNewVariant )
2021 if( !instance || !instance->
m_Variants.contains( aSourceVariant ) )
2026 variant.
m_Name = aNewVariant;
2027 instance->
m_Variants.insert( std::make_pair( aNewVariant, variant ) );
2033 if( !aInstance || aVariantName.IsEmpty() )
2041 wxCHECK_MSG( instance, ,
2042 wxString::Format( wxS(
"Cannot get DNP attribute for invalid sheet path '%s'." ),
2045 if( aVariantName.IsEmpty() )
2051 if( instance->
m_Variants.contains( aVariantName ) && ( aEnable != instance->
m_Variants[aVariantName].m_DNP ) )
2053 instance->
m_Variants[aVariantName].m_DNP = aEnable;
2060 variant.
m_DNP = aEnable;
2069 if( !aInstance || aVariantName.IsEmpty() )
2077 if( instance.
m_Variants.contains( aVariantName ) )
2078 return instance.
m_Variants[aVariantName].m_DNP;
2099 if( !aInstance || aVariantName.IsEmpty() )
2107 wxCHECK_MSG( instance, ,
2108 wxString::Format( wxS(
"Cannot get m_excludedFromSim attribute for invalid sheet path '%s'." ),
2111 if( aVariantName.IsEmpty() )
2117 if( instance->
m_Variants.contains( aVariantName )
2118 && ( aEnable != instance->
m_Variants[aVariantName].m_ExcludedFromSim ) )
2120 instance->
m_Variants[aVariantName].m_ExcludedFromSim = aEnable;
2136 if( !aInstance || aVariantName.IsEmpty() )
2144 if( instance.
m_Variants.contains( aVariantName ) )
2145 return instance.
m_Variants[aVariantName].m_ExcludedFromSim;
2166 if( !aInstance || aVariantName.IsEmpty() )
2174 wxCHECK_MSG( instance, ,
2175 wxString::Format( wxS(
"Cannot get m_excludedFromBOM attribute for invalid sheet path '%s'." ),
2178 if( aVariantName.IsEmpty() )
2184 if( instance->
m_Variants.contains( aVariantName )
2185 && ( aEnable != instance->
m_Variants[aVariantName].m_ExcludedFromBOM ) )
2187 instance->
m_Variants[aVariantName].m_ExcludedFromBOM = aEnable;
2203 if( !aInstance || aVariantName.IsEmpty() )
2211 if( instance.
m_Variants.contains( aVariantName ) )
2212 return instance.
m_Variants[aVariantName].m_ExcludedFromBOM;
2233void SCH_SHEET::Show(
int nestLevel, std::ostream& os )
const
2238 NestedSpace( nestLevel, os ) <<
'<' << s.Lower().mb_str() <<
">" <<
" sheet_name=\""
2243 sheetPin->Show( nestLevel + 1, os );
2245 NestedSpace( nestLevel, os ) <<
"</" << s.Lower().mb_str() <<
">\n" << std::flush;
2264 if( !aValue.GetAs( &value ) )
2272 return std::make_unique<VALIDATION_ERROR_MSG>( msg );
2285 const wxString groupAttributes =
_HKI(
"Attributes" );
types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
constexpr EDA_IU_SCALE schIUScale
BITMAPS
A list of all bitmap identifiers.
@ add_hierarchical_subsheet
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr const Vec GetEnd() const
constexpr coord_type GetY() const
constexpr size_type GetWidth() const
constexpr coord_type GetX() const
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
constexpr const Vec GetCenter() const
constexpr size_type GetHeight() const
constexpr coord_type GetLeft() const
constexpr bool Contains(const Vec &aPoint) const
constexpr const Vec & GetOrigin() const
constexpr coord_type GetRight() const
constexpr void SetEnd(coord_type x, coord_type y)
constexpr coord_type GetTop() const
constexpr bool Intersects(const BOX2< Vec > &aRect) const
constexpr coord_type GetBottom() const
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
The base class for create windows for drawing purpose.
A base class for most all the KiCad significant classes used in schematics and boards.
KICAD_T Type() const
Returns the type of object.
EDA_ITEM * GetParent() const
virtual void SetParent(EDA_ITEM *aParent)
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetTextPos(const VECTOR2I &aPoint)
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
static wxString GotoPageHref(const wxString &aDestination)
Generate a href to a page in the current schematic.
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
VECTOR2I GetTextSize() const
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
A color representation with 4 components: red, green, blue, alpha.
std::shared_ptr< wxString > m_text
COLOR4D & Desaturate()
Removes color (in HSL model)
COLOR4D Mix(const COLOR4D &aColor, double aFactor) const
Return a color that is mixed with the input by a factor.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
wxString AsString() const
Base plotter engine class.
RENDER_SETTINGS * RenderSettings()
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width, int aCornerRadius=0)=0
virtual void HyperlinkBox(const BOX2I &aBox, const wxString &aDestinationURL)
Create a clickable hyperlink with a rectangular click area.
bool GetColorMode() const
virtual void ThickSegment(const VECTOR2I &start, const VECTOR2I &end, int width, void *aData)
virtual void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
virtual void SetColor(const COLOR4D &color)=0
Container for project specific data.
PROPERTY_BASE & SetValidator(PROPERTY_VALIDATOR_FN &&aValidator)
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.
Holds all the data relating to one schematic.
bool IsTopLevelSheet(const SCH_SHEET *aSheet) const
Check if a sheet is a top-level sheet (direct child of virtual root).
SCHEMATIC_SETTINGS & Settings() const
wxString GetCurrentVariant() const
Return the current variant being edited.
void GetContextualTextVars(wxArrayString *aVars) const
SCH_SHEET_PATH & CurrentSheet() const
Schematic editor (Eeschema) main window.
SCH_SHEET_PATH & GetCurrentSheet() const
virtual const wxString & GetText() const override
Return the string associated with the text object.
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0, const wxString &aVariantName=wxEmptyString) const
void SetText(const wxString &aText) override
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
Base class for any item which can be embedded within the SCHEMATIC container class,...
void SetLocked(bool aLocked) override
SCH_ITEM & operator=(const SCH_ITEM &aPin)
SCH_RENDER_SETTINGS * getRenderSettings(PLOTTER *aPlotter) const
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
bool IsLocked() const override
AUTOPLACE_ALGO m_fieldsAutoplaced
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
wxString ResolveText(const wxString &aText, const SCH_SHEET_PATH *aPath, int aDepth=0) const
wxString GetClass() const override
Return the class name.
int GetEffectivePenWidth(const SCH_RENDER_SETTINGS *aSettings) const
bool m_OverrideItemColors
const wxString & GetFileName() const
bool GetExcludedFromBOM() const
bool empty() const
Forwarded method from std::vector.
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
wxString GetPageNumber() const
wxString PathHumanReadable(bool aUseShortRootName=true, bool aStripTrailingSeparator=false, bool aEscapeSheetNames=false) const
Return the sheet path in a human readable form made from the sheet names.
bool GetExcludedFromSim() const
bool GetExcludedFromBoard() const
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
size_t size() const
Forwarded method from std::vector.
void pop_back()
Forwarded method from std::vector.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Variant information for a schematic sheet.
void InitializeAttributes(const SCH_SHEET &aSheet)
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void GetEndPoints(std::vector< DANGLING_END_ITEM > &aItemList) override
Add the schematic item end points to aItemList if the item has end points.
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this sheet.
void SetBorderColor(KIGFX::COLOR4D aColor)
friend class SCH_SHEET_PIN
void SetFileName(const wxString &aFilename)
bool HasConnectivityChanges(const SCH_ITEM *aItem, const SCH_SHEET_PATH *aInstance=nullptr) const override
Check if aItem has connectivity changes against this object.
wxString GetFileName() const
Return the filename corresponding to this sheet.
bool getInstance(SCH_SHEET_INSTANCE &aInstance, const KIID_PATH &aSheetPath, bool aTestFromEnd=false) const
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
void SetExcludedFromSim(bool aExcludeFromSim, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
void CopyVariant(const KIID_PATH &aPath, const wxString &aSourceVariant, const wxString &aNewVariant)
void SetSize(const VECTOR2I &aSize)
void RemoveInstance(const KIID_PATH &aInstancePath)
void SetDNP(bool aDNP, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
bool addInstance(const KIID_PATH &aInstance)
Add a new instance aSheetPath to the instance list.
void AddPin(SCH_SHEET_PIN *aSheetPin)
Add aSheetPin to the sheet.
bool HasRootInstance() const
Check to see if this sheet has a root sheet instance.
wxString GetClass() const override
Return the class name.
wxString getPageNumber(const KIID_PATH &aParentPath) const
Return the sheet page number for aParentPath.
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.
int GetPenWidth() const override
std::map< SCH_SHEET_PIN *, SCH_NO_CONNECT * > GetNoConnects() const
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool IsTopLevelSheet() const
Check if this sheet is a top-level sheet.
SCH_SHEET_PATH findSelf() const
Get the sheetpath of this sheet.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
bool GetExcludedFromBoardProp() const
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
bool GetExcludedFromBOMProp() const
std::vector< SCH_FIELD > & GetFields()
Return a reference to the vector holding the sheet's fields.
KIGFX::COLOR4D m_borderColor
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this sheet.
void renumberPins()
Renumber the sheet pins in the sheet.
VECTOR2I GetRotationCenter() const
Rotating around the boundingBox's center can cause walking when the sheetname or filename is longer t...
SCH_SHEET_PIN * GetPin(const VECTOR2I &aPosition)
Return the sheet pin item found at aPosition in the sheet.
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool operator<(const SCH_ITEM &aItem) const override
void CleanupSheet()
Delete sheet label which do not have a corresponding hierarchical label.
void RemovePin(const SCH_SHEET_PIN *aSheetPin)
Remove aSheetPin from the sheet.
void SetPositionIgnoringPins(const VECTOR2I &aPosition)
bool SearchHierarchy(const wxString &aFilename, SCH_SCREEN **aScreen)
Search the existing hierarchy for an instance of screen loaded from aFileName.
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool LocatePathOfScreen(SCH_SCREEN *aScreen, SCH_SHEET_PATH *aList)
Search the existing hierarchy for an instance of screen loaded from aFileName.
std::vector< SCH_SHEET_INSTANCE > m_instances
bool HasUndefinedPins() const
Check all sheet labels against schematic for undefined hierarchical labels.
void SetPosition(const VECTOR2I &aPosition) override
wxString GetFieldText(const wxString &aFieldName, const SCH_SHEET_PATH *aPath=nullptr, const wxString &aVariantName=wxEmptyString) const
void SetBackgroundColor(KIGFX::COLOR4D aColor)
int SymbolCount() const
Count our own symbols, without the power symbols.
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 SetDNPProp(bool aEnable)
void AddInstance(const SCH_SHEET_INSTANCE &aInstance)
int GetMinWidth(bool aFromLeft) const
Return the minimum width of the sheet based on the widths of the sheet pin text.
bool operator==(const SCH_ITEM &aOther) const override
std::vector< int > ViewGetLayers() const override
Return the layers the item is drawn on (which may be more than its "home" layer)
std::vector< SCH_FIELD > m_fields
void RenameVariant(const KIID_PATH &aPath, const wxString &aOldName, const wxString &aNewName)
KIGFX::COLOR4D m_backgroundColor
void SetExcludedFromBoard(bool aExclude, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear exclude from board netlist flag.
void DeleteVariant(const KIID_PATH &aPath, const wxString &aVariantName)
SCH_SHEET(EDA_ITEM *aParent=nullptr, const VECTOR2I &aPos=VECTOR2I(0, 0), VECTOR2I aSize=VECTOR2I(schIUScale.MilsToIU(MIN_SHEET_WIDTH), schIUScale.MilsToIU(MIN_SHEET_HEIGHT)))
void SetName(const wxString &aName)
int CountSheets() const
Count the number of sheets found in "this" sheet including all of the subsheets.
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this sheet.
void SetExcludedFromSimProp(bool aEnable)
VECTOR2I GetPosition() const override
const BOX2I GetBodyBoundingBox() const
Return a bounding box for the sheet body but not the fields.
bool HasPin(const wxString &aName) const
Check if the sheet already has a sheet pin named aName.
static int ComparePageNum(const wxString &aPageNumberA, const wxString &aPageNumberB)
Compare page numbers of schematic sheets.
void SetFieldText(const wxString &aFieldName, const wxString &aFieldText, const SCH_SHEET_PATH *aPath=nullptr, const wxString &aVariantName=wxEmptyString)
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
void SetFields(const std::vector< SCH_FIELD > &aFields)
Set multiple schematic fields.
int CountActiveSheets() const
Count the number of sheets found in "this" sheet including all of the subsheets.
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
int GetScreenCount() const
Return the number of times the associated screen for the sheet is being used.
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
SCH_SHEET & operator=(const SCH_ITEM &aSheet)
bool HasPageNumberChanges(const SCH_SHEET &aOther) const
Check if the instance data of this sheet has any changes compared to aOther.
const SCH_SHEET_INSTANCE & GetRootInstance() const
Return the root sheet instance data.
bool doIsConnected(const VECTOR2I &aPosition) const override
Provide the object specific test to see if it is connected to aPosition.
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
std::vector< VECTOR2I > GetConnectionPoints() const override
Add all the connection points for this item to aPoints.
KIGFX::COLOR4D GetBorderColor() const
std::vector< SCH_SHEET_PIN * > m_pins
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 SetBorderWidth(int aWidth)
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
SCH_FIELD * AddField(const SCH_FIELD &aField)
Add a @aField to the list of fields.
void setPageNumber(const KIID_PATH &aInstance, const wxString &aPageNumber)
Set the page number for the sheet instance aInstance.
bool IsVirtualRootSheet() const
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
int GetMinHeight(bool aFromTop) const
Return the minimum height that the sheet can be resized based on the sheet pin positions.
bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flags.
bool GetExcludedFromSimProp() const
void SetExcludedFromBoardProp(bool aExclude)
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
bool UpdateDanglingState(std::vector< DANGLING_END_ITEM > &aItemListByType, std::vector< DANGLING_END_ITEM > &aItemListByPos, const SCH_SHEET_PATH *aPath=nullptr) override
Test the schematic item to aItemList to check if it's dangling state has changed.
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void Resize(const VECTOR2I &aSize)
Resize this sheet to aSize and adjust all of the labels accordingly.
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
int GetBorderWidth() const
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.
std::vector< SCH_SHEET_PIN * > & GetPins()
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
void SetExcludedFromBOMProp(bool aEnable)
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
void AddVariant(const SCH_SHEET_PATH &aInstance, const SCH_SHEET_VARIANT &aVariant)
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
const std::vector< SCH_SHEET_INSTANCE > & GetInstances() const
bool IsVerticalOrientation() const
bool HitTest(const VECTOR2I &aPosition, int aAccuracy) const override
Test if aPosition is inside or on the boundary of this item.
KIGFX::COLOR4D GetBackgroundColor() const
bool IsPower() const override
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
std::map< wxString, wxString > m_Fields
A type-safe container of any type.
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
static constexpr EDA_ANGLE ANGLE_270
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
@ FILLED_SHAPE
Fill with object color.
a few functions useful in geometry calculations.
const wxChar *const traceSchSheetPaths
Flag to enable debug output of schematic symbol sheet path manipulation code.
@ LAYER_SELECTION_SHADOWS
constexpr void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
Message panel definition file.
bool BoxHitTest(const VECTOR2I &aHitPoint, const BOX2I &aHittee, int aAccuracy)
Perform a point-to-box hit test.
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.
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
KICOMMON_API void PackColor(types::Color &aOutput, const KIGFX::COLOR4D &aInput)
KICOMMON_API int UnpackDistance(const types::Distance &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API KIGFX::COLOR4D UnpackColor(const types::Color &aInput)
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackDistance(types::Distance &aOutput, int aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput, const EDA_IU_SCALE &aScale)
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
@ PT_SIZE
Size expressed in distance units (mm/inch)
std::optional< std::unique_ptr< VALIDATION_ERROR > > VALIDATOR_RESULT
Null optional means validation succeeded.
const SCH_FIELD * FindField(const std::vector< SCH_FIELD > &aFields, FIELD_T aFieldId)
int NextFieldOrdinal(const std::vector< SCH_FIELD > &aFields)
int bumpToNextGrid(const int aVal, const int aDirection)
static struct SCH_SHEET_DESC _SCH_SHEET_DESC
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
SHEET_SIDE
Define the edge of the sheet that the sheet pin is positioned.
std::vector< FAB_LAYER_COLOR > dummy
int StrNumCmp(const wxString &aString1, const wxString &aString2, bool aIgnoreCase)
Compare two strings with alphanumerical content.
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
bool m_PDFHierarchicalLinks
A simple container for sheet instance information.
std::map< wxString, SCH_SHEET_VARIANT > m_Variants
A list of sheet variants.
wxString GetDefaultFieldName(FIELD_T aFieldId, bool aTranslateForHI)
Return a default symbol field name for a mandatory field type.
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ FOOTPRINT
Field Name Module PCB, i.e. "16DIP300".
@ REFERENCE
Field Reference of part, i.e. "IC21".
wxString result
Test unit parsing edge cases and error handling.
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.
wxString GetFieldValidationErrorMessage(FIELD_T aFieldId, const wxString &aValue)
Return the error message if aValue is invalid for aFieldId.
Custom text control validator definitions.
VECTOR2< int32_t > VECTOR2I
VECTOR2< double > VECTOR2D