Найти тему
Тонкости Renga

Часть 6. Скрипт получения свойств объектов

В большинстве случаев получения простого списка объектов модели недостаточно. Гораздо больший интерес представляют свойства, параметры и расчетные характеристики объектов.

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

Для открытия файла проекта используем часть скрипта из предыдущей статьи. Для удобства работы со скриптом добавим возможность его открытия диалоговым окном Windows и, чтобы не забыть, сразу добавим закрытие проекта и программы. Повторять здесь текст этой части скрипта не будем, он идентичен описанному в предыдущей статье (Изучаем Renga API. Скрипт для подсчета объектов. Часть 5). Изменим только внутреннюю часть, отвечающую за работу с моделью и свойствами окна. Сам скрипт будет состоять из нескольких строк работы с проектом и моделью в нем.

Запрашиваем модель, содержащуюся в проекте: $Model3D = $project.model;

Далее получаем список объектов в модели: $ModelObjs = $project.model.GetObjects();

Следующим шагом мы проходим по списку и, определяя тип объекта, получаем его свойства. В примере получим свойства объекта типа окно. Для определения типа объекта используется уникальный идентификатор типа GUID, который вы можете найти в справке API Renga https://help.rengabim.com/api/group___object_types.html

Нас интересует тип объекта - окно, его GUID можно скопировать с этой страницы справки: https://help.rengabim.com/api/group___object_types.html#ga361be169f92b0666ddca7fef323ff4d0

Также, как мы это делали в предыдущем скрипте, сравниваем свойство объекта ObjectTypeS с идентификатором типа:

for ($i = 0; $i -lt $ModelObjs.Count(); $i++) #проходим по списку: нулевой элемент - это первый в списке

{ $object = $ModelObjs.GetByIndex($i); #получаем объект из списка

if ($object.ObjectTypeS -eq "{2b02b353-2ca5-4566-88bb-917ea8460174}") #Окно

Для того, чтобы увидеть свойства какого объекта мы получаем, выводим его имя на экран: Write-Host $i". " $object.Name; #выводим имя объекта

На следующем шаге получаем список свойств выбранного объекта и проверяем результат, сравнивая полученный объект с пустым значением ($null):

$objproperties = $object.GetProperties();

if ($objproperties -ne $null)

Убедившись, что объект существует (-ne $null - не равен пустому значению), получаем список свойств объекта: $ids = $objproperties.GetIds();

Далее проходим по списку for ($j = 0; $j -lt $ids.Count; $j++)

и получаем по очереди имеющиеся свойства объекта:

$property = $objproperties.GetS($ids.GetS($j));

Мы сразу же можем получить наименование свойства: $property.Name, но нас кроме него интересует также его значение.

Обращаем внимание, что значение свойства зависит от того, какого оно типа. Для вещественных чисел (также известных как числа с плавающей запятой) это один тип, для целых – другой, для логических вообще всего два значения – «Да» и «Нет». Поэтому для того, чтобы получить нужное значение, сначала определяется тип данных свойства $property.Type, а затем, в зависимости от типа данных, мы получаем значение свойства.

И на последнем шаге мы уже выводим пару имя-значение на экран:

$property_info = $property.Name +": "+$property_value;

Write-Host $property_info; #выводим информацию о свойстве

После завершение цикла и вывода всей информации, нам остается только закрыть проект $result =$renga_app.CloseProject($true); и выйти из приложения Renga $renga_app.Quit()

Полный скрипт приведен ниже:

Скрипт для получения свойств

Для проверки скрипта на работоспособность можно использовать один из каталогов, опубликованных на сайте https://rengabim.com/

Каталог окон Veka https://rengabim.com/files/katalog/Veka/veka_renga_2021_2.zip отлично подойдет для тестирования скрипта, так как содержит большое количество свойств окон.

Запускаем скрипт и получаем все окна, содержащиеся в каталоге и все 25 свойств каждого из окон.
Видео, демонстрирующее создание описанного выше скрипта
https://dzen.ru/video/watch/64785db26f2c8e4039e5a08c