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;
            // Дальше код программы. Для вопроса не важен
        }
    }
}