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();
            }
        }
        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");
            }
        }
Example #4
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;
        }
Example #5
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;
        }