Название паттерна у материала

Рубрика обмен опытом. )) Меня спрашивают, я отвечаю, а заодно и другим пригодится.

Вопрос: как в Dynamo получить имя паттерна из материала? (в примере ниже, у материала “Dynamo” имя назначенного паттерна “Бетон”)

Далее мои рассуждения.

Первое, создадим схему нодов:

Второе, обязательное, это развернем материал mat = UnwrapElement(IN[0])

Раз речь идет о материале, то неплохо было бы заглянуть в REVIT API, а конкретно следующий путь: RevitAPI / Autodesk.Revit.DB / Material
Я для этого использую бесплатный JetBrains dotPeek

Не потнятно, что есть у материала, но нам нужен паттерн. А со словом паттерн только 2 параметра и скорее всего нам нужен SurfacePatternId.

Как следует из названия речь идет не о самом элементе, а о его номере Id в базе проекта.

patternId = mat.SurfacePatternId # это Id паттерна, а не сам паттерн

Чтобы получить сам элемент по его Id номеру, воспользуемся командой:

pattern = doc.GetElement(patternId) 

Посмотрим, что мы получили в итоге OUT = pattern
И как видим получили некий FillPatternElement

Опять лезем в Revit.DB и ищем FillPatternElement

И скорее всего нам понадобится команда GetFillPattern()

OUT = pattern.GetFillPattern()

Получили FillPattern, опять ищем в Revit.DB

Смотрим большой список разных параметров и свойств и понимаем, что нам скорее всего нужно Name

OUT = pattern.GetFillPattern().Name

В итоге получили, что хотели.

Теперь несколько слов о том, какие библиотеки нужно подключать.

  1. Мы искали наши параметры, свойства и команды в Revit.DB
    значит подключаем
    clr.AddReference(‘RevitAPI’) # подключаем основную DLL для работы с REVIT API
    from Autodesk.Revit.DB import * # из состава DLL импортируем все из Revit.DB (для простоты, хотя нам нужны были всего 3 директории: Material, FillPatternElement и FillPattern)
  2. По ID номеру элемента мы получали из документа (из его базы) сам элемент, через команду doc.GetElement(), поэтому подключаем DocumentManager следующим кодом:
    clr.AddReference(“RevitServices”) # импорт DLL RevitServices
    from RevitServices.Persistence import DocumentManager # импорт DocumentManager
    doc = DocumentManager.Instance.CurrentDBDocument # doc – текущая база данных документа

Итоговый скрипт выглядит следующим образом:

import clr
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import *

clr.AddReference(“RevitServices”)
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument

mat = UnwrapElement(IN[0])
patternId = mat.SurfacePatternId
pattern = doc.GetElement(patternId)
OUT = pattern.GetFillPattern().Name

Удачи!

Обсуждение по ссылке на форуме

Добавить комментарий