Выборка по значению параметра семейства. Помогите разобраться
- В этой теме 24 ответа, 7 участников, последнее обновление 5 лет, 7 месяцев назад сделано Илья.
-
АвторСообщения
-
Спасибо всем, кто хотел помочь, нашел выход, сделав сравнение не по номеру, а по строке с самим именем Существующие
Большое спасибо, Legantmar, за еще один хороший вариант выборки!
Прошу прощения, не знаю можно ли сюда обращаться с такими вопросами, подскажите, возможно ли отфильтровать в динамо параметры семейств по типу(не по экземпляру), по описанию например? Для окна параметр по типу работает, если взять, например, стропила, нод работать перестает. Слышал – нужно питоном параметр задавать, если обычными методами не получается?
я не совсем понял. напиши, что нужно на примере.
и желательно тестовый файлик приложить.
Спасибо за отзыв, Legantmar. Хотел сделать выборку деревянных элементов так же, как и окон, по параметру, только параметр в ревите был как “тип” семейства, а не “элемент” и динамо его просто не видел, но получилось не по номеру , а по самому имени (Описание) выборку в динамо сделать. Забыл потом сюда посмотреть, увидел ваше сообщение.
Еще столкнулся с вопросом, если есть какие идеи, прошу помочь: отсортировал деревянные элементы по некоторым параметрам, высоте, ширине, осталось последнее, с чем не могу справиться на пути к финишу цели, все элементы хотелось бы еще отсортировать и по длине, но известный нод UniqueItems не работает, поскольку даже при одинаковых длинах и семейству элементов их номеры (или значения, так сказать,в динамо) разнятся. Могу сделать идентичными только длины отдельно, но как потом привязать к длинам элементы – не представляю.
Как по мне, то тут лучше всего делать такие сортировки в Питоне, чем городить кучу нодов.
Подать на ввод питон-кода все нужные элементы, Лукапом считать параметры, рассортировать и на выходе получить уже рассортированные элементы. Предлагаю вообще пересмотреть задачу для решения её не нодами, а посредством программирования.
Надо не SortByKey, а GroupByKey использовать. В list вводишь список элементов, а в key – список длин. На выходе получаешь списки из балок одной длины. Если скинешь к dyn ещё пример rvt то можно дописать.
Добавляю файл Revit, немного изменил сам файл динамо, спасибо за подсказку Евгений, но понимаю, что неправильно поставил задачу в корне, потому что результат немного не тот ,что ожидал, мне, получается, нужно: а) отфильтровать все элементы по “Описанию” “ДК”, это уже сделано, потом б) отсортировать по “Параметру по наименованию” , который я пока вручну вписывал по имени конструкции .но понимаю, что можно это автоматизировать через динамо, а потом в) уже каждый из “параметров ” по списку (1..10) осортировать по высоте, ширине и длине соответственно, тогда уже сортировка будет происходить правильно. В общем, понимаю, что действительно будет ооочень много нодов как сказал ИваСерж и надо идти углубленно изучать питон(благодарю за идею), поскольку знаний пока еще не хватает для воплощения идеи. Благодарю ребят, что помогли!:)https://yadi.sk/d/ocfNWnv7tuvNn
Анатолий, ну прямо таки углублённо изучать питон не особо нужно. Нужны какие-то базовые понятия
Мне, как не программисту, понадобилось 2 недели, чтоб разобраться. Конечно, программисты посмеиваются над моим кодом, но для Динамо достаточно.
Самое сложное, как по мне, прямое обращение к .dll Ревита и Динамо. Например, из Питона можно обращаться напрямую к любому ноду Динамо, что существенно облегчает жизнь.“Дорогу осилит идущий”. Большое спасибо всем неравнодушным и вам, ИваСерж, за правильные идеи. В результате многих творческих поисковых мук получилось с помощью наших отечественных первопроходцев динамо состряпать рабочий код. Все отсортировалось в нужном порядке.
В завершение поставленной задачи остался только один недосязаемый будто бы пустяковый, но в то же время, хитропоставленный элемент: как отсортировать длины элементов определенного списка до 10-ков? Почему возник вопрос: 1. Стандартный нод динамо Math.Round в количество цифр для округления берет число из диапазона от 0 до 15, что округления до 10 не включает. 2. А через питон – те же поиски, трудные и долгие.. поскольку обычная функция round возвращает округление только для единственного элемента, есть мысли прописать функцию через round(i), потом как то с помощью функции for i .. создать список округленных значений и на выходе прописать лист с этими значениями.. В мыслях. Если кто знает как это сделать и не трудно, прошу поделиться опытом.
P.S.Не хотел переходить в раздел с Pythonom отсюда, раз уж создал тему и получилась такой углубленной..
Как по мне, нет ничего проще, чем считать параметр питон-кодом.
Для этого используется медод LookupParameterНапример, на ввод поступает какой-то элемент. Я хочу считать его длину:
IN[0] = element
#чтоб добраться до параметров элемента, его надо “расчленить”
unwrElem = UnwrapElement(element)
#Теперь лукапом считываем его параметр. Может и не считать сразу. Приходится поискать в каких же единицах этот параметр хранится
#например, порядковый номер электрической цепи почему-то хранится не числом (Integer или Double),
#а текстом String – чем ввел меня в ступор на 15 минут, пока я думал, в чем проблема
OUT = unwrElem.LookupParameter(“Фактическая длинна”).AsDouble()Кстати, длина скорее всего считается в дюймах!!!
А как перевести длину из дюймов в мм и округлить питоном – дело техники и гугл в помощь.Анатолий, попробуй убрать “минус” в “-1” ))
p.s. или округление списка цифр в одну строчку: OUT=(round(i, 1) for i in IN[0])
Legantmar, премного благодарен за скрипт питона! Компактно и по делу, все работает!!! А минус мне принципиально нужен:) потому что нужно отсортировать по десятках, иначе пляшут длины и в том числе сортировка, где отличается на 1-2 мм, согласно модели.
Вам также ИваСерж, спасибо за разъяснение написания кода с Lookupом в питоне, попытался разобраться, но пока выпадают ошибки, думаю столкнусь еще не раз, буду вникать, пока что не понял как команда работает..
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.