Comment définir la valeur d'un paramètre partagé avec liaison de type dans Autodesk Revit Architecture 2010 ?

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

  •  18-09-2019
  •  | 
  •  

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.

Était-ce utile?

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'");
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top