From David Callue, added support for reading/writing Vec*dArray to .ive plugin

This commit is contained in:
Robert Osfield
2007-12-21 12:36:40 +00:00
parent 815121b0e8
commit 2e62206117
4 changed files with 132 additions and 4 deletions

View File

@@ -475,7 +475,10 @@ osg::Array* DataInputStream::readArray(){
case 11: return readVec4sArray();
case 12: return readVec2bArray();
case 13: return readVec3bArray();
case 14: return readVec4bArray();
case 14: return readVec4bArray();
case 15: return readVec2dArray();
case 16: return readVec3dArray();
case 17: return readVec4dArray();
default: throw Exception("Unknown array type in DataInputStream::readArray()");
}
}
@@ -806,6 +809,80 @@ osg::Vec4sArray* DataInputStream::readVec4sArray()
return a;
}
osg::Vec2dArray* DataInputStream::readVec2dArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec2dArray* a = new osg::Vec2dArray(size);
_istream->read((char*)&((*a)[0]), DOUBLESIZE*2*size);
if (_istream->rdstate() & _istream->failbit)
throw Exception("DataInputStream::readVec2dArray(): Failed to read Vec2d array.");
if (_verboseOutput) std::cout<<"read/writeVec2dArray() ["<<size<<"]"<<std::endl;
if (_byteswap)
{
double *ptr = (double*)&((*a)[0]) ;
for (int i = 0 ; i < size*2 ; i++ )
{
osg::swapBytes((char *)&(ptr[i]), DOUBLESIZE) ;
}
}
return a;
}
osg::Vec3dArray* DataInputStream::readVec3dArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec3dArray* a = new osg::Vec3dArray(size);
_istream->read((char*)&((*a)[0]), DOUBLESIZE*3*size);
if (_istream->rdstate() & _istream->failbit)
throw Exception("DataInputStream::readVec3dArray(): Failed to read Vec3d array.");
if (_verboseOutput) std::cout<<"read/writeVec3dArray() ["<<size<<"]"<<std::endl;
if (_byteswap)
{
double *ptr = (double*)&((*a)[0]) ;
for (int i = 0 ; i < size*3 ; i++ )
{
osg::swapBytes((char *)&(ptr[i]),DOUBLESIZE) ;
}
}
return a;
}
osg::Vec4dArray* DataInputStream::readVec4dArray(){
int size = readInt();
if (size == 0)
return NULL;
osg::Vec4dArray* a = new osg::Vec4dArray(size);
_istream->read((char*)&((*a)[0]), DOUBLESIZE*4*size);
if (_istream->rdstate() & _istream->failbit)
throw Exception("DataInputStream::readVec4dArray(): Failed to read Vec4d array.");
if (_verboseOutput) std::cout<<"read/writeVec4dArray() ["<<size<<"]"<<std::endl;
if (_byteswap) {
double *ptr = (double*)&((*a)[0]) ;
for (int i = 0 ; i < size*4 ; i++ ) {
osg::swapBytes((char *)&(ptr[i]),DOUBLESIZE) ;
}
}
return a;
}
osg::Matrixf DataInputStream::readMatrixf()
{
osg::Matrixf mat;

View File

@@ -82,7 +82,10 @@ public:
osg::Vec4bArray* readVec4bArray();
osg::Vec2sArray* readVec2sArray();
osg::Vec3sArray* readVec3sArray();
osg::Vec4sArray* readVec4sArray();
osg::Vec4sArray* readVec4sArray();
osg::Vec2dArray* readVec2dArray();
osg::Vec3dArray* readVec3dArray();
osg::Vec4dArray* readVec4dArray();
osg::Image* readImage(std::string s);
osg::Image* readImage(IncludeImageMode mode);

View File

@@ -400,7 +400,19 @@ void DataOutputStream::writeArray(const osg::Array* a){
case osg::Array::Vec4bArrayType:
writeChar((char)14);
writeVec4bArray(static_cast<const osg::Vec4bArray*>(a));
break;
break;
case osg::Array::Vec2dArrayType:
writeChar((char)15);
writeVec2dArray(static_cast<const osg::Vec2dArray*>(a));
break;
case osg::Array::Vec3dArrayType:
writeChar((char)16);
writeVec3dArray(static_cast<const osg::Vec3dArray*>(a));
break;
case osg::Array::Vec4dArrayType:
writeChar((char)17);
writeVec4dArray(static_cast<const osg::Vec4dArray*>(a));
break;
default: throw Exception("Unknown array type in DataOutputStream::writeArray()");
}
}
@@ -578,6 +590,39 @@ void DataOutputStream::writeVec4bArray(const osg::Vec4bArray* a)
if (_verboseOutput) std::cout<<"read/writeVec4bArray() ["<<size<<"]"<<std::endl;
}
void DataOutputStream::writeVec2dArray(const osg::Vec2dArray* a)
{
int size = a->size();
writeInt(size);
for(int i=0;i<size;i++){
writeVec2d((*a)[i]);
}
if (_verboseOutput) std::cout<<"read/writeVec2dArray() ["<<size<<"]"<<std::endl;
}
void DataOutputStream::writeVec3dArray(const osg::Vec3dArray* a)
{
int size = a->size();
writeInt(size);
for(int i = 0; i < size; i++){
writeVec3d((*a)[i]);
}
if (_verboseOutput) std::cout<<"read/writeVec3dArray() ["<<size<<"]"<<std::endl;
}
void DataOutputStream::writeVec4dArray(const osg::Vec4dArray* a)
{
int size = a->size();
writeInt(size);
for(int i=0;i<size;i++){
writeVec4d((*a)[i]);
}
if (_verboseOutput) std::cout<<"read/writeVec4dArray() ["<<size<<"]"<<std::endl;
}
void DataOutputStream::writeMatrixf(const osg::Matrixf& mat)
{
for(int r=0;r<4;r++)

View File

@@ -77,7 +77,10 @@ public:
void writeVec4sArray(const osg::Vec4sArray* a);
void writeVec2bArray(const osg::Vec2bArray* a);
void writeVec3bArray(const osg::Vec3bArray* a);
void writeVec4bArray(const osg::Vec4bArray* a);
void writeVec4bArray(const osg::Vec4bArray* a);
void writeVec2dArray(const osg::Vec2dArray* a);
void writeVec3dArray(const osg::Vec3dArray* a);
void writeVec4dArray(const osg::Vec4dArray* a);
void writeMatrixf(const osg::Matrixf& mat);
void writeMatrixd(const osg::Matrixd& mat);