Примеры на все действия со списком в Dynamo
- В этой теме 28 ответов, 8 участников, последнее обновление 5 лет, 2 месяца назад сделано
Анатолий.
-
АвторСообщения
-
Возможно в начальном списке перед : есть пробел,этот пробел и создаёт пустой список.
От пустых списков можно избавиться List.Clea подать false на нижний слот.List.Clean удаляет null. В этом варианте не cработает/
Илья
УчастникSche, то есть строка нулевой длины это и не null и не Empty list?
Илья, всё верно. Вот тут на понятном английском наречии эту тему раскрыли
https://forum.dynamobim.com/t/difference-between-null-empty/11758
Илья
УчастникПрошу помощи. Может я плохо искал, но ответ не могу найти и сам додуматься пока не могу..
Есть список типа {1,4,5,6,10,11,13,15,16,77,78}..Как из него получить список с подписками типа {{1},{4,5,6},{10,11},{13},{15,16},{77,78}}. В итоге нужно это, чтобы получить значение “1, 4-6, 10-11, 13, 15-16, 77-78”. (это у меня номера свай, которые наращиваются, соответственно в спецификацию нужно внести).
Спасибо.
Нужна логика составления-группирования списка. К примеру, если сваи наращиваются, то они как то в проекте должны иметь отличия от других свай.Возможно параметр пользовательский есть или надо сделать для ЭКЗЕМПЛЯРА!-наращивание(изменение и т.д.). После такой идентификации и сделать группировку по значению параметра уже любой список свай.
Если сваи создаются в одной стадии, а наращиваются некоторые в другой, то по стадии можно идентифицировать.Это тоже как пример.
Илья
УчастникАлександр, сваи у меня имеют отличительные признаки. Те, которые наращиваются в Параметр(создал) “Отметка наращивания” я пишу(с помощью dynamo или вручную) отметку до которой наращивается, если свая не наращивается, то туда записывается “не наращивается”. Аналогично со срубкой(Параметр “Отметка срубки”). Есть параметр(создал из Общих) Мрк.МаркаИзделия(Зуевский, но не суть)- туда записывается порядковый номер сваи(нумеруется свайное поле, например, сверху вниз и слева направо). В итоге все сваи у меня идентифицированы(отметки срубки, наращивания, порядковый номер), теперь только нужно, чтобы в спецификации они сгруппировались по типу как выше писал. На примере скриншота ниже должно в столбце “Порядковый номер на плане”(сейчас это столбик “Мрк.МаркаИзделия”, но нужно создать или расчётный параметр в спецификации или у самого элемента(сваи) в который записать) быть так: 97-101,102-103,104,105,106-107,108,109-122,123-127,128,129,130-132 ну и т.д.
Только выше(в первой своей записи) я не учёл, что список нужно группировать по двум(Отметка наращивания и Отметка срубки) параметрам, а не по одному, то есть еще один уровень появится.. Надеюсь понятно объяснил)
Добрый день! Задачу с прописью номеров решил Саша Попов в скрипте по отделке помещений, немного изменил его наработки. Хотелось бы также попросит всех, кто нуждается в помощи по возможности выкладывать хоть какой-то файлик ревита чтобы не набирать все с “0”.
Илья
УчастникСоздал новый параметр в проекте “Номер свай по порядку” потому что существующий не вносится в спецификацию и недоступен в параметрах проекта. Также внес некоторые изменения в скрипт. Тестируйте. Прошу обратить внимание на питоновский нод “Фильтр”. Если в вашем проекте будут дополнительно какие-то элементы с категории Фундамент несущей конструкции, их необходимо выключать в коде, немного занотировал в коде скрипта подробности.
СкриптИлья
УчастникАнатолий, спасибо, супер, работает!
Последний вопрос(я всё таки конструктор, и в питоне ещё совсем ноль)), как в 11 строке отфильтровать в этом же параметре ещё элементы, которые, например, будут называться “Балка ххх”(Вы пишите через !=, но синтаксисом не владею пока что)
По поводу кода:
fund = IN[0] # принимаем на вход все элементы относящиеся к категории “фундамента несущей конструкции”, имя может быть любое.
fund1=fund.Where(lambda x: UnwrapElement(x).LookupParameter(“Наименование_Спецификация“).AsString()!=“Плита ростверка монолитная железобетонная“) # что здесь: смотрим по каким параметрам мы можем исключить ненужные элементы данной категории или оставить только необходимые. В своих задачах часто решаю проблемку заполняя параметр “Описание” для всех необходимых элементов, например для все свай – “Свая”, но у вас параметр занят, сваи по описанию бывают трех типов, потому идем другим путем. Посмотрел, в проекте были только фундаментные плиты не принадлежащие к разделу свай с категории “фундамент несущей конструкции”. У них есть параметр “Наименование_Спецификация“, который объединяет все такие плиты, мы исключаем их данным методом прописывая LookupParameter(“Наименование_Спецификация“).AsString() != (не равняется) “Плита ростверка монолитная железобетонная“). Важно! Необходимо чтобы данный параметр был у всех элементов данной категории, иначе скрипт выдаст ошибку, потому анализируем проект и исключаем лишнее.fund2=fund1.Where(lambda x: UnwrapElement(x).Symbol.LookupParameter(“Имя семейства“).AsString()==(равняется)“Бетонная свая прямоугольного сечения“) #последний шаг. Если у фундаментых плит и других не нужных элементов данной категории присутствует параметр “Имя семейства“, можно предыдущий фильтр выключить.
OUT = fund2 #подаем на выход одни сваи со всей данной категории.
Еще важно. Для фильтра по остальным параметрам, на выходе могут быть нули, если сам параметр сохраняется не в строке AsString(), другие варианты могут быть (в конце нужно прописывать): AsValueString(), AsDouble(), AsInteger().
И еще один важный момент. Возьмем пример fund2=fund1.Where(lambda x: UnwrapElement(x).Symbol.LookupParameter(“Имя семейства“).AsString()==“Бетонная свая прямоугольного сечения“) Присутствие Symbol необходимо для параметров типа, если параметр экземляра, слово Symbol удаляем.
Илья
УчастникСпасибо за пояснение. Немного доработал(фильтр первый удалил для своего проекта), добавил еще параметр Позиция в спецификации сваям, вроде получилось симпатично.
а про фильтр дополнительный я не понял синтаксис как именно нужно добавлять ещё значения параметров(после !=) в строку 11: doors1=doors.Where(lambda x: UnwrapElement(x).LookupParameter(“Наименование_Спецификация“).(AsString()!=“Плита ростверка монолитная железобетонная“, !=“Балка ростверка монолитная железобетонная“)) -как-то так не получается, чувствую нужно питон изучать начинать плотно(только параллельно проектировать))
Рад, что почти все получается. Питон, конечно, поизучать стоит, особенно когда проекты больших объемов. В данном случае прописывать следующим образом:
doors1=doors.Where(lambda x: UnwrapElement(x).Symbol(если параметр экземпляра, Symbol не пишем).LookupParameter(“Параметр объекта“).AsString() (AsValueString(), AsDouble(), AsInteger(), все на выбор, смотря в каком формате данные параметра заложены) == (если равняется или !=, если не равняется следующим данным параметра, который будем дальше прописывать) “Данные параметра“. Прописывать код необходимо строго в этом порядке. ничего не убирать и не добавлять. То есть, например
name1=name.Where(lambda x: UnwrapElement(x).LookupParameter(“Параметр объекта“).AsValueString()==“Данные параметра“, при необходимости добавить фильтр еще по каким-то параметрам работаем уже с последними данными, например
name2=name1.Where(lambda x: UnwrapElement(x).Symbol.LookupParameter(“Новый параметр объекта“).AsValueString()==“Соответствующие данные параметра“ , постарался объяснить немного доступней)
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.