Пример #1
0
        private void DataGridTextColumn_MouseUp(object sender, MouseButtonEventArgs e)
        {
            if (sender is TextBlock)
            {
                TextBlock txt = sender as TextBlock;

                long result = 0;

                if (long.TryParse(txt.Text, out result))
                {
                    if (result != 0)
                    {
                        Handle handle = new Handle(result);

                        ObjectId id = handle.toObjectId();

                        if (id.IsValid)
                        {
                            Met_Autodesk.SetImpliedSelection(handle.toObjectId());

                            (id.OpenEntity() as Autodesk.AutoCAD.DatabaseServices.Polyline).Focus(10, 10);

                            this.WindowState = WindowState.Minimized;
                        }
                        else
                        {
                            MessageBox.Show("Id Inválido");
                        }
                    }
                }
            }
        }
        public void Vertex()
        {
            //Nuevo ObjectId
            ObjectId objid = new ObjectId();

            //Obtengo la entidad que es polilínea
            Met_Autodesk.Entity("Selecciona Polilinea", out objid, typeof(Polyline));

            //Abro entidad y la convierto en Polilinea
            Polyline pl = objid.OpenEntity() as Polyline;

            List <Point3d> listPoints = pl.ClockwisePoints();

            for (int i = 0; i < listPoints.Count; i++)
            {
                ////Punto A
                Point3d ptActual = listPoints[i];

                int idxPtActual = Met_Autodesk.GetPointIndex(pl, ptActual);

                SegmentType seg = pl.GetSegmentType(idxPtActual);

                string.Format("El Seg {0}:{1} en el punto X:{2} y Y:{3}\n",
                              seg.ToString(), i + 1, Math.Round(ptActual.X, 2), Math.Round(ptActual.Y, 2)).ToEditor();
            }
        }
        public void Apartamentos()
        {
            //Nuevo ObjectId
            ObjectId objid = new ObjectId();

            //Obtengo la entidad que es polilínea
            Met_Autodesk.Entity("Selecciona Polilinea", out objid, typeof(Polyline));

            //Abro entidad y la convierto en Polilinea
            Polyline pl = objid.OpenEntity() as Polyline;

            //Obtengo Apartamentos dentro del Lote
            ObjectIdCollection idsApartments
                = Met_Autodesk.ObjectsInside(pl.GeometricExtents.MinPoint,
                                             pl.GeometricExtents.MaxPoint,
                                             typeof(Polyline).Filter(M.Constant.LayerApartamento));

            foreach (ObjectId idAP in idsApartments)
            {
                Polyline plAp = idAP.OpenEntity() as Polyline;

                Met_Autodesk.TextInWindow(plAp.GeometricExtents.MinPoint,
                                          plAp.GeometricExtents.MaxPoint,
                                          M.Constant.LayerApartamento).ToEditor();
            }
        }
Пример #4
0
        internal static int InsertoColindancia(this M.ManzanaData insertedData)
        {
            int sigPosicion = -1;

            //Inserto en la polilinea
            if (Met_Autodesk.InsertDictionary(insertedData.hndPlColindancia.toObjectId(),
                                              M.Constant.XRecordColindancia,
                                              insertedData.rumboActual,
                                              insertedData.textColindancia))
            {
                //Encapsulo en lista de colindancia
                M.Manzana.ColindanciaManzana.Add(insertedData);

                //Obtengo la siguiente posición de orientación de rumbo del listado
                sigPosicion = M.Manzana.OrientacionCalculada.LastIndexOf(insertedData.rumboActual) + 1;
            }

            return(sigPosicion);
        }
