243                                               COLOR4D( 0.0, 1.0, 0.0, 1.0 ) ) );
 
  247                                            &
m_Render.opengl_copper_thickness, 
false ) );
 
  249                                            &
m_Render.show_model_bbox, 
false ) );
 
  251                                            &
m_Render.show_off_board_silk, 
false ) );
 
  253                                            &
m_Render.highlight_on_rollover, 
true ) );
 
  255                                            &
m_Render.opengl_AA_disableOnMove, 
false ) );
 
  257                                            &
m_Render.opengl_thickness_disableOnMove, 
false ) );
 
  259                                            &
m_Render.opengl_microvias_disableOnMove, 
false ) );
 
  261                                            &
m_Render.opengl_holes_disableOnMove, 
false ) );
 
  263                                            &
m_Render.opengl_render_bbox_only_OnMove, 
false ) );
 
  267                                            &
m_Render.raytrace_anti_aliasing, 
true ) );
 
  269                                            &
m_Render.raytrace_backfloor, 
false ) );
 
  271                                            &
m_Render.raytrace_post_processing, 
true ) );
 
  273                                             &
m_Render.raytrace_procedural_textures, 
true ) );
 
  275                                            &
m_Render.raytrace_reflections, 
true ) );
 
  277                                            &
m_Render.raytrace_refractions, 
true ) );
 
  279                                            &
m_Render.raytrace_shadows, 
true ) );
 
  282                                           &
m_Render.raytrace_nrsamples_shadows, 3 ) );
 
  284                                           &
m_Render.raytrace_nrsamples_reflections, 3 ) );
 
  286                                           &
m_Render.raytrace_nrsamples_refractions, 4 ) );
 
  289                                           &
m_Render.raytrace_recursivelevel_reflections, 3 ) );
 
  291                                           &
m_Render.raytrace_recursivelevel_refractions, 2 ) );
 
  294                                             &
m_Render.raytrace_spread_shadows, 0.05f ) );
 
  296                                             &
m_Render.raytrace_spread_reflections, 0.025f ) );
 
  298                                             &
m_Render.raytrace_spread_refractions, 0.025f ) );
 
  301                                               &
m_Render.raytrace_lightColorCamera,
 
  302                                               COLOR4D( 0.2, 0.2, 0.2, 1.0 ) ) );
 
  306                                               COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
 
  309                                               &
m_Render.raytrace_lightColorBottom,
 
  310                                               COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
 
  312    std::vector<COLOR4D> default_colors =
 
  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 )
 
  326                                                    std::move( default_colors ) ) );
 
  328    const std::vector<int> default_elevation =
 
  330        67,  67,  67,  67, -67, -67, -67, -67,
 
  335                                                std::move( default_elevation ) ) );
 
  337    const std::vector<int> default_azimuth =
 
  339        45, 135, 225, 315, 45, 135, 225, 315,
 
  344                                                std::move( default_azimuth ) ) );
 
  351                                            &
m_Render.show_board_body, 
true ) );
 
  353                                            &
m_Render.show_plated_barrels, 
true ) );
 
  363    for( 
int layer = 0; layer < 45; ++layer )
 
  365        m_params.emplace_back( new PARAM<bool>( fmt::format( 
"render.show_user{}", layer + 1 ),
 
  366                                                &m_Render.show_user[layer], false ) );
 
  370                                            &
m_Render.show_footprints_insert, 
true ) );
 
  372                                            &
m_Render.show_footprints_normal, 
true ) );
 
  374                                            &
m_Render.show_footprints_virtual, 
true ) );
 
  376                                            &
m_Render.show_footprints_not_in_posfile, 
true ) );
 
  378                                            &
m_Render.show_footprints_dnp, 
false ) );
 
  380                                            &
m_Render.show_silkscreen_top, 
true ) );
 
  382                                            &
m_Render.show_silkscreen_bottom, 
true ) );
 
  384                                            &
m_Render.show_soldermask_top, 
true ) );
 
  386                                            &
m_Render.show_soldermask_bottom, 
true ) );
 
  388                                            &
m_Render.show_solderpaste, 
true ) );
 
  390                                            &
m_Render.show_copper_bottom, 
true ) );
 
  392                                            &
m_Render.show_copper_top, 
true ) );
 
  396                                            &
m_Render.show_fp_references, 
true ) );
 
  402                                            &
m_Render.subtract_mask_from_silk, 
false ) );
 
  404                                            &
m_Render.clip_silk_on_via_annuli, 
false ) );
 
  406                                            &
m_Render.differentiate_plated_copper, 
false ) );
 
  408                                            &
m_Render.use_board_editor_copper_colors, 
false ) );
 
  410                                            &
m_Render.preview_show_board_body, 
true ) );
 
  412                                            &
m_Camera.animation_enabled, 
true ) );
 
  414                                           &
m_Camera.moving_speed_multiplier, 3 ) );
 
  416                                              &
m_Camera.rotation_increment, 10.0 ) );
 
  432                Set( 
"render.opengl_copper_thickness", 
false );
 
  439                if( std::optional<bool> optval = 
Get<bool>( 
"render.show_copper" ) )
 
  441                    Set( 
"render.show_copper_top", *optval );
 
  442                    Set( 
"render.show_copper_bottom", *optval );
 
  445                if( std::optional<bool> optval = 
Get<bool>( 
"render.show_silkscreen" ) )
 
  447                    Set( 
"render.show_silkscreen_top", *optval );
 
  448                    Set( 
"render.show_silkscreen_bottom", *optval );
 
  451                if( std::optional<bool> optval = 
Get<bool>( 
"render.show_soldermask" ) )
 
  453                    Set( 
"render.show_soldermask_top", *optval );
 
  454                    Set( 
"render.show_soldermask_bottom", *optval );
 
  457                if( std::optional<bool> optval = 
Get<bool>( 
"render.show_comments" ) )
 
  458                    Set( 
"render.show_drawings", *optval );
 
  460                if( std::optional<bool> optval = 
Get<bool>( 
"render.show_eco" ) )
 
  462                    Set( 
"render.show_eco1", *optval );
 
  463                    Set( 
"render.show_eco2", *optval );
 
  472                std::map<int, wxString> legacyColorMap;
 
  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";
 
  501                if( !
Contains( 
"layer_presets" ) || !
At( 
"layer_presets" ).is_array() )
 
  504                for( nlohmann::json& preset : 
At( 
"layer_presets" ) )
 
  506                    if( preset.contains( 
"colors" ) && preset.at( 
"colors" ).is_array() )
 
  508                        for( nlohmann::json& 
color : preset.at( 
"colors" ) )
 
  510                            if( 
color.contains( 
"layer" ) && 
color.at( 
"layer" ).is_number_integer() )
 
  511                                color[
"layer"] = legacyColorMap[
color[
"layer"].get<
int>()];
 
  515                    if( preset.contains( 
"layers" ) && preset.at( 
"layers" ).is_array() )
 
  517                        nlohmann::json mappedLayers = nlohmann::json::array();
 
  519                        for( 
const nlohmann::json& layer : preset.at( 
"layers" ) )
 
  521                            if( layer.is_number_integer() )
 
  522                                mappedLayers.push_back( legacyColorMap[layer.get<
int>()] );
 
  525                        preset[
"layers"] = mappedLayers;