Карта высот в ARCHICAD

Эта статья — практический урок-инструкция по созданию GDL-объекта карты высот.

Материал подготовил Павел Меньших, практикующий архитектор и BIM-координатор архитектурного бюро Savytskyy Design.

 

Оригинал статьи вы можете найти здесь.

Краткая справка об авторе:

Образование:

  • 2016 — 2017гг — Национальный университет «Львовская политехника», Институт архитектуры, магистерская степень в области “Реставрация архитектурного и художественного наследия”
  • 2017 — 2018гг — Люблинский Политехнический Университет, факультет гражданской инженерии и архитектуры, магистерская степень в области “Диагностика и реставрация зданий”

Опыт работы:

  • 2014 — 2016гг — частная практика
  • 2016 — 2017гг — архитектор, Kreoplan
  • 2017 — 2019гг — архитектор, BIM-координатор, Savytskyy Design

Практические навыки в программах:

  • Archicad
  • Rhinoceros
  • Grasshopper
  • Языки программирования GDL, Python

Прошел курсы:

  • Revit
  • Revit MEP
  • Navisworks

Павел Меньших

 

Архитектор, BIM-координатор, архитектурное бюро Savytskyy Design

Карта высот в ARCHICAD

В этой статье мы поэкспериментируем со связкой ARCHICAD + Grasshopper + GDL. Ее мы рассмотрим на примере трансформации 3D-сетки в градиентную карту высот. Прежде чем начать, вспомним, что такое карта высот и чем она полезна.

Карта высот — один из вариантов подачи модели рельефа с использованием «псевдоцвета», где высота передается при помощи цветовой градации. В данном методе используется прием «вертикального преувеличения», чтобы сделать различия высоты более заметными.

Можно использовать карту высот для презентаций и планов в случае специфического рельефа местности (рис. 1).

(рис. 1)

От теории к практике

Сначала создадим файл в ARCHICAD и построим 3D-сетку местности. Разделим 3D-сетку на две части, к примеру, чтобы изменения были более наглядно видны (рис. 2).

(рис. 2)

Теперь нам нужен компонент Grasshopper-ARCHICAD Live Connection V2.0, — если вы им до сих пор не пользовались, на сайте Graphisoft его можно скачать бесплатно по следующей ссылке.

Следующим шагом будет активация Live Connection V2.0: в ARCHICAD выполняем Файл-Взаимодействие-Grasshopper Connection. Далее открываем Rhinoceros и в нем запускаем Grasshopper, после чего возвращаемся в ARCHICAD и выполняем команду Start Connection.

Проделав все эти действия, в Grasshopper создаем компонент mesh, к которому привязываем 3D-сетку из ARCHICAD (рис. 3).

(рис. 3)
(рис. 4)

Далее необходимо построить формулу в Grasshopper (рис. 4).

Сначала разбиваем 3D-сетку, чтобы получить родные компоненты Grasshopper и иметь возможность далее работать с ними. Перестраиваем из точек 3D-сетки Delaunay Mesh, разбиваем его на грани. Для того, чтобы исключить возможность перевода некорректной геометрии в ARCHICAD, проверяем их и исключаем из выборки поврежденные. Из полилинии, которая очерчивает грани, получаем все вершины, обращаемся к каждой вершине по очереди, чтобы получить значения их координат. Определяем середину каждой грани и используем ее в качестве параметра интервала для узла градиента. При нажатии на узел Gradient правой кнопкой мыши можно выбрать одну из предустановленных цветовых схем. Для получения цветовых значений на выходе выставляем узел, который пропишем далее.

Для дальнейшего экспорта в ARCHICAD нам нужен объект, содержащий данные из Grasshopper, а также собственно эти данные для размещения. Необходимыми данными являются x-, y-, z-координаты трех вершин треугольника и RGB-данные цветов. Для удобного фильтрования данных внутри Grasshopper использовались GHPython компонентов (рис. 5), без которых скрипт получился бы более медленным и громоздким.

Важное примечание: для корректной работы узла GHPython необходимо установить на компьютер Python и IronPython.

(рис. 5)

Для этого нужно выбрать GHPython, раскрыть узел двойным нажатием по нему, и в теле разместить следующие данные, как показано на картинке выше (рис. 5):

#Sorting coordinate points and prepearing for ARCHICAD

xx, yy, zz = point.split ( «,»)

X = round (((float (xx)) / 1000), 2)
Y = round (((float (yy)) / 1000), 2)
Z = round (((float (zz)) / 1000), 2)

. . .

#rgb is input string, looks like Color [A = 255, R = 198, G = 216, B = 198]

color, red, green, blue = rgb.split ( «,»)

R = red [3:]
G = green [3:]
B = blue [3: -1]

