void readRealList3D( const std::wstring& str, std::vector<std::vector<std::vector<double> > >& vec ) { // ((1.6,2.0,4.9382),(3.78,23.34,039.938367),(938.034,3.0,-3.45,6.9182)) const wchar_t* ch = str.c_str(); const size_t argsize = str.size(); if( argsize == 0 ) { return; } size_t i=0; size_t num_par_open=0; size_t last_token = 0; while( i<argsize ) { if( ch[i] == ',' ) { if( num_par_open == 1 ) { std::vector<std::vector<double> > inner_vec; vec.push_back(inner_vec); readRealList2D( str.substr( last_token, i-last_token ), vec.back() ); last_token = i; } } else if( ch[i] == '(' ) { ++num_par_open; last_token = i; } else if( ch[i] == ')' ) { --num_par_open; if( num_par_open == 0 ) { std::vector<std::vector<double> > inner_vec; vec.push_back(inner_vec); readRealList2D( str.substr( last_token, i-last_token ), vec.back() ); return; } } ++i; } }
void IfcRationalBSplineSurfaceWithKnots::readStepArguments( const std::vector<std::wstring>& args, const boost::unordered_map<int,shared_ptr<IfcPPEntity> >& map ) { const int num_args = (int)args.size(); if( num_args != 13 ){ std::stringstream err; err << "Wrong parameter count for entity IfcRationalBSplineSurfaceWithKnots, expecting 13, having " << num_args << ". Entity ID: " << m_id << std::endl; throw IfcPPException( err.str().c_str() ); } readIntValue( args[0], m_UDegree ); readIntValue( args[1], m_VDegree ); readEntityReferenceList2D( args[2], m_ControlPointsList, map ); m_SurfaceForm = IfcBSplineSurfaceForm::createObjectFromSTEP( args[3] ); if( boost::iequals( args[4], L".F." ) ) { m_UClosed = LOGICAL_FALSE; } else if( boost::iequals( args[4], L".T." ) ) { m_UClosed = LOGICAL_TRUE; } else if( boost::iequals( args[4], L".U." ) ) { m_UClosed = LOGICAL_UNKNOWN; } if( boost::iequals( args[5], L".F." ) ) { m_VClosed = LOGICAL_FALSE; } else if( boost::iequals( args[5], L".T." ) ) { m_VClosed = LOGICAL_TRUE; } else if( boost::iequals( args[5], L".U." ) ) { m_VClosed = LOGICAL_UNKNOWN; } if( boost::iequals( args[6], L".F." ) ) { m_SelfIntersect = LOGICAL_FALSE; } else if( boost::iequals( args[6], L".T." ) ) { m_SelfIntersect = LOGICAL_TRUE; } else if( boost::iequals( args[6], L".U." ) ) { m_SelfIntersect = LOGICAL_UNKNOWN; } readIntList( args[7], m_UMultiplicities ); readIntList( args[8], m_VMultiplicities ); readTypeOfRealList( args[9], m_UKnots ); readTypeOfRealList( args[10], m_VKnots ); m_KnotSpec = IfcKnotType::createObjectFromSTEP( args[11] ); readRealList2D( args[12], m_WeightsData ); }