Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: sided от 16-04-2023, 22:27:40

Название: Не копируются объекты вида "Повернутый размер"
Отправлено: sided от 16-04-2023, 22:27:40
Как следует из заголовка, по неизвестной мне причине WblockCloneObjects не желает переносить объект по ID из одного чертежа в другой. Пробовал скопировать сначала сам объект, к которому применены объекты типа "Повернутый размер", после докинуть его размеры - не помогло. В чем может быть проблема?
Название: Re: Не копируются объекты вида "Повернутый размер"
Отправлено: Александр Ривилис от 16-04-2023, 22:31:45
sided,
Где код и пример чертежа?
Название: Re: Не копируются объекты вида "Повернутый размер"
Отправлено: sided от 16-04-2023, 22:37:13
Александр Ривилис,
Код остался практически без изменений из моего предыдущего вопроса: https://adn-cis.org/forum/index.php?topic=10936
Проблемный объект прилагаю:
Название: Re: Не копируются объекты вида "Повернутый размер"
Отправлено: Привалов Дмитрий от 17-04-2023, 07:56:05
Как следует из заголовка, по неизвестной мне причине WblockCloneObjects не желает переносить объект по ID из одного чертежа в другой

Данный размер ассоциативный.
Попробуй снять ассоциативность, например скопируй размер, а старый удали, а потом попробуй склонировать. Если ошибка пропала то проблема скорее всего в ассоциативности.
Тогда возможное решение, снимать ассоциативность перед клонированием, а потом создавать по новой, если нужно.
Название: Re: Не копируются объекты вида "Повернутый размер"
Отправлено: sided от 17-04-2023, 12:52:29
Привалов Дмитрий, Есть ли пример того, как это можно сделать кодом?
Название: Re: Не копируются объекты вида "Повернутый размер"
Отправлено: Александр Ривилис от 17-04-2023, 13:29:30
sided,
Попробуй такой вариант:
Код - C# [Выбрать]
  1. [CommandMethod("WBD")]
  2. public void WBDhandler() // This method can have any name
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Database currentDb = doc.Database;
  6.   ObjectIdCollection copiedIds = new ObjectIdCollection();
  7.   Database tempDb = null;
  8.   using (Database srcDb = new Database(false, false))
  9.   {
  10.     srcDb.ReadDwgFile("C:\\srcDwg.dwg", FileShare.Read, false, "");
  11.     using (Transaction tr = srcDb.TransactionManager.StartTransaction())
  12.     {
  13.       BlockTableRecord ms = tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(srcDb), OpenMode.ForRead) as BlockTableRecord;
  14.       foreach (ObjectId id in ms)
  15.       {
  16.           copiedIds.Add(id);
  17.       }
  18.       tr.Commit();
  19.       tempDb = srcDb.Wblock(copiedIds, Point3d.Origin);
  20.     }
  21.  
  22.     if (tempDb != null)
  23.    {
  24.      currentDb.Insert(Matrix3d.Identity, tempDb, true);
  25.      tempDb.Dispose();
  26.    }
  27.   }
  28. }