示例#1
0
        void PartirPoligonos_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            try
            {
                ReadOnlyLine límite = e.Entity as ReadOnlyLine;

                var entidadesRecortables = (from entidad in DigiNG.DrawingFile
                                            where entidad != límite
                                            where entidad is ReadOnlyPolygon || entidad is ReadOnlyLine && (entidad as ReadOnlyLine).Closed
                                            where !entidad.Deleted
                                            where entidad.AlgúnCódigoVisible()
                                            where Window2D.Intersects(límite, entidad)
                                            select entidad as IClippable).ToList();

                List<Entity> entidadesAAñadir = new List<Entity>();
                List<Entity> entidadesAEliminar = new List<Entity>();
                int oldPorciento = -1;
                for (int i = 0; i < entidadesRecortables.Count; i++)
                {
                    int porciento = i * 100 / entidadesRecortables.Count;
                    if (porciento != oldPorciento)
                    {
                        oldPorciento = porciento;
                        Digi3D.StatusBar.ProgressBar.Value = porciento;
                    }
                    try
                    {
                        var partes = entidadesRecortables[i].Clip(límite);
                        if (partes.Count() > 0)
                        {
                            entidadesAAñadir.AddRange(partes);
                            entidadesAEliminar.Add(entidadesRecortables[i] as Entity);
                        }
                    }
                    catch (Exception)
                    {
                    }
                }

                string descripción = string.Format(
                    OrdenesDigiNG.Recursos.SePartieronXEntidadesYSeFormaronYEntidadesNuevas,
                    entidadesAEliminar.Count,
                    entidadesAAñadir.Count);
                Digi3D.Music(MusicType.EndOfLongProcess);
                Digi3D.ShowBallon(
                    OrdenesDigiNG.Recursos.PartirPoligonosName,
                    descripción,
                    2);

                DigiNG.DrawingFile.Add(entidadesAAñadir);
                DigiNG.DrawingFile.Delete(entidadesAEliminar);

                if (this.Args.Length != 0 && DigiNG.DrawingFile.Contains(límite))
                    DigiNG.DrawingFile.Delete(límite);
            }
            finally
            {
                Dispose();
            }
        }
        private void attributeSelector1_OnEntitySelected(object sender, EntitySelectedEventArgs e)
        {
            WorkAsync(new WorkAsyncInfo
            {
                Message       = "Loading forms...",
                AsyncArgument = e.Metadata,
                Work          = (bw, evt) =>
                {
                    var formManager = new FormManager(Service);
                    var forms       = formManager.GetAllFormsByTypeCode(((EntityMetadata)evt.Argument).ObjectTypeCode.Value, ConnectionDetail);
                    var items       = forms.Select(form => new FormInfo(form)).Select(fi => new ListViewItem(fi.ToString())
                    {
                        Tag = fi
                    }).ToList();
                    evt.Result = items;
                },
                PostWorkCallBack = evt =>
                {
                    if (evt.Error != null)
                    {
                        MessageBox.Show(evt.Error.ToString());
                    }
                    else
                    {
                        listView1.Items.Clear();
                        listView1.Items.AddRange(((List <ListViewItem>)evt.Result).ToArray());

                        // Adds forms list to attribute selector
                        attributeSelector1.EntityForms = ((List <ListViewItem>)evt.Result).Select(i => (FormInfo)i.Tag).ToList();
                    }
                }
            });
        }
        private void CopiarTablaRegistro_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            if (e.Entity.Codes.Count > 1)
            {
                Digi3D.Music(MusicType.Error);
                MessageBox.Show(OrdenesDigiNG.Recursos.HasSeleccionadoUnaEntidadConMasDeUnCodigoEstaOrdenNoEstaPreparada);
                SolicitaSeleccionarEntidad();
                return;
            }

            if (null == entidadOrigen)
            {
                if (!e.Entity.Codes[0].Table.HasValue || !e.Entity.Codes[0].Id.HasValue)
                    MessageBox.Show(OrdenesDigiNG.Recursos.LaEntidadQueHasSeleccionadoNoTieneNingúnEnlaceDeBaseDatos);
                else
                    entidadOrigen = e.Entity;

                SolicitaSeleccionarEntidad();
                return;
            }

            Entity entidadClonada = e.Entity.Clone();
            entidadClonada.Codes[0] = new Code(entidadClonada.Codes[0].Name, entidadOrigen.Codes[0].Table, entidadOrigen.Codes[0].Id);
            DigiNG.DrawingFile.Add(entidadClonada);
            DigiNG.DrawingFile.Delete(e.Entity);
            entidadOrigen = null;
            Digi3D.Music(MusicType.EndOfLongProcess);
            SolicitaSeleccionarEntidad();
        }
