qin
2024-09-28 e358beb08f5be49703009b64f058ecfbcfeefbd9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using HStation.RevitDev.Model.ModelEnum;
using HStation.RevitDev.RevitDataExport.Common;
using HStation.RevitDev.RevitDataExport.Entity;
using HStation.RevitDev.RevitDataExport.Service;
using HStation.RevitDev.RevitDataExport.Utility;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using DataGrid = System.Windows.Controls.DataGrid;
 
namespace HStation.RevitDev.RevitDataExport.Forms
{
    /// <summary>
    /// WPF_FamilyPanel.xaml 的交互逻辑
    /// </summary>
    public partial class Wpf_InstancePanel : Page, IDockablePaneProvider
    {
        public Wpf_InstancePanel()
        {
            InitializeComponent();
            InitializeControlsData();
        }
 
        private void InitializeControlsData()
        {
            var values = Enum.GetValues(typeof(RevitType));
            this.tabControl.Items.Clear();
            foreach (var value in values)
            {
                var revitType = (RevitType)value;
                if (revitType.IsRequired())
                {
                    TabItem tabItem = CreateTabItem(revitType);
                    this.tabControl.Items.Add(tabItem);
                }
            }
        }
 
        private TabItem CreateTabItem(RevitType revitType)
        {
            var tabItem = new TabItem();
            tabItem.Tag = revitType;
            tabItem.Height = 30;
            tabItem.Header = revitType.GetDescription();
            DataGrid dataGrid = CreateDataGrid(revitType);
            tabItem.Content = dataGrid;
            return tabItem;
        }
 
        private DataGrid CreateDataGrid(RevitType revitType)
        {
            var dataGrid = new DataGrid();
            dataGrid.RowHeight = 20;
            dataGrid.IsReadOnly = true;
            dataGrid.LoadingRow += DataGrid_LoadingRow;
            dataGrid.SelectionUnit = DataGridSelectionUnit.Cell;
            dataGrid.MouseDoubleClick += DataGrid_MouseDoubleClick;
            dataGrid.CanUserAddRows = false;
            CreateRows(dataGrid, revitType);
            return dataGrid;
        }
 
        private static void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = e.Row.GetIndex() + 1;
        }
 
        private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            try
            {
                DataGrid dataGrid = sender as DataGrid;
                var selectCells = dataGrid.SelectedCells;
                if (selectCells.Count == 0) { return; }
 
                var selectCell = selectCells[0];
                if (selectCell.Column.Header.ToString() == "编号")
                {
                    string id = (selectCell.Item as ElementModel).编号;
                    UIDocumentUtils.ShowElement(id);
                }
                else if (selectCell.Column.Header.ToString() == "连接构件")
                {
                    string ids = (selectCell.Item as ElementModel).连接构件;
                    UIDocumentUtils.ShowLinkedElements(ids);
                }
            }
            catch (Exception ex)
            {
                TaskDialog.Show("错误", ex.Message);
            }
        }
 
        private void DataGrid_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            try
            {
                DataGrid dataGrid = sender as DataGrid;
                var selectCells = dataGrid.SelectedCells;
 
                string ids = (selectCells[0].Item as ElementModel).连接构件;
                var idArray = ids.Split(',');
                var idList = idArray.Select(x => new ElementId(int.Parse(x)))?.ToList();
                GlobalResource.CurrentUIDocument.Selection.SetElementIds(idList);
 
            }
            catch (Exception ex)
            {
                TaskDialog.Show("错误", ex.Message);
            }
        }
 
        private void CreateRows(DataGrid dataGrid, RevitType revitType)
        {
            var models = RevitMepElementService.GetElementModels(revitType);
            WpfBindingUtils.Binding2(dataGrid, revitType, models);
            //WpfBindingUtils.Binding(dataGrid, revitType, models);
        }
 
        public void SetupDockablePane(DockablePaneProviderData data)
        {
            data.FrameworkElement = this;
            data.InitialState = new DockablePaneState
            {
                DockPosition = DockPosition.Bottom,
                MinimumHeight = 200
            };
        }
 
        private void reflesh_Click(object sender, RoutedEventArgs e)
        {
            DocumentUtil.AddUnhandledElements();
            UpdateForm();
        }
 
        public void UpdateForm()
        {
            InitializeControlsData();
        }
    }
}