К основному контенту

Автоматизируем создание свойств

В статье Непоследний обзор API Renga мы рассказывали какими возможностями обладает API Renga, где искать документацию и примеры. 

Сегодня поговорим о том, как c помощью простого скрипта на Python и JSON-файла можно автоматизировать создание свойств в проекте Renga. 

Допустим, вы часто работаете по такой схеме: вам приходит проект от смежных специалистов. И здесь даже не важно сделан проект в Renga или он пришел к вам в формате IFC, а вы будете продолжать работу в Renga. Важно то, что в нем нет необходимого набора свойств.Поскольку набор может быть достаточно большим, вносить одни и те же свойства надоедает.

Тут на помощь приходит простая автоматизация.

Сначала давайте вспомним, какие характеристики есть у свойств объектов Renga:

  • Имя свойства.
  • Идентификатор свойства.
  • Тип свойства.
  • Если свойство типа Перечисление, то для него нужно еще создать список значений.
  • Кроме того можно определить, какие типы объектов будут обладать этими свойствами.

Что ж, на основании этих данных прорабатываем JSON-файл, его описание для одного свойства будет выглядеть примерно так:

{
  "Имя свойства": { 
        "id""f27c17e1-0a5b-4208-91d3-03fa3ae719fe",
        "property_type""Enum",
        "list": ["1""2""3"],
        "object_type": ["{2B02B353-2CA5-4566-88BB-917EA8460174}""{1CFBA99C-01E7-4078-AE1A-3E2FF0673599}"
  }
}

Обязательными записями в описании тут будут только “Имя свойства” и “property_type”, все остальное можно опустить. Например, вам не важен идентификатор свойства, вы его не указываете и он будет сгенерирован скриптом. Чтобы свойство автоматически было назначено типу объекта, вам нужно скопировать и вставить в JSON уникальные идентификаторы типов объектов из справки API, если назначать будете вручную, то можно пропустить.

Наш скрипт должен прочесть данные, обработать их и передать в Renga.

Если вы не хотите вникать, как писать скрипт, но хотите его использовать, то можете:

  1. Установить последнюю версию Python.
  2. В папке установки Python из командной строки вызвать pip install pywin32.
  3. Скачать скрипт и JSON-шаблон.
  4. Отредактировать или создать новый JSON-файл так, чтобы в нем были необходимые вам свойства.
  5. Запустить скрипт из командной строки с указанием файла проекта и JSON-файла со свойствами, замените имена:

    сreate_properties.py --project "C:\Projects\test.rnp" --properties "C:\Projects\properties.json"

Если вы никогда не писали на Python, и не использовали Renga API, но хотите попробовать, то для дальнейшей работы вам надо:

  1. Скачать RengaSDK.
  2. Установить последнюю версию Python.
  3. Установить редактор кода. Мы рекомендуем Visual Studio Code, но можно использовать и Notepad ++ или онлайн-редакторы.
  4. В папке установки Python из командной строки вызвать pip install pywin32.
  5. Открыть любой скрипт из папки RengaSDK\Samples\Python в редакторе кода, запустить отладку и проверить, что все работает.

Далее в редакторе кода создаем новый файл с расширением .py. Объявляем загрузку модулей.

import sys
import os
import win32com.client

Чтобы пользователь мог сам выбрать файл проекта и файл со свойствами добавим функцию, которая будет считывать параметры командной строки при запуске скрипта. Чтобы функция работала, добавляем загрузку модуля argparse .

import argparse

def parseArgs():
    parser = argparse.ArgumentParser(description="Create properties in Renga project")
    parser.add_argument("--project"dest = "project"help="Project path"required=True)
    parser.add_argument("--properties"dest = "properties"help="Properties JSON path"required=True)
    return parser.parse_args()

Дальше нам понадобится открыть проект Renga и JSON-файл. Кстати, не забудьте его подготовить.

В файле RengaSDK\Samples\Python\OpenSaveCloseProject.py описано, как открыть проект, сохранить и закрыть. Копируем оттуда код и изменяем его с учетом того, что мы будем брать указанный ранее аргумент, как файл проекта.

if __name__ == '__main__':
    args = parseArgs()

    # открываем Renga в фоновом режиме
    app = win32com.client.Dispatch("Renga.Application.1")
    app.Visible = False

    # открытие проекта
    print("Открытие проекта: " + args.project)

    result = app.OpenProject(args.project)
    if result != 0:
        print("Ошибка открытия проекта")
        exit(1)

    print("Получение проекта")
    project = app.Project
    if project == None:
        print("Ошибка получения проекта")
        exit(1)

Дальше мы будем работать со свойствами, поэтому нужно задать обращение к Менеджеру Свойств Renga.


    property_mng = project.PropertyManager

Создаем словарь, который будет устанавливать соответствие заданных пользователем типов свойств - типам свойств Renga согласно справке API.


    # типы свойств, см. http://help.rengabim.com/api/group__properties.html
    prop_type_dict = {"Double"1"String"2"Angle"3"Area"4"Boolean"5"Enum"6"Int"7"Length"8"Logical"9"Mass"10"Volume"11

Дальше будем загружать данные из json-файла. Чтобы загрузка работала, в первой строке скрипта подключим JSON.

import json

Продолжаем писать скрипт. После словаря открываем выбранный JSON-файл.


    # парсинг json
    with open(args.properties) as properties:
        # загрузка данных
        data = json.load(properties)
        
        for element, values in data.items():
            # имя секции принимаем за имя свойства
            prop_name = element
            # определяем тип объекта
            prop_type = values['property_type']
            prop_type_id = prop_type_dict.get(prop_type)
           
            # описание свойства
            prop_desc = property_mng.CreatePropertyDescription(prop_name, prop_type_id)
            # добавление списка, если тип свойства - перечисление
            if prop_type == "Enum":
                enumeration_items = values['list']
                prop_desc.SetEnumerationItems(enumeration_items)
            
            # определение uuid
            if 'id' in values:
                prop_id = values['id']
            else:
                prop_id = uuid.uuid1()

            # регистрация свойства 
            property_mng.RegisterPropertyS2(prop_id, prop_desc)

            # присваивание свойства всем выбранным типам объектов.             # Типы объектов задаются по # uuid типа объекта, которому нужно присвоить заданные значения             # см. http://help.rengabim.com/api/group___object_types.html
            if 'object_type' in values:
                for object_type_id in values['object_type']:
                    property_mng.AssignPropertyToTypeS(prop_id, object_type_id)
                print("Свойство " + prop_name + " назначено")
    

Чтобы проверить скрипт запустите командную строку на папке скриптов, выберите скрипт и укажите аргументы:

C:\Projects\RengaSDK\Samples\Python>create_properties.py --project "C:\Projects\test.rnp" --properties "C:\Projects\RengaSDK\Samples\Python\properties.json"

При запуске скрипта у вас откроется проект в Renga, в нем создадутся свойства, перечисленные в JSON-файле и, если там указаны идентификаторы типов объектов, у выбранных типов в проекте Renga появятся новые свойства. А если не указаны идентификаторы, то их можно увидеть во вкладке Все свойства в редакторе Свойств.

Исходное состояние свойства объекта

Работа скрипта создания свойств


Свойства объектов после работы скрипта

Если вы хотите, чтобы свойствам присваивались определенные значения, то вы можете это так же cделать с помощью скрипта. Как это сделать, показано в примере CreateProperty.py.

В общем, используйте наш скрипт, дорабатывайте его, задавайте вопросы. И, как всегда, следите за новостями!

Комментарии

Популярные сообщения из этого блога

Освой электрику в Renga

Добрый день! Принципы проектирования всех инженерных систем в Renga одинаковы, однако каждая из них достойна отдельного внимания. В этой заметке мы расскажем и наглядно покажем на примере однокомнатной квартиры, как проектировать электрику в Renga. Надеемся, что вы попробуете повторить приведенную ниже инструкцию и это поможет вам оценить возможности Renga. Начинаем проектирование электрики с установки осветительных приборов, выключателей и розеток. Их можно размещать только на стенах, перекрытиях, колоннах и балках. Также хорошо, если перед проектированием электрики в модели расставлена мебель, если речь идет о жилых помещениях, или оборудование в промышленных. Модель квартиры, в которой будет происходить дальнейшая работа, уже подготовлена. Итак, скачайте проект, в котором расставлена мебель, и приступим. Откройте проект в Renga MEP. Щелкните правой кнопкой мыши на пустом месте и выберите Режим измерения > Кубический . Это необходимо, так как расставлять осветительные при

Под крышей дома моего....

Крыша - это главный атрибут любого дома, а особенно частного загородного дома, коттеджа. Она не только призвана защищать его от дождя, снега и палящего солнца, но и является украшением дома и улицы, притягивает взгляд соседей и прохожих. В Renga Architecture инструмент Крыша позволяет строить самые разные модели крыши с помощью небольшого набора команд, но с первого взгляда не всегда ясно, как сделать её той или иной формы. Поэтому мы, Арина Соболева (инженер тех.поддержки) и Анастасия Тян (технический писатель), решили рассказать о разных тонкостях и нюансах работы с этим инструментом на примере нескольких загородных домов -  от простого к сложному. Проще всего в Renga Architecture создать четырехскатную вальмовую крышу. Здесь не надо менять никаких параметров, крыша строится по точкам, непрерывно (Рисунок 1). Рисунок 1 Чтобы её создать, один раз задаем Параметры сегмента (Рисунок 2) и указываем 4 точки по углам здания на 3D Виде. Построение крыши всегда

Как применять расчётные характеристики помещений

Последнее время очень часто задают вопросы про расчёт площади помещений. В этой заметке разберём, какие характеристики есть у помещений в Renga, как они рассчитываются и как их применять. Сначала рассмотрим способы построения помещений. Обозначить помещение можно: Автоматически по точке. В этом случае границы помещения будут определены автоматически по замкнутому контуру, в котором указана точка. При изменении конструкций, образующих контур, все расчётные характеристики помещения будут автоматически пересчитываться. Особенности работы именно с автоматическими помещениями мы рассматривали в заметке Нюансы работы с автопомещениями . С помощью способов построения Автоматически по подобию, Прямая по двум точкам, Дуга по трем точкам, Дуга по начальной точке, радиусу и конечной точке, Окружность по центру и радиусу. Способы построения Прямая по двум точкам, Дуга по трем точкам, Дуга по начальной точке, радиусу и конечной точке можно комбинировать