Exemple #1
0
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();

}
Exemple #2
0
	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();
	}
}
Exemple #4
0
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;
}
Exemple #5
0
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;
}