public static IResultadoTriangulacion GetNewResultadoTriangulacion(TipoTriangulado Metodo) { switch (Metodo) { case TipoTriangulado.Abanico: return(new Trianguladores.Abanico.ResultadoAbanico()); //break; case TipoTriangulado.Delaunay: return(new Trianguladores.Delaunay.ResultadoDelaunay()); //break; case TipoTriangulado.MinimoPeso: return(new Trianguladores.MinimoPeso.ResultadoMinimoPeso()); //break; case TipoTriangulado.Voraz: return(new Trianguladores.Voraz.ResultadoVoraz()); //break; case TipoTriangulado.Ninguna: default: return(null); //break; } }
public static ITriangulador GetNewMerge(TipoTriangulado Metodo) { switch (Metodo) { case TipoTriangulado.Abanico: return(new Trianguladores.Abanico.Abanico()); //break; case TipoTriangulado.Delaunay: return(new Trianguladores.Delaunay.Delaunay()); //break; case TipoTriangulado.MinimoPeso: return(new Trianguladores.MinimoPeso.MinimoPeso()); //break; case TipoTriangulado.Voraz: return(new Trianguladores.Voraz.Voraz()); //break; case TipoTriangulado.Ninguna: default: return(null); //break; } }
/// <summary> /// /// </summary> /// <param name="PerimetroPoligono"></param> /// <param name="Metodo"></param> /// <returns></returns> public bool TriangularPoligono(Poligono PerimetroPoligono, TipoTriangulado Metodo = TipoTriangulado.Delaunay) { ITriangulador Triangulador = new Trianguladores.Delaunay.Delaunay(); if (Triangulador != null) { _Resultado = Triangulador.Triangular(PerimetroPoligono, new List <Linea>(), PerimetroPoligono.Vertices); return(true); } else { return(false); } }
public SubProcesoTriangulacion(TipoTriangulado tipoTriangulado, List <Punto3D> Vertices, List <Linea> Rupturas, Triangulo Envolvente, int Anterior, int Siguiente) { _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Inicio, "Inicialización del Proceso.")); _tipoTriangulado = tipoTriangulado; _vertices = Vertices; _rupturas = Rupturas; //Añade a la triangulación los índices de la malla anterior y la siguiente _ResTriangulacion = Triangulacion.GetNewResultadoTriangulacion(tipoTriangulado); _ResTriangulacion.Seccion.TrianguloSeccion = Envolvente; _ResTriangulacion.Seccion.ParAristas.Anterior = Anterior; _ResTriangulacion.Seccion.ParAristas.Siguiente = Siguiente; _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Fin, "Inicialización del Proceso.")); _Estado = TriangulacionMultiProceso.Estado.EnEspera; }
public SubProcesoMerge(TipoTriangulado tipoTriangulado, IResultadoTriangulacion Triang1, IResultadoTriangulacion Triang2) { _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Inicio, "Inicialización el Proceso.")); _tipoTriangulado = tipoTriangulado; _triangulacion1 = Triang1.Resultado; _triangulacion2 = Triang2.Resultado; _ResTriangulacion = Triangulacion.GetNewResultadoTriangulacion(tipoTriangulado); if (Triang1.Seccion.ParAristas.Anterior == Triang2.Seccion.ParAristas.Siguiente) { // 1,2 - 0,1 _ResTriangulacion.Seccion.ParAristas.Anterior = Triang1.Seccion.ParAristas.Siguiente; _ResTriangulacion.Seccion.ParAristas.Siguiente = Triang2.Seccion.ParAristas.Anterior; } else { if (Triang1.Seccion.ParAristas.Siguiente == Triang2.Seccion.ParAristas.Anterior) { // 0,1 - 1,2 _ResTriangulacion.Seccion.ParAristas.Anterior = Triang1.Seccion.ParAristas.Anterior; _ResTriangulacion.Seccion.ParAristas.Siguiente = Triang2.Seccion.ParAristas.Siguiente; } else { //No son consecutivas } } _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Fin, "Inicialización el Proceso.")); _Estado = TriangulacionMultiProceso.Estado.EnEspera; }
/// <summary> /// /// </summary> /// <param name="PerimetroExclusion"></param> /// <param name="Metodo"></param> /// <returns></returns> public bool TriangularMalla(Poligono PerimetroExclusion, List <Linea> LineasRuptura, List <Punto3D> Puntos, TipoTriangulado Metodo = TipoTriangulado.Delaunay) { IList <Triangulo> ResTriang = new List <Triangulo>(); int currentManagedThread = Environment.CurrentManagedThreadId; int processorCount = Environment.ProcessorCount; TriangulacionMultiProceso TrianguladorMultiProceso = new TriangulacionMultiProceso(processorCount) { TipoTriangulado = Metodo, Perimetro = PerimetroExclusion, LineasRuptura = LineasRuptura, Puntos3D = Puntos }; TrianguladorMultiProceso.IniciarProceso(); while (TrianguladorMultiProceso.EstadoProceso == TriangulacionMultiProceso.Estado.EnEjecucion) { System.Threading.Thread.Sleep(300); } if (TrianguladorMultiProceso.EstadoProceso == TriangulacionMultiProceso.Estado.Terminado) { _Resultado = TrianguladorMultiProceso.Resultado.Resultado; _logTriangulacion = TrianguladorMultiProceso.LogMultiProceso; return(true); } else { //Informar de cada uno de los errores que an detenido cada uno de los procesos _logTriangulacion = TrianguladorMultiProceso.LogMultiProceso; return(false); } }