Forge, API и программирование – Русский – только для чтения
Задавайте вопросы и делитесь знаниями по Autodesk Forge и программированию на API программного обеспечения Autodesk
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Как импортировать блок из файла "блок.dwg" в документ AutoCad через интерфейс?

2 REPLIES 2
SOLVED
Reply
Message 1 of 3
a.koltakovADRC7
1645 Views, 2 Replies

Как импортировать блок из файла "блок.dwg" в документ AutoCad через интерфейс?

Я пытаюсь импортировать блок, который находится в файле "блок.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.

 

@a.koltakovADRC7 

Название темы было изменено @alina.balkanskaia для улучшения навигации на форуме. Оригинальное название: Импорт блока в документ через интерфейс

2 REPLIES 2
Message 2 of 3
kpblc2000
in reply to: a.koltakovADRC7

Так СОМ-модель совершенно другая. Для импорта описания блока (как мне кажется) надо открывать файл-источник через 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

Message 3 of 3

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.

Post to forums  

Autodesk Design & Make Report