private Tecnomapas.TecnoGeo.Geometria.Geometria InterpretaGeometria(int gtype, bool tem_srid, int srid, bool tem_ponto, Decimal pontox, Decimal pontoy, Decimal pontoz, Decimal[] elem_info, Decimal[] ordinates)
        {
            int  int16_1 = (int)Convert.ToInt16(Math.Floor((Decimal)gtype / new Decimal(1000)));
            int  int16_2 = (int)Convert.ToInt16(Math.Floor((Decimal)(gtype - int16_1 * 1000) / new Decimal(100)));
            int  num     = gtype - int16_1 * 1000 - int16_2 * 100;
            bool ehLrs   = int16_2 != 0;

            if (int16_1 != 2 && (int16_1 != 3 || ehLrs) && ((int16_1 != 3 || int16_2 != 3) && (int16_1 != 4 || int16_2 != 3)) && (int16_1 != 4 || int16_2 != 4) || (tem_ponto == elem_info.Length > 0 || elem_info.Length > 0 != ordinates.Length > 0) || (tem_ponto && ehLrs || tem_ponto && num != 1 && num != 4 && num != 5))
            {
                return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
            }
            switch (num)
            {
            case 0:
                return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);

            case 1:
                if (tem_ponto)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria) new Ponto(int16_1 == 2 ? new Posicao(pontox, pontoy) : new Posicao(pontox, pontoy, pontoz), int16_1, ehLrs));
                }
                PontoCollection pontoCollection1 = this.GerarPontos(elem_info, ordinates, int16_1, int16_2, false);
                if (pontoCollection1 == null || pontoCollection1.Count == 0)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                return((Tecnomapas.TecnoGeo.Geometria.Geometria)pontoCollection1[0]);

            case 2:
                LinhaCollection linhaCollection1 = this.GerarLinhas(elem_info, ordinates, int16_1, int16_2, false);
                if (linhaCollection1 == null || linhaCollection1.Count == 0)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                return((Tecnomapas.TecnoGeo.Geometria.Geometria)linhaCollection1[0]);

            case 3:
                PoligonoCollection poligonoCollection1 = this.GerarPoligonos(elem_info, ordinates, int16_1, int16_2, false);
                if (poligonoCollection1 == null || poligonoCollection1.Count == 0)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                return((Tecnomapas.TecnoGeo.Geometria.Geometria)poligonoCollection1[0]);

            case 4:
                if (tem_ponto)
                {
                    Posicao posicao = int16_1 == 2 ? new Posicao(pontox, pontoy) : new Posicao(pontox, pontoy, pontoz);
                    Tecnomapas.TecnoGeo.Geometria.Complexa.Complexa complexa = new Tecnomapas.TecnoGeo.Geometria.Complexa.Complexa(int16_1, ehLrs);
                    complexa.Elementos.Adicionar((Tecnomapas.TecnoGeo.Geometria.Geometria) new Ponto(posicao, int16_1, ehLrs));
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)complexa);
                }
                PontoCollection pontoCollection2 = this.GerarPontos(elem_info, ordinates, int16_1, int16_2, true);
                if (pontoCollection2 == null)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                LinhaCollection linhaCollection2 = this.GerarLinhas(elem_info, ordinates, int16_1, int16_2, true);
                if (linhaCollection2 == null)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                PoligonoCollection poligonoCollection2 = this.GerarPoligonos(elem_info, ordinates, int16_1, int16_2, true);
                if (poligonoCollection2 == null)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                Tecnomapas.TecnoGeo.Geometria.Complexa.Complexa complexa1 = new Tecnomapas.TecnoGeo.Geometria.Complexa.Complexa(ehLrs ? int16_1 - 1 : int16_1, ehLrs);
                for (int index = 0; index < pontoCollection2.Count; ++index)
                {
                    complexa1.Elementos.Adicionar((Tecnomapas.TecnoGeo.Geometria.Geometria)pontoCollection2[index]);
                }
                for (int index = 0; index < linhaCollection2.Count; ++index)
                {
                    complexa1.Elementos.Adicionar((Tecnomapas.TecnoGeo.Geometria.Geometria)linhaCollection2[index]);
                }
                for (int index = 0; index < poligonoCollection2.Count; ++index)
                {
                    complexa1.Elementos.Adicionar((Tecnomapas.TecnoGeo.Geometria.Geometria)poligonoCollection2[index]);
                }
                if (complexa1.Elementos.Count > 0)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)complexa1);
                }
                return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);

            case 5:
                if (tem_ponto)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria) new MultiPonto(new Ponto(int16_1 == 2 ? new Posicao(pontox, pontoy) : new Posicao(pontox, pontoy, pontoz), int16_1, ehLrs), int16_1, ehLrs));
                }
                PontoCollection pontos = this.GerarPontos(elem_info, ordinates, int16_1, int16_2, true);
                if (pontos == null || pontos.Count == 0)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                return((Tecnomapas.TecnoGeo.Geometria.Geometria) new MultiPonto(pontos, ehLrs ? int16_1 - 1 : int16_1, ehLrs));

            case 6:
                LinhaCollection linhas = this.GerarLinhas(elem_info, ordinates, int16_1, int16_2, true);
                if (linhas == null || linhas.Count == 0)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                return((Tecnomapas.TecnoGeo.Geometria.Geometria) new MultiLinha(linhas, ehLrs ? int16_1 - 1 : int16_1, ehLrs));

            case 7:
                PoligonoCollection poligonos = this.GerarPoligonos(elem_info, ordinates, int16_1, int16_2, true);
                if (poligonos == null || poligonos.Count == 0)
                {
                    return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
                }
                return((Tecnomapas.TecnoGeo.Geometria.Geometria) new MultiPoligono(poligonos, ehLrs ? int16_1 - 1 : int16_1, ehLrs));

            default:
                return((Tecnomapas.TecnoGeo.Geometria.Geometria)null);
            }
        }
        private LinhaCollection GerarLinhas(Decimal[] elem_info, Decimal[] ordinates, int dimensoes, int eixoLrs, bool multiplo)
        {
            LinhaCollection linhaCollection = new LinhaCollection();
            int             index1          = 0;
            bool            ehLrs           = eixoLrs != 0;

            while (index1 < elem_info.Length)
            {
                if (elem_info[index1 + 1] == new Decimal(4))
                {
                    try
                    {
                        int   int32_1 = Convert.ToInt32(elem_info[index1 + 2]);
                        Linha linha   = new Linha(ehLrs ? dimensoes - 1 : dimensoes, ehLrs);
                        for (int index2 = 0; index2 < int32_1; ++index2)
                        {
                            index1 += 3;
                            if (elem_info[index1 + 1] != new Decimal(2))
                            {
                                throw new Exception("Tipo heterogĂȘneo de linha errado");
                            }
                            int           int32_2  = Convert.ToInt32(elem_info[index1]);
                            int           fim      = index1 < elem_info.Length - 3 ? Convert.ToInt32(elem_info[index1 + 3]) - (index2 == int32_1 - 1 ? 1 : -1) : ordinates.Length - 1;
                            SegmentoLinha segmento = this.GerarSegmento(ordinates, int32_2, fim, Convert.ToInt32(elem_info[index1 + 2]), dimensoes, eixoLrs);
                            if (segmento == null)
                            {
                                throw new Exception("Falha ao ler um segmento");
                            }
                            linha.Segmentos.Adicionar(segmento);
                        }
                        linhaCollection.Adicionar(linha);
                    }
                    catch
                    {
                    }
                    if (!multiplo)
                    {
                        return(linhaCollection);
                    }
                }
                else if (elem_info[index1 + 1] == new Decimal(2))
                {
                    try
                    {
                        int           int32    = Convert.ToInt32(elem_info[index1]);
                        int           fim      = index1 < elem_info.Length - 3 ? Convert.ToInt32((elem_info[index1 + 3]) - 1) : ordinates.Length - 1;
                        SegmentoLinha segmento = this.GerarSegmento(ordinates, int32, fim, Convert.ToInt32(elem_info[index1 + 2]), dimensoes, eixoLrs);
                        Linha         linha    = new Linha(ehLrs ? dimensoes - 1 : dimensoes, ehLrs);
                        if (segmento == null)
                        {
                            throw new Exception("Falha ao ler um segmento");
                        }
                        linha.Segmentos.Adicionar(segmento);
                        linhaCollection.Adicionar(linha);
                    }
                    catch
                    {
                    }
                    if (!multiplo)
                    {
                        return(linhaCollection);
                    }
                }
                else if (elem_info[index1 + 1] == new Decimal(1005) || elem_info[index1 + 1] == new Decimal(2005))
                {
                    index1 += 3 * Convert.ToInt32(elem_info[index1 + 2]);
                }
                index1 += 3;
            }
            return(linhaCollection);
        }
Example #3
0
 public LinhaCollection List(string Value)
 {
     return(LinhaCollection.List(ReplaceValues(Value)));
 }