Author Topic: Get all block references on a particular layout  (Read 1447 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 all block references on a particular layout
« on: June 06, 2012, 07:01:24 PM »

Code: [Select]
      //inspired by Xiaodong Liang
      [CommandMethod("finb")]
        public static void FindBlokRefInLayout()
        {
            SelectionSet ss;

            string lName = "Layout1";

            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            // switch to the Layout1
            Autodesk.AutoCAD.ApplicationServices.Application.SetSystemVariable("ctab", lName);

            Transaction tr = db.TransactionManager.StartTransaction();

            using (tr)
            {
                try
                {
                    BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;

                    foreach (ObjectId id in bt)
                    {

                        BlockTableRecord btr;

                        btr = tr.GetObject(id, OpenMode.ForRead) as BlockTableRecord;

                        // if this is a layout

                        if (btr.IsLayout)
                        {

                            ObjectId lid = btr.LayoutId;

                            Layout lt = tr.GetObject(lid, OpenMode.ForWrite) as Layout;

                            List<ObjectId> objs = new List<ObjectId>();

                            // get name of the layout

                            if (lt.LayoutName != lName)
                            { 
                                continue;
                            }
                            else
                            {

                                // select all blocks on Layout1

                                RXClass etype = RXObject.GetClass(typeof(BlockReference));

                                // iterate the entities within the layout

                                foreach (ObjectId eid in btr)
                                {
                                    Entity ent;

                                    ent = tr.GetObject(eid, OpenMode.ForRead) as Entity;

                                    // cast if this is a block reference

                                    if (eid.ObjectClass.IsDerivedFrom(etype))
                                    {

                                        objs.Add(eid);

                                        // highlight entity
                                       
                                        ent.Highlight();

                                    }

                                }
                            }
                            // populate the selectionset

                                ed.SetImpliedSelection(objs.ToArray<ObjectId>());

                            // perform the selection

                                PromptSelectionResult res = ed.SelectImplied();

                           
                                if (res.Status == PromptStatus.OK)
                                {

                                    ss = res.Value;
                                    // display information for user
                                    ed.WriteMessage("\n\t---\tSelected: {0} block instances", ss.GetObjectIds().Length);
                                }
                                else
                                {
                                    ed.WriteMessage("\nEmpty selection!");
                                   // return;
                                }

                        }

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

~'J'~