22#include <fmt/format.h>
34using namespace std::placeholders;
79 std::vector<LAYER_PRESET_3D>* aPresetList ) :
84 m_presets( aPresetList )
86 wxASSERT( aPresetList );
88#define LAYER( n, l ) m_layerToLayerNameMap[l] = n; m_layerNameToLayerMap[n] = l;
122 nlohmann::json ret = nlohmann::json::array();
126 nlohmann::json js = {
127 {
"name", preset.name }
130 nlohmann::json layers = nlohmann::json::array();
134 if( preset.layers.test( layer ) )
138 js[
"layers"] = layers;
140 nlohmann::json colors = nlohmann::json::array();
142 for(
const auto& [ layer,
color ] : preset.colors )
144 nlohmann::json layerColor = {
146 {
"color",
color.ToCSSString() }
149 colors.push_back( layerColor );
152 js[
"colors"] = colors;
163 if( aJson.empty() || !aJson.is_array() )
168 for(
const nlohmann::json& preset : aJson )
170 if( preset.contains(
"name" ) )
174 if( preset.contains(
"layers" ) && preset.at(
"layers" ).is_array() )
178 for(
const nlohmann::json& layer : preset.at(
"layers" ) )
180 if( layer.is_string() )
185 if( preset.contains(
"colors" ) && preset.at(
"colors" ).is_array() )
187 for(
const nlohmann::json& entry : preset.at(
"colors" ) )
189 if( entry.contains(
"layer" ) && entry.contains(
"color" )
190 && entry.at(
"layer" ).is_string() )
220 RENDER_ENGINE::OPENGL,
221 RENDER_ENGINE::OPENGL,
222 RENDER_ENGINE::RAYTRACING ) );
227 GRID3D_TYPE::GRID_10MM ) );
231 MATERIAL_MODE::NORMAL,
232 MATERIAL_MODE::NORMAL,
233 MATERIAL_MODE::CAD_MODE ) );
237 ANTIALIASING_MODE::AA_8X,
238 ANTIALIASING_MODE::AA_NONE,
239 ANTIALIASING_MODE::AA_8X ) );
243 COLOR4D( 0.0, 1.0, 0.0, 1.0 ) ) );
302 COLOR4D( 0.2, 0.2, 0.2, 1.0 ) ) );
306 COLOR4D( 0.247, 0.247, 0.247, 1.0 ) ) );
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 ) ) );
363 for(
int layer = 0; layer < 45; ++layer )
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;
538 if( preset.name == aName )
570 ret &= fromLegacy<int>( aCfg,
"RenderEngine",
"render.engine" );
571 ret &= fromLegacy<int>( aCfg,
"ShowGrid3D",
"render.grid_type" );
572 ret &= fromLegacy<int>( aCfg,
"Render_Material",
"render.material_mode" );
573 ret &= fromLegacy<bool>( aCfg,
"Render_OGL_ShowCopperThickness",
574 "render.opengl_copper_thickness" );
575 ret &= fromLegacy<bool>( aCfg,
"Render_OGL_ShowModelBoudingBoxes",
576 "render.opengl_show_model_bbox" );
577 ret &= fromLegacy<bool>( aCfg,
"Render_RAY_AntiAliasing",
"render.raytrace_anti_aliasing" );
578 ret &= fromLegacy<bool>( aCfg,
"Render_RAY_Backfloor",
"render.raytrace_backfloor" );
579 ret &= fromLegacy<bool>( aCfg,
"Render_RAY_PostProcess",
"render.raytrace_post_processing" );
580 ret &= fromLegacy<bool>( aCfg,
"Render_RAY_ProceduralTextures",
581 "render.raytrace_procedural_textures" );
582 ret &= fromLegacy<bool>( aCfg,
"Render_RAY_Reflections",
"render.raytrace_reflections" );
583 ret &= fromLegacy<bool>( aCfg,
"Render_RAY_Refractions",
"render.raytrace_refractions" );
584 ret &= fromLegacy<bool>( aCfg,
"Render_RAY_Shadows",
"render.raytrace_shadows" );
585 ret &= fromLegacy<bool>( aCfg,
"ShowRealisticMode",
"render.realistic" );
586 ret &= fromLegacy<bool>( aCfg,
"ShowAdhesiveLayers",
"render.show_adhesive" );
587 ret &= fromLegacy<bool>( aCfg,
"ShowNavigator",
"render.show_navigator" );
588 ret &= fromLegacy<bool>( aCfg,
"ShowBoardBody",
"render.show_board_body" );
589 ret &= fromLegacy<bool>( aCfg,
"ShowCommentsLayers",
"render.show_comments" );
590 ret &= fromLegacy<bool>( aCfg,
"ShowEcoLayers",
"render.show_eco" );
591 ret &= fromLegacy<bool>( aCfg,
"ShowFootprints_Insert",
"render.show_footprints_insert" );
592 ret &= fromLegacy<bool>( aCfg,
"ShowFootprints_Normal",
"render.show_footprints_normal" );
593 ret &= fromLegacy<bool>( aCfg,
"ShowFootprints_Virtual",
"render.show_footprints_virtual" );
594 ret &= fromLegacy<bool>( aCfg,
"ShowSilkScreenLayers",
"render.show_silkscreen" );
595 ret &= fromLegacy<bool>( aCfg,
"ShowSolderMasLayers",
"render.show_soldermask" );
596 ret &= fromLegacy<bool>( aCfg,
"ShowSolderPasteLayers",
"render.show_solderpaste" );
597 ret &= fromLegacy<bool>( aCfg,
"ShowZones",
"render.show_zones" );
598 ret &= fromLegacy<bool>( aCfg,
"SubtractMaskFromSilk",
"render.subtract_mask_from_silk" );
601 [&] (
const std::string& key_r,
const std::string& key_g,
const std::string& key_b,
602 std::string key_dest,
double alpha = 1.0 )
606 if( aCfg->Read( key_r, &
color.r )
607 && aCfg->Read( key_g, &
color.g )
608 && aCfg->Read( key_b, &
color.b ) )
614 do_color(
"BgColor_Red",
"BgColor_Green",
"BgColor_Blue",
"colors.background_bottom" );
615 do_color(
"BgColor_Red_Top",
"BgColor_Green_Top",
"BgColor_Blue_Top",
"colors.background_top" );
616 do_color(
"BoardBodyColor_Red",
"BoardBodyColor_Green",
"BoardBodyColor_Blue",
"colors.board" );
617 do_color(
"CopperColor_Red",
"CopperColor_Green",
"CopperColor_Blue",
"colors.copper" );
618 do_color(
"SilkColor_Red",
"SilkColor_Green",
"SilkColor_Blue",
"colors.silkscreen_bottom" );
619 do_color(
"SilkColor_Red",
"SilkColor_Green",
"SilkColor_Blue",
"colors.silkscreen_top" );
620 do_color(
"SMaskColor_Red",
"SMaskColor_Green",
"SMaskColor_Blue",
"colors.soldermask", 0.83 );
621 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_PLATED_BARRELS
@ 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
bool opengl_microvias_disableOnMove
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
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.