... 和。NET(包括锁定层检查);快速编写,未经测试:
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Runtime;
- using acApp = Autodesk.AutoCAD.ApplicationServices.Application;
- using System.Collections.Generic;
- [assembly: ExtensionApplication(typeof(CADTutor.Sample.ViewportsToggle.Events))]
- namespace CADTutor.Sample.ViewportsToggle
- {
- class Events : IExtensionApplication
- {
- void IExtensionApplication.Initialize()
- {
- acApp.DocumentManager.DocumentCreated += onDocumentCreated;
- Document doc = acApp.DocumentManager.MdiActiveDocument;
- doc.Database.SystemVariableChanged += onSystemVariableChanged;
- }
- void IExtensionApplication.Terminate()
- {
- }
- static void onDocumentCreated(object sender, DocumentCollectionEventArgs e)
- {
- Document doc = e.Document;
- if (doc != null)
- doc.Database.SystemVariableChanged += onSystemVariableChanged;
- }
- static void onSystemVariableChanged(object sender,
- Autodesk.AutoCAD.DatabaseServices.SystemVariableChangedEventArgs e)
- {
- if (e.Changed == true && e.Name.ToUpper() == "CLAYER")
- {
- Database db = HostApplicationServices.WorkingDatabase;
- using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
- {
- BlockTableRecord btr =
- (BlockTableRecord)tr.GetObject(
- SymbolUtilityServices.GetBlockPaperSpaceId(db),
- OpenMode.ForRead);
- string clayer = db.Clayer.ToString().ToUpper();
- List<LayerTableRecord> layersToLock = new List<LayerTableRecord>();
- foreach (ObjectId id in btr)
- {
- Viewport vp =
- tr.GetObject(id, OpenMode.ForRead) as Viewport;
- if (vp != null)
- {
- string vpLayer = vp.Layer.ToUpper();
- LayerTableRecord ltr =
- (LayerTableRecord)tr.GetObject(vp.LayerId, OpenMode.ForWrite);
- if (ltr.IsLocked == true)
- {
- layersToLock.Add(ltr);
- ltr.IsLocked = false;
- }
- vp.UpgradeOpen();
- if (clayer == vp.Layer.ToUpper())
- vp.On = true;
- else
- vp.On = false;
- }
- }
- foreach (LayerTableRecord ltr in layersToLock)
- ltr.IsLocked = true;
- tr.Commit();
- }
- }
- }
- }
- }
|