From 2e62206117189515dd48b1c4b23ec3c1060b68fe Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 21 Dec 2007 12:36:40 +0000 Subject: [PATCH] From David Callue, added support for reading/writing Vec*dArray to .ive plugin --- src/osgPlugins/ive/DataInputStream.cpp | 79 ++++++++++++++++++++++++- src/osgPlugins/ive/DataInputStream.h | 5 +- src/osgPlugins/ive/DataOutputStream.cpp | 47 ++++++++++++++- src/osgPlugins/ive/DataOutputStream.h | 5 +- 4 files changed, 132 insertions(+), 4 deletions(-) diff --git a/src/osgPlugins/ive/DataInputStream.cpp b/src/osgPlugins/ive/DataInputStream.cpp index 514be005f..f6154a9f5 100644 --- a/src/osgPlugins/ive/DataInputStream.cpp +++ b/src/osgPlugins/ive/DataInputStream.cpp @@ -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() ["<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() ["<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() ["<(a)); - break; + break; + case osg::Array::Vec2dArrayType: + writeChar((char)15); + writeVec2dArray(static_cast(a)); + break; + case osg::Array::Vec3dArrayType: + writeChar((char)16); + writeVec3dArray(static_cast(a)); + break; + case osg::Array::Vec4dArrayType: + writeChar((char)17); + writeVec4dArray(static_cast(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(); + writeInt(size); + for(int i=0;isize(); + writeInt(size); + for(int i = 0; i < size; i++){ + writeVec3d((*a)[i]); + } + + if (_verboseOutput) std::cout<<"read/writeVec3dArray() ["<size(); + writeInt(size); + for(int i=0;i