Пример #5
0
        private void CreateAndValidatePolyline()
        {
            //Inicializo Variables--------------------------------------

            //Deshabilito los pasos nuevamente
            tb1Paso0.IsEnabled = false;
            tb1Paso1.IsEnabled = false;
            tb1Paso2.IsEnabled = false;
            tb1Paso3.IsEnabled = false;

            //Envío a NULL itemsource
            tb2GridLotes.ItemsSource = null;

            //Limpio lista para reasignarla
            M.Colindante.Lotes.Clear();

            //Listado de segmentos
            List <ObjectId> listSegments = new List <ObjectId>();

            //Obtengo los lotes dentro de los segmentos
            ObjectIdCollection idsLotes = new ObjectIdCollection();

            //----------------------------------------------------------

            //Leo los segmentos seleccionados
            listSegments = M.Manzana.ColindanciaManzana.Select(x => x.hndPlColindancia.toObjectId()).ToList();

            //Obtengo los Lotes / Macrolotes creando Polilínea
            idsLotes = Met_Autodesk.GetPolylinesInSegments(listSegments, M.Constant.LayerLote);

            if (idsLotes.Count > 0)
            {
                GetInfoLote(idsLotes);
            }
            else
            {
                this.ShowMessageAsync("Sin Lotes", "No se encontraron Lotes dentro de la Manzana, ejecutar Lectura de Lotes nuevamente");
            }
        }
 private List <string> ObtengoManzanas()
 {
     return(Met_Autodesk.ModelDBText(M.Constant.LayerManzana).
            Select(x => x.TextString).ToList());
 }
        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");
            }
        }
Пример #8
0
        //Paso 2
        private void tb1SelMultiple_Click(object sender, RoutedEventArgs e)
        {
            //Ids seleccionados
            ObjectIdCollection idsSelected = new ObjectIdCollection();

            //Envío a false selección para que vuelva a evaluar
            tb1CheckLoteIrregular.IsChecked = false;

            //Mensaje a Mostrar
            string msg = M.Manzana.EsMacrolote ? "Selecciona los Edificios irregulares" : "Selecciona los lotes irregulares";

            this.WindowState = WindowState.Minimized;

            //Selecciona Polilíneas
            if (Met_Autodesk.SelectPolylines(out idsSelected, msg, M.Colindante.LayerTipo) && idsSelected.Count > 0)
            {
                List <long> listTipo = M.Manzana.EsMacrolote ?   M.Colindante.Edificios.Select(x => x._long).ToList() :
                                       M.Colindante.Lotes.Select(x => x._long).ToList();

                //Obtengo todos los ids en el Lote
                List <ObjectId> allIdsIn = listTipo.Select(x => new Handle(x).toObjectId()).ToList();

                //Todos los ids fuera del lote
                List <ObjectId> idsAreOut = idsSelected.OfType <ObjectId>()
                                            .Where(x => !allIdsIn.Contains(x)).ToList();

                //Si ninguno esta afuera de la manzana
                if (idsAreOut.Count == 0)
                {
                    //Lo asigno a los IdsIrregulares
                    M.Colindante.IdsIrregulares = idsSelected;

                    //Envío a siguiente paso
                    tb1Paso3.IsEnabled = true;

                    //Envío a true Lote Irregular
                    tb1CheckLoteIrregular.IsChecked = true;

                    //Si no es macrolote obtengo Área Común de cada uno de ellos
                    if (!M.Manzana.EsMacrolote)
                    {
                        string msgAreaComun = "";

                        foreach (ObjectId idPl in idsSelected)
                        {
                            if (!C.Met_Colindante.GetCommonArea(idPl, out msgAreaComun))
                            {
                                this.ShowMessageAsync("Área Común", msgAreaComun);
                            }
                        }
                    }
                }
                else
                {
                    string _in = M.Manzana.EsMacrolote ? "del Macrolote" : "de la Manzana";

                    string msgOut = idsAreOut.Count == 1 ? "Polilínea seleccionado esta fuera" + _in:
                                    "Polilíneas seleccionadas están fuera" + _in;

                    for (int i = 0; i < idsAreOut.Count; i++)
                    {
                        ObjectId id = idsAreOut[i];

                        M.Colindante.ListadoErrores.Add(new M.Error()
                        {
                            error       = "Error de selección",
                            description = "La polilínea seleccionada esta fuera " + _in,
                            timeError   = DateTime.Now.ToString(),
                            longObject  = id.Handle.Value,
                            metodo      = "ModuloColindante-tb1SelMultiple_Click",
                            tipoError   = M.TipoError.Error
                        });
                    }

                    this.ShowMessageAsync("Error de selección", msgOut);
                }
            }
            else
            {
                M.Colindante.ListadoErrores.Add(new M.Error()
                {
                    error       = "Error de Selección",
                    description = "No se seleccionaron Ids o se canceló el proceso",
                    timeError   = DateTime.Now.ToString(),
                    tipoError   = M.TipoError.Advertencia,
                    longObject  = 0,
                    metodo      = "ModuloColindante-tb1SelMultiple_Click"
                });
            }

            this.WindowState = WindowState.Normal;
        }
