Wie Sie den Wert eines gemeinsamen Parameter mit Typ in Autodesk Revit Architecture 2010 verbindlich festgelegt?

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

  •  18-09-2019
  •  | 
  •  

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.

War es hilfreich?

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'");
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top