1
0
Fork 0

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:
ehofman 2004-01-22 18:42:42 +00:00
parent 0a9a72f209
commit 6ba351cfc6
3 changed files with 11 additions and 5 deletions

View file

@ -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;

View file

@ -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];
}; };

View file

@ -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.