Пример #9
0
        //PASO 1
        private void tb1SelLoteTipo_Click(object sender, RoutedEventArgs e)
        {
            //Nuevo ID
            ObjectId idPl = new ObjectId();

            //Mensaje a Mostrar
            string msg = M.Manzana.EsMacrolote ? "Selecciona Edificio Tipo" : "Selecciona Lote Tipo";

            //Inicializo Obtención de Área Común
            //M.Colindante.ListCommonArea = new List<M.AreaComun>();

            this.WindowState = WindowState.Minimized;

            //Seleccionar Entity con Polilínea Válida
            if (Met_Autodesk.Entity(msg, out idPl, typeof(Autodesk.AutoCAD.DatabaseServices.Polyline)))
            {
                //Reviso que este dentro del layer correcto, depende de si es Macrolote o lote
                if (idPl.OpenEntity().Layer == M.Colindante.LayerTipo)
                {
                    //Lista dependiendo de si es Edificio o Lote
                    List <long> listaTipo = M.Manzana.EsMacrolote ? M.Colindante.Edificios.Select(x => x._long).ToList() :
                                            M.Colindante.Lotes.Select(x => x._long).ToList();

                    //Reviso que este dentro de los edificios leídos en el plano
                    if (listaTipo.OfType <long>().Select(x => new Handle(x).toObjectId())
                        .Contains(idPl))
                    {
                        M.Colindante.IdTipo = idPl;

                        long l = listaTipo.Where(x => new Handle(x).toObjectId() == idPl)
                                 .FirstOrDefault();

                        string numVivienda  = "",
                               msgAreaComun = "";

                        if (M.Manzana.EsMacrolote)
                        {
                            numVivienda = M.Colindante.Edificios.Search(l).numEdificio.ToString();
                        }
                        else
                        {
                            numVivienda = M.Colindante.Lotes.Search(l).numLote.ToString();

                            if (!C.Met_Colindante.GetCommonArea(idPl, out msgAreaComun))
                            {
                                this.ShowMessageAsync("Área Común", msgAreaComun);
                            }
                        }

                        lblLoteTipo.Text = numVivienda;

                        //lblLoteTipo.Text =
                        lblLoteTipo.Visibility = System.Windows.Visibility.Visible;
                        tb1Paso2.IsEnabled     = true;
                    }
                    //Cuando el layer de Polilínea no esta dentro del mismo layer
                    else
                    {
                        this.ShowMessageAsync("Error de selección",
                                              "La polilínea seleccionada esta afuera de las leídas por la Manzana");
                    }
                }
                else
                {
                    this.ShowMessageAsync("Error de selección",
                                          string.Format("La polilínea no tiene el layer {0}", M.Colindante.LayerTipo));
                }
            }
            else
            {
                M.Colindante.ListadoErrores.Add(new M.Error()
                {
                    error       = "Error de Selección",
                    description = "No se seleccionó Id Valido o se canceló",
                    timeError   = DateTime.Now.ToString(),
                    tipoError   = M.TipoError.Advertencia,
                    longObject  = 0,
                    metodo      = "ModuloColindante-tb1Sel_Tipo_Click"
                });
            }
            this.WindowState = WindowState.Normal;
        }
