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); } } }
public Poligono Equidista(double Distancia) { //retorna la equidistancia Poligono Res = new Poligono(); //eqidistancia con signo, así las islas equidistan en el sentido correcto Res._Exterior = _Exterior.Equidista(Distancia); foreach (Shape S in _Islas) { Res.AddIsla(S.Equidista(Distancia)); } return(Res); }
public void Add(Poligono Poligono) { _Poligonos.Add(Poligono); Bownding.Actualizar(Poligono.Bownding.Maximos); Bownding.Actualizar(Poligono.Bownding.Minimos); }