示例#4
0
 async void OnItemSelected(object sender, EntitySelectedEventArgs e)
 {
     if (!e.IsNewItem)
     {
         await Navigation.PushAsync(new EditEntityViewPage(e.Id, _vm));
     }
 }
示例#5
0
        void CortarPoligono_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            if (entidadADividir == null)
            {
                entidadADividir = e.Entity;
                SolicitaSeleccionaEntidad();
                return;
            }

            ReadOnlyLine límite = e.Entity as ReadOnlyLine;

            try
            {
                var polígonos = (entidadADividir as IClippable).Clip(límite);
                DigiNG.DrawingFile.Add(polígonos);
                DigiNG.DrawingFile.Delete(entidadADividir);

                if (this.Args.Length != 0 && DigiNG.DrawingFile.Contains(límite))
                    DigiNG.DrawingFile.Delete(límite);
            }
            catch (Exception ex)
            {
                Digi3D.Music(MusicType.Error);
                Digi3D.ShowBallon(
                    Recursos.PartirPoligonosName,
                    ex.Message,
                    2);
            }
            finally
            {
                Dispose();
            }
        }
        private void CopiarNombreCódigo_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            if (e.Entity.Codes.Count > 1)
            {
                Digi3D.Music(MusicType.Error);
                MessageBox.Show(OrdenesDigiNG.Recursos.HasSeleccionadoUnaEntidadConMasDeUnCodigoEstaOrdenNoEstaPreparada);
                SolicitaSeleccionarEntidad();
                return;
            }

            if (null == entidadOrigen)
            {
                entidadOrigen = e.Entity;
                SolicitaSeleccionarEntidad();
                return;
            }

            Entity entidadClonada = e.Entity.Clone();
            entidadClonada.Codes[0] = new Code(entidadOrigen.Codes[0].Name, entidadClonada.Codes[0].Table, entidadClonada.Codes[0].Id);
            DigiNG.DrawingFile.Add(entidadClonada);
            DigiNG.DrawingFile.Delete(e.Entity);
            entidadOrigen = null;
            Digi3D.Music(MusicType.EndOfLongProcess);
            SolicitaSeleccionarEntidad();
        }
示例#7
0
 protected void OnEntitySelected(EntitySelectedEventArgs args)
 {
     if (EntitySelected != null)
     {
         EntitySelected(this, args);
     }
 }
示例#8
0
    void SearchEmployee_EntitySelected(object sender, EntitySelectedEventArgs e)
    {
        MainTelemetry.AddCount("SearchEmployeeToolBar");
        var id = DomainHelper.GetId(e.Entity);
        DialogViewModelBase after = null;

        if (cnbOpenInWindow.Active)
        {
            IPage replaced;
            if (NavigationManager.CurrentPage?.ViewModel is EmployeeViewModel)
            {
                replaced = NavigationManager.CurrentPage;
            }
            else
            {
                replaced = NavigationManager.IndependentPages.Reverse().FirstOrDefault(x => x.ViewModel is EmployeeViewModel);
            }

            if (replaced != null)
            {
                IPage last = null;
                foreach (var page in NavigationManager.TopLevelPages)
                {
                    if (page == replaced)
                    {
                        after = last?.ViewModel;
                        break;
                    }
                    last = page;
                }
                NavigationManager.AskClosePage(replaced);
            }
        }
        NavigationManager.OpenViewModel <EmployeeViewModel, IEntityUoWBuilder>(after, EntityUoWBuilder.ForOpen(id));
    }
