Выборка по значению параметра семейства. Помогите разобраться

Главная Форумы Dynamo Ноды Выборка по значению параметра семейства. Помогите разобраться

В этой теме 15 ответов, 5 участников, последнее обновление  Alexandr Popov 1 год, 4 мес. назад.

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Автор
    Сообщения
  • #4026 Score: 0

    Анатолий
    Участник
    5 pts


    Друзья, помогите разобраться. Пытаюсь произвести выборку окон по стадии, но не могу отдельно вытянуть значение параметра семейства окна “Существующие”. Возможно ли это сделать каким-то нодом?..

    #4030 Score: 0

    Legantmar
    Хранитель
    370 pts

    #4031 Score: 0

    Анатолий
    Участник
    5 pts

    Спасибо всем, кто хотел помочь, нашел выход, сделав сравнение не по номеру, а по строке с самим именем Существующие

    #4032 Score: 0

    Анатолий
    Участник
    5 pts

    Большое спасибо, Legantmar, за еще один хороший вариант выборки!

    #4033 Score: 0

    Анатолий
    Участник
    5 pts

    Прошу прощения, не знаю можно ли сюда обращаться с такими вопросами, подскажите, возможно ли отфильтровать в динамо параметры семейств по типу(не по экземпляру), по описанию например? Для окна параметр по типу работает, если взять, например, стропила, нод работать перестает. Слышал – нужно питоном параметр задавать, если обычными методами не получается?

    #4034 Score: 0

    Legantmar
    Хранитель
    370 pts

    я не совсем понял. напиши, что нужно на примере.

    и желательно тестовый файлик приложить.

    #4076 Score: 0

    Анатолий
    Участник
    5 pts

    Спасибо за отзыв, Legantmar. Хотел сделать выборку деревянных элементов так же, как и окон, по параметру, только параметр в ревите был как “тип” семейства, а не “элемент” и динамо его просто не видел, но получилось не по номеру , а по самому имени (Описание) выборку в динамо сделать. Забыл потом сюда посмотреть, увидел ваше сообщение.

    Еще столкнулся с вопросом, если есть какие идеи, прошу помочь: отсортировал деревянные элементы по некоторым параметрам, высоте, ширине, осталось последнее, с чем не могу справиться на пути к финишу цели, все элементы хотелось бы еще отсортировать и по длине, но известный нод UniqueItems не работает, поскольку даже при одинаковых длинах и семейству элементов их номеры (или значения, так сказать,в динамо) разнятся. Могу сделать идентичными только длины отдельно, но как потом привязать к длинам элементы – не представляю.

    https://yadi.sk/d/XXX3J-DsttYJ5

    #4077 Score: 0

    ИваСерж
    Модератор
    46 pts

    Как по мне, то тут лучше всего делать такие сортировки в Питоне, чем городить кучу нодов.

    Подать на ввод питон-кода все нужные элементы, Лукапом считать параметры, рассортировать и на выходе получить уже рассортированные элементы. Предлагаю вообще пересмотреть задачу для решения её не нодами, а посредством программирования.

    #4080 Score: 0

    Евгений Колчин
    Участник
    11 pts

    Надо не SortByKey, а GroupByKey использовать. В list вводишь список элементов, а в key – список длин. На выходе получаешь списки из балок одной длины. Если скинешь к dyn ещё пример rvt то можно дописать.

    #4081 Score: 0

    Анатолий
    Участник
    5 pts

    Добавляю файл Revit, немного изменил сам файл динамо, спасибо за подсказку Евгений, но понимаю, что неправильно поставил задачу в корне, потому что результат немного не тот ,что ожидал, мне, получается, нужно: а) отфильтровать все элементы по “Описанию” “ДК”, это уже сделано, потом б) отсортировать по “Параметру по наименованию” , который я пока вручну вписывал по имени конструкции .но понимаю, что можно это автоматизировать через динамо, а потом в) уже каждый из “параметров ” по списку (1..10)  осортировать по высоте, ширине и длине соответственно, тогда уже сортировка будет происходить правильно. В общем, понимаю, что действительно будет ооочень много нодов как сказал ИваСерж  и надо идти углубленно изучать питон(благодарю за идею), поскольку знаний пока еще не хватает для воплощения идеи. Благодарю ребят, что помогли!:)https://yadi.sk/d/ocfNWnv7tuvNn

    #4107 Score: 0

    ИваСерж
    Модератор
    46 pts

    Анатолий, ну прямо таки углублённо изучать питон не особо нужно. Нужны какие-то базовые понятия
    Мне, как не программисту, понадобилось 2 недели, чтоб разобраться. Конечно, программисты посмеиваются над моим кодом, но для Динамо достаточно.
    Самое сложное, как по мне, прямое обращение к .dll  Ревита и Динамо. Например, из Питона можно обращаться напрямую к любому ноду Динамо, что существенно облегчает жизнь.

    #4108 Score: 0

    Анатолий
    Участник
    5 pts

    “Дорогу осилит идущий”. Большое спасибо всем неравнодушным и вам, ИваСерж, за правильные идеи. В результате многих творческих поисковых мук получилось с помощью наших отечественных первопроходцев динамо состряпать рабочий код. Все отсортировалось в нужном порядке.

    В завершение поставленной задачи остался только один недосязаемый будто бы пустяковый, но в то же время, хитропоставленный элемент: как отсортировать длины элементов определенного списка до 10-ков? Почему возник вопрос: 1. Стандартный нод динамо Math.Round в количество цифр для округления берет число из диапазона от 0 до 15, что округления до 10 не включает. 2. А через питон – те же поиски, трудные и долгие.. поскольку обычная функция round возвращает округление только для единственного элемента, есть мысли прописать функцию через round(i), потом как то с помощью функции for i .. создать список округленных значений и на выходе прописать лист с этими значениями.. В мыслях. Если кто знает как это сделать и не трудно, прошу поделиться опытом.

    P.S.Не хотел переходить в раздел с Pythonom отсюда, раз уж создал тему и получилась такой углубленной..

    #4109 Score: 0

    ИваСерж
    Модератор
    46 pts

    Как по мне, нет ничего проще, чем считать параметр питон-кодом.
    Для этого используется медод LookupParameter

    Например, на ввод поступает какой-то элемент. Я хочу считать его длину:

    IN[0] = element
    #чтоб добраться до параметров элемента, его надо “расчленить”
    unwrElem = UnwrapElement(element)
    #Теперь лукапом считываем его параметр. Может и не считать сразу. Приходится поискать в каких же единицах этот параметр хранится
    #например, порядковый номер электрической цепи почему-то хранится не числом (Integer или Double),
    #а текстом String – чем ввел меня в ступор на 15 минут, пока я думал, в чем проблема
    OUT = unwrElem.LookupParameter(“Фактическая длинна”).AsDouble()

    Кстати, длина скорее всего считается в дюймах!!!
    А как перевести длину из дюймов в мм и округлить питоном – дело техники и гугл в помощь.

    #4110 Score: 0

    Legantmar
    Хранитель
    370 pts

    Анатолий, попробуй убрать “минус”  в “-1” ))

    p.s. или округление списка цифр в одну строчку:  OUT=(round(i, 1) for i in IN[0])

     

    #4111 Score: 0

    Анатолий
    Участник
    5 pts

    Legantmar, премного благодарен за скрипт питона! Компактно и по делу, все работает!!! А минус мне принципиально нужен:) потому что нужно отсортировать по десятках, иначе пляшут длины и в том числе сортировка, где отличается на 1-2 мм, согласно модели.

    Вам также ИваСерж, спасибо за разъяснение написания кода с Lookupом в питоне, попытался разобраться, но пока выпадают ошибки, думаю столкнусь еще не раз, буду вникать, пока что не понял как команда работает..

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)

Для ответа в этой теме необходимо авторизоваться.