From e358beb08f5be49703009b64f058ecfbcfeefbd9 Mon Sep 17 00:00:00 2001
From: qin <a@163.com>
Date: 星期六, 28 九月 2024 14:27:52 +0800
Subject: [PATCH] 测试standard2.1

---
 HStation.RevitDev/RevitDataExport/Forms/Form_SystemSelect.cs |  951 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 476 insertions(+), 475 deletions(-)

diff --git a/HStation.RevitDev/RevitDataExport/Forms/Form_SystemSelect.cs b/HStation.RevitDev/RevitDataExport/Forms/Form_SystemSelect.cs
index 7a0ae05..1216e44 100644
--- a/HStation.RevitDev/RevitDataExport/Forms/Form_SystemSelect.cs
+++ b/HStation.RevitDev/RevitDataExport/Forms/Form_SystemSelect.cs
@@ -1,477 +1,478 @@
-锘縰sing Autodesk.Revit.DB;
-using Autodesk.Revit.DB.Plumbing;
-using Autodesk.Revit.UI;
-using Glodon.Revit.Utility;
-using Hydro.Core.Model;
-using Hydro.Revit;
-using Hydro.Revit.Model;
-using HStation.RevitDev.RevitDataExport.Common;
-using HStation.RevitDev.RevitDataExport.Service;
-using HStation.RevitDev.RevitDataExport.Utility;
-using HStation.RevitDev.RevitDataExport.Common;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
-using System.Windows.Controls;
-using System.Windows.Forms;
-using static Hydro.Core.ObjectEnum;
-
-namespace HStation.RevitDev.RevitDataExport.Forms
-{
-    public partial class Form_SystemSelect : System.Windows.Forms.Form
-    {
-        private UIDocument _uiDocument;
-        private Document _doc;
-        private ExternalCommandData _data;
-        private ItemCheckEventArgs _itemCheck;
-        public RevitNetWork _revitNetWork;
-
-        public Form_SystemSelect(ExternalCommandData data)
-        {
-            _data = data;
-            _uiDocument = data.Application.ActiveUIDocument;
-            _doc = _uiDocument.Document;
-            InitializeComponent();
-        }
-
-        private void SystemSelect_Load(object sender, System.EventArgs e)
-        {
-            InitControlsData();
-        }
-
-        private void InitControlsData()
-        {
-            InitMepSystemComboBox();
-            InitMepSystemCheckListBox();
-            InitDataGridViewStyle();
-            InitDataGridViewEvent();
-        }
-
-        private void InitMepSystemCheckListBox()
-        {
-            this.checkedListBox_systemType.Items.Clear();
-            var systemTypes = RevitMepSystemService.GetSystemTypeList(_doc).ToList();
-            systemTypes = systemTypes.FindAll(x => x.GetDependentElements(new ElementClassFilter(typeof(PipingSystem), false)).Count != 0);
-            if (systemTypes != null && systemTypes.Count > 0)
-            {
-                this.checkedListBox_systemType.DataSource = systemTypes;
-                this.checkedListBox_systemType.DisplayMember = "Name";
-                this.checkedListBox_systemType.SelectedIndex = 0;
-            }
-            this.checkedListBox_systemType.SelectedIndex = -1;
-        }
-
-        private void InitDataGridViewStyle()
-        {
-            var pages = this.pageContainer.TabPages;
-            foreach (TabPage page in pages)
-            {
-                foreach (var subControl in page.Controls)
-                {
-                    if (subControl is DataGridView dgv)
-                    {
-                        dgv.AllowUserToResizeRows = false;
-                    }
-                }
-            }
-        }
-
-        private void InitDataGridViewEvent()
-        {
-            var dgvs = new List<DataGridView>();
-            var pages = this.pageContainer.TabPages;
-            foreach (TabPage page in pages)
-            {
-                foreach (var subControl in page.Controls)
-                {
-                    if (subControl is DataGridView dgv)
-                    {
-                        dgvs.Add(dgv);
-                        dgv.CellClick += Dgv_CellClick;
-                        //dgv.CellContentDoubleClick += Dgv_DoubleCellClick;
-                    }
-                }
-            }
-        }
-
-        private void Dgv_DoubleCellClick(object sender, DataGridViewCellEventArgs e)
-        {
-            var dgv = sender as DataGridView;
-            var rowIndex = e.RowIndex;
-            var columnIndex = e.ColumnIndex;
-            var cell = dgv[columnIndex, rowIndex];
-
-            if (cell.Value == null) { return; }
-            var view = Set3DView();
-            if (view == null) { return; }
-
-            var cellText = cell.Value.ToString();
-            if (dgv.Columns[columnIndex].HeaderText == "ID" ||
-                dgv.Columns[columnIndex].HeaderText.Contains("杩炴帴鐐�"))
-            {
-                var idContent = cellText.Split(':')?.Last();
-                if (string.IsNullOrEmpty(idContent)) { return; }
-                if (int.TryParse(idContent, out int id))
-                {
-                    var elementId = new ElementId(id);
-                    var ids = new List<ElementId> { elementId };
-                    view.Select(_uiDocument, ids);
-                    view.OnlyShow(ids);
-                    view.Zoom(_uiDocument, ids);
-                }
-            }
-        }
-
-        private void Dgv_CellClick(object sender, DataGridViewCellEventArgs e)
-        {
-            var dgv = sender as DataGridView;
-            var rowIndex = e.RowIndex;
-            var columnIndex = e.ColumnIndex;
-            var cell = dgv[columnIndex, rowIndex];
-
-            if (cell.Value == null) { return; }
+锘縰sing Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Plumbing;
+using Autodesk.Revit.UI;
+using Glodon.Revit.Utility;
+using Hydro.Core.Model;
+using Hydro.Revit;
+using Hydro.Revit.Model;
+using HStation.RevitDev.RevitDataExport.Common;
+using HStation.RevitDev.RevitDataExport.Service;
+using HStation.RevitDev.RevitDataExport.Utility;
+using HStation.RevitDev.RevitDataExport.Common;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+using System.Windows.Forms;
+using static Hydro.Core.ObjectEnum;
+using Hydro.CommonBase;
+
+namespace HStation.RevitDev.RevitDataExport.Forms
+{
+    public partial class Form_SystemSelect : System.Windows.Forms.Form
+    {
+        private UIDocument _uiDocument;
+        private Document _doc;
+        private ExternalCommandData _data;
+        private ItemCheckEventArgs _itemCheck;
+        public RevitNetWork _revitNetWork;
+
+        public Form_SystemSelect(ExternalCommandData data)
+        {
+            _data = data;
+            _uiDocument = data.Application.ActiveUIDocument;
+            _doc = _uiDocument.Document;
+            InitializeComponent();
+        }
+
+        private void SystemSelect_Load(object sender, System.EventArgs e)
+        {
+            InitControlsData();
+        }
+
+        private void InitControlsData()
+        {
+            InitMepSystemComboBox();
+            InitMepSystemCheckListBox();
+            InitDataGridViewStyle();
+            InitDataGridViewEvent();
+        }
+
+        private void InitMepSystemCheckListBox()
+        {
+            this.checkedListBox_systemType.Items.Clear();
+            var systemTypes = RevitMepSystemService.GetSystemTypeList(_doc).ToList();
+            systemTypes = systemTypes.FindAll(x => x.GetDependentElements(new ElementClassFilter(typeof(PipingSystem), false)).Count != 0);
+            if (systemTypes != null && systemTypes.Count > 0)
+            {
+                this.checkedListBox_systemType.DataSource = systemTypes;
+                this.checkedListBox_systemType.DisplayMember = "Name";
+                this.checkedListBox_systemType.SelectedIndex = 0;
+            }
+            this.checkedListBox_systemType.SelectedIndex = -1;
+        }
+
+        private void InitDataGridViewStyle()
+        {
+            var pages = this.pageContainer.TabPages;
+            foreach (TabPage page in pages)
+            {
+                foreach (var subControl in page.Controls)
+                {
+                    if (subControl is DataGridView dgv)
+                    {
+                        dgv.AllowUserToResizeRows = false;
+                    }
+                }
+            }
+        }
+
+        private void InitDataGridViewEvent()
+        {
+            var dgvs = new List<DataGridView>();
+            var pages = this.pageContainer.TabPages;
+            foreach (TabPage page in pages)
+            {
+                foreach (var subControl in page.Controls)
+                {
+                    if (subControl is DataGridView dgv)
+                    {
+                        dgvs.Add(dgv);
+                        dgv.CellClick += Dgv_CellClick;
+                        //dgv.CellContentDoubleClick += Dgv_DoubleCellClick;
+                    }
+                }
+            }
+        }
+
+        private void Dgv_DoubleCellClick(object sender, DataGridViewCellEventArgs e)
+        {
+            var dgv = sender as DataGridView;
+            var rowIndex = e.RowIndex;
+            var columnIndex = e.ColumnIndex;
+            var cell = dgv[columnIndex, rowIndex];
+
+            if (cell.Value == null) { return; }
             var view = Set3DView();
-            if (view == null) { return; }
-
-
-            var cellText = cell.Value.ToString();
-            if (dgv.Columns[columnIndex].HeaderText == "ID" ||
-                dgv.Columns[columnIndex].HeaderText.Contains("杩炴帴鐐�"))
-            {
-                var idContent = cellText.Split(':')?.Last();
-                if (string.IsNullOrEmpty(idContent)) { return; }
-                if (int.TryParse(idContent, out int id))
-                {
-                    var elementId = new ElementId(id);
-                    var ids = new List<ElementId> { elementId };
-                    view.Select(_uiDocument, ids);
-                }
-            }
-        }
-
-        private void InitMepSystemComboBox()
-        {
-            //this.comboBox1.Items.Clear();
-            //var systems = RevitMepSystemService.GetSystemList(_doc).ToList();
-            //systems = systems.FindAll(x => x is PipingSystem);
-            //if (systems != null && systems.Count > 0)
-            //{
-            //    this.comboBox1.DataSource = systems;
-            //    this.comboBox1.DisplayMember = "Name";
-            //    this.comboBox1.SelectedIndex = 0;
-            //}
-            //this.comboBox1.SelectedIndex = -1;
-        }
-
-        private View3D Set3DView()
-        {
-            var view3d = ViewHelper.Get3dView(_doc);
-            if (view3d == null) { return null; }
-            _uiDocument.ActiveView = view3d;
-            return view3d;
-        }
-
-        private List<Tuple<string, string>> PostProcessing(Dictionary<string, List<Element>> groupElems, List<Tuple<string, string>> properties)
-        {
-            var result = new List<Tuple<string, string>>();
-            foreach (var prop in properties)
-            {
-                if (!prop.Item1.Contains("杩炴帴鐐�"))
-                {
-                    result.Add(prop);
-                    continue;
-                }
-                bool findGroupName = false;
-                foreach (var group in groupElems)
-                {
-                    if (group.Value.Any(x => x.Id.IntegerValue.ToString() == prop.Item2))
-                    {
-                        result.Add(new Tuple<string, string>(prop.Item1, /*group.Key + ":" +*/ prop.Item2));
-                        findGroupName = true;
-                        break;
-                    }
-                }
-                if (!findGroupName)
-                {
-                    result.Add(new Tuple<string, string>(prop.Item1, prop.Item2));
-                }
-            }
-
-            return result;
-        }
-
-        private void FillRow(DataGridView dgv, List<Tuple<string, string>> properties, ref int elemIndex)
-        {
-            properties.Insert(0, new Tuple<string, string>("搴忓彿", (++elemIndex).ToString()));
-            var newRowIndex = dgv.Rows.Add();
-            for (var i = 0; i < dgv.ColumnCount; i++)
-            {
-                var cell = dgv.Rows[newRowIndex].Cells[i];
-                var hd = dgv.Columns[cell.ColumnIndex].HeaderText;
-                var p = properties.Where(c => c.Item1.Equals(hd)).FirstOrDefault();
-                if (p != null)
-                {
-                    cell.Value = p.Item2?.ToString();
-                }
-            }
-        }
-
-
-        private void FillDataGridView(Dictionary<string, List<Element>> groupElems)
-        {
-            foreach (TabPage page in this.pageContainer.TabPages)
-            //for (var i = 0; i < this.pageContainer.TabPages.Count - 1; i++)
-            {
-                var t = new Task(() =>
-                 {
-                     //var page = this.pageContainer.TabPages[i];
-
-                     string str = "";
-
-                     Stopwatch sw = Stopwatch.StartNew();
-                     sw.Restart();
-                     var pageTitle = page.Text;
-                     var dgv = page.Controls[0] as DataGridView;
-                     dgv.Rows.Clear();
-                     if (groupElems.ContainsKey(pageTitle))
-                     {
-                         //continue;
-                         var elems = groupElems[pageTitle];
-                         var parser = ParserManager.Instance.GetParser(pageTitle);
-                         var elemIndex = 0;
-                         foreach (var element in elems)
-                         {
-                             List<Tuple<string, string>> properties = parser.PropertyParse(element);
-                             var newProps = PostProcessing(groupElems, properties);
-                             FillRow(dgv, newProps, ref elemIndex);
-                         }
-                         sw.Stop();
-                         str += pageTitle + " 鏁版嵁鍔犺浇鑰楁椂锛�" + sw.Elapsed.TotalSeconds + " 绉掞紝鏁伴噺锛�" + elems.Count + "锛屾椂闂达細" + DateTime.Now.ToString();
-                         textBox1.Text += str;
-                     }
-
-                 });
-                t.Start();
-
-            }
-        }
-
-
-        private void button1_Click2(object sender, EventArgs e)
-        {
-            var excelFolder = DialogHelper.UserSelectFolderPath();
-            if (string.IsNullOrEmpty(excelFolder)) { return; }
-            var excelPath = Path.Combine(excelFolder, $@"绠¢亾绯荤粺鏁版嵁.xlsx");
-
-            ExcelHelper excelHelper = new ExcelHelper();
-            var indexes = new List<int>();
-            var items = this.checkedListBox_systemType.CheckedIndices;
-            for (int i = 0; i < items.Count; i++)
-            {
-                int index = items[i];
-                indexes.Add(index);
-            }
-            Dictionary<string, List<Element>> dict = GetGroupElements(indexes);
-
-
-            foreach (TabPage page in this.pageContainer.TabPages)
-            {
-                var pageTitle = page.Text;
-                if (!dict.ContainsKey(pageTitle))
-                {
-                    continue;
-                }
-                var elems = dict[pageTitle];
-                var parser = ParserManager.Instance.GetParser(pageTitle);
-
-                excelHelper.SetCurrentSheet(pageTitle);
-
-                for (int i = 1; i <= elems.Count; i++)
-                {
-                    var element = elems[i - 1];
-                    List<Tuple<string, string>> properties = parser.PropertyParse(element);
-                    var newProps = PostProcessing(dict, properties);
-                    if (i == 1)//鍏堝啓琛ㄥご
-                    {
-                        var headers = newProps.Select(x => x.Item1).ToList();
-                        for (int j = 1; j <= headers.Count; j++)
-                        {
-                            excelHelper.Write(i, j, headers[j - 1]);
-                        }
-                    }
-                    var contents = newProps.Select(x => x.Item2).ToList();
-                    for (int j = 1; j <= contents.Count; j++)
-                    {
-                        excelHelper.Write(i + 1, j, contents[j - 1]);
-                    }
-                }
-            }
-
-            excelHelper.SaveAs(excelPath);
-            MessageBox.Show("瀵煎嚭瀹屾垚锛�");
-        }
-
-        private void checkedListBox_systemType_ItemCheck(object sender, ItemCheckEventArgs e)
-        {
-            this._itemCheck = e;
-            //SetCheckIndexs();
-        }
-
-        public void SetCheckIndexs()
-        {
-            Stopwatch stopwatch = new Stopwatch();
-            stopwatch.Start();
-            textBox1.Text += "寮�濮嬫椂闂达細" + DateTime.Now.ToString();
-            List<int> indexes = GetCheckedIndexes(this._itemCheck);
-            Dictionary<string, List<Element>> dict = GetGroupElements(indexes);
-            var elemIds = dict.Values.SelectMany(x => x).Select(y => y.Id).ToList();
+            if (view == null) { return; }
+
+            var cellText = cell.Value.ToString();
+            if (dgv.Columns[columnIndex].HeaderText == "ID" ||
+                dgv.Columns[columnIndex].HeaderText.Contains("杩炴帴鐐�"))
+            {
+                var idContent = cellText.Split(':')?.Last();
+                if (string.IsNullOrEmpty(idContent)) { return; }
+                if (int.TryParse(idContent, out int id))
+                {
+                    var elementId = new ElementId(id);
+                    var ids = new List<ElementId> { elementId };
+                    view.Select(_uiDocument, ids);
+                    view.OnlyShow(ids);
+                    view.Zoom(_uiDocument, ids);
+                }
+            }
+        }
+
+        private void Dgv_CellClick(object sender, DataGridViewCellEventArgs e)
+        {
+            var dgv = sender as DataGridView;
+            var rowIndex = e.RowIndex;
+            var columnIndex = e.ColumnIndex;
+            var cell = dgv[columnIndex, rowIndex];
+
+            if (cell.Value == null) { return; }
             var view = Set3DView();
-            if (view == null) { return; }
-
-            if (elemIds.Count != 0)
-            {
-                view.OnlyShow(elemIds);
-                view.Zoom(_uiDocument, elemIds);
-            }
-            stopwatch.Stop();
-            textBox1.Text += "锛岃幏鍙栨墍鏈夋瀯浠惰�楁椂锛�" + stopwatch.Elapsed.TotalSeconds + "绉掞紝鏃堕棿锛�" + DateTime.Now.ToString();
-            //stopwatch.Restart();
-            FillDataGridView(dict);
-        }
-
-        private List<int> GetCheckedIndexes(ItemCheckEventArgs e)
-        {
-            var indexes = new List<int>();
-            var items = this.checkedListBox_systemType.CheckedIndices;
-            for (int i = 0; i < items.Count; i++)
-            {
-                int index = items[i];
-                indexes.Add(index);
-            }
-            //if (e.NewValue == CheckState.Checked)
-            //{
-            //    indexes.Add(e.Index);
-            //}
-            //else
-            //{
-            //    if (indexes.Contains(e.Index))
-            //    {
-            //        indexes.Remove(e.Index);
-            //    }
-            //}
-
-            return indexes;
-        }
-
-
-        private void SetProp(int eleId, string propName, string propValue)
-        {
-            var eid = new ElementId(eleId);
-            var ele = _doc.GetElement(eid);
-            if (ele == null) { return; }
-
-            var prop = ele.LookupParameter(propName);
-            if (propName.Equals("娴侀噺"))
-                propValue = Math.Abs(decimal.Parse(propValue)).ToString();
-            if (prop != null && !prop.IsReadOnly && prop.StorageType == StorageType.String)
-            {
-                prop.Set(propValue);
-            }
-
-        }
-
-        private Dictionary<string, List<Element>> GetGroupElements(List<int> indexes)
-        {
-            Dictionary<string, List<Element>> dict = new Dictionary<string, List<Element>>();
-            foreach (var index in indexes)
-            {
-                var systemType = checkedListBox_systemType.Items[index] as PipingSystemType;
-                var typeName = systemType.Name;
-                var elems = RevitMepElementService.GetElements(_doc, typeName);
-                var subDict = RevitMepCategoryService.GroupElements(elems);
-                foreach (var pairs in subDict)
-                {
-                    if (!dict.ContainsKey(pairs.Key))
-                    {
-                        dict.Add(pairs.Key, new List<Element>());
-                    }
-                    dict[pairs.Key].AddRange(pairs.Value);
-                }
-            }
-
-            return dict;
-        }
-
-        public CheckModel GetNetWrok()
-        {
-            this._revitNetWork = NetWorkHelper.GetModelList(this.pageContainer);
-            this._revitNetWork.BuildToInp(inpPath);
-            return NetWorkHelper.Check(this._revitNetWork);
-        }
-        private string inpPath = "d:\\revitinp.inp";
-        private void button2_Click(object sender, EventArgs e)
-        {
-           
-            //SetProp(577273, "鏍囪", "娉ㄩ噴娴嬭瘯");
-            ////var json = JsonHelper.ToJson(list);
-            var result = GetNetWrok();
-            //nw.BuildToInp(inpPath);
-
-            if (result.Result)
-            {
-                if (MessageBox.Show("鏍¢獙閫氳繃锛屾槸鍚︽墽琛岃绠楋紵", "鏍¢獙缁撴灉", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
-                {
-                    var r = this._revitNetWork.Calc(inpPath);
-                    SetEleProp(r);
-                    var json = JsonHelper.ToJson(r);
-                    JsonHelper.WriteJson("d:\\revittest.json", json);
-                    MessageBox.Show("璁$畻鎴愬姛!");
-                }
-            }
-            else
-            {
-                var form = new Form_CheckResult(result, this.pageContainer, _data, this);
-                var revitHandle = Process.GetCurrentProcess().MainWindowHandle;
-                form.Show(new WindowHandle(revitHandle));
-            }
-
-        }
-
-        private void SetEleProp(List<TimePoint> eleProp)
-        {
-            //Transaction trans = new Transaction(_doc, "淇敼鍙傛暟");
-            //trans.Start();
-            eleProp.ForEach(d =>
-            {
-                var id = int.Parse(d.Key.Split('_')[0]);
-                var prop = d.Key.Split('_')[1];
-                var vu = d.Value.ToString();
-                SetProp(id, prop, vu);
-            });
-            //trans.Commit();
-        }
-
-        public void Test()
-        {
-            MessageBox.Show("OK");
-        }
-
-        private void button5_Click(object sender, EventArgs e)
-        {
-            SetCheckIndexs();
-        }
-
-        private void button6_Click(object sender, EventArgs e)
-        {
-            //var refernce = _uiDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
-            var pipe1 = _doc.GetElement(new ElementId(714683)) as MEPCurve;
-
-            //var refernce2 = _uiDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
-            var pipe2 = _doc.GetElement(new ElementId(732605)) as MEPCurve;
-            JoinGeometryUtils.JoinGeometry(_doc, pipe1, pipe2);
-        }
-    }
-}
+            if (view == null) { return; }
+
+
+            var cellText = cell.Value.ToString();
+            if (dgv.Columns[columnIndex].HeaderText == "ID" ||
+                dgv.Columns[columnIndex].HeaderText.Contains("杩炴帴鐐�"))
+            {
+                var idContent = cellText.Split(':')?.Last();
+                if (string.IsNullOrEmpty(idContent)) { return; }
+                if (int.TryParse(idContent, out int id))
+                {
+                    var elementId = new ElementId(id);
+                    var ids = new List<ElementId> { elementId };
+                    view.Select(_uiDocument, ids);
+                }
+            }
+        }
+
+        private void InitMepSystemComboBox()
+        {
+            //this.comboBox1.Items.Clear();
+            //var systems = RevitMepSystemService.GetSystemList(_doc).ToList();
+            //systems = systems.FindAll(x => x is PipingSystem);
+            //if (systems != null && systems.Count > 0)
+            //{
+            //    this.comboBox1.DataSource = systems;
+            //    this.comboBox1.DisplayMember = "Name";
+            //    this.comboBox1.SelectedIndex = 0;
+            //}
+            //this.comboBox1.SelectedIndex = -1;
+        }
+
+        private View3D Set3DView()
+        {
+            var view3d = ViewHelper.Get3dView(_doc);
+            if (view3d == null) { return null; }
+            _uiDocument.ActiveView = view3d;
+            return view3d;
+        }
+
+        private List<Tuple<string, string>> PostProcessing(Dictionary<string, List<Element>> groupElems, List<Tuple<string, string>> properties)
+        {
+            var result = new List<Tuple<string, string>>();
+            foreach (var prop in properties)
+            {
+                if (!prop.Item1.Contains("杩炴帴鐐�"))
+                {
+                    result.Add(prop);
+                    continue;
+                }
+                bool findGroupName = false;
+                foreach (var group in groupElems)
+                {
+                    if (group.Value.Any(x => x.Id.IntegerValue.ToString() == prop.Item2))
+                    {
+                        result.Add(new Tuple<string, string>(prop.Item1, /*group.Key + ":" +*/ prop.Item2));
+                        findGroupName = true;
+                        break;
+                    }
+                }
+                if (!findGroupName)
+                {
+                    result.Add(new Tuple<string, string>(prop.Item1, prop.Item2));
+                }
+            }
+
+            return result;
+        }
+
+        private void FillRow(DataGridView dgv, List<Tuple<string, string>> properties, ref int elemIndex)
+        {
+            properties.Insert(0, new Tuple<string, string>("搴忓彿", (++elemIndex).ToString()));
+            var newRowIndex = dgv.Rows.Add();
+            for (var i = 0; i < dgv.ColumnCount; i++)
+            {
+                var cell = dgv.Rows[newRowIndex].Cells[i];
+                var hd = dgv.Columns[cell.ColumnIndex].HeaderText;
+                var p = properties.Where(c => c.Item1.Equals(hd)).FirstOrDefault();
+                if (p != null)
+                {
+                    cell.Value = p.Item2?.ToString();
+                }
+            }
+        }
+
+
+        private void FillDataGridView(Dictionary<string, List<Element>> groupElems)
+        {
+            foreach (TabPage page in this.pageContainer.TabPages)
+            //for (var i = 0; i < this.pageContainer.TabPages.Count - 1; i++)
+            {
+                //var t = new Task(() =>
+                // {
+                     //var page = this.pageContainer.TabPages[i];
+
+                     string str = "";
+
+                     Stopwatch sw = Stopwatch.StartNew();
+                     sw.Restart();
+                     var pageTitle = page.Text;
+                     var dgv = page.Controls[0] as DataGridView;
+                     dgv.Rows.Clear();
+                     if (groupElems.ContainsKey(pageTitle))
+                     {
+                         //continue;
+                         var elems = groupElems[pageTitle];
+                         var parser = ParserManager.Instance.GetParser(pageTitle);
+                         var elemIndex = 0;
+                         foreach (var element in elems)
+                         {
+                             List<Tuple<string, string>> properties = parser.PropertyParse(element);
+                             var newProps = PostProcessing(groupElems, properties);
+                             FillRow(dgv, newProps, ref elemIndex);
+                         }
+                         sw.Stop();
+                         str += pageTitle + " 鏁版嵁鍔犺浇鑰楁椂锛�" + sw.Elapsed.TotalSeconds + " 绉掞紝鏁伴噺锛�" + elems.Count + "锛屾椂闂达細" + DateTime.Now.ToString();
+                         textBox1.Text += str;
+                     }
+
+                // });
+                //t.Start();
+
+            }
+        }
+
+
+        private void button1_Click2(object sender, EventArgs e)
+        {
+            var excelFolder = DialogHelper.UserSelectFolderPath();
+            if (string.IsNullOrEmpty(excelFolder)) { return; }
+            var excelPath = Path.Combine(excelFolder, $@"绠¢亾绯荤粺鏁版嵁.xlsx");
+
+            ExcelHelper excelHelper = new ExcelHelper();
+            var indexes = new List<int>();
+            var items = this.checkedListBox_systemType.CheckedIndices;
+            for (int i = 0; i < items.Count; i++)
+            {
+                int index = items[i];
+                indexes.Add(index);
+            }
+            Dictionary<string, List<Element>> dict = GetGroupElements(indexes);
+
+
+            foreach (TabPage page in this.pageContainer.TabPages)
+            {
+                var pageTitle = page.Text;
+                if (!dict.ContainsKey(pageTitle))
+                {
+                    continue;
+                }
+                var elems = dict[pageTitle];
+                var parser = ParserManager.Instance.GetParser(pageTitle);
+
+                excelHelper.SetCurrentSheet(pageTitle);
+
+                for (int i = 1; i <= elems.Count; i++)
+                {
+                    var element = elems[i - 1];
+                    List<Tuple<string, string>> properties = parser.PropertyParse(element);
+                    var newProps = PostProcessing(dict, properties);
+                    if (i == 1)//鍏堝啓琛ㄥご
+                    {
+                        var headers = newProps.Select(x => x.Item1).ToList();
+                        for (int j = 1; j <= headers.Count; j++)
+                        {
+                            excelHelper.Write(i, j, headers[j - 1]);
+                        }
+                    }
+                    var contents = newProps.Select(x => x.Item2).ToList();
+                    for (int j = 1; j <= contents.Count; j++)
+                    {
+                        excelHelper.Write(i + 1, j, contents[j - 1]);
+                    }
+                }
+            }
+
+            excelHelper.SaveAs(excelPath);
+            MessageBox.Show("瀵煎嚭瀹屾垚锛�");
+        }
+
+        private void checkedListBox_systemType_ItemCheck(object sender, ItemCheckEventArgs e)
+        {
+            this._itemCheck = e;
+            //SetCheckIndexs();
+        }
+
+        public void SetCheckIndexs()
+        {
+            Stopwatch stopwatch = new Stopwatch();
+            stopwatch.Start();
+            textBox1.Text += "寮�濮嬫椂闂达細" + DateTime.Now.ToString();
+            List<int> indexes = GetCheckedIndexes(this._itemCheck);
+            Dictionary<string, List<Element>> dict = GetGroupElements(indexes);
+            var elemIds = dict.Values.SelectMany(x => x).Select(y => y.Id).ToList();
+            var view = Set3DView();
+            if (view == null) { return; }
+
+            if (elemIds.Count != 0)
+            {
+                view.OnlyShow(elemIds);
+                view.Zoom(_uiDocument, elemIds);
+            }
+            stopwatch.Stop();
+            textBox1.Text += "锛岃幏鍙栨墍鏈夋瀯浠惰�楁椂锛�" + stopwatch.Elapsed.TotalSeconds + "绉掞紝鏃堕棿锛�" + DateTime.Now.ToString();
+            //stopwatch.Restart();
+            FillDataGridView(dict);
+        }
+
+        private List<int> GetCheckedIndexes(ItemCheckEventArgs e)
+        {
+            var indexes = new List<int>();
+            var items = this.checkedListBox_systemType.CheckedIndices;
+            for (int i = 0; i < items.Count; i++)
+            {
+                int index = items[i];
+                indexes.Add(index);
+            }
+            //if (e.NewValue == CheckState.Checked)
+            //{
+            //    indexes.Add(e.Index);
+            //}
+            //else
+            //{
+            //    if (indexes.Contains(e.Index))
+            //    {
+            //        indexes.Remove(e.Index);
+            //    }
+            //}
+
+            return indexes;
+        }
+
+
+        private void SetProp(int eleId, string propName, string propValue)
+        {
+            var eid = new ElementId(eleId);
+            var ele = _doc.GetElement(eid);
+            if (ele == null) { return; }
+
+            var prop = ele.LookupParameter(propName);
+            if (propName.Equals("娴侀噺"))
+                propValue = Math.Abs(decimal.Parse(propValue)).ToString();
+            if (prop != null && !prop.IsReadOnly && prop.StorageType == StorageType.String)
+            {
+                prop.Set(propValue);
+            }
+
+        }
+
+        private Dictionary<string, List<Element>> GetGroupElements(List<int> indexes)
+        {
+            Dictionary<string, List<Element>> dict = new Dictionary<string, List<Element>>();
+            foreach (var index in indexes)
+            {
+                var systemType = checkedListBox_systemType.Items[index] as PipingSystemType;
+                var typeName = systemType.Name;
+                var elems = RevitMepElementService.GetElements(_doc, typeName);
+                var subDict = RevitMepCategoryService.GroupElements(elems);
+                foreach (var pairs in subDict)
+                {
+                    if (!dict.ContainsKey(pairs.Key))
+                    {
+                        dict.Add(pairs.Key, new List<Element>());
+                    }
+                    dict[pairs.Key].AddRange(pairs.Value);
+                }
+            }
+
+            return dict;
+        }
+
+        public CheckModel GetNetWrok()
+        {
+            this._revitNetWork = NetWorkHelper.GetModelList(this.pageContainer);
+            this._revitNetWork.BuildToInp(inpPath);
+            return NetWorkHelper.Check(this._revitNetWork);
+        }
+        private string inpPath = "d:\\revitinp.inp";
+        private void button2_Click(object sender, EventArgs e)
+        {
+           
+            //SetProp(577273, "鏍囪", "娉ㄩ噴娴嬭瘯");
+            ////var json = JsonHelper.ToJson(list);
+            var result = GetNetWrok();
+            //nw.BuildToInp(inpPath);
+
+            if (result.Result)
+            {
+                if (MessageBox.Show("鏍¢獙閫氳繃锛屾槸鍚︽墽琛岃绠楋紵", "鏍¢獙缁撴灉", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
+                {
+                    var r = this._revitNetWork.Calc(inpPath);
+                    SetEleProp(r);
+                    var json = JsonHelper.ToJson(r);
+                    JsonHelper.WriteJson("d:\\revittest.json", json);
+                    MessageBox.Show("璁$畻鎴愬姛!");
+                }
+            }
+            else
+            {
+                var form = new Form_CheckResult(result, this.pageContainer, _data, this);
+                var revitHandle = Process.GetCurrentProcess().MainWindowHandle;
+                form.Show(new WindowHandle(revitHandle));
+            }
+
+        }
+
+        private void SetEleProp(List<TimePoint> eleProp)
+        {
+            //Transaction trans = new Transaction(_doc, "淇敼鍙傛暟");
+            //trans.Start();
+            eleProp.ForEach(d =>
+            {
+                var id = int.Parse(d.Key.Split('_')[0]);
+                var prop = d.Key.Split('_')[1];
+                var vu = d.Value.ToString();
+                SetProp(id, prop, vu);
+            });
+            //trans.Commit();
+        }
+
+        public void Test()
+        {
+            MessageBox.Show("OK");
+        }
+
+        private void button5_Click(object sender, EventArgs e)
+        {
+            SetCheckIndexs();
+        }
+
+        private void button6_Click(object sender, EventArgs e)
+        {
+            //var refernce = _uiDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
+            var pipe1 = _doc.GetElement(new ElementId(714683)) as MEPCurve;
+
+            //var refernce2 = _uiDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
+            var pipe2 = _doc.GetElement(new ElementId(732605)) as MEPCurve;
+            JoinGeometryUtils.JoinGeometry(_doc, pipe1, pipe2);
+        }
+    }
+}

--
Gitblit v1.9.3