28using namespace std::placeholders;
32 std::vector<LAYER_PRESET>* aPresetList ) :
37 m_presets( aPresetList )
39 wxASSERT( aPresetList );
45 nlohmann::json ret = nlohmann::json::array();
50 {
"name", preset.name },
51 {
"activeLayer", preset.activeLayer },
52 {
"flipBoard", preset.flipBoard }
55 nlohmann::json layers = nlohmann::json::array();
58 layers.push_back(
static_cast<int>( layer ) );
60 js[
"layers"] = layers;
62 nlohmann::json renderLayers = nlohmann::json::array();
70 js[
"renderLayers"] = renderLayers;
81 if( aJson.empty() || !aJson.is_array() )
86 for(
const nlohmann::json& preset : aJson )
88 if( preset.contains(
"name" ) )
92 if( preset.contains(
"flipBoard" ) && preset.at(
"flipBoard" ).is_boolean() )
94 p.
flipBoard = preset.at(
"flipBoard" ).get<
bool>();
97 if( preset.contains(
"activeLayer" ) && preset.at(
"activeLayer" ).is_number_integer() )
99 int active = preset.at(
"activeLayer" ).get<
int>();
105 if( preset.contains(
"layers" ) && preset.at(
"layers" ).is_array() )
109 for(
const nlohmann::json& layer : preset.at(
"layers" ) )
111 if( layer.is_number_integer() )
113 int layerNum = layer.get<
int>();
121 if( preset.contains(
"renderLayers" ) && preset.at(
"renderLayers" ).is_array() )
125 for(
const nlohmann::json& layer : preset.at(
"renderLayers" ) )
127 if( layer.is_string() )
129 std::string vs = layer.get<std::string>();
145 if( !aJson.is_object() || !aJson.contains(
"layers" ) )
148 std::vector<int> newLayers;
150 for(
const nlohmann::json& layer : aJson.at(
"layers" ) )
152 wxCHECK2( layer.is_number_integer(),
continue );
156 aJson[
"layers"] = newLayers;
158 if( aJson.contains(
"activeLayer" ) )
165 static constexpr int V8_GAL_LAYER_ID_START = 125;
167 if( !aJson.is_object() || !aJson.contains(
"renderLayers" ) )
170 std::vector<std::string> newLayers;
172 for(
const nlohmann::json& layer : aJson.at(
"renderLayers" ) )
174 wxCHECK2( layer.is_number_integer(),
continue );
181 aJson[
"renderLayers"] = newLayers;
190 m_viewports( aViewportList )
192 wxASSERT( aViewportList );
198 nlohmann::json ret = nlohmann::json::array();
202 nlohmann::json js = {
203 {
"name", viewport.name },
204 {
"x", viewport.rect.GetX() },
205 {
"y", viewport.rect.GetY() },
206 {
"w", viewport.rect.GetWidth() },
207 {
"h", viewport.rect.GetHeight() }
219 if( aJson.empty() || !aJson.is_array() )
224 for(
const nlohmann::json& viewport : aJson )
226 if( viewport.contains(
"name" ) )
228 VIEWPORT v( viewport.at(
"name" ).get<wxString>() );
230 if( viewport.contains(
"x" ) )
231 v.
rect.
SetX( viewport.at(
"x" ).get<
double>() );
233 if( viewport.contains(
"y" ) )
234 v.
rect.
SetY( viewport.at(
"y" ).get<
double>() );
236 if( viewport.contains(
"w" ) )
239 if( viewport.contains(
"h" ) )
249 std::vector<VIEWPORT3D>* aViewportList ) :
254 m_viewports( aViewportList )
256 wxASSERT( aViewportList );
262 nlohmann::json ret = nlohmann::json::array();
266 nlohmann::json js = {
267 {
"name", viewport.name },
268 {
"xx", viewport.matrix[0].x },
269 {
"xy", viewport.matrix[0].y },
270 {
"xz", viewport.matrix[0].z },
271 {
"xw", viewport.matrix[0].w },
272 {
"yx", viewport.matrix[1].x },
273 {
"yy", viewport.matrix[1].y },
274 {
"yz", viewport.matrix[1].z },
275 {
"yw", viewport.matrix[1].w },
276 {
"zx", viewport.matrix[2].x },
277 {
"zy", viewport.matrix[2].y },
278 {
"zz", viewport.matrix[2].z },
279 {
"zw", viewport.matrix[2].w },
280 {
"wx", viewport.matrix[3].x },
281 {
"wy", viewport.matrix[3].y },
282 {
"wz", viewport.matrix[3].z },
283 {
"ww", viewport.matrix[3].w }
295 if( aJson.empty() || !aJson.is_array() )
300 for(
const nlohmann::json& viewport : aJson )
302 if( viewport.contains(
"name" ) )
304 VIEWPORT3D v( viewport.at(
"name" ).get<wxString>() );
306 if( viewport.contains(
"xx" ) )
307 v.
matrix[0].x = viewport.at(
"xx" ).get<
double>();
309 if( viewport.contains(
"xy" ) )
310 v.
matrix[0].y = viewport.at(
"xy" ).get<
double>();
312 if( viewport.contains(
"xz" ) )
313 v.
matrix[0].z = viewport.at(
"xz" ).get<
double>();
315 if( viewport.contains(
"xw" ) )
316 v.
matrix[0].w = viewport.at(
"xw" ).get<
double>();
318 if( viewport.contains(
"yx" ) )
319 v.
matrix[1].x = viewport.at(
"yx" ).get<
double>();
321 if( viewport.contains(
"yy" ) )
322 v.
matrix[1].y = viewport.at(
"yy" ).get<
double>();
324 if( viewport.contains(
"yz" ) )
325 v.
matrix[1].z = viewport.at(
"yz" ).get<
double>();
327 if( viewport.contains(
"yw" ) )
328 v.
matrix[1].w = viewport.at(
"yw" ).get<
double>();
330 if( viewport.contains(
"zx" ) )
331 v.
matrix[2].x = viewport.at(
"zx" ).get<
double>();
333 if( viewport.contains(
"zy" ) )
334 v.
matrix[2].y = viewport.at(
"zy" ).get<
double>();
336 if( viewport.contains(
"zz" ) )
337 v.
matrix[2].z = viewport.at(
"zz" ).get<
double>();
339 if( viewport.contains(
"zw" ) )
340 v.
matrix[2].w = viewport.at(
"zw" ).get<
double>();
342 if( viewport.contains(
"wx" ) )
343 v.
matrix[3].x = viewport.at(
"wx" ).get<
double>();
345 if( viewport.contains(
"wy" ) )
346 v.
matrix[3].y = viewport.at(
"wy" ).get<
double>();
348 if( viewport.contains(
"wz" ) )
349 v.
matrix[3].z = viewport.at(
"wz" ).get<
double>();
351 if( viewport.contains(
"ww" ) )
352 v.
matrix[3].w = viewport.at(
"ww" ).get<
double>();
361 std::vector<LAYER_PAIR_INFO>& aLayerPairInfos ) :
366 m_layerPairInfos( aLayerPairInfos )
373 nlohmann::json ret = nlohmann::json::array();
377 const LAYER_PAIR& pair = pairInfo.GetLayerPair();
378 nlohmann::json js = {
381 {
"enabled", pairInfo.IsEnabled() },
384 if( pairInfo.GetName().has_value() )
386 js[
"name"] = pairInfo.GetName().value();
389 ret.push_back( std::move( js ) );
398 if( aJson.empty() || !aJson.is_array() )
403 for(
const nlohmann::json& pairJson : aJson )
405 if( pairJson.contains(
"topLayer" ) && pairJson.contains(
"bottomLayer" ) )
411 if( pairJson.contains(
"enabled" ) )
412 enabled = pairJson.at(
"enabled" ).get<
bool>();
414 std::optional<wxString>
name;
415 if( pairJson.contains(
"name" ) )
416 name = pairJson.at(
"name" ).get<wxString>();
BASE_SET & reset(size_t pos)
BASE_SET & set(size_t pos)
constexpr void SetHeight(size_type val)
constexpr void SetWidth(size_type val)
constexpr void SetX(coord_type val)
constexpr void SetY(coord_type val)
All information about a layer pair as stored in the layer pair store.
PCB_LAYER_ID GetLayerA() const
PCB_LAYER_ID GetLayerB() const
PARAM_LAMBDA(const std::string &aJsonPath, std::function< nlohmann::json()> aGetter, std::function< void(nlohmann::json)> aSetter, nlohmann::json aDefault, bool aReadOnly=false)
nlohmann::json layerPairsToJson()
void jsonToLayerPairs(const nlohmann::json &aJson)
std::vector< LAYER_PAIR_INFO > & m_layerPairInfos
PARAM_LAYER_PAIRS(const std::string &aPath, std::vector< LAYER_PAIR_INFO > &m_layerPairInfos)
static void MigrateToV9Layers(nlohmann::json &aJson)
static void MigrateToNamedRenderLayers(nlohmann::json &aJson)
nlohmann::json presetsToJson()
PARAM_LAYER_PRESET(const std::string &aPath, std::vector< LAYER_PRESET > *aPresetList)
std::vector< LAYER_PRESET > * m_presets
void jsonToPresets(const nlohmann::json &aJson)
void jsonToViewports(const nlohmann::json &aJson)
PARAM_VIEWPORT3D(const std::string &aPath, std::vector< VIEWPORT3D > *aViewportList)
nlohmann::json viewportsToJson()
std::vector< VIEWPORT3D > * m_viewports
std::vector< VIEWPORT > * m_viewports
PARAM_VIEWPORT(const std::string &aPath, std::vector< VIEWPORT > *aViewportList)
nlohmann::json viewportsToJson()
void jsonToViewports(const nlohmann::json &aJson)
PCB_LAYER_ID BoardLayerFromLegacyId(int aLegacyId)
Retrieve a layer ID from an integer converted from a legacy (pre-V9) enum value.
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
PCB_LAYER_ID
A quick note on layer IDs:
std::optional< VISIBILITY_LAYER > VisibilityLayerFromRenderLayer(GAL_LAYER_ID aLayerId)
std::string VisibilityLayerToString(VISIBILITY_LAYER aLayerId)
std::optional< GAL_LAYER_ID > RenderLayerFromVisbilityString(const std::string &aLayer)
A saved set of layers that are visible.
GAL_SET renderLayers
Render layers (e.g. object types) that are visible.
bool flipBoard
True if the flip board is enabled.
LSET layers
Board layers that are visible.
PCB_LAYER_ID activeLayer
Optional layer to set active when this preset is loaded.