private void comboBoxRevitFamilies_SelectedIndexChanged(object sender, EventArgs e) { NLogger.LogText("Enter comboBoxRevitFamilies_SelectedIndexChanged"); RevitFamily selectedFamily = (RevitFamily)comboBoxRevitFamilies.SelectedItem; if (selectedFamily != null) { // Reset other elements depending from the selection offsitePanelHandler.FillGrid(dgElements, null); offsitePanelHandler.FillGrid(dgParamsMapping, null); offsitePanelHandler.FillGrid(dgInvRevMapping, null); txtInventorTemplatesPath.Text = ""; offsitePanelHandler.ResetRevitInventorMappingInternalStructure(); ((System.Windows.Forms.Control)tabControl1.TabPages[tabName]).Enabled = false; // Extract Revit family from revit document, based on selected xml configured element NLogger.LogText($"Revit family selected: {selectedFamily.Name}"); RevitFamTypes = offsitePanelHandler.GetRevitFamilyTypesInActiveDocument(selectedFamily); NLogger.LogText($"Retrieved: {RevitFamTypes.Count()} family types"); // populate filtering drowdown lists var dataSource = offsitePanelHandler.GetListFamilyTypeSource(RevitFamTypes, selectedFamily); this.comboBoxRevitFamilyTypes.SelectedIndexChanged -= new EventHandler(comboBoxRevitFamilyTypes_SelectedIndexChanged); offsitePanelHandler.FillComboRevitFamTypes(comboBoxRevitFamilyTypes, dataSource, "FamilyTypeName"); this.comboBoxRevitFamilyTypes.SelectedIndexChanged += new EventHandler(comboBoxRevitFamilyTypes_SelectedIndexChanged); } NLogger.LogText("Exit comboBoxRevitFamilies_SelectedIndexChanged"); }
protected override void SolveInstance(IGH_DataAccess DA) { RevitFamily cat = new RevitFamily(); DA.GetData <RevitFamily>("RevitFamily", ref cat); DA.SetDataList("Types", cat.Types); }
// Retrieve Revit family types in Active document public IList <Element> GetRevitFamilyTypesInActiveDocument(RevitFamily famType) { NLogger.LogText("Entered GetRevitFamiliesInActiveDocument"); IList <Element> genModElements = null; try { Type RevitFamType = Type.GetType(famType.Type); var genModelTypeCollector = new FilteredElementCollector(doc); genModelTypeCollector.OfClass(RevitFamType); if (!string.IsNullOrEmpty(famType.Category)) { BuiltInCategory RevitFamilyCategory = (BuiltInCategory)Enum.Parse(typeof(BuiltInCategory), famType.Category, true); genModelTypeCollector.OfCategory(RevitFamilyCategory); } genModElements = genModelTypeCollector.ToElements(); } catch (Exception ex) { NLogger.LogError(ex); NLogger.LogText("Exit GetRevitFamiliesInActiveDocument with error"); throw (ex); } NLogger.LogText($"Extracted {genModElements.Count()} Families from Revit document"); NLogger.LogText("Exit GetRevitFamiliesInActiveDocument"); return(genModElements); }
/// <summary> /// Get Revit Families from the active Document /// </summary> public static RevitFamilyCollection GetFamilies(this Document document) { // create a new family collection Grevit.Types.RevitFamilyCollection familyCollection = new Grevit.Types.RevitFamilyCollection(); // set up a new category List familyCollection.Categories = new List <Grevit.Types.RevitCategory>(); // Get all WallTypes and add them to the system family category #region WallTypes FilteredElementCollector collector = new FilteredElementCollector(document).OfClass(typeof(WallType)); RevitCategory systemFamilies = new RevitCategory() { Name = "System Families", Families = new List <RevitFamily>() }; RevitFamily wallTypes = new RevitFamily() { Name = "Walls", Types = new List <string>() }; foreach (WallType wallType in collector.ToElements()) { wallTypes.Types.Add(wallType.Name); } systemFamilies.Families.Add(wallTypes); familyCollection.Categories.Add(systemFamilies); #endregion // Get all Family Instances and add them to the Grevit Family collection #region familyInstances FilteredElementCollector familyInstanceCollector = new FilteredElementCollector(document).OfClass(typeof(FamilySymbol)); foreach (Autodesk.Revit.DB.FamilySymbol familySymbol in familyInstanceCollector.ToElements()) { RevitFamily family = null; RevitCategory category = null; // Check if category already exists foreach (RevitCategory revitCategory in familyCollection.Categories) { if (revitCategory.Name == familySymbol.Category.Name) { category = revitCategory; } } // Otherwise create a new category if (category == null) { category = new RevitCategory() { Name = familySymbol.Category.Name, Families = new List <RevitFamily>() }; familyCollection.Categories.Add(category); } // Check if Family already exists foreach (RevitFamily revitFamily in category.Families) { if (revitFamily.Name == familySymbol.FamilyName) { family = revitFamily; } } // Otherwise create a new one if (family == null) { family = new RevitFamily() { Name = familySymbol.FamilyName, Types = new List <string>() }; category.Families.Add(family); } family.Types.Add(familySymbol.Name); } #endregion return(familyCollection); }