2009-09-29 24 views
0

J'ai un paramètre partagé UValue lié au type Wall avec TypeBinding dans Autodesk Revit Architecture 2010.Comment définir la valeur d'un paramètre partagé avec liaison de type dans Autodesk Revit Architecture 2010?

Je peux facilement accéder au paramètre avec:

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

La valeur de ce paramètre peut être regardé à avec

var u = parameter.AsDouble(); 

Mais quand je fais

parameter.Set(0.8); 

je reçois une erreur:

InvalidOperationException: Operation is not valid due to the current state of the object.

Lors de l'inspection, les paramètres ReadOnly propriété est définie sur false.

Répondre

2

Ok, je l'ai trouvé le problème:

Lorsque vous utilisez TypeBinding, le paramètre est lui-même dans l'objet Wall, mais dans sa propriété WallType. Si vous le faites de manière polymorphe (pas seulement les murs, mais aussi les sols, les toits, etc.), vous pouvez utiliser la propriété Element.ObjectType.

Le code dans l'OP aurait donc dû être:

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

Ceci est appelé à partir d'une méthode d'extension, une technique plutôt soignée pour ajouter des paramètres à Revit objets.

Réglage du paramètre peut donc être fait comme ceci:

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'"); 
    } 
}