Также необходимо изменить тип входных данных на string (рис. 6), а названия переменных на вход и выход должны строго соответствовать переменным в теле узла (рис. 5).

(рис. 6)

Следующий этап — создание объекта для ARCHICAD (рис. 7), поскольку только через этот объект мы сможем манипулировать данными. У объектов относительно высокое быстродействие в среде ARCHICAD, поэтому их использование всегда приоритетно.

Чтобы осуществлять контроль параметров объекта в Grasshopper, нам необходимо добавить параметр типа Истинное значение с переменной ParamcontrolByGrasshopper и установить для него значение ДА.

Больше о связи с Grasshopper можно почитать в Grasshopper-ARCHICAD Live Connection 2.X User Guide (Содержится внутри папки Документация в папке ARCHICAD на локальном компьютере).

(рис. 7)

Для соблюдения логики объекта было решено создавать отдельный экземпляр объекта для каждой грани, чтобы иметь возможность контролировать ее цвет. В 3D-скрипте создаем наш цвет с помощью команды DEFINE MATERIAL, как тип материала используем предустановленный тип matte, которому соответствует цифра 2, значение цвета задаются в диапазоне [0.0 … 1.0], поэтому разделяем наши переменные, в которые будут записываться значения из Grasshopper, на 255. Больше о GDL можно прочитать в GDL Reference Guide (Содержится внутри папки Документация в папке ARCHICAD). Далее назначаем созданный материал нашему объекту. Для наиболее точной мимики 3D-сетки в качестве объекта был выбран CSLAB_ из-за константной вертикальности его граней, возможности определения отдельного материала для граней и возможность контроля отображения индивидуальных граней и сторон. Чтобы сделать дно горизонтальным, использовалась команда CUTPLANE … CUTEND. Также были добавлены горячие точки во всех углах — для удобства выбора в окне ARCHICAD.

! 3D script

hh = MAX (z1, z2, z3)

pen pnn

DEFINE MATERIAL «rgb» 2, rr / 255, gg / 255, bb / 255

MATERIAL rgb

j1 = 1!: lower horizontal edge
j2 = 1!: vertical edge
j3 = 0!: upper horizontal edge
j4 = 1!: side face

s = j1 + 2 * j2 + 4 * j3 + 8 * j4

CUTPLANE 1, 1, 0, 1

CSLAB_ rgb, sidemat, sidemat,
3, -hh,
x1, y1, z1, s,
x2, y2, z2, s,
x3, y3, z3, s

CUTEND

HOTSPOT x1, y1, z1
HOTSPOT x2, y2, z2
HOTSPOT x3, y3, z3

HOTSPOT x1, y1 0
HOTSPOT x2, y2 0
HOTSPOT x3, y3 0

! 2D script

PROJECT2 {3} 3, 270, 2, 16 + 8 + 4 + 2

Тип данных для значений координат нужно определить числом с плавающей запятой, а для значений цвета целым числом.

Для экспорта данных из Grasshopper в объект необходимо использовать узел objectsettings. В нем выбрать параметр UseexistingLibraryPart, затем элемент с помощью select ARCHICAD LibraryPart и выбрать значения, которые необходимо контролировать (рис. 8).

(рис. 8)

Далее подключаем узел параметров объекта в узел объекта, необходимо также выставить узловую точку, ею может быть 0;0;0. Рекомендуется также присоединить узел boolean toggle к параметру синхронизации: таким образом будет возможность вручную активировать передачу данных в ARCHICAD, что упростит работу при большом количестве данных.

Вот пример настроенного алгоритма в Grasshopper, связанного с объектом GDL (рис. 9).

(рис. 9)

При активации синхронизации узла Object в Grasshopper данные для создания объектов начнут передаваться в ARCHICAD и это может занять некоторое время при условии большого количества объектов. После завершения вычислений мы получим желаемый результат: цветную карту высот в ARCHICAD, которой можно пользоваться и после закрытия Rhinoceros + Grasshopper (рис. 10).

(рис. 10)

По умолчанию объекты с Grasshopper приходят заблокированными, для возможности их редактирования внутри ARCHICAD необходимо их разблокировать (Редактор-Блокировка).

Подведем итоги

Grasshopper и возможность GDL-программирования открывают огромные возможности в ARCHICAD. Наиболее эффективно Grasshopper использовать для разбивки на элементы/ получения данных, а сами элементы импортировать в ARCHICAD как объекты — таким образом значительно улучшается продуктивность работы.

Принципы, изложенные в данном материале, можно использовать для импорта в ARCHICAD любых сложных форм из Grasshopper, а также колорирование этих форм в среде ARCHICAD, без необходимости создавать большое количество материалов цветов в обычном редакторе покрытий.

Оригинал статьи вы можете найти здесь.