コード例 #1
0
        public static void LerTodosOsBlocosEBuscarOsAtributos()
        {
            Document documentoAtivo = Application.DocumentManager.MdiActiveDocument;
            Database database       = documentoAtivo.Database;

            using (Transaction acTrans = database.TransactionManager.StartTransaction())
            {
                BlockTable blockTable;
                blockTable = acTrans.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable;

                try
                {
                    _lista = new List <AtributosDoBloco>();

                    foreach (string nome in ConstantesTubulacao.TubulacaoNomeDosBlocos)
                    {
                        BlockTableRecord blockTableRecord;
                        blockTableRecord = acTrans.GetObject(blockTable[nome], OpenMode.ForRead) as BlockTableRecord;

                        foreach (ObjectId objId_loopVariable in blockTableRecord)
                        {
                            BlockReference blocoDinamico;
                            blocoDinamico = (BlockReference)acTrans.GetObject(objId_loopVariable, OpenMode.ForRead) as BlockReference;

                            DynamicBlockReferencePropertyCollection properties = blocoDinamico.DynamicBlockReferencePropertyCollection;

                            AtributosDoBloco Atributo1 = new AtributosDoBloco();

                            for (int i = 0; i < properties.Count; i++)
                            {
                                DynamicBlockReferenceProperty property = properties[i];

                                if (property.PropertyName == "Distance1")
                                {
                                    Atributo1.Distancia = property.Value.ToString();
                                }
                            }
                            Atributo1.X         = blocoDinamico.Position.X;
                            Atributo1.Y         = blocoDinamico.Position.Y;
                            Atributo1.nomeBloco = blocoDinamico.Name;
                            Atributo1.Handle    = blocoDinamico.Handle.ToString();
                            Atributo1.Angulo    = blocoDinamico.Rotation;

                            _lista.Add(Atributo1);
                        }
                        continue;
                    }
                }
                catch (Exception e)
                {
                    FinalizaTarefasAposExcecao("Ocorreu um erro ao ler os blocos do AutoCAD.", e);
                }
                acTrans.Commit();
            }
        }
コード例 #2
0
        public static void LerTodosOsBlocosEBuscarOsAtributos()
        {
            Document documentoAtivo = Application.DocumentManager.MdiActiveDocument;
            Database database       = documentoAtivo.Database;

            using (Transaction acTrans = database.TransactionManager.StartTransaction())
            {
                BlockTable blockTable;
                blockTable = acTrans.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable;

                try
                {
                    _lista = new List <AtributosDoBloco>();

                    BlockTableRecord blockTableRecord;
                    blockTableRecord = acTrans.GetObject(blockTable["BLOCO_ESTACA_POSTE"], 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);
                            string             tag    = attRef.Tag;
                            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);
                    }
                }
                catch (Exception e)
                {
                    FinalizaTarefasAposExcecao("Ocorreu um erro ao ler os blocos do AutoCAD.", e);
                }
                acTrans.Commit();
            }
        }
コード例 #3
0
        public static void LerTodosOsBlocosEBuscarOsAtributos()
        {
            Document documentoAtivo = Application.DocumentManager.MdiActiveDocument;
            Database database       = documentoAtivo.Database;
            Editor   editor         = documentoAtivo.Editor;

            ObjectId idBTR = ObjectId.Null;

            using (Transaction acTrans = database.TransactionManager.StartTransaction())
            {
                using (BlockTable acBlockTable = database.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable)
                {
                    BlockTable blockTable;
                    blockTable = acTrans.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable;

                    try
                    {
                        _lista = new List <AtributosDoBloco>();

                        foreach (string nome in ConstantesTubulacao.TubulacaoNomeDosBlocos)
                        {
                            BlockTableRecord blockTableRecord;
                            blockTableRecord = acTrans.GetObject(blockTable[nome], OpenMode.ForRead) as BlockTableRecord;

                            BlockReference blocoRefDinamico;
                            blocoRefDinamico = (BlockReference)acTrans.GetObject(blockTable[nome], OpenMode.ForRead) as BlockReference;

                            BlockTableRecord blockTableRecordDynamic = acTrans.GetObject(blocoRefDinamico.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;

                            foreach (ObjectId objId_loopVariable in blockTableRecord.GetBlockReferenceIds(true, true))
                            {
                                if (blockTableRecordDynamic != null && !blockTableRecordDynamic.ExtensionDictionary.IsNull)
                                {
                                    DBDictionary extDic = acTrans.GetObject(blockTableRecordDynamic.ExtensionDictionary, OpenMode.ForRead) as DBDictionary;

                                    if (extDic != null)
                                    {
                                        EvalGraph graph   = acTrans.GetObject(extDic.GetAt("ACAD_ENHANCeditorBLOCK"), OpenMode.ForRead) as EvalGraph;
                                        int[]     nodeIds = graph.GetAllNodes();

                                        foreach (uint nodeId in nodeIds)
                                        {
                                            DBObject node = graph.GetNode(nodeId, OpenMode.ForRead, acTrans);
                                            if (!(node is BlockPropertiesTable))
                                            {
                                                continue;
                                            }
                                            BlockPropertiesTable blockPropertiesTable = node as BlockPropertiesTable;
                                            int currentRow = SelectRowNumber(ref blockPropertiesTable);
                                            BlockPropertiesTableRow row       = blockPropertiesTable.Rows[currentRow];
                                            List <string>           nameProps = new List <string>();

                                            for (int i = 0; i < blockPropertiesTable.Columns.Count; i++)
                                            {
                                                nameProps.Add(blockPropertiesTable.Columns[i].Parameter.Name);
                                            }
                                            DynamicBlockReferencePropertyCollection dynPropsCol = blocoRefDinamico.DynamicBlockReferencePropertyCollection;

                                            foreach (DynamicBlockReferenceProperty dynProp in dynPropsCol)
                                            {
                                                int i = nameProps.FindIndex(delegate(string s) { return(s == dynProp.PropertyName); });
                                                if (i >= 0 && i < nameProps.Count)
                                                {
                                                    try
                                                    {
                                                        dynProp.Value = row[i].AsArray()[0].Value;
                                                    }
                                                    catch
                                                    {
                                                        editor.WriteMessage("\nCan not set to {0} value={1}",
                                                                            dynProp.PropertyName, row[i].AsArray()[0].Value);
                                                    }
                                                    //-----------------------------------------------------------------------------------------------
                                                    //foreach (ObjectId objId_loopVariable in blocoRefDinamico.GetBlockReferenceIds(true, true))
                                                    AtributosDoBloco Atributo1 = new AtributosDoBloco();

                                                    Atributo1.X      = blocoRefDinamico.Position.X;
                                                    Atributo1.Y      = blocoRefDinamico.Position.Y;
                                                    Atributo1.Handle = blocoRefDinamico.Handle.ToString();
                                                    Atributo1.Angulo = blocoRefDinamico.Rotation;

                                                    _lista.Add(Atributo1);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            continue;
                        }
                    }
                    catch (Exception e)
                    {
                        FinalizaTarefasAposExcecao("Ocorreu um erro ao ler os blocos do AutoCAD.", e);
                    }
                    acTrans.Commit();
                }
            }
        }
コード例 #4
0
        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();
            }
        }
コード例 #5
0
        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();
            }
        }
コード例 #6
0
        public static void LerTodosOsBlocosEBuscarOsAtributos()
        {
            Document documentoAtivo = Application.DocumentManager.MdiActiveDocument;
            Database database       = documentoAtivo.Database;
            Editor   editor         = documentoAtivo.Editor;


            using (Transaction acTrans = documentoAtivo.TransactionManager.StartTransaction())
            {
                BlockTable blockTable;
                blockTable = acTrans.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable;

                //TypedValue[] acTypValAr = new TypedValue[0];
                // acTypValAr.SetValue(new TypedValue((int)DxfCode.Start, "BLOCK"),0);

                //SelectionFilter acSelFtr = new SelectionFilter(acTypValAr);

                PromptSelectionResult pmtSelRes = editor.GetSelection();

                if (pmtSelRes.Status == PromptStatus.OK)
                {
                    _lista = new List <AtributosDoBloco>();

                    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
                                {
                                    if (blockTableRecord.IsDynamicBlock && blockTableRecord.Name.Equals(nome))
                                    {
                                        BlockReference bloco = acTrans.GetObject(id, OpenMode.ForRead) as BlockReference;

                                        DynamicBlockReferencePropertyCollection properties = bloco.DynamicBlockReferencePropertyCollection;

                                        BlockTableRecord nomeRealBloco = null;

                                        nomeRealBloco = acTrans.GetObject(bloco.DynamicBlockTableRecord, OpenMode.ForRead) as BlockTableRecord;

                                        if (!_lista.Any(b => b.Handle.ToString() == Atributo1.Handle))
                                        {
                                            for (int i = 0; i < properties.Count; i++)
                                            {
                                                DynamicBlockReferenceProperty property = properties[i];
                                                if (property.PropertyName == "Distance1")
                                                {
                                                    Atributo1.Distancia = property.Value.ToString();
                                                    _lista.Add(Atributo1);
                                                }
                                                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);

                                                var    lista    = Atributo1.NomeBloco.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                                                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;

                                                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;
                                                    _lista.Add(Atributo1);
                                                }
                                                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;
                                                    _lista.Add(Atributo1);
                                                }
                                                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;
                                                    _lista.Add(Atributo1);
                                                }
                                                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;
                                                    _lista.Add(Atributo1);
                                                }
                                            }
                                        }
                                    }
                                }
                                catch (Exception)
                                {
                                    continue;
                                }
                            }
                        }
                        catch (Exception)
                        {
                            continue;
                        }
                    }
                }
                acTrans.Commit();
            }
        }