|
楼主 |
发表于 2014-6-20 17:23:03
|
显示全部楼层
通过查找Aaary找到了一个能用的
- switch(array.getType())
- {
- case(Array::ByteArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const ByteArray::ElementDataType* base = static_cast<const ByteArray::ElementDataType*>(array.getDataPointer());
- writeArrayAsInts(fw,&base[0], &base[array.getNumElements()]);
- return true;
- }
- break;
- case(Array::ShortArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const ShortArray::ElementDataType* base = static_cast<const ShortArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()]);
- return true;
- }
- break;
- case(Array::IntArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const IntArray::ElementDataType* base = static_cast<const IntArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()]);
- return true;
- }
- break;
- case(Array::UByteArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const UByteArray::ElementDataType* base = static_cast<const UByteArray::ElementDataType*>(array.getDataPointer());
- writeArrayAsInts(fw,&base[0], &base[array.getNumElements()]);
- return true;
- }
- break;
- case(Array::UShortArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const UShortArray::ElementDataType* base = static_cast<const UShortArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()]);
- return true;
- }
- break;
- case(Array::UIntArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const UIntArray::ElementDataType* base = static_cast<const UIntArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()]);
- return true;
- }
- break;
- case(Array::Vec4ubArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec4ubArray::ElementDataType* base = static_cast<const Vec4ubArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- return true;
- }
- break;
- case(Array::FloatArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const FloatArray::ElementDataType* base = static_cast<const FloatArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()]);
- return true;
- }
- break;
- case(Array::Vec2ArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec2Array::ElementDataType* base = static_cast<const Vec2Array::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- return true;
- }
- break;
- case(Array::Vec3ArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec3Array::ElementDataType* base = static_cast<const Vec3Array::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- return true;
- }
- break;
- case(Array::Vec4ArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec4Array::ElementDataType* base = static_cast<const Vec4Array::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- return true;
- }
- break;
- case(Array::DoubleArrayType):
- {
- int prec = fw.precision(15);
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const DoubleArray::ElementDataType* base = static_cast<const DoubleArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()]);
- fw.precision(prec);
- return true;
- }
- break;
- case(Array::Vec2dArrayType):
- {
- int prec = fw.precision(15);
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec2dArray::ElementDataType* base = static_cast<const Vec2dArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- fw.precision(prec);
- return true;
- }
- break;
- case(Array::Vec3dArrayType):
- {
- int prec = fw.precision(15);
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec3dArray::ElementDataType* base = static_cast<const Vec3dArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- fw.precision(prec);
- return true;
- }
- break;
- case(Array::Vec4dArrayType):
- {
- int prec = fw.precision(15);
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec4dArray::ElementDataType* base = static_cast<const Vec4dArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- fw.precision(prec);
- return true;
- }
- break;
- case(Array::Vec2sArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec2sArray::ElementDataType* base = static_cast<const Vec2sArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()], 3);
- return true;
- }
- break;
- case(Array::Vec3sArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec3sArray::ElementDataType* base = static_cast<const Vec3sArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()], 2);
- return true;
- }
- break;
- case(Array::Vec4sArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec4sArray::ElementDataType* base = static_cast<const Vec4sArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()], 1);
- return true;
- }
- break;
- case(Array::Vec2bArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec2bArray::ElementDataType* base = static_cast<const Vec2bArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- return true;
- }
- break;
- case(Array::Vec3bArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec3bArray::ElementDataType* base = static_cast<const Vec3bArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- return true;
- }
- break;
- case(Array::Vec4bArrayType):
- {
- fw<<array.className()<<" "<<array.getNumElements()<<std::endl;
- const Vec4bArray::ElementDataType* base = static_cast<const Vec4bArray::ElementDataType*>(array.getDataPointer());
- writeArray(fw,&base[0], &base[array.getNumElements()],1);
- return true;
- }
- break;
- case(Array::ArrayType):
- default:
- return false;
- }
- }
复制代码
然后
- const osg::Vec3Array::ElementDataType* base =
- static_cast<const osg::Vec3Array::ElementDataType*>(datas->getDataPointer());
- osg::ref_ptr<osg::Vec3Array> pts = new osg::Vec3Array;
- osg::Geometry::ArrayData type = geometryj->getVertexData();
- int Num = datas->getNumElements();
- int arraytype = datas->getType();
- for (int i = 0 ; i < Num ; i ++)
- {
- osg::Vec3f f = base[i];
- }
复制代码
应该可行吧····
是不是osg里面的强制转换都是靠着
const osg::Vec3Array::ElementDataType* base =
static_cast<const osg::Vec3Array::ElementDataType*>(datas->getDataPointer());
这种啊····· |
|