Изменение параметров вложенных семейств

Автор Тема: Изменение параметров вложенных семейств  (Прочитано 849 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн v13Автор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
Здравствуйте, столкнулся с рядовой ситуацией: В проекте есть сложные семейства которые содержат вложенные семейства. Для корректного учета и по системной раскладки экземпляров элементов в спецификации требуется прописать в параметр вложенных семейств (например 'ИНЖ_Имя системы') значение из параметра тип системы (в данный момент вопрос стоит о возможности прописать любое значение в любой параметр вложенного семейства). При попытке изменить любой параметр во вложенном семействе размещенного экземпляра возникает исключение InvalidOperationException: The parameter is read-only.

Мой код, запускаю в RPS:

Код - C# [Выбрать]
  1. filter_pipe_accessory = DB.ElementCategoryFilter(DB.BuiltInCategory.OST_PipeAccessory)
  2. filter_duct_accessory = DB.ElementCategoryFilter(DB.BuiltInCategory.OST_DuctAccessory)
  3.  
  4. all_filters = [filter_pipe_accessory, filter_duct_accessory]
  5. all_filters_typed = List[DB.ElementFilter](all_filters)
  6. logical_or_filter = DB.LogicalOrFilter(all_filters_typed)
  7.  
  8. t.Start()
  9. elements = FEC(doc).WherePasses(logical_or_filter).WhereElementIsNotElementType()
  10. for element in elements:
  11.     sub_elements = get_subelements(element)
  12.     for sub_element in sub_elements:
  13.         sub_element.LookupParameter('ИНЖ_Имя системы').Set('Значение параметра')
  14. t.Commit()

Подскажите пожалуйста, как менять параметры вложенных семейств в размещенных экземплярах семейств?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 986
  • Карма: 296
  • Skype: alexandr.ignatovich.itc
Так получи параметр и проверь его свойство IsReadOnly. Для параметров вложенных семейств зачастую назначают ассоциации на параметры семейства, в которые они вложены.

Оффлайн v13Автор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
Да попытался так и сделать, но столкнулся с проблемой, в вложенном элементе в родительское семейство параметры не проходят проверку методом CanElementParameterBeAssociated(). Уже все расщепил, создал тестовый фаил и тестовый код, все равно результат для всех параметров во вложенном элементе при проверке параметра на возможность ассоциации - False. Подскажите пожалуйста правильно ли я подаю параметры в метод?

Код - Python [Выбрать]
  1. for g in app.OpenSharedParameterFile().Groups:
  2.     for d in g.Definitions:
  3.         if d.Name == 'ИНЖ_Имя системы':
  4.             Main_Param = d
  5.             Main_Param_name = d.Name
  6.             Main_Param_guid = d.GUID
  7.  
  8. elements_ids = uidoc.Selection.GetElementIds()
  9. for element in get_selected_element(elements_ids):
  10.     element_param = element.get_Parameter(Main_Param_guid)
  11.     family_element = element.Symbol.Family
  12.     family_element_document = doc.EditFamily(family_element)
  13.     family_element_manager = family_element_document.FamilyManager
  14.     family_element_param =family_element_manager.get_Parameter(Main_Param_guid)
  15.     for sub_element_id in element.GetSubComponentIds():
  16.         sub_element = doc.GetElement(sub_element_id)
  17.         family_sub_element = sub_element.Symbol.Family
  18.         family_sub_element_document = family_element_document.EditFamily(family_sub_element)
  19.         family_sub_element_manager = family_sub_element_document.FamilyManager
  20.         family_sub_element_param = family_sub_element_manager.get_Parameter(Main_Param_guid)
  21.         for pr in sub_element.Parameters:
  22.             print family_element_manager.CanElementParameterBeAssociated(pr)

Причем пробовал назначить зависимость параметра вручную из семейства и найти ее методом GetAssociatedFamilyParameter(), все равно результат по все параметрам false

Отмечено как Решение v13 04-02-2021, 23:49:53

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 986
  • Карма: 296
  • Skype: alexandr.ignatovich.itc
Не, не правильно. Вложенное семейство редактировать не нужно. Открываешь семейство, в его документе ищешь загруженные общие семейства, по найденным смотришь параметры

Оффлайн v13Автор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
Да так тоже пробую, результат false на всех параметрах

Код - C# [Выбрать]
  1. elements_ids = uidoc.Selection.GetElementIds()
  2. for element in get_selected_element(elements_ids):
  3.     element_param = element.get_Parameter(Main_Param_guid)
  4.     family_element = element.Symbol.Family
  5.     family_element_document = doc.EditFamily(family_element)
  6.     family_element_manager = family_element_document.FamilyManager
  7.     family_element_param =family_element_manager.get_Parameter(Main_Param_guid)
  8.     for sub_element_id in element.GetSubComponentIds():
  9.         sub_element = doc.GetElement(sub_element_id)
  10.         for pr in sub_element.Parameters:
  11.             print family_element_manager.CanElementParameterBeAssociated(pr)

Оффлайн v13Автор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
Хотя сейчас секунду "В его документе" сейчас попробую из документа открыть, до этого я открывал из элемента родительского

Оффлайн v13Автор темы

  • ADN OPEN
  • Сообщений: 10
  • Карма: 1
Да все получилось, спасибо!!! Вы не представляете как вы мне помогли. Вообще из всех телеграмм групп и иных форумов мне помог только этот. Хорошо что он есть!