Я пытаюсь импортировать блок, который находится в файле "блок.dwg" в активный документ AutoCad, пользуясь примером https://www.keanw.com/2006/08/import_blocks_f.html#comment-5551400802
Проблема в том, что я использую интрефейс AcadDatabase : IAcadDatabase (System.Runtime.InteropServices), а в примере используется Database (Autodesk.AutoCAD.DatabaseServices). Каким образом конвертировать базу данных из System.Runtime.InteropServices в Autodesk.AutoCAD.DatabaseServices? Или как вообще импортировать блок, используя пространство имен из System.Runtime.InteropServices (подключаю как ссылку COM: AutoCAD 2016 Type Library)? Там нет возможности в БД acadDoc получить destDb.BlockTableId.
Название темы было изменено @alina.balkanskaia для улучшения навигации на форуме. Оригинальное название: Импорт блока в документ через интерфейс
Solved! Go to Solution.
Solved by kpblc2000. Go to Solution.
Так СОМ-модель совершенно другая. Для импорта описания блока (как мне кажется) надо открывать файл-источник через ObjectDBX и использовать CopyObjects.
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
string progId = "AutoCAD.Application.20";
AcadApplication acApp = null;
try
{
acApp = (AcadApplication)Marshal.GetActiveObject(progId);
}
catch {}
Object ReadOnly = false;
Object Password = Type.Missing;
AcadDocument newdwg = acApp.Documents.Open(@"Файл_с_блоками.dwg", ReadOnly, Password); //источник
AcadDatabase SourceDB = newdwg.ModelSpace.Database;
AcadBlock block = SourceDB.Blocks.Item("Нужный_блок");
AcadBlock[] blockarr = new AcadBlock[1];
blockarr[0] = block;
AcadDocument acadDoc = acApp.Documents.Open(@"Destination.DWG", ReadOnly, Password); //файл назначения
AcadDatabase DestDB = acadDoc.ModelSpace.Database;
SourceDB.CopyObjects(blockarr, DestDB.Blocks);
newdwg.Close();
Can't find what you're looking for? Ask the community or share your knowledge.