private List <Polygon> Read(string[] input) { if (!input[0].Trim().Contains(FileUtils.T3dFile.Begin(FileSyntax.T3d.POLY_LIST))) { InvalidSynaxError(0); } if (!input[input.Length - 1].Trim().Contains(FileUtils.T3dFile.End(FileSyntax.T3d.POLY_LIST))) { InvalidSynaxError(input.Length - 1); } for (int line = 1; line < input.Length; line++) { if (input[line].Trim().Contains(FileUtils.T3dFile.Begin(FileSyntax.T3d.POLYGON))) { Polygon polygon = new Polygon(); loadedPolygons.Add(polygon); while (line < input.Length) { if (input[line].Trim().Contains(FileUtils.T3dFile.End(FileSyntax.T3d.POLYGON))) { break; } try { var syntax = GetSyntax(input[line]); var numbers = GetNumbers(input[line]); switch (syntax) { case FileSyntax.T3d.ORIGIN: polygon.Origin = V3d.Parse(numbers, T3D_NUMBER_SEPARATOR); break; case FileSyntax.T3d.NORMAL: polygon.Normal = V3d.Parse(numbers, T3D_NUMBER_SEPARATOR); break; case FileSyntax.T3d.TEXTURE_U: polygon.TextureU = V3d.Parse(numbers, T3D_NUMBER_SEPARATOR); break; case FileSyntax.T3d.TEXTURE_V: polygon.TextureV = V3d.Parse(numbers, T3D_NUMBER_SEPARATOR); break; case FileSyntax.T3d.VERTEX: polygon.Vertexes.Add(V3d.Parse(numbers, T3D_NUMBER_SEPARATOR)); break; } } catch (Exception e) { InvalidSynaxError(line, e.Message); } line++; } if (line >= input.Length) { InvalidSynaxError(line, "Cannot find " + End(FileSyntax.T3d.POLYGON)); } } } return(loadedPolygons); }