コード例 #1
0
        internal static int ReasignoColindancia(this M.ManzanaData insertedData, bool PolilineaNueva, bool RumboNuevo)
        {
            //Si ya existe Polilinea en la lista con Rumbo Nuevo
            if (!PolilineaNueva && RumboNuevo)
            {
                //Elimino de la lista
                M.Manzana.ColindanciaManzana.
                RemoveAll(x => x.hndPlColindancia.Value == insertedData.hndPlColindancia.Value);
            }
            //Si es Nueva Polilinea en la lista con Rumbo ya insertado
            else if (PolilineaNueva && !RumboNuevo)
            {
                //Buscar Polilinea de Rumbo anterior y eliminarlo---------------
                //Polilinea repetida
                M.ManzanaData itemRepetido = new M.ManzanaData();

                itemRepetido = M.Manzana.ColindanciaManzana.
                               Where(x => x.rumboActual == insertedData.rumboActual).FirstOrDefault();

                Entity entPl = itemRepetido.hndPlColindancia.toObjectId().OpenEntity();

                DManager.RemoveXRecord(entPl.ExtensionDictionary, M.Constant.XRecordColindancia);
                //----------------------------------------------------------------

                //Eliminar de lista Rumbo
                M.Manzana.ColindanciaManzana.
                RemoveAll(x => x.rumboActual == insertedData.rumboActual);
            }
            //Si es Polilinea y Rumbo ya insertados en la lista
            else if (!PolilineaNueva && !RumboNuevo)
            {
                M.ManzanaData itemRumbo = new M.ManzanaData();

                //Calculo item de Polilinea--------------------------------------------------------
                //Elimino de la lista
                M.Manzana.ColindanciaManzana.
                RemoveAll(x => x.hndPlColindancia.Value == insertedData.hndPlColindancia.Value);
                //----------------------------------------------------------------------------------

                //Calculo item de Rumbo-------------------------------------------------------------
                itemRumbo = M.Manzana.ColindanciaManzana.
                            Where(x => x.rumboActual == insertedData.rumboActual).FirstOrDefault();

                if (itemRumbo != null)
                {
                    ObjectId idPl = new ObjectId();

                    idPl = itemRumbo.hndPlColindancia.toObjectId();

                    Entity entPl = idPl.OpenEntity();

                    DManager.RemoveXRecord(entPl.ExtensionDictionary, M.Constant.XRecordColindancia);

                    //Eliminar de lista Rumbo
                    M.Manzana.ColindanciaManzana.
                    RemoveAll(x => x.rumboActual == insertedData.rumboActual);
                    //----------------------------------------------------------------------------------
                }
            }

            return(insertedData.InsertoColindancia());
        }
        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            ObjectId idtxtCol  = new ObjectId(),  //Id de Texto con el que Colinda
                     idLineCol = new ObjectId();  //Id de Linea/Polilinea con la que Colinda

            //Selecciono el Item
            string rumboSeleccionado = (cmbRumboActual.SelectedItem ?? "").ToString();

            //Si ya se selecciono algo en el combobox de tipo
            if (cmbTipo.SelectedIndex != -1)
            {
                this.WindowState = WindowState.Minimized;
                //Solicito que me hagan saber el texto que colinda
                if (Met_Autodesk.Entity("Selecciona la línea de colindancia al " + rumboSeleccionado + "\n",
                                        out idLineCol, M.Constant.TiposLineas) &&
                    Met_Autodesk.Entity("Selecciona la colindancia al " + rumboSeleccionado + "\n",
                                        out idtxtCol, typeof(DBText)))
                {
                    if (idLineCol.OpenEntity().Layer == M.Constant.LayerManzana)
                    {
                        //Obtengo el DBText seleccionado
                        DBText DBTextColindancia = idtxtCol.OpenEntity() as DBText;

                        //Texto del DB Text
                        string txtColindancia = DBTextColindancia.TextString.FormatString();

                        //Modelo los datos
                        M.ManzanaData insertedData = new M.ManzanaData()
                        {
                            hndPlColindancia  = idLineCol.Handle,
                            hndTxtColindancia = idtxtCol.Handle,
                            inicialRumbo      = (M.Constant.Orientaciones
                                                 [Met_Manzana.ObtengoPosicion(rumboSeleccionado, 0), 1]),
                            rumboActual     = rumboSeleccionado,
                            textColindancia = cmbTipo.SelectedIndex > 0 ? txtColindancia :
                                              "calle " + txtColindancia
                        };

                        bool PolilineaNueva = false,
                             RumboNuevo     = false;

                        int sigPosicion = 0;

                        //Si ya se había insertado esa polilinea
                        PolilineaNueva = M.Manzana.ColindanciaManzana.Where
                                             (x => x.hndPlColindancia.Value == insertedData.hndPlColindancia.Value).
                                         Count() > 0 ? false : true;

                        //Si ya se había insertado ese rumbo en la lista
                        RumboNuevo = M.Manzana.ColindanciaManzana.
                                     Where(x => x.rumboActual == insertedData.rumboActual).Count() > 0
                            ? false : true;

                        //Si es Nueva Polilinea y nuevo Rumbo
                        if (PolilineaNueva && RumboNuevo)
                        {
                            sigPosicion = insertedData.InsertoColindancia();
                        }
                        else
                        {
                            sigPosicion = insertedData.ReasignoColindancia(PolilineaNueva, RumboNuevo);
                        }

                        //Reviso que rumbo mostrará
                        SigColindancia(sigPosicion);

                        if (ListPrincipal.ItemsSource != null)
                        {
                            ListPrincipal.Items.Refresh();
                        }
                        else
                        {
                            ListPrincipal.ItemsSource = M.Manzana.ColindanciaManzana;
                        }
                    }
                    else
                    {
                        this.ShowMessageAsync("Layer Incorrecto", "La línea debe de estar en Layer " + M.Constant.LayerManzana);
                    }
                }
                this.WindowState = WindowState.Normal;
            }
            else
            {
                this.ShowMessageAsync("Datos no seleccionados", "Favor de seleccionar Tipo de Colindancia");
            }
        }