/// On-the-fly constructor which uses mostly Surfpack model defaults SharedSurfpackApproxData:: SharedSurfpackApproxData(const String& approx_type, const UShortArray& approx_order, size_t num_vars, short data_order, short output_level): SharedApproxData(NoDBBaseConstructor(), approx_type, num_vars, data_order, output_level), crossValidateFlag(false), numFolds(0), percentFold(0.0), pressFlag(false) { approxType = approx_type; if (approx_order.empty()) approxOrder = 2; else { approxOrder = approx_order[0]; if (approx_order.size() != num_vars) { Cerr << "Error: bad size of " << approx_order.size() << " for approx_order in SharedSurfpackApproxData lightweight " << "constructor. Expected " << num_vars << "." << std::endl; abort_handler(-1); } for (size_t i=1; i<num_vars; ++i) if (approx_order[i] != approxOrder) { Cerr << "Warning: SharedSurfpackApproxData lightweight constructor " << "requires homogeneous approximation order. Promoting to max " << "value." << std::endl; approxOrder = std::max(approx_order[i], approxOrder); } } }
int DIOStreamSubsystem::write( const UShortArray &values ) { if( &values == 0 || values.size() < 1 ) throw IllegalArgumentException( "Invalid values" ); unsigned long bytesTransferred; const int result = DIO_StreamFrame( getDeviceIndex(), values.size(), ( unsigned short * ) values.data(), &bytesTransferred ); if( result != AIOUSB_SUCCESS ) throw OperationFailedException( result ); return bytesTransferred / sizeof( unsigned short ); } // DIOStreamSubsystem::write()
Array* Array_readLocalData(Input& fr) { if (fr[0].matchWord("Use")) { if (fr[1].isString()) { Object* obj = fr.getObjectForUniqueID(fr[1].getStr()); if (obj) { fr+=2; return dynamic_cast<Array*>(obj); } } osg::notify(osg::WARN)<<"Warning: invalid uniqueID found in file."<<std::endl; return NULL; } std::string uniqueID; if (fr[0].matchWord("UniqueID") && fr[1].isString()) { uniqueID = fr[1].getStr(); fr += 2; } int entry = fr[0].getNoNestedBrackets(); const char* arrayName = fr[0].getStr(); unsigned int capacity = 0; fr[1].getUInt(capacity); ++fr; fr += 2; Array* return_array = 0; if (strcmp(arrayName,"ByteArray")==0) { ByteArray* array = new ByteArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { int int_value; if (fr[0].getInt(int_value)) { ++fr; array->push_back(int_value); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"ShortArray")==0) { ShortArray* array = new ShortArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { int int_value; if (fr[0].getInt(int_value)) { ++fr; array->push_back(int_value); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"IntArray")==0) { IntArray* array = new IntArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { int int_value; if (fr[0].getInt(int_value)) { ++fr; array->push_back(int_value); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"UByteArray")==0) { UByteArray* array = new UByteArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int uint_value; if (fr[0].getUInt(uint_value)) { ++fr; array->push_back(uint_value); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"UShortArray")==0) { UShortArray* array = new UShortArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int uint_value; if (fr[0].getUInt(uint_value)) { ++fr; array->push_back(uint_value); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"UIntArray")==0) { UIntArray* array = new UIntArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int uint_value; if (fr[0].getUInt(uint_value)) { ++fr; array->push_back(uint_value); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"UVec4bArray")==0 || strcmp(arrayName,"Vec4ubArray")==0) { Vec4ubArray* array = new Vec4ubArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int r,g,b,a; if (fr[0].getUInt(r) && fr[1].getUInt(g) && fr[2].getUInt(b) && fr[3].getUInt(a)) { fr+=4; array->push_back(osg::Vec4ub(r,g,b,a)); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"FloatArray")==0) { FloatArray* array = new FloatArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { float float_value; if (fr[0].getFloat(float_value)) { ++fr; array->push_back(float_value); } else ++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; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { Vec2 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,"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; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { Vec3 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,"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; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { Vec4 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,"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; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int r,g; if (fr[0].getUInt(r) && fr[1].getUInt(g)) { fr+=2; array->push_back(osg::Vec2b(r,g)); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"Vec3bArray")==0) { Vec3bArray* array = new Vec3bArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int r,g,b; if (fr[0].getUInt(r) && fr[1].getUInt(g) && fr[2].getUInt(b)) { fr+=3; array->push_back(osg::Vec3b(r,g,b)); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"Vec4bArray")==0) { Vec4bArray* array = new Vec4bArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int r,g,b,a; if (fr[0].getUInt(r) && fr[1].getUInt(g) && fr[2].getUInt(b) && fr[3].getUInt(a)) { fr+=4; array->push_back(osg::Vec4b(r,g,b,a)); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"Vec2sArray")==0) { Vec2sArray* array = new Vec2sArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int r,g; if (fr[0].getUInt(r) && fr[1].getUInt(g)) { fr+=2; array->push_back(osg::Vec2s(r,g)); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"Vec3sArray")==0) { Vec3sArray* array = new Vec3sArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int r,g,b; if (fr[0].getUInt(r) && fr[1].getUInt(g) && fr[2].getUInt(b)) { fr+=3; array->push_back(osg::Vec3s(r,g,b)); } else ++fr; } ++fr; return_array = array; } else if (strcmp(arrayName,"Vec4sArray")==0) { Vec4sArray* array = new Vec4sArray; array->reserve(capacity); while (!fr.eof() && fr[0].getNoNestedBrackets()>entry) { unsigned int r,g,b,a; if (fr[0].getUInt(r) && fr[1].getUInt(g) && fr[2].getUInt(b) && fr[3].getUInt(a)) { fr+=4; array->push_back(osg::Vec4s(r,g,b,a)); } else ++fr; } ++fr; return_array = array; } if (return_array) { if (!uniqueID.empty()) fr.registerUniqueIDForObject(uniqueID.c_str(),return_array); } return return_array; }
void Wire::cutWire(osg::Vec3 normal, float dist) { normal.normalize(); DrawArrayLengths *newPrimitives = new DrawArrayLengths(PrimitiveSet::POLYGON); UShortArray *newIndices = new UShortArray(); int startIndex = 0; int index = vert->getNumElements(); for (unsigned int i = 0; i < primitives->getNumPrimitives(); i++) { float oldd = -1; int numInd = 0; for (int v = 0; v < (*primitives)[i]; v++) { osg::Vec3 p = (*vert)[indices->index(startIndex + v)]; float d = (p - normal * dist) * normal; /* Grundidee: * wir laufen allen Punkte von jedem Polygon einmal * durch; liegt der Punkte im "Verbleib" Bereich, wird * wird er einfach kopiert, liegt er ausserhalb, dann * wird er weggelassen * !! Immer wenn ein Wechsel zwischen "verbleibt" und\ * und "weglassen" erfolgt, dann muss mindestens ein * zusaetzlicher Punkt eingefuegt werden. */ if (v == 0 && d >= 0) { newIndices->push_back((*indices)[startIndex + v]); numInd++; } else { if (d < 0) { if (oldd > 0) { osg::Vec3 b = (*vert)[(*indices)[startIndex + v - 1]]; osg::Vec3 r = p - b; float t = (dist - normal * p) / (normal * r); osg::Vec3 newP = p + r * t; osg::Vec3 n1 = (*normals)[(*indices)[startIndex + v]]; osg::Vec3 n2 = (*normals)[(*indices)[startIndex + v - 1]]; osg::Vec3 newN = n1 + (n1 - n2) * t; vert->push_back(newP); normals->push_back(newN); newIndices->push_back(index); index++; numInd++; } else { } } else { if (oldd < 0) { osg::Vec3 b = (*vert)[(*indices)[startIndex + v - 1]]; osg::Vec3 r = p - b; float t = (dist - normal * p) / (normal * r); osg::Vec3 newP = p + r * t; osg::Vec3 n1 = (*normals)[(*indices)[startIndex + v]]; osg::Vec3 n2 = (*normals)[(*indices)[startIndex + v - 1]]; osg::Vec3 newN = n1 + (n1 - n2) * t; vert->push_back(newP); normals->push_back(newN); newIndices->push_back(index); index++; numInd++; } newIndices->push_back((*indices)[startIndex + v]); numInd++; } } oldd = d; } osg::Vec3 p = (*vert)[indices->index(startIndex)]; float d = (p - normal * dist) * normal; if (d < 0) { if (oldd > 0) { osg::Vec3 b = (*vert)[(*indices)[startIndex + (*primitives)[i] - 1]]; osg::Vec3 r = p - b; float t = (dist - normal * p) / (normal * r); osg::Vec3 newP = p + r * t; osg::Vec3 n1 = (*normals)[(*indices)[startIndex]]; osg::Vec3 n2 = (*normals)[(*indices)[startIndex + (*primitives)[i] - 1]]; osg::Vec3 newN = n1 + (n1 - n2) * t; vert->push_back(newP); normals->push_back(newN); newIndices->push_back(index); index++; numInd++; } } else { if (oldd < 0) { osg::Vec3 b = (*vert)[(*indices)[startIndex + (*primitives)[i] - 1]]; osg::Vec3 r = p - b; float t = (dist - normal * p) / (normal * r); osg::Vec3 newP = p + r * t; osg::Vec3 n1 = (*normals)[(*indices)[startIndex]]; osg::Vec3 n2 = (*normals)[(*indices)[startIndex + (*primitives)[i] - 1]]; osg::Vec3 newN = n1 + (n1 - n2) * t; vert->push_back(newP); normals->push_back(newN); newIndices->push_back(index); index++; numInd++; } } newPrimitives->push_back(numInd); startIndex += (*primitives)[i]; } geom->setVertexIndices(newIndices); geom->setNormalIndices(newIndices); geom->removePrimitiveSet(0, geom->getNumPrimitiveSets()); geom->addPrimitiveSet(newPrimitives); primitives = newPrimitives; indices = newIndices; // calcColors(); geom->dirtyBound(); geom->dirtyDisplayList(); }