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 Shape(IList <Punto> Puntos) { _Inicializa(); foreach (Punto p in Puntos) { _Puntos.Add(p); Bownding.Actualizar(p); } }
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); } }
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); } }