From Luc Frauciel, Added support for osgTerrain::ValidDataOperator.

From Robert Osfield, added versioning to the above.
This commit is contained in:
Robert Osfield 2008-05-30 12:59:49 +00:00
parent 9cd56609db
commit 0a6b4d5709
4 changed files with 73 additions and 3 deletions

View File

@ -35,8 +35,9 @@
#define VERSION_0024 24
#define VERSION_0025 25
#define VERSION_0026 26
#define VERSION_0027 27
#define VERSION VERSION_0026
#define VERSION VERSION_0027
/* The BYTE_SEX tag is used to check the endian
of the IVE file being read in. The IVE format

View File

@ -50,6 +50,11 @@ void Layer::write(DataOutputStream* out)
out->writeUInt(getMinLevel());
out->writeUInt(getMaxLevel());
if (out->getVersion() >= VERSION_0027)
{
writeValidDataOperator(out,getValidDataOperator());
}
}
void Layer::read(DataInputStream* in)
@ -83,6 +88,10 @@ void Layer::read(DataInputStream* in)
setMinLevel(in->readUInt());
setMaxLevel(in->readUInt());
if (in->getVersion() >= VERSION_0027)
{
setValidDataOperator(readValidDataOperator(in));
}
}
void LayerHelper::writeLayer(DataOutputStream* out, osgTerrain::Layer* layer)
@ -196,3 +205,56 @@ osgTerrain::Locator* LayerHelper::readLocator(DataInputStream* in)
return locator;
}
void Layer::writeValidDataOperator(DataOutputStream* out, osgTerrain::ValidDataOperator* validDataOperator)
{
if (validDataOperator)
{
out->writeBool(true);
osgTerrain::ValidRange* validRange = dynamic_cast<osgTerrain::ValidRange*>(validDataOperator);
if (validRange)
{
out->writeInt(IVEVALIDRANGE);
out->writeFloat(validRange->getMinValue());
out->writeFloat(validRange->getMaxValue());
}
else
{
osgTerrain::NoDataValue* noDataValue = dynamic_cast<osgTerrain::NoDataValue*>(validDataOperator);
if (noDataValue)
{
out->writeInt(IVENODATAVALUE);
out->writeFloat(noDataValue->getValue());
}
}
}
else
{
out->writeBool(false);
}
}
osgTerrain::ValidDataOperator* Layer::readValidDataOperator(DataInputStream* in)
{
bool hasOperator = in->readBool();
if (!hasOperator) return 0;
int id = in->peekInt();
if (id==IVEVALIDRANGE)
{
id = in->readInt();
float minValue = in->readFloat();
float maxValue = in->readFloat();
return new osgTerrain::ValidRange(minValue,maxValue);
}
else if (id==IVENODATAVALUE)
{
id = in->readInt();
float value = in->readFloat();
return new osgTerrain::NoDataValue(value);
}
else
{
return 0;
}
}

View File

@ -36,10 +36,14 @@ class LayerHelper
class Layer : public osgTerrain::Layer, public ReadWrite
{
public:
void write(DataOutputStream* out);
void read(DataInputStream* in);
void write(DataOutputStream* out);
void read(DataInputStream* in);
void writeValidDataOperator(DataOutputStream* out, osgTerrain::ValidDataOperator* validDataOperator);
osgTerrain::ValidDataOperator* readValidDataOperator(DataInputStream* in);
};
}
#endif

View File

@ -130,6 +130,9 @@ namespace ive {
#define IVEPROXYLAYER 0x00200007
#define IVETERRAINTECHNIQUE 0x00200008
#define IVEGEOMETRYTECHNIQUE 0x00200009
#define IVEVALIDDATAOPERATOR 0x0020000A
#define IVEVALIDRANGE 0x0020000B
#define IVENODATAVALUE 0x0020000C
//#define IVETERRAIN 0x0020000A
// osgFX classes