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);
        }