Esempio n. 1
0
void ColladaParser::ReadGeometry(XmlElement* e)
{
	Geometry g;
	g.id = e->Attribute("id");
	g.name = e->Attribute("name");

	{
		auto v = e->Child("mesh")->Childs("source");
		for (int ia = 0; ia < v.size(); ia++)
			g.ReadSource(v[ia]);
	}

	{
		auto v = e->Child("mesh")->Childs("vertices");
		for (int ia = 0; ia < v.size(); ia++)
		{
			Geometry::Vertices vert;
			vert.id = v[ia]->Attribute("id");
			vert.positionSourceId = ReadId(v[ia]->Child("input", "semantic", "POSITION")->Attribute("source"));
			vert.normalSourceId = ReadId(v[ia]->Child("input", "semantic", "NORMAL")->Attribute("source"));
			vert.texcoordSourceId = ReadId(v[ia]->Child("input", "semantic", "TEXCOORD")->Attribute("source"));
			g.vertices.emplace(vert.id, vert);
		}
	}

	auto t = e->Child("mesh")->Child("triangles");
	auto count = ReadInt(t->Attribute("count"));
	g.triangleVerticesId = ReadId(t->Child("input")->Attribute("source"));
	g.triangleIndices = ReadInts(t->Child("p")->content, count * 3);
	geometries.emplace(g.id, g);
}
Esempio n. 2
0
void ColladaParser::Scene::ReadNode(XmlElement* e)
{
	if (e->HasAttribute("type", "JOINT"))
		return;

	Scene::Node n;
	n.id = e->Attribute("id");
	n.name = e->Attribute("name");
	n.matrix = ReadFloats(e->Child("matrix")->content, 16);
	n.geometryId = ReadId(e->Child("instance_geometry")->Attribute("url"));
	this->nodes.emplace(n.id, n);
}
Esempio n. 3
0
void ColladaParser::Parse(const char* colladaFileData)
{
	XmlParser p;
	p.Parse(colladaFileData);

	if (p.root.tagName != "COLLADA")
		throw "expected COLLADA as root element";

	if (!p.root.HasAttribute("xmlns", "http://www.collada.org/2005/11/COLLADASchema") || !p.root.HasAttribute("version", "1.4.1"))
		throw "expected COLLADA as root element";

	XmlElement* root = &p.root;

	{
		auto v = root->Child("library_geometries")->Childs("geometry");

		for (int ia = 0; ia < v.size(); ia++)
			ReadGeometry(v[ia]);
	}

	if (root->HasChild("library_animations"))
	{
		auto v = root->Child("library_animations")->Childs("animation");

		for (int ia = 0; ia < v.size(); ia++)
			ReadAnimations(v[ia]);
	}

	{
		auto v = root->Child("library_visual_scenes")->Childs("visual_scene");

		for (int ia = 0; ia < v.size(); ia++)
		{
			ReadScene(v[ia]);
		}
	}

	auto sceneId = ReadId(root->Child("scene")->Child("instance_visual_scene")->Attribute("url"));
	currentScene = &scenes[sceneId];
	int x = 2;
}
Esempio n. 4
0
Vector<String> PreprocessSchFile(const char *fn)
{
	String s = LoadFile(fn);
	CParser p(s);
	String r = "using namespace Upp;";
	String rr = "using namespace Upp;";
	String S_name;
	int line;
	while(!p.IsEof())
		try {
			line = p.GetLine();
			if(p.Id("TABLE") || p.Id("TABLE_") || p.Id("TYPE") || p.Id("TYPE_")) {
				S_name = "S_" + SchId(p, rr);
				r << "struct " << S_name << " {";
			}
			else
			if(p.Id("TABLE_I") || p.Id("TABLE_I_") || p.Id("TYPE_I") || p.Id("TYPE_I_")) {
				S_name = "S_" + SchId(p, rr);
				p.Char(',');
				String S_base = "S_" + p.ReadId();
				r << "struct " << S_name << " : " << S_base << " {";
			}
			else
			if(p.Id("TABLE_II") || p.Id("TABLE_II_") || p.Id("TYPE_II") || p.Id("TYPE_II_")) {
				S_name = "S_" + SchId(p, rr);
				p.Char(',');
				String S_base = "S_" + p.ReadId();
				p.Char(',');
				String S_base2 = "S_" + p.ReadId();
				r << "struct " << S_name << " : " << S_base << ", " << S_base2 << " {";
			}
			else
			if(p.Id("TABLE_III") || p.Id("TABLE_III_") || p.Id("TYPE_III") || p.Id("TYPE_III_")) {
				S_name = "S_" + SchId(p, rr);
				p.Char(',');
				String S_base = "S_" + p.ReadId();
				p.Char(',');
				String S_base2 = "S_" + p.ReadId();
				p.Char(',');
				String S_base3 = "S_" + p.ReadId();
				r << "struct " << S_name << " : " << S_base << ", " << S_base2 << ", " << S_base3 << " {";
			}
			else
			if(p.Id("END_TABLE") || p.Id("END_TYPE"))
				r << "\t"
					"static const char           TableName[];"
					"static const SqlSet&        ColumnSet();"
					"static SqlSet               ColumnSet(const String& prefix);"
					"static SqlSet               Of(SqlId table);"
					"static const Vector<SqlId>& GetColumnIds();"
					""
					"void                        Clear();"
					""
					"void                        FieldLayoutRaw(FieldOperator& f, const String& prefix = String());"
					"void                        FieldLayout(FieldOperator& f);"
					"operator                    Fields();"
					""
					"bool                        operator==(const " << S_name << "& x) const;"
					"bool                        operator!=(const " << S_name << "& x) const;"
					"String                      ToString() const;"
					""
					"int                         GetCount() const;"
					"SqlId                       GetId(int i) const;"
					"Ref                         GetRef(int i);"
					"Ref                         GetRef(const SqlId& id);"
					"Value                       Get(const SqlId& id) const;"
					"Value                       Get(int i) const;"
					"ValueMap                    Get() const;"
					"void                        Set(int i, const Value& v);"
					"void                        Set(const SqlId& id, const Value& v);"
					"void                        Set(const ValueMap& m);"
					<< S_name << "();"
					<< S_name << "(const ValueMap& m);"
					"};";
			else
			if(p.Id("LONGRAW") || p.Id("LONGRAW_") || p.Id("BLOB") || p.Id("BLOB_") ||
			   p.Id("STRING_") || p.Id("STRING") || p.Id("CLOB") || p.Id("CLOB_"))
				r << "\tString " << ReadId(p, rr) << ";";
			else
			if(p.Id("INT") || p.Id("INT_") || p.Id("SERIAL") || p.Id("ISERIAL"))
				r << "\tint " << ReadId(p, rr) << ";";
			else
			if(p.Id("DOUBLE") || p.Id("DOUBLE_"))
				r << "\tdouble " << ReadId(p, rr) << ";";
			else
			if(p.Id("TIME") || p.Id("TIME_"))
				r << "\tTime " << ReadId(p, rr) << ";";
			else
			if(p.Id("DATE") || p.Id("DATE_"))
				r << "\tDate " << ReadId(p, rr) << ";";
			else
			if(p.Id("BIT") || p.Id("BIT_") || p.Id("BOOL") || p.Id("BOOL_"))
				r << "\tbool " << ReadId(p, rr) << ";";
			else
			if(p.Id("INT_ARRAY") || p.Id("INT_ARRAY_"))
				r << "\tint " << ReadId(p, rr) << "[1];";
			else
			if(p.Id("DOUBLE_ARRAY") || p.Id("DOUBLE_ARRAY_"))
				r << "\tdouble " << ReadId(p, rr) << "[1];";
			else
			if(p.Id("TIME_ARRAY") || p.Id("TIME_ARRAY_"))
				r << "\tTime " << ReadId(p, rr) << "[1];";
			else
			if(p.Id("DATE_ARRAY") || p.Id("DATE_ARRAY_"))
				r << "\tDate " << ReadId(p, rr) << "[1];";
			else
			if(p.Id("BOOL_ARRAY") || p.Id("BOOL_ARRAY_") || p.Id("BIT_ARRAY") || p.Id("BIT_ARRAY_"))
				r << "\tbool " << ReadId(p, rr) << "[1];";
			else
			if(p.Id("SEQUENCE") || p.Id("SEQUENCE_"))
				ReadId(p, rr);
			else
				p.SkipTerm();
			line = p.GetLine() - line;
			for(int i = 0; i < line; ++i) {
				r << '\n';
				rr << '\n';
			}
		}
		catch(CParser::Error)
		{}
	return pick(Vector<String>() << r << rr);
}
Esempio n. 5
0
 void GetRead(int64_t id)
 {
     GetRead ( ReadId ( id ) );
 }