Come impostare il valore di un parametro condiviso con il tipo di rilegatura in Autodesk Revit Architecture 2010?

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

  •  18-09-2019
  •  | 
  •  

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.

È stato utile?

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'");
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top