/**Função que prepara as figuras para desenhar a partir de uma fonte .xml e invoca o ciclo glut*/ int gerar_cena(vector<string> args) { string filename; string form; if (args.size() < 2){ cout << ERROR_NUMBER_ARGS; return -1; } try{ filename = args.at(1); if (isXML(filename) && lookUpFile(filename)){ printf("a recolher dados para desenhar cena ...\n"); readFromXML(filename); // Internamente à leitura geramos os modelos enquanto que na 1ª etapa // eram gerados nesta mesma função // Chamada explícita para desenhar cena prepare_glut(); } } catch (invalid_argument ia){ cout << ERROR_INVALID_ARGS; } return -1; }
/**Função que prepara as figuras para desenhar a partir de uma fonte .xml e invoca o ciclo glut*/ int gerar_cena(vector<string> args) { string filename; string form; if (args.size() < 2){ cout << ERROR_NUMBER_ARGS; return -1; } try{ filename = args.at(1); if (isXML(filename) && lookUpFile(filename)){ printf("a recolher dados para desenhar cena ...\n"); vector<string> files = readFromXML(filename); for (std::vector<string>::iterator it = files.begin(); it != files.end(); ++it){ ifstream f((*it)); f >> form; Forma* s; if (form.compare(FORMA_RECTANGULO) == 0){ s = new Rectangulo(); } else if (form.compare(FORMA_TRIANGULO) == 0){ s = new Triangulo(); } else if (form.compare(FORMA_CIRCULO) == 0){ s = new Circulo(); } else if (form.compare(FORMA_PARALEL) == 0){ s = new Paralelepipedo(); } else if (form.compare(FORMA_ESFERA)==0){ s = new Esfera(); } else if (form.compare(FORMA_CONE)==0){ s = new Cone(); } s->read3DfromFile((*it)); Formas.push_back(s); } // Chamada explícita para desenhar cena prepare_glut(); } } catch (invalid_argument ia){ cout << ERROR_INVALID_ARGS; } return -1; }