private List <LinkedElementInfo> FindElementMappingNode(TreeViewElementModel parentNode) { var linkedElements = new List <LinkedElementInfo>(); try { foreach (var node in parentNode.ChildrenNodes) { if (node.NodeType == TreeViewNodeType.ElementMapping) { if (node.IsChecked == true) { var linkedInfo = node.Tag as LinkedElementInfo; linkedElements.Add(linkedInfo); } } else { var infoList = FindElementMappingNode(node); if (infoList.Count > 0) { linkedElements.AddRange(infoList); } } } } catch (Exception ex) { MessageBox.Show("Failed to find mapping node.\n" + ex.Message, "Find Mapping Node", MessageBoxButton.OK, MessageBoxImage.Warning); } return(linkedElements); }
private void comboBoxLink_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (null != comboBoxLink.SelectedItem) { selectedLink = (LinkedInstanceProperties)comboBoxLink.SelectedItem; treeViewMapping.ItemsSource = null; treeViewMapping.ItemsSource = TreeViewElementModel.SetTreeView(selectedLink); treeViewFamilyMapping.ItemsSource = null; treeViewFamilyMapping.ItemsSource = TreeViewFamilyModel.SetTreeView(selectedLink); } } catch (Exception ex) { MessageBox.Show("Failed to select a Revit Link.\n" + ex.Message, "Select a Revit Link", MessageBoxButton.OK, MessageBoxImage.Warning); } }
public static List <TreeViewElementModel> SetTreeView(LinkedInstanceProperties lip) { var treeView = new List <TreeViewElementModel>(); try { var customCategories = new string[] { "Rooms", "Levels", "Grids", "Scope Boxes" }; var categories = from linkedElement in lip.LinkedElements.Values select linkedElement.CategoryName; if (categories.Count() > 0) { var categoryNames = categories.Distinct().ToList(); categoryNames.Sort(); foreach (var categoryName in categoryNames) { var categoryNode = new TreeViewElementModel(categoryName); categoryNode.NodeType = TreeViewNodeType.Category; categoryNode.ToolTipVisibility = Visibility.Hidden; treeView.Add(categoryNode); if (customCategories.Contains(categoryName)) { var elements = from linkedElement in lip.LinkedElements.Values where linkedElement.CategoryName == categoryName select linkedElement; var linkedElements = elements.OrderBy(o => o.LinkDisplayText).ToList(); foreach (var linkInfo in linkedElements) { var elementNode = new TreeViewElementModel(linkInfo.LinkDisplayText); elementNode.Tag = linkInfo; elementNode.NodeType = TreeViewNodeType.ElementMapping; elementNode.Matched = linkInfo.Matched; elementNode.ToolTip = linkInfo.ToolTipText; elementNode.ToolTipVisibility = Visibility.Visible; categoryNode.ChildrenNodes.Add(elementNode); } continue; } var families = from linkedElement in lip.LinkedElements.Values where linkedElement.CategoryName == categoryName select linkedElement.FamilyName; if (families.Count() > 0) { var familyNames = families.Distinct().ToList(); familyNames.Sort(); foreach (var familyName in familyNames) { var familyNode = new TreeViewElementModel(familyName); familyNode.NodeType = TreeViewNodeType.Family; familyNode.ToolTipVisibility = Visibility.Hidden; categoryNode.ChildrenNodes.Add(familyNode); var familyTypes = from linkedElement in lip.LinkedElements.Values where linkedElement.CategoryName == categoryName && linkedElement.FamilyName == familyName select linkedElement.FamilyTypeName; if (familyTypes.Count() > 0) { var familyTypeNames = familyTypes.Distinct().ToList(); familyTypeNames.Sort(); foreach (var familyTypeName in familyTypeNames) { var familyTypeNode = new TreeViewElementModel(familyTypeName); familyTypeNode.NodeType = TreeViewNodeType.FamilyType; familyTypeNode.ToolTipVisibility = Visibility.Hidden; familyNode.ChildrenNodes.Add(familyTypeNode); var mappings = from linkedElement in lip.LinkedElements.Values where linkedElement.CategoryName == categoryName && linkedElement.FamilyName == familyName && linkedElement.FamilyTypeName == familyTypeName select linkedElement; if (mappings.Count() > 0) { var linkedElements = mappings.OrderBy(o => o.LinkDisplayText).ToList(); foreach (var linkInfo in linkedElements) { var elementNode = new TreeViewElementModel(linkInfo.LinkDisplayText); elementNode.Tag = linkInfo; elementNode.NodeType = TreeViewNodeType.ElementMapping; elementNode.Matched = linkInfo.Matched; elementNode.ToolTip = linkInfo.ToolTipText; elementNode.ToolTipVisibility = Visibility.Visible; familyTypeNode.ChildrenNodes.Add(elementNode); } } } } } } categoryNode.Initialize(); } } } catch (Exception ex) { MessageBox.Show("Failed to set the tree view.\n" + ex.Message, "Set Tree View", MessageBoxButton.OK, MessageBoxImage.Warning); } return(treeView); }