Dynamo – Русский – только для чтения
Раздел для программистов и специалистов, использующих Dynamo
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Dynamo: сортировка элементов списка в зависимости от категории

18 REPLIES 18
SOLVED
Reply
Message 1 of 19
Anonymous
7846 Views, 18 Replies

Dynamo: сортировка элементов списка в зависимости от категории

Здравствуйте, сообщество.

Подскажите, пожалуйста, как в Dynamo отсортировать список элементов инженерных систем в таком порядке, чтобы элементы из категории "Оборудование" шли вверху списка, за ними "Арматура воздуховодов" и т.д. Как задать такую последовательность? Список создал. Могу создать ещё один такой же структуры, который будет содержать ID категорий этих элементов, но на этом всё. 

Скрин 3.jpg

 

 

 

 

18 REPLIES 18
Message 2 of 19
tpancingkom
in reply to: Anonymous

Ну вытягивайте из этого списка "Категорию оборудования" и потом используете этот новый списко в качестве ключей.

Message 3 of 19
Anonymous
in reply to: tpancingkom

Вот, вытащил названия и ID категорий в 2х списках.

Скрин 2.jpg

А как использовать новый список в качестве ключа? У меня проблемы с использованием нодов GroupByKey и SortByKey. А точнее, с пониманием понятия "ключ" и того, чем это может быть. И в каком виде.

Message 4 of 19
tpancingkom
in reply to: Anonymous

Теперь ListCreate на вход исходный список, на ключи получившийся.

Message 5 of 19
Anonymous
in reply to: Anonymous

Поясню.

Полученные списки уже содержат 2 подсписка. Они отсортированы нодом GroupByKey сначала по текстовому параметру, который отвечает за название раздела в спецификации (ВЕНТИЛЯЦИЯ, ОТОПЛЕНИЕ, ТЕПЛОСНАБЖЕНИЕ ПРИТОЧНЫХ УСТАНОВОК), затем по имени системы (П1, П2...). Но тут в качестве ключа для GroupByKey я указывал значения параметров:

Скрин 4.jpg

Как применить принцип группирования по ключу для создания последовательности категорий, мне не известно. Имена категорий в итоге не должны быть в алфавитном порядке, а их ID индексы - не располагаться по возрастанию или убыванию. В этом сложность.

Message 6 of 19
Anonymous
in reply to: Anonymous

Тебе нужен именно отсортированный список в динамо или в спецификации ревит?

Может присвоить всем категориям порядковый номер их группирования в спецификации, а потом по нему сортировать?

Message 7 of 19
alexey.lobanov
in reply to: Anonymous

vAW41yh1zvEOrW


Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile

Message 8 of 19
Anonymous
in reply to: alexey.lobanov

Спасибо, Алексей.

 

kanatof

Александр, я создаю отсортированный список в Динамо. Далее хочу всем элементам списка добавить нумерацию к параметру наименования, в пределах каждой системы. Это освободит мне две ячейки фильтрации непосредственно в Revit, а мне как раз одной не хватает.

Message 9 of 19
Anonymous
in reply to: alexey.lobanov

Добрый день!
а можете пожалуйста пояснить как это сделать для спецификации,то есть чтоб сортировалось в самой спецификации через динамо,так как сам додумать не могу...а то полей сортировка/группирование всего 4,и нужно чтоб сортировка шла так же -(оборудование- Арматура трубопроводов- Соединительные детали трубопроводов)

Message 10 of 19
Anonymous
in reply to: Anonymous

Поддерживаю вопрос, но перефразирую: возможно ли то, о чём написал eco.serebryakov?  И если возможно, то как?

Message 11 of 19
Anonymous
in reply to: Anonymous

А в чем вопрос?

Если у тебя есть отсортированный список то добавить перед этим списком нумерацию к параметру наименования и заполнить как третий параметр по которому создавать спецификацию

1.JPG

Message 12 of 19
Anonymous
in reply to: Anonymous

Я так понял, что человек имел ввиду манипуляции непосредственно со спецификацией.

А так-то да... отсортировать в динамо, затем можно просто пронумеровать всё насквозь, а номера вписать в какой-нибудь общий параметр, даже не добавляя их к наименованию (т.к. ГОСТ 21-602 уже не тот...). И тогда сортировать спецификацию можно вообще по одному параметру, хранящему информацию о порядковом номере элемента.

 

Я сейчас пользуюсь не очень удобным способом: у элементов инж. систем есть общий числовой параметр, отвечающий за очерёдность внесения в спецификацию и занимающий одну ячейку сортировки. Он равен: 1 для оборудования, 2 для арматуры, и т.д. до 7 или 8 (по числу строк очерёдности в ГОСТ 21-602). У меня он создаётся сразу в семействе, но можно присвоить его элементам глобально через параметры проекта. Создать несколько фильтров, 7-8 штук. Фильтром №1 выбрать всё оборудование в проекте, всем элементам присвоить значение этого параметра вручную. Фильтром №2 всю арматуру, и т.д. Или отдинамить его, опять же... Такой скрипт написать будет гораздо проще, чем скрипт глобальной сортировки.

Message 13 of 19
Anonymous
in reply to: Anonymous

Манипуляции со спецификацией через динамо возможны. Можно через динамо создать спецификацию с нужными тебе параметрами, с настроенными сортировками и фильтрами, нужными размерами и заголовками столбцов. В общем все что делается через свойства спецификаций в ревит. Позже скину пример.
Message 14 of 19
alexey.lobanov
in reply to: Anonymous

