KiCad PCB EDA Suite
color_settings.cpp
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 Jon Evans <[email protected]>
5 * Copyright (C) 2021-2022 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#include <layer_ids.h>
22#include <pgm_base.h>
25#include <settings/parameters.h>
27#include <wx/log.h>
28
30
31
33const int colorsSchemaVersion = 5;
34
35
36COLOR_SETTINGS::COLOR_SETTINGS( const wxString& aFilename, bool aAbsolutePath ) :
38 m_overrideSchItemColors( false ),
39 m_useBoardStackupColors( true )
40{
41 if( aAbsolutePath )
43
44 m_params.emplace_back( new PARAM<wxString>( "meta.name", &m_displayName, "KiCad Default" ) );
45
46 m_params.emplace_back( new PARAM<bool>( "schematic.override_item_colors",
47 &m_overrideSchItemColors, false ) );
48
49 m_params.emplace_back( new PARAM<bool>( "3d_viewer.use_board_stackup_colors",
50 &m_useBoardStackupColors, true ) );
51
52#define CLR( x, y ) \
53 wxASSERT( s_defaultTheme.count( y ) ); \
54 m_params.emplace_back( new COLOR_MAP_PARAM( x, y, s_defaultTheme.at( y ), &m_colors ) );
55
56 CLR( "schematic.anchor", LAYER_SCHEMATIC_ANCHOR );
57 CLR( "schematic.aux_items", LAYER_SCHEMATIC_AUX_ITEMS );
58 CLR( "schematic.background", LAYER_SCHEMATIC_BACKGROUND );
59 CLR( "schematic.hovered", LAYER_HOVERED );
60 CLR( "schematic.brightened", LAYER_BRIGHTENED );
61 CLR( "schematic.bus", LAYER_BUS );
62 CLR( "schematic.bus_junction", LAYER_BUS_JUNCTION );
63 CLR( "schematic.component_body", LAYER_DEVICE_BACKGROUND );
64 CLR( "schematic.component_outline", LAYER_DEVICE );
65 CLR( "schematic.cursor", LAYER_SCHEMATIC_CURSOR );
66 CLR( "schematic.erc_error", LAYER_ERC_ERR );
67 CLR( "schematic.erc_warning", LAYER_ERC_WARN );
68 CLR( "schematic.erc_exclusion", LAYER_ERC_EXCLUSION );
69 CLR( "schematic.fields", LAYER_FIELDS );
70 CLR( "schematic.grid", LAYER_SCHEMATIC_GRID );
71 CLR( "schematic.grid_axes", LAYER_SCHEMATIC_GRID_AXES );
72 CLR( "schematic.hidden", LAYER_HIDDEN );
73 CLR( "schematic.junction", LAYER_JUNCTION );
74 CLR( "schematic.label_global", LAYER_GLOBLABEL );
75 CLR( "schematic.label_hier", LAYER_HIERLABEL );
76 CLR( "schematic.label_local", LAYER_LOCLABEL );
77 CLR( "schematic.netclass_flag", LAYER_NETCLASS_REFS );
78 CLR( "schematic.no_connect", LAYER_NOCONNECT );
79 CLR( "schematic.note", LAYER_NOTES );
80 CLR( "schematic.private_note", LAYER_PRIVATE_NOTES );
81 CLR( "schematic.note_background", LAYER_NOTES_BACKGROUND );
82 CLR( "schematic.pin", LAYER_PIN );
83 CLR( "schematic.pin_name", LAYER_PINNAM );
84 CLR( "schematic.pin_number", LAYER_PINNUM );
85 CLR( "schematic.reference", LAYER_REFERENCEPART );
86 CLR( "schematic.shadow", LAYER_SELECTION_SHADOWS );
87 CLR( "schematic.sheet", LAYER_SHEET );
88 CLR( "schematic.sheet_background", LAYER_SHEET_BACKGROUND );
89 CLR( "schematic.sheet_filename", LAYER_SHEETFILENAME );
90 CLR( "schematic.sheet_fields", LAYER_SHEETFIELDS );
91 CLR( "schematic.sheet_label", LAYER_SHEETLABEL );
92 CLR( "schematic.sheet_name", LAYER_SHEETNAME );
93 CLR( "schematic.value", LAYER_VALUEPART );
94 CLR( "schematic.wire", LAYER_WIRE );
95 CLR( "schematic.worksheet", LAYER_SCHEMATIC_DRAWINGSHEET );
96 CLR( "schematic.page_limits", LAYER_SCHEMATIC_PAGE_LIMITS );
97
98 CLR( "gerbview.axes", LAYER_GERBVIEW_AXES );
99 CLR( "gerbview.background", LAYER_GERBVIEW_BACKGROUND );
100 CLR( "gerbview.dcodes", LAYER_DCODES );
101 CLR( "gerbview.grid", LAYER_GERBVIEW_GRID );
102 CLR( "gerbview.negative_objects", LAYER_NEGATIVE_OBJECTS );
103 CLR( "gerbview.worksheet", LAYER_GERBVIEW_DRAWINGSHEET );
104 CLR( "gerbview.page_limits", LAYER_GERBVIEW_PAGE_LIMITS );
105
106 for( int i = 0, id = GERBVIEW_LAYER_ID_START;
108 {
109 m_params.emplace_back( new COLOR_MAP_PARAM( "gerbview.layers." + std::to_string( i ), id,
110 s_defaultTheme.at( id ), &m_colors ) );
111 }
112
113 CLR( "board.anchor", LAYER_ANCHOR );
114 CLR( "board.locked_shadow", LAYER_LOCKED_ITEM_SHADOW );
115 CLR( "board.conflicts_shadow", LAYER_CONFLICTS_SHADOW );
116 CLR( "board.aux_items", LAYER_AUX_ITEMS );
117 CLR( "board.background", LAYER_PCB_BACKGROUND );
118 CLR( "board.cursor", LAYER_CURSOR );
119 CLR( "board.drc_error", LAYER_DRC_ERROR );
120 CLR( "board.drc_warning", LAYER_DRC_WARNING );
121 CLR( "board.drc_exclusion", LAYER_DRC_EXCLUSION );
122 CLR( "board.footprint_text_invisible", LAYER_MOD_TEXT_INVISIBLE );
123 CLR( "board.grid", LAYER_GRID );
124 CLR( "board.grid_axes", LAYER_GRID_AXES );
125 CLR( "board.pad_plated_hole", LAYER_PAD_PLATEDHOLES );
126 CLR( "board.pad_through_hole", LAYER_PADS_TH );
127 CLR( "board.plated_hole", LAYER_NON_PLATEDHOLES );
128 CLR( "board.ratsnest", LAYER_RATSNEST );
129 CLR( "board.via_blind_buried", LAYER_VIA_BBLIND );
130 CLR( "board.via_hole", LAYER_VIA_HOLES );
131 CLR( "board.via_micro", LAYER_VIA_MICROVIA );
132 CLR( "board.via_through", LAYER_VIA_THROUGH );
133 CLR( "board.worksheet", LAYER_DRAWINGSHEET );
134 CLR( "board.page_limits", LAYER_PAGE_LIMITS );
135
136 CLR( "board.copper.f", F_Cu );
137 CLR( "board.copper.in1", In1_Cu );
138 CLR( "board.copper.in2", In2_Cu );
139 CLR( "board.copper.in3", In3_Cu );
140 CLR( "board.copper.in4", In4_Cu );
141 CLR( "board.copper.in5", In5_Cu );
142 CLR( "board.copper.in6", In6_Cu );
143 CLR( "board.copper.in7", In7_Cu );
144 CLR( "board.copper.in8", In8_Cu );
145 CLR( "board.copper.in9", In9_Cu );
146 CLR( "board.copper.in10", In10_Cu );
147 CLR( "board.copper.in11", In11_Cu );
148 CLR( "board.copper.in12", In12_Cu );
149 CLR( "board.copper.in13", In13_Cu );
150 CLR( "board.copper.in14", In14_Cu );
151 CLR( "board.copper.in15", In15_Cu );
152 CLR( "board.copper.in16", In16_Cu );
153 CLR( "board.copper.in17", In17_Cu );
154 CLR( "board.copper.in18", In18_Cu );
155 CLR( "board.copper.in19", In19_Cu );
156 CLR( "board.copper.in20", In20_Cu );
157 CLR( "board.copper.in21", In21_Cu );
158 CLR( "board.copper.in22", In22_Cu );
159 CLR( "board.copper.in23", In23_Cu );
160 CLR( "board.copper.in24", In24_Cu );
161 CLR( "board.copper.in25", In25_Cu );
162 CLR( "board.copper.in26", In26_Cu );
163 CLR( "board.copper.in27", In27_Cu );
164 CLR( "board.copper.in28", In28_Cu );
165 CLR( "board.copper.in29", In29_Cu );
166 CLR( "board.copper.in30", In30_Cu );
167 CLR( "board.copper.b", B_Cu );
168
169 CLR( "board.b_adhes", B_Adhes );
170 CLR( "board.f_adhes", F_Adhes );
171 CLR( "board.b_paste", B_Paste );
172 CLR( "board.f_paste", F_Paste );
173 CLR( "board.b_silks", B_SilkS );
174 CLR( "board.f_silks", F_SilkS );
175 CLR( "board.b_mask", B_Mask );
176 CLR( "board.f_mask", F_Mask );
177 CLR( "board.dwgs_user", Dwgs_User );
178 CLR( "board.cmts_user", Cmts_User );
179 CLR( "board.eco1_user", Eco1_User );
180 CLR( "board.eco2_user", Eco2_User );
181 CLR( "board.edge_cuts", Edge_Cuts );
182 CLR( "board.margin", Margin );
183 CLR( "board.b_crtyd", B_CrtYd );
184 CLR( "board.f_crtyd", F_CrtYd );
185 CLR( "board.b_fab", B_Fab );
186 CLR( "board.f_fab", F_Fab );
187 CLR( "board.user_1", User_1 );
188 CLR( "board.user_2", User_2 );
189 CLR( "board.user_3", User_3 );
190 CLR( "board.user_4", User_4 );
191 CLR( "board.user_5", User_5 );
192 CLR( "board.user_6", User_6 );
193 CLR( "board.user_7", User_7 );
194 CLR( "board.user_8", User_8 );
195 CLR( "board.user_9", User_9 );
196
197 // Colors for 3D viewer, which are used as defaults unless overridden by the board
198 CLR( "3d_viewer.background_bottom", LAYER_3D_BACKGROUND_BOTTOM );
199 CLR( "3d_viewer.background_top", LAYER_3D_BACKGROUND_TOP );
200 CLR( "3d_viewer.board", LAYER_3D_BOARD );
201 CLR( "3d_viewer.copper", LAYER_3D_COPPER );
202 CLR( "3d_viewer.silkscreen_bottom", LAYER_3D_SILKSCREEN_BOTTOM );
203 CLR( "3d_viewer.silkscreen_top", LAYER_3D_SILKSCREEN_TOP );
204 CLR( "3d_viewer.soldermask_bottom", LAYER_3D_SOLDERMASK_BOTTOM );
205 CLR( "3d_viewer.soldermask_top", LAYER_3D_SOLDERMASK_TOP );
206 CLR( "3d_viewer.solderpaste", LAYER_3D_SOLDERPASTE );
207
208 registerMigration( 0, 1, std::bind( &COLOR_SETTINGS::migrateSchema0to1, this ) );
209
210 registerMigration( 1, 2,
211 [&]()
212 {
213 // Fix LAYER_VIA_HOLES color - before version 2, this setting had no effect
214 nlohmann::json::json_pointer ptr( "/board/via_hole" );
215
216 ( *m_internals )[ptr] = COLOR4D( 0.5, 0.4, 0, 0.8 ).ToCSSString();
217
218 return true;
219 } );
220
221 registerMigration( 2, 3,
222 [&]()
223 {
224 // We don't support opacity in some 3D colors but some versions of 5.99 let
225 // you set it.
226
227 for( std::string path : { "3d_viewer.background_top",
228 "3d_viewer.background_bottom",
229 "3d_viewer.copper",
230 "3d_viewer.silkscreen_top",
231 "3d_viewer.silkscreen_bottom",
232 "3d_viewer.solderpaste" } )
233 {
234 if( std::optional<COLOR4D> optval = Get<COLOR4D>( path ) )
235 Set( path, optval->WithAlpha( 1.0 ) );
236 }
237
238 return true;
239 } );
240
241 registerMigration( 3, 4,
242 [&]()
243 {
244 if( std::optional<COLOR4D> optval = Get<COLOR4D>( "board.grid" ) )
245 Set( "board.page_limits", *optval );
246
247 if( std::optional<COLOR4D> optval = Get<COLOR4D>( "schematic.grid" ) )
248 Set( "schematic.page_limits", *optval );
249
250 return true;
251 } );
252}
253
254
257{
258 initFromOther( aOther );
259}
260
261
263{
264 m_filename = aOther.m_filename;
265
266 initFromOther( aOther );
267
268 return *this;
269}
270
271
273{
277 m_colors = aOther.m_colors;
279 m_writeFile = aOther.m_writeFile;
280
281 // Ensure default colors are present
282 for( PARAM_BASE* param : aOther.m_params )
283 {
284 if( COLOR_MAP_PARAM* cmp = dynamic_cast<COLOR_MAP_PARAM*>( param ) )
285 m_defaultColors[cmp->GetKey()] = cmp->GetDefault();
286 }
287}
288
289
290bool COLOR_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg )
291{
292 return false;
293}
294
295
297{
305 if( !m_manager )
306 {
307 wxLogTrace( traceSettings, wxT( "Error: COLOR_SETTINGS migration cannot run unmanaged!" ) );
308 return false;
309 }
310
311 if( !Contains( "fpedit" ) )
312 {
313 wxLogTrace( traceSettings, wxT( "migrateSchema0to1: %s doesn't have fpedit settings; skipping." ),
314 m_filename );
315 return true;
316 }
317
318 wxString filename = m_filename + wxT( "_footprints" );
319
320 COLOR_SETTINGS* fpsettings = m_manager->AddNewColorSettings( filename );
321
322 // Start out with a clone
323 fpsettings->m_internals->CloneFrom( *m_internals );
324
325 // Footprint editor now just looks at the "board" namespace
326 fpsettings->Set( "board", fpsettings->At( "fpedit" ) );
327
328 fpsettings->Internals()->erase( "fpedit" );
329 fpsettings->Load();
330 fpsettings->SetName( fpsettings->GetName() + wxS( " " ) + _( "(Footprints)" ) );
331 m_manager->Save( fpsettings );
332
333 // Now we can get rid of our own copy
334 m_internals->erase( "fpedit" );
335
336 return true;
337}
338
339
341{
342 if( m_colors.count( aLayer ) )
343 return m_colors.at( aLayer );
344
345 return COLOR4D::UNSPECIFIED;
346}
347
348
350{
351 if( !m_defaultColors.count( aLayer ) )
352 {
353 COLOR_MAP_PARAM* p = nullptr;
354
355 for( PARAM_BASE* param : m_params )
356 {
357 COLOR_MAP_PARAM* cmp = dynamic_cast<COLOR_MAP_PARAM*>( param );
358
359 if( cmp && cmp->GetKey() == aLayer )
360 p = cmp;
361 }
362
363 if( p )
364 m_defaultColors[aLayer] = p->GetDefault();
365 else
366 m_defaultColors[aLayer] = COLOR4D::UNSPECIFIED;
367 }
368
369 return m_defaultColors.at( aLayer );
370}
371
372
373void COLOR_SETTINGS::SetColor( int aLayer, const COLOR4D& aColor )
374{
375 m_colors[ aLayer ] = aColor;
376}
377
378
379std::vector<COLOR_SETTINGS*> COLOR_SETTINGS::CreateBuiltinColorSettings()
380{
381 COLOR_SETTINGS* defaultTheme = new COLOR_SETTINGS( wxT( "_builtin_default" ) );
382 defaultTheme->SetName( _( "KiCad Default" ) );
383 defaultTheme->m_writeFile = false;
384 defaultTheme->Load(); // We can just get the colors out of the param defaults for this one
385
386 COLOR_SETTINGS* classicTheme = new COLOR_SETTINGS( wxT( "_builtin_classic" ) );
387 classicTheme->SetName( _( "KiCad Classic" ) );
388 classicTheme->m_writeFile = false;
389
390 for( PARAM_BASE* param : classicTheme->m_params )
391 delete param;
392
393 classicTheme->m_params.clear(); // Disable load/store
394
395 for( const std::pair<int, COLOR4D> entry : s_classicTheme )
396 classicTheme->m_colors[entry.first] = entry.second;
397
398 std::vector<COLOR_SETTINGS*> ret;
399
400 ret.push_back( defaultTheme );
401 ret.push_back( classicTheme );
402
403 return ret;
404}
static const std::map< int, COLOR4D > s_defaultTheme
static const std::map< int, COLOR4D > s_classicTheme
COLOR4D GetDefault() const
int GetKey() const
Color settings are a bit different than most of the settings objects in that there can be more than o...
void SetName(const wxString &aName)
std::unordered_map< int, COLOR4D > m_defaultColors
void initFromOther(const COLOR_SETTINGS &aOther)
void SetColor(int aLayer, const COLOR4D &aColor)
static std::vector< COLOR_SETTINGS * > CreateBuiltinColorSettings()
Constructs and returns a list of color settings objects based on the built-in color themes.
bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
bool m_useBoardStackupColors
COLOR4D GetColor(int aLayer) const
COLOR4D GetDefaultColor(int aLayer)
wxString m_displayName
COLOR_SETTINGS & operator=(const COLOR_SETTINGS &aOther)
std::unordered_map< int, COLOR4D > m_colors
Map of all layer colors.
bool m_overrideSchItemColors
COLOR_SETTINGS(const wxString &aFilename=wxT("user"), bool aAbsolutePath=false)
const wxString & GetName() const
wxString m_filename
The filename (not including path) of this settings file (inicode)
SETTINGS_MANAGER * m_manager
A pointer to the settings manager managing this file (may be null)
bool Contains(const std::string &aPath) const
void SetLocation(SETTINGS_LOC aLocation)
Definition: json_settings.h:79
bool m_writeFile
Whether or not the backing store file should be written.
virtual void Load()
Updates the parameters of this object based on the current JSON document contents.
std::vector< PARAM_BASE * > m_params
The list of parameters (owned by this object)
void registerMigration(int aOldSchemaVersion, int aNewSchemaVersion, std::function< bool(void)> aMigrator)
Registers a migration from one schema version to another.
nlohmann::json & At(const std::string &aPath)
Wrappers for the underlying JSON API so that most consumers don't need json.hpp All of these function...
JSON_SETTINGS_INTERNALS * Internals()
std::unique_ptr< JSON_SETTINGS_INTERNALS > m_internals
void Set(const std::string &aPath, ValueType aVal)
Stores a value into the JSON document Will throw an exception if ValueType isn't something that the l...
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
COLOR_SETTINGS * AddNewColorSettings(const wxString &aFilename)
Registers a new color settings object with the given filename.
#define CLR(x, y)
const int colorsSchemaVersion
! Update the schema version whenever a migration is required
#define _(s)
const wxChar *const traceSettings
Flag to enable debug output of settings operations and management.
SETTINGS_LOC
Definition: json_settings.h:47
@ COLORS
The color scheme directory (e.g. ~/.config/kicad/colors/)
@ NONE
No directory prepended, full path in filename (used for PROJECT_FILE)
@ LAYER_GERBVIEW_DRAWINGSHEET
Definition: layer_ids.h:417
@ GERBVIEW_LAYER_ID_START
Definition: layer_ids.h:407
@ LAYER_GERBVIEW_BACKGROUND
Definition: layer_ids.h:416
@ LAYER_DCODES
Definition: layer_ids.h:412
@ LAYER_NEGATIVE_OBJECTS
Definition: layer_ids.h:413
@ LAYER_GERBVIEW_PAGE_LIMITS
Definition: layer_ids.h:418
@ LAYER_GERBVIEW_AXES
Definition: layer_ids.h:415
@ LAYER_GERBVIEW_GRID
Definition: layer_ids.h:414
@ LAYER_3D_SOLDERMASK_TOP
Definition: layer_ids.h:442
@ LAYER_3D_COPPER
Definition: layer_ids.h:438
@ LAYER_3D_BACKGROUND_TOP
Definition: layer_ids.h:436
@ LAYER_3D_SOLDERMASK_BOTTOM
Definition: layer_ids.h:441
@ LAYER_3D_BOARD
Definition: layer_ids.h:437
@ LAYER_3D_SILKSCREEN_TOP
Definition: layer_ids.h:440
@ LAYER_3D_SOLDERPASTE
Definition: layer_ids.h:443
@ LAYER_3D_BACKGROUND_BOTTOM
Definition: layer_ids.h:435
@ LAYER_3D_SILKSCREEN_BOTTOM
Definition: layer_ids.h:439
@ LAYER_GRID
Definition: layer_ids.h:205
@ LAYER_MOD_TEXT_INVISIBLE
text marked as invisible
Definition: layer_ids.h:200
@ LAYER_PAGE_LIMITS
color for drawing the page extents (visibility stored in PCBNEW_SETTINGS::m_ShowPageLimits)
Definition: layer_ids.h:249
@ LAYER_LOCKED_ITEM_SHADOW
shadow layer for locked items
Definition: layer_ids.h:239
@ LAYER_GRID_AXES
Definition: layer_ids.h:206
@ LAYER_CONFLICTS_SHADOW
shadow layer for items flagged conficting
Definition: layer_ids.h:241
@ LAYER_NON_PLATEDHOLES
handle color for not plated holes (holes, not pads)
Definition: layer_ids.h:197
@ LAYER_DRAWINGSHEET
drawingsheet frame and titleblock
Definition: layer_ids.h:217
@ LAYER_DRC_EXCLUSION
layer for drc markers which have been individually excluded
Definition: layer_ids.h:236
@ LAYER_PCB_BACKGROUND
PCB background color.
Definition: layer_ids.h:220
@ LAYER_DRC_WARNING
layer for drc markers with SEVERITY_WARNING
Definition: layer_ids.h:235
@ LAYER_PAD_PLATEDHOLES
to draw pad holes (plated)
Definition: layer_ids.h:214
@ LAYER_CURSOR
PCB cursor.
Definition: layer_ids.h:221
@ LAYER_AUX_ITEMS
Auxiliary items (guides, rule, etc)
Definition: layer_ids.h:222
@ LAYER_RATSNEST
Definition: layer_ids.h:204
@ LAYER_ANCHOR
anchor of items having an anchor point (texts, footprints)
Definition: layer_ids.h:201
@ LAYER_PADS_TH
multilayer pads, usually with holes
Definition: layer_ids.h:213
@ LAYER_VIA_HOLES
to draw via holes (pad holes do not use this layer)
Definition: layer_ids.h:215
@ LAYER_VIA_MICROVIA
to draw micro vias
Definition: layer_ids.h:194
@ LAYER_VIA_THROUGH
to draw usual through hole vias
Definition: layer_ids.h:196
@ LAYER_DRC_ERROR
layer for drc markers with SEVERITY_ERROR
Definition: layer_ids.h:216
@ LAYER_VIA_BBLIND
to draw blind/buried vias
Definition: layer_ids.h:195
@ LAYER_SHEETNAME
Definition: layer_ids.h:363
@ LAYER_ERC_WARN
Definition: layer_ids.h:369
@ LAYER_SCHEMATIC_ANCHOR
Definition: layer_ids.h:386
@ LAYER_SHEETLABEL
Definition: layer_ids.h:366
@ LAYER_PINNUM
Definition: layer_ids.h:350
@ LAYER_DEVICE
Definition: layer_ids.h:357
@ LAYER_SHEET_BACKGROUND
Definition: layer_ids.h:373
@ LAYER_BRIGHTENED
Definition: layer_ids.h:379
@ LAYER_ERC_EXCLUSION
Definition: layer_ids.h:371
@ LAYER_HIDDEN
Definition: layer_ids.h:380
@ LAYER_HIERLABEL
Definition: layer_ids.h:349
@ LAYER_PINNAM
Definition: layer_ids.h:351
@ LAYER_PRIVATE_NOTES
Definition: layer_ids.h:359
@ LAYER_HOVERED
Definition: layer_ids.h:378
@ LAYER_GLOBLABEL
Definition: layer_ids.h:348
@ LAYER_WIRE
Definition: layer_ids.h:344
@ LAYER_NOTES
Definition: layer_ids.h:358
@ LAYER_ERC_ERR
Definition: layer_ids.h:370
@ LAYER_PIN
Definition: layer_ids.h:361
@ LAYER_VALUEPART
Definition: layer_ids.h:353
@ LAYER_BUS
Definition: layer_ids.h:345
@ LAYER_SCHEMATIC_CURSOR
Definition: layer_ids.h:377
@ LAYER_FIELDS
Definition: layer_ids.h:354
@ LAYER_DEVICE_BACKGROUND
Definition: layer_ids.h:372
@ LAYER_SCHEMATIC_DRAWINGSHEET
Definition: layer_ids.h:382
@ LAYER_LOCLABEL
Definition: layer_ids.h:347
@ LAYER_JUNCTION
Definition: layer_ids.h:346
@ LAYER_SHEETFIELDS
Definition: layer_ids.h:365
@ LAYER_SCHEMATIC_GRID_AXES
Definition: layer_ids.h:375
@ LAYER_REFERENCEPART
Definition: layer_ids.h:352
@ LAYER_NETCLASS_REFS
Definition: layer_ids.h:356
@ LAYER_NOTES_BACKGROUND
Definition: layer_ids.h:360
@ LAYER_SCHEMATIC_PAGE_LIMITS
Definition: layer_ids.h:383
@ LAYER_SHEET
Definition: layer_ids.h:362
@ LAYER_SELECTION_SHADOWS
Definition: layer_ids.h:381
@ LAYER_SCHEMATIC_BACKGROUND
Definition: layer_ids.h:376
@ LAYER_SCHEMATIC_AUX_ITEMS
Definition: layer_ids.h:385
@ LAYER_SHEETFILENAME
Definition: layer_ids.h:364
@ LAYER_BUS_JUNCTION
Definition: layer_ids.h:384
@ LAYER_NOCONNECT
Definition: layer_ids.h:367
@ LAYER_SCHEMATIC_GRID
Definition: layer_ids.h:374
@ In22_Cu
Definition: layer_ids.h:86
@ In11_Cu
Definition: layer_ids.h:75
@ In29_Cu
Definition: layer_ids.h:93
@ In30_Cu
Definition: layer_ids.h:94
@ User_8
Definition: layer_ids.h:130
@ F_CrtYd
Definition: layer_ids.h:117
@ In17_Cu
Definition: layer_ids.h:81
@ B_Adhes
Definition: layer_ids.h:97
@ Edge_Cuts
Definition: layer_ids.h:113
@ Dwgs_User
Definition: layer_ids.h:109
@ F_Paste
Definition: layer_ids.h:101
@ In9_Cu
Definition: layer_ids.h:73
@ Cmts_User
Definition: layer_ids.h:110
@ User_6
Definition: layer_ids.h:128
@ User_7
Definition: layer_ids.h:129
@ In19_Cu
Definition: layer_ids.h:83
@ In7_Cu
Definition: layer_ids.h:71
@ In28_Cu
Definition: layer_ids.h:92
@ In26_Cu
Definition: layer_ids.h:90
@ F_Adhes
Definition: layer_ids.h:98
@ B_Mask
Definition: layer_ids.h:106
@ B_Cu
Definition: layer_ids.h:95
@ User_5
Definition: layer_ids.h:127
@ Eco1_User
Definition: layer_ids.h:111
@ F_Mask
Definition: layer_ids.h:107
@ In21_Cu
Definition: layer_ids.h:85
@ In23_Cu
Definition: layer_ids.h:87
@ B_Paste
Definition: layer_ids.h:100
@ In15_Cu
Definition: layer_ids.h:79
@ In2_Cu
Definition: layer_ids.h:66
@ User_9
Definition: layer_ids.h:131
@ F_Fab
Definition: layer_ids.h:120
@ In10_Cu
Definition: layer_ids.h:74
@ Margin
Definition: layer_ids.h:114
@ F_SilkS
Definition: layer_ids.h:104
@ In4_Cu
Definition: layer_ids.h:68
@ B_CrtYd
Definition: layer_ids.h:116
@ Eco2_User
Definition: layer_ids.h:112
@ In16_Cu
Definition: layer_ids.h:80
@ In24_Cu
Definition: layer_ids.h:88
@ In1_Cu
Definition: layer_ids.h:65
@ User_3
Definition: layer_ids.h:125
@ User_1
Definition: layer_ids.h:123
@ B_SilkS
Definition: layer_ids.h:103
@ In13_Cu
Definition: layer_ids.h:77
@ User_4
Definition: layer_ids.h:126
@ In8_Cu
Definition: layer_ids.h:72
@ In14_Cu
Definition: layer_ids.h:78
@ User_2
Definition: layer_ids.h:124
@ In12_Cu
Definition: layer_ids.h:76
@ In27_Cu
Definition: layer_ids.h:91
@ In6_Cu
Definition: layer_ids.h:70
@ In5_Cu
Definition: layer_ids.h:69
@ In3_Cu
Definition: layer_ids.h:67
@ In20_Cu
Definition: layer_ids.h:84
@ F_Cu
Definition: layer_ids.h:64
@ In18_Cu
Definition: layer_ids.h:82
@ In25_Cu
Definition: layer_ids.h:89
@ B_Fab
Definition: layer_ids.h:119
#define GERBER_DRAWLAYERS_COUNT
Definition: layer_ids.h:402
Definition: bitmap.cpp:64
see class PGM_BASE