Программное дополнение LabPP_GoodwinGDL создано чтобы расширить возможности ARCHICAD при управлении BIM объектами.
Например Вы создаете GLD BIM объект, у которого есть правила формирования цены, варианты покрытия и т.п.
Но этот объект должен уложен на пол в определенной форме.
Например, ламинат.
По одной доске это сделать неудобно и как обрезать доски?
Если создать площадку, то как задать ее форму? Как сделать вырезы, там, где ламината нет?
Видится разумным такой алгоритм:
Пользователь рисует 2d элемент штриховки. Можно с вырезами.
Ставит в проект Ваш объект.
Выбирает одновременно штриховку и объект.
Нажимает кнопку LabPP_GoodwinGDL и координаты штриховки транслируются прямо в параметры Вашего объекта.
Вашему объекту остается только при помощи 3d и 2d скриптов нарисовать фигуру по этим координатам.

Вот пример BIM GDL объекта, созданного на базе технологии формования штриховкой.
Это рамка. Сначала на разрезе создается штриховка произвольной формы.
Затем объект рамки выбирается одновременно с этой штриховкой.
По нажатию кнопки LabPP_GoodwinGDL координаты границ штриховки записываются в параметры объекта.
Объект воспроизводит эту форму. Создавать новый объект не требуется.
При желании можно восстановить штриховку по форме рамки. Внести изменения и снова записать в рамку.
Так можно создавать рамки совершенно произвольной формы. Так же считается длина багета.

Рисуется разрез в ARCHICAD      На разрезе рисуется штриховка BIM GDL объект произвольной формы 

Чтобы add-ons мог работать с Вашим объектом нужно создать параметры с соответствующими именами.
(вы можете взять за основу объект, который имеется в дистрибутиве).

Параметр GoodwinGDLAssignDataMethods

Это числовой массив.
По сути таблица.
В первой колонке - номер кнопки LabPP_GoodwinGDL.
Во второй колонке - номер алгоритма, по которому Ваш объект будет заполняться данными при нажатии этой кнопки.
В третьей колонке - маска для выполнения алгоритма. Задается по типу масок в GDL как сумма 1*j1 + 2*j2 + 4*j3 + 8*j4 и т.д., где j1, j2, ..., jn - опции при выполнении алгоритма.
Можно указать несколько кнопок.
Номера кнопок указаны ниже на рисунке.

Назначение кнопок LabPP_GoodwinGDL

Остальные параметры - для записи результатов операций.
Для разных алгоритмов и кнопок эти параметры могут быть различными.


Базовый сценарий для этой кнопки такой.
Пользователь рисует штриховку.
Можно с вырезами.
Ставит Ваш объект в проект.
Выбирает штриховку и объект.
Нажимает кнопку 1.
Программа LabPP_GoodwinGDL записывает в объект данные штриховки в соответствии с выбранным алгоритмом, который указан Вами в массиве GoodwinGDLAssignDataMethods для кнопки 1.

Алгоритм № 1

Данные готовятся для прямого использования координат штриховки в команде GDL языка EXTRUDE.
Координаты в правильном виде будут записаны в массив GoodwinGDLPoints.
Количество координат будет записано в параметр GoodwinGDLPointsCount.
Если создать в объекте следующие переменные, то в них будут записаны количественные показатели:
GoodwinGDLSurface - площадь поверхности (уже без вырезов),
GoodwinGDLHolesSurface - площадь вырезов,
GoodwinGDLPerimeter - периметр (вместе с периметрами вырезов),
GoodwinGDLHolesPerimeter - периметр вырезов.

Вот такой фрагмент 3d скрипта покажет бывшую штриховку в виде трехмерного объекта.

define texture "owntile" "texture_wood.jpg",1,1,256,GoodwinGDLAngle

define material "tilemat" 21,
0.7,0.7,1,
0.15,0.95,0,0.0,
0,0,
ind(fill,"fillAttribute_1"),1,
ind(texture,"owntile")
material tilemat
material tilemat

count = GoodwinGDLPointsCount
for i=1 to count
  PUT GoodwinGDLPoints[i][1],GoodwinGDLPoints[i][2],GoodwinGDLPoints[i][3]
next i
if count<>0 then
EXTRUDE count,0,0,0.04, 1+2+4+16+32,
    GET(NSP)
endif

Регулировать толщину объекта можно изменяя значение переменной thickness.

В 2d объект можно показывать вот так:

pen     penAttribute_1
fill fillAttribute_1
project2{2} 3,270,3+32+64, 0,0,0,360-GoodwinGDLAngle+90


Тогда если задать в объекте тип штриховки - горизонтальные линии, то направление штриховки будет соответствовать направлению текстуры.

 


Базовый сценарий для этой кнопки такой.
Пользователь выбирает объект.
Нажимает кнопку 2.
Программа LabPP_GoodwinGDL предлагает пользователю указать первую точку отрезка направления, затем вторую.

Алгоритм № 1

Затем рассчитывает угол наклона отрезка.
Угол отсчитывается от направления вниз. Значения от -180 до 180 градусов. По часовой стрелке - в плюс, против часовой стрелки - в минус.
Затем программа записывает в объект этот угол в градусах в параметр GoodwinGDLAngle