KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_io_altium.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2020 Thomas Pointhuber <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
21#ifndef _SCH_IO_ALTIUM_H_
22#define _SCH_IO_ALTIUM_H_
23
24#include <memory>
25#include <set>
26#include <sch_sheet_path.h>
27#include <vector>
28#include <sch_io/sch_io.h>
29#include <sch_io/sch_io_mgr.h>
30#include <wx/filename.h>
31#include <wx/gdicmn.h>
33
34#include "altium_parser_sch.h"
35
36class SYMBOL;
37class SCH_SYMBOL;
38class SCH_SHEET;
39class TITLE_BLOCK;
40
42
49
50static std::vector<LIB_SYMBOL*> nullsym;
51static std::vector<int> nullint;
52
70
71
72class SCH_IO_ALTIUM : public SCH_IO
73{
74public:
77
79 {
80 return IO_BASE::IO_FILE_DESC( _HKI( "Altium schematic files" ), { "SchDoc" } );
81 }
82
84 {
85 return IO_BASE::IO_FILE_DESC( _HKI( "Altium Schematic Library or Integrated Library" ),
86 { "SchLib", "IntLib" } );
87 }
88
89 bool CanReadSchematicFile( const wxString& aFileName ) const override;
90 bool CanReadLibrary( const wxString& aFileName ) const override;
91
92 int GetModifyHash() const override;
93
94 SCH_SHEET* LoadSchematicFile( const wxString& aFileName, SCHEMATIC* aSchematic,
95 SCH_SHEET* aAppendToMe = nullptr,
96 const std::map<std::string, UTF8>* aProperties = nullptr ) override;
97
99 const std::map<std::string, UTF8>* aProperties );
100
101 // unimplemented functions. Will trigger a not_implemented IO error.
102 //void SaveLibrary( const wxString& aFileName, const PROPERTIES* aProperties = NULL ) override;
103
104 //void Save( const wxString& aFileName, SCH_SCREEN* aSchematic, KIWAY* aKiway,
105 // const PROPERTIES* aProperties = NULL ) override;
106
107
108 void EnumerateSymbolLib( wxArrayString& aSymbolNameList,
109 const wxString& aLibraryPath,
110 const std::map<std::string, UTF8>* aProperties = nullptr ) override;
111
112 void EnumerateSymbolLib( std::vector<LIB_SYMBOL*>& aSymbolList,
113 const wxString& aLibraryPath,
114 const std::map<std::string, UTF8>* aProperties = nullptr ) override;
115
116 LIB_SYMBOL* LoadSymbol( const wxString& aLibraryPath,
117 const wxString& aAliasName,
118 const std::map<std::string, UTF8>* aProperties = nullptr ) override;
119
120 //void SaveSymbol( const wxString& aLibraryPath, const LIB_SYMBOL* aSymbol,
121 // const PROPERTIES* aProperties = NULL ) override;
122
123 //void DeleteAlias( const wxString& aLibraryPath, const wxString& aAliasName,
124 // const PROPERTIES* aProperties = NULL ) override;
125
126 //void DeleteSymbol( const wxString& aLibraryPath, const wxString& aAliasName,
127 // const PROPERTIES* aProperties = NULL ) override;
128
129 bool IsLibraryWritable( const wxString& aLibraryPath ) override { return false; }
130
131 wxString getLibName();
132 wxFileName getLibFileName();
133
134 void ParseAltiumSch( const wxString& aFileName );
135
138 void attachEmptySheetScreen( SCH_SHEET* aSheet, const wxString& aMissingFile );
139
142 wxString claimSheetFile( const wxString& aStem );
143
146 void pruneCyclicSheets( const std::vector<SCH_SHEET*>& aCyclicSheets, SCH_SCREEN* aScreen );
147
148 void ParseStorage( const ALTIUM_COMPOUND_FILE& aAltiumSchFile );
149 void ParseAdditional( const ALTIUM_COMPOUND_FILE& aAltiumSchFile );
150 void ParseFileHeader( const ALTIUM_COMPOUND_FILE& aAltiumSchFile );
151
152 void ParseASCIISchematic( const wxString& aFileName );
153
154 void ParseRecord( int index, std::map<wxString, wxString>& properties,
155 const wxString& aSectionName );
156
157private:
160
161 bool ShouldPutItemOnSheet( int aOwnerindex );
162 const ASCH_STORAGE_FILE* GetFileFromStorage( const wxString& aFilename ) const;
163 void CreateAliases();
166 wxFileName ResolveSheetFileName( const wxString& aParentPath, const wxString& aSheetFileName ) const;
168
175 void AddTextBox( const ASCH_TEXT_FRAME* aElem );
176 void AddLibTextBox( const ASCH_TEXT_FRAME* aElem, std::vector<LIB_SYMBOL*>& aSymbol = nullsym,
177 std::vector<int>& aFontSize = nullint );
178
179 void ParseComponent( int aIndex, const std::map<wxString, wxString>& aProperties );
180 void ParseTemplate( int aIndex, const std::map<wxString, wxString>& aProperties );
181 void ParsePin( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
182 void ParseLabel( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym,
183 std::vector<int>& aFontSize = nullint );
184 void ParseTextFrame( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym,
185 std::vector<int>& aFontSize = nullint );
186 void ParseNote( const std::map<wxString, wxString>& aProperties );
187 void ParseBezier( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
188 void ParsePolyline( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
189 void ParsePolygon( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
190 void ParseRoundRectangle( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
191 void ParseArc( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
192 void ParseEllipticalArc( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
193 void ParseEllipse( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
194 void ParseCircle( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
195 void ParseLine( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
196 void ParseSignalHarness( const std::map<wxString, wxString>& aProperties );
197 void ParseHarnessConnector( int aIndex, const std::map<wxString, wxString>& aProperties );
198 void ParseHarnessEntry( const std::map<wxString, wxString>& aProperties );
199 void ParseHarnessType( const std::map<wxString, wxString>& aProperties );
200 void ParseHarnessPort( const ASCH_PORT& aElem );
201 void ParseHyperlink( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
202 void ParsePieChart( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
203 void ParseRectangle( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym);
204 void ParseSheetSymbol( int aIndex, const std::map<wxString, wxString>& aProperties );
205 void ParseSheetEntry( const std::map<wxString, wxString>& aProperties );
206 void ParsePowerPort( const std::map<wxString, wxString>& aProperties );
207 void ParsePort( const ASCH_PORT& aElem );
208 void ParsePortHelper( const ASCH_PORT& aElem );
209 void ParseNoERC( const std::map<wxString, wxString>& aProperties );
210 void ParseNetLabel( const std::map<wxString, wxString>& aProperties );
211 void ParseBus( const std::map<wxString, wxString>& aProperties );
212 void ParseWire( const std::map<wxString, wxString>& aProperties );
213 void ParseJunction( const std::map<wxString, wxString>& aProperties );
214 void ParseImage( const std::map<wxString, wxString>& aProperties );
215 void ParseSheet( const std::map<wxString, wxString>& aProperties );
216 void ParseSheetName( const std::map<wxString, wxString>& aProperties );
217 void ParseFileName( const std::map<wxString, wxString>& aProperties );
218 void ParseDesignator( const std::map<wxString, wxString>& aProperties );
219 void ParseLibDesignator( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym, std::vector<int>& aFontSize = nullint );
220 void ParseBusEntry( const std::map<wxString, wxString>& aProperties );
221 void ParseParameter( const std::map<wxString, wxString>& aProperties );
222 void ParseLibParameter( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym, std::vector<int>& aFontSize = nullint );
223 void ParseImplementationList( int aIndex, const std::map<wxString, wxString>& aProperties );
224 void ParseImplementation( const std::map<wxString, wxString>& aProperties, std::vector<LIB_SYMBOL*>& aSymbol = nullsym );
225
226 void ParseLibHeader( const ALTIUM_COMPOUND_FILE& aAltiumSchFile, std::vector<int>& aFontSizes );
228 std::vector<LIB_SYMBOL*> ParseLibComponent( const std::map<wxString, wxString>& aProperties );
229
230 void doEnumerateSymbolLib( const wxString& aLibraryPath, const std::map<std::string, UTF8>* aProperties,
231 std::function<void(const wxString&, LIB_SYMBOL*)> aInserter );
232
233 void fixupSymbolPinNameNumbers( SYMBOL* aSymbol );
234
235 // Symbol caching
236 void ensureLoadedLibrary( const wxString& aLibraryPath, const std::map<std::string, UTF8>* aProperties );
237 long long getLibraryTimestamp( const wxString& aLibraryPath ) const;
238
239 static bool isBinaryFile( const wxString& aFileName );
240 static bool isASCIIFile( const wxString& aFileName );
241 static bool checkFileHeader( const wxString& aFileName );
242
243private:
244 wxString m_rootFilepath; // The file path of the root sheet being imported
245 SCH_SHEET* m_rootSheet; // The root sheet of the schematic being loaded..
247 std::set<wxString> m_unsetSheetParams; // Sheet parameters Altium leaves as "*"
248 SCHEMATIC* m_schematic; // Passed to Load(), the schematic object being loaded
249 wxString m_libName; // Library name to save symbols
250 bool m_isIntLib; // Flag to indicate Integrated Library
251
252 std::unique_ptr<TITLE_BLOCK> m_currentTitleBlock; // Will be assigned at the end of parsing
253 // a sheet
254
256 std::unique_ptr<ASCH_SHEET> m_altiumSheet;
257 std::map<int, SCH_SYMBOL*> m_symbols;
258 std::map<int, SCH_SHEET*> m_sheets;
259 std::map<int, LIB_SYMBOL*> m_libSymbols; // every symbol has its unique lib_symbol
260
261 std::map<wxString, LIB_SYMBOL*> m_powerSymbols;
262 std::vector<ASCH_STORAGE_FILE> m_altiumStorage;
263 std::vector<ASCH_ADDITIONAL_FILE> m_altiumAdditional;
264
265 std::map<int, ASCH_SYMBOL> m_altiumComponents;
266 std::map<int, ASCH_TEMPLATE> m_altiumTemplates;
267 std::map<int, int> m_altiumImplementationList;
268 std::vector<ASCH_PORT> m_altiumPortsCurrentSheet; // we require all connections first
269
270 // parse harness ports after "FileHeader" was parsed, in 2nd run.
271 std::vector<ASCH_PORT> m_altiumHarnessPortsCurrentSheet;
272 std::map<int, HARNESS> m_altiumHarnesses;
273
274 // Add offset to all harness ownerIndex'es after parsing FileHeader.
276 int m_harnessEntryParent; // used to identify harness connector for harness entry element
277
278 std::map<wxString, long long> m_timestamps;
279 std::map<wxString, CASE_INSENSITIVE_MAP<LIB_SYMBOL*>> m_libCache;
280
281 // List of available fonts with font name and font size in pt
282 std::vector<std::pair<wxString, int>> m_fonts;
283
284 // Persists across sheets so variant application can match by Altium UniqueId
285 std::map<const SCH_SYMBOL*, wxString> m_altiumSymbolToUid;
286
287 // Special strings sheet text refers to, which Altium resolves to nothing when no value exists
288 std::set<wxString> m_sheetSpecialStrings;
289
290 // Cache the error messages to avoid duplicate messages
291 std::unordered_map<wxString, SEVERITY > m_errorMessages;
292
293 // Canonical parse-stack paths, ref-counted so a multi-page block holds all sibling members at
294 // once. Breaks cyclic OrCad sheet references. See PARSE_FILE_GUARD.
295 std::map<wxString, int> m_parsingFiles;
296
297 // Fully parsed sub-sheet screens by their ordered source files, shared by repeated channels
298 std::map<std::vector<wxString>, SCH_SCREEN*> m_loadedScreens;
299
300 // Empty screens of sheets whose source file is missing, by their KiCad file path
301 std::map<wxString, SCH_SCREEN*> m_missingScreens;
302
303 // The lower-cased files the sheet screens claimed
304 std::set<wxString> m_sheetFiles;
305
306 // The file the root or first project sheet is saved as, which no other sheet may take
308
309 // Parse keys of the source files read so far
310 std::set<wxString> m_parsedFiles;
311
312 // Lower-cased parse keys of the source files some sheet symbol shows
313 std::set<wxString> m_subsheetFiles;
314
315 // The schematic documents a project lists, which its sheet symbols name wherever they are
316 std::vector<wxFileName> m_projectDocuments;
317
318 friend struct PARSE_FILE_GUARD;
319};
320
321#endif // _SCH_IO_ALTIUM_H_
int index
ASCH_SHEET_ENTRY_SIDE
std::map< wxString, ValueType, DETAIL::CASE_INSENSITIVE_COMPARER > CASE_INSENSITIVE_MAP
Define a library symbol object.
Definition lib_symbol.h:114
Holds all the data relating to one schematic.
Definition schematic.h:149
void ParseFileHeader(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
void ParseHyperlink(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::vector< wxFileName > m_projectDocuments
void ParseSignalHarness(const std::map< wxString, wxString > &aProperties)
std::map< int, ASCH_TEMPLATE > m_altiumTemplates
std::map< int, ASCH_SYMBOL > m_altiumComponents
void ParsePort(const ASCH_PORT &aElem)
void ParseNote(const std::map< wxString, wxString > &aProperties)
std::map< std::vector< wxString >, SCH_SCREEN * > m_loadedScreens
void ParseAltiumSch(const wxString &aFileName)
std::vector< ASCH_PORT > m_altiumPortsCurrentSheet
void ParseSheetName(const std::map< wxString, wxString > &aProperties)
void ParseBusEntry(const std::map< wxString, wxString > &aProperties)
wxFileName ResolveSheetFileName(const wxString &aParentPath, const wxString &aSheetFileName) const
const IO_BASE::IO_FILE_DESC GetLibraryDesc() const override
Get the descriptor for the library container that this IO plugin operates on.
SCH_SHEET * getCurrentSheet()
void ParseStorage(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
std::map< wxString, LIB_SYMBOL * > m_powerSymbols
void ParseBus(const std::map< wxString, wxString > &aProperties)
void ParseFileName(const std::map< wxString, wxString > &aProperties)
static bool isASCIIFile(const wxString &aFileName)
wxString m_libName
LIB_SYMBOL * LoadSymbol(const wxString &aLibraryPath, const wxString &aAliasName, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Load a LIB_SYMBOL object having aPartName from the aLibraryPath containing a library format that this...
std::map< int, SCH_SHEET * > m_sheets
const IO_BASE::IO_FILE_DESC GetSchematicFileDesc() const override
Returns schematic file description for the SCH_IO.
void ParseLibHeader(const ALTIUM_COMPOUND_FILE &aAltiumSchFile, std::vector< int > &aFontSizes)
void ParseHarnessPort(const ASCH_PORT &aElem)
void ParseRoundRectangle(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void pruneCyclicSheets(const std::vector< SCH_SHEET * > &aCyclicSheets, SCH_SCREEN *aScreen)
Remove sheet symbols referencing a parse-stack file (an unrepresentable cycle), converting their pins...
int GetModifyHash() const override
Return the modification hash from the library cache.
void ParseLibDesignator(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
std::map< wxString, CASE_INSENSITIVE_MAP< LIB_SYMBOL * > > m_libCache
std::map< int, int > m_altiumImplementationList
void attachEmptySheetScreen(SCH_SHEET *aSheet, const wxString &aMissingFile)
Give a sheet whose source file is missing an empty screen with a file of its own; aMissingFile is emp...
std::map< wxString, SCH_SCREEN * > m_missingScreens
void ParseTextFrame(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
void ParsePolygon(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void fixupSymbolPinNameNumbers(SYMBOL *aSymbol)
VECTOR2I m_sheetOffset
void EnsureSheetSymbolNames()
void ParseRecord(int index, std::map< wxString, wxString > &properties, const wxString &aSectionName)
std::vector< ASCH_PORT > m_altiumHarnessPortsCurrentSheet
void ParseDesignator(const std::map< wxString, wxString > &aProperties)
int m_harnessOwnerIndexOffset
void ParsePortHelper(const ASCH_PORT &aElem)
std::set< wxString > m_subsheetFiles
static bool checkFileHeader(const wxString &aFileName)
long long getLibraryTimestamp(const wxString &aLibraryPath) const
void ParseSheetEntry(const std::map< wxString, wxString > &aProperties)
SCH_SHEET * m_rootSheet
static bool isBinaryFile(const wxString &aFileName)
void ParseHarnessType(const std::map< wxString, wxString > &aProperties)
wxString m_rootFilepath
void ParseJunction(const std::map< wxString, wxString > &aProperties)
SCHEMATIC * m_schematic
wxString m_rootSheetFile
void ParseLibParameter(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
std::set< wxString > m_parsedFiles
void ParseASCIISchematic(const wxString &aFileName)
void ParsePolyline(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::unique_ptr< ASCH_SHEET > m_altiumSheet
void ParseComponent(int aIndex, const std::map< wxString, wxString > &aProperties)
std::unique_ptr< TITLE_BLOCK > m_currentTitleBlock
SCH_SHEET * LoadSchematicProject(SCHEMATIC *aSchematic, const std::map< std::string, UTF8 > *aProperties)
void ParseImage(const std::map< wxString, wxString > &aProperties)
void ParseArc(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseNetLabel(const std::map< wxString, wxString > &aProperties)
void ParseNoERC(const std::map< wxString, wxString > &aProperties)
SCH_SHEET * LoadSchematicFile(const wxString &aFileName, SCHEMATIC *aSchematic, SCH_SHEET *aAppendToMe=nullptr, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Load information from some input file format that this SCH_IO implementation knows about,...
std::unordered_map< wxString, SEVERITY > m_errorMessages
std::map< wxString, int > m_parsingFiles
void ParseImplementationList(int aIndex, const std::map< wxString, wxString > &aProperties)
std::vector< LIB_SYMBOL * > ParseLibComponent(const std::map< wxString, wxString > &aProperties)
void ParseSheet(const std::map< wxString, wxString > &aProperties)
void ParseParameter(const std::map< wxString, wxString > &aProperties)
bool ShouldPutItemOnSheet(int aOwnerindex)
void NormalizeRepeatedSheetInstances()
void AddLibTextBox(const ASCH_TEXT_FRAME *aElem, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
bool CanReadSchematicFile(const wxString &aFileName) const override
Checks if this SCH_IO can read the specified schematic file.
void ParsePieChart(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseEllipticalArc(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::map< int, HARNESS > m_altiumHarnesses
void ParseEllipse(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::set< wxString > m_sheetSpecialStrings
void ParseWire(const std::map< wxString, wxString > &aProperties)
bool IsLibraryWritable(const wxString &aLibraryPath) override
Return true if the library at aLibraryPath is writable.
void ParseHarnessEntry(const std::map< wxString, wxString > &aProperties)
void EnumerateSymbolLib(wxArrayString &aSymbolNameList, const wxString &aLibraryPath, const std::map< std::string, UTF8 > *aProperties=nullptr) override
Populate a list of LIB_SYMBOL alias names contained within the library aLibraryPath.
void ParseImplementation(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseTemplate(int aIndex, const std::map< wxString, wxString > &aProperties)
void ParseAdditional(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
std::vector< ASCH_ADDITIONAL_FILE > m_altiumAdditional
friend struct PARSE_FILE_GUARD
std::set< wxString > m_sheetFiles
std::set< wxString > m_unsetSheetParams
void AddTextBox(const ASCH_TEXT_FRAME *aElem)
void ParsePowerPort(const std::map< wxString, wxString > &aProperties)
bool CanReadLibrary(const wxString &aFileName) const override
Checks if this IO object can read the specified library file/directory.
std::map< const SCH_SYMBOL *, wxString > m_altiumSymbolToUid
const ASCH_STORAGE_FILE * GetFileFromStorage(const wxString &aFilename) const
void ParseRectangle(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void doEnumerateSymbolLib(const wxString &aLibraryPath, const std::map< std::string, UTF8 > *aProperties, std::function< void(const wxString &, LIB_SYMBOL *)> aInserter)
wxString getLibName()
void NameNetsAfterNetLabels()
Name power nets after their net labels, as Altium does unless Power Port Names Take Priority is set.
std::vector< ASCH_STORAGE_FILE > m_altiumStorage
SCH_SHEET_PATH m_sheetPath
void PostProcessBusLabels()
wxString claimSheetFile(const wxString &aStem)
Claim a file in the project folder for a sheet screen that neither the root nor another sheet holds,...
void ParseLabel(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym, std::vector< int > &aFontSize=nullint)
CASE_INSENSITIVE_MAP< LIB_SYMBOL * > ParseLibFile(const ALTIUM_COMPOUND_FILE &aAltiumSchFile)
void ParseBezier(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseLine(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
void ParseCircle(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::map< int, SCH_SYMBOL * > m_symbols
void ParseSheetSymbol(int aIndex, const std::map< wxString, wxString > &aProperties)
std::vector< std::pair< wxString, int > > m_fonts
std::map< wxString, long long > m_timestamps
wxFileName getLibFileName()
SCH_SCREEN * getCurrentScreen()
void ParsePin(const std::map< wxString, wxString > &aProperties, std::vector< LIB_SYMBOL * > &aSymbol=nullsym)
std::map< int, LIB_SYMBOL * > m_libSymbols
void ParseHarnessConnector(int aIndex, const std::map< wxString, wxString > &aProperties)
void ensureLoadedLibrary(const wxString &aLibraryPath, const std::map< std::string, UTF8 > *aProperties)
SCH_IO(const wxString &aName)
Definition sch_io.h:406
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition sch_sheet.h:48
Schematic symbol object.
Definition sch_symbol.h:75
A base class for LIB_SYMBOL and SCH_SYMBOL.
Definition symbol.h:60
Hold the information shown in the lower right corner of a plot, printout, or editing view.
Definition title_block.h:38
#define _HKI(x)
Definition page_info.cpp:40
static std::vector< int > nullint
static std::vector< LIB_SYMBOL * > nullsym
SCH_IO_ALTIUM is a SCH_IO derivation for loading Altium .SchDoc schematic files.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
ASCH_SHEET_ENTRY_SIDE m_harnessConnectorSide
VECTOR2I m_location
std::vector< HARNESS_PORT > m_ports
HARNESS_PORT m_entry
wxString m_name
VECTOR2I m_size
Container that describes file type info.
Definition io_base.h:43
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:708