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,
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",
214 &m_AuiPanels.show_layer_manager, true ) );
215
216 m_params.emplace_back( new PARAM<int>( "aui.right_panel_width",
217 &m_AuiPanels.right_panel_width, -1 ) );
218
219 m_params.emplace_back( new PARAM_ENUM<RENDER_ENGINE>( "render.engine", &m_Render.engine,
223
224 m_params.emplace_back( new PARAM_ENUM<GRID3D_TYPE>( "render.grid_type", &m_Render.grid_type,
228
229 m_params.emplace_back( new PARAM_ENUM<MATERIAL_MODE>( "render.material_mode",
230 &m_Render.material_mode,
234
235 m_params.emplace_back( new PARAM_ENUM<ANTIALIASING_MODE>( "render.opengl_AA_mode",
236 &m_Render.opengl_AA_mode,
240
241 m_params.emplace_back( new PARAM<COLOR4D>( "render.opengl_selection_color",
242 &m_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",
247 &m_Render.opengl_copper_thickness, false ) );
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",
253 &m_Render.highlight_on_rollover, true ) );
254 m_params.emplace_back( new PARAM<bool>( "render.opengl_AA_disableOnMove",
255 &m_Render.opengl_AA_disableOnMove, false ) );
256 m_params.emplace_back( new PARAM<bool>( "render.opengl_thickness_disableOnMove",
257 &m_Render.opengl_thickness_disableOnMove, false ) );
258 m_params.emplace_back( new PARAM<bool>( "render.opengl_vias_disableOnMove",
259 &m_Render.opengl_microvias_disableOnMove, false ) );
260 m_params.emplace_back( new PARAM<bool>( "render.opengl_holes_disableOnMove",
261 &m_Render.opengl_holes_disableOnMove, false ) );
262 m_params.emplace_back( new PARAM<bool>( "render.opengl_render_bbox_only_OnMove",
263 &m_Render.opengl_render_bbox_only_OnMove, false ) );
264
265 // Raytracing options
266 m_params.emplace_back( new PARAM<bool>( "render.raytrace_anti_aliasing",
267 &m_Render.raytrace_anti_aliasing, true ) );
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",
271 &m_Render.raytrace_post_processing, true ) );
272 m_params.emplace_back( new PARAM<bool>( "render.raytrace_procedural_textures",
273 &m_Render.raytrace_procedural_textures, true ) );
274 m_params.emplace_back( new PARAM<bool>( "render.raytrace_reflections",
275 &m_Render.raytrace_reflections, true ) );
276 m_params.emplace_back( new PARAM<bool>( "render.raytrace_refractions",
277 &m_Render.raytrace_refractions, true ) );
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",
282 &m_Render.raytrace_nrsamples_shadows, 3 ) );
283 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_reflections",
284 &m_Render.raytrace_nrsamples_reflections, 3 ) );
285 m_params.emplace_back( new PARAM<int>( "render.raytrace_nrsamples_refractions",
286 &m_Render.raytrace_nrsamples_refractions, 4 ) );
287
288 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_reflections",
289 &m_Render.raytrace_recursivelevel_reflections, 3 ) );
290 m_params.emplace_back( new PARAM<int>( "render.raytrace_recursivelevel_refractions",
291 &m_Render.raytrace_recursivelevel_refractions, 2 ) );
292
293 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_shadows",
294 &m_Render.raytrace_spread_shadows, 0.05f ) );
295 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_reflections",
296 &m_Render.raytrace_spread_reflections, 0.025f ) );
297 m_params.emplace_back( new PARAM<float>( "render.raytrace_spread_refractions",
298 &m_Render.raytrace_spread_refractions, 0.025f ) );
299
300 m_params.emplace_back( new PARAM<COLOR4D>( "render.raytrace_lightColorCamera",
301 &m_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",
305 &m_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",
309 &m_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",
325 &m_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",
334 &m_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",
343 &m_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",
370 &m_Render.show_footprints_insert, true ) );
371 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_normal",
372 &m_Render.show_footprints_normal, true ) );
373 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_virtual",
374 &m_Render.show_footprints_virtual, true ) );
375 m_params.emplace_back( new PARAM<bool>( "render.show_footprints_not_in_posfile",
376 &m_Render.show_footprints_not_in_posfile, true ) );
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",
382 &m_Render.show_silkscreen_bottom, true ) );
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",
386 &m_Render.show_soldermask_bottom, true ) );
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",
402 &m_Render.subtract_mask_from_silk, false ) );
403 m_params.emplace_back( new PARAM<bool>( "render.clip_silk_on_via_annulus",
404 &m_Render.clip_silk_on_via_annuli, false ) );
405 m_params.emplace_back( new PARAM<bool>( "render.plated_and_bare_copper",
406 &m_Render.differentiate_plated_copper, false ) );
407 m_params.emplace_back( new PARAM<bool>( "render.use_board_editor_copper_colors",
408 &m_Render.use_board_editor_copper_colors, false ) );
409 m_params.emplace_back( new PARAM<bool>( "render.preview_show_board_body",
410 &m_Render.preview_show_board_body, true ) );
411 m_params.emplace_back( new PARAM<bool>( "render.show_missing_models", &m_Render.show_missing_models, false ) );
412 m_params.emplace_back( new PARAM<bool>( "camera.animation_enabled",
413 &m_Camera.animation_enabled, true ) );
414 m_params.emplace_back( new PARAM<int>( "camera.moving_speed_multiplier",
415 &m_Camera.moving_speed_multiplier, 3 ) );
416 m_params.emplace_back( new PARAM<double>( "camera.rotation_increment",
417 &m_Camera.rotation_increment, 10.0 ) );
418 m_params.emplace_back( new PARAM<int>( "camera.projection_mode",
419 &m_Camera.projection_mode, 1 ) );
420
421 m_params.emplace_back( new PARAM<int>( "export_image.width", &m_ExportImage.width, 0 ) );
422 m_params.emplace_back( new PARAM<int>( "export_image.height", &m_ExportImage.height, 0 ) );
423 m_params.emplace_back( new PARAM<double>( "export_image.x_resolution", &m_ExportImage.x_resolution, 300.0 ) );
424 m_params.emplace_back( new PARAM<double>( "export_image.y_resolution", &m_ExportImage.y_resolution, 300.0 ) );
425 m_params.emplace_back( new PARAM<int>( "export_image.size_units", &m_ExportImage.size_units, 0 ) );
426 m_params.emplace_back( new PARAM<int>( "export_image.resolution_units", &m_ExportImage.resolution_units, 0 ) );
427 m_params.emplace_back(
428 new PARAM<bool>( "export_image.lock_aspect_ratio", &m_ExportImage.lock_aspect_ratio, true ) );
429
430 m_params.emplace_back( new PARAM<bool>( "use_stackup_colors",
431 &m_UseStackupColors, true ) );
432 m_params.emplace_back( new PARAM_LAYER_PRESET_3D( "layer_presets",
433 &m_LayerPresets ) );
434 m_params.emplace_back( new PARAM<wxString>( "current_layer_preset",
436
438
439 registerMigration( 1, 2,
440 [&]() -> bool
441 {
442 Set( "render.opengl_copper_thickness", false );
443 return true;
444 } );
445
446 registerMigration( 2, 3,
447 [&]() -> bool
448 {
449 if( std::optional<bool> optval = Get<bool>( "render.show_copper" ) )
450 {
451 Set( "render.show_copper_top", *optval );
452 Set( "render.show_copper_bottom", *optval );
453 }
454
455 if( std::optional<bool> optval = Get<bool>( "render.show_silkscreen" ) )
456 {
457 Set( "render.show_silkscreen_top", *optval );
458 Set( "render.show_silkscreen_bottom", *optval );
459 }
460
461 if( std::optional<bool> optval = Get<bool>( "render.show_soldermask" ) )
462 {
463 Set( "render.show_soldermask_top", *optval );
464 Set( "render.show_soldermask_bottom", *optval );
465 }
466
467 if( std::optional<bool> optval = Get<bool>( "render.show_comments" ) )
468 Set( "render.show_drawings", *optval );
469
470 if( std::optional<bool> optval = Get<bool>( "render.show_eco" ) )
471 {
472 Set( "render.show_eco1", *optval );
473 Set( "render.show_eco2", *optval );
474 }
475
476 return true;
477 } );
478
479 registerMigration( 3, 4,
480 [&]() -> bool
481 {
482 std::map<int, wxString> legacyColorMap;
483
484 legacyColorMap[142] = "fp_values";
485 legacyColorMap[143] = "fp_references";
486 legacyColorMap[130] = "fp_text";
487 legacyColorMap[466] = "background_bottom";
488 legacyColorMap[467] = "background_top";
489 legacyColorMap[468] = "board";
490 legacyColorMap[469] = "copper";
491 legacyColorMap[470] = "copper_bottom";
492 legacyColorMap[471] = "silkscreen_bottom";
493 legacyColorMap[472] = "silkscreen_top";
494 legacyColorMap[473] = "soldermask_bottom";
495 legacyColorMap[474] = "soldermask_top";
496 legacyColorMap[475] = "solderpaste";
497 legacyColorMap[476] = "adhesive";
498 legacyColorMap[477] = "user_comments";
499 legacyColorMap[478] = "user_drawings";
500 legacyColorMap[479] = "user_eco1";
501 legacyColorMap[480] = "user_eco2";
502 legacyColorMap[481] = "th_models";
503 legacyColorMap[482] = "smd_models";
504 legacyColorMap[483] = "virtual_models";
505 legacyColorMap[484] = "non_pos_file_models";
506 legacyColorMap[485] = "dnp_models";
507 legacyColorMap[486] = "3d_navigator";
508 legacyColorMap[487] = "bounding_boxes";
509 legacyColorMap[488] = "off_board_silk";
510
511 if( !Contains( "layer_presets" ) || !At( "layer_presets" ).is_array() )
512 return true;
513
514 for( nlohmann::json& preset : At( "layer_presets" ) )
515 {
516 if( preset.contains( "colors" ) && preset.at( "colors" ).is_array() )
517 {
518 for( nlohmann::json& color : preset.at( "colors" ) )
519 {
520 if( color.contains( "layer" ) && color.at( "layer" ).is_number_integer() )
521 color["layer"] = legacyColorMap[color["layer"].get<int>()];
522 }
523 }
524
525 if( preset.contains( "layers" ) && preset.at( "layers" ).is_array() )
526 {
527 nlohmann::json mappedLayers = nlohmann::json::array();
528
529 for( const nlohmann::json& layer : preset.at( "layers" ) )
530 {
531 if( layer.is_number_integer() )
532 mappedLayers.push_back( legacyColorMap[layer.get<int>()] );
533 }
534
535 preset["layers"] = mappedLayers;
536 }
537 }
538
539 return true;
540 } );
541}
542
543
545{
546 for( LAYER_PRESET_3D& preset : m_LayerPresets )
547 {
548 if( preset.name == aName )
549 return &preset;
550 }
551
552 return nullptr;
553}
554
555
557{
563 try
564 {
565 if( m_internals->contains( "colors" ) )
566 m_internals->erase( "colors" );
567 }
568 catch( ... )
569 {
570 }
571
572 return true;
573}
574
575
577{
578 bool ret = APP_SETTINGS_BASE::MigrateFromLegacy( aCfg );
579
580 ret &= fromLegacy<int>( aCfg, "RenderEngine", "render.engine" );
581 ret &= fromLegacy<int>( aCfg, "ShowGrid3D", "render.grid_type" );
582 ret &= fromLegacy<int>( aCfg, "Render_Material", "render.material_mode" );
583 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowCopperThickness",
584 "render.opengl_copper_thickness" );
585 ret &= fromLegacy<bool>( aCfg, "Render_OGL_ShowModelBoudingBoxes",
586 "render.opengl_show_model_bbox" );
587 ret &= fromLegacy<bool>( aCfg, "Render_RAY_AntiAliasing", "render.raytrace_anti_aliasing" );
588 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Backfloor", "render.raytrace_backfloor" );
589 ret &= fromLegacy<bool>( aCfg, "Render_RAY_PostProcess", "render.raytrace_post_processing" );
590 ret &= fromLegacy<bool>( aCfg, "Render_RAY_ProceduralTextures",
591 "render.raytrace_procedural_textures" );
592 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Reflections", "render.raytrace_reflections" );
593 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Refractions", "render.raytrace_refractions" );
594 ret &= fromLegacy<bool>( aCfg, "Render_RAY_Shadows", "render.raytrace_shadows" );
595 ret &= fromLegacy<bool>( aCfg, "ShowRealisticMode", "render.realistic" );
596 ret &= fromLegacy<bool>( aCfg, "ShowAdhesiveLayers", "render.show_adhesive" );
597 ret &= fromLegacy<bool>( aCfg, "ShowNavigator", "render.show_navigator" );
598 ret &= fromLegacy<bool>( aCfg, "ShowBoardBody", "render.show_board_body" );
599 ret &= fromLegacy<bool>( aCfg, "ShowCommentsLayers", "render.show_comments" );
600 ret &= fromLegacy<bool>( aCfg, "ShowEcoLayers", "render.show_eco" );
601 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Insert", "render.show_footprints_insert" );
602 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Normal", "render.show_footprints_normal" );
603 ret &= fromLegacy<bool>( aCfg, "ShowFootprints_Virtual", "render.show_footprints_virtual" );
604 ret &= fromLegacy<bool>( aCfg, "ShowSilkScreenLayers", "render.show_silkscreen" );
605 ret &= fromLegacy<bool>( aCfg, "ShowSolderMasLayers", "render.show_soldermask" );
606 ret &= fromLegacy<bool>( aCfg, "ShowSolderPasteLayers", "render.show_solderpaste" );
607 ret &= fromLegacy<bool>( aCfg, "ShowZones", "render.show_zones" );
608 ret &= fromLegacy<bool>( aCfg, "SubtractMaskFromSilk", "render.subtract_mask_from_silk" );
609
610 auto do_color =
611 [&] ( const std::string& key_r, const std::string& key_g, const std::string& key_b,
612 std::string key_dest, double alpha = 1.0 )
613 {
614 COLOR4D color( 1, 1, 1, alpha );
615
616 if( aCfg->Read( key_r, &color.r )
617 && aCfg->Read( key_g, &color.g )
618 && aCfg->Read( key_b, &color.b ) )
619 {
620 Set( key_dest, color );
621 }
622 };
623
624 do_color( "BgColor_Red", "BgColor_Green", "BgColor_Blue", "colors.background_bottom" );
625 do_color( "BgColor_Red_Top", "BgColor_Green_Top", "BgColor_Blue_Top", "colors.background_top" );
626 do_color( "BoardBodyColor_Red", "BoardBodyColor_Green", "BoardBodyColor_Blue", "colors.board" );
627 do_color( "CopperColor_Red", "CopperColor_Green", "CopperColor_Blue", "colors.copper" );
628 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_bottom" );
629 do_color( "SilkColor_Red", "SilkColor_Green", "SilkColor_Blue", "colors.silkscreen_top" );
630 do_color( "SMaskColor_Red", "SMaskColor_Green", "SMaskColor_Blue", "colors.soldermask", 0.83 );
631 do_color( "SPasteColor_Red", "SPasteColor_Green", "SPasteColor_Blue", "colors.solderpaste" );
632
633 return ret;
634}
declared enumerations and flags
@ NORMAL
Use all material properties from model file.
Definition 3d_enums.h:72
@ CAD_MODE
Use a gray shading based on diffuse material.
Definition 3d_enums.h:74
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:105
double r
Red component.
Definition color4d.h:393
double g
Green component.
Definition color4d.h:394
double b
Blue component.
Definition color4d.h:395
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:53
@ LAYER_3D_SOLDERMASK_TOP
Definition layer_ids.h:562
@ LAYER_3D_NAVIGATOR
Definition layer_ids.h:619
@ LAYER_3D_BOUNDING_BOXES
Definition layer_ids.h:620
@ LAYER_3D_ADHESIVE
Definition layer_ids.h:564
@ LAYER_3D_SMD_MODELS
Definition layer_ids.h:615
@ LAYER_3D_BACKGROUND_TOP
Definition layer_ids.h:555
@ LAYER_3D_USER_COMMENTS
Definition layer_ids.h:565
@ LAYER_3D_SOLDERMASK_BOTTOM
Definition layer_ids.h:561
@ LAYER_3D_BOARD
Definition layer_ids.h:556
@ LAYER_3D_PLATED_BARRELS
Definition layer_ids.h:622
@ LAYER_3D_USER_ECO1
Definition layer_ids.h:567
@ LAYER_3D_USER_ECO2
Definition layer_ids.h:568
@ LAYER_3D_TH_MODELS
Definition layer_ids.h:614
@ LAYER_3D_SILKSCREEN_TOP
Definition layer_ids.h:560
@ LAYER_3D_VIRTUAL_MODELS
Definition layer_ids.h:616
@ LAYER_3D_MODELS_MARKED_DNP
Definition layer_ids.h:618
@ LAYER_3D_COPPER_TOP
Definition layer_ids.h:557
@ LAYER_3D_SOLDERPASTE
Definition layer_ids.h:563
@ LAYER_3D_OFF_BOARD_SILK
Definition layer_ids.h:621
@ LAYER_3D_MODELS_NOT_IN_POS
Definition layer_ids.h:617
@ LAYER_3D_USER_DRAWINGS
Definition layer_ids.h:566
@ LAYER_3D_COPPER_BOTTOM
Definition layer_ids.h:558
@ LAYER_3D_BACKGROUND_BOTTOM
Definition layer_ids.h:554
@ LAYER_3D_SILKSCREEN_BOTTOM
Definition layer_ids.h:559
@ LAYER_3D_END
Definition layer_ids.h:624
@ LAYER_GRID_AXES
Definition layer_ids.h:255
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
Definition layer_ids.h:266
@ LAYER_FP_TEXT
Definition layer_ids.h:240
@ LAYER_FP_VALUES
Show footprints values (when texts are visible).
Definition layer_ids.h:263
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