Files
CDMUtility/CivilModelCreator/ProcessEventHandler.cs

248 lines
10 KiB
C#
Raw Normal View History

2026-02-23 14:35:54 +08:00
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace CivilModelCreator
{
internal class ProcessEventHandler : IExternalEventHandler
{
public ProgressMonitorView CurrentUI { get; set; }
public ProgressMonitorControl CurrentControl { get; set; }
private bool Cancel = false;
public List<CDMData> CdmData { get; set; }
public string Path { get; set; }
private delegate void ProgressBarDelegate();
public void Execute(UIApplication app)
{
if (app == null)
{
CloseWindow();
return;
}
if (app.ActiveUIDocument == null || app.ActiveUIDocument.Document == null || CdmData == null || CurrentUI == null || CurrentControl == null || Path == null)
return;
CurrentUI.btnCancel.Click += CurrentUI_Closed;
for (CurrentControl.CurrentValue = 0; CurrentControl.CurrentValue < CurrentControl.MaxValue; ++CurrentControl.CurrentValue)
{
int index = Convert.ToInt16(CurrentControl.CurrentValue);
if (Cancel)
break;
System.Threading.Thread.Sleep(10);
#region
try
{
CDMtoExcel(CdmData[index]);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
//CloseWindow();
return;
}
#endregion
CurrentControl.CurrentContext = string.Format("进度已完成 {0} of {1} ", CurrentControl.CurrentValue, CurrentControl.MaxValue);
CurrentUI.Dispatcher.Invoke(new ProgressBarDelegate(CurrentControl.NotifyUI), System.Windows.Threading.DispatcherPriority.Background);
}
CloseWindow();
}
private void CDMtoExcel(CDMData cdm)
{
XSSFWorkbook workbook = new XSSFWorkbook();
ISheet firstSheet = workbook.CreateSheet("CDM数据表");
#region
firstSheet.CreateRow(0);
firstSheet.GetRow(0).CreateCell(0);
firstSheet.GetRow(0).CreateCell(1);
firstSheet.GetRow(0).CreateCell(2);
firstSheet.GetRow(0).GetCell(0).SetCellValue("HcdmClass");
firstSheet.GetRow(0).GetCell(1).SetCellValue(cdm.Category + "CDM专用标准");
firstSheet.GetRow(0).GetCell(2).SetCellValue(cdm.HcdmClass);
firstSheet.CreateRow(1);
firstSheet.GetRow(1).CreateCell(0);
firstSheet.GetRow(1).CreateCell(1);
firstSheet.GetRow(1).GetCell(0).SetCellValue("构件名称");
firstSheet.GetRow(1).GetCell(1).SetCellValue(cdm.Category);
firstSheet.CreateRow(2);
firstSheet.GetRow(2).CreateCell(0);
firstSheet.GetRow(2).CreateCell(1);
firstSheet.GetRow(2).CreateCell(2);
firstSheet.GetRow(2).GetCell(0).SetCellValue("HcdmClass");
firstSheet.GetRow(2).GetCell(1).SetCellValue("XXXXX(自动生成)");
firstSheet.GetRow(2).GetCell(2).SetCellValue(cdm.HcdmNumber);
firstSheet.CreateRow(4);
firstSheet.GetRow(4).CreateCell(0);
firstSheet.GetRow(4).CreateCell(1);
firstSheet.GetRow(4).CreateCell(2);
firstSheet.GetRow(4).CreateCell(3);
firstSheet.GetRow(4).CreateCell(4);
firstSheet.GetRow(4).GetCell(0).SetCellValue("字段编码");
firstSheet.GetRow(4).GetCell(1).SetCellValue("字段名称");
firstSheet.GetRow(4).GetCell(2).SetCellValue("单位");
firstSheet.GetRow(4).GetCell(3).SetCellValue("备注");
firstSheet.GetRow(4).GetCell(4).SetCellValue("字段值");
firstSheet.CreateRow(5);
firstSheet.GetRow(5).CreateCell(0);
firstSheet.GetRow(5).CreateCell(1);
firstSheet.GetRow(5).GetCell(0).SetCellValue("101");
firstSheet.GetRow(5).GetCell(1).SetCellValue("编号(自定义)");
firstSheet.CreateRow(6);
firstSheet.GetRow(6).CreateCell(0);
firstSheet.GetRow(6).CreateCell(1);
firstSheet.GetRow(6).CreateCell(2);
firstSheet.GetRow(6).CreateCell(4);
firstSheet.GetRow(6).GetCell(0).SetCellValue("102");
firstSheet.GetRow(6).GetCell(1).SetCellValue(cdm.Category + "底标高");
firstSheet.GetRow(6).GetCell(2).SetCellValue("m");
firstSheet.GetRow(6).GetCell(4).SetCellValue(Math.Round(cdm.BaseLevel, 2, MidpointRounding.AwayFromZero));
firstSheet.CreateRow(7);
firstSheet.GetRow(7).CreateCell(0);
firstSheet.GetRow(7).CreateCell(1);
firstSheet.GetRow(7).CreateCell(2);
firstSheet.GetRow(7).CreateCell(4);
firstSheet.GetRow(7).GetCell(0).SetCellValue("103");
firstSheet.GetRow(7).GetCell(1).SetCellValue(cdm.Category + "中心点坐标X");
firstSheet.GetRow(7).GetCell(2).SetCellValue("m");
firstSheet.GetRow(7).GetCell(4).SetCellValue(Math.Round(cdm.Center_X, 2, MidpointRounding.AwayFromZero));
firstSheet.CreateRow(8);
firstSheet.GetRow(8).CreateCell(0);
firstSheet.GetRow(8).CreateCell(1);
firstSheet.GetRow(8).CreateCell(2);
firstSheet.GetRow(8).CreateCell(4);
firstSheet.GetRow(8).GetCell(0).SetCellValue("104");
firstSheet.GetRow(8).GetCell(1).SetCellValue(cdm.Category + "中心点坐标Y");
firstSheet.GetRow(8).GetCell(2).SetCellValue("m");
firstSheet.GetRow(8).GetCell(4).SetCellValue(Math.Round(cdm.Center_Y, MidpointRounding.AwayFromZero));
firstSheet.CreateRow(9);
firstSheet.GetRow(9).CreateCell(0);
firstSheet.GetRow(9).CreateCell(1);
firstSheet.GetRow(9).CreateCell(2);
firstSheet.GetRow(9).CreateCell(4);
firstSheet.GetRow(9).GetCell(0).SetCellValue("105");
firstSheet.GetRow(9).GetCell(1).SetCellValue(cdm.Category + "边长X");
firstSheet.GetRow(9).GetCell(2).SetCellValue("m");
firstSheet.GetRow(9).GetCell(4).SetCellValue(Math.Round(cdm.Length, 2, MidpointRounding.AwayFromZero));
firstSheet.CreateRow(10);
firstSheet.GetRow(10).CreateCell(0);
firstSheet.GetRow(10).CreateCell(1);
firstSheet.GetRow(10).CreateCell(2);
firstSheet.GetRow(10).CreateCell(4);
firstSheet.GetRow(10).GetCell(0).SetCellValue("106");
firstSheet.GetRow(10).GetCell(1).SetCellValue(cdm.Category + "边长Y");
firstSheet.GetRow(10).GetCell(2).SetCellValue("m");
firstSheet.GetRow(10).GetCell(4).SetCellValue(Math.Round(cdm.Width, 2, MidpointRounding.AwayFromZero));
firstSheet.CreateRow(11);
firstSheet.GetRow(11).CreateCell(0);
firstSheet.GetRow(11).CreateCell(1);
firstSheet.GetRow(11).CreateCell(2);
firstSheet.GetRow(11).CreateCell(4);
firstSheet.GetRow(11).GetCell(0).SetCellValue("107");
firstSheet.GetRow(11).GetCell(1).SetCellValue(cdm.Category + "顶标高");
firstSheet.GetRow(11).GetCell(2).SetCellValue("m");
firstSheet.GetRow(11).GetCell(4).SetCellValue(Math.Round(cdm.TopLevel, 2, MidpointRounding.AwayFromZero));
firstSheet.CreateRow(12);
firstSheet.GetRow(12).CreateCell(0);
firstSheet.GetRow(12).CreateCell(1);
firstSheet.GetRow(12).CreateCell(2);
firstSheet.GetRow(12).CreateCell(4);
firstSheet.GetRow(12).GetCell(0).SetCellValue("108");
firstSheet.GetRow(12).GetCell(1).SetCellValue(cdm.Category + "身材料");
firstSheet.GetRow(12).GetCell(2).SetCellValue("混凝土、砖、其他");
firstSheet.GetRow(12).GetCell(4).SetCellValue(cdm.Material);
firstSheet.CreateRow(13);
firstSheet.GetRow(13).CreateCell(0);
firstSheet.GetRow(13).CreateCell(1);
firstSheet.GetRow(13).CreateCell(2);
firstSheet.GetRow(13).CreateCell(4);
firstSheet.GetRow(13).GetCell(0).SetCellValue("109");
firstSheet.GetRow(13).GetCell(1).SetCellValue(cdm.Category + "材料强度(标准值)");
firstSheet.GetRow(13).GetCell(2).SetCellValue("MPa");
firstSheet.GetRow(13).GetCell(4).SetCellValue(cdm.Strength);
firstSheet.CreateRow(14);
firstSheet.GetRow(14).CreateCell(0);
firstSheet.GetRow(14).CreateCell(1);
firstSheet.GetRow(14).CreateCell(2);
firstSheet.GetRow(14).CreateCell(4);
firstSheet.GetRow(14).GetCell(0).SetCellValue("110");
firstSheet.GetRow(14).GetCell(1).SetCellValue("设计负责人");
firstSheet.GetRow(14).GetCell(2).SetCellValue("姓名");
firstSheet.GetRow(14).GetCell(4).SetCellValue(cdm.Designer);
firstSheet.CreateRow(15);
firstSheet.GetRow(15).CreateCell(0);
firstSheet.GetRow(15).CreateCell(1);
//firstSheet.GetRow(15).CreateCell(2);
firstSheet.GetRow(15).CreateCell(4);
firstSheet.GetRow(15).GetCell(0).SetCellValue("111");
firstSheet.GetRow(15).GetCell(1).SetCellValue("身份证");
//firstSheet.GetRow(15).GetCell(2).SetCellValue("");
firstSheet.GetRow(15).GetCell(4).SetCellValue(cdm.Iden);
firstSheet.AutoSizeColumn(0);
firstSheet.AutoSizeColumn(1);
firstSheet.AutoSizeColumn(2);
firstSheet.AutoSizeColumn(3);
firstSheet.AutoSizeColumn(4);
#endregion
using (FileStream excelStream = File.Create(Path + "\\" + cdm.HcdmClass + "-" + cdm.HcdmNumber + ".xlsx"))
{
workbook.Write(excelStream);
}
}
private void CloseWindow()
{
CurrentUI.Closed -= CurrentUI_Closed;
CurrentUI.Close();
}
private void CurrentUI_Closed(object sender, EventArgs e)
{
Cancel = true;
}
public string GetName()
{
return "处理进度";
}
}
}