| | |
| | | using 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(); |
| | | |
| | | 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(); |
| | | |
| | | 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); |
| | | _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 (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); |
| | | } |
| | | } |
| | | } |
| | | using 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);
|
| | | 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; }
|
| | |
|
| | |
|
| | | 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);
|
| | | }
|
| | | }
|
| | | }
|