Wie Sie den Wert eines gemeinsamen Parameter mit Typ in Autodesk Revit Architecture 2010 verbindlich festgelegt?
Frage
Ich habe einen gemeinsamen Parameter U-Wert , gebunden an den Wall
Typen mit TypeBinding
in Autodesk Revit Architecture 2010.
Ich kann leicht den Parameter zugreifen mit:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.get_Parameter("UValue");
Der Wert dieses Parameters kann mit betrachtet werden
var u = parameter.AsDouble();
Aber wenn ich
parameter.Set(0.8);
Ich erhalte eine Fehlermeldung:
InvalidOperationException. Der Betrieb ist nicht gültig aufgrund des aktuellen Zustand des Objekts
Bei der Inspektion, ReadOnly
die Parameter Eigenschaft auf false
.
Lösung
Ok, ich habe das Problem gefunden:
Wenn TypeBinding
verwendet wird, ist der Parameter nicht in dem Wall
Objekt selbst, sondern in seiner Eigenschaft WallType
. Wenn Sie dies in einer polymorphen Art und Weise tun (nicht nur Wände, sondern auch Böden, Dächer etc.), dann können Sie die Element.ObjectType
Eigenschaft verwenden.
Der Code in der OP so sein sollte:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.ObjectType.get_Parameter("UValue");
Dies ist aus einer Erweiterungsmethode, eine ziemlich sauberen Technik für das Hinzufügen von Parametern aufgerufen wird Objekte in Revit.
den Parameter einstellen kann somit wie folgt durchgeführt werden:
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'");
}
}