void parseFile(char * inputFilePath){ FILE * fp = fopen(inputFilePath, "r"); char inputBuffer[2048]; char * shapeToken = NULL; int lineCounter = 0; GLfloat currentReflection = 0.0; GLfloat currentOpacity = 1.0; GLfloat currentRefractIndex = 1.0; if(fp == NULL){ printf("Error could not open the file %s", inputFilePath); deallocExit(0); } do{ fgets(inputBuffer, 2048, fp); if(strlen(inputBuffer) > 1){ shapeToken = strtok(inputBuffer, PARSE_DELIMITERS); if(strcmp(shapeToken, "triangle") == 0){ parseTriangle(currentRefractIndex); } else if(strcmp(shapeToken, "sphere") == 0){ parseSphere(currentRefractIndex); } else if(strcmp(shapeToken, "light") == 0){ parseLight(); } else if(strcmp(shapeToken, "lens") == 0){ parseLens(); } else{ /*Lines starting with '#' are comments, and are ignored*/ if(shapeToken[0] != '#'){ printf("Warning: Ignoring unrecognized input on line %d.\n", lineCounter); } } } lineCounter++; } while((feof(fp) == 0) && (ferror(fp) == 0)); sortLensList(); }
void Scene::parseScene(string sceneText){ char buffer[300]; FILE *fp; cout <<" yar:"<< sceneText << endl; fflush(stdout); fp = fopen(sceneText.c_str(), "r"); my_assert(fp, "can't open spec"); cout << "END HERE " << endl; fflush(stdout); while(!feof(fp)){ fgets(buffer, 300, fp); //Used to suppress warning of fgets //Used to suppress warning of len printf("read line: %s\n", buffer); switch (buffer[0]) { case '#': printf("NOPE \n"); break; case '1': case '2': case '3': case '4': case '5': case '6': //read in the cubei printf("READING SHAPE\n"); parseObject(buffer); break; //etc case 'l': parseLight(buffer); break; case 'c': parseCamera(buffer); break; default: break; } } }
void SceneParser::parse() { nsUtil::Timer timer = nsUtil::Timer(); TiXmlDocument scene(_fileName); if (!scene.LoadFile()) { cerr << "error while loading" << endl; cerr << "error #" << scene.ErrorId() << " : " << scene.ErrorDesc() << endl; exit(-1); } else { //Timer Start timer.start(); TiXmlHandle hdl(&scene); TiXmlElement *elem = hdl.FirstChildElement().FirstChildElement().Element(); if (!elem) { cerr << "The node to reach does not exist" << endl; exit(-1); } //Browse every node while (elem) { if ((std::string) elem->Value() == "screenSetup") { screenSetup(elem); } else if ((std::string) elem->Value() == "shape") { Shape *s = parseShape(elem); _shapes.add(s); } else if ((std::string) elem->Value() == "light") { parseLight(elem); } else if ((std::string) elem->Value() == "camera") { parseCamera(elem); } else { cerr << "Invalid description: " << (std::string) elem->Value() << " does not exist.\nPlease, check the spelling and try again." << endl; exit(-1); } elem = elem->NextSiblingElement(); } int time = timer.getTicks(); cout << "\nParsing time: " << time/1000.0 << "s\n" << endl; parsingInfo(); } }
Scene* Parser::parseScene(){ /// xml_node scene = root.child("scene"); // optional name Scene* _s; if (scene.attribute("name") != NULL) _s = new Scene(scene.attribute("name").value()); else _s = Scene::New(); // optional settings xml_node op; op = scene.child("background"); float x, y, z; if (op != NULL) { const char* back = op.text().as_string(); sscanf(back, "%f %f %f", &x, &y, &z); _s->backgroundColor = Color(x, y, z); scene.remove_child("background"); } op = scene.child("ambient"); if (op != NULL) { const char* amb = op.text().as_string(); sscanf(amb, "%f %f %f", &x, &y, &z); _s->ambientLight = Color(x, y, z); scene.remove_child("ambient"); } // processing the objets in the scene xml_object_range<xml_node_iterator> objets = scene.children(); Light* light; for (xml_node_iterator sceneElement = objets.begin(); sceneElement != objets.end(); ++sceneElement) { if (strcmp(sceneElement->name(), "mesh") == 0) _s->addActor(parseMesh(sceneElement)); if (strcmp(sceneElement->name(), "sphere") == 0) _s->addActor(parseSphere(sceneElement)); if (strcmp(sceneElement->name(), "box") == 0) _s->addActor(parseBox(sceneElement)); if (strcmp(sceneElement->name(), "cone") == 0) _s->addActor(parseCone(sceneElement)); if (strcmp(sceneElement->name(), "cylinder") == 0) _s->addActor(parseCylinder(sceneElement)); else if (strcmp(sceneElement->name(), "light") == 0){ light = parseLight(sceneElement); _s->addLight(light); } } return _s; }
StyleParseResult Parser::parse(const std::string& json) { rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator> document; document.Parse<0>(json.c_str()); if (document.HasParseError()) { std::stringstream message; message << document.GetErrorOffset() << " - " << rapidjson::GetParseError_En(document.GetParseError()); return std::make_exception_ptr(std::runtime_error(message.str())); } if (!document.IsObject()) { return std::make_exception_ptr(std::runtime_error("style must be an object")); } if (document.HasMember("version")) { const JSValue& versionValue = document["version"]; const int version = versionValue.IsNumber() ? versionValue.GetInt() : 0; if (version != 8) { Log::Warning(Event::ParseStyle, "current renderer implementation only supports style spec version 8; using an outdated style will cause rendering errors"); } } if (document.HasMember("name")) { const JSValue& value = document["name"]; if (value.IsString()) { name = { value.GetString(), value.GetStringLength() }; } } if (document.HasMember("center")) { const JSValue& value = document["center"]; conversion::Error error; auto convertedLatLng = conversion::convert<LatLng>(value, error); if (convertedLatLng) { latLng = *convertedLatLng; } else { Log::Warning(Event::ParseStyle, "center coordinate must be a longitude, latitude pair"); } } if (document.HasMember("zoom")) { const JSValue& value = document["zoom"]; if (value.IsNumber()) { zoom = value.GetDouble(); } } if (document.HasMember("bearing")) { const JSValue& value = document["bearing"]; if (value.IsNumber()) { bearing = value.GetDouble(); } } if (document.HasMember("pitch")) { const JSValue& value = document["pitch"]; if (value.IsNumber()) { pitch = value.GetDouble(); } } if (document.HasMember("transition")) { parseTransition(document["transition"]); } if (document.HasMember("light")) { parseLight(document["light"]); } if (document.HasMember("sources")) { parseSources(document["sources"]); } if (document.HasMember("layers")) { parseLayers(document["layers"]); } if (document.HasMember("sprite")) { const JSValue& sprite = document["sprite"]; if (sprite.IsString()) { spriteURL = { sprite.GetString(), sprite.GetStringLength() }; } } if (document.HasMember("glyphs")) { const JSValue& glyphs = document["glyphs"]; if (glyphs.IsString()) { glyphURL = { glyphs.GetString(), glyphs.GetStringLength() }; } } return nullptr; }