using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
namespace ClassLibrary2
{
public class Class1
{
public void Initialize()
{
Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated;
}
private void DocumentManager_DocumentCreated(object sender, DocumentCollectionEventArgs e)
{
// Чтение данных из расширенных данных чертежа
// код не привожу, т.к. для вопроса не важен
if (!MpCadHelpers.HasXDataDictionary("MP_LayerToEnt"))
return;
if (MpCadHelpers.GetStringXData("MP_LayerToEnt").Equals("ON"))
{
MpLayerAutoFunctions.LayerAutoIsEventOn = true;
this.On();
}
else
{
MpLayerAutoFunctions.LayerAutoIsEventOn = false;
this.Off();
}
}
// Коллекция ObjectId
public ObjectIdCollection ObjCol;
// Переменная служит для определения включена ли работа функции
public static bool LayerAutoIsEventOn;
public void On()
{
// Создаем новую коллекцию ObjectId
ObjCol = new ObjectIdCollection();
//
LayerAutoIsEventOn = true;
// Включаем обработчики событий
Application.DocumentManager.MdiActiveDocument.Database.ObjectAppended += CallBack_ObjectAppended;
Application.DocumentManager.MdiActiveDocument.CommandEnded += CallBack_CommandEnded;
Application.DocumentManager.MdiActiveDocument.CommandCancelled += CallBack_CommandEnded;
Application.DocumentManager.MdiActiveDocument.CommandFailed += MdiActiveDocument_CommandFailed;
Application.DocumentManager.DocumentActivated += DocumentManager_DocumentActivated;
}
private void DocumentManager_DocumentActivated(object sender, DocumentCollectionEventArgs e)
{
// Очищаем список
ObjCol?.Clear();
// В переменную записывается значение из расширенных данных чертежа
// код не привожу, т.к. он не важен (в случае отсутсвия данных возвращает false)
LayerAutoIsEventOn = MpCadHelpers.GetStringXData("MP_LayerToEnt").Equals("ON");
}
// Отключение работы функции
public void Off()
{
// "Обнуляем" переменные
ObjCol = null;
LayerAutoIsEventOn = false;
// Отключаем обработчики событий
Application.DocumentManager.MdiActiveDocument.Database.ObjectAppended -= CallBack_ObjectAppended;
Application.DocumentManager.MdiActiveDocument.CommandEnded -= CallBack_CommandEnded;
Application.DocumentManager.MdiActiveDocument.CommandCancelled -= CallBack_CommandEnded;
Application.DocumentManager.MdiActiveDocument.CommandFailed -= MdiActiveDocument_CommandFailed;
Application.DocumentManager.DocumentActivated -= DocumentManager_DocumentActivated;
}
private void CallBack_CommandEnded(object sender, CommandEventArgs e)
{
if (!LayerAutoIsEventOn)
return;
// Дальше код программы. Для вопроса не важен
}
// Команда завершилась неудачно
private void MdiActiveDocument_CommandFailed(object sender, CommandEventArgs e)
{
// Очищаем список
ObjCol?.Clear();
}
// Обработка события добавления объекта в БД чертежа
private void CallBack_ObjectAppended(object sender, ObjectEventArgs e)
{
if (!LayerAutoIsEventOn)
return;
// Дальше код программы. Для вопроса не важен
}
}
}