KiCad PCB EDA Suite
Loading...
Searching...
No Matches
eda_3d_viewer_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) 2023 CERN
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software: you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation, either version 3 of the License, or (at your
11 * option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#include <fmt/format.h>
23#include <3d_enums.h>
25#include <settings/parameters.h>
28#include <wx/config.h>
29
31
32using KIGFX::COLOR4D;
33
34using namespace std::placeholders;
35
36
37LAYER_PRESET_3D::LAYER_PRESET_3D( const wxString& aName ) :
38 name( aName )
39{
50
53
55 layers.set( LAYER_FP_TEXT );
56
58
59 // Preload colors vector so we don't have to worry about exceptions using colors.at()
75}
76
77
79 std::vector<LAYER_PRESET_3D>* aPresetList ) :
80 PARAM_LAMBDA<nlohmann::json>( aPath,
81 std::bind( &PARAM_LAYER_PRESET_3D::presetsToJson, this ),
82 std::bind( &PARAM_LAYER_PRESET_3D::jsonToPresets, this, _1 ),
83 {} ),
84 m_presets( aPresetList )
85{
86 wxASSERT( aPresetList );
87
88#define LAYER( n, l ) m_layerToLayerNameMap[l] = n; m_layerNameToLayerMap[n] = l;
89
90 LAYER( "fp_values", LAYER_FP_VALUES );
91 LAYER( "fp_references", LAYER_FP_REFERENCES );
92 LAYER( "fp_text", LAYER_FP_TEXT );
93 LAYER( "background_bottom", LAYER_3D_BACKGROUND_BOTTOM );
94 LAYER( "background_top", LAYER_3D_BACKGROUND_TOP );
95 LAYER( "board", LAYER_3D_BOARD );
96 LAYER( "plated_barrels", LAYER_3D_PLATED_BARRELS );
97 LAYER( "copper", LAYER_3D_COPPER_TOP );
98 LAYER( "copper_bottom", LAYER_3D_COPPER_BOTTOM );
99 LAYER( "silkscreen_bottom", LAYER_3D_SILKSCREEN_BOTTOM );
100 LAYER( "silkscreen_top", LAYER_3D_SILKSCREEN_TOP );
101 LAYER( "soldermask_bottom", LAYER_3D_SOLDERMASK_BOTTOM );
102 LAYER( "soldermask_top", LAYER_3D_SOLDERMASK_TOP );
103 LAYER( "solderpaste", LAYER_3D_SOLDERPASTE );
104 LAYER( "adhesive", LAYER_3D_ADHESIVE );
105 LAYER( "user_comments", LAYER_3D_USER_COMMENTS );
106 LAYER( "user_drawings", LAYER_3D_USER_DRAWINGS );
107 LAYER( "user_eco1", LAYER_3D_USER_ECO1 );
108 LAYER( "user_eco2", LAYER_3D_USER_ECO2 );
109 LAYER( "3d_navigator", LAYER_3D_NAVIGATOR );
110 LAYER( "th_models", LAYER_3D_TH_MODELS );
111 LAYER( "smd_models", LAYER_3D_SMD_MODELS );
112 LAYER( "virtual_models", LAYER_3D_VIRTUAL_MODELS );
113 LAYER( "non_pos_file_models", LAYER_3D_MODELS_NOT_IN_POS );
114 LAYER( "dnp_models", LAYER_3D_MODELS_MARKED_DNP );
115 LAYER( "bounding_boxes", LAYER_3D_BOUNDING_BOXES );
116 LAYER( "off_board_silk", LAYER_3D_OFF_BOARD_SILK );
117}
118
119
121{
122 nlohmann::json ret = nlohmann::json::array();
123
124 for( const LAYER_PRESET_3D& preset : *m_presets )
125 {
126 nlohmann::json js = {
127 { "name", preset.name }
128 };
129
130 nlohmann::json layers = nlohmann::json::array();
131
132 for( int layer = 0; layer < LAYER_3D_END; ++layer )
133 {
134 if( preset.layers.test( layer ) )
135 layers.push_back( m_layerToLayerNameMap[layer] );
136 }
137
138 js["layers"] = layers;
139
140 nlohmann::json colors = nlohmann::json::array();
141
142 for( const auto& [ layer, color ] : preset.colors )
143 {
144 nlohmann::json layerColor = {
145 { "layer", m_layerToLayerNameMap[layer] },
146 { "color", color.ToCSSString() }
147 };
148
149 colors.push_back( layerColor );
150 }
151
152 js["colors"] = colors;
153
154 ret.push_back( js );
155 }
156
157 return ret;
158}
159
160
161void PARAM_LAYER_PRESET_3D::jsonToPresets( const nlohmann::json& aJson )
162{
163 if( aJson.empty() || !aJson.is_array() )
164 return;
165
166 m_presets->clear();
167
168 for( const nlohmann::json& preset : aJson )
169 {
170 if( preset.contains( "name" ) )
171 {
172 LAYER_PRESET_3D p( preset.at( "name" ).get<wxString>() );
173
174 if( preset.contains( "layers" ) && preset.at( "layers" ).is_array() )
175 {
176 p.layers.reset();
177
178 for( const nlohmann::json& layer : preset.at( "layers" ) )
179 {
180 if( layer.is_string() )
181 p.layers.set( m_layerNameToLayerMap[layer.get<wxString>()] );
182 }
183 }
184
185 if( preset.contains( "colors" ) && preset.at( "colors" ).is_array() )
186 {
187 for( const nlohmann::json& entry : preset.at( "colors" ) )
188 {
189 if( entry.contains( "layer" ) && entry.contains( "color" )
190 && entry.at( "layer" ).is_string() )
191 {
192 int layerNum = m_layerNameToLayerMap[entry.at( "layer" ).get<wxString>()];
193 p.colors[ layerNum ] = entry.at( "color" ).get<COLOR4D>();
194 }
195 }
196 }
197
198 m_presets->emplace_back( p );
199 }
200 }
201}
202
203
206
207
210 m_Render(),
211 m_Camera()
212{
213 m_params.emplace_back( new PARAM<bool>( "aui.show_layer_manager",
215
216 m_params.emplace_back( new PARAM<int>( "aui.right_panel_width",
218
219 m_params.emplace_back( new PARAM_ENUM<RENDER_ENGINE>( "render.engine", &m_Render.engine,
220 RENDER_ENGINE::OPENGL,
221 RENDER_ENGINE::OPENGL,
222 RENDER_ENGINE::RAYTRACING ) );
223
224 m_params.emplace_back( new PARAM_ENUM<GRID3D_TYPE>( "render.grid_type", &m_Render.grid_type,
225 GRID3D_TYPE::NONE,
226 GRID3D_TYPE::NONE,
227 GRID3D_TYPE::GRID_10MM ) );
228
229 m_params.emplace_back( new PARAM_ENUM<MATERIAL_MODE>( "render.material_mode",
231 MATERIAL_MODE::NORMAL,
232 MATERIAL_MODE::NORMAL,
233 MATERIAL_MODE::CAD_MODE ) );
234
235 m_params.emplace_back( new PARAM_ENUM<ANTIALIASING_MODE>( "render.opengl_AA_mode",
237 ANTIALIASING_MODE::AA_8X,
238 ANTIALIASING_MODE::AA_NONE,
239 ANTIALIASING_MODE::AA_8X ) );
240
241 m_params.emplace_back( new PARAM<COLOR4D>( "render.opengl_selection_color",
243 COLOR4D( 0.0, 1.0, 0.0, 1.0 ) ) );
244
245 // OpenGL options
246 m_params.emplace_back( new PARAM<bool>( "render.opengl_copper_thickness",
248 m_params.emplace_back( new PARAM<bool>( "render.opengl_show_model_bbox",
249 &m_Render.show_model_bbox, false ) );
250 m_params.emplace_back( new PARAM<bool>( "render.opengl_show_off_board_silk",
251 &m_Render.show_off_board_silk, false ) );
252 m_params.emplace_back( new PARAM<bool>( "render.opengl_highlight_on_rollover",
254 m_params.emplace_back( new PARAM<bool>( "render.opengl_AA_disableOnMove",
256 m_params.emplace_back( new PARAM<bool>( "render.opengl_thickness_disableOnMove",
258 m_params.emplace_back( new PARAM<bool>( "render.opengl_vias_disableOnMove",
260 m_params.emplace_back( new PARAM<bool>( "render.opengl_holes_disableOnMove",
262 m_params.emplace_back( new PARAM<bool>( "render.opengl_render_bbox_only_OnMove",
264
265 // Raytracing options
266 m_params.emplace_back( new PARAM<bool>( "render.raytrace_anti_aliasing",
268 m_params.emplace_back( new PARAM<bool>( "render.raytrace_backfloor",
269 &m_Render.raytrace_backfloor, false ) );
270 m_params.emplace_back( new PARAM<bool>( "render.raytrace_post_processing",
272 m_params.emplace_back( new PARAM<bool>( "render.raytrace_procedural_textures",
274 m_params.emplace_back( new PARAM<bool>( "render.raytrace_reflections",
276 m_params.emplace_back( new PARAM<bool>( "render.raytrace_refractions",
278 m_params.emplace_back( new PARAM<bool>( "render.raytrace_shadows",
279 &m_Render.raytrace_shadows, true ) );
280
281 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_shadows",
283 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_reflections",
285 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_refractions",
287
288 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_reflections",
290 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_refractions",
292
293 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_shadows",
295 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_reflections",
297 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_refractions",
299
300 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorCamera",
302 COLOR4D( 0.2, 0.2, 0.2, 1.0 ) ) );
303
304 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorTop",
306 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
307
308 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorBottom",
310 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
311
312 std::vector<COLOR4D> default_colors =
313 {
314 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
315 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
316 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
317 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
318 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
319 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
320 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
321 COLOR4D( 0.168, 0.168, 0.168, 1.0 )
322 };
323
324 m_params.emplace_back( new PARAM_LIST<COLOR4D>( "render.raytrace_lightColor",
326 std::move( default_colors ) ) );
327
328 const std::vector<int> default_elevation =
329 {
330 67, 67, 67, 67, -67, -67, -67, -67,
331 };
332
333 m_params.emplace_back( new PARAM_LIST<int>( "render.raytrace_lightElevation",
335 std::move( default_elevation ) ) );
336
337 const std::vector<int> default_azimuth =
338 {
339 45, 135, 225, 315, 45, 135, 225, 315,
340 };
341
342 m_params.emplace_back( new PARAM_LIST<int>( "render.raytrace_lightAzimuth",
344 std::move( default_azimuth ) ) );
345
346 m_params.emplace_back( new PARAM<bool>( "render.show_adhesive",
347 &m_Render.show_adhesive, true ) );
348 m_params.emplace_back( new PARAM<bool>( "render.show_navigator",
349 &m_Render.show_navigator, true ) );
350 m_params.emplace_back( new PARAM<bool>( "render.show_board_body",
351 &m_Render.show_board_body, true ) );
352 m_params.emplace_back( new PARAM<bool>( "render.show_plated_barrels",
353 &m_Render.show_plated_barrels, true ) );
354 m_params.emplace_back( new PARAM<bool>( "render.show_comments",
355 &m_Render.show_comments, true ) );
356 m_params.emplace_back( new PARAM<bool>( "render.show_drawings",
357 &m_Render.show_drawings, true ) );
358 m_params.emplace_back( new PARAM<bool>( "render.show_eco1",
359 &m_Render.show_eco1, true ) );
360 m_params.emplace_back( new PARAM<bool>( "render.show_eco2",
361 &m_Render.show_eco2, true ) );
362
363 for( int layer = 0; layer < 45; ++layer )
364 {
365 m_params.emplace_back( new PARAM<bool>( fmt::format( "render.show_user{}", layer + 1 ),
366 &m_Render.show_user[layer], false ) );
367 }
368
369 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_insert",
371 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_normal",
373 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_virtual",
375 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_not_in_posfile",
377 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_dnp",
378 &m_Render.show_footprints_dnp, false ) );
379 m_params.emplace_back( new PARAM<bool>( "render.show_silkscreen_top",
380 &m_Render.show_silkscreen_top, true ) );
381 m_params.emplace_back( new PARAM<bool>( "render.show_silkscreen_bottom",
383 m_params.emplace_back( new PARAM<bool>( "render.show_soldermask_top",
384 &m_Render.show_soldermask_top, true ) );
385 m_params.emplace_back( new PARAM<bool>( "render.show_soldermask_bottom",
387 m_params.emplace_back( new PARAM<bool>( "render.show_solderpaste",
388 &m_Render.show_solderpaste, true ) );
389 m_params.emplace_back( new PARAM<bool>( "render.show_copper_top",
390 &m_Render.show_copper_bottom, true ) );
391 m_params.emplace_back( new PARAM<bool>( "render.show_copper_bottom",
392 &m_Render.show_copper_top, true ) );
393 m_params.emplace_back( new PARAM<bool>( "render.show_zones",
394 &m_Render.show_zones, true ) );
395 m_params.emplace_back( new PARAM<bool>( "render.show_fp_references",
396 &m_Render.show_fp_references, true ) );
397 m_params.emplace_back( new PARAM<bool>( "render.show_fp_values",
398 &m_Render.show_fp_values, true ) );
399 m_params.emplace_back( new PARAM<bool>( "render.show_fp_text",
400 &m_Render.show_fp_text, true ) );
401 m_params.emplace_back( new PARAM<bool>( "render.subtract_mask_from_silk",
403 m_params.emplace_back( new PARAM<bool>( "render.clip_silk_on_via_annulus",
405 m_params.emplace_back( new PARAM<bool>( "render.plated_and_bare_copper",
407 m_params.emplace_back( new PARAM<bool>( "render.use_board_editor_copper_colors",
409 m_params.emplace_back( new PARAM<bool>( "render.preview_show_board_body",
411 m_params.emplace_back( new PARAM<bool>( "camera.animation_enabled",
412 &m_Camera.animation_enabled, true ) );
413 m_params.emplace_back( new PARAM<int>( "camera.moving_speed_multiplier",
415 m_params.emplace_back( new PARAM<double>( "camera.rotation_increment",
416 &m_Camera.rotation_increment, 10.0 ) );
417 m_params.emplace_back( new PARAM<int>( "camera.projection_mode",
419
420 m_params.emplace_back( new PARAM<bool>( "use_stackup_colors",
421 &m_UseStackupColors, true ) );
422 m_params.emplace_back( new PARAM_LAYER_PRESET_3D( "layer_presets",
423 &m_LayerPresets ) );
424 m_params.emplace_back( new PARAM<wxString>( "current_layer_preset",
426
428
429 registerMigration( 1, 2,
430 [&]() -> bool
431 {
432 Set( "render.opengl_copper_thickness", false );
433 return true;
434 } );
435
436 registerMigration( 2, 3,
437 [&]() -> bool
438 {
439 if( std::optional<bool> optval = Get<bool>( "render.show_copper" ) )
440 {
441 Set( "render.show_copper_top", *optval );
442 Set( "render.show_copper_bottom", *optval );
443 }
444
445 if( std::optional<bool> optval = Get<bool>( "render.show_silkscreen" ) )
446 {
447 Set( "render.show_silkscreen_top", *optval );
448 Set( "render.show_silkscreen_bottom", *optval );
449 }
450
451 if( std::optional<bool> optval = Get<bool>( "render.show_soldermask" ) )
452 {
453 Set( "render.show_soldermask_top", *optval );
454 Set( "render.show_soldermask_bottom", *optval );
455 }
456
457 if( std::optional<bool> optval = Get<bool>( "render.show_comments" ) )
458 Set( "render.show_drawings", *optval );
459
460 if( std::optional<bool> optval = Get<bool>( "render.show_eco" ) )
461 {
462 Set( "render.show_eco1", *optval );
463 Set( "render.show_eco2", *optval );
464 }
465
466 return true;
467 } );
468
469 registerMigration( 3, 4,
470 [&]() -> bool
471 {
472 std::map<int, wxString> legacyColorMap;
473
474 legacyColorMap[142] = "fp_values";
475 legacyColorMap[143] = "fp_references";
476 legacyColorMap[130] = "fp_text";
477 legacyColorMap[466] = "background_bottom";
478 legacyColorMap[467] = "background_top";
479 legacyColorMap[468] = "board";
480 legacyColorMap[469] = "copper";
481 legacyColorMap[470] = "copper_bottom";
482 legacyColorMap[471] = "silkscreen_bottom";
483 legacyColorMap[472] = "silkscreen_top";
484 legacyColorMap[473] = "soldermask_bottom";
485 legacyColorMap[474] = "soldermask_top";
486 legacyColorMap[475] = "solderpaste";
487 legacyColorMap[476] = "adhesive";
488 legacyColorMap[477] = "user_comments";
489 legacyColorMap[478] = "user_drawings";
490 legacyColorMap[479] = "user_eco1";
491 legacyColorMap[480] = "user_eco2";
492 legacyColorMap[481] = "th_models";
493 legacyColorMap[482] = "smd_models";
494 legacyColorMap[483] = "virtual_models";
495 legacyColorMap[484] = "non_pos_file_models";
496 legacyColorMap[485] = "dnp_models";
497 legacyColorMap[486] = "3d_navigator";
498 legacyColorMap[487] = "bounding_boxes";
499 legacyColorMap[488] = "off_board_silk";
500
501 if( !Contains( "layer_presets" ) || !At( "layer_presets" ).is_array() )
502 return true;
503
504 for( nlohmann::json& preset : At( "layer_presets" ) )
505 {
506 if( preset.contains( "colors" ) && preset.at( "colors" ).is_array() )
507 {
508 for( nlohmann::json& color : preset.at( "colors" ) )
509 {
510 if( color.contains( "layer" ) && color.at( "layer" ).is_number_integer() )
511 color["layer"] = legacyColorMap[color["layer"].get<int>()];
512 }
513 }
514
515 if( preset.contains( "layers" ) && preset.at( "layers" ).is_array() )
516 {
517 nlohmann::json mappedLayers = nlohmann::json::array();
518
519 for( const nlohmann::json& layer : preset.at( "layers" ) )
520 {
521 if( layer.is_number_integer() )
522 mappedLayers.push_back( legacyColorMap[layer.get<int>()] );
523 }
524
525 preset["layers"] = mappedLayers;
526 }
527 }
528
529 return true;
530 } );
531}
532
533
535{
536 for( LAYER_PRESET_3D& preset : m_LayerPresets )
537 {
538 if( preset.name == aName )
539 return &preset;
540 }
541
542 return nullptr;
543}
544
545
547{
553 try
554 {
555 if( m_internals->contains( "colors" ) )
556 m_internals->erase( "colors" );
557 }
558 catch( ... )
559 {
560 }
561
562 return true;
563}
564
565
567{
568 bool ret = APP_SETTINGS_BASE::MigrateFromLegacy( aCfg );
569
570 ret &= fromLegacy<int>( aCfg, "RenderEngine", "render.engine" );
571 ret &= fromLegacy<int>( aCfg, "ShowGrid3D", "render.grid_type" );
572 ret &= fromLegacy<int>( aCfg, "Render_Material", "render.material_mode" );
573 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowCopperThickness",
574 "render.opengl_copper_thickness" );
575 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowModelBoudingBoxes",
576 "render.opengl_show_model_bbox" );
577 ret &= fromLegacy<bool>( aCfg, "Render_RAY_AntiAliasing", "render.raytrace_anti_aliasing" );
578 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Backfloor", "render.raytrace_backfloor" );
579 ret &= fromLegacy<bool>( aCfg, "Render_RAY_PostProcess", "render.raytrace_post_processing" );
580 ret &= fromLegacy<bool>( aCfg, "Render_RAY_ProceduralTextures",
581 "render.raytrace_procedural_textures" );
582 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Reflections", "render.raytrace_reflections" );
583 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Refractions", "render.raytrace_refractions" );
584 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Shadows", "render.raytrace_shadows" );
585 ret &= fromLegacy<bool>( aCfg, "ShowRealisticMode", "render.realistic" );
586 ret &= fromLegacy<bool>( aCfg, "ShowAdhesiveLayers", "render.show_adhesive" );
587 ret &= fromLegacy<bool>( aCfg, "ShowNavigator", "render.show_navigator" );
588 ret &= fromLegacy<bool>( aCfg, "ShowBoardBody", "render.show_board_body" );
589 ret &= fromLegacy<bool>( aCfg, "ShowCommentsLayers", "render.show_comments" );
590 ret &= fromLegacy<bool>( aCfg, "ShowEcoLayers", "render.show_eco" );
591 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Insert", "render.show_footprints_insert" );
592 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Normal", "render.show_footprints_normal" );
593 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Virtual", "render.show_footprints_virtual" );
594 ret &= fromLegacy<bool>( aCfg, "ShowSilkScreenLayers", "render.show_silkscreen" );
595 ret &= fromLegacy<bool>( aCfg, "ShowSolderMasLayers", "render.show_soldermask" );
596 ret &= fromLegacy<bool>( aCfg, "ShowSolderPasteLayers", "render.show_solderpaste" );
597 ret &= fromLegacy<bool>( aCfg, "ShowZones", "render.show_zones" );
598 ret &= fromLegacy<bool>( aCfg, "SubtractMaskFromSilk", "render.subtract_mask_from_silk" );
599
600 auto do_color =
601 [&] ( const std::string& key_r, const std::string& key_g, const std::string& key_b,
602 std::string key_dest, double alpha = 1.0 )
603 {
604 COLOR4D color( 1, 1, 1, alpha );
605
606 if( aCfg->Read( key_r, &color.r )
607 && aCfg->Read( key_g, &color.g )
608 && aCfg->Read( key_b, &color.b ) )
609 {
610 Set( key_dest, color );
611 }
612 };
613
614 do_color( "BgColor_Red", "BgColor_Green", "BgColor_Blue", "colors.background_bottom" );
615 do_color( "BgColor_Red_Top", "BgColor_Green_Top", "BgColor_Blue_Top", "colors.background_top" );
616 do_color( "BoardBodyColor_Red", "BoardBodyColor_Green", "BoardBodyColor_Blue", "colors.board" );
617 do_color( "CopperColor_Red", "CopperColor_Green", "CopperColor_Blue", "colors.copper" );
618 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_bottom" );
619 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_top" );
620 do_color( "SMaskColor_Red", "SMaskColor_Green", "SMaskColor_Blue", "colors.soldermask", 0.83 );
621 do_color( "SPasteColor_Red", "SPasteColor_Green", "SPasteColor_Blue", "colors.solderpaste" );
622
623 return ret;
624}
declared enumerations and flags
int color
Definition: DXF_plotter.cpp:63
const char * name
Definition: DXF_plotter.cpp:62
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:108
virtual bool MigrateFromLegacy(wxConfigBase *aCfg) override
Migrates from wxConfig to JSON-based configuration.
static KIGFX::COLOR4D g_DefaultComments
static KIGFX::COLOR4D g_DefaultBoardBody
static KIGFX::COLOR4D g_DefaultSolderMask
static KIGFX::COLOR4D g_DefaultECOs
static KIGFX::COLOR4D g_DefaultBackgroundTop
static KIGFX::COLOR4D g_DefaultSurfaceFinish
static KIGFX::COLOR4D g_DefaultSolderPaste
static KIGFX::COLOR4D g_DefaultSilkscreen
static KIGFX::COLOR4D g_DefaultBackgroundBot
virtual bool MigrateFromLegacy(wxConfigBase *aLegacyConfig) override
Migrates from wxConfig to JSON-based configuration.
LAYER_PRESET_3D * FindPreset(const wxString &aName)
std::vector< LAYER_PRESET_3D > m_LayerPresets
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...
bool Contains(const std::string &aPath) const
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...
std::unique_ptr< JSON_SETTINGS_INTERNALS > m_internals
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
Stores an enum as an integer.
Definition: parameters.h:228
Like a normal param, but with custom getter and setter functions.
Definition: parameters.h:295
std::vector< LAYER_PRESET_3D > * m_presets
void jsonToPresets(const nlohmann::json &aJson)
PARAM_LAYER_PRESET_3D(const std::string &aPath, std::vector< LAYER_PRESET_3D > *aPresetList)
std::map< int, wxString > m_layerToLayerNameMap
std::map< wxString, int > m_layerNameToLayerMap
const int viewer3dSchemaVersion
! Update the schema version whenever a migration is required
#define LEGACY_PRESET_FLAG
nlohmann::json json
Definition: gerbview.cpp:50
@ LAYER_3D_SOLDERMASK_TOP
Definition: layer_ids.h:548
@ LAYER_3D_NAVIGATOR
Definition: layer_ids.h:605
@ LAYER_3D_BOUNDING_BOXES
Definition: layer_ids.h:606
@ LAYER_3D_ADHESIVE
Definition: layer_ids.h:550
@ LAYER_3D_SMD_MODELS
Definition: layer_ids.h:601
@ LAYER_3D_BACKGROUND_TOP
Definition: layer_ids.h:541
@ LAYER_3D_USER_COMMENTS
Definition: layer_ids.h:551
@ LAYER_3D_SOLDERMASK_BOTTOM
Definition: layer_ids.h:547
@ LAYER_3D_BOARD
Definition: layer_ids.h:542
@ LAYER_3D_PLATED_BARRELS
Definition: layer_ids.h:608
@ LAYER_3D_USER_ECO1
Definition: layer_ids.h:553
@ LAYER_3D_USER_ECO2
Definition: layer_ids.h:554
@ LAYER_3D_TH_MODELS
Definition: layer_ids.h:600
@ LAYER_3D_SILKSCREEN_TOP
Definition: layer_ids.h:546
@ LAYER_3D_VIRTUAL_MODELS
Definition: layer_ids.h:602
@ LAYER_3D_MODELS_MARKED_DNP
Definition: layer_ids.h:604
@ LAYER_3D_COPPER_TOP
Definition: layer_ids.h:543
@ LAYER_3D_SOLDERPASTE
Definition: layer_ids.h:549
@ LAYER_3D_OFF_BOARD_SILK
Definition: layer_ids.h:607
@ LAYER_3D_MODELS_NOT_IN_POS
Definition: layer_ids.h:603
@ LAYER_3D_USER_DRAWINGS
Definition: layer_ids.h:552
@ LAYER_3D_COPPER_BOTTOM
Definition: layer_ids.h:544
@ LAYER_3D_BACKGROUND_BOTTOM
Definition: layer_ids.h:540
@ LAYER_3D_SILKSCREEN_BOTTOM
Definition: layer_ids.h:545
@ LAYER_3D_END
Definition: layer_ids.h:610
@ LAYER_GRID_AXES
Definition: layer_ids.h:254
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
Definition: layer_ids.h:265
@ LAYER_FP_TEXT
Definition: layer_ids.h:239
@ LAYER_FP_VALUES
Show footprints values (when texts are visible).
Definition: layer_ids.h:262
STL namespace.
Declaration of the cogl_att_list class.
std::vector< KIGFX::COLOR4D > raytrace_lightColor
LAYER_PRESET_3D(const wxString &aName=wxEmptyString)
std::bitset< LAYER_3D_END > layers
std::map< int, KIGFX::COLOR4D > colors
Container to hold information pertinent to a layer of a BOARD.
Definition: board.h:196