Cómo establecer el valor de un parámetro compartido con la unión de Autodesk Revit Architecture 2010 tipo?
Pregunta
Tengo un parámetro común Uvalue con destino al tipo Wall
con TypeBinding
en Autodesk Revit Architecture 2010.
Puedo acceder fácilmente el parámetro con:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.get_Parameter("UValue");
El valor de este parámetro puede ser visto con
var u = parameter.AsDouble();
Pero cuando lo haga
parameter.Set(0.8);
Me aparece un error:
InvalidOperationException:. La operación no es válida debido al estado actual del objeto
En una inspección, los parámetros ReadOnly
propiedad se establece en false
.
Solución
Ok, he encontrado el problema:
Cuando se utiliza TypeBinding
, el parámetro no está en el propio objeto Wall
, pero en su propiedad WallType
. Si usted está haciendo esto de una forma polimórfica (no sólo las paredes, sino también los pisos, techos, etc.), entonces se puede utilizar la propiedad Element.ObjectType
.
El código de la OP por lo tanto debería haber sido:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.ObjectType.get_Parameter("UValue");
Esto está siendo llamado desde un método de extensión, una técnica más bien ordenada para añadir parámetros a Revit objetos.
Al establecer el parámetro de este modo se puede hacer así:
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'");
}
}