/* ==============================================================================
* 功能描述:CheckOperation
* 创 建 者:Garrett
* 创建日期:2018/11/29 17:22:05
* ==============================================================================*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using FWindSoft.Wpf;
using NPOI.SS.UserModel;
using SAGA.DotNetUtils.Extend;
using SAGA.DotNetUtils.Others;
using SAGA.RevitUtils.MEP;
namespace Saga.PlugIn.ModelCheck
{
///
/// CheckOperation
///
public class CheckOperation
{
///
/// 获取模型检查的检查项
///
///
public static List GetModeCheckItems()
{
List list = new List();
var sagaSignCheck = new SagaSignCheck();
var types = Assembly.GetCallingAssembly().GetTypes();
foreach (var type in types)
{
if (type.IsSubclassOf(typeof(ModeCheckBase)))
{
var attribute = type.GetCustomAttribute();
if (attribute != null)
continue;
var constructor = type.GetConstructor(Type.EmptyTypes);
if (constructor == null)
continue;
if (constructor.Invoke(null) is ModeCheckBase checkBase)
list.Add(checkBase);
}
}
list.Sort(new CommonComparer((a, b) =>
{
var attribute = a.GetType().GetCustomAttribute();
int i1 = 0;
if (attribute != null)
i1 = attribute.Index;
attribute = b.GetType().GetCustomAttribute();
int i2 = 0;
if (attribute != null)
i2 = attribute.Index;
return i1.CompareTo(i2);
}));
list.ForEach(t =>
{
t.SetBaseCheck(sagaSignCheck);
t.RIsChecked = true;
});
list.Insert(0, sagaSignCheck);
return list.ToList();
}
///
/// 执行检查并保存
///
///
///
public static void Execute(List list, Document doc, string savePath, VMModelCheck vm)
{
//检查
list.ForEach(t =>
{
t.Check2(doc);
vm.CurrentIndex++;
WpfSysCmd.DoEvent();
});
//重置workbook准备保存结果
DCRExport.ClearWorkbook();
//保存
list.ForEach(t => t.Export2());
ExportResultSummary(list);
DCRExport.Save(savePath, DCRExport.GetWorkbook());
}
///
/// 检查结果汇总
///
///
///
private static void ExportResultSummary(List list)
{
try
{
IWorkbook book = DCRExport.GetWorkbook();
string sheetName = "检查结果汇总";
ISheet sheet = book.GetSheet(sheetName);
#region 添加数据
int index = 0;
foreach (var result in list)
{
//数量过多,只显示有问题的
//if (result.IsRight) continue;
index++;
IRow rowN = sheet.CreateRow(index);
DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
int i = 0;
rowN.AddCell(i++, result.Name, DataCheckNPOIStyle.HyperLink, true);
//链接到指定页签
var cellN0 = rowN.GetCell(i - 1);
cellN0.Hyperlink = DCRExport.CreateLink(result.Name);
rowN.AddCell(i++, result.RIsChecked ? "是" : "否", style);
//检查,并且结果为不通过
string rowN4 = !result.IsRight && result.RIsChecked ? "包含问题数据" : "";
rowN.AddCell(i++, rowN4, style);
}
#endregion
}
catch (Exception e)
{
MessageShowBase.Show(e);
}
}
}
}