ADN Club > AutoCAD .NET API
Копирорование блоков
(1/1)
Александр_М:
Добрый день.
Подскажите как решить проблему.
Копирую блок из одного чертежа в другой.
--- Код - C# [Выбрать] --- public static void CopyBlockDefinition(string sourceDwgPath, string blockName, Database targetDb) { using (Database sourceDb = new Database(false, true)) { sourceDb.ReadDwgFile(sourceDwgPath, FileOpenMode.OpenForReadAndAllShare, false, null); using (Transaction sourceTrans = sourceDb.TransactionManager.StartTransaction()) { BlockTable sourceBt = (BlockTable)sourceTrans.GetObject(sourceDb.BlockTableId, OpenMode.ForRead); if (!sourceBt.Has(blockName)) return; ObjectId sourceBlockId = sourceBt[blockName]; using (Transaction targetTrans = targetDb.TransactionManager.StartTransaction()) { IdMapping idMap = new IdMapping(); sourceDb.WblockCloneObjects( new ObjectIdCollection() { sourceBlockId }, targetDb.BlockTableId, idMap, DuplicateRecordCloning.Replace, false); targetTrans.Commit(); } sourceTrans.Commit(); } } }
Всё работает, копия создаётся.
Но есть проблема.
В оригинальном блоке назначен порядок прорисовки объектов, а в копии он нарушен.
Порядок прорисовки важен. Получается атрибут закрыт штриховкой и его не видно.
При копировании ctrl+c ctrl+v естественно всё нормально.
Как скопировать блок сохранив порядок прорисовки?
Александр Ривилис:
Поиграйся с DrawOrderTable для блока. Есть примеры на форуме.
Александр_М:
Спасибо!
Сделал как тут https://adn-cis.org/forum/index.php?topic=9821.msg43667#msg43667
Всё работает.
Привалов Дмитрий:
--- Цитата: Александр_М от 06-07-2025, 22:20:26 ---Всё работает.
--- Конец цитаты ---
Есть еще варианты, может кому-то может пригодятся для борьбы с недоработками определенных версий.
При ручной вставке блока DrawOrderTable обычно копируется и проблем нет.
В AutoCAD 2010 при ручной вставке блока или при вставке блока из палитры, точно не помню, DrawOrderTable не копировался.
В итоге проверил 2 рабочих варианта.
1. В том месте, где штриховка перекрывала объект, подрезал штриховку, избавившись от необходимости в DrawOrderTable.
2. Перестроил блоки программно. Считал порядок следования объектов из DrawOrderTable и пересоздал объекты в блоке. Объекты добавленные последними отображаются сверху.
Александр_М:
Еще один рабочий вариант.
Я отредактировал блок, удалил все атрибуты и добавил их последними, стало копироваться нормально.
Изначально блок был сделан в произвольном порядке и штриховки я просто отправил на задний план.
Видимо порядок создания копируется, а вот уже переопределение положения нет.
Навигация
Перейти к полной версии