Exemple #1
0
        public Poligonos(IList <LineSLT> Bordes)
        {
            _Inicializa();

            //obtengo cada uno de los distintos polígonos cerrados
            IList <Shape> Pols = Shape.GenerarPoligonos(Bordes);

            IList <bool> Usados = new List <bool>(Pols.Count);

            for (int t = 0; t < Pols.Count; t++)
            {
                Usados.Add(false);
            }

            //veo que polígonos no están contenidos por otros
            for (int S = 0; S < Pols.Count; S++)
            {
                bool Contenido = false;
                for (int s = 0; s < Pols.Count; s++)
                {
                    if (S != s && Pols[s].ContieneA(Pols[S]))
                    {
                        Contenido = true;
                        break;
                    }
                }

                if (!Contenido)
                {
                    //he encontrado un borde exterior
                    Poligono TempPol = new Poligono(Pols[S]);
                    Usados[S] = true;

                    //busco sus islas
                    for (int i = 0; i < Pols.Count; i++)
                    {
                        if (S != i && Pols[S].ContieneA(Pols[i]))
                        {
                            TempPol.AddIsla(Pols[i]);
                            Usados[i] = true;
                        }
                    }

                    this._Poligonos.Add(TempPol);
                    Bownding.Actualizar(TempPol.Bownding.Maximos);
                    Bownding.Actualizar(TempPol.Bownding.Minimos);
                }
            }

            for (int r = 0; r < Pols.Count; r++)
            {
                if (!Usados[r])
                {
                    Poligono restPol = new Poligono(Pols[r]);
                    this._Poligonos.Add(restPol);
                    Bownding.Actualizar(restPol.Bownding.Maximos);
                    Bownding.Actualizar(restPol.Bownding.Minimos);
                }
            }
        }
Exemple #2
0
 public Shape(IList <Punto> Puntos)
 {
     _Inicializa();
     foreach (Punto p in Puntos)
     {
         _Puntos.Add(p);
         Bownding.Actualizar(p);
     }
 }
Exemple #3
0
 public Shape(IList <VertexSLT> Vertexs)
 {
     _Inicializa();
     foreach (VertexSLT v in Vertexs)
     {
         Punto p = new Punto(v.X, v.Y, v.Z);
         _Puntos.Add(p);
         Bownding.Actualizar(p);
     }
 }
Exemple #4
0
        public Poligono(IList <LineSLT> Bordes)
        {
            _Inicializa();
            //obtengo cada uno de los distintos polígonos cerrados
            IList <Shape> Pols = Shape.GenerarPoligonos(Bordes);

            //Ordeno por superficie y me quedo con el mayor para ser el exterior
            Pols = Pols.OrderByDescending(p => p.Superficie).ToList <Shape>();

            if (Pols.Count > 0)//por lo menos tiene el exterior
            {
                _Exterior = Pols[0];

                if (Pols.Count > 1)//Contiene islas
                {
                    for (int i = 1; i < Pols.Count; i++)
                    {
                        _Islas.Add(Pols[i]);
                    }
                }
            }

            //Normalizo los polígonos
            if (_Exterior.Superficie < 0)
            {
                _Exterior = _Exterior.Inverso;
            }
            Bownding.Actualizar(_Exterior.Bownding.Maximos);
            Bownding.Actualizar(_Exterior.Bownding.Minimos);

            for (int i = 0; i < _Islas.Count; i++)
            {
                if (_Islas[i].Superficie > 0)
                {
                    _Islas[i] = _Islas[i].Inverso;
                }
                Bownding.Actualizar(_Islas[i].Bownding.Maximos);
                Bownding.Actualizar(_Islas[i].Bownding.Minimos);
            }
        }