Cómo establecer el valor de un parámetro compartido con la unión de Autodesk Revit Architecture 2010 tipo?

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

  •  18-09-2019
  •  | 
  •  

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.

¿Fue útil?

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'");
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top