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 и пересоздал объекты в блоке. Объекты добавленные последними отображаются сверху.

Александр_М:
Еще один рабочий вариант.
Я отредактировал блок, удалил все атрибуты и добавил их последними, стало копироваться нормально.
Изначально блок был сделан в произвольном порядке и штриховки я просто отправил на задний план.
Видимо порядок создания копируется, а вот уже переопределение положения нет.

Навигация

[0] Главная страница сообщений

Перейти к полной версии