Пример #10
0
        //PASO 0
        private void tb1SelMacrolote_Click(object sender, RoutedEventArgs e)
        {
            ObjectId idPl = new ObjectId();

            string msgAreaComun = "";

            this.WindowState = WindowState.Minimized;

            //Valido que se haya obtenido de manera correcta una Polilínea
            if (Met_Autodesk.Entity("Selecciona Macrolote: ", out idPl,
                                    typeof(Autodesk.AutoCAD.DatabaseServices.Polyline)))
            {
                //Reviso que la polilínea este dentro del mismo layer
                if (idPl.OpenEntity().Layer == M.Constant.LayerLote)
                {
                    //Reviso que este dentro de los Lotes Leídos al Inicio
                    if (M.Colindante.Lotes.OfType <M.Lote>()
                        .Select(x => new Handle(x._long).toObjectId()).Contains(idPl))
                    {
                        //Busco Edificios y Apartamentos dentro de Macrolote
                        if (!Met_Colindante.noEstaEnEdificios(idPl))
                        {
                            //Dependiendo de cuantos edificios encuentre los asigno en lbl
                            lblGnEdificios.Text = string.Format("{0} Edificios", M.Colindante.Edificios.Count);

                            //Asigno Número de Lote
                            lblMacrolote.Text = M.Colindante.Lotes.Search(idPl.Handle.Value).numLote.ToString();

                            //Inicializo Obtención de Área Común
                            M.Colindante.ListCommonArea = new List <M.AreaComun>();

                            //Obtengo Área Común
                            if (!Met_Colindante.GetCommonArea(idPl, out msgAreaComun))
                            {
                                this.ShowMessageAsync("Área Común", msgAreaComun);
                            }

                            //Asigno el nombre del Área Común
                            if (M.Colindante.ListCommonArea.Count > 0)
                            {
                                M.Colindante.NomAreaComun = M.Colindante.ListCommonArea[0].NombreAreaComun;
                            }
                            else
                            {
                                M.Colindante.NomAreaComun = "Área Común";
                            }

                            //Muestro Número de Lote en el paso
                            lblMacrolote.Visibility = System.Windows.Visibility.Visible;

                            //Asigno ID Macrolote encontrado
                            M.Colindante.IdMacrolote = idPl;

                            //Muestro siguiente paso
                            tb1Paso1.IsEnabled = true;
                        }
                        else
                        {
                            this.ShowMessageAsync("Selección de Edificios",
                                                  "Hay un problema dentro del Macrolote, ir a Detalle...");
                        }
                    }
                    else
                    {
                        this.ShowMessageAsync("Error de selección",
                                              "El lote seleccionado esta afuera de la Manzana");
                    }
                }
                else
                {
                    this.ShowMessageAsync("Error de selección",
                                          string.Format("El lote seleccionado no tiene el layer {0}", M.Constant.LayerLote));
                }
            }
            else
            {
                M.Colindante.ListadoErrores.Add(new M.Error()
                {
                    error       = "Error de Selección",
                    description = "No se seleccionó Polilínea válida o se canceló",
                    timeError   = DateTime.Now.ToString(),
                    tipoError   = M.TipoError.Advertencia,
                    longObject  = 0,
                    metodo      = "ModuloColindante-tb1SelMacrolote_Click"
                });
            }

            this.WindowState = WindowState.Normal;
        }
