TerrainGen coverage


terraingen/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
801 / 801
100.0%
Branches:
432 / 432
100.0%
Functions:
51 / 51
100.0%

config/fields/layers.h
Line Branch Exec Source
1 /// @file
2 /// @brief The JSON fields of the noise, roughness, bedform, transform and region layers.
3 #pragma once
4
5 #include "terraingen/config/config.h"
6 #include "terraingen/config/fields/common.h"
7
8 #include <numbers>
9 #include <string_view>
10
11 namespace terraingen::config {
12
13 278 template <typename IO> void Fields(IO& io, NoiseLayerConfig& config) {
14 278 NoiseLayer& layer = config.layer;
15 278 FractalParams& fractal = layer.fractal;
16
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 149 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
278 io("enabled", layer.enabled, "Includes this layer in the stack; disabled layers are skipped.");
17
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 148 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
277 io("basis", fractal.basis, "Single-octave noise the fractal is built from.");
18
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 148 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
276 io("fractal", fractal.type, "How the octaves of the basis noise are combined.");
19
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 148 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
276 io("blend", layer.blend,
20 "How this layer combines with the height of the layers before it; the first enabled layer "
21 "sets the height instead.");
22
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 147 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
276 io("seed", fractal.seed,
23 "Seed of the noise; changing it gives a different pattern of the same character.");
24
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 147 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
275 io("wavelength", fractal.wavelength,
25 "Wavelength of the first, broadest octave, in metres; sets the size of the largest "
26 "features.",
27 275 "m", Above(0.0));
28
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 146 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
275 io("amplitude", fractal.amplitude, "Largest height of the layer above or below 0, in metres.",
29 "m");
30
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 145 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
274 io("octaves", fractal.octaves,
31 "Number of octaves, at least 1; each one adds detail at a shorter wavelength.", "",
32 275 Between(1.0, 32.0));
33
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 145 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
273 io("lacunarity", fractal.lacunarity,
34 273 "Frequency ratio between successive octaves; greater than 1.", "", Above(1.0));
35
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 145 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
273 io("gain", fractal.gain,
36 "Weight ratio between successive octaves, greater than 0; higher values give rougher "
37 "terrain. Unused when the Hurst exponent is set.",
38 273 "", Above(0.0));
39
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 145 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
273 io("hurst", config.hurst,
40 "Hurst exponent that sets the octave gain to lacunarity^-hurst: near 1 is smooth, lower is "
41 "rougher at short baselines. Unset uses the gain.");
42
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 145 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
273 io("offset", fractal.offset,
43 273 "Ridge offset of the ridged and hybrid multifractal types; greater than 0.", "", Above(0.0));
44
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 145 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
273 io("warp_amplitude", layer.warpAmplitude,
45 "Domain warp displacement in metres, which bends the noise into swirled shapes; 0 "
46 "disables warping.",
47 273 "m", AtLeast(0.0));
48
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 145 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerConfig&):
✓ Branch 4 taken 119 times.
273 io("warp_wavelength", layer.warpWavelength, "Wavelength of the warp field, in metres.", "m",
49 273 Above(0.0));
50 273 }
51
52 template <> struct SpecName<NoiseLayerSpec> {
53 static constexpr std::string_view kName = "noise";
54 static constexpr std::string_view kDescription =
55 "A stack of fractal noise layers added to the terrain, for hills, ridges and rolling "
56 "relief.";
57 };
58 198 template <typename IO> void Fields(IO& io, NoiseLayerSpec& layer) {
59
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::NoiseLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::NoiseLayerSpec&):
✓ Branch 4 taken 123 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::NoiseLayerSpec&):
✓ Branch 4 taken 59 times.
198 io("stack", layer.stack,
60 "Noise layers, 1 to 8, combined in order: the first enabled layer sets the height and each "
61 "later one is combined with it by its blend mode.");
62 191 }
63
64 template <> struct SpecName<RoughnessLayerSpec> {
65 static constexpr std::string_view kName = "roughness";
66 static constexpr std::string_view kDescription =
67 "Fine roughness from octaves of noise, scaled to a given RMS slope over a baseline.";
68 };
69 45 template <typename IO> void Fields(IO& io, RoughnessLayerSpec& spec) {
70 45 RoughnessOptions& roughness = spec.roughness;
71
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 23 times.
45 io("rms_slope", roughness.rmsSlope,
72 "RMS slope, as rise over run, over the baseline when every octave is resolved; higher "
73 "values give rougher ground.",
74 45 "", Above(0.0));
75
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 23 times.
45 io("baseline", roughness.baseline, "Baseline the RMS slope is given over, in metres.", "m",
76 45 Above(0.0));
77
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 23 times.
45 io("hurst", roughness.hurst,
78 "Hurst exponent, in (0, 1]: octave amplitudes grow as wavelength^hurst, so lower values "
79 "put relatively more roughness at short wavelengths.",
80 45 "", AboveUpTo(0.0, 1.0));
81
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 23 times.
45 io("max_wavelength", roughness.maxWavelength, "Wavelength of the longest octave, in metres.",
82 45 "m", Above(0.0));
83
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 23 times.
45 io("min_wavelength", roughness.minWavelength,
84 "Wavelength of the shortest octave, in metres; octaves halve from the longest down to it, "
85 "spanning at most 40 octaves.",
86 45 "m", Above(0.0));
87
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 23 times.
45 io("seed", roughness.seed,
88 "Seed of the noise; changing it gives a different pattern of the same roughness.");
89
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RoughnessLayerSpec&):
✓ Branch 4 taken 23 times.
45 io("fade", roughness.fade,
90 "How octaves too fine to resolve at the sample spacing fade out, by samples per "
91 "wavelength.");
92 45 }
93
94 60 template <typename IO> void Fields(IO& io, DuneRipples& ripples) {
95
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("wavelength", ripples.wavelength,
96 "Crest-to-crest spacing of the ripples on flat sand, in metres; 0 gives no ripples.", "m",
97 60 AtLeast(0.0));
98
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("height", ripples.height, "Trough-to-crest height of the ripples on flat sand, in metres.",
99 60 "m", AtLeast(0.0));
100
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("lee_fraction", ripples.leeFraction,
101 "Share of a ripple wavelength the lee face takes, in (0, 1): 0.5 is symmetric, lower "
102 "values give a steeper lee face.",
103 60 "", Inside(0.0, 1.0));
104
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("sinuosity", ripples.sinuosity,
105 60 "How far a ripple crest wanders along its length, in wavelengths.", "", AtLeast(0.0));
106
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("slope_coupling", ripples.slopeCoupling,
107 "How strongly the dune's slope turns and tightens the ripples: they shorten on steep lee "
108 "faces and turn on the flanks; 0 keeps them straight across the wind.",
109 60 "", AtLeast(0.0));
110
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("interdune_cover", ripples.interduneCover,
111 "Share of the ripple height kept on the ground between dunes, from 0 to 1.", "",
112 60 UnitInterval());
113
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("defect_density", ripples.defectDensity,
114 "Forked crests (Y-junctions): pairs of crest ends per metre of crest, as measured on dune "
115 "fields (Ewing et al. 2010); 0 for none. Mars large ripples: 0.099.",
116 60 "1/m", AtLeast(0.0));
117
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("flank_straightening", ripples.flankStraightening,
118 "How far crests straighten off the stoss, from 0 to 1: 1 keeps the sinuosity on flat sand "
119 "and stoss slopes and takes it away on flanks and lee slopes, as Martian large ripples "
120 "do.",
121 60 "", UnitInterval());
122
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneRipples&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneRipples&):
✓ Branch 4 taken 14 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneRipples&):
✓ Branch 4 taken 37 times.
60 io("fade", ripples.fade,
123 "How ripples too fine for the sample spacing fade out, by samples per wavelength.");
124 60 }
125
126 59 template <typename IO> void Fields(IO& io, DuneGrainflows& flows) {
127
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 37 times.
59 io("cover", flows.cover,
128 "Chance, from 0 to 1, that each lattice cell of the slip faces holds a grainflow; 0 for "
129 "none.",
130 59 "", UnitInterval());
131
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 37 times.
59 io("min_scarp_width", flows.minScarpWidth, "Narrowest scarp, in metres.", "m", Above(0.0));
132
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 37 times.
59 io("max_scarp_width", flows.maxScarpWidth, "Widest scarp, in metres.", "m", Above(0.0));
133
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 37 times.
59 io("min_scarp_length", flows.minScarpLength, "Shortest scarp downslope, in metres.", "m",
134 59 Above(0.0));
135
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 37 times.
59 io("max_scarp_length", flows.maxScarpLength, "Longest scarp downslope, in metres.", "m",
136 59 Above(0.0));
137
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 37 times.
59 io("min_lobe_width", flows.minLobeWidth, "Narrowest lobe, in metres.", "m", Above(0.0));
138
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 5 taken 37 times.
59 io("max_lobe_width", flows.maxLobeWidth, "Widest lobe, in metres.", "m", Above(0.0));
139
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 37 times.
59 io("min_lobe_length", flows.minLobeLength, "Shortest lobe downslope, in metres.", "m",
140 59 Above(0.0));
141
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 37 times.
59 io("max_lobe_length", flows.maxLobeLength, "Longest lobe downslope, in metres.", "m",
142 59 Above(0.0));
143
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 37 times.
59 io("thickness", flows.thickness, "Depth of a scarp and height of a lobe, in metres.", "m",
144 59 AtLeast(0.0));
145
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 13 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneGrainflows&):
✓ Branch 4 taken 37 times.
59 io("fade", flows.fade,
146 "How grainflows too narrow for the sample spacing fade out, by samples across a lobe.");
147 59 }
148
149 template <> struct SpecName<DuneLayerSpec> {
150 static constexpr std::string_view kName = "dunes";
151 static constexpr std::string_view kDescription =
152 "Wind-blown dunes added to the terrain: isolated barchans or domes, or fields of "
153 "transverse, barchanoid or linear crests, with slip faces and optional ripples on them.";
154 };
155 53 template <typename IO> void Fields(IO& io, DuneLayerSpec& spec) {
156 53 DuneOptions& dunes = spec.dunes;
157
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
53 io("shape", dunes.shape, "The kind of dune.");
158
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("wind_azimuth", dunes.windAzimuth,
159 "Direction the wind blows toward, in radians counter-clockwise from +x (local east of the "
160 "anchor on a body); slip faces face it.",
161 "rad");
162
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("azimuth_spread", dunes.azimuthSpread,
163 "Largest difference of each barchan or dome's wind from the azimuth, in radians.", "rad",
164 52 AtLeast(0.0));
165
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("slip_face_angle", dunes.slipFaceAngle,
166 "Slope of the lee slip faces, in radians: the sand's angle of repose.", "rad",
167 52 Inside(0.0, 0.5 * std::numbers::pi));
168
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("stoss_slope", dunes.stossSlope,
169 "Mean slope of the windward faces, in radians; below the slip face angle.", "rad",
170 52 Inside(0.0, 0.5 * std::numbers::pi));
171
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("stoss_exponent", dunes.stossExponent,
172 "Exponent alpha of the cos^alpha windward profile of dunes; higher is blunter.", "",
173 52 Above(0.0));
174
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("dome_exponent", dunes.domeExponent, "Exponent alpha of the cos^alpha profile of domes.", "",
175 52 Above(0.0));
176
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("spacing", dunes.spacing,
177 "Barchans and domes: side of the lattice cells, each holding at most one dune, in metres.",
178 52 "m", Above(0.0));
179
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("density", dunes.density, "Barchans and domes: chance a cell holds a dune, from 0 to 1.", "",
180 52 UnitInterval());
181
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("width", dunes.width, "Barchans and domes: mean width, horn to horn, in metres.", "m",
182 52 Above(0.0));
183
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("width_spread", dunes.widthSpread,
184 "Barchans and domes: each width varies from (1 - spread) to (1 + spread) times the mean, "
185 "spread in [0, 1).",
186 52 "", FromBelow(0.0, 1.0));
187
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("min_width", dunes.minWidth,
188 "Barchans: width in metres below which a dune is a dome without a slip face, blending "
189 "into barchans up to 1.5 times it.",
190 52 "m", AtLeast(0.0));
191
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 5 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 5 taken 28 times.
52 io("height_ratio", dunes.heightRatio, "Barchans and domes: height over width.", "", Above(0.0));
192
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("horn_length", dunes.hornLength,
193 "Barchans: how far the horns reach downwind of the crest, in dune heights.", "",
194 52 AtLeast(0.0));
195
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 5 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 5 taken 28 times.
52 io("dome_length", dunes.domeLength, "Domes: length along the wind over width.", "", Above(0.0));
196
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("wavelength", dunes.wavelength,
197 "Transverse, barchanoid and linear dunes: crest-to-crest spacing, in metres.", "m",
198 52 Above(0.0));
199
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("height", dunes.height, "Transverse, barchanoid and linear dunes: crest height, in metres.",
200 52 "m", AtLeast(0.0));
201
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("sinuosity", dunes.sinuosity,
202 "Transverse, barchanoid and linear dunes: how far a crest wanders along its length, in "
203 "wavelengths.",
204 52 "", AtLeast(0.0));
205
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("defects", dunes.defects,
206 "Transverse, barchanoid and linear dunes: share of the height that varies along crests, "
207 "lowering and ending some, from 0 to 1.",
208 52 "", UnitInterval());
209
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("defect_density", dunes.defectDensity,
210 "Transverse, barchanoid and linear dunes: pairs of crest ends per metre of crest, so crests "
211 "break into segments about 1 / defect_density long; 0 for none. Olympia Undae: 0.0027 "
212 "(Ewing et al. 2010).",
213 52 "1/m", AtLeast(0.0));
214
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("flank_slope", dunes.flankSlope, "Linear dunes: mean slope of both flanks, in radians.",
215 52 "rad", Inside(0.0, 0.5 * std::numbers::pi));
216
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("seed", dunes.seed,
217 "Seed of the dunes and ripples; changing it gives a different layout of the same "
218 "statistics.");
219
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("anchor_x", dunes.anchor.x,
220 "On a body, the longitude in degrees of the point whose tangent frame the dunes are laid "
221 "out in; they are true to scale near it and absent on the far hemisphere.");
222
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("anchor_y", dunes.anchor.y, "On a body, the latitude in degrees of the anchor.");
223
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("fade", dunes.fade,
224 "How dunes too fine for the sample spacing fade out, by samples across their width or "
225 "wavelength.");
226
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("ripples", dunes.ripples, "Ripples superposed on the dunes.");
227
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 15 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DuneLayerSpec&):
✓ Branch 4 taken 28 times.
52 io("grainflows", dunes.grainflows,
228 "Grainflows on the slip faces: scarps below the brink and lobes below them; off unless "
229 "cover is set.");
230 52 }
231
232 template <> struct SpecName<PavementLayerSpec> {
233 static constexpr std::string_view kName = "pavement";
234 static constexpr std::string_view kDescription =
235 "Fractured bedrock: polygonal plates, each tilted and stepped, parted by cracks or raised "
236 "ridges, split again by finer octaves of cracks; lays bedrock over the material map.";
237 };
238 43 template <typename IO> void Fields(IO& io, PavementLayerSpec& spec) {
239 43 PavementOptions& pavement = spec.pavement;
240
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 5 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 5 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 5 taken 24 times.
43 io("plate_size", pavement.plateSize, "Mean plate width, in metres.", "m", Above(0.0));
241
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("jitter", pavement.jitter,
242 "How far plate centres stray from a square lattice, from 0 (square plates) to 1.", "",
243 43 UnitInterval());
244
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("warp", pavement.warp, "Bend and roughness of the plate edges, in plate sizes.", "",
245 43 AtLeast(0.0));
246
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("crack_width", pavement.crackWidth, "Width of the cracks between plates, in metres.", "m",
247 43 Above(0.0));
248
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("crack_depth", pavement.crackDepth,
249 43 "Depth of the cracks, or height of the ridges when raised, in metres.", "m", AtLeast(0.0));
250
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("raised", pavement.raised, "Whether plates are parted by raised ridges instead of cracks.");
251
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("edge_rounding", pavement.edgeRounding,
252 43 "Width of the rounded shoulder beside each crack, in metres.", "m", AtLeast(0.0));
253
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("max_tilt", pavement.maxTilt, "Largest tilt of a plate, in radians.", "rad",
254 43 FromBelow(0.0, 0.5 * std::numbers::pi));
255
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("max_step", pavement.maxStep, "Largest height offset of a plate, up or down, in metres.",
256 43 "m", AtLeast(0.0));
257
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("octaves", pavement.octaves,
258 "Crack octaves, 1 to 8: each finer octave splits every plate again, its cracks ending at "
259 "the plate's edges.",
260 43 "", Between(1.0, 8.0));
261
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("lacunarity", pavement.lacunarity, "Plate size ratio between octaves, above 1.", "",
262 43 Above(1.0));
263
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("gain", pavement.gain,
264 "Ratio of crack width, depth, rounding, tilt and step between octaves, in (0, 1].", "",
265 43 AboveUpTo(0.0, 1.0));
266
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("seed", pavement.seed, "Seed of the plates.");
267
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("exposure", pavement.exposure,
268 "Shows plates only where the ground beneath is bare bedrock, fading out over soil; unset "
269 "shows them everywhere.");
270
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("exposure_spacing", pavement.exposureSpacing,
271 43 "Spacing in metres the ground is read at for the exposure field.", "m", Above(0.0));
272
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("anchor_x", pavement.anchor.x,
273 "On a body, the longitude in degrees of the point whose tangent frame the plates are laid "
274 "out in.");
275
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("anchor_y", pavement.anchor.y, "On a body, the latitude in degrees of the anchor.");
276
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::PavementLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("fade", pavement.fade,
277 "How plates and cracks too fine for the sample spacing fade out, by samples across them.");
278 43 }
279
280 template <> struct SpecName<StrataLayerSpec> {
281 static constexpr std::string_view kName = "strata";
282 static constexpr std::string_view kDescription =
283 "Layered rock: the ground beneath terraced into dipping beds, each a flat bench below a "
284 "cliff, so hills become stepped buttes and mesas; lays bedrock over the cliffs.";
285 };
286 43 template <typename IO> void Fields(IO& io, StrataLayerSpec& spec) {
287 43 StrataOptions& strata = spec.strata;
288
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("bed_thickness", strata.bedThickness, "Mean thickness of a bed, in metres.", "m",
289 43 Above(0.0));
290
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("thickness_variation", strata.thicknessVariation,
291 "How far each bed boundary strays from even spacing, in bed thicknesses, in [0, 1).", "",
292 43 FromBelow(0.0, 1.0));
293
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("dip", strata.dip, "Dip of the beds from horizontal, in radians, below 90 deg.", "rad",
294 43 FromBelow(0.0, 0.5 * std::numbers::pi));
295
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("dip_azimuth", strata.dipAzimuth,
296 "Direction the beds dip toward, in radians counter-clockwise from +x (local east on a "
297 "body).",
298 "rad");
299
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("sharpness", strata.sharpness,
300 "How sharply each bed is cut into a flat bench and a cliff, at least 1; 1 leaves the "
301 "ground as it is.",
302 43 "", AtLeast(1.0));
303
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("strength", strata.strength, "Share of the terracing applied, in [0, 1].", "",
304 43 UnitInterval());
305
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("cliff_share", strata.cliffShare,
306 "Share of each bed's height, at its top, laid as bedrock in the material map, in (0, 1].",
307 43 "", AboveUpTo(0.0, 1.0));
308
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("seed", strata.seed, "Seed of the bed boundaries.");
309
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("anchor_x", strata.anchor.x,
310 "On a body, the longitude in degrees of the point whose tangent frame the dip is measured "
311 "in.");
312
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("anchor_y", strata.anchor.y, "On a body, the latitude in degrees of the anchor.");
313
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("hard_share", strata.hardShare,
314 "Share of the beds that are hard rock, from 0 to 1: hard beds form benches and cliffs of "
315 "bedrock, soft beds slopes cut at soft_sharpness without bedrock.",
316 43 "", UnitInterval());
317
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::StrataLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("soft_sharpness", strata.softSharpness,
318 "How sharply soft beds are cut into benches and slopes, at least 1; 1 leaves them as they "
319 "are.",
320 43 "", AtLeast(1.0));
321 43 }
322
323 template <> struct SpecName<SandShadowLayerSpec> {
324 static constexpr std::string_view kName = "sand_shadow";
325 static constexpr std::string_view kDescription =
326 "Sand shadows: a tapering sand tail in the lee of each boulder of the nearest boulder "
327 "layer before this one; lays sand over the material map.";
328 };
329 43 template <typename IO> void Fields(IO& io, SandShadowLayerSpec& spec) {
330 43 SandShadowOptions& shadows = spec.shadows;
331
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("wind_azimuth", shadows.windAzimuth,
332 "Where the wind blows toward, in radians counter-clockwise from +x (local east on a "
333 "body).",
334 "rad");
335
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("length_ratio", shadows.lengthRatio,
336 "Length of a tail beyond its boulder over the boulder's width; 1.1 is the reattachment "
337 "length behind a dome, and modelled shadow dunes run 1.3 to 5.6, longer in lighter "
338 "winds.",
339 43 "", Above(0.0));
340
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("flank_angle", shadows.flankAngle,
341 "Slope of a tail's flanks, in radians, at most the angle of repose (about 32 deg for dry "
342 "sand); sets the tail's height with the boulder's width.",
343 43 "rad", Inside(0.0, 0.5 * std::numbers::pi));
344
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("min_diameter", shadows.minDiameter, "Smallest boulder with a tail, in metres.", "m",
345 43 AtLeast(0.0));
346
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("cover_thickness", shadows.coverThickness,
347 43 "Sand depth that fully covers the ground in the material map, in metres.", "m", Above(0.0));
348
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 10 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandShadowLayerSpec&):
✓ Branch 4 taken 24 times.
43 io("fade", shadows.fade,
349 "How tails behind boulders too small for the sample spacing fade out, by samples across "
350 "the boulder.");
351 43 }
352
353 template <> struct SpecName<SandFillLayerSpec> {
354 static constexpr std::string_view kName = "sand_fill";
355 static constexpr std::string_view kDescription =
356 "Sand pooled in the lows of the ground beneath: cracks, troughs and hollows between "
357 "rises, laying sand over the material map.";
358 };
359 37 template <typename IO> void Fields(IO& io, SandFillLayerSpec& spec) {
360 37 SandFillOptions& fill = spec.sandFill;
361
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("reach", fill.reach,
362 "Radius in metres of the surroundings a low is measured against: two rings, at half the "
363 "reach and at the reach.",
364 37 "m", Above(0.0));
365
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("fill", fill.fill, "Share of a low's depth below its surroundings that sand fills, 0 to 1.",
366 37 "", UnitInterval());
367
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("max_thickness", fill.maxThickness,
368 37 "The thickest the sand gets, in metres, approached smoothly.", "m", Above(0.0));
369
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::SandFillLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("cover_thickness", fill.coverThickness,
370 "Sand thickness in metres from which it fully covers the ground in the material map.", "m",
371 37 Above(0.0));
372 37 }
373
374 template <> struct SpecName<BedformLayerSpec> {
375 static constexpr std::string_view kName = "bedforms";
376 static constexpr std::string_view kDescription =
377 "Fields of wind-blown ripples or dunes added to the terrain.";
378 };
379 37 template <typename IO> void Fields(IO& io, BedformLayerSpec& spec) {
380 37 BedformOptions& bedforms = spec.bedforms;
381
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("wavelength", bedforms.wavelength,
382 "Crest-to-crest spacing, in metres; each field's varies from 0.8 to 1.2 times it.", "m",
383 37 Above(0.0));
384
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("height", bedforms.height,
385 "Trough-to-crest height, in metres, scaled with each field's wavelength.", "m",
386 37 AtLeast(0.0));
387
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("wind_azimuth", bedforms.windAzimuth,
388 "Direction the wind blows toward, in radians counter-clockwise from +x (local east on a "
389 "sphere); crests lie across it.",
390 "rad");
391
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("azimuth_spread", bedforms.azimuthSpread,
392 "Largest difference of each field's wind from the azimuth, in radians.", "rad",
393 37 AtLeast(0.0));
394
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("lee_fraction", bedforms.leeFraction,
395 "Share of a wavelength the lee face takes, in (0, 1): 0.5 is symmetric, lower values give "
396 "a steeper lee face.",
397 37 "", Inside(0.0, 1.0));
398
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("sinuosity", bedforms.sinuosity,
399 "How far a crest wanders along its length, in wavelengths; 0 gives straight crests.", "",
400 37 AtLeast(0.0));
401
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("cover", bedforms.cover,
402 "Share of the ground under bedform fields, from 0 to 0.9; 0 gives no bedforms.", "",
403 37 Between(0.0, 0.9));
404
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("field_size", bedforms.fieldSize, "Typical width of a bedform field, in metres.", "m",
405 37 Above(0.0));
406
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("seed", bedforms.seed,
407 "Seed of the fields and their crests; changing it gives a different layout of the same "
408 "statistics.");
409
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("exposure", bedforms.exposure,
410 "Leaves out fields whose centres lie on bedrock, the likelier the barer the ground, as "
411 "sand settles in lows; unset disables it.");
412
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("exposure_spacing", bedforms.exposureSpacing,
413 37 "Spacing in metres the ground is read at for the exposure field.", "m", Above(0.0));
414
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::BedformLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("fade", bedforms.fade,
415 "How bedforms too fine for the sample spacing fade out, by samples per wavelength.");
416 37 }
417
418 template <> struct SpecName<DemDetailLayerSpec> {
419 static constexpr std::string_view kName = "dem_detail";
420 static constexpr std::string_view kDescription =
421 "Adds the detail a GeoTIFF DEM has above its own low-pass, to restore measured relief over "
422 "a "
423 "raster source read with the same low_pass.";
424 };
425 28 template <typename IO> void Fields(IO& io, DemDetailLayerSpec& spec) {
426
6/6
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DemDetailLayerSpec&):
✓ Branch 3 taken 9 times.
✓ Branch 8 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DemDetailLayerSpec&):
✓ Branch 3 taken 2 times.
✓ Branch 8 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DemDetailLayerSpec&):
✓ Branch 3 taken 17 times.
✓ Branch 8 taken 17 times.
28 io("path", spec.path, InputPathHelp("GeoTIFF DEM to take the detail from"));
427
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 17 times.
28 io("band", spec.read.band, "Band of the file to read, counting from 0.");
428
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 17 times.
28 io("resampling", spec.read.resampling, "Interpolation used between the DEM's cells.");
429
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 17 times.
28 io("scale", spec.read.scale,
430 "Factor each sample is multiplied by, replacing the band's scale from the file's GDAL "
431 "metadata. Unset keeps the file's.");
432
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 17 times.
28 io("offset", spec.read.offset,
433 "Added to each scaled sample, replacing the band's offset from the file's GDAL metadata. "
434 "Unset keeps the file's.",
435 "m");
436
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 17 times.
28 io("low_pass", spec.read.lowPass,
437 "Standard deviation in metres of the Gaussian low-pass the detail is measured above; "
438 "positive, and the same as the raster source's low_pass to restore the DEM whole.",
439 28 "m", Above(0.0));
440
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 2 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::DemDetailLayerSpec&):
✓ Branch 4 taken 17 times.
28 io("weight", spec.weight, "Share of the detail added; 1 restores it whole, 0.5 halves it.");
441 28 }
442
443 template <> struct SpecName<ScaleLayerSpec> {
444 static constexpr std::string_view kName = "scale";
445 static constexpr std::string_view kDescription =
446 "Scales and shifts the heights so far, for vertical exaggeration or a datum shift.";
447 };
448 37 template <typename IO> void Fields(IO& io, ScaleLayerSpec& spec) {
449
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ScaleLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ScaleLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ScaleLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("scale", spec.scale,
450 "Factor every height so far is multiplied by, as for vertical exaggeration.");
451
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ScaleLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ScaleLayerSpec&):
✓ Branch 4 taken 8 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ScaleLayerSpec&):
✓ Branch 4 taken 20 times.
37 io("offset", spec.offset, "Metres added to every height after scaling, to shift the datum.",
452 "m");
453 37 }
454
455 template <> struct SpecName<ClampLayerSpec> {
456 static constexpr std::string_view kName = "clamp";
457 static constexpr std::string_view kDescription =
458 "Clamps the heights so far between optional bounds, to flatten a basin floor or cap "
459 "peaks.";
460 };
461 44 template <typename IO> void Fields(IO& io, ClampLayerSpec& spec) {
462
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ClampLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ClampLayerSpec&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ClampLayerSpec&):
✓ Branch 4 taken 23 times.
44 io("min", spec.min,
463 "Lowest height kept, in metres; lower heights are raised to it, flattening basin floors. "
464 "Unset leaves heights unbounded below.",
465 "m");
466
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::ClampLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::ClampLayerSpec&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::ClampLayerSpec&):
✓ Branch 4 taken 23 times.
44 io("max", spec.max,
467 "Highest height kept, in metres; higher heights are lowered to it, capping peaks. Unset "
468 "leaves heights unbounded above.",
469 "m");
470 44 }
471
472 template <> struct SpecName<RectangleRegionSpec> {
473 static constexpr std::string_view kName = "rectangle";
474 static constexpr std::string_view kDescription =
475 "An axis-aligned rectangle in the surface's coordinates.";
476 };
477 70 template <typename IO> void Fields(IO& io, RectangleRegionSpec& spec) {
478
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 49 times.
70 io("min_x", spec.minX,
479 "Lower edge along x in the surface's coordinates; the longitude in degrees on a sphere.");
480
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 49 times.
70 io("min_y", spec.minY,
481 "Lower edge along y in the surface's coordinates; the latitude in degrees on a sphere.");
482
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 49 times.
70 io("max_x", spec.maxX,
483 "Upper edge along x in the surface's coordinates; the longitude in degrees on a sphere.");
484
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 12 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RectangleRegionSpec&):
✓ Branch 4 taken 49 times.
70 io("max_y", spec.maxY,
485 "Upper edge along y in the surface's coordinates; the latitude in degrees on a sphere.");
486 70 }
487
488 template <> struct SpecName<CircleRegionSpec> {
489 static constexpr std::string_view kName = "circle";
490 static constexpr std::string_view kDescription =
491 "A circle in the surface's coordinates, its radius in metres.";
492 };
493 35 template <typename IO> void Fields(IO& io, CircleRegionSpec& spec) {
494
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 20 times.
35 io("x", spec.x,
495 "Centre along x in the surface's coordinates; the longitude in degrees on a sphere.");
496
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 20 times.
35 io("y", spec.y,
497 "Centre along y in the surface's coordinates; the latitude in degrees on a sphere.");
498
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 6 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::CircleRegionSpec&):
✓ Branch 4 taken 20 times.
35 io("radius", spec.radius, "Radius of the circle in metres, also on a sphere.", "m",
499 35 AtLeast(0.0));
500 35 }
501
502 template <> struct SpecName<RegionLayerSpec> {
503 static constexpr std::string_view kName = "region";
504 static constexpr std::string_view kDescription =
505 "Another layer applied only inside a rectangle or circle, feathered outside it: to "
506 "confine craters to an area or flatten a landing pad.";
507 };
508 55 template <typename IO> void Fields(IO& io, RegionLayerSpec& spec) {
509
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 19 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 26 times.
55 io("shape", spec.shape, "Area the inner layer is applied in: a rectangle or a circle.");
510
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 19 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 26 times.
54 io("feather", spec.feather,
511 "Distance in metres outside the shape over which the inner layer fades back to the "
512 "unchanged height; 0 gives a hard edge.",
513 54 "m", AtLeast(0.0));
514
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 19 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 26 times.
54 io("blend", spec.blend, "Curve of the fade across the feather.");
515
3/3
void terraingen::config::Fields<terraingen::config::(anonymous namespace)::SchemaWriter>(terraingen::config::(anonymous namespace)::SchemaWriter&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 9 times.
void terraingen::config::Fields<terraingen::config::Reader>(terraingen::config::Reader&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 18 times.
void terraingen::config::Fields<terraingen::config::Writer>(terraingen::config::Writer&, terraingen::RegionLayerSpec&):
✓ Branch 4 taken 26 times.
54 io("layer", spec.layer,
516 "Layer applied only inside the shape. A crater layer here does not count as the crater "
517 "layer for later boulder ejecta or secondaries.");
518 53 }
519
520 } // namespace terraingen::config
521