Make it possible to truncate the result of a number-value text chunk calculation rather than rounding it by specifying <truncate>true</truncate> inside the chunk.
This commit is contained in:
parent
0a9a72f209
commit
6ba351cfc6
3 changed files with 11 additions and 5 deletions
|
@ -1092,8 +1092,9 @@ FGTextLayer::Chunk::Chunk (const string &text, const string &fmt)
|
||||||
}
|
}
|
||||||
|
|
||||||
FGTextLayer::Chunk::Chunk (ChunkType type, const SGPropertyNode * node,
|
FGTextLayer::Chunk::Chunk (ChunkType type, const SGPropertyNode * node,
|
||||||
const string &fmt, float mult, float offs)
|
const string &fmt, float mult, float offs,
|
||||||
: _type(type), _fmt(fmt), _mult(mult), _offs(offs)
|
bool truncation)
|
||||||
|
: _type(type), _fmt(fmt), _mult(mult), _offs(offs), _trunc(truncation)
|
||||||
{
|
{
|
||||||
if (_fmt.empty()) {
|
if (_fmt.empty()) {
|
||||||
if (type == TEXT_VALUE)
|
if (type == TEXT_VALUE)
|
||||||
|
@ -1117,7 +1118,9 @@ FGTextLayer::Chunk::getValue () const
|
||||||
sprintf(_buf, _fmt.c_str(), _node->getStringValue());
|
sprintf(_buf, _fmt.c_str(), _node->getStringValue());
|
||||||
break;
|
break;
|
||||||
case DOUBLE_VALUE:
|
case DOUBLE_VALUE:
|
||||||
sprintf(_buf, _fmt.c_str(), _offs + _node->getFloatValue() * _mult);
|
double d = _offs + _node->getFloatValue() * _mult;
|
||||||
|
if (_trunc) d = truncf(d);
|
||||||
|
sprintf(_buf, _fmt.c_str(), d);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return _buf;
|
return _buf;
|
||||||
|
|
|
@ -492,7 +492,8 @@ public:
|
||||||
public:
|
public:
|
||||||
Chunk (const string &text, const string &fmt = "%s");
|
Chunk (const string &text, const string &fmt = "%s");
|
||||||
Chunk (ChunkType type, const SGPropertyNode * node,
|
Chunk (ChunkType type, const SGPropertyNode * node,
|
||||||
const string &fmt = "", float mult = 1.0, float offs = 0.0);
|
const string &fmt = "", float mult = 1.0, float offs = 0.0,
|
||||||
|
bool truncation = false);
|
||||||
|
|
||||||
const char * getValue () const;
|
const char * getValue () const;
|
||||||
private:
|
private:
|
||||||
|
@ -502,6 +503,7 @@ public:
|
||||||
string _fmt;
|
string _fmt;
|
||||||
float _mult;
|
float _mult;
|
||||||
float _offs;
|
float _offs;
|
||||||
|
bool _trunc;
|
||||||
mutable char _buf[1024];
|
mutable char _buf[1024];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -366,9 +366,10 @@ readTextChunk (const SGPropertyNode * node)
|
||||||
string propName = node->getStringValue("property");
|
string propName = node->getStringValue("property");
|
||||||
float scale = node->getFloatValue("scale", 1.0);
|
float scale = node->getFloatValue("scale", 1.0);
|
||||||
float offset = node->getFloatValue("offset", 0.0);
|
float offset = node->getFloatValue("offset", 0.0);
|
||||||
|
bool truncation = node->getFloatValue("truncate", false);
|
||||||
SGPropertyNode * target = fgGetNode(propName.c_str(), true);
|
SGPropertyNode * target = fgGetNode(propName.c_str(), true);
|
||||||
chunk = new FGTextLayer::Chunk(FGTextLayer::DOUBLE_VALUE, target,
|
chunk = new FGTextLayer::Chunk(FGTextLayer::DOUBLE_VALUE, target,
|
||||||
format, scale, offset);
|
format, scale, offset, truncation);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unknown type.
|
// Unknown type.
|
||||||
|
|
Loading…
Add table
Reference in a new issue