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

ADN Club => AutoCAD .NET API => Тема начата: Ihar от 24-11-2023, 15:30:06

Название: Добавление ассоциацивного массива в болок.
Отправлено: Ihar от 24-11-2023, 15:30:06
Мне нужно добавить существующий ассокиативный массив в новый блок так, чтобы сохранилась его ассоциативность. Проблема в том, что при клонировании он превращается в обычный блок. Какие есть варианты?
Код - C# [Выбрать]
  1. else if(isArray)
  2.     {              
  3.         Entity entityCopy = blockRef.Clone() as Entity;
  4.         blockDef.AppendEntity(entityCopy);
  5.         tr.AddNewlyCreatedDBObject(entityCopy, true);
  6.         blockRef.Erase();
  7.     }
  8.  
Название: Re: Добавление ассоциацивного массива в болок.
Отправлено: Александр Ривилис от 24-11-2023, 22:40:39
Ihar,
Попробуй Database.DeepCloneObjects
Название: Re: Добавление ассоциацивного массива в болок.
Отправлено: Ihar от 29-11-2023, 18:10:08
Похоже, что deepcopy сразу в DB добавляет. Ловлю исключение при добавлении в блок 'eAlreadyInDb'. Пробовал entity.DeepClone, но тогда ассоциативность нарушается.
Название: Re: Добавление ассоциацивного массива в болок.
Отправлено: Александр Ривилис от 30-11-2023, 15:14:42
Похоже, что deepcopy сразу в DB добавляет.
Не знаю что такое deepcopy. А DeepCloneObjects конечно сразу добавляет в базу.
Код - C# [Выбрать]
  1. public void DeepCloneObjects(
  2.     ObjectIdCollection identifiers,
  3.     ObjectId id,
  4.     IdMapping mapping,
  5.     [MarshalAs(UnmanagedType.U1)] bool deferTranslation
  6. );
Указывай в качестве id ObjectId блока, в который ты хочешь добавить свой ассоциативный блок.