#связь с Revit и его параметрами API библиотек
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit import *
from Autodesk.Revit.UI import *
from Autodesk.Revit.UI.Macros import *
from Autodesk.Revit.UI.Selection import *
from Autodesk.Revit.DB import *
from System.Collections.Generic import *
from System.Collections import *
from System import *
from math import *
app = __revit__.Application
doc = __revit__.ActiveUIDocument.Document
t = Transaction(doc, 'Print family parameters')
t.Start()
#начало кода
# Возвращает идентификатор элемента итератор к элементам, проходящих фильтры
collector = FilteredElementCollector(doc)
collector.OfCategory(BuiltInCategory.OST_GenericModel)
collector.OfClass(FamilySymbol)
famtypeitr = collector.GetElementIdIterator()
famtypeitr.Reset()
# фильтр всех экземпляров категории
typeFilter= ElementCategoryFilter(BuiltInCategory.OST_Rebar)
# фильтр всех видимых экземпляров
elems=FilteredElementCollector(doc).WherePasses( typeFilter ).ToElements()
# фильтр всех экземпляров класса
symbolFilter= ElementClassFilter(FamilySymbol)
# 2фильтр всех экземпляров категории
type2Filter=ElementCategoryFilter(BuiltInCategory.OST_DetailComponents)
# получаем возможность фильтровать по строкам (текст)
provider=ParameterValueProvider(ElementId( BuiltInParameter.ALL_MODEL_TYPE_NAME))
# Основа для всех классов, которые сравнивают значения строк из Revit в значение фильтра поставляемого пользователем
evaluator=FilterStringEquals()
# Фильтр который работает на строковых(текстовых) значениях во всем проекте Revit
rule=FilterStringRule(provider, evaluator, "Деталь П1", True)
# Фильтр используется для сопоставления элементов от одного или нескольких правил фильтров параметров
paramFilter=ElementParameterFilter(rule)
# Фильтр списка
filterList=List[ElementFilter]()
filterList.Add(symbolFilter)
filterList.Add(type2Filter)
filterList.Add(paramFilter)
# Фильтр, который содержит набор фильтров.
Filter=LogicalAndFilter(filterList)
# фильтр всех видимых экземпляров
details=FilteredElementCollector(doc).WherePasses( Filter ).ToElements()
# присвоение параметров от rebar к detail
for rebar in elems:
p=Parameter
p=rebar.LookupParameter("A")
if (p == None):
continue
float(a=p.AsDouble())
p=rebar.LookupParameter("B")
if (p == None):
continue
float(b=p.AsDouble())
p=rebar.LookupParameter("C")
if (p == None):
continue
float(c==p.AsDouble())
for detail in details:
p2=Parameter
p2 = detail.LookupParameter("A")
p2.Set(a)
p2 = detail.LookupParameter("B")
p2.Set(b)
p2 = detail.LookupParameter("C")
p2.Set(c)
t.Commit()
__window__.Close()