From David Callue, added support for reading/writing Vec*dArray to .ive plugin
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user