オートデスクのRevit建築2010年にバインディングタイプと共有パラメータの値を設定するには?

StackOverflow https://stackoverflow.com/questions/1492756

  •  18-09-2019
  •  | 
  •  

質問

私は共有パラメータはUValue のオートデスクのRevit建築2010年の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が:操作が原因オブジェクトの現在の状態に有効ではありません。

検査で、パラメータReadOnlyプロパティはfalseするように設定されている。

役に立ちましたか?

解決

[OK]を、私は問題を発見した。

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'");
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top