/// <summary> /// Конструктор /// </summary> /// <param name="uiApplication">UIApplication</param> /// <param name="skipFamilies">Список семейств, которые уже присутствуют в списке обработки</param> public SelectFamilyPairWindow(UIApplication uiApplication, List <string> skipFamilies) { InitializeComponent(); Title = ModPlusAPI.Language.GetItem(ModPlusConnector.Instance.Name, "h6"); Categories = new List <ExtCategoryForSelection>(); var families = new FilteredElementCollector(uiApplication.ActiveUIDocument.Document) .OfClass(typeof(Family)) .Cast <Family>() .Where(f => f.FamilyCategory != null && !f.IsInPlace) .ToList(); Dictionary <int, Category> categories = families .Select(f => f.FamilyCategory) .GroupBy(f => f.Id.IntegerValue) .ToDictionary(g => g.Key, g => g.First()); var groupedByCategory = families.GroupBy(f => f.FamilyCategoryId.IntegerValue); foreach (IGrouping <int, Family> grouping in groupedByCategory) { var extCategoryForSelection = new ExtCategoryForSelection(categories[grouping.Key]); foreach (Family family in grouping) { if (skipFamilies.Contains(family.Name)) { continue; } var extFamilyForSelection = new ExtFamilyForSelection(extCategoryForSelection, family); extCategoryForSelection.Families.Add(extFamilyForSelection); } if (extCategoryForSelection.Families.Count > 1) { Categories.Add(extCategoryForSelection); } } TvAllFamilies.ItemsSource = Categories; }
/// <summary> /// Инициализация нового экземпляра <see cref="ExtFamily"/> /// </summary> /// <param name="extFamilyForSelection">Экземпляр <see cref="ExtFamilyForSelection"/></param> /// <param name="onlyOneSymbolCanBeSelected">Только один типоразмер может быть выбран</param> public ExtFamily(ExtFamilyForSelection extFamilyForSelection, bool onlyOneSymbolCanBeSelected) : this(onlyOneSymbolCanBeSelected) { Family = extFamilyForSelection.Family; FillDataFromFamily(); }