public static void WriteMesh(string filename, RectList rects) { List <ulong> palette = FindRgbaPalette(rects); _nodeid = 1; var scene = new ColladaScene { Id = _nodeid++ }; var collada = new Collada(); collada.Scenes.Add(scene); foreach (ulong rgba in palette) { var effect = new ColladaEffect(); Converter.Ulong2Rgba(rgba, out effect.R, out effect.G, out effect.B, out effect.A); var material = new ColladaMaterial { Id = _nodeid++ }; effect.Id = _nodeid++; material.Url = effect.Id; effect.Rgba = rgba; collada.Materials.Add(material); collada.Effects.Add(effect); } foreach (Rect rect in rects) { var geom = new ColladaGeometry { Id = _nodeid++, PositionId = _nodeid++, NormalId = _nodeid++, PositionId2 = _nodeid++, NormalId2 = _nodeid++, VertexId = _nodeid++ }; int material = collada.FindMaterial(rect.Properties.Rgba); geom.Materialid = material; geom.X1 = rect.Pt1[0]; geom.Y1 = rect.Pt1[1]; geom.Z1 = rect.Pt1[2]; geom.X2 = rect.Pt2[0]; geom.Y2 = rect.Pt2[1]; geom.Z2 = rect.Pt2[2]; collada.Geometries.Add(geom); scene.Geometry.Add(geom.Id); } collada.WriteMesh(filename); }
public int FindMaterial(ulong rgba) { foreach (ColladaMaterial material in Materials) { ColladaMaterial materialReadOnly = material; if (Effects.Any(effect => effect.Id == materialReadOnly.Url && effect.Rgba == rgba)) { return(material.Id); } } return(0); }