示例#9
0
        protected virtual void RaiseEntitySelected(EntitySelectedEventArgs e)
        {
            EventHandler <EntitySelectedEventArgs> handler = OnEntitySelected;

            if (handler != null)
            {
                handler(this, e);
            }
        }
        void TramificaInsertandoEntidadSeleccionada_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            var líneaATramificar = e.Entity as ReadOnlyLine;

            // Seleccionamos las líneas visibles del archivo de dibujo (excluyendo la línea que vamos a tramificar)
            var líneasContraLasCualesTramificar = from entidad in DigiNG.DrawingFile.ExplotaAReadOnlyLine().Visibles()
                                                  where entidad != e.Entity
                                                  select entidad;

            // Obtenemos las intersecciones de la línea seleccionada con el reto de líneas visibles
            var intersecciones = líneaATramificar.DetectIntersections(líneasContraLasCualesTramificar);

            // Construimos una línea nueva con los códigos de la línea a tramificar
            Line líneaNueva = new Line(líneaATramificar.Codes);

            // Recorremos todos los segmentos de la línea a tramificar
            for (int vértice = 0; vértice < líneaATramificar.Points.Count - 1; vértice++)
            {
                // Añadimos el vértice de la línea original
                líneaNueva.Points.Add(líneaATramificar.Points[vértice]);

                // Ahora localizamos únicamente las intersecciones localizadas para el segmento actual en la línea a tramificar
                var vérticesAAñadirEnEsteSegmento = intersecciones.SoloDeSegmento(líneaATramificar, vértice);

                // Tenemos una lista de vértices, pero pueden venir desordenados. Vamos a ordenarlos calculando su distancia a la coordenada del primer vértice de este segmento
                Point2D vérticeComienzoSegmento = (Point2D)líneaATramificar.Points[vértice];

                var vérticesOrdenados = from v in vérticesAAñadirEnEsteSegmento
                                        let distancia = (v.Key - vérticeComienzoSegmento).Module
                                        orderby distancia
                                        select v.Key;

                // Ahora insertamos estos vértices en la línea nueva. Los vértices son 2D (los métodos de extensión proporcionados por el tipo IntersectionDetector trabajan con Point2D
                // así que tendremos que ínterpolar la coordenada Z
                foreach (var v in vérticesOrdenados)
                {
                    var segmento = new Segment(líneaATramificar.Points[vértice], líneaATramificar.Points[vértice + 1]);
                    double z = segmento.InterpolatedZ(v);

                    líneaNueva.Points.Add(new Point3D(v.X, v.Y, z));
                }
            }

            // Por último añadimos el último vértice
            líneaNueva.Points.Add(líneaATramificar.Points.Last());

            DigiNG.DrawingFile.Add(líneaNueva);
            DigiNG.DrawingFile.Delete(e.Entity);
            Dispose();
        }
