Exemplo n.º 1
0
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();
	}
}
Exemplo n.º 2
0
bool Scene::parse(const string &filename) {
    QFile* file = new QFile(filename.c_str());
    if (!file->open(QIODevice::ReadOnly | QIODevice::Text)) {
        QMessageBox::critical(0,
                              "FermaRenderer",
                              "Couldn't open the selected scene file.",
                              QMessageBox::Ok);
        return false;
    }

    QXmlStreamReader xml(file);

    while(!xml.atEnd() && !xml.hasError()) {

        QXmlStreamReader::TokenType token = xml.readNext();

        if(token == QXmlStreamReader::StartDocument) {
            continue;
        }

        if(token == QXmlStreamReader::StartElement) {

            // parse different parts

            if(xml.name() == "material") {
                materials.push_back(parseMaterial(xml));
            }

            if(xml.name() == "shape") {
                shapes.push_back(parseShape(xml));
            }

            if(xml.name() == "object") {
                objects.push_back(parseObject(xml));
            }

            if(xml.name() == "config") {
                config = parseConfigurations(xml);
            }

            if(xml.name() == "camera") {
                camera = parseCamera(xml);
            }
        }
    }

    if(xml.hasError()) {
        QMessageBox::critical(0,
                              "FermaRenderer",
                              xml.errorString(),
                              QMessageBox::Ok);
        return false;
    }


    xml.clear();

    cout << "done parsing." << endl;

    return true;
}
Exemplo n.º 3
0
void ofxSymbolItem::setup(ofxDocument *doc) {
    
    ofxXmlSettings xml;
    this->doc = doc;
    
    if (xml.loadFile("LIBRARY/"+href)) {
        xml.pushTag("DOMSymbolItem");
        xml.pushTag("timeline");
        xml.pushTag("DOMTimeline");
        xml.pushTag("layers");
        for (int k=0; k<xml.getNumTags("DOMLayer");k++ ) {
            layer l;
            l.name = xml.getAttribute("DOMLayer", "name", "",k);
            l.currentFrame = 0;
            l.endTime = 0;
            xml.pushTag("DOMLayer",k);
            xml.pushTag("frames");
            for (int j=0; j<xml.getNumTags("DOMFrame"); j++) {
                frame f;
                f.index = xml.getAttribute("DOMFrame","index",1,j)-1; // flash frame start at 1
                f.duration = xml.getAttribute("DOMFrame","duration",1,j);
                
                
                xml.pushTag("DOMFrame",j);
                xml.pushTag("elements");
                for (int i=0; i<xml.getNumTags("DOMBitmapInstance"); i++) {
                    string libraryItemName = xml.getAttribute("DOMBitmapInstance", "libraryItemName", "",i);
                    xml.pushTag("DOMBitmapInstance",i);
                    ofxSymbolInstance si = parseInstance(xml);
                    si.bitmapItem = doc->getBitmapItem(libraryItemName);
                    //                if (bi.transformationPoint.empty()) {
                    //                    bi.transformationPoint.push_back(ofVec2f(bi.bitmapItem->width/2,bi.bitmapItem->height/2));
                    //                }
                    xml.popTag();
                    
                    si.type = BITMAP_INSTANCE;
                    f.instances.push_back(si);
                }
                for (int i=0; i<xml.getNumTags("DOMSymbolInstance"); i++) {
                    xml.pushTag("DOMSymbolInstance",i);
                    ofxSymbolInstance si = parseInstance(xml);
                    xml.popTag();
                    //                si.itemID = doc->itemsMap[];
                    si.name = xml.getAttribute("DOMSymbolInstance", "name", "",i);
                    si.type = SYMBOL_INSTANCE;
                    si.symbolItem = doc->getSymbolItem(xml.getAttribute("DOMSymbolInstance", "libraryItemName", "",i));
                    f.instances.push_back(si);
                }
                for (int i=0; i<xml.getNumTags("DOMShape"); i++) {
                    
                    xml.pushTag("DOMShape",i);
                    ofxSymbolInstance si;
                    si.shapeIndex = shapes.size();
                    shapes.push_back(parseShape(xml));
                    
                    if (!shapes.back().bitmapFill.empty()) {
                        ofxBitmapFill &bf = shapes.back().bitmapFill.front();
                        bf.bitmapItem = doc->getBitmapItem(bf.bitmapPath);
                    }
                    xml.popTag();
                    si.type = SHAPE;
                    f.instances.push_back(si);
                }
                for (int i=0; i<xml.getNumTags("DOMTLFText"); i++) {
                    tlfText tlf;
                    
                    tlf.width = xml.getAttribute("DOMTLFText", "right", 0,i)/PIXEL_SCALE;
                    tlf.height = xml.getAttribute("DOMTLFText", "bottom", 0,i)/PIXEL_SCALE;
                    
                    xml.pushTag("DOMTLFText",i);
                    
                    xml.pushTag("matrix");
                    float a = xml.getAttribute("Matrix", "a", 1.0);
                    float b = xml.getAttribute("Matrix", "b", 0.0);
                    float c = xml.getAttribute("Matrix", "c", 0.0);
                    float d = xml.getAttribute("Matrix", "d", 1.0);
                    float tx = xml.getAttribute("Matrix", "tx", 0.0);
                    float ty = xml.getAttribute("Matrix", "ty", 0.0);
                    
                    //bi.mat = ofMatrix4x4(a, c, 0, tx, b, d, 0, ty, 0, 0, 1, 0, 0, 0, 0, 1);
                    //bi.mat = ofMatrix4x4(sqrt(a*a+b*b)/20, 0, 0, 0, 0,sqrt(c*c+d*d)/20, 0, 0, 0, 0, 1, 0, tx, ty, 0, 1);
                    
                    //                bi.width = (float)doc.items[bi.path].frameRight/PIXEL_SCALE;
                    //                bi.height = (float)doc.items[bi.path].frameBottom/PIXEL_SCALE;
                    //                bi.href = doc.items[bi.path].href;
                    
                    tlf.translation = ofVec2f(tx,ty);
                    tlf.sx = sqrt(a*a+b*b)/PIXEL_SCALE;
                    tlf.sy = sqrt(c*c+d*d)/PIXEL_SCALE;
                    tlf.r = atan2( b, a );
                    xml.popTag();
                    
                    xml.pushTag("markup");
                    xml.pushTag("tlfTextObject");
                    xml.pushTag("TextFlow");
                    
                    for (int j=0; j<xml.getNumTags("p"); j++) {
                        xml.pushTag("p",j);
                        for (int k=0; k<xml.getNumTags("span"); k++) {
                            string l = xml.getValue("span", "",k);
                            if (!l.empty()) {
                                span s;
                                s.text = l;
                                s.fontSize = xml.getAttribute("span", "fontSize", 12,k);
                                s.color = ofHexToInt(xml.getAttribute("span", "color", "",k).substr(1)); // eliminate the hex #
                                tlf.spans.push_back(s);
                                tlf.text.append(l+"\n");
                            }
                            
                            
                            
                        }
                        
                        xml.popTag();
                    }
                    
                    
                    xml.popTag(); // TextFlow
                    xml.popTag();
                    xml.popTag();
                    
                    
                    xml.popTag(); // DOMTLFText
                    
                    //                cout << tlf.text << endl;
                    f.texts.push_back(tlf);
                }
                
                
                xml.popTag();
                xml.popTag();
                l.frames.push_back(f);
                
            }
            
            
            
            
            xml.popTag();
            xml.popTag();
            layers.push_back(l);
        }
        
        
    
        xml.popTag();
        xml.popTag();
        xml.popTag();
        xml.popTag();
    }
    
}