Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        /// <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);
            }
        }
Beispiel #4
0
        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;
        }
Beispiel #5
0
        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;
        }
Beispiel #6
0
        /// <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);
            }
        }