Примеры на все действия со списком в Dynamo
- В этой теме 28 ответов, 8 участников, последнее обновление 5 лет, 3 месяца назад сделано Анатолий.
-
АвторСообщения
-
Возможно в начальном списке перед : есть пробел,этот пробел и создаёт пустой список.
От пустых списков можно избавиться 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()==“Соответствующие данные параметра“ , постарался объяснить немного доступней)
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.