#ironpython #revit-api #revitpythonshell #pyrevit
#ironpython #revit-api #revitpythonshell #pyrevit
Вопрос:
Я пытаюсь создать надстройку pyrevit, которая фильтрует элементы в текущем представлении на основе значения параметра выбранного пользователем элемента. Это отлично работает для параметров типа string и double . Но ошибка AsValueString() в DB.FilterStringRule, вероятно, связана с тем, что информация о единице теряется при преобразовании типа AsValueString в строковый тип в python. Я включил соответствующий код ниже:
target_parameter_value = ele.Parameter[target_parameter].AsValueString()# As value strings got converted to strings
param_id = DB.ElementId(target_parameter)
param_prov = DB.ParameterValueProvider(param_id)
param_equality = DB.FilterStringEquals() # equality class for string
value_rule = DB.FilterStringRule(param_prov,param_equality,target_parameter_value ,True)
param_filter = DB.ElementParameterFilter(value_rule)
elements = DB.FilteredElementCollector(doc)
.OfCategory(target_category)
.WhereElementIsNotElementType()
.WherePasses(param_filter)
.ToElementIds() # select category based on the rule
Есть ли какие-либо обходные пути для AsValueString для работы с DB.FilterStringRule или существует совершенно другое правило для AsValueString, например DB.FilterAsValueStringRule?
Комментарии:
1. Да. прочитайте . Сохраняйте тип параметра и используйте правильный . AsDouble или другие методы получения, а затем используйте правильный фильтр значений для фильтрации значения
Ответ №1:
Вы AsValueString
FilterStringRule
вообще не можете использовать with . Последний взаимодействует с необработанными значениями базы данных Revit. Первый преобразует необработанное значение базы данных Revit в строку отображения, видимую пользователем. Пожалуйста, используйте Parameter
средства доступа к значениям для чтения необработанных значений базы данных вместо этого: