Esempio n. 1
0
        private void CmBTriangularPuntos_Click(object sender, EventArgs e)
        {
            //Triangular los puntos autogenerados
            IList <Triangulo> Res = new List <Triangulo>();

            Geometry.Operaciones.Triangulacion.Triangulacion DelaTriang = new Geometry.Operaciones.Triangulacion.Triangulacion();
            Geometry.Log.Log DelaLog = new Geometry.Log.Log();

            if (DelaTriang.TriangularMalla(new Poligono(), new List <Linea>(), lstPuntos3d, TipoTriangulado.Delaunay))
            {
                Res     = DelaTriang.Resultado;
                DelaLog = DelaTriang.LogTriangulacion;
            }
            else
            {
            }
        }
Esempio n. 2
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;
        }
Esempio n. 3
0
        public void Ejecutar()
        {
            //Ejecuta procesa _Vértices y _Rupturas para obtener _ResTriangulación
            try
            {
                _Estado = TriangulacionMultiProceso.Estado.EnEjecucion;

                _logProceso.ActualizaProcessLog(OnThread);

                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Inicio, "Procesa la Triangulación."));

                ITriangulador Triangulador = Triangulacion.GetNewTriangulador(_tipoTriangulado);

                //Calcula Triangulación
                _ResTriangulacion.Resultado = Triangulador.Triangular(_ResTriangulacion.Seccion.TrianguloSeccion.ToPoligono(), _rupturas, _vertices);

                _Estado = TriangulacionMultiProceso.Estado.Terminado;
            }
            catch (System.Threading.ThreadAbortException)
            {
                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Informacion, "Proceso abortado."));
                _Error  = new Exception("Subproceso de triangulación abortado.");
                _Estado = TriangulacionMultiProceso.Estado.Detenido;
                System.Threading.Thread.ResetAbort();
            }
            catch (Exception sysEx)
            {
                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Error, sysEx.ToString()));
                _Error  = sysEx;
                _Estado = TriangulacionMultiProceso.Estado.ConErrores;
            }
            finally
            {
                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Fin, "Procesa la Triangulación."));
                //Lanzar evento
                Filanlizado?.Invoke(this, EventArgs.Empty);
            }
        }
Esempio n. 4
0
        public void Ejecutar()
        {
            //Ejecuta el merge de las dos triangulaciones
            try
            {
                _Estado = TriangulacionMultiProceso.Estado.EnEjecucion;

                _logProceso.ActualizaProcessLog(OnThread);

                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Inicio, "Procesa el Merge."));

                ITriangulador Triangulador = Triangulacion.GetNewMerge(_tipoTriangulado);

                //Calcula Merge
                _ResTriangulacion.Resultado = Triangulador.Merge(_triangulacion1, _triangulacion2);

                _Estado = TriangulacionMultiProceso.Estado.Terminado;
            }
            catch (System.Threading.ThreadAbortException)
            {
                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Informacion, "Proceso abortado."));
                _Error  = new Exception("Subproceso de merge abortado.");
                _Estado = TriangulacionMultiProceso.Estado.Detenido;
                System.Threading.Thread.ResetAbort();
            }
            catch (Exception sysEx)
            {
                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Error, sysEx.ToString()));
                _Error  = sysEx;
                _Estado = TriangulacionMultiProceso.Estado.ConErrores;
            }
            finally
            {
                _logProceso.Add(new Log.EventoLog(Log.TypeEvento.Fin, "Procesa el Merge."));
                //Lanza evento
                Filanlizado?.Invoke(this, new EventArgs());
            }
        }
Esempio n. 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;
        }