0

Autodesk Revit Architecture 2010のタイプにバインドされた共有パラメータUValueがあります。WallTypeBinding

次の方法でパラメーターに簡単にアクセスできます。

Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.get_Parameter("UValue");

このパラメーターの値は、

var u = parameter.AsDouble();

しかし、私がするとき

parameter.Set(0.8);

エラーが発生します:

InvalidOperationException: オブジェクトの現在の状態のため、操作は無効です。

調べてみると、 parametersReadOnlyプロパティは に設定されていfalseます。

4

1 に答える 1

2

わかりました、私は問題を見つけました:

を使用する場合TypeBinding、パラメータはWallオブジェクト自体ではなく、そのWallTypeプロパティにあります。これを多形的な方法(壁だけでなく、床、屋根など)で行う場合は、Element.ObjectTypeプロパティを使用できます。

したがって、OPのコードは次のようになっているはずです。

Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.ObjectType.get_Parameter("UValue");

これは、Revitオブジェクトにパラメータを追加するためのかなり巧妙な手法である拡張メソッドから呼び出されています。

したがって、パラメータの設定は次のように行うことができます。

public static void SetUValue(this Wall self, double uvalue)
{ 
    Parameter parameter = self.ObjectType.get_Parameter("UValue");
    if (parameter != null)
    {
        parameter.Set(uvalue);
    }
    else
    {
        throw new InvalidOperationException(
            "Wall does not contain the parameter 'UValue'");
    }
}
于 2009-10-08T07:05:20.697 に答える