Beispiel #1
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static Family ToRevitFamily(this oM.Adapters.Revit.Elements.Family family, Document document, RevitSettings settings = null, Dictionary <Guid, List <int> > refObjects = null)
        {
            Family revitFamily = refObjects.GetValue <Family>(document, family.BHoM_Guid);

            if (revitFamily != null)
            {
                return(revitFamily);
            }

            settings = settings.DefaultIfNull();

            if (family.PropertiesList != null && family.PropertiesList.Count != 0)
            {
                foreach (InstanceProperties instanceProperties in family.PropertiesList)
                {
                    instanceProperties.ToRevitElementType(document, settings, refObjects);
                }
            }

            HashSet <BuiltInCategory> categories = family.BuiltInCategories(document);

            revitFamily = family.Family(document, categories, settings.FamilyLoadSettings);

            revitFamily.CheckIfNullPush(family);
            if (revitFamily == null)
            {
                return(null);
            }

            // Copy parameters from BHoM object to Revit element
            revitFamily.CopyParameters(family, settings);

            refObjects.AddOrReplace(family, revitFamily);
            return(revitFamily);
        }
        /***************************************************/
        /****              Public methods               ****/
        /***************************************************/

        public static HashSet <BuiltInCategory> BuiltInCategories(this oM.Adapters.Revit.Elements.Family family, Document document, bool caseSensitive = true)
        {
            if (family?.PropertiesList == null)
            {
                return(null);
            }

            return(new HashSet <BuiltInCategory>(family.PropertiesList.Select(x => x.BuiltInCategory(document, caseSensitive))));
        }
Beispiel #3
0
        /***************************************************/
        /****              Public methods               ****/
        /***************************************************/

        public static Family Family(this oM.Adapters.Revit.Elements.Family family, Document document, IEnumerable <BuiltInCategory> builtInCategories, FamilyLoadSettings familyLoadSettings = null)
        {
            if (family == null || string.IsNullOrWhiteSpace(family.Name) || document == null)
            {
                return(null);
            }

            //Find Existing Family in Document
            FilteredElementCollector collector = new FilteredElementCollector(document).OfClass(typeof(Family));

            if (builtInCategories != null && builtInCategories.Any(x => x != Autodesk.Revit.DB.BuiltInCategory.INVALID))
            {
                collector = collector.WherePasses(new LogicalOrFilter(builtInCategories.Where(x => x != Autodesk.Revit.DB.BuiltInCategory.INVALID).Select(x => new ElementCategoryFilter(x) as ElementFilter).ToList()));
            }

            Family revitFamily = collector.FirstOrDefault(x => x.Name == family.Name) as Family;

            if (revitFamily != null)
            {
                return(revitFamily);
            }

            //Find ElementType in FamilyLibrary
            if (familyLoadSettings != null)
            {
                if (builtInCategories != null && builtInCategories.Any(x => x != Autodesk.Revit.DB.BuiltInCategory.INVALID))
                {
                    foreach (BuiltInCategory builtInCategory in builtInCategories)
                    {
                        if (builtInCategory == Autodesk.Revit.DB.BuiltInCategory.INVALID)
                        {
                            continue;
                        }

                        revitFamily = familyLoadSettings.LoadFamily(document, builtInCategory.CategoryName(document), family.Name);
                        if (revitFamily != null)
                        {
                            return(revitFamily);
                        }
                    }
                }
                else
                {
                    return(familyLoadSettings.LoadFamily(document, null, family.Name));
                }
            }

            return(null);
        }
Beispiel #4
0
        /***************************************************/
        /****               Public Methods              ****/
        /***************************************************/

        public static oM.Adapters.Revit.Elements.Family FamilyFromRevit(this Family revitFamily, RevitSettings settings = null, Dictionary <string, List <IBHoMObject> > refObjects = null)
        {
            settings = settings.DefaultIfNull();

            oM.Adapters.Revit.Elements.Family family = refObjects.GetValue <oM.Adapters.Revit.Elements.Family>(revitFamily.Id);
            if (family != null)
            {
                return(family);
            }

            family      = new oM.Adapters.Revit.Elements.Family();
            family.Name = revitFamily.Name;

            IEnumerable <ElementId> elementIDs = revitFamily.GetFamilySymbolIds();

            if (elementIDs != null)
            {
                foreach (ElementId elementID in elementIDs)
                {
                    if (elementID == null || elementID == ElementId.InvalidElementId)
                    {
                        continue;
                    }

                    ElementType elementType = revitFamily.Document.GetElement(elementID) as ElementType;
                    if (elementType == null)
                    {
                        continue;
                    }

                    InstanceProperties instanceProperties = elementType.InstancePropertiesFromRevit(settings, refObjects);
                    if (instanceProperties == null)
                    {
                        continue;
                    }

                    family.PropertiesList.Add(instanceProperties);
                }
            }

            //Set identifiers, parameters & custom data
            family.SetIdentifiers(revitFamily);
            family.CopyParameters(revitFamily, settings.ParameterSettings);
            family.SetProperties(revitFamily, settings.ParameterSettings);

            refObjects.AddOrReplace(revitFamily.Id, family);
            return(family);
        }
Beispiel #5
0
        /***************************************************/

        public static Element ToRevit(this oM.Adapters.Revit.Elements.Family family, Document document, RevitSettings settings = null, Dictionary <Guid, List <int> > refObjects = null)
        {
            return(family.ToRevitFamily(document, settings, refObjects));
        }