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

ADN Club => AutoCAD .NET API => Тема начата: Roman от 07-04-2025, 14:29:05

Название: Определение видимости атрибута для разных состояний свойства "Видимость"
Отправлено: Roman от 07-04-2025, 14:29:05
Всем здравствуйте!
Есть блок. В нём заданы атрибуты. Эти атрибуты могут быть видны или не видны для разных состояний видимости.

Я создаю экземпляры атрибутов для нового экземпляра блока:
       
Код - C# [Выбрать]
  1.                      if (blockDef.HasAttributeDefinitions)
  2.                         {
  3.                             foreach (ObjectId id in blockDef)
  4.                             {
  5.                                 DBObject obj = trans.GetObject(id, OpenMode.ForRead);
  6.  
  7.                                 if (obj is AttributeDefinition attDef)
  8.                                 {
  9.                                     if (attDef.Tag == "Авария" || attDef.Tag == "Состояние") continue;
  10.                                     AttributeReference attRef = new AttributeReference();
  11.                                     attRef.SetAttributeFromBlock(attDef, blockRef.BlockTransform);
  12.                                     attRef.Position = attDef.Position.TransformBy(blockRef.BlockTransform);
  13.                                     attRef.SetDatabaseDefaults(targetDb);
  14.                                     blockRef.SetDatabaseDefaults(targetDb);
  15.                                     blockRef.AttributeCollection.AppendAttribute(attRef);
  16.                                     trans.AddNewlyCreatedDBObject(attRef, true);
  17.                                 }
  18.                             }
  19.                         }
Однако, получается, что те атрибуты, которые были не видны в самом первом состоянии видимости у определения блока, тут будут так же не видны.
Если перед созданием экземпляров атрибутов выставить состояние видимости блоку, это никак не повлияет на видимость атрибутов.

Есть ли изящный способ узнать, виден ли аттрибут или любой другой объект динамического блока для разных состояний видимости?
Название: Re: Определение видимости атрибута для разных состояний свойства "Видимость"
Отправлено: Judas от 07-04-2025, 20:01:18
По пробовать возвращать свойство Visible  и проверять его.
Название: Re: Определение видимости атрибута для разных состояний свойства "Видимость"
Отправлено: Roman от 08-04-2025, 19:26:17
По пробовать возвращать свойство Visible  и проверять его.
не очень понял. В какой момент и у кого свойство visible проверять?

Тут фишка именно при создании нового вхождения блока (blockReferenct) нужно "восстановить" атрибуты. Но у моего определения блока некоторые атрибуты видны для определенного состояния видимости, а некоторые не видны. По факту же получается, что когда я создаю новые вхождения атрибутов для вхождения блока, у меня видимость атрибутов всегда соответствует только первому состоянию видимости в определении блока, а не текущему состоянию видимости вхождения блока.
Возможно код, указанный выше, не верный.
Название: Re: Определение видимости атрибута для разных состояний свойства "Видимость"
Отправлено: Judas от 09-04-2025, 12:57:16
Выложите пример, двух состояний блока. Естакой вот с такими атрибутами, есть такой же но тут вот так и выдеы только эти атрибуты.
Название: Re: Определение видимости атрибута для разных состояний свойства "Видимость"
Отправлено: alz от 09-04-2025, 13:56:04
Можно попробовать сменить состояние видимости на начальное, добавить атрибуты и вернуть то, которое было, возможно разнести на разные транзакции.
Название: Re: Определение видимости атрибута для разных состояний свойства "Видимость"
Отправлено: Roman от 11-04-2025, 17:26:08
В общем, вся проблема оказалась в том, что атрибут для первого состояния видимости отмечен в определении блока как постоянный.
Прилагаю файл. В нём есть блок "Т1". В котором 3 состояния видимости (0-1-2). Для 0 и 1 состояний атрибуты помечены как постоянные, для 2-го состояния атрибут не помечен как постоянный.
В таком виде, если ставить блок для всех состояний видимости следующим кодом, то всегда будет виден только ATTR1:
Извините, вам запрещён просмотр содержимого спойлеров.

Если все атрибуты сделать непостоянными, то вставка атрибутов будет происходить в соответствие с состоянием видимости блока.