Author Topic: Work on locked layers sample  (Read 733 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
Work on locked layers sample
« on: February 28, 2013, 08:42:56 PM »
 
Code: [Select]
       [CommandMethod("WorkWithLockedLayers","wlock", CommandFlags.UsePickSet | CommandFlags.Redraw)]
        public void testWorkOnLockedLayers()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            bool fine = true;
            ObjectIdCollection locked = new ObjectIdCollection();
            try
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);

                    foreach (ObjectId ltId in lt)
                    {
                        if (ltId.IsValid && ltId.IsResident && !ltId.IsErased) // just drawing layers were allowed
                        {
                            LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(ltId, OpenMode.ForRead);

                            if (ltr.IsLocked)
                            {
                                locked.Add(ltId);
                                ltr.UpgradeOpen();
                                ltr.IsLocked = false;
                                ltr.DowngradeOpen();// optional
                            }
                        }
                    }
                    //
                    // Here you begin to work with objects and not worry that they are in the locked layers
                    // e.g. itrerate through selection etc. (poor code commented)
                    //SelectionSet ss = ed.SelectAll().Value;
                    //foreach (ObjectId id in ss.GetObjectIds())
                    //{
                    //    Entity ent = (Entity)tr.GetObject(id, OpenMode.ForWrite);
                    //    ent.ColorIndex = 121;
                    //}
                    //
                    foreach (ObjectId ltId in lt)
                    {
                        LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(ltId, OpenMode.ForWrite);
                        ltr.IsLocked = true;

                    }
                    tr.Commit();
                }
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                fine = false;
                ed.WriteMessage(ex.ToString());
            }
            finally
            {
                if (!fine)
                    doc.SendStringToExecute("_layerp", true, false, false);
            }
        }