Como definir o valor de um parâmetro compartilhado com obrigatório em Autodesk Revit Architecture 2010 Tipo?
Pergunta
Eu tenho um parâmetro compartilhado UValue ligado ao tipo Wall
com TypeBinding
em Autodesk Revit Architecture 2010.
Eu posso facilmente acessar o parâmetro com:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.get_Parameter("UValue");
O valor deste parâmetro pode ser olhado com
var u = parameter.AsDouble();
Mas quando eu faço
parameter.Set(0.8);
Eu recebo um erro:
InvalidOperationException:. A operação não é válida devido ao estado atual do objeto
Em uma inspeção, a propriedade parâmetros ReadOnly
está definido para false
.
Solução
Ok, eu encontrei o problema:
Ao usar TypeBinding
, o parâmetro não está no próprio objeto Wall
, mas em sua propriedade WallType
. Se você está fazendo isso de uma maneira polimórfica (não apenas as paredes, mas também pisos, telhados, etc.), então você pode usar a propriedade Element.ObjectType
.
O código no OP deve, portanto, ter sido:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.ObjectType.get_Parameter("UValue");
Este está sendo chamado de um método de extensão, uma técnica bastante puro para adicionar parâmetros para Revit objetos.
A definição do parâmetro pode assim ser feito assim:
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'");
}
}