diff --git a/src/osgPlugins/osg/Geometry.cpp b/src/osgPlugins/osg/Geometry.cpp index 58e952e11..00db03ea0 100644 --- a/src/osgPlugins/osg/Geometry.cpp +++ b/src/osgPlugins/osg/Geometry.cpp @@ -550,6 +550,23 @@ Array* Array_readLocalData(Input& fr) ++fr; return_array = array; } + else if (strcmp(arrayName,"DoubleArray")==0) + { + DoubleArray* array = new DoubleArray; + array->reserve(capacity); + while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) + { + double double_value; + if (fr[0].getFloat(double_value)) + { + ++fr; + array->push_back(double_value); + } + else ++fr; + } + ++fr; + return_array = array; + } else if (strcmp(arrayName,"Vec2Array")==0) { Vec2Array* array = new Vec2Array; @@ -567,6 +584,23 @@ Array* Array_readLocalData(Input& fr) ++fr; return_array = array; } + else if (strcmp(arrayName,"Vec2dArray")==0) + { + Vec2dArray* array = new Vec2dArray; + array->reserve(capacity); + while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) + { + Vec2d v; + if (fr[0].getFloat(v.x()) && fr[1].getFloat(v.y())) + { + fr += 2; + array->push_back(v); + } + else ++fr; + } + ++fr; + return_array = array; + } else if (strcmp(arrayName,"Vec3Array")==0) { Vec3Array* array = new Vec3Array; @@ -584,6 +618,23 @@ Array* Array_readLocalData(Input& fr) ++fr; return_array = array; } + else if (strcmp(arrayName,"Vec3dArray")==0) + { + Vec3dArray* array = new Vec3dArray; + array->reserve(capacity); + while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) + { + Vec3d v; + if (fr[0].getFloat(v.x()) && fr[1].getFloat(v.y()) && fr[2].getFloat(v.z())) + { + fr += 3; + array->push_back(v); + } + else ++fr; + } + ++fr; + return_array = array; + } else if (strcmp(arrayName,"Vec4Array")==0) { Vec4Array* array = new Vec4Array; @@ -601,6 +652,23 @@ Array* Array_readLocalData(Input& fr) ++fr; return_array = array; } + else if (strcmp(arrayName,"Vec4dArray")==0) + { + Vec4dArray* array = new Vec4dArray; + array->reserve(capacity); + while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) + { + Vec4d v; + if (fr[0].getFloat(v.x()) && fr[1].getFloat(v.y()) && fr[2].getFloat(v.z()) && fr[3].getFloat(v.w())) + { + fr += 4; + array->push_back(v); + } + else ++fr; + } + ++fr; + return_array = array; + } else if (strcmp(arrayName,"Vec2bArray")==0) { Vec2bArray* array = new Vec2bArray; @@ -835,6 +903,46 @@ bool Array_writeLocalData(const Array& array,Output& fw) return true; } break; + case(Array::DoubleArrayType): + { + int prec = fw.precision(15); + const DoubleArray& carray = static_cast(array); + fw<(array); + fw<(array); + fw<(array); + fw<(array);