示例#11
0
        private void CopiarAtributosBBDD_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            if (e.Entity.Codes.Count > 1)
            {
                Digi3D.Music(MusicType.Error);
                MessageBox.Show(OrdenesDigiNG.Recursos.HasSeleccionadoUnaEntidadConMasDeUnCodigoEstaOrdenNoEstaPreparada);
                SolicitaSeleccionarEntidad();
                return;
            }

            if (null == entidadOrigen)
            {
                entidadOrigen = e.Entity;
                SolicitaSeleccionarEntidad();
                return;
            }

            // Copiamos los atributos de los códigos coincidentes
            var nombresCódigosEntidadOrigen = from código in entidadOrigen.Codes
                                              select código.Name;
            var nombresCodigosEntidadDestino = from código in e.Entity.Codes
                                               select código.Name;
            var códigosComunes = nombresCódigosEntidadOrigen.Intersect(nombresCodigosEntidadDestino).ToList();

            if (códigosComunes.Count == 0)
            {
                Digi3D.ShowBallon(
                    OrdenesDigiNG.Recursos.CopiarAtributosBBDDName,
                    OrdenesDigiNG.Recursos.LaEntidadOrigenYDestinoNoTienenCódigosComunes,
                    1000);
                Digi3D.Music(MusicType.Error);
            }
            else
            {
                Entity entidadClonada = e.Entity.Clone();

                EliminaEnlacesABBDD(entidadClonada);

                DigiNG.DrawingFile.Add(entidadClonada,
                    entidadOrigen.Owner.get_DatabaseAttributes(entidadOrigen));
                Digi3D.Music(MusicType.EndOfLongProcess);
                DigiNG.DrawingFile.Delete(e.Entity);
            }

            entidadOrigen = null;
            SolicitaSeleccionarEntidad();
        }
示例#12
0
        void UnirPolígonos_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            if (null == entidadAUnir)
            {
                entidadAUnir = e.Entity;
                SolicitaSeleccionaEntidad();
                return;
            }

            List<string> listaErrores = new List<string>();

            if (!entidadAUnir.CódigosIdénticos(e.Entity, listaErrores))
            {
                MessageBox.Show(OrdenesDigiNG.Recursos.LosCódigosDeLasEntidadesSonDistintosYPoLoTantoNoSePuedenUnir);
                return;
            }

            try
            {
                var polígono = Polygon.JoinPolygons(entidadAUnir, e.Entity);
                Entity entidadAAñadir = polígono;

                // Me han solicitado que si las dos líneas que han formado el polígono son líneas y el polígono resultante no tiene
                // ningún hueco, que el resultado siga siendo una línea y no un polígono.
                if (entidadAUnir is ReadOnlyLine && e.Entity is ReadOnlyLine && 0 == polígono.Holes.Count)
                {
                    var temp = new Line(polígono.Codes);
                    temp.Points.Add(polígono.Points);
                    entidadAAñadir = temp;
                }

                DigiNG.DrawingFile.Add(entidadAAñadir);
                DigiNG.DrawingFile.Delete(entidadAUnir);
                DigiNG.DrawingFile.Delete(e.Entity);
            }
            catch (Exception excepción)
            {
                MessageBox.Show(excepción.Message);
            }
            finally
            {
                Dispose();
            }
        }
        void SustituyeCodManteniendoAtributos_EntitySelected(object sender, EntitySelectedEventArgs e)
        {
            Entity entidadClonada = e.Entity.Clone();

            string nombreCódigoActivo = DigiNG.Codes.ActiveCodes.First().Name;

            List<Codes> códigosNuevos = new List<Codes>();
            for (int i = 0; i<entidadClonada.Codes.Count(); i++)
            {
                string nuevoCódigo = Code.Compose(entidadClonada.Codes[i].Name, nombreCódigoActivo);

                // Si el nombre de tabla del código nuevo coincide con el nombre de tabla del código antiguo, mantenemos tanto el número de tabla
                // como el número de registro. Si no es así, creamos el nuevo código sin asignar ni tabla ni registro.
                if (DigiNG.DigiTab[nuevoCódigo].Table == DigiNG.DigiTab[entidadClonada.Codes[i].Name].Table)
                    entidadClonada.Codes[i] = new Code(nuevoCódigo, entidadClonada.Codes[i].Table, entidadClonada.Codes[i].Id);
                else
                    entidadClonada.Codes[i] = new Code(nuevoCódigo);
            }

            DigiNG.DrawingFile.Add(entidadClonada);
            DigiNG.DrawingFile.Delete(e.Entity);
            Digi3D.Music(MusicType.EndOfLongProcess);
            SolicitaSeleccionarEntidad();
        }