Спойлер: их тип данных не string (кто бы мог подумать)
Ничего не предвещало беды, а потом ты видишь в модели ЭТО
Думаешь: "ну ничего страшного, они без родительского не размещаются, выберем все в модели и посмотрим, как обстоят дела".
Параметр не общий, в спецификации не сгруппировать.
ШТОШ
Разбираем нашу задачу на кусочки:
1) получить в модели все "Семейство_Общее_Вложенное", которое будет содержать все типоразмеры (Тип 1, Тип 2, Тип 3, Тип 4, Тип 5, Тип 6)
2) получить список всех размещенных экземпляров семейства "Семейство_Родительское", у которых параметр "Выбор типоразмера" имеет значение "Семейство_Вложенное_Общее1: ..."
3) заменить в данных экземплярах значение параметра на "Семейство_Вложенное_Общее: ..." с идентичными именами типоразмера
Решение:
1) Получить в модели "Семейство_Общее_Вложенное", которое будет содержать все типоразмеры (Тип 1, Тип 2, Тип 3, Тип 4, Тип 5, Тип 6).
Решаю действовать без использования Dynamo. Выгружаю у семейства "Семейство_Вложенное_Общее1" каталог типоразмеров и загружаю его в "Семейство_Вложенное_Общее". Помним, семейства идентичны, то есть имеют одинаковые параметры.
Загружаю в проект с заменой значений параметров.
Теперь просим проектировщика проверить все 6262 экземпляров семейства "Семейство_Родительское" и исправить там параметр?.. 😭😔💔
2) Получить список всех размещенных экземпляров семейства "Семейство_Родительское", у которых параметр "Выбор типоразмера" имеет значение "Семейство_Вложенное_Общее1: ..."
Задачу мы решаем как новички и используем только стандартные ноды без нода python script. Думаем о том, что скрипт наш станет универсальным и поможет нам еще не раз (нет).
Что приходит в голову?
Что если преобразовать в string данные в параметре, убрать из них цифру 1 и заменить?.. То есть с помощью нода Element.SetParameterByName из данных "Family Type: Тип 4, Family: Семейство_Вложенное_Общее1" сделать "Family Type: Тип 4, Family: Семейство_Вложенное_Общее".
Провал. Изучаем ноды дальше.
FamilyType.ByName. Уже лучше, но:
Понимаем, что первый вариант решения все же был ближе для нас, поэтому возвращаемся к ноду Element.SetParameterByName и начинаем издеваться над списками данных, которые мы можем получить наиболее простым путем.
Начинаем эксплуатацию нода ✨List.FilterByBoolMask✨
На данном этапе получаем первый список для работы. Всего их будет 6.
Список-1: список размещенных родительских семейств, у которых параметр "Выбор типоразмера" содержит значение "Family Type: ..., Family: Семейство_Вложенное_Общее_1" и переводим их в string.
Цепочка нодов: Family Types — All Elements of Family Type — Element.GetParameterValueByName — String From Object — String.Contains — List.FilterByBoolMask
К List.FilterByBoolMask прикрепляем ноды All Elements of Family Type и String.Contains
3) Заменить в данных экземплярах значение параметра на "Семейство_Вложенное_Общее: ..." с идентичными именами типоразмера
Список-2: создаем еще один List.FilterByBoolMask, но к нему прикрепляем уже ноды Element.GetParameterValueByName и String.Contains. Далее применяем Code Block с функцией a.Name Получили список с элементами вида "Тип 1", "Тип 2", ..., "Тип N".
Список-3: получаем список типоразмеров из "Семейство_Вложенное_Общее". Цепочка нодов: Code Block — Family.ByName — Family.Types
Список-4: Переводим Список-3 в формат Списка-2 для последующего сравнения нодом Code Block с функцией a.Name
Список-5: с помощью нода List.IndexOf получаем индексы необходимых типоразмеров из Списка-4 и соотносим их со Списком-2.
Вид Списка-5:
0 - 3
1 - 3
2 - 4
3 - 7
...
N - 3
Список-6: с помощью нода List.GetItemAtIndex заменяем индексы в Списке-5 соответствующими элементами из Списка-3.
ФИНАЛ: применяем нод Element.SetParameterByName (как мы и хотели в самом начале).
Ну и по ходу написания скрипта играем с уровнями списков, без этого никак.
В скрипте использовались нод Code Block с функцией a.Name и нод String From Object.
Первый извлекает только имя типоразмера в вид "Тип 1", а второй весь параметр делает строкой "Family Type: Тип 1, Family: Семейство_Вложенное_Общее1"
Ну и так вот, мы отвлеклись от сути.
Не люблю параметры типа "Типоразмер семейства".
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣤⣤⢄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡾⠟⠋⠉⠀⠀⠈⠉⠚⢷⡢⡀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⡫⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢎⢢⠀⠀⠀⠀⠀ ⠙⢗⠲⠤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⢷⣶⡶⢤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠈⠆⢣⠀⠀⠀⠀ ⠀⠀⠑⠦⠬⠭⢒⡒⠢⠤⠄⣀⣀⡀⠀⢀⠇⠸⣿⣿⣿⣶⣿⣿⣷⣶⣶⣶⣶⣶⠤⢤⣄⣈⡇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠈⠑⠲⠤⣀⠀⠈⠙⠻⡄⠀⠉⠻⠿⣿⢿⠟⠁⠈⢿⣿⣿⣿⣿⣷⣿⠋⡅⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠐⠢⠤⡇⠑⠂⠀⠲⠤⣈⡉⠀⠀⠀⠉⠛⠻⠿⠟⠁⣠⡇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⠀⠀⠀⠉⠑⠲⠤⣀⡀⠀⠀⠀⠀⠀⠈⠉⠑⢆ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒⢢⠤⢀⣀⣀⣀⡼ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⢄⡀⠀⠀⠀⠀⠀⠀⢀⡠⠔⠉⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒⠒⠒⠒⠈⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