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(); } }
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; }
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(); } }