Comment définir la valeur d'un paramètre partagé avec liaison de type dans Autodesk Revit Architecture 2010 ?
Question
J'ai un paramètre partagé Valeur UV lié au Wall
tapez avec TypeBinding
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 consultée avec
var u = parameter.AsDouble();
Mais quand je fais
parameter.Set(0.8);
J'obtiens une erreur :
InvalidOperationException :L'opération n'est pas valide en raison de l'état actuel de l'objet.
Lors de l'inspection, les paramètres ReadOnly
la propriété est définie sur false
.
La solution
Ok, j'ai trouvé le problème :
Lors de l'utilisation TypeBinding
, le paramètre n'est pas dans le Wall
l'objet lui-même, mais dans son WallType
propriété.Si vous faites cela de manière polymorphe (pas seulement les murs, mais aussi les sols, les toits, etc.), alors vous pouvez utiliser le Element.ObjectType
propriété.
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 intéressante pour ajouter des paramètres aux objets Revit.
Le réglage du paramètre peut ainsi se faire 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'");
}
}