61 const wxString& aName ) :
66 m_allowAutoPlace( true ),
67 m_renderCacheValid( false ),
95 for(
const std::unique_ptr<KIFONT::GLYPH>& glyph : aField.
m_renderCache )
98 m_renderCache.emplace_back( std::make_unique<KIFONT::OUTLINE_GLYPH>( *outline ) );
100 m_renderCache.emplace_back( std::make_unique<KIFONT::STROKE_GLYPH>( *stroke ) );
122 for(
const std::unique_ptr<KIFONT::GLYPH>& glyph : aField.
m_renderCache )
125 m_renderCache.emplace_back( std::make_unique<KIFONT::OUTLINE_GLYPH>( *outline ) );
127 m_renderCache.emplace_back( std::make_unique<KIFONT::STROKE_GLYPH>( *stroke ) );
191 std::function<bool( wxString* )> symbolResolver =
192 [&]( wxString* token ) ->
bool
198 std::function<bool( wxString* )> sheetResolver =
199 [&]( wxString* token ) ->
bool
204 path.push_back( sheet );
209 std::function<bool( wxString* )> labelResolver =
210 [&]( wxString* token ) ->
bool
221 if(
text == wxS(
"~" ) )
268 return GetShownText( &schematic->CurrentSheet(), aAllowExtraText, aDepth );
306std::vector<std::unique_ptr<KIFONT::GLYPH>>*
336 if( glyph->IsOutline() )
371 if( !blackAndWhiteMode &&
GetTextColor() != COLOR4D::UNSPECIFIED )
389 if( parentSymbol && parentSymbol->
GetDNP() )
438 wxT(
"Cannot swap field data with invalid item." ) );
561 return render_center.
y > pos.
y;
563 return render_center.
x < pos.
x;
566 return render_center.
y < pos.
y;
568 return render_center.
x > pos.
x;
598 return render_center.
x < pos.
x;
600 return render_center.
y < pos.
y;
603 return render_center.
x > pos.
x;
605 return render_center.
y > pos.
y;
628 bool searchHiddenFields =
false;
629 bool searchAndReplace =
false;
630 bool replaceReferences =
false;
639 catch(
const std::bad_cast& )
645 if( !
IsVisible() && !searchHiddenFields )
650 if( searchAndReplace && !replaceReferences )
654 wxASSERT( aAuxData );
676 wxStyledTextEvent &aEvent )
const
684 wxStyledTextCtrl* scintilla = aScintillaTricks->
Scintilla();
685 int key = aEvent.GetKey();
687 wxArrayString autocompleteTokens;
688 int pos = scintilla->GetCurrentPos();
689 int start = scintilla->WordStartPosition( pos,
true );
695 wxString
text = scintilla->GetText();
696 int currpos = scintilla->GetCurrentPos();
697 text.Replace( wxS(
"\n" ), wxS(
"" ) );
698 scintilla->SetText(
text );
699 scintilla->GotoPos( currpos-1 );
707 && scintilla->GetCharAt( pt - 2 ) ==
'$'
708 && scintilla->GetCharAt( pt - 1 ) ==
'{';
712 if( start > 1 && scintilla->GetCharAt( start - 1 ) ==
':' )
714 int refStart = scintilla->WordStartPosition( start - 1,
true );
716 if( textVarRef( refStart ) )
718 partial = scintilla->GetRange( start, pos );
720 wxString ref = scintilla->GetRange( refStart, start - 1 );
722 if( ref == wxS(
"OP" ) )
734 if(
pin.StartsWith(
'<' ) &&
pin.EndsWith(
'>' ) )
735 autocompleteTokens.push_back(
pin.Mid( 1,
pin.Length() - 2 ) );
737 autocompleteTokens.push_back(
pin );
749 for(
size_t jj = 0; jj < refs.
GetCount(); jj++ )
751 if( refs[ jj ].GetSymbol()->GetRef( &refs[ jj ].GetSheetPath(),
true ) == ref )
753 refSymbol = refs[ jj ].GetSymbol();
763 else if( textVarRef( start ) )
765 partial = scintilla->GetTextRange( start, pos );
785 for( std::pair<wxString, wxString> entry : schematic->
Prj().
GetTextVars() )
786 autocompleteTokens.push_back( entry.first );
790 scintilla->SetFocus();
814 bool replaceReferences =
false;
821 catch(
const std::bad_cast& )
826 bool isReplaced =
false;
835 wxCHECK_MSG( aAuxData,
false, wxT(
"Need sheetpath to replace in refdes." ) );
837 if( !replaceReferences )
849 wxCHECK_MSG( aAuxData,
false, wxT(
"Need sheetpath to replace in value field." ) );
860 wxCHECK_MSG( aAuxData,
false, wxT(
"Need sheetpath to replace in footprint field." ) );
917 aList.emplace_back(
_(
"Visible" ),
IsVisible() ?
_(
"Yes" ) :
_(
"No" ) );
933 aList.emplace_back(
_(
"H Justification" ), msg );
943 aList.emplace_back(
_(
"V Justification" ), msg );
949 constexpr int START_ID = 1;
954 std::vector<std::pair<wxString, wxString>> pages;
960 for(
int i = 0; i < (int) pages.size(); ++i )
962 menu.Append( i + START_ID, wxString::Format(
_(
"Go to Page %s (%s)" ),
967 menu.AppendSeparator();
968 menu.Append( 999 + START_ID,
_(
"Back to Previous Selected Sheet" ) );
970 int sel = aFrame->GetPopupMenuSelectionFromUser( menu ) - START_ID;
972 if( sel >= 0 && sel < (
int) pages.size() )
973 href = wxT(
"#" ) + pages[ sel ].first;
974 else if( sel == 999 )
977 if( !href.IsEmpty() )
1013 else if(
m_name.IsEmpty() && aUseDefaultName )
1022 else if(
m_name.IsEmpty() && aUseDefaultName )
1033 wxFAIL_MSG(
"Unhandled field owner type." );
1052 case SHEETNAME:
return wxT(
"Sheetname" );
1060 if(
m_name ==
_(
"Net Class" ) ||
m_name == wxT(
"Net Class" ) )
1062 return wxT(
"Netclass" );
1064 else if(
m_name ==
_(
"Sheet References" )
1065 ||
m_name == wxT(
"Sheet References" )
1066 ||
m_name == wxT(
"Intersheet References" ) )
1068 return wxT(
"Intersheetrefs" );
1079 wxFAIL_MSG( wxString::Format(
"Unhandled field owner type (id %d, parent type %d).",
1095 case VALUE_FIELD:
return BITMAPS::edit_comp_value;
1097 default:
return BITMAPS::text;
1101 return BITMAPS::text;
1160 if( bg == COLOR4D::UNSPECIFIED || !aPlotter->
GetColorMode() )
1161 bg = COLOR4D::WHITE;
1184 if( parentSymbol->
GetDNP() )
1236 std::vector<std::pair<wxString, wxString>> pages;
1237 std::vector<wxString> pageHrefs;
1244 for(
const std::pair<wxString, wxString>& page : pages )
1245 pageHrefs.push_back( wxT(
"#" ) + page.first );
1301 auto field =
static_cast<const SCH_FIELD*
>( &aItem );
1303 if(
GetId() != field->GetId() )
1304 return GetId() < field->GetId();
1306 if(
GetText() != field->GetText() )
1307 return GetText() < field->GetText();
1315 return GetName() < field->GetName();
1357 double similarity = 0.99;
1412 _HKI(
"Text Properties" ) );
1416 auto isNotNamedVariable =
1420 return !field->IsNamedVariable();
1426 isNotNamedVariable );
constexpr EDA_IU_SCALE schIUScale
BITMAPS
A list of all bitmap identifiers.
void SetOrigin(const Vec &pos)
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
const Vec & GetOrigin() const
void Offset(coord_type dx, coord_type dy)
bool Intersects(const BOX2< Vec > &aRect) const
void Move(const Vec &aMoveVector)
Move the rectangle by the aMoveVector.
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.
void SetEnd(coord_type x, coord_type y)
bool IsHorizontal() 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.
virtual VECTOR2I GetPosition() const
KICAD_T Type() const
Returns the type of object.
virtual bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
EDA_ITEM * GetParent() const
EDA_ITEM * m_parent
Linked list: Link (parent struct)
bool IsForceVisible() const
static bool Replace(const EDA_SEARCH_DATA &aSearchData, wxString &aText)
Perform a text replace on aText using the find and replace criteria in aSearchData on items that supp...
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
BOX2I GetTextBox(int aLine=-1, bool aInvertY=false) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
const VECTOR2I & GetTextPos() const
COLOR4D GetTextColor() const
wxString GetTextStyleName() const
const EDA_ANGLE & GetTextAngle() const
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
void SetTextPos(const VECTOR2I &aPoint)
KIFONT::FONT * GetFont() const
void SetAttributes(const EDA_TEXT &aSrc, bool aSetPosition=true)
Set the text attributes from another instance.
EDA_TEXT & operator=(const EDA_TEXT &aItem)
GR_TEXT_H_ALIGN_T GetHorizJustify() const
bool Replace(const EDA_SEARCH_DATA &aSearchData)
Helper function used in search and replace dialog.
bool HasTextVars() const
Indicates the ShownText has text var references which need to be processed.
virtual void SetVisible(bool aVisible)
virtual void ClearBoundingBoxCache()
virtual void ClearRenderCache()
const TEXT_ATTRIBUTES & GetAttributes() const
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
void SwapAttributes(EDA_TEXT &aTradingPartner)
Swap the text attributes of the two involved instances.
GR_TEXT_V_ALIGN_T GetVertJustify() const
virtual wxString GetShownText(bool aAllowExtraText, int aDepth=0) const
Return the string actually shown after processing of the base text.
virtual void SetText(const wxString &aText)
double Levenshtein(const EDA_TEXT &aOther) const
Return the levenstein distance between two texts.
void SwapText(EDA_TEXT &aTradingPartner)
VECTOR2I GetTextSize() const
Class that other classes need to inherit from, in order to be inspectable.
FONT is an abstract base class for both outline and stroke fonts.
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false)
virtual bool IsOutline() const
Class OUTLINE_FONT implements outline font drawing.
void GetLinesAsGlyphs(std::vector< std::unique_ptr< GLYPH > > *aGlyphs, const wxString &aText, const VECTOR2I &aPosition, const TEXT_ATTRIBUTES &aAttrs, const METRICS &aFontMetrics) const
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.
int GetDefaultPenWidth() const
int GetMinPenWidth() const
const wxString & GetDefaultFont() const
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
virtual const COLOR4D & GetBackgroundColor() const =0
Return current background color settings.
wxDC * GetPrintDC() const
Field object used in symbol libraries.
bool CanAutoplace() const
A singleton reporter that reports to nowhere.
Base plotter engine class.
RENDER_SETTINGS * RenderSettings()
bool GetColorMode() const
virtual void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
virtual void PlotText(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const TEXT_ATTRIBUTES &aAttributes, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics, void *aData=nullptr)
virtual std::map< wxString, wxString > & GetTextVars() 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.
void Mask(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName)
Sets a base class property as masked in a derived class.
static PROPERTY_MANAGER & Instance()
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
void OverrideWriteability(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName, std::function< bool(INSPECTABLE *)> aFunc)
Sets an override writeability functor for a base class property of a given derived class.
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
Holds all the data relating to one schematic.
SCH_SHEET_PATH & CurrentSheet() const override
SCH_SHEET_LIST GetSheets() const override
Builds and returns an updated schematic hierarchy TODO: can this be cached?
PROJECT & Prj() const override
Return a reference to the project this schematic is part of.
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
void ClearRenderCache() override
COLOR4D m_lastResolvedColor
GR_TEXT_V_ALIGN_T GetEffectiveVertJustify() const
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
std::vector< std::unique_ptr< KIFONT::GLYPH > > m_renderCache
void ViewGetLayers(int aLayers[], int &aCount) const override
Return the all the layers within the VIEW the object is painted on.
VECTOR2I GetPosition() const override
int GetSchTextSize() const
bool Replace(const EDA_SEARCH_DATA &aSearchData, void *aAuxData=nullptr) override
Perform a text replace using the find and replace criteria in aSearchData on items that support text ...
bool m_showName
Render the field name in addition to its value.
void Rotate(const VECTOR2I &aCenter) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
void Print(const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset) override
Print a schematic item.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
bool IsHypertext() const override
Allow items to support hypertext actions when hovered/clicked.
double Similarity(const SCH_ITEM &aItem) const override
Return a measure of how likely the other object is to represent the same object.
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
bool IsHorizJustifyFlipped() const
Return whether the field will be rendered with the horizontal justification inverted due to rotation ...
bool IsVertJustifyFlipped() const
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider) const override
Return a user-visible description string of this item.
EDA_ANGLE GetDrawRotation() const override
Adjusters to allow EDA_TEXT to draw/print/etc.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
void SetCanAutoplace(bool aCanPlace)
bool m_isNamedVariable
If the field name is a variable name, e.g.
void DoHypertextAction(EDA_DRAW_FRAME *aFrame) const override
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_SETTINGS &aPlotSettings) const override
Plot the schematic item to aPlotter.
int GetPenWidth() const override
wxString GetCanonicalName() const
Get a non-language-specific name for a field which can be used for storage, variable look-up,...
COLOR4D GetFieldColor() const
bool IsNamedVariable() const
Named variables are fields whose names are variables like ${VAR}.
bool operator==(const SCH_ITEM &aItem) const override
SCH_FIELD & operator=(const SCH_FIELD &aField)
bool operator<(const SCH_ITEM &aItem) const override
wxString GetShownName() const
Gets the fields name as displayed on the schematic or in the symbol fields table.
VECTOR2I GetLibPosition() const
bool IsEmpty()
Return true if both the name and value of the field are empty.
SCH_FIELD(const VECTOR2I &aPos, int aFieldId, SCH_ITEM *aParent, const wxString &aName=wxEmptyString)
bool IsReplaceable() const override
Override this method in any derived object that supports test find and replace.
void SetSchTextSize(int aSize)
GR_TEXT_H_ALIGN_T GetEffectiveHorizJustify() const
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
void SetPosition(const VECTOR2I &aPosition) override
void ImportValues(const LIB_FIELD &aSource)
Copy parameters from a LIB_FIELD source.
void SwapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
void SetName(const wxString &aName)
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
VECTOR2I m_renderCachePos
bool CanAutoplace() const
std::vector< std::unique_ptr< KIFONT::GLYPH > > * GetRenderCache(const wxString &forResolvedText, const VECTOR2I &forPosition, TEXT_ATTRIBUTES &aAttrs) 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.
void ClearCaches() override
void SetText(const wxString &aText) override
VECTOR2I GetParentPosition() const
void OnScintillaCharAdded(SCINTILLA_TRICKS *aScintillaTricks, wxStyledTextEvent &aEvent) const
void SetNameShown(bool aShown=true)
KIFONT::FONT * getDrawFont() const override
bool m_allowAutoPlace
This field can be autoplaced.
VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const override
This offset depends on the orientation, the type of text, and the area required to draw the associate...
Base class for any item which can be embedded within the SCHEMATIC container class,...
const wxString & GetDefaultFont() const
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
std::shared_ptr< NETCLASS > GetEffectiveNetClass(const SCH_SHEET_PATH *aSheet=nullptr) const
void SetLayer(SCH_LAYER_ID aLayer)
Set the layer this item is on.
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
bool IsConnectivityDirty() const
void SwapFlags(SCH_ITEM *aItem)
Swap the non-temp and non-edit flags.
const KIFONT::METRICS & GetFontMetrics() const
void GetIntersheetRefs(std::vector< std::pair< wxString, wxString > > *pages)
Builds an array of { pageNumber, pageName } pairs.
virtual bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth) const
Resolve any references to system tokens supported by the label.
static const wxString GetDefaultFieldName(const wxString &aName, bool aUseDefaultName)
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this label.
VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const override
This offset depends on the orientation, the type of text, and the area required to draw the associate...
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this sheet.
static const wxString GetDefaultFieldName(int aFieldNdx, bool aTranslated=true)
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
int GetUnitCount() const
Return the number of units per package of the symbol.
wxString SubReference(int aUnit, bool aAddSeparator=true) const
void SetValueFieldText(const wxString &aValue)
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const
Return the reference for the given sheet path.
SCH_FIELD * GetField(MANDATORY_FIELD_T aFieldType)
Return a mandatory field in this symbol.
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
void SetFootprintFieldText(const wxString &aFootprint)
VECTOR2I GetPosition() const override
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the symbol.
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this symbol.
TRANSFORM & GetTransform()
int GetUnitSelection(const SCH_SHEET_PATH *aSheet) const
Return the instance-specific unit selection for the given sheet path.
Add cut/copy/paste, dark theme, autocomplete and brace highlighting to a wxStyleTextCtrl instance.
wxStyledTextCtrl * Scintilla() const
void DoAutocomplete(const wxString &aPartial, const wxArrayString &aTokens)
SIM_MODEL & CreateModel(SIM_MODEL::TYPE aType, const std::vector< LIB_PIN * > &aPins, REPORTER &aReporter)
virtual std::vector< std::string > GetPinNames() const
GR_TEXT_H_ALIGN_T m_Halign
GR_TEXT_V_ALIGN_T m_Valign
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
wxString ExpandTextVars(const wxString &aSource, const PROJECT *aProject)
wxString GetTextVars(const wxString &aSource)
Returns any variables unexpanded, e.g.
static constexpr EDA_ANGLE ANGLE_90
static constexpr EDA_ANGLE ANGLE_VERTICAL
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
bool GetGRForceBlackPenState(void)
void GRPrintText(wxDC *aDC, const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const EDA_ANGLE &aOrient, const VECTOR2I &aSize, enum GR_TEXT_H_ALIGN_T aH_justify, enum GR_TEXT_V_ALIGN_T aV_justify, int aWidth, bool aItalic, bool aBold, KIFONT::FONT *aFont, const KIFONT::METRICS &aFontMetrics)
Print a graphic text through wxDC.
@ LAYER_SELECTION_SHADOWS
void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
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.
static struct SCH_FIELD_DESC _SCH_FIELD_DESC
@ SHEET_MANDATORY_FIELDS
The first 2 are mandatory, and must be instantiated in SCH_SHEET.
wxString UnescapeString(const wxString &aSource)
static const wxString GetDefaultFieldName(int aFieldNdx, bool aTranslateForHI=false)
Return a default symbol field name for field aFieldNdx for all components.
Definition for symbol library class.
wxString GetCanonicalFieldName(int idx)
@ 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".
@ GR_TEXT_H_ALIGN_INDETERMINATE
@ GR_TEXT_V_ALIGN_INDETERMINATE
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.
#define INDETERMINATE_STATE
Used for holding indeterminate values, such as with multiple selections holding different values or c...