KiCad PCB EDA Suite
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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 <jon@craftyjon.com>
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{
49
52
54 layers.set( LAYER_FP_TEXT );
55
57
58 // Preload colors vector so we don't have to worry about exceptions using colors.at()
73}
74
75
77 std::vector<LAYER_PRESET_3D>* aPresetList ) :
78 PARAM_LAMBDA<nlohmann::json>( aPath,
79 std::bind( &PARAM_LAYER_PRESET_3D::presetsToJson, this ),
80 std::bind( &PARAM_LAYER_PRESET_3D::jsonToPresets, this, _1 ),
81 {} ),
82 m_presets( aPresetList )
83{
84 wxASSERT( aPresetList );
85
86#define LAYER( n, l ) m_layerToLayerNameMap[l] = n; m_layerNameToLayerMap[n] = l;
87
88 LAYER( "fp_values", LAYER_FP_VALUES );
89 LAYER( "fp_references", LAYER_FP_REFERENCES );
90 LAYER( "fp_text", LAYER_FP_TEXT );
91 LAYER( "background_bottom", LAYER_3D_BACKGROUND_BOTTOM );
92 LAYER( "background_top", LAYER_3D_BACKGROUND_TOP );
93 LAYER( "board", LAYER_3D_BOARD );
94 LAYER( "copper", LAYER_3D_COPPER_TOP );
95 LAYER( "copper_bottom", LAYER_3D_COPPER_BOTTOM );
96 LAYER( "silkscreen_bottom", LAYER_3D_SILKSCREEN_BOTTOM );
97 LAYER( "silkscreen_top", LAYER_3D_SILKSCREEN_TOP );
98 LAYER( "soldermask_bottom", LAYER_3D_SOLDERMASK_BOTTOM );
99 LAYER( "soldermask_top", LAYER_3D_SOLDERMASK_TOP );
100 LAYER( "solderpaste", LAYER_3D_SOLDERPASTE );
101 LAYER( "adhesive", LAYER_3D_ADHESIVE );
102 LAYER( "user_comments", LAYER_3D_USER_COMMENTS );
103 LAYER( "user_drawings", LAYER_3D_USER_DRAWINGS );
104 LAYER( "user_eco1", LAYER_3D_USER_ECO1 );
105 LAYER( "user_eco2", LAYER_3D_USER_ECO2 );
106 LAYER( "3d_axes", LAYER_3D_AXES );
107 LAYER( "th_models", LAYER_3D_TH_MODELS );
108 LAYER( "smd_models", LAYER_3D_SMD_MODELS );
109 LAYER( "virtual_models", LAYER_3D_VIRTUAL_MODELS );
110 LAYER( "non_pos_file_models", LAYER_3D_MODELS_NOT_IN_POS );
111 LAYER( "dnp_models", LAYER_3D_MODELS_MARKED_DNP );
112 LAYER( "bounding_boxes", LAYER_3D_BOUNDING_BOXES );
113 LAYER( "off_board_silk", LAYER_3D_OFF_BOARD_SILK );
114}
115
116
118{
119 nlohmann::json ret = nlohmann::json::array();
120
121 for( const LAYER_PRESET_3D& preset : *m_presets )
122 {
123 nlohmann::json js = {
124 { "name", preset.name }
125 };
126
127 nlohmann::json layers = nlohmann::json::array();
128
129 for( int layer = 0; layer < LAYER_3D_END; ++layer )
130 {
131 if( preset.layers.test( layer ) )
132 layers.push_back( m_layerToLayerNameMap[layer] );
133 }
134
135 js["layers"] = layers;
136
137 nlohmann::json colors = nlohmann::json::array();
138
139 for( const auto& [ layer, color ] : preset.colors )
140 {
141 nlohmann::json layerColor = {
142 { "layer", m_layerToLayerNameMap[layer] },
143 { "color", color.ToCSSString() }
144 };
145
146 colors.push_back( layerColor );
147 }
148
149 js["colors"] = colors;
150
151 ret.push_back( js );
152 }
153
154 return ret;
155}
156
157
158void PARAM_LAYER_PRESET_3D::jsonToPresets( const nlohmann::json& aJson )
159{
160 if( aJson.empty() || !aJson.is_array() )
161 return;
162
163 m_presets->clear();
164
165 for( const nlohmann::json& preset : aJson )
166 {
167 if( preset.contains( "name" ) )
168 {
169 LAYER_PRESET_3D p( preset.at( "name" ).get<wxString>() );
170
171 if( preset.contains( "layers" ) && preset.at( "layers" ).is_array() )
172 {
173 p.layers.reset();
174
175 for( const nlohmann::json& layer : preset.at( "layers" ) )
176 {
177 if( layer.is_string() )
178 p.layers.set( m_layerNameToLayerMap[layer.get<wxString>()] );
179 }
180 }
181
182 if( preset.contains( "colors" ) && preset.at( "colors" ).is_array() )
183 {
184 for( const nlohmann::json& entry : preset.at( "colors" ) )
185 {
186 if( entry.contains( "layer" ) && entry.contains( "color" )
187 && entry.at( "layer" ).is_string() )
188 {
189 int layerNum = m_layerNameToLayerMap[entry.at( "layer" ).get<wxString>()];
190 p.colors[ layerNum ] = entry.at( "color" ).get<COLOR4D>();
191 }
192 }
193 }
194
195 m_presets->emplace_back( p );
196 }
197 }
198}
199
200
203
204
207 m_Render(),
208 m_Camera()
209{
210 m_params.emplace_back( new PARAM<bool>( "aui.show_layer_manager",
212
213 m_params.emplace_back( new PARAM<int>( "aui.right_panel_width",
215
216 m_params.emplace_back( new PARAM_ENUM<RENDER_ENGINE>( "render.engine", &m_Render.engine,
217 RENDER_ENGINE::OPENGL,
218 RENDER_ENGINE::OPENGL,
219 RENDER_ENGINE::RAYTRACING ) );
220
221 m_params.emplace_back( new PARAM_ENUM<GRID3D_TYPE>( "render.grid_type", &m_Render.grid_type,
222 GRID3D_TYPE::NONE,
223 GRID3D_TYPE::NONE,
224 GRID3D_TYPE::GRID_10MM ) );
225
226 m_params.emplace_back( new PARAM_ENUM<MATERIAL_MODE>( "render.material_mode",
228 MATERIAL_MODE::NORMAL,
229 MATERIAL_MODE::NORMAL,
230 MATERIAL_MODE::CAD_MODE ) );
231
232 m_params.emplace_back( new PARAM_ENUM<ANTIALIASING_MODE>( "render.opengl_AA_mode",
234 ANTIALIASING_MODE::AA_8X,
235 ANTIALIASING_MODE::AA_NONE,
236 ANTIALIASING_MODE::AA_8X ) );
237
238 m_params.emplace_back( new PARAM<COLOR4D>( "render.opengl_selection_color",
240 COLOR4D( 0.0, 1.0, 0.0, 1.0 ) ) );
241
242 // OpenGL options
243 m_params.emplace_back( new PARAM<bool>( "render.opengl_copper_thickness",
245 m_params.emplace_back( new PARAM<bool>( "render.opengl_show_model_bbox",
246 &m_Render.show_model_bbox, false ) );
247 m_params.emplace_back( new PARAM<bool>( "render.opengl_show_off_board_silk",
248 &m_Render.show_off_board_silk, false ) );
249 m_params.emplace_back( new PARAM<bool>( "render.opengl_highlight_on_rollover",
251 m_params.emplace_back( new PARAM<bool>( "render.opengl_AA_disableOnMove",
253 m_params.emplace_back( new PARAM<bool>( "render.opengl_thickness_disableOnMove",
255 m_params.emplace_back( new PARAM<bool>( "render.opengl_vias_disableOnMove",
257 m_params.emplace_back( new PARAM<bool>( "render.opengl_holes_disableOnMove",
259 m_params.emplace_back( new PARAM<bool>( "render.opengl_render_bbox_only_OnMove",
261
262 // Raytracing options
263 m_params.emplace_back( new PARAM<bool>( "render.raytrace_anti_aliasing",
265 m_params.emplace_back( new PARAM<bool>( "render.raytrace_backfloor",
266 &m_Render.raytrace_backfloor, false ) );
267 m_params.emplace_back( new PARAM<bool>( "render.raytrace_post_processing",
269 m_params.emplace_back( new PARAM<bool>( "render.raytrace_procedural_textures",
271 m_params.emplace_back( new PARAM<bool>( "render.raytrace_reflections",
273 m_params.emplace_back( new PARAM<bool>( "render.raytrace_refractions",
275 m_params.emplace_back( new PARAM<bool>( "render.raytrace_shadows",
276 &m_Render.raytrace_shadows, true ) );
277
278 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_shadows",
280 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_reflections",
282 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_refractions",
284
285 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_reflections",
287 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_refractions",
289
290 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_shadows",
292 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_reflections",
294 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_refractions",
296
297 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorCamera",
299 COLOR4D( 0.2, 0.2, 0.2, 1.0 ) ) );
300
301 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorTop",
303 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
304
305 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorBottom",
307 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
308
309 std::vector<COLOR4D> default_colors =
310 {
311 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
312 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
313 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
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 };
320
321 m_params.emplace_back( new PARAM_LIST<COLOR4D>( "render.raytrace_lightColor",
323 default_colors ) );
324
325 const std::vector<int> default_elevation =
326 {
327 67, 67, 67, 67, -67, -67, -67, -67,
328 };
329
330 m_params.emplace_back( new PARAM_LIST<int>( "render.raytrace_lightElevation",
332 default_elevation ) );
333
334 const std::vector<int> default_azimuth =
335 {
336 45, 135, 225, 315, 45, 135, 225, 315,
337 };
338
339 m_params.emplace_back( new PARAM_LIST<int>( "render.raytrace_lightAzimuth",
341 default_azimuth ) );
342
343 m_params.emplace_back( new PARAM<bool>( "render.show_adhesive",
344 &m_Render.show_adhesive, true ) );
345 m_params.emplace_back( new PARAM<bool>( "render.show_axis",
346 &m_Render.show_axis, true ) );
347 m_params.emplace_back( new PARAM<bool>( "render.show_board_body",
348 &m_Render.show_board_body, true ) );
349 m_params.emplace_back( new PARAM<bool>( "render.show_comments",
350 &m_Render.show_comments, true ) );
351 m_params.emplace_back( new PARAM<bool>( "render.show_drawings",
352 &m_Render.show_drawings, true ) );
353 m_params.emplace_back( new PARAM<bool>( "render.show_eco1",
354 &m_Render.show_eco1, true ) );
355 m_params.emplace_back( new PARAM<bool>( "render.show_eco2",
356 &m_Render.show_eco2, true ) );
357
358 for( int layer = 0; layer < 45; ++layer )
359 {
360 m_params.emplace_back( new PARAM<bool>( fmt::format( "render.show_user{}", layer + 1 ),
361 &m_Render.show_user[layer], false ) );
362 }
363
364 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_insert",
366 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_normal",
368 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_virtual",
370 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_not_in_posfile",
372 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_dnp",
373 &m_Render.show_footprints_dnp, false ) );
374 m_params.emplace_back( new PARAM<bool>( "render.show_silkscreen_top",
375 &m_Render.show_silkscreen_top, true ) );
376 m_params.emplace_back( new PARAM<bool>( "render.show_silkscreen_bottom",
378 m_params.emplace_back( new PARAM<bool>( "render.show_soldermask_top",
379 &m_Render.show_soldermask_top, true ) );
380 m_params.emplace_back( new PARAM<bool>( "render.show_soldermask_bottom",
382 m_params.emplace_back( new PARAM<bool>( "render.show_solderpaste",
383 &m_Render.show_solderpaste, true ) );
384 m_params.emplace_back( new PARAM<bool>( "render.show_copper_top",
385 &m_Render.show_copper_bottom, true ) );
386 m_params.emplace_back( new PARAM<bool>( "render.show_copper_bottom",
387 &m_Render.show_copper_top, true ) );
388 m_params.emplace_back( new PARAM<bool>( "render.show_zones",
389 &m_Render.show_zones, true ) );
390 m_params.emplace_back( new PARAM<bool>( "render.show_fp_references",
391 &m_Render.show_fp_references, true ) );
392 m_params.emplace_back( new PARAM<bool>( "render.show_fp_values",
393 &m_Render.show_fp_values, true ) );
394 m_params.emplace_back( new PARAM<bool>( "render.show_fp_text",
395 &m_Render.show_fp_text, true ) );
396 m_params.emplace_back( new PARAM<bool>( "render.subtract_mask_from_silk",
398 m_params.emplace_back( new PARAM<bool>( "render.clip_silk_on_via_annulus",
400 m_params.emplace_back( new PARAM<bool>( "render.plated_and_bare_copper",
402 m_params.emplace_back( new PARAM<bool>( "render.use_board_editor_copper_colors",
404 m_params.emplace_back( new PARAM<bool>( "render.preview_show_board_body",
406 m_params.emplace_back( new PARAM<bool>( "camera.animation_enabled",
407 &m_Camera.animation_enabled, true ) );
408 m_params.emplace_back( new PARAM<int>( "camera.moving_speed_multiplier",
410 m_params.emplace_back( new PARAM<double>( "camera.rotation_increment",
411 &m_Camera.rotation_increment, 10.0 ) );
412 m_params.emplace_back( new PARAM<int>( "camera.projection_mode",
414
415 m_params.emplace_back( new PARAM<bool>( "use_stackup_colors",
416 &m_UseStackupColors, true ) );
417 m_params.emplace_back( new PARAM_LAYER_PRESET_3D( "layer_presets",
418 &m_LayerPresets ) );
419 m_params.emplace_back( new PARAM<wxString>( "current_layer_preset",
421
423
424 registerMigration( 1, 2,
425 [&]() -> bool
426 {
427 Set( "render.opengl_copper_thickness", false );
428 return true;
429 } );
430
431 registerMigration( 2, 3,
432 [&]() -> bool
433 {
434 if( std::optional<bool> optval = Get<bool>( "render.show_copper" ) )
435 {
436 Set( "render.show_copper_top", *optval );
437 Set( "render.show_copper_bottom", *optval );
438 }
439
440 if( std::optional<bool> optval = Get<bool>( "render.show_silkscreen" ) )
441 {
442 Set( "render.show_silkscreen_top", *optval );
443 Set( "render.show_silkscreen_bottom", *optval );
444 }
445
446 if( std::optional<bool> optval = Get<bool>( "render.show_soldermask" ) )
447 {
448 Set( "render.show_soldermask_top", *optval );
449 Set( "render.show_soldermask_bottom", *optval );
450 }
451
452 if( std::optional<bool> optval = Get<bool>( "render.show_comments" ) )
453 Set( "render.show_drawings", *optval );
454
455 if( std::optional<bool> optval = Get<bool>( "render.show_eco" ) )
456 {
457 Set( "render.show_eco1", *optval );
458 Set( "render.show_eco2", *optval );
459 }
460
461 return true;
462 } );
463
464 registerMigration( 3, 4,
465 [&]() -> bool
466 {
467 std::map<int, wxString> legacyColorMap;
468
469 legacyColorMap[142] = "fp_values";
470 legacyColorMap[143] = "fp_references";
471 legacyColorMap[130] = "fp_text";
472 legacyColorMap[466] = "background_bottom";
473 legacyColorMap[467] = "background_top";
474 legacyColorMap[468] = "board";
475 legacyColorMap[469] = "copper";
476 legacyColorMap[470] = "copper_bottom";
477 legacyColorMap[471] = "silkscreen_bottom";
478 legacyColorMap[472] = "silkscreen_top";
479 legacyColorMap[473] = "soldermask_bottom";
480 legacyColorMap[474] = "soldermask_top";
481 legacyColorMap[475] = "solderpaste";
482 legacyColorMap[476] = "adhesive";
483 legacyColorMap[477] = "user_comments";
484 legacyColorMap[478] = "user_drawings";
485 legacyColorMap[479] = "user_eco1";
486 legacyColorMap[480] = "user_eco2";
487 legacyColorMap[481] = "th_models";
488 legacyColorMap[482] = "smd_models";
489 legacyColorMap[483] = "virtual_models";
490 legacyColorMap[484] = "non_pos_file_models";
491 legacyColorMap[485] = "dnp_models";
492 legacyColorMap[486] = "3d_axes";
493 legacyColorMap[487] = "bounding_boxes";
494 legacyColorMap[488] = "off_board_silk";
495
496 if( !Contains( "layer_presets" ) || !At( "layer_presets" ).is_array() )
497 return true;
498
499 for( nlohmann::json& preset : At( "layer_presets" ) )
500 {
501 if( preset.contains( "colors" ) && preset.at( "colors" ).is_array() )
502 {
503 for( nlohmann::json& color : preset.at( "colors" ) )
504 {
505 if( color.contains( "layer" ) && color.at( "layer" ).is_number_integer() )
506 color["layer"] = legacyColorMap[color["layer"].get<int>()];
507 }
508 }
509
510 if( preset.contains( "layers" ) && preset.at( "layers" ).is_array() )
511 {
512 nlohmann::json mappedLayers = nlohmann::json::array();
513
514 for( const nlohmann::json& layer : preset.at( "layers" ) )
515 {
516 if( layer.is_number_integer() )
517 mappedLayers.push_back( legacyColorMap[layer.get<int>()] );
518 }
519
520 preset["layers"] = mappedLayers;
521 }
522 }
523
524 return true;
525 } );
526}
527
528
530{
531 for( LAYER_PRESET_3D& preset : m_LayerPresets )
532 {
533 if( preset.name == aName )
534 return &preset;
535 }
536
537 return nullptr;
538}
539
540
542{
548 try
549 {
550 if( m_internals->contains( "colors" ) )
551 m_internals->erase( "colors" );
552 }
553 catch( ... )
554 {
555 }
556
557 return true;
558}
559
560
562{
563 bool ret = APP_SETTINGS_BASE::MigrateFromLegacy( aCfg );
564
565 ret &= fromLegacy<int>( aCfg, "RenderEngine", "render.engine" );
566 ret &= fromLegacy<int>( aCfg, "ShowGrid3D", "render.grid_type" );
567 ret &= fromLegacy<int>( aCfg, "Render_Material", "render.material_mode" );
568 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowCopperThickness",
569 "render.opengl_copper_thickness" );
570 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowModelBoudingBoxes",
571 "render.opengl_show_model_bbox" );
572 ret &= fromLegacy<bool>( aCfg, "Render_RAY_AntiAliasing", "render.raytrace_anti_aliasing" );
573 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Backfloor", "render.raytrace_backfloor" );
574 ret &= fromLegacy<bool>( aCfg, "Render_RAY_PostProcess", "render.raytrace_post_processing" );
575 ret &= fromLegacy<bool>( aCfg, "Render_RAY_ProceduralTextures",
576 "render.raytrace_procedural_textures" );
577 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Reflections", "render.raytrace_reflections" );
578 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Refractions", "render.raytrace_refractions" );
579 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Shadows", "render.raytrace_shadows" );
580 ret &= fromLegacy<bool>( aCfg, "ShowRealisticMode", "render.realistic" );
581 ret &= fromLegacy<bool>( aCfg, "ShowAdhesiveLayers", "render.show_adhesive" );
582 ret &= fromLegacy<bool>( aCfg, "ShowAxis", "render.show_axis" );
583 ret &= fromLegacy<bool>( aCfg, "ShowBoardBody", "render.show_board_body" );
584 ret &= fromLegacy<bool>( aCfg, "ShowCommentsLayers", "render.show_comments" );
585 ret &= fromLegacy<bool>( aCfg, "ShowEcoLayers", "render.show_eco" );
586 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Insert", "render.show_footprints_insert" );
587 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Normal", "render.show_footprints_normal" );
588 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Virtual", "render.show_footprints_virtual" );
589 ret &= fromLegacy<bool>( aCfg, "ShowSilkScreenLayers", "render.show_silkscreen" );
590 ret &= fromLegacy<bool>( aCfg, "ShowSolderMasLayers", "render.show_soldermask" );
591 ret &= fromLegacy<bool>( aCfg, "ShowSolderPasteLayers", "render.show_solderpaste" );
592 ret &= fromLegacy<bool>( aCfg, "ShowZones", "render.show_zones" );
593 ret &= fromLegacy<bool>( aCfg, "SubtractMaskFromSilk", "render.subtract_mask_from_silk" );
594
595 auto do_color =
596 [&] ( const std::string& key_r, const std::string& key_g, const std::string& key_b,
597 std::string key_dest, double alpha = 1.0 )
598 {
599 COLOR4D color( 1, 1, 1, alpha );
600
601 if( aCfg->Read( key_r, &color.r )
602 && aCfg->Read( key_g, &color.g )
603 && aCfg->Read( key_b, &color.b ) )
604 {
605 Set( key_dest, color );
606 }
607 };
608
609 do_color( "BgColor_Red", "BgColor_Green", "BgColor_Blue", "colors.background_bottom" );
610 do_color( "BgColor_Red_Top", "BgColor_Green_Top", "BgColor_Blue_Top", "colors.background_top" );
611 do_color( "BoardBodyColor_Red", "BoardBodyColor_Green", "BoardBodyColor_Blue", "colors.board" );
612 do_color( "CopperColor_Red", "CopperColor_Green", "CopperColor_Blue", "colors.copper" );
613 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_bottom" );
614 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_top" );
615 do_color( "SMaskColor_Red", "SMaskColor_Green", "SMaskColor_Blue", "colors.soldermask", 0.83 );
616 do_color( "SPasteColor_Red", "SPasteColor_Green", "SPasteColor_Blue", "colors.solderpaste" );
617
618 return ret;
619}
declared enumerations and flags
int color
Definition: DXF_plotter.cpp:60
const char * name
Definition: DXF_plotter.cpp:59
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
Definition: app_settings.h:92
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:547
@ LAYER_3D_BOUNDING_BOXES
Definition: layer_ids.h:605
@ LAYER_3D_ADHESIVE
Definition: layer_ids.h:549
@ LAYER_3D_SMD_MODELS
Definition: layer_ids.h:600
@ LAYER_3D_BACKGROUND_TOP
Definition: layer_ids.h:540
@ LAYER_3D_USER_COMMENTS
Definition: layer_ids.h:550
@ LAYER_3D_SOLDERMASK_BOTTOM
Definition: layer_ids.h:546
@ LAYER_3D_BOARD
Definition: layer_ids.h:541
@ LAYER_3D_USER_ECO1
Definition: layer_ids.h:552
@ LAYER_3D_USER_ECO2
Definition: layer_ids.h:553
@ LAYER_3D_TH_MODELS
Definition: layer_ids.h:599
@ LAYER_3D_AXES
Definition: layer_ids.h:604
@ LAYER_3D_SILKSCREEN_TOP
Definition: layer_ids.h:545
@ LAYER_3D_VIRTUAL_MODELS
Definition: layer_ids.h:601
@ LAYER_3D_MODELS_MARKED_DNP
Definition: layer_ids.h:603
@ LAYER_3D_COPPER_TOP
Definition: layer_ids.h:542
@ LAYER_3D_SOLDERPASTE
Definition: layer_ids.h:548
@ LAYER_3D_OFF_BOARD_SILK
Definition: layer_ids.h:606
@ LAYER_3D_MODELS_NOT_IN_POS
Definition: layer_ids.h:602
@ LAYER_3D_USER_DRAWINGS
Definition: layer_ids.h:551
@ LAYER_3D_COPPER_BOTTOM
Definition: layer_ids.h:543
@ LAYER_3D_BACKGROUND_BOTTOM
Definition: layer_ids.h:539
@ LAYER_3D_SILKSCREEN_BOTTOM
Definition: layer_ids.h:544
@ LAYER_3D_END
Definition: layer_ids.h:608
@ 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:176