public static List <RevitParameter> GetRevitParameters(this IBHoMObject bHoMObject) { if (bHoMObject == null) { return(null); } RevitPulledParameters pullFragment = bHoMObject.Fragments?.FirstOrDefault(x => x is RevitPulledParameters) as RevitPulledParameters; RevitParametersToPush pushFragment = bHoMObject.Fragments?.FirstOrDefault(x => x is RevitParametersToPush) as RevitParametersToPush; List <RevitParameter> result = new List <RevitParameter>(); if (pullFragment?.Parameters != null) { result.AddRange(pullFragment.Parameters); } if (pushFragment?.Parameters != null) { bool mixed = false; foreach (RevitParameter param in pushFragment.Parameters) { int index = result.FindIndex(x => x.Name == param.Name); if (index == -1) { result.Add(param); } else { mixed = true; result.RemoveAt(index); result.Add(param); } } if (mixed) { BH.Engine.Reflection.Compute.RecordNote("Some of the parameters were retrieved from collection of pulled ones, some from the ones meant to be pushed."); } } return(result); }
public static object GetRevitParameterValue(this IBHoMObject bHoMObject, string parameterName) { if (bHoMObject == null) { return(null); } RevitParametersToPush pushFragment = bHoMObject.Fragments?.FirstOrDefault(x => x is RevitParametersToPush) as RevitParametersToPush; if (pushFragment?.Parameters != null) { RevitParameter param = pushFragment.Parameters.FirstOrDefault(x => x.Name == parameterName); if (param != null) { return(param.Value); } } RevitPulledParameters pullFragment = bHoMObject.Fragments?.FirstOrDefault(x => x is RevitPulledParameters) as RevitPulledParameters; if (pullFragment?.Parameters != null) { RevitParameter param = pullFragment.Parameters.FirstOrDefault(x => x.Name == parameterName); if (param != null) { return(param.Value); } } RevitIdentifiers identifierFragment = bHoMObject.Fragments?.FirstOrDefault(x => x is RevitIdentifiers) as RevitIdentifiers; if (identifierFragment != null) { string paramName = string.Concat(parameterName.Where(c => !char.IsWhiteSpace(c))); if (Reflection.Query.PropertyNames(identifierFragment).Contains(paramName)) { return(Reflection.Query.PropertyValue(identifierFragment, paramName)); } } Dictionary <string, object> bHoMPropDic = Reflection.Query.PropertyDictionary(bHoMObject); foreach (KeyValuePair <string, object> bHoMPropEntry in bHoMPropDic) { IBHoMObject bHoMProp = bHoMPropEntry.Value as IBHoMObject; if (bHoMProp != null) { RevitPulledParameters typePullFragment = bHoMProp.Fragments?.FirstOrDefault(x => x is RevitPulledParameters) as RevitPulledParameters; if (typePullFragment?.Parameters != null) { RevitParameter param = typePullFragment.Parameters.FirstOrDefault(x => x.Name == parameterName); if (param != null) { Engine.Reflection.Compute.RecordWarning("The value for parameter " + parameterName + " for the object with BHoM_Guid " + bHoMObject.BHoM_Guid + " has been retrieved from its property " + bHoMPropEntry.Key + "."); return(param.Value); } } } } return(null); }