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 с ошибкой