Honnika N Suresh Ответов: 2

Код C# для вставки блока или текста


Я пытаюсь написать программу на языке C#, которая вставит блок или текст в чертеж, не открывая приложение Autocad. Я в порядке, чтобы запустить приложение Autocad в фоновом режиме.

Что я уже пробовал:

На самом деле я получаю ошибку
Система.Исключении invalidprogramexception произошло
HResult= 0x8013153A Common Language Runtime обнаружила недопустимую программу.
Source=<не может оценить="" the="" exception="" source="">
StackTrace: в Autodesk.AutoCAD.DatabaseServices.Базы данных.get_TransactionManager()

Во время выполнения этого нижеприведенного фрагмента кода

Database sourceDb = новая база данных(false, true); //временная база данных для хранения данных для блока, который мы хотим импортировать
пробовать
{
sourceDb.ReadDwgFile(dwgPath, System.IO.FileShare.Read, true, ""); //считывание DWG в боковую базу данных
ObjectIdCollection blockIds = new ObjectIdCollection(); // создайте переменную для хранения списка идентификаторов блоков

Autodesk.AutoCAD.DatabaseServices.Вопросы ТМ = sourceDb.Вопросы; используя (сделки мыт = ТМ.Starttransaction тогда())
{
// Откройте таблицу блоков
BlockTable bt = (BlockTable)tm.Функция getobject(sourceDb.BlockTableId, Параметр Openmode.ForRead, false);

// Проверьте каждый блок в таблице блоков
foreach (ObjectId btrId в bt)
{
BlockTableRecord btr = (BlockTableRecord)tm.GetObject(btrId, OpenMode.ForRead, false);
// Только добавляйте именованные блоки & non-layout в список копирования
если (!btr.IsAnonymous & & amp; !БТР.IsLayout)
{
blockIds.Add(btrId);
}
БТР.Располагать();
}
}
// Копирование блоков из исходной базы данных в целевую
//IdMapping mapping = new IdMapping(); sourceDb.WblockCloneObjects(blockIds, _database.BlockTableId, mapping, DuplicateRecordCloning.Заменить, ложь); _editor.WriteMessage ("\nCopied " + blockIds.Рассчитывать.ToString() + "определения блоков из" + blockToImport + " в текущий чертеж.");
}

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Обычно вы получаете нечто подобное, когда пытаетесь смешать 64 - и 32-битный код в одном и том же процессе.

Возможно, ваша установка AutoCAD является 64-разрядной, а приложение компилируется как x86 (32-разрядная версия) или включена функция "предпочесть 32-разрядную версию". Посмотрите в свойствах проекта, установите целевое значение x64 и повторите попытку.