Пример #1
0
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));
  }
Пример #2
0
//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;
}