Сбой DB.FilterStringRule при AsValueString()

#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 средства доступа к значениям для чтения необработанных значений базы данных вместо этого: