Author Topic: Get constant attributes example  (Read 670 times)

0 Members and 1 Guest are viewing this topic.

Offline fixo

  • Full Member
  • ***
  • Posts: 135
  • Karma: +4/-0
  • Gender: Male
    • prefered language: C
    • Prog expertise: Good
    • View Profile
Get constant attributes example
« on: May 29, 2012, 07:40:02 PM »
 
Code: [Select]
       [CommandMethod("gatt", CommandFlags.Modal | CommandFlags.Session)]
        public static void GetAttributesTest()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            using (DocumentLock docloc = doc.LockDocument())
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    try
                    {
                        BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;                       
                        PromptSelectionOptions pso = new PromptSelectionOptions();
                        pso.MessageForRemoval = "\nWrong objects selected or Nothing selected";
                        pso.MessageForAdding = "\nSelect Blocks";
                        TypedValue[] tvs = new TypedValue[] { new TypedValue(0, "INSERT") };
                        SelectionFilter filt = new SelectionFilter(tvs);
                        PromptSelectionResult psr = ed.GetSelection(pso, filt);
                        if (!(psr.Status == PromptStatus.OK))
                            return;
                        if (psr.Value.Count == 0)
                        {
                            ed.WriteMessage("\nCount: {0} blocks",  psr.Value.Count);
                            return;
                        }

                        foreach (SelectedObject sobj in psr.Value)
                        {
                            BlockReference bref = (BlockReference)tr.GetObject(sobj.ObjectId, OpenMode.ForRead);
                            BlockTableRecord btrec = (BlockTableRecord)tr.GetObject(bref.BlockTableRecord, OpenMode.ForRead);
                            StringBuilder sb = new StringBuilder();
                            //Get constant attributes from BlockDefinition object
                            foreach (ObjectId eid in btrec)
                            {
                                DBObject obj = (Entity)tr.GetObject(eid, OpenMode.ForRead);
                                if (obj is AttributeDefinition)
                                {
                                    AttributeDefinition atdef = obj as AttributeDefinition;
                                    if (atdef.Constant)
                                    {
                                        sb.AppendLine(atdef.TextString);
                                    }
                                }


                            }
                            //Get visible attributes from BlockReference object
                            Autodesk.AutoCAD.DatabaseServices.AttributeCollection attcoll = bref.AttributeCollection;

                            foreach (ObjectId id in attcoll)
                            {
                                AttributeReference atref = (AttributeReference)tr.GetObject(id, OpenMode.ForRead);
                                sb.AppendLine(atref.TextString);
                            }
                            ed.WriteMessage(sb.ToString() + "\n");

                        }
                        tr.Commit();
                    }
                    catch (Autodesk.AutoCAD.Runtime.Exception ex)
                    {
                        ed.WriteMessage("\n" + ex.Message + "\n" + ex.StackTrace);
                    }
                }
            }
        }

~'J'~