Увидел на скриншоте, что даже для простой генерации и прибавки номеров к строкам люди используют питон и расстроился...((

 

Grqz6yhQDQRwmz

 

 


Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile

Message 15 of 19
Anonymous
in reply to: Anonymous

Вот такой скрипт у меня создает настроенную таблицу спецификации. Этот нод только создает и форматирует таблицу. Заполнением параметров занимаются другие.

 

Message 16 of 19
Anonymous
in reply to: Anonymous

Спасибо!Все что вы подсказывали будет полезно!
Но как сортировать уже готовую спецификацию,как до нее достучатся либо через Dynamo,либо через API...я пока только вникаю в это все. Параллельно и Dynamo пытаюсь учить и python,недавно только понял что для того чтоб писать скрипты на python нужно еще и api знать...короче собираю информацию из разрозненных источников...
Интересует не то что бы создание спецификации(это уже в дальнейшем),создание параметра по которому будет сортироваться (как описано было выше,оборудование=1;арматура=2 и т.д.),а вот именно как достучатся до готовой спецификации и применить сортировку ,толи с помощью Dynamo толи через REVITAPI

Message 17 of 19
Anonymous
in reply to: Anonymous

Вступление первое:

Сортируется не спецификация, сортируются элементы, созданные вами в модели. Спецификация только отображает определенным образом информацию, которую она извлекает из элементов модели.

Если информации нет, спецификация ее не отобразит. Если информация противоречива, спецификация ее также не отобразит.

 

Вступление второе:

Dynamo использует Revit API, так что результат будет одинаковый в любом случае.

Разница в том, что обращаясь к API напрямую, вы не имеете никаких ограничений по инструментарию (в рамках API и даже чуть больше), а обращаясь к API через Dynamo, вы можете встретить ограничения, связанные с реализацией тех или иных функций в самой Dynamo. 

При этом для не слишком больших задач Dynamo нагляднее в написании логики и в отладке.

 

Собственно задача: 

Даны элементы модели. Получить вид спецификации, в котором элементы сгруппированы по заданному критерию, пронумерованы от 1 до N и отсортированы по возрастанию нумерации.

 

Рассуждения:

Способ группировки задается штатными средствами только один: натуральный. Направления сортировки: по возрастанию или убыванию. 

Из условия ясно, что задача сводится к правильной нумерации элементов. Далее на Вид спецификации накладывается один единственный критерий сортировки «по номеру».

 

План решения:

  1. Получить при помощи API или Dynamo наборы требуемых элементов из модели по заданным «Типам элемента» (Семейство -> Категория)
  2. Выбрать (или создать) параметр, в котором будет храниться номер элемента по спецификации. Этот параметр должен быть у каждого элемента из каждого набора. Он может быть штатным, может быть общим, может быть параметром проекта. Может быть числом, а может быть строкой. Главное, что он должен быть доступным для записи.
  3. Выбрать (или создать) конкретные параметры, по которым мы будем сортировать элементы внутри наборов.
  4. Отсортировать наборы элементов по алфавиту по наименованию элемента, затем по типоразмеру, затем по иным характерным параметрам. Это обязательно должно быть сделано одной операцией, а не несколькими последовательными.
  5. Инициализировать счетчик от 1.
  6. Запустить простой перебор элементов из набора (категории) «Оборудование» и увеличивать счетчик на 1 для каждого следующего элемента.
  7. Сохранять значение из счетчика в параметр из пункта 2 для текущего элемента. Тем самым мы будем задавать нумерацию от 1 до N для элементов из обрабатываемого набора.
  8. Аналогичным образом задать нумерацию от N+1 до N+K для элементов набора (категории) «Арматура» и для остальных наборов в нужной вам последовательности.
  9. Создать Вид спецификации по нескольким категориям или несколько Видов спецификаций по нужным категориям из пункта 1.
  10. Добавить нужные параметры из пунктов 2 и 3.
  11. Наложить фильтр на Вид спецификации по наличию параметра из пункта 2 или по значению этого параметра «больше нуля».
  12. Задать сортировку Вида спецификации по параметру из пункта 2.

Могу прокомментировать более подробно...

 

Message 18 of 19
Anonymous
in reply to: Anonymous

Вы имеете ввиду что не создавая параметр по которому будет происходить сортировка в спецификации не по чем сортировать.Я думал что можно будет отсортировать в спецификации по категории.
тогда все ясно обьеснили .Спасибо!Вопросы у меня конечно возникнут но я постараюсь справится сам.
по сути:

 -добавляю в проект общий параметр "сортировка"
 -получаю все элементы из модели,делю их на категории
 -присваиваю категориям порядковый номер
 -сортирую их в спецификации
этот вариант вы рассмотреть можете пожалуйста,может я что то упускаю?

Message 19 of 19
Anonymous
in reply to: Anonymous


eco.serebryakov написано:

Вы имеете ввиду что не создавая параметр по которому будет происходить сортировка в спецификации не по чем сортировать.



 Именно так.

 


eco.serebryakov написано:

 

 -добавляю в проект общий параметр "сортировка"
 -получаю все элементы из модели,делю их на категории
 -присваиваю категориям порядковый номер
-Внутри каждой категории присваиваете элементам порядковые номера по принципу сквозной нумерации.
 -сортирую их в спецификации

 


 

Далее уже будет более-менее результат. 

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report