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