FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
ScalarFieldBake.h
1#pragma once
2
8#include <cstddef>
9#include <cstdint>
10#include <fhsim_environment/ScalarField.h>
11#include <vector>
12
13namespace util
14{
15
17constexpr uint16_t kMaskedCell = 0;
18
22constexpr std::size_t kMaxBakeCells = 33'554'432;
23
26constexpr int kMaxAxisSize3D = 2048;
27
32constexpr int kMaxAxisSize2D = 8192;
33
44{
45 double origin[3];
46 double axis[3][3];
47 int counts[3];
48};
49
52{
54 std::vector<uint16_t> values;
55 std::vector<uint8_t> mask;
56 double valueMin;
57 double valueMax;
58};
59
62{
63 double valueMin;
64 double valueMax;
65 bool valid;
66};
67
75SamplingBox MakeAxisAlignedSamplingBox(const double min[3], const double max[3], const int counts[3]);
76
85void CountsFromSpacing(const double extent[3], const double spacing[3], int counts[3]);
86
119void DeriveSpacingForCellBudget(const double extent[3], std::size_t budget, double spacing[3]);
120
137double EncodingPad(double lo, double hi);
138
155void MakeEncodingRange(double lo, double hi, double& valueMin, double& valueMax);
156
172ValueRange ProbeScalarFieldRange(environment::field::ScalarField& field,
173 double time,
174 const SamplingBox& box,
175 bool maskInaccurate,
176 int samplesPerAxis = 32);
177
206BakedField BakeScalarField(environment::field::ScalarField& field,
207 double time,
208 const SamplingBox& box,
209 double valueMin,
210 double valueMax,
211 bool maskInaccurate,
212 unsigned numThreads = 1);
213
214} // namespace util
Utility functions for reading Environment parameters from XML.
Definition BathymetryDiagnostics.h:16
double EncodingPad(double lo, double hi)
BakedField BakeScalarField(environment::field::ScalarField &field, double time, const SamplingBox &box, double valueMin, double valueMax, bool maskInaccurate, unsigned numThreads=1)
void DeriveSpacingForCellBudget(const double extent[3], std::size_t budget, double spacing[3])
constexpr int kMaxAxisSize2D
Definition ScalarFieldBake.h:32
void MakeEncodingRange(double lo, double hi, double &valueMin, double &valueMax)
ValueRange ProbeScalarFieldRange(environment::field::ScalarField &field, double time, const SamplingBox &box, bool maskInaccurate, int samplesPerAxis=32)
constexpr uint16_t kMaskedCell
Code reserved in a baked grid for a cell that is not drawn.
Definition ScalarFieldBake.h:17
void CountsFromSpacing(const double extent[3], const double spacing[3], int counts[3])
SamplingBox MakeAxisAlignedSamplingBox(const double min[3], const double max[3], const int counts[3])
constexpr int kMaxAxisSize3D
Definition ScalarFieldBake.h:26
constexpr std::size_t kMaxBakeCells
Definition ScalarFieldBake.h:22
A scalar field evaluated over a SamplingBox and encoded to 16-bit codes.
Definition ScalarFieldBake.h:52
std::vector< uint16_t > values
Dilated codes for the value texture. Axis 0 fastest.
Definition ScalarFieldBake.h:54
double valueMin
Field value encoded as code 1.
Definition ScalarFieldBake.h:56
double valueMax
Field value encoded as code 65535.
Definition ScalarFieldBake.h:57
std::vector< uint8_t > mask
0 where masked, 255 elsewhere. Same order.
Definition ScalarFieldBake.h:55
SamplingBox box
Grid the codes were produced on.
Definition ScalarFieldBake.h:53
Definition ScalarFieldBake.h:44
double origin[3]
Corner the axis vectors emanate from, NED [m].
Definition ScalarFieldBake.h:45
double axis[3][3]
Full edge vector of each axis, NED [m].
Definition ScalarFieldBake.h:46
int counts[3]
Samples along each axis; each at least 1.
Definition ScalarFieldBake.h:47
Range of field values found by a probe, and whether any cell answered at all.
Definition ScalarFieldBake.h:62
bool valid
False when every probed cell was masked.
Definition ScalarFieldBake.h:65
double valueMin
Smallest value found.
Definition ScalarFieldBake.h:63
double valueMax
Largest value found.
Definition ScalarFieldBake.h:64