Go to the documentation of this file.
42 { fieldOption::UNIFORM,
"uniform" },
43 { fieldOption::FIELD,
"field" },
52 const dictionary&
dict
55 word
colourMap = colourTable::predefinedNames.names()[0];
65 const dictionary&
dict
78 const dictionary fieldDict = fieldInfoDict_.subOrEmptyDict(fieldName);
80 return fieldDict.getOrDefault(
"min", -GREAT);
90 const dictionary fieldDict = fieldInfoDict_.subOrEmptyDict(fieldName);
92 return fieldDict.getOrDefault(
"max", GREAT);
99 const dictionary&
dict,
101 const List<
const Field<Type>*>& valueSets
104 if (
dict.found(
"alpha"))
106 const auto option = fieldOptionNames_.get(
"alpha",
dict);
110 case fieldOption::UNIFORM:
112 const scalar value =
dict.getScalar(
"alphaValue");
115 case fieldOption::FIELD:
117 const word alphaFieldName =
dict.get<word>(
"alphaField");
118 const bool normalise =
dict.get<
bool>(
"normalise");
119 const label i = valueSetNames.find(alphaFieldName);
123 <<
"Unable to find field " << alphaFieldName
124 <<
". Valid field names are:" << valueSetNames
133 tresult.ref() /=
mag(tresult() + ROOTVSMALL);
148 const dictionary&
dict,
150 const List<List<Field<Type>>>& valueSets,
154 if (
dict.found(
"alpha"))
156 const auto option = fieldOptionNames_.get(
"alpha",
dict);
160 case fieldOption::UNIFORM:
162 const scalar value =
dict.getScalar(
"alphaValue");
165 valueSets[0][tracki].size(), value
168 case fieldOption::FIELD:
170 const word alphaFieldName =
dict.get<word>(
"alphaField");
171 const bool normalise =
dict.get<
bool>(
"normalise");
172 const label fieldi = valueSetNames.find(alphaFieldName);
176 <<
"Unable to find field " << alphaFieldName
177 <<
". Valid field names are:" << valueSetNames
190 tresult.ref() /=
mag(tresult() + ROOTVSMALL);
205 const colourTable& colours,
207 const List<List<Field<Type>>>& valueSets,
214 <<
"Attempting to get colour when colour option is off"
218 const auto option = fieldOptionNames_.get(
"colour", animationDict_);
222 case fieldOption::UNIFORM:
224 return animationDict_.get<
vector>(
"colourValue");
226 case fieldOption::FIELD:
228 const word fieldName = animationDict_.get<word>(
"colourField");
229 const label fieldi = valueSetNames.find(fieldName);
233 <<
"Unable to find field " << fieldName
234 <<
". Valid field names are:" << valueSetNames
242 if (!animationDict_.readIfPresent(
"min",
minValue))
246 if (!animationDict_.readIfPresent(
"max",
maxValue))
250 const scalar refValue =
component(valueSets[fieldi][tracki][0], 0);
251 const scalar fraction =
254 return (colours.value(
max(0,
min(1, fraction))));
269 auto& result = tresult.ref();
273 for (label i = 1; i <
points.size(); ++i)
276 result[i-1].normalise();
279 result.last() = result[
points.size()-2];
304 animate_(
dict.getOrDefault(
"animate", false)),
305 colour_(
dict.getOrDefault(
"colour", false)),
306 fieldInfoDict_(
dict.subOrEmptyDict(
"fieldInfo")),
307 animationDict_(
dict.subOrEmptyDict(
"animationInfo"))
332 return this->getBaseName(
points, valueSetNames) +
".gltf";
345 if (valueSets.size() != valueSetNames.size())
348 <<
"Number of variables:" << valueSetNames.size() <<
endl
349 <<
"Number of valueSets:" << valueSets.size()
364 const auto&
field = *valueSets[fieldi];
365 const word& fieldName = valueSetNames[fieldi];
367 const auto& colours = getColourTable(
dict);
370 getAlphaField(
dict, valueSetNames, valueSets);
376 const scalar minValueLimit = getFieldMin(fieldName);
377 const scalar maxValueLimit = getFieldMax(fieldName);
379 for (
direction cmpti=0; cmpti < pTraits<Type>::nComponents; ++cmpti)
385 const Type& v =
field[i];
389 float deltaf = (maxf - minf + SMALL);
392 colours.value(
min(
max((
f - minf)/deltaf, 0), 1));
413 const bool writeTracks,
421 if (valueSets.size() != valueSetNames.size())
424 <<
"Number of variables:" << valueSetNames.size() <<
endl
425 <<
"Number of valueSets:" << valueSets.size()
459 const bool writeTracks,
472 forAll(valueSetNames, fieldi)
474 const word& fieldName = valueSetNames[fieldi];
475 const auto&
field = valueSets[fieldi][tracki];
483 const auto&
field = valueSets[fieldi][tracki];
484 const word& fieldName = valueSetNames[fieldi];
487 const auto& colours = getColourTable(
dict);
490 getTrackAlphaField(
dict, valueSetNames, valueSets, tracki);
496 const scalar minValueLimit = getFieldMin(fieldName);
497 const scalar maxValueLimit = getFieldMax(fieldName);
502 cmpti < pTraits<Type>::nComponents;
510 const Type& v =
field[i];
516 float deltaf = (maxf - minf + SMALL);
519 colours.value(
min(
max((
f - minf)/deltaf, 0), 1));
541 const bool writeTracks,
549 const auto& colours = getColourTable(animationDict_);
556 const auto& track = tracks[tracki];
571 forAll(valueSetNames, fieldi)
574 const word& fieldName = valueSetNames[fieldi];
584 const label translationId = scene.
addField(translation,
"translation");
592 getTrackAnimationColour
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Enum is a wrapper around a list of names/values that represent particular enumeration (or int) values...
void component(FieldField< Field, typename FieldField< Field, Type >::cmptType > &sf, const FieldField< Field, Type > &f, const direction d)
gltfSetWriter()
Default construct.
A class for handling words, derived from Foam::string.
A class for handling file names.
A class for managing temporary objects.
static constexpr const zero Zero
Global zero (0)
static const Enum< fieldOption > fieldOptionNames_
Strings corresponding to the field options.
label addField(const Type &fld, const word &name, const label target=-1)
Returns accessor index.
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
label addMesh(const Type &fld, const word &name)
Returns index of last mesh.
virtual fileName getFileName(const coordSet &, const wordList &) const
Return the file name.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void addToAnimation(const label animationi, const label inputId, const label outputId, const label meshId, const string &interpolation="LINEAR")
Add to existing animation.
Writes point data in glTF v2 format.
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
#define forAll(list, i)
Loop across all elements in list.
Field< vector > vectorField
Specialisation of Field<T> for vector.
virtual void writeStaticTracks(const bool writeTracks, const List< scalarField > ×, const PtrList< coordSet > &tracks, const wordList &valueSetNames, const List< List< Field< Type >>> &valueSets, Ostream &) const
Write static tracks.
List< word > wordList
A List of words.
label addFieldToMesh(const Type &fld, const word &name, const label meshi)
Returns accessor index.
Generic templated field type.
Main class to assemble glTF components into a scene.
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers....
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
OBJstream os(runTime.globalPath()/outputName)
Macros for easy insertion into run-time selection tables.
Base class for graphics format writing. Entry points are.
Holds list of sampling positions.
void write(Ostream &os)
Write to stream (JSON and binary data)
errorManip< error > abort(error &err)
Vector< scalar > vector
A scalar version of the templated Vector.
dictionary subOrEmptyDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX, const bool mandatory=false) const
errorManipArg< error, int > exit(error &err, const int errNo=1)
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
virtual void writeAnimateTracks(const bool writeTracks, const List< scalarField > ×, const PtrList< coordSet > &tracks, const wordList &valueSetNames, const List< List< Field< Type >>> &valueSets, Ostream &) const
Write animated tracks.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
label addColourToMesh(const vectorField &fld, const word &name, const label meshi, const scalarField &alpha=scalarField())
Returns accessor index.
label createAnimation(const word &name)
Returns index of last animation.
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Base class for generating a colour table from node points.
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
virtual void write(const coordSet &, const wordList &, const List< const Field< Type > * > &, Ostream &) const
Write.