0

ユーザーが選択した要素のパラメーター値に基づいて現在のビューの要素をフィルター処理する pyrevit アドインを作成しようとしています。これは、string および double の種類のパラメーターに対しては正常に機能します。しかし、DB.FilterStringRule で AsValueString() が失敗するのは、おそらく Python で AsValueString 型を文字列型に変換する際に単位情報が失われるためです。以下に関連するコードを含めました。

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 と連携するための回避策はありますか、または DB.FilterAsValueStringRule のような AsValueString の完全に他のルールはありますか?

4

1 に答える 1

1

AsValueStringとの併用は一切できませんFilterStringRule。後者は生の Revit データベース値と相互作用します。前者は、未加工の Revit データベース値をユーザーに表示される表示文字列に変換します。Parameter代わりに値アクセサーを使用して生のデータベース値を読み取ってください。

于 2020-10-17T13:40:13.083 に答える