Come impostare il valore di un parametro condiviso con il tipo di rilegatura in Autodesk Revit Architecture 2010?
Domanda
Ho un parametro condiviso Valore U legato al tipo di Wall
con TypeBinding
in Autodesk Revit Architecture 2010.
Posso facilmente accedere al parametro con:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.get_Parameter("UValue");
Il valore di questo parametro può essere guardato con
var u = parameter.AsDouble();
Ma quando faccio
parameter.Set(0.8);
ottengo un errore:
InvalidOperationException:. L'operazione non è valida a causa dello stato corrente dell'oggetto
Il controllo, i parametri ReadOnly
proprietà è impostata su false
.
Soluzione
Ok, ho trovato il problema:
Quando si utilizza TypeBinding
, il parametro non è nell'oggetto Wall
in sé, ma nella sua proprietà WallType
. Se si sta facendo questo in modo polimorfico (non solo i muri, ma anche pavimenti, tetti, ecc), quindi è possibile utilizzare la proprietà Element.ObjectType
.
Il codice nel PO dovrebbe quindi essere:
Definition d = DefinitionFile.Groups.get_Item("groupname").Definitions.get_Item("UValue");
Parameter parameter = self.ObjectType.get_Parameter("UValue");
Questo viene chiamato da un metodo di estensione, una tecnica piuttosto accurato per aggiungere parametri Revit oggetti.
L'impostazione del parametro può quindi essere fatto in questo modo:
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'");
}
}