Тема: Назначить активный слой для документа
Всем добрый день!
Ребята, нужна Ваша помощь!
Встала задача в коде на VB.NET использовать ряд свойств объекта Document из ActiveX API, такие как:
- Document.ActiveLayer;
- Document.ActiveLinetype;
- Document.ActiveDimStyle;
- и т.д.
Что-то не получается изменить ни активный слой ни текущий тип линии для документа.
В качестве примера ‘перерисовал’ пример из документации Object Model AutoCAD:
'' VB.Net - Тест для определения активного слоя документа '' с использованием свойства Document.ActiveLayer из арсенала API COM <CommandMethod("TestActiveLayer")> _ Public Sub TestActiveLayer() ' Получение текущего документа и его база данных CAD Dim curDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument() Dim curDb As Database = curDoc.Database Dim docCOM = Application.AcadApplication().ActiveDocument Dim currLayer As AcadLayer Dim activeLayer As String = String.Empty Dim previousCountLayer As Integer = 0 '' Получаем текущий слой активного документа currLayer = docCOM.ActiveLayer activeLayer = currLayer.Name previousCountLayer = docCOM.Layers.Count '' Для проверки, получим активный слой средствами API .NET Using curTrans As Transaction = curDb.TransactionManager.StartTransaction() '' Получаем таблицу слоёв базы данных текущего чертежа Dim tableLayer As LayerTable tableLayer = curTrans.GetObject(curDb.LayerTableId, OpenMode.ForRead) Dim recordTableLayer As LayerTableRecord recordTableLayer = curTrans.GetObject(curDb.Clayer, OpenMode.ForRead) MsgBox("Текущий слой - " & currLayer.Name & " Текущий слой для контроля = " & recordTableLayer.Name & " Количество слоев = " & previousCountLayer) End Using '' Создадим новый слой и сделаем его активным слоем Dim newLayer As AcadLayer newLayer = docCOM.Layers.Add("TestLayer") MsgBox("Создан новый слой - " & newLayer.Name & " Новое количество слоев = " & docCOM.Layers.Count) ''Следующая строка выдает ошибку "Член группы не найден." docCOM.ActiveLayer = newLayer MsgBox("Новый активный слой - " & docCOM.ActiveLayer.Name & " Количество слоев = " & docCOM.Layers.Count) End Sub
Однако при выполнении строка кода
docCOM.ActiveLayer = newLayer
выдает ошибку:
System.Runtime.InteropServices.COMException (0x80020003): Член группы не найден. (Исключение из HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))
Аналогичная ситуация и с заданием текущего типа линии.
Явно, что-то делаю не так!
Подскажите, пожалуйста, в чем дело, что надо сделать, чтобы изменить активный слой для документа?
Заранее благодарю за помощь.
С уважением, Андрей