public static void LerTodosOsBlocosEBuscarOsAtributos() { Document documentoAtivo = Application.DocumentManager.MdiActiveDocument; Database database = documentoAtivo.Database; Editor editor = documentoAtivo.Editor; using (Transaction acTrans = database.TransactionManager.StartTransaction()) { BlockTable blockTable; blockTable = acTrans.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable; try { _lista = new List <AtributosDoBloco>(); _listaElevacao = new List <TextoElevacao>(); foreach (string nome in Constantes.PrefixoDoNomeDosBlocos) { try { BlockTableRecord blockTableRecord; blockTableRecord = acTrans.GetObject(blockTable[nome], OpenMode.ForRead) as BlockTableRecord; foreach (ObjectId objId_loopVariable in blockTableRecord.GetBlockReferenceIds(true, true)) { AtributosDoBloco Atributo1 = new AtributosDoBloco(); BlockReference bloco; bloco = (BlockReference)acTrans.GetObject(objId_loopVariable, OpenMode.ForRead) as BlockReference; BlockTableRecord nomeRealBloco = null; nomeRealBloco = acTrans.GetObject(bloco.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord; AttributeCollection attCol = bloco.AttributeCollection; foreach (ObjectId attId in attCol) { AttributeReference attRef = (AttributeReference)acTrans.GetObject(attId, OpenMode.ForRead); string texto = (attRef.TextString); Atributo1.NomeEfetivoDoBloco = texto; } Atributo1.X = bloco.Position.X; Atributo1.Y = bloco.Position.Y; Atributo1.NomeBloco = nomeRealBloco.Name; Atributo1.Handle = bloco.Handle.ToString(); Atributo1.Angulo = bloco.Rotation; _lista.Add(Atributo1); TextoElevacao Elevacao1 = new TextoElevacao(); Point3dCollection pntCol = new Point3dCollection { new Point3d(Atributo1.X - 7.5, Atributo1.Y + 7.5, 0), new Point3d(Atributo1.X + 7.5, Atributo1.Y + 7.5, 0), new Point3d(Atributo1.X + 7.5, Atributo1.Y - 7.5, 0), new Point3d(Atributo1.X - 7.5, Atributo1.Y - 7.5, 0) }; PromptSelectionResult pmtSelRes = editor.SelectCrossingPolygon(pntCol); if (pmtSelRes.Status == PromptStatus.OK) { MText itemSelecionado = null; double distanciaMinima = Double.MaxValue; foreach (ObjectId id in pmtSelRes.Value.GetObjectIds()) { if (id.ObjectClass.DxfName == "MTEXT") { var text = acTrans.GetObject(id, OpenMode.ForWrite) as MText; if (text.Text.Contains("CA=")) { double distancia = Math.Sqrt(Math.Pow(text.Location.X - Atributo1.X, 2) + Math.Pow(text.Location.Y - Atributo1.Y, 2)); if (distancia < distanciaMinima) { distanciaMinima = distancia; itemSelecionado = text; } } } } if (itemSelecionado != null) { var lista = itemSelecionado.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); string textoCA = lista.Where(p => p.Contains("CA=")).Any() ? lista.Where(p => p.Contains("CA=")).FirstOrDefault() : string.Empty; string textoCFC = lista.Where(p => p.Contains("CFC=")).Any() ? lista.Where(p => p.Contains("CFC=")).FirstOrDefault() : string.Empty; textoCA = textoCA.Replace("CA=", ""); textoCFC = textoCFC.Replace("CFC=", ""); Elevacao1.ElevacaoInicial = textoCA; Elevacao1.ElevacaoFinal = textoCFC; Elevacao1.PosicaoX = itemSelecionado.Location.X; Elevacao1.PosicaoY = itemSelecionado.Location.Y; _listaElevacao.Add(Elevacao1); } else { editor.WriteMessage("\nAs Elevações não foram encontradas!"); } } } } catch (Exception) { continue; } continue; } } catch (Exception e) { FinalizaTarefasAposExcecao("Ocorreu um erro ao ler os blocos do AutoCAD.", e); } acTrans.Commit(); } }
public static void LerTodosOsBlocosEBuscarOsAtributos() { Document documentoAtivo = Application.DocumentManager.MdiActiveDocument; Database database = documentoAtivo.Database; Editor editor = documentoAtivo.Editor; PromptSelectionResult pmtSelRes = editor.GetSelection(); using (Transaction acTrans = documentoAtivo.TransactionManager.StartTransaction()) { BlockTable blockTable; blockTable = acTrans.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable; if (pmtSelRes.Status == PromptStatus.OK) { _lista = new List <AtributosDoBloco>(); _listaElevacao = new List <TextoElevacao>(); foreach (ObjectId id in pmtSelRes.Value.GetObjectIds()) { try { AtributosDoBloco Atributo1 = new AtributosDoBloco(); foreach (string nome in ConstantesTubulacao.TubulacaoNomeDosBlocos) { BlockTableRecord blockTableRecord; blockTableRecord = acTrans.GetObject(blockTable[nome], OpenMode.ForRead) as BlockTableRecord; if (!blockTableRecord.IsDynamicBlock) { return; } try { BlockReference bloco = null; bloco = acTrans.GetObject(id, OpenMode.ForRead) as BlockReference; BlockTableRecord nomeRealBloco = null; nomeRealBloco = acTrans.GetObject(bloco.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord; DynamicBlockReferencePropertyCollection properties = bloco.DynamicBlockReferencePropertyCollection; if (blockTableRecord.IsDynamicBlock && blockTableRecord.Name == nome) { for (int i = 0; i < properties.Count; i++) { DynamicBlockReferenceProperty property = properties[i]; if (property.PropertyName == "Distance1") { Atributo1.Distancia = property.Value.ToString(); } Atributo1.X = bloco.Position.X; Atributo1.Y = bloco.Position.Y; Atributo1.NomeBloco = nomeRealBloco.Name; Atributo1.Handle = bloco.Handle.ToString(); Atributo1.Angulo = bloco.Rotation; var lista = Atributo1.NomeBloco.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); if (lista.Where(c => c.Contains("TUBO FF DN ")).Any()) { string diametro = lista.Where(p => p.Contains("TUBO FF DN ")).Any() ? lista.Where(p => p.Contains("TUBO FF DN ")).FirstOrDefault() : string.Empty; diametro = diametro.Replace("TUBO FF DN ", ""); Atributo1.Diametro = diametro; } else if (lista.Where(c => c.Contains("TUBO CONC ARMADO DN")).Any()) { string diametro = lista.Where(p => p.Contains("TUBO CONC ARMADO DN")).Any() ? lista.Where(p => p.Contains("TUBO CONC ARMADO DN")).FirstOrDefault() : string.Empty; diametro = diametro.Replace("TUBO CONC ARMADO DN", ""); Atributo1.Diametro = diametro; } else if (lista.Where(c => c.Contains("TUBO PVC DN")).Any()) { string diametro = lista.Where(p => p.Contains("TUBO PVC DN ")).Any() ? lista.Where(p => p.Contains("TUBO PVC DN ")).FirstOrDefault() : string.Empty; diametro = diametro.Replace("TUBO PVC DN ", ""); Atributo1.Diametro = diametro; } double distancia = Convert.ToDouble(Atributo1.Distancia); double dimensaoFinalX; double dimensaoFinalY; if (bloco.Rotation < 1.5708) { dimensaoFinalX = distancia * Math.Cos(bloco.Rotation); dimensaoFinalY = distancia * Math.Sin(bloco.Rotation); Atributo1.XTubo = bloco.Position.X + dimensaoFinalX; Atributo1.YTubo = bloco.Position.Y + dimensaoFinalY; } else if (bloco.Rotation > 1.5708 && bloco.Rotation <= 3.14159265) { dimensaoFinalX = distancia * Math.Sin(3.14159265 - bloco.Rotation); dimensaoFinalY = distancia * Math.Cos(3.14159265 - bloco.Rotation); Atributo1.XTubo = bloco.Position.X - dimensaoFinalX; Atributo1.YTubo = bloco.Position.Y + dimensaoFinalY; } else if (bloco.Rotation > 3.14159265 && bloco.Rotation <= 4.71239) { dimensaoFinalX = distancia * Math.Sin(4.71239 - bloco.Rotation); dimensaoFinalY = distancia * Math.Cos(4.71239 - bloco.Rotation); Atributo1.XTubo = bloco.Position.X - dimensaoFinalX; Atributo1.YTubo = bloco.Position.Y - dimensaoFinalY; } else if (bloco.Rotation > 4.71239 && bloco.Rotation <= 6.28319) { dimensaoFinalX = distancia * Math.Sin(6.28319 - bloco.Rotation); dimensaoFinalY = distancia * Math.Cos(6.28319 - bloco.Rotation); Atributo1.XTubo = bloco.Position.X + dimensaoFinalX; Atributo1.YTubo = bloco.Position.Y - dimensaoFinalY; } TextoElevacao Elevacao1 = new TextoElevacao(); //---------------------------------------------------------------------------- Point3dCollection pntCol = new Point3dCollection { new Point3d(Atributo1.X - 5, Atributo1.Y + 5, 0), new Point3d(Atributo1.X + 5, Atributo1.Y + 5, 0), new Point3d(Atributo1.X + 5, Atributo1.Y - 5, 0), new Point3d(Atributo1.X - 5, Atributo1.Y - 5, 0) }; PromptSelectionResult pmtSelResPoint = editor.SelectCrossingPolygon(pntCol); if (pmtSelResPoint.Status == PromptStatus.OK) { MText itemSelecionado = null; double distanciaMinima = Double.MaxValue; foreach (ObjectId objId in pmtSelResPoint.Value.GetObjectIds()) { if (objId.ObjectClass.DxfName == "MTEXT") { var text = acTrans.GetObject(objId, OpenMode.ForWrite) as MText; if (text.Text.Contains("CF=")) { double distanciaTexto = Math.Sqrt(Math.Pow(text.Location.X - Atributo1.X, 2) + Math.Pow(text.Location.Y - Atributo1.Y, 2)); if (distanciaTexto < distanciaMinima) { distanciaMinima = distanciaTexto; itemSelecionado = text; } } } } if (itemSelecionado != null) { var listaTexto = itemSelecionado.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); string textoCA = listaTexto.Where(d => d.Contains("CF=")).Any() ? listaTexto.Where(p => p.Contains("CF=")).FirstOrDefault() : string.Empty; textoCA = textoCA.Replace("CF=", ""); Elevacao1.ElevacaoInicial = textoCA; Elevacao1.PosicaoX = itemSelecionado.Location.X; Elevacao1.PosicaoY = itemSelecionado.Location.Y; } else { editor.WriteMessage("\nAs Elevações não foram encontradas!"); } } //---------------------------------------------------------------------------------------------- Point3dCollection pntColElevacao = new Point3dCollection { new Point3d(Atributo1.XTubo - 5, Atributo1.YTubo + 5, 0), new Point3d(Atributo1.XTubo + 5, Atributo1.YTubo + 5, 0), new Point3d(Atributo1.XTubo + 5, Atributo1.YTubo - 5, 0), new Point3d(Atributo1.XTubo - 5, Atributo1.YTubo - 5, 0) }; PromptSelectionResult pmtSelResPoint2 = editor.SelectCrossingPolygon(pntColElevacao); if (pmtSelResPoint2.Status == PromptStatus.OK) { MText itemSelecionado2 = null; double distanciaMinima2 = Double.MaxValue; foreach (ObjectId objId2 in pmtSelResPoint2.Value.GetObjectIds()) { if (objId2.ObjectClass.DxfName == "MTEXT") { var text2 = acTrans.GetObject(objId2, OpenMode.ForWrite) as MText; if (text2.Text.Contains("CF=")) { double distanciaTexto2 = Math.Sqrt(Math.Pow(text2.Location.X - Atributo1.XTubo, 2) + Math.Pow(text2.Location.Y - Atributo1.YTubo, 2)); if (distanciaTexto2 < distanciaMinima2) { distanciaMinima2 = distanciaTexto2; itemSelecionado2 = text2; } } } } if (itemSelecionado2 != null) { var listaTexto2 = itemSelecionado2.Text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); string textoCA2 = listaTexto2.Where(d => d.Contains("CF=")).Any() ? listaTexto2.Where(p => p.Contains("CF=")).FirstOrDefault() : string.Empty; textoCA2 = textoCA2.Replace("CF=", ""); Elevacao1.ElevacaoFinal = textoCA2; Elevacao1.PosicaoX = itemSelecionado2.Location.X; Elevacao1.PosicaoY = itemSelecionado2.Location.Y; } else { editor.WriteMessage("\nAs Elevações não foram encontradas!"); } _listaElevacao.Add(Elevacao1); } _lista.Add(Atributo1); break; } } } catch (Exception) { continue; } } } catch (Exception) { continue; } } } acTrans.Commit(); } }