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_0024 24
#define VERSION_0025 25 #define VERSION_0025 25
#define VERSION_0026 26 #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 /* The BYTE_SEX tag is used to check the endian
of the IVE file being read in. The IVE format 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(getMinLevel());
out->writeUInt(getMaxLevel()); out->writeUInt(getMaxLevel());
if (out->getVersion() >= VERSION_0027)
{
writeValidDataOperator(out,getValidDataOperator());
}
} }
void Layer::read(DataInputStream* in) void Layer::read(DataInputStream* in)
@ -83,6 +88,10 @@ void Layer::read(DataInputStream* in)
setMinLevel(in->readUInt()); setMinLevel(in->readUInt());
setMaxLevel(in->readUInt()); setMaxLevel(in->readUInt());
if (in->getVersion() >= VERSION_0027)
{
setValidDataOperator(readValidDataOperator(in));
}
} }
void LayerHelper::writeLayer(DataOutputStream* out, osgTerrain::Layer* layer) void LayerHelper::writeLayer(DataOutputStream* out, osgTerrain::Layer* layer)
@ -196,3 +205,56 @@ osgTerrain::Locator* LayerHelper::readLocator(DataInputStream* in)
return locator; 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

@ -38,8 +38,12 @@ class Layer : public osgTerrain::Layer, public ReadWrite
public: public:
void write(DataOutputStream* out); void write(DataOutputStream* out);
void read(DataInputStream* in); void read(DataInputStream* in);
void writeValidDataOperator(DataOutputStream* out, osgTerrain::ValidDataOperator* validDataOperator);
osgTerrain::ValidDataOperator* readValidDataOperator(DataInputStream* in);
}; };
} }
#endif #endif

View File

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