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"); } }
//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; }
//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; }