public class ImplementClass0 : IExtensionApplication
{
//тут я храню id всех открытых в текущий момент чертежей
//это коллекция отслеживания
private List<ObjectId> btids = new List<ObjectId>();
public void Initialize()
{
if (Application.DocumentManager.MdiActiveDocument == null)
return;
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
Application.DocumentManager.DocumentCreated += new DocumentCollectionEventHandler(doc_DocumentCreated);
Application.DocumentManager.DocumentActivated += new DocumentCollectionEventHandler(doc_DocumentActivated);
Application.DocumentManager.DocumentToBeDestroyed += new DocumentCollectionEventHandler(doc_DocumentDestroyed);
//сразу подписываюсь на события активного чертежа и добавляю его в коллекцию отслеживания
btids.Add(db.BlockTableId);
addreactors(doc, db, ed);
}
public void Terminate()
{
throw new NotImplementedException();
}
public void addreactors(Document _doc, Database _db, Editor _ed)
{
_doc.Database.SystemVariableChanged += new Autodesk.AutoCAD.DatabaseServices.SystemVariableChangedEventHandler(db_SystemVariableChanged);
_doc.ImpliedSelectionChanged += new EventHandler(doc_SelectionChanged);
_doc.CommandWillStart += new CommandEventHandler(doc_MonitorCommandWillStarted);
_doc.CommandEnded += new CommandEventHandler(doc_MonitorCommandEnded);
_db.ObjectAppended += new ObjectEventHandler(db_MonitorObjectAppended);
_ed.EnteringQuiescentState += new EventHandler(ed_EnteringQuiescentState);
}
public void doc_DocumentCreated(object sender, DocumentCollectionEventArgs e)
{
if (e.Document == null || e.Document.Database == null)
return;
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
//если докемнт только что создан, значит подписки на события еще не было - подписываюсь
btids.Add(db.BlockTableId);
addreactors(doc, db, ed);
}
public void doc_DocumentActivated(object sender, DocumentCollectionEventArgs e)
{
if (e.Document == null || e.Document.Database == null)
return;
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
//если id чертежа есть в коллекции отслеживания, то подписка уже была, в противном случае - подписываюсь
if (!btids.Contains(db.BlockTableId))
{
btids.Add(db.BlockTableId);
addreactors(doc, db, ed);
}
}
public void doc_DocumentDestroyed(object sender, DocumentCollectionEventArgs e)
{
//при закрытии чертежа удаляю его id из коллекции отслеживания
if (btids.Contains(e.Document.Database.BlockTableId))
btids.Remove(e.Document.Database.BlockTableId);
}
}