Integrator XMLReader::LoadIntegrator(QXmlStreamReader &xml_reader) { Integrator result; //First check what type of integrator we're supposed to load QXmlStreamAttributes attribs(xml_reader.attributes()); QStringRef type = attribs.value(QString(), QString("type")); bool is_mesh = false; while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("integrator")) != 0) { xml_reader.readNext(); QString tag(xml_reader.name().toString()); if(is_mesh && QString::compare(tag, QString("maxDepth")) == 0) { xml_reader.readNext(); if(xml_reader.isCharacters()) { result.SetDepth(xml_reader.text().toInt()); } xml_reader.readNext(); } } return result; }
Integrator* XMLReader::LoadIntegrator(QXmlStreamReader &xml_reader) { Integrator* result = NULL; QXmlStreamAttributes attribs(xml_reader.attributes()); QStringRef type = attribs.value(QString(), QString("type")); if(QStringRef::compare(type, QString("directLighting")) == 0) // directlightingintegrator { result = new DirectLightingIntegrator(); } else if(QStringRef::compare(type, QString("raytrace")) == 0) // raytrace integrator { //for this assignment, all trace ray integrator will be directLighting result = new DirectLightingIntegrator(); } else if(QStringRef::compare(type, QString("indirectLighting")) == 0) { result = new Integrator(); } int LightNumber = 1; int BRDFNumber = 1; while(!xml_reader.isEndElement() || QStringRef::compare(xml_reader.name(), QString("integrator")) != 0) { xml_reader.readNext(); QString tag(xml_reader.name().toString()); if(QString::compare(tag, QString("maxDepth")) == 0) { xml_reader.readNext(); if(xml_reader.isCharacters()) { result->SetDepth(xml_reader.text().toInt()); } xml_reader.readNext(); } else if(QString::compare(tag, QString("lightSampleNumber")) == 0) { xml_reader.readNext(); if(xml_reader.isCharacters()) { LightNumber = xml_reader.text().toInt(); } xml_reader.readNext(); } else if(QString::compare(tag, QString("BRDFSampleNumber")) == 0) { xml_reader.readNext(); if(xml_reader.isCharacters()) { BRDFNumber = xml_reader.text().toInt(); } xml_reader.readNext(); } } result->Number_Light = LightNumber; result->Number_BRDF = BRDFNumber; return result; }