private void CheckNewTypes() { Dictionary <int, SyncProperties> newSyncDictionary = new Dictionary <int, SyncProperties>(); List <int> deletedSync = new List <int>(); foreach (int id in syncDictionary.Keys) { SyncProperties sp = syncDictionary[id]; switch (sp.SyncType) { case SyncType.Category: UpdateCategory(sp.CategoryID, newSyncDictionary, deletedSync); break; case SyncType.Family: UpdateFamily(sp.FamilyID, deletedSync); break; } } //because dictionary collection cannot be modified during the foreach loop foreach (int id in newSyncDictionary.Keys) { SyncProperties sp = newSyncDictionary[id]; syncDictionary.Add(sp.FamilyID, sp); //when adding new families } //when exisiting deleted families foreach (int id in deletedSync) { syncDictionary.Remove(id); } }
private void UpdateCategory(int id, Dictionary <int, SyncProperties> newSync, List <int> deleted) { try { BuiltInCategory enumCategory = (BuiltInCategory)id; FilteredElementCollector collector = new FilteredElementCollector(doc); List <Element> elementTypes = collector.OfCategory(enumCategory).OfClass(typeof(ElementType)).ToElements().ToList(); if (elementTypes.Count > 0) { foreach (Element element in elementTypes) { ElementType etype = (ElementType)element; if (!symbolsToExclude.Contains(etype.Id)) { symbolsToExclude.Add(etype.Id); FamilySymbol symbol = etype as FamilySymbol; if (null == symbol) { continue; } if (!syncDictionary.ContainsKey(symbol.Family.Id.IntegerValue) && !newSync.ContainsKey(symbol.Family.Id.IntegerValue)) { SyncProperties sp = new SyncProperties(); sp.SyncType = SyncType.Family; sp.FamilyID = symbol.Family.Id.IntegerValue; sp.FamilyName = symbol.Family.Name; newSync.Add(sp.FamilyID, sp); } } } } else if (enumCategory == BuiltInCategory.OST_Views || enumCategory == BuiltInCategory.OST_Sheets) { collector = new FilteredElementCollector(doc); List <ViewFamilyType> viewTypeElements = collector.OfClass(typeof(ViewFamilyType)).Cast <ViewFamilyType>().ToList(); foreach (ViewFamilyType viewType in viewTypeElements) { string viewFamily = viewType.ViewFamily.ToString(); if (excludeViewFamily.Contains(viewFamily)) { continue; } if (!symbolsToExclude.Contains(viewType.Id)) { symbolsToExclude.Add(viewType.Id); } } } else { deleted.Add(id); } } catch (Exception ex) { MessageBox.Show("Failed to upadte categoires for auto-synchronization: \n" + ex.Message); } }
public void ReadSyncData() { try { Recordset recordset; recordset = daoDB.OpenTable("UI_AutoSyncOptions"); if (recordset.RecordCount > 0) { while (!recordset.EOF) { SyncProperties sp = new SyncProperties(); string syncType = recordset.Fields["SyncType"].Value; switch (syncType) { case "Category": sp.SyncType = SyncType.Category; sp.CategoryID = int.Parse(recordset.Fields["CategoryID"].Value); sp.CategoryName = recordset.Fields["CategoryName"].Value; syncDictionary.Add(sp.CategoryID, sp); break; case "Family": sp.SyncType = SyncType.Family; sp.FamilyID = int.Parse(recordset.Fields["FamilyID"].Value); sp.FamilyName = recordset.Fields["FamilyName"].Value; syncDictionary.Add(sp.FamilyID, sp); break; } recordset.MoveNext(); } } recordset.Close(); } catch (Exception ex) { MessageBox.Show("Failed to Read Data from AutoSyncOptions table: \n" + ex.Message); CloseDatabase(); } }