Exemplo n.º 1
0
        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);
        }