22#include <fmt/format.h>
34using namespace std::placeholders;
77 std::vector<LAYER_PRESET_3D>* aPresetList ) :
82 m_presets( aPresetList )
84 wxASSERT( aPresetList );
86#define LAYER( n, l ) m_layerToLayerNameMap[l] = n; m_layerNameToLayerMap[n] = l;
119 nlohmann::json ret = nlohmann::json::array();
123 nlohmann::json js = {
124 {
"name", preset.name }
127 nlohmann::json layers = nlohmann::json::array();
131 if( preset.layers.test( layer ) )
135 js[
"layers"] = layers;
137 nlohmann::json colors = nlohmann::json::array();
139 for(
const auto& [ layer,
color ] : preset.colors )
141 nlohmann::json layerColor = {
143 {
"color",
color.ToCSSString() }
146 colors.push_back( layerColor );
149 js[
"colors"] = colors;
160 if( aJson.empty() || !aJson.is_array() )
165 for(
const nlohmann::json& preset : aJson )
167 if( preset.contains(
"name" ) )
171 if( preset.contains(
"layers" ) && preset.at(
"layers" ).is_array() )
175 for(
const nlohmann::json& layer : preset.at(
"layers" ) )
177 if( layer.is_string() )
182 if( preset.contains(
"colors" ) && preset.at(
"colors" ).is_array() )
184 for(
const nlohmann::json& entry : preset.at(
"colors" ) )
186 if( entry.contains(
"layer" ) && entry.contains(
"color" )
187 && entry.at(
"layer" ).is_string() )
217 RENDER_ENGINE::OPENGL,
218 RENDER_ENGINE::OPENGL,
219 RENDER_ENGINE::RAYTRACING ) );
224 GRID3D_TYPE::GRID_10MM ) );
228 MATERIAL_MODE::NORMAL,
229 MATERIAL_MODE::NORMAL,
230 MATERIAL_MODE::CAD_MODE ) );
234 ANTIALIASING_MODE::AA_8X,
235 ANTIALIASING_MODE::AA_NONE,
236 ANTIALIASING_MODE::AA_8X ) );
240 COLOR4D( 0.0, 1.0, 0.0, 1.0 ) ) );
299 COLOR4D( 0.2, 0.2, 0.2, 1.0 ) ) );
303 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
307 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
309 std::vector<COLOR4D> default_colors =
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 )
325 const std::vector<int> default_elevation =
327 67, 67, 67, 67, -67, -67, -67, -67,
332 default_elevation ) );
334 const std::vector<int> default_azimuth =
336 45, 135, 225, 315, 45, 135, 225, 315,
358 for(
int layer = 0; layer < 45; ++layer )
427 Set(
"render.opengl_copper_thickness",
false );
434 if( std::optional<bool> optval = Get<bool>(
"render.show_copper" ) )
436 Set(
"render.show_copper_top", *optval );
437 Set(
"render.show_copper_bottom", *optval );
440 if( std::optional<bool> optval = Get<bool>(
"render.show_silkscreen" ) )
442 Set(
"render.show_silkscreen_top", *optval );
443 Set(
"render.show_silkscreen_bottom", *optval );
446 if( std::optional<bool> optval = Get<bool>(
"render.show_soldermask" ) )
448 Set(
"render.show_soldermask_top", *optval );
449 Set(
"render.show_soldermask_bottom", *optval );
452 if( std::optional<bool> optval = Get<bool>(
"render.show_comments" ) )
453 Set(
"render.show_drawings", *optval );
455 if( std::optional<bool> optval = Get<bool>(
"render.show_eco" ) )
457 Set(
"render.show_eco1", *optval );
458 Set(
"render.show_eco2", *optval );
467 std::map<int, wxString> legacyColorMap;
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";
496 if( !
Contains(
"layer_presets" ) || !
At(
"layer_presets" ).is_array() )
499 for( nlohmann::json& preset :
At(
"layer_presets" ) )
501 if( preset.contains(
"colors" ) && preset.at(
"colors" ).is_array() )
503 for( nlohmann::json& color : preset.at(
"colors" ) )
505 if( color.contains(
"layer" ) && color.at(
"layer" ).is_number_integer() )
506 color[
"layer"] = legacyColorMap[color[
"layer"].get<int>()];
510 if( preset.contains(
"layers" ) && preset.at(
"layers" ).is_array() )
512 nlohmann::json mappedLayers = nlohmann::json::array();
514 for( const nlohmann::json& layer : preset.at(
"layers" ) )
516 if( layer.is_number_integer() )
517 mappedLayers.push_back( legacyColorMap[layer.get<int>()] );
520 preset[
"layers"] = mappedLayers;
533 if( preset.name == aName )
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" );
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 )
601 if( aCfg->Read( key_r, &
color.r )
602 && aCfg->Read( key_g, &
color.g )
603 && aCfg->Read( key_b, &
color.b ) )
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" );
declared enumerations and flags
APP_SETTINGS_BASE is a settings class that should be derived for each standalone KiCad application.
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.
Stores an enum as an integer.
Like a normal param, but with custom getter and setter functions.
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
nlohmann::json presetsToJson()
std::map< wxString, int > m_layerNameToLayerMap
const int viewer3dSchemaVersion
! Update the schema version whenever a migration is required
#define LEGACY_PRESET_FLAG
@ LAYER_3D_SOLDERMASK_TOP
@ LAYER_3D_BOUNDING_BOXES
@ LAYER_3D_BACKGROUND_TOP
@ LAYER_3D_SOLDERMASK_BOTTOM
@ LAYER_3D_SILKSCREEN_TOP
@ LAYER_3D_VIRTUAL_MODELS
@ LAYER_3D_MODELS_MARKED_DNP
@ LAYER_3D_OFF_BOARD_SILK
@ LAYER_3D_MODELS_NOT_IN_POS
@ LAYER_3D_BACKGROUND_BOTTOM
@ LAYER_3D_SILKSCREEN_BOTTOM
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
@ LAYER_FP_VALUES
Show footprints values (when texts are visible).
Declaration of the cogl_att_list class.
double rotation_increment
int moving_speed_multiplier
bool opengl_thickness_disableOnMove
bool opengl_copper_thickness
bool opengl_render_bbox_only_OnMove
std::vector< int > raytrace_lightElevation
bool show_footprints_normal
bool use_board_editor_copper_colors
bool preview_show_board_body
MATERIAL_MODE material_mode
KIGFX::COLOR4D raytrace_lightColorCamera
ANTIALIASING_MODE opengl_AA_mode
bool raytrace_post_processing
std::vector< KIGFX::COLOR4D > raytrace_lightColor
KIGFX::COLOR4D raytrace_lightColorBottom
float raytrace_spread_shadows
KIGFX::COLOR4D opengl_selection_color
bool clip_silk_on_via_annuli
bool raytrace_reflections
bool show_footprints_virtual
float raytrace_spread_reflections
int raytrace_nrsamples_shadows
bool differentiate_plated_copper
bool show_silkscreen_bottom
std::vector< int > raytrace_lightAzimuth
int raytrace_nrsamples_reflections
bool subtract_mask_from_silk
bool raytrace_refractions
bool show_footprints_not_in_posfile
int raytrace_recursivelevel_reflections
int raytrace_nrsamples_refractions
bool highlight_on_rollover
bool raytrace_procedural_textures
bool show_footprints_insert
int raytrace_recursivelevel_refractions
bool show_soldermask_bottom
KIGFX::COLOR4D raytrace_lightColorTop
float raytrace_spread_refractions
bool opengl_holes_disableOnMove
bool raytrace_anti_aliasing
bool opengl_AA_disableOnMove
bool opengl_vias_disableOnMove
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.