Friday, July 12, 2013

GDL и визуализация данных

С т.з. "параметрики" GDL выглядит немодно
Все мы видели красоты параметрического толка? Rhino, Grasshopper, Processing, Revit... Про архикадовский GDL почти не слышно. И вот, при поддержке Егор Глебова и Макса Хазанова я перегнал-таки результаты расчетной сетки из Ecotect(солнечная радиация по участку в часах) в GDL! Цель этой затеи - вытащить расчетную сетку из Ecotect и превратить ее в векторный чертеж. Помнится, меня об этом спрашивали студенты МАРШ, а я ссылался на недостаток времени и Gecco для Grasshopper.
Массивами пока пользоваться не научился, поэтому сделал как сумел. Для работы это бессмысленно, рассматриваю как разминку для мозгов.
Картинку из Ecotect выкладывать не буду. По сути, это схоже с опытами, описанными в недавнем посте. А txt-файл выглядит так:
Создав GDL-объект, я скопировал (да, тупо скопировал) численные данные(собственно, часы прямого попадания солнечной радиации) и применил команды стека PUT, GET, NSP. Потом уже экспериментировал с различными формами отображения. Всего значений - 2500, что немало.
Один из примеров размещаю ниже. Я рад, что мне удалось освоить вложенные циклы, что, безусловно, подействовало ободряюще. Тут мне ребята не помогали, а помогла книга GDL-Cookbook - "поваренная книга по GDL".
!List of values, visually structured, not array
PUT 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, ...
...
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 6, 0, 0, 0, 0, 0, 0, 5, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 6, 0, 0, 0, 0, 0, 0, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 

!max value in a list
num=MAX(0,USE(NSP))

!"number of cols" - see above
a=50
!"number of rows" - see above
b=50
!pen index in a row of the "Color" Pen set
!px=140

!another version
FOR i=1 to b
ADD2 0, -(i-1)*grid_step
FOR j=1 to a
PEN int(px+(20*USE(1))/num)
TEXT2 (j-1)*grid_step,0,USE(1)
hotspot2 (j-1)*grid_step,0
CIRCLE2 (j-1)*grid_step,0,GET(1)+0.2
NEXT j
DEL 1
NEXT i

Далее - результаты экспериментов (2D кружочков и 3D кубиков) и отображение одних и тех же данных.

Радиус окружности, текст, цвет - зависят от часов "инсоляции"

Как вывод: эти экзерсисы с GDL скорее являются баловством, т.к. Ecotect намного лучше справляется с отображением, а я не задавался сделать безотказно работающий инструмент - пока не по зубам. Однако обработка большого количества значений - столь распространенный случай, особенно в урбанистике, что невольно задумаешься, как быстро преобразовать, например, объекты с координатами на карте и кучей атрибутов во что-то более наглядное, чем таблица.
Безусловно, GIS-инструменты справляются на отлично. Но не всегда стандартного функционала хватает, а понимание одного языка (здесь GDL) обеспечивает, как мне кажется, быстрое усвоение другого (например, мне интересен Python для Rhino).
Да и в целом, алгоритмическое мышление, я думаю, составляет часть нашей цивилизации, даже если это нам не нравится...

No comments:

Post a Comment