Пример #11
0
        private void GetInfoLote(ObjectIdCollection idsLotes)
        {
            string LoteOMacroLote = ""; //Complementa lbl de Lotes

            int countLote       = 0,    //Reviso cuantos Número de Lotes encontré
                countNumOficial = 0;    //Reviso cuantos Números Oficiales encontré

            //Por cada lote encontrado en los segmentos
            foreach (ObjectId idLote in idsLotes)
            {
                //Punto minimo y máximo de la polílinea
                Point3d ptmin       = new Point3d(),
                              ptmax = new Point3d();

                DBText idTextLote       = new DBText(),
                       idTextNumOficial = new DBText();

                string valorLote       = "",
                       valorNumOficial = "";

                int numLote = 0;

                //Abro entidad de PL
                Autodesk.AutoCAD.DatabaseServices.Polyline lote
                    = (idLote.OpenEntity() as Autodesk.AutoCAD.DatabaseServices.Polyline);

                //Calculo punto mínimo y máximo
                ptmin = lote.GeometricExtents.MinPoint;
                ptmax = lote.GeometricExtents.MaxPoint;

                //Enfoco
                lote.Focus(20, 40);

                //Detecto Texto con LayerLote
                ObjectIdCollection idsTextoLotes = Met_Autodesk.ObjectsInside(ptmin, ptmax,
                                                                              typeof(DBText).Filter(M.Constant.LayerLote));

                //Detecto Texto con Número Oficial
                ObjectIdCollection idsNoOficial = Met_Autodesk.ObjectsInside(ptmin, ptmax,
                                                                             typeof(DBText).Filter(M.Constant.LayerNoOficial));

                //Reviso que sólo haya 1 para asignarlo
                //***NÚMERO LOTE---------------------------------------------------------------------------
                if (idsTextoLotes.Count == 1)
                {
                    idTextLote = idsTextoLotes.OfType <ObjectId>().FirstOrDefault().OpenEntity() as DBText;

                    valorLote = idTextLote.TextString.GetAfterSpace();

                    if (int.TryParse(valorLote, out numLote))
                    {
                        countLote++;
                    }
                }
                else if (idsTextoLotes.Count > 1) //Si encontro más de uno imprimo cuantos encontró
                {
                    valorLote = idsTextoLotes.Count + " Encontrados";
                }
                //***-----------------------------------------------------------------------------------------

                //***NÚMERO OFICIAL---------------------------------------------------------------------------
                if (idsNoOficial.Count == 1)
                {
                    idTextNumOficial = idsNoOficial.OfType <ObjectId>().FirstOrDefault().OpenEntity() as DBText;

                    valorNumOficial = idTextNumOficial.TextString.GetAfterSpace();

                    countNumOficial++;
                }
                else if (idsNoOficial.Count > 1)
                {
                    valorNumOficial = idsTextoLotes.Count + " Encontrados";
                }
                //***-----------------------------------------------------------------------------------------

                //Agrego Valor de Lotes
                M.Colindante.Lotes.Add(new M.Lote()
                {
                    _long      = idLote.Handle.Value,
                    numOficial = valorNumOficial,
                    numLote    = numLote
                });
            }


            //Valido si tiene todos los elementos necesarios
            if (countLote == idsLotes.Count && countNumOficial == idsLotes.Count)
            {
                if (M.Manzana.EsMacrolote)
                {
                    tb1Paso0.IsEnabled = true;//Activo Paso 0
                }
                else
                {
                    tb1Paso1.IsEnabled = true;//Activo Paso 1
                }
            }
            else
            {
                this.ShowMessageAsync("Error en Lotes",
                                      "La cantidad de Números de Lotes u Oficiales no es la correcta \n Ir a Detalles > Información del Lote");
            }

            //Dependiendo de cuantos lotes encontró
            if (idsLotes.Count == 1)
            {
                LoteOMacroLote = M.Manzana.EsMacrolote ? "Macrolote" : "Lote";
            }
            else
            {
                LoteOMacroLote = M.Manzana.EsMacrolote ? "Macrolotes" : "Lotes";
            }

            lblGnLotes.Text = idsLotes.Count.ToString() + " " + LoteOMacroLote;

            tb2GridLotes.ItemsSource = M.Colindante.Lotes;
        }