示例#1
0
ConsoleOperation* InterpreterHelper::checkSpecialCommands(std::string & line){
    if(startsWith(line,"!")){
        line = eraseFirst(line,"!");
        return new EmptyOperation(line);
    }

    if(false && startsWith(line,"s")){
        if(startsWith(line,"setgrid")){
            line = eraseFirst(line,"setgrid");

            if(startsWith(line,"xy")){
                CoordinateSystem::setType(TYPE_GRID_XY);
            }else{
                if(startsWith(line,"xz")){
                    CoordinateSystem::setType(TYPE_GRID_XZ);
                }else{
                    if(startsWith(line,"yz")){
                        CoordinateSystem::setType(TYPE_GRID_YZ);
                    }else{
                        CoordinateSystem::setType(TYPE_GRID);
                    }
                }
            }
        }

    }
    return NULL;
}
示例#2
0
void str::trimStart(const char* pChars)
{
    int numBegCharsToRemove = 0;
    const int ourLen = getLen();

    for(int i = 0; i < ourLen; i++)
    {
        const int len = strlen(pChars);
        bool trimDone = false;

        for(int j = 0 ; j < len; j++)
        {
            if(pChars[j] == mpStr[i]) {
                trimDone = true;
                numBegCharsToRemove++;
                break;
            }
        }

        if(!trimDone) {
            break;
        }
    }

    if(numBegCharsToRemove > 0) {
        eraseFirst(numBegCharsToRemove);
    }
}
示例#3
0
bool InterpreterHelper::getArgE(std::string & line, double & arg){
    std::cout << line << std::endl;
    if(getArg(line,arg))
        line = eraseFirst(line,1);
    else
        return false;
    return true;
}
示例#4
0
bool InterpreterHelper::getArg(std::string & line, int & arg){ ///// one integer argument before ',' or ')'
    std::string args = extractUntil(line, ',',')');
    if( ! args.length()){
        args = extractUntil(line,')',')');
    }
    if(args.length()){
        arg = atoi(args.data());
        line = eraseFirst(line, args.length());
        return true;
    }
    return false;
}
示例#5
0
bool InterpreterHelper::getOperation(std::string & line, std::deque<char> & stack){
    if( startsWith(line,".sub(") ){
        line = eraseFirst(line,5);
        stack.push_front(CONTEXT_SUB);
        return true;
    }

    if( startsWith(line,".intersect(") ){
        line = eraseFirst(line,11);
        stack.push_front(CONTEXT_INT);
        return true;
    }

    if( startsWith(line,".add(") ){
        line = eraseFirst(line,5);
        stack.push_front(CONTEXT_ADD);
        return true;
    }

    return false;
}
示例#6
0
bool InterpreterHelper::getArg(std::string & line, double & arg){ ///// one floating point argument before ',' or ')'
    std::string args = extractUntil(line, ',',')');
    if( ! args.length()){
        args = extractUntil(line,')',')');
    }

    if(args.length()){
        getDouble(args,arg);
        line = eraseFirst(line, args.length());
        return true;
    }
    return false;
}
示例#7
0
bool InterpreterHelper::getArgs(std::string & line, IntDimension & dim){
    std::string arg = extractUntil(line,',',')');
    if(arg.length()){

        dim.X = atoi(arg.data());
        line = eraseFirst(line,arg.length() + 1); ///+1 bo ','
        arg = extractUntil(line,',',')');
        if(arg.length() ){

            dim.Y = atoi(arg.data());
            line = eraseFirst(line,arg.length() + 1); /// +1 bo ','
            arg = extractUntil(line,')',')');
            if(arg.length()){

                dim.Z = atoi(arg.data());
                line = eraseFirst(line,arg.length() );
                return true;
            }
        }
    }
    return false;
}
示例#8
0
bool InterpreterHelper::getArgs(std::string & line, Dimension & dim){ ///// arguments in format : arg,arg,arg
    std::string arg = extractUntil(line,',',')');
    if(arg.length()){

        getDouble(arg,dim.X);
        line = eraseFirst(line,arg.length() + 1); ///+1 bo ','
        arg = extractUntil(line,',',')');
        if(arg.length() ){
            getDouble(arg,dim.Y);
            line = eraseFirst(line,arg.length() + 1); /// +1 bo ','
            arg = extractUntil(line,')',')');
            if(arg.length()){

                getDouble(arg,dim.Z);
                line = eraseFirst(line,arg.length());
                return true;
            }
        }
    }
    return false;

}
示例#9
0
bool str::eraseFirstWords(int words, char separator)
{
    int n = 0;
    int found = 0;

    // test one two
    for (n = 0; mpStr[n] && found != words; n++) {
        if (mpStr[n] == separator) {
            found++;
        }
    }

    if (found == words && mpStr[n]) {
        eraseFirst(n);
    }

    return !!found;
}
示例#10
0
std::string InterpreterHelper::eraseFirst(std::string & line, std::string text){
    return eraseFirst(line, text.length());
}
示例#11
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;
}