void RendPropAnim::setRendNames(LString val) { // invalidate uid cache m_rendPtrList.clear(); m_rendNameList.clear(); // extract comma-separated name list std::list<LString> ls, tmpl; val.split(',', ls); BOOST_FOREACH (const LString &elem, ls) { LString sobj, srend; int spos = elem.indexOf('/'); if (spos<0) { srend = elem.trim(); if (!srend.isEmpty()) tmpl.push_back(srend); } else { sobj = elem.substr(0, spos).trim(); srend = elem.substr(spos+1).trim(); if (!sobj.isEmpty() && !srend.isEmpty()) tmpl.push_back(sobj+"/"+srend); } m_rendNameList.push_back(nmlist_t::value_type(sobj, srend)); }
//static LScrMatrix4D *LScrMatrix4D::fromStringS(const LString &src) { if (src.equalsIgnoreCase("(identity)")) return MB_NEW LScrMatrix4D(); LString renum("\\s*(\\S+)\\s*"); // remove parentheses LRegExpr re1("\\((.+)\\)"); if (!re1.match(src) || re1.getSubstrCount()<1+1) { // ERROR!! LString msg = LString::format("cannot convert \"%s\" to matrix", src.c_str()); MB_THROW(RuntimeException, msg); return NULL; } LString val = re1.getSubstr(1); std::list<LString> ls; val.split(',', ls); if (ls.size()!=16) { // ERROR!! LString msg = LString::format("cannot convert \"%s\" to matrix", src.c_str()); MB_THROW(RuntimeException, msg); return NULL; } double d; int i=1; LScrMatrix4D *pRes = MB_NEW LScrMatrix4D(); BOOST_FOREACH (LString e, ls) { if (!e.toDouble(&d)) { // ERROR!! delete pRes; LString msg = LString::format("cannot convert \"%s\" to matrix", src.c_str()); MB_THROW(RuntimeException, msg); return NULL; } pRes->Matrix4D::ai(i) = d; ++i; } return pRes; }