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
19 * along with this program. If not, see <https://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,
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 LAYER( "3d_axes", LAYER_GRID_AXES );
118
119 for( int layer = LAYER_3D_USER_1; layer <= LAYER_3D_USER_45; ++layer )
120 {
121 wxString name = wxString::Format( wxS( "user_%d" ), layer - LAYER_3D_USER_1 + 1 );
122 m_layerToLayerNameMap[layer] = name;
123 m_layerNameToLayerMap[name] = layer;
124 }
125}
126
127
129{
130 nlohmann::json ret = nlohmann::json::array();
131
132 for( const LAYER_PRESET_3D& preset : *m_presets )
133 {
134 nlohmann::json js = {
135 { "name", preset.name }
136 };
137
138 nlohmann::json layers = nlohmann::json::array();
139
140 for( int layer = 0; layer < LAYER_3D_END; ++layer )
141 {
142 if( !preset.layers.test( layer ) )
143 continue;
144
145 if( auto it = m_layerToLayerNameMap.find( layer ); it != m_layerToLayerNameMap.end() )
146 layers.push_back( it->second );
147 }
148
149 js["layers"] = layers;
150
151 nlohmann::json colors = nlohmann::json::array();
152
153 for( const auto& [ layer, color ] : preset.colors )
154 {
155 auto it = m_layerToLayerNameMap.find( layer );
156
157 if( it == m_layerToLayerNameMap.end() )
158 continue;
159
160 nlohmann::json layerColor = { { "layer", it->second }, { "color", color.ToCSSString() } };
161
162 colors.push_back( layerColor );
163 }
164
165 js["colors"] = colors;
166
167 ret.push_back( js );
168 }
169
170 return ret;
171}
172
173
174void PARAM_LAYER_PRESET_3D::jsonToPresets( const nlohmann::json& aJson )
175{
176 if( aJson.empty() || !aJson.is_array() )
177 return;
178
179 m_presets->clear();
180
181 for( const nlohmann::json& preset : aJson )
182 {
183 if( preset.contains( "name" ) )
184 {
185 LAYER_PRESET_3D p( preset.at( "name" ).get<wxString>() );
186
187 if( preset.contains( "layers" ) && preset.at( "layers" ).is_array() )
188 {
189 p.layers.reset();
190
191 for( const nlohmann::json& layer : preset.at( "layers" ) )
192 {
193 if( !layer.is_string() )
194 continue;
195
196 auto it = m_layerNameToLayerMap.find( layer.get<wxString>() );
197
198 if( it != m_layerNameToLayerMap.end() )
199 p.layers.set( it->second );
200 }
201 }
202
203 if( preset.contains( "colors" ) && preset.at( "colors" ).is_array() )
204 {
205 for( const nlohmann::json& entry : preset.at( "colors" ) )
206 {
207 if( entry.contains( "layer" ) && entry.contains( "color" )
208 && entry.at( "layer" ).is_string() )
209 {
210 auto it = m_layerNameToLayerMap.find( entry.at( "layer" ).get<wxString>() );
211
212 if( it != m_layerNameToLayerMap.end() )
213 p.colors[it->second] = entry.at( "color" ).get<COLOR4D>();
214 }
215 }
216 }
217
218 m_presets->emplace_back( p );
219 }
220 }
221}
222
223
226
227
230 m_Render(),
231 m_Camera()
232{
233 m_params.emplace_back( new PARAM<bool>( "aui.show_layer_manager",
234 &m_AuiPanels.show_layer_manager, true ) );
235
236 m_params.emplace_back( new PARAM<int>( "aui.right_panel_width",
237 &m_AuiPanels.right_panel_width, -1 ) );
238
239 m_params.emplace_back( new PARAM_ENUM<RENDER_ENGINE>( "render.engine", &m_Render.engine,
243
244 m_params.emplace_back( new PARAM_ENUM<GRID3D_TYPE>( "render.grid_type", &m_Render.grid_type,
248
249 m_params.emplace_back( new PARAM_ENUM<MATERIAL_MODE>( "render.material_mode",
250 &m_Render.material_mode,
254
255 m_params.emplace_back( new PARAM_ENUM<ANTIALIASING_MODE>( "render.opengl_AA_mode",
256 &m_Render.opengl_AA_mode,
260
261 m_params.emplace_back( new PARAM<COLOR4D>( "render.opengl_selection_color",
262 &m_Render.opengl_selection_color,
263 COLOR4D( 0.0, 1.0, 0.0, 1.0 ) ) );
264
265 // OpenGL options
266 m_params.emplace_back( new PARAM<bool>( "render.opengl_copper_thickness",
267 &m_Render.opengl_copper_thickness, false ) );
268 m_params.emplace_back( new PARAM<bool>( "render.opengl_show_model_bbox",
269 &m_Render.show_model_bbox, false ) );
270 m_params.emplace_back( new PARAM<bool>( "render.opengl_show_off_board_silk",
271 &m_Render.show_off_board_silk, false ) );
272 m_params.emplace_back( new PARAM<bool>( "render.opengl_highlight_on_rollover",
273 &m_Render.highlight_on_rollover, true ) );
274 m_params.emplace_back( new PARAM<bool>( "render.opengl_AA_disableOnMove",
275 &m_Render.opengl_AA_disableOnMove, false ) );
276 m_params.emplace_back( new PARAM<bool>( "render.opengl_thickness_disableOnMove",
277 &m_Render.opengl_thickness_disableOnMove, false ) );
278 m_params.emplace_back( new PARAM<bool>( "render.opengl_vias_disableOnMove",
279 &m_Render.opengl_microvias_disableOnMove, false ) );
280 m_params.emplace_back( new PARAM<bool>( "render.opengl_holes_disableOnMove",
281 &m_Render.opengl_holes_disableOnMove, false ) );
282 m_params.emplace_back( new PARAM<bool>( "render.opengl_render_bbox_only_OnMove",
283 &m_Render.opengl_render_bbox_only_OnMove, false ) );
284
285 // Raytracing options
286 m_params.emplace_back( new PARAM<bool>( "render.raytrace_anti_aliasing",
287 &m_Render.raytrace_anti_aliasing, true ) );
288 m_params.emplace_back( new PARAM<bool>( "render.raytrace_backfloor",
289 &m_Render.raytrace_backfloor, false ) );
290 m_params.emplace_back( new PARAM<bool>( "render.raytrace_post_processing",
291 &m_Render.raytrace_post_processing, true ) );
292 m_params.emplace_back( new PARAM<bool>( "render.raytrace_procedural_textures",
293 &m_Render.raytrace_procedural_textures, true ) );
294 m_params.emplace_back( new PARAM<bool>( "render.raytrace_reflections",
295 &m_Render.raytrace_reflections, true ) );
296 m_params.emplace_back( new PARAM<bool>( "render.raytrace_refractions",
297 &m_Render.raytrace_refractions, true ) );
298 m_params.emplace_back( new PARAM<bool>( "render.raytrace_shadows",
299 &m_Render.raytrace_shadows, true ) );
300
301 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_shadows",
302 &m_Render.raytrace_nrsamples_shadows, 3 ) );
303 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_reflections",
304 &m_Render.raytrace_nrsamples_reflections, 3 ) );
305 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_refractions",
306 &m_Render.raytrace_nrsamples_refractions, 4 ) );
307
308 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_reflections",
309 &m_Render.raytrace_recursivelevel_reflections, 3 ) );
310 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_refractions",
311 &m_Render.raytrace_recursivelevel_refractions, 2 ) );
312
313 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_shadows",
314 &m_Render.raytrace_spread_shadows, 0.05f ) );
315 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_reflections",
316 &m_Render.raytrace_spread_reflections, 0.025f ) );
317 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_refractions",
318 &m_Render.raytrace_spread_refractions, 0.025f ) );
319
320 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorCamera",
321 &m_Render.raytrace_lightColorCamera,
322 COLOR4D( 0.2, 0.2, 0.2, 1.0 ) ) );
323
324 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorTop",
325 &m_Render.raytrace_lightColorTop,
326 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
327
328 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorBottom",
329 &m_Render.raytrace_lightColorBottom,
330 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
331
332 std::vector<COLOR4D> default_colors =
333 {
334 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
335 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
336 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
337 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
338 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
339 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
340 COLOR4D( 0.168, 0.168, 0.168, 1.0 ),
341 COLOR4D( 0.168, 0.168, 0.168, 1.0 )
342 };
343
344 m_params.emplace_back( new PARAM_LIST<COLOR4D>( "render.raytrace_lightColor",
345 &m_Render.raytrace_lightColor,
346 std::move( default_colors ) ) );
347
348 const std::vector<int> default_elevation =
349 {
350 67, 67, 67, 67, -67, -67, -67, -67,
351 };
352
353 m_params.emplace_back( new PARAM_LIST<int>( "render.raytrace_lightElevation",
354 &m_Render.raytrace_lightElevation,
355 std::move( default_elevation ) ) );
356
357 const std::vector<int> default_azimuth =
358 {
359 45, 135, 225, 315, 45, 135, 225, 315,
360 };
361
362 m_params.emplace_back( new PARAM_LIST<int>( "render.raytrace_lightAzimuth",
363 &m_Render.raytrace_lightAzimuth,
364 std::move( default_azimuth ) ) );
365
366 m_params.emplace_back( new PARAM<bool>( "render.show_adhesive",
367 &m_Render.show_adhesive, true ) );
368 m_params.emplace_back( new PARAM<bool>( "render.show_navigator",
369 &m_Render.show_navigator, true ) );
370 m_params.emplace_back( new PARAM<bool>( "render.show_board_body",
371 &m_Render.show_board_body, true ) );
372 m_params.emplace_back( new PARAM<bool>( "render.show_plated_barrels",
373 &m_Render.show_plated_barrels, true ) );
374 m_params.emplace_back( new PARAM<bool>( "render.show_comments",
375 &m_Render.show_comments, true ) );
376 m_params.emplace_back( new PARAM<bool>( "render.show_drawings",
377 &m_Render.show_drawings, true ) );
378 m_params.emplace_back( new PARAM<bool>( "render.show_eco1",
379 &m_Render.show_eco1, true ) );
380 m_params.emplace_back( new PARAM<bool>( "render.show_eco2",
381 &m_Render.show_eco2, true ) );
382
383 for( int layer = 0; layer < 45; ++layer )
384 {
385 m_params.emplace_back( new PARAM<bool>( fmt::format( "render.show_user{}", layer + 1 ),
386 &m_Render.show_user[layer], false ) );
387 }
388
389 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_insert",
390 &m_Render.show_footprints_insert, true ) );
391 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_normal",
392 &m_Render.show_footprints_normal, true ) );
393 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_virtual",
394 &m_Render.show_footprints_virtual, true ) );
395 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_not_in_posfile",
396 &m_Render.show_footprints_not_in_posfile, true ) );
397 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_dnp",
398 &m_Render.show_footprints_dnp, false ) );
399 m_params.emplace_back( new PARAM<bool>( "render.show_silkscreen_top",
400 &m_Render.show_silkscreen_top, true ) );
401 m_params.emplace_back( new PARAM<bool>( "render.show_silkscreen_bottom",
402 &m_Render.show_silkscreen_bottom, true ) );
403 m_params.emplace_back( new PARAM<bool>( "render.show_soldermask_top",
404 &m_Render.show_soldermask_top, true ) );
405 m_params.emplace_back( new PARAM<bool>( "render.show_soldermask_bottom",
406 &m_Render.show_soldermask_bottom, true ) );
407 m_params.emplace_back( new PARAM<bool>( "render.show_solderpaste",
408 &m_Render.show_solderpaste, true ) );
409 m_params.emplace_back( new PARAM<bool>( "render.show_copper_top",
410 &m_Render.show_copper_bottom, true ) );
411 m_params.emplace_back( new PARAM<bool>( "render.show_copper_bottom",
412 &m_Render.show_copper_top, true ) );
413 m_params.emplace_back( new PARAM<bool>( "render.show_zones",
414 &m_Render.show_zones, true ) );
415 m_params.emplace_back( new PARAM<bool>( "render.show_fp_references",
416 &m_Render.show_fp_references, true ) );
417 m_params.emplace_back( new PARAM<bool>( "render.show_fp_values",
418 &m_Render.show_fp_values, true ) );
419 m_params.emplace_back( new PARAM<bool>( "render.show_fp_text",
420 &m_Render.show_fp_text, true ) );
421 m_params.emplace_back( new PARAM<bool>( "render.subtract_mask_from_silk",
422 &m_Render.subtract_mask_from_silk, false ) );
423 m_params.emplace_back( new PARAM<bool>( "render.clip_silk_on_via_annulus",
424 &m_Render.clip_silk_on_via_annuli, false ) );
425 m_params.emplace_back( new PARAM<bool>( "render.plated_and_bare_copper",
426 &m_Render.differentiate_plated_copper, false ) );
427 m_params.emplace_back( new PARAM<bool>( "render.use_board_editor_copper_colors",
428 &m_Render.use_board_editor_copper_colors, false ) );
429 m_params.emplace_back( new PARAM<bool>( "render.preview_show_board_body",
430 &m_Render.preview_show_board_body, true ) );
431 m_params.emplace_back( new PARAM<bool>( "render.show_missing_models", &m_Render.show_missing_models, false ) );
432 m_params.emplace_back( new PARAM<bool>( "camera.animation_enabled",
433 &m_Camera.animation_enabled, true ) );
434 m_params.emplace_back( new PARAM<int>( "camera.moving_speed_multiplier",
435 &m_Camera.moving_speed_multiplier, 3 ) );
436 m_params.emplace_back( new PARAM<double>( "camera.rotation_increment",
437 &m_Camera.rotation_increment, 10.0 ) );
438 m_params.emplace_back( new PARAM<int>( "camera.projection_mode",
439 &m_Camera.projection_mode, 1 ) );
440
441 m_params.emplace_back( new PARAM<int>( "export_image.width", &m_ExportImage.width, 0 ) );
442 m_params.emplace_back( new PARAM<int>( "export_image.height", &m_ExportImage.height, 0 ) );
443 m_params.emplace_back( new PARAM<double>( "export_image.x_resolution", &m_ExportImage.x_resolution, 300.0 ) );
444 m_params.emplace_back( new PARAM<double>( "export_image.y_resolution", &m_ExportImage.y_resolution, 300.0 ) );
445 m_params.emplace_back( new PARAM<int>( "export_image.size_units", &m_ExportImage.size_units, 0 ) );
446 m_params.emplace_back( new PARAM<int>( "export_image.resolution_units", &m_ExportImage.resolution_units, 0 ) );
447 m_params.emplace_back(
448 new PARAM<bool>( "export_image.lock_aspect_ratio", &m_ExportImage.lock_aspect_ratio, true ) );
449
450 m_params.emplace_back( new PARAM<bool>( "use_stackup_colors",
451 &m_UseStackupColors, true ) );
452 m_params.emplace_back( new PARAM_LAYER_PRESET_3D( "layer_presets",
453 &m_LayerPresets ) );
454 m_params.emplace_back( new PARAM<wxString>( "current_layer_preset",
456
458
459 registerMigration( 1, 2,
460 [&]() -> bool
461 {
462 Set( "render.opengl_copper_thickness", false );
463 return true;
464 } );
465
466 registerMigration( 2, 3,
467 [&]() -> bool
468 {
469 if( std::optional<bool> optval = Get<bool>( "render.show_copper" ) )
470 {
471 Set( "render.show_copper_top", *optval );
472 Set( "render.show_copper_bottom", *optval );
473 }
474
475 if( std::optional<bool> optval = Get<bool>( "render.show_silkscreen" ) )
476 {
477 Set( "render.show_silkscreen_top", *optval );
478 Set( "render.show_silkscreen_bottom", *optval );
479 }
480
481 if( std::optional<bool> optval = Get<bool>( "render.show_soldermask" ) )
482 {
483 Set( "render.show_soldermask_top", *optval );
484 Set( "render.show_soldermask_bottom", *optval );
485 }
486
487 if( std::optional<bool> optval = Get<bool>( "render.show_comments" ) )
488 Set( "render.show_drawings", *optval );
489
490 if( std::optional<bool> optval = Get<bool>( "render.show_eco" ) )
491 {
492 Set( "render.show_eco1", *optval );
493 Set( "render.show_eco2", *optval );
494 }
495
496 return true;
497 } );
498
499 registerMigration( 3, 4,
500 [&]() -> bool
501 {
502 std::map<int, wxString> legacyColorMap;
503
504 legacyColorMap[142] = "fp_values";
505 legacyColorMap[143] = "fp_references";
506 legacyColorMap[130] = "fp_text";
507 legacyColorMap[466] = "background_bottom";
508 legacyColorMap[467] = "background_top";
509 legacyColorMap[468] = "board";
510 legacyColorMap[469] = "copper";
511 legacyColorMap[470] = "copper_bottom";
512 legacyColorMap[471] = "silkscreen_bottom";
513 legacyColorMap[472] = "silkscreen_top";
514 legacyColorMap[473] = "soldermask_bottom";
515 legacyColorMap[474] = "soldermask_top";
516 legacyColorMap[475] = "solderpaste";
517 legacyColorMap[476] = "adhesive";
518 legacyColorMap[477] = "user_comments";
519 legacyColorMap[478] = "user_drawings";
520 legacyColorMap[479] = "user_eco1";
521 legacyColorMap[480] = "user_eco2";
522 legacyColorMap[481] = "th_models";
523 legacyColorMap[482] = "smd_models";
524 legacyColorMap[483] = "virtual_models";
525 legacyColorMap[484] = "non_pos_file_models";
526 legacyColorMap[485] = "dnp_models";
527 legacyColorMap[486] = "3d_navigator";
528 legacyColorMap[487] = "bounding_boxes";
529 legacyColorMap[488] = "off_board_silk";
530
531 if( !Contains( "layer_presets" ) || !At( "layer_presets" ).is_array() )
532 return true;
533
534 for( nlohmann::json& preset : At( "layer_presets" ) )
535 {
536 if( preset.contains( "colors" ) && preset.at( "colors" ).is_array() )
537 {
538 for( nlohmann::json& color : preset.at( "colors" ) )
539 {
540 if( color.contains( "layer" ) && color.at( "layer" ).is_number_integer() )
541 color["layer"] = legacyColorMap[color["layer"].get<int>()];
542 }
543 }
544
545 if( preset.contains( "layers" ) && preset.at( "layers" ).is_array() )
546 {
547 nlohmann::json mappedLayers = nlohmann::json::array();
548
549 for( const nlohmann::json& layer : preset.at( "layers" ) )
550 {
551 if( layer.is_number_integer() )
552 mappedLayers.push_back( legacyColorMap[layer.get<int>()] );
553 }
554
555 preset["layers"] = mappedLayers;
556 }
557 }
558
559 return true;
560 } );
561}
562
563
565{
566 for( LAYER_PRESET_3D& preset : m_LayerPresets )
567 {
568 if( preset.name == aName )
569 return &preset;
570 }
571
572 return nullptr;
573}
574
575
577{
583 try
584 {
585 if( m_internals->contains( "colors" ) )
586 m_internals->erase( "colors" );
587 }
588 catch( ... )
589 {
590 }
591
592 return true;
593}
594
595
597{
598 bool ret = APP_SETTINGS_BASE::MigrateFromLegacy( aCfg );
599
600 ret &= fromLegacy<int>( aCfg, "RenderEngine", "render.engine" );
601 ret &= fromLegacy<int>( aCfg, "ShowGrid3D", "render.grid_type" );
602 ret &= fromLegacy<int>( aCfg, "Render_Material", "render.material_mode" );
603 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowCopperThickness",
604 "render.opengl_copper_thickness" );
605 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowModelBoudingBoxes",
606 "render.opengl_show_model_bbox" );
607 ret &= fromLegacy<bool>( aCfg, "Render_RAY_AntiAliasing", "render.raytrace_anti_aliasing" );
608 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Backfloor", "render.raytrace_backfloor" );
609 ret &= fromLegacy<bool>( aCfg, "Render_RAY_PostProcess", "render.raytrace_post_processing" );
610 ret &= fromLegacy<bool>( aCfg, "Render_RAY_ProceduralTextures",
611 "render.raytrace_procedural_textures" );
612 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Reflections", "render.raytrace_reflections" );
613 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Refractions", "render.raytrace_refractions" );
614 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Shadows", "render.raytrace_shadows" );
615 ret &= fromLegacy<bool>( aCfg, "ShowRealisticMode", "render.realistic" );
616 ret &= fromLegacy<bool>( aCfg, "ShowAdhesiveLayers", "render.show_adhesive" );
617 ret &= fromLegacy<bool>( aCfg, "ShowNavigator", "render.show_navigator" );
618 ret &= fromLegacy<bool>( aCfg, "ShowBoardBody", "render.show_board_body" );
619 ret &= fromLegacy<bool>( aCfg, "ShowCommentsLayers", "render.show_comments" );
620 ret &= fromLegacy<bool>( aCfg, "ShowEcoLayers", "render.show_eco" );
621 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Insert", "render.show_footprints_insert" );
622 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Normal", "render.show_footprints_normal" );
623 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Virtual", "render.show_footprints_virtual" );
624 ret &= fromLegacy<bool>( aCfg, "ShowSilkScreenLayers", "render.show_silkscreen" );
625 ret &= fromLegacy<bool>( aCfg, "ShowSolderMasLayers", "render.show_soldermask" );
626 ret &= fromLegacy<bool>( aCfg, "ShowSolderPasteLayers", "render.show_solderpaste" );
627 ret &= fromLegacy<bool>( aCfg, "ShowZones", "render.show_zones" );
628 ret &= fromLegacy<bool>( aCfg, "SubtractMaskFromSilk", "render.subtract_mask_from_silk" );
629
630 auto do_color =
631 [&] ( const std::string& key_r, const std::string& key_g, const std::string& key_b,
632 std::string key_dest, double alpha = 1.0 )
633 {
634 COLOR4D color( 1, 1, 1, alpha );
635
636 if( aCfg->Read( key_r, &color.r )
637 && aCfg->Read( key_g, &color.g )
638 && aCfg->Read( key_b, &color.b ) )
639 {
640 Set( key_dest, color );
641 }
642 };
643
644 do_color( "BgColor_Red", "BgColor_Green", "BgColor_Blue", "colors.background_bottom" );
645 do_color( "BgColor_Red_Top", "BgColor_Green_Top", "BgColor_Blue_Top", "colors.background_top" );
646 do_color( "BoardBodyColor_Red", "BoardBodyColor_Green", "BoardBodyColor_Blue", "colors.board" );
647 do_color( "CopperColor_Red", "CopperColor_Green", "CopperColor_Blue", "colors.copper" );
648 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_bottom" );
649 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_top" );
650 do_color( "SMaskColor_Red", "SMaskColor_Green", "SMaskColor_Blue", "colors.soldermask", 0.83 );
651 do_color( "SPasteColor_Red", "SPasteColor_Green", "SPasteColor_Blue", "colors.solderpaste" );
652
653 return ret;
654}
declared enumerations and flags
@ NORMAL
Use all material properties from model file.
Definition 3d_enums.h:68
@ CAD_MODE
Use a gray shading based on diffuse material.
Definition 3d_enums.h:70
const char * name
APP_SETTINGS_BASE(const std::string &aFilename, int aSchemaVersion)
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.
EXPORT_IMAGE_SETTINGS m_ExportImage
LAYER_PRESET_3D * FindPreset(const wxString &aName)
std::vector< LAYER_PRESET_3D > m_LayerPresets
bool fromLegacy(wxConfigBase *aConfig, const std::string &aKey, const std::string &aDest)
Translates a legacy wxConfig value to a given JSON pointer value.
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::optional< ValueType > Get(const std::string &aPath) const
Fetches a value from within the JSON document.
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:101
double r
Red component.
Definition color4d.h:389
double g
Green component.
Definition color4d.h:390
double b
Blue component.
Definition color4d.h:391
Stores an enum as an integer.
Definition parameters.h:230
PARAM_LAMBDA(const std::string &aJsonPath, std::function< nlohmann::json()> aGetter, std::function< void(nlohmann::json)> aSetter, nlohmann::json aDefault, bool aReadOnly=false)
Definition parameters.h:299
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 LAYER(n, l)
#define LEGACY_PRESET_FLAG
nlohmann::json json
Definition gerbview.cpp:49
@ LAYER_3D_USER_1
Definition layer_ids.h:565
@ LAYER_3D_SOLDERMASK_TOP
Definition layer_ids.h:558
@ LAYER_3D_NAVIGATOR
Definition layer_ids.h:615
@ LAYER_3D_BOUNDING_BOXES
Definition layer_ids.h:616
@ LAYER_3D_ADHESIVE
Definition layer_ids.h:560
@ LAYER_3D_SMD_MODELS
Definition layer_ids.h:611
@ LAYER_3D_BACKGROUND_TOP
Definition layer_ids.h:551
@ LAYER_3D_USER_COMMENTS
Definition layer_ids.h:561
@ LAYER_3D_SOLDERMASK_BOTTOM
Definition layer_ids.h:557
@ LAYER_3D_BOARD
Definition layer_ids.h:552
@ LAYER_3D_PLATED_BARRELS
Definition layer_ids.h:618
@ LAYER_3D_USER_ECO1
Definition layer_ids.h:563
@ LAYER_3D_USER_ECO2
Definition layer_ids.h:564
@ LAYER_3D_TH_MODELS
Definition layer_ids.h:610
@ LAYER_3D_SILKSCREEN_TOP
Definition layer_ids.h:556
@ LAYER_3D_VIRTUAL_MODELS
Definition layer_ids.h:612
@ LAYER_3D_MODELS_MARKED_DNP
Definition layer_ids.h:614
@ LAYER_3D_COPPER_TOP
Definition layer_ids.h:553
@ LAYER_3D_SOLDERPASTE
Definition layer_ids.h:559
@ LAYER_3D_OFF_BOARD_SILK
Definition layer_ids.h:617
@ LAYER_3D_MODELS_NOT_IN_POS
Definition layer_ids.h:613
@ LAYER_3D_USER_45
Definition layer_ids.h:609
@ LAYER_3D_USER_DRAWINGS
Definition layer_ids.h:562
@ LAYER_3D_COPPER_BOTTOM
Definition layer_ids.h:554
@ LAYER_3D_BACKGROUND_BOTTOM
Definition layer_ids.h:550
@ LAYER_3D_SILKSCREEN_BOTTOM
Definition layer_ids.h:555
@ LAYER_3D_END
Definition layer_ids.h:620
@ LAYER_GRID_AXES
Definition layer_ids.h:251
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
Definition layer_ids.h:262
@ LAYER_FP_TEXT
Definition layer_ids.h:236
@ LAYER_FP_VALUES
Show footprints values (when texts are visible).
Definition layer_ids.h:259
STL namespace.
Declaration of the cogl_att_list class.
wxString name
A name for this layer set.
LAYER_PRESET_3D(const wxString &aName=wxEmptyString)
std::bitset< LAYER_3D_END > layers
std::map< int, KIGFX::COLOR4D > colors