示例#1
0
bool InterpreterHelper::getTransformation(std::string & line, AbstractPrimitive * prim,Dimension & temp){
    if(startsWith(line,".rot")){ ///rotation
        line = eraseFirst(line,4);
        if(line.at(0) != '('){ ////only one arg?
            std::string temp;
            char t = line.at(0);
            line = eraseFirst(line,2);
            temp=extractUntil(line,')',')');
            if(!temp.length()) return false;
            line = eraseFirst(line,temp.length()+1); ////+ 1 bo ')'
            switch(t){
                case 'x' :
                    prim->getRotation().X = atof(temp.data()); break;
                case 'y' :
                    prim->getRotation().Y = atof(temp.data()); break;
                case 'z' :
                    prim->getRotation().Z = atof(temp.data()); break;
                default : return false;
            }

            return true;
        }else{
            line = eraseFirst(line,1);
            if(getArgs(line,temp)){
                line = eraseFirst(line,1);
                prim->getRotation() = temp;
                return true;
            }else
                return false;
        }
    }

    if(startsWith(line,".transl")){ ///translation
        line = eraseFirst(line,7);
        if(line.at(0) != '('){ ////only one arg?
            std::string temp;
            char t = line.at(0);
            line = eraseFirst(line,2);
            temp=extractUntil(line,')',')');
            if(!temp.length()) return false;
            switch(t){
                case 'x' :
                    prim->getPosition().X = atof(temp.data()); break;
                case 'y' :
                    prim->getPosition().Y = atof(temp.data()); break;
                case 'z' :
                    prim->getPosition().Z = atof(temp.data()); break;
                default : return false;
            }

            line = eraseFirst(line,temp.length()+1); ////+ 1 bo ')'
            return true;
        }else{
            line = eraseFirst(line,1);
            if(getArgs(line,temp)){
                line = eraseFirst(line,1);
                prim->getPosition() = temp;
                return true;
            }else
                return false;
        }
    }
    return false;
}