Como definir o valor de um parâmetro compartilhado com obrigatório em Autodesk Revit Architecture 2010 Tipo?

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

  •  18-09-2019
  •  | 
  •  

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.

Foi útil?

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'");
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top