Название паттерна у материала
Рубрика обмен опытом. )) Меня спрашивают, я отвечаю, а заодно и другим пригодится.
Вопрос: как в 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
В итоге получили, что хотели.
Теперь несколько слов о том, какие библиотеки нужно подключать.
- Мы искали наши параметры, свойства и команды в Revit.DB
значит подключаем
clr.AddReference(‘RevitAPI’) # подключаем основную DLL для работы с REVIT API
from Autodesk.Revit.DB import * # из состава DLL импортируем все из Revit.DB (для простоты, хотя нам нужны были всего 3 директории: Material, FillPatternElement и FillPattern) - По 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
Удачи!
Обсуждение по ссылке на форуме