Как получить список панелей в виде двумерного массива

Главная Форумы Dynamo Ноды Как получить список панелей в виде двумерного массива

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Сообщения
  • #2573 Score: 0
    Геннадий
    Участник

    Всем добрый день.

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

    Заранее спасибо.

    #2575 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    Как вариант, можно использовать нод List.Chop в котором нужно задавать длину разбивки исходного списка

    #2576 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    кстати, нод List.Create там не нужен. Он необходим для объединения элементов в список. Плюсиком добавляются входные слоты(минусиком – наоборот). А так получается вложенный список

    #2577 Score: 0
    Геннадий
    Участник

    Хасан, спасибо за ответ.  Рассматривал что-то подобное, но хотелось бы считывать информацию с Revit и минимализировать руки. Идея такова (спер из инета :) ): Задать каждой панели цвет и получить рисунок на витраже ( плитке и т.п.). Но список ячеек разбивки рисунка – двумерный массив и количество столбцов и строчек хотелось бы получать из данных витража для соответствия ( т.е. если в витраже 300на400 ячеек, то и разбивку рисунка выполнить 300на400 и перенести данные по цвету из сетки рисунка на ячейки витража. Вот и думаю, как это сделать.

    P.S. В изображении и схеме количество ячеек не совпадает, я это знаю. Про List.Create учту, спасибо. Просто это наброски…

    #2578 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    Если нужна полная автоматизация, то можно найти центры панелей и отсортировать по координатам

    #2579 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    чуть позже напишу код. Да, и растровую картинку тоже можно импортировать и наложить цвета из нее на витраж

    #2580 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    У Лобанова что то подобное есть http://www.youtube.com/watch?v=r-G93-nmYGA

    #2581 Score: 0
    Геннадий
    Участник

    Пытался до Алексея достучаться….Не удалось. У него генерация цвета рандомом идет. А если его убрать – то по порядку, и всё это привязано к количеству элементов. Т.е. в том примере незачем иметь четкий список по строкам и столбцам. А знать количество элементов для генерации на них рисунка недостаточно по моему разумению.

    #2583 Score: 0
    Dmitry_dronov
    Модератор
    50 pts

    Хасан правильно сказал. Нужны координаты каждой панели. А затем сортировка по координатам. Шикарная задача. Удачи в реализации! :)

    #2585 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    Геннадий, если несложно, предоставьте пример проекта, растровую картинку тоже

    #2590 Score: 1
    Legantmar
    Хранитель
    475 pts

    Геннадий, вот что получилось у меня, надеюсь поможет.

    скачать скрипт

    #2606 Score: 4
    alexey.lobanov
    Участник
    8 pts

    можно еще вот так сделать. Так код покомпактнее будет и можно будет избавиться от нескольких нодов

    
    import clr
    cgrid = UnwrapElement(IN[0]).CurtainGrid
    ulines = cgrid.GetUGridLineIds()
    vlines = cgrid.GetVGridLineIds()
    
    list=[]
    for ul in ulines:
    vlist=[]
    for vl in vlines:
    vlist.append(cgrid.GetPanel(ul,vl))
    list.append(vlist)
    OUT=list
    
    #2632 Score: 0
    Геннадий
    Участник

    Ну что тут сказать? Алексей, Legantmar – спасибо! Буду разбираться…особенно Алексей озадачил Питоном :) тут Динамо только только начинается…Но хочу заметить, что количество ячеек надо задавать на 1 меньше, чем количество строк и столбцов панелей витража. Разбивка витража делается по импостам, а не по панелям. Т.е. если в вертикальной и горизонтальной сетке витража стоит 150, то в скрипте количество ячеек задаем 149. Вот и я поумничал :) Всем спасибо за участие.

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Для ответа в этой теме необходимо авторизоваться.