예제 #1
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;
        }