README.md

Архикад. Скрипт для оптимизации компановки напила пиломатериалов для силового каркаса.

Скрипт реализован на языке Python с использованием Archicad-Python Connection.

Работа с API

Взаимодействие с проектом происходит через создание соединения с помощью метода connect глобального объекта ACConnection:

    from archicad import ACConnection
    conn = ACConnection.connect()

Доступ к свойствам, специализациям и объектам предоставляется методами глобальных объектов:

  • Commands
  • Types
  • Utilities

Получение соответствующих переменных:

    acc = conn.commands
    act = conn.types
    acu = conn.utilities

Взаимодействие с проектом

Задача скрипта заключается в изменении значий, хранящихся в свойствах объектов проекта. Решение состоит из трех этапов:

  • Получение данных
  • Обработка
  • Применение изменений

Получение данных.

Для получения значений свойств элементов проекта используется метод GetPropertyValuesOfElements объекта Commands , который принимает следующие аргументы:

  • Массив со структурами id элементов
  • Массив со структурами id свойств

Элементы определенного типа можно получить методом GetElementsByType(Type) объекта Commands, где Type - тип объекта в формате строки. Свойство elementId содержит в себе значение id. Для получения id свойств достаточно использовать метод GetBuiltInPropertyId(Name) объекта Utilities, передав в него название нужного свойства в виде строки.

Обработка данных

Зная параметры объектов, можно сгруппировать элементы таким образом, чтобы сумма длинн вписывалась в параметры, по которым будут закупаться доски. Во время группировки учитывается , что один элемент может являться перевернутой версией другого. Анализ производится на несколько положений в пространстве.

Группировка оптимизирована с помощью объединения большего с меньшим. По массиву объектов движется дву указателя: i с конца, j с начала. J-ий указатель передвигается до того момента, пока не получится в группу добавить объект c i-ым номером. Далее i-ый указатель движется пока в группе есть вакантные места и цикл повтаряется вновь, до того момента пока i и j указатели не займут одинаковую позицию.

Применение изменений

Для уставки значиний свойствам элементов используется метод SetPropertyValuesOfElements(Values) объекта Commands, где Values - это массив новых элементов типа ElementPropertyValue.

Правило наименованя элементов: a-1, где a - имя группы, 1 - номер элемента в группе.

Конвейеры
0 успешных
0 с ошибкой