/* ==============================================================================
* 功能描述:编码检查
* 创 建 者:Garrett
* 创建日期:2018/10/23 15:08:55
* ==============================================================================*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Autodesk.Revit.DB;
using NPOI.SS.UserModel;
using SAGA.DotNetUtils.Extend;
using SAGA.DotNetUtils.Others;
using SAGA.RevitUtils.Extends;
using SAGA.RevitUtils.MEP;
namespace Saga.PlugIn.ModelCheck
{
///
/// UnitCheck
///
[ParseIndex(Index = 4)]
class FamilyNameCheck : ModeCheckBase
{
public FamilyNameCheck()
{
Name = "设备族编码检查";
RSPecificationSheet.Add("参考-revit分类");
}
public override bool Check()
{
if (!RBase.IsRight)
{
IsRight = RBase.IsRight;
return IsRight;
}
IsRight = FamilyNameCodeCheck();
return IsRight;
}
///
/// 族名称编码规范检查
///
///
private bool FamilyNameCodeCheck()
{
bool unitResult = true;
var ccategories = DataCheckRule.GetCodeCheckCategories();
foreach (SagaSignCheckResult signResult in RBase.Results)
{
var document = signResult.RDocument;
var categories = document.Settings.Categories;
foreach (DCR_CodeCheckCategory ccategory in ccategories)
{
try
{
var category = categories.get_Item(ccategory.Name);
if (category == null) continue;
BuiltInCategory builtInCategory = (BuiltInCategory)category.Id.IntegerValue;
var elements = document.GetElements(builtInCategory);
var groupByFamily = elements.GroupBy(t => t.GetFamilyName());
foreach (IGrouping grouping in groupByFamily)
{
var subElements = grouping.ToList();
var subElement = subElements.FirstOrDefault();
if (subElement is FamilyInstance fi)
{
var result = GetCheckResult(fi) as FamilyNameCheckResult;
if (result == null) continue;
result.RBase = signResult;
//由于数量太多,只显示族名称
Results.Add(result);
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
var list = Results.ToList();
list.Sort(new CommonComparer((x, y) => { return x.IsRight.CompareTo(y.IsRight); }));
Results =new ObservableCollection(list);
return Results.All(t => t.IsRight);
}
///
/// 获取检测结果
///
///
///
private ModeCheckResultBase GetCheckResult(FamilyInstance fi)
{
var result = new FamilyNameCheckResult();
result.FamilyName = fi.GetFamilyName();
if (fi.IsEquipment())
{
result.IsRight = true;
result.Type = DCElementType.Equipment;
}
else if (fi.IsEquipmentPart())
{
result.IsRight = true;
result.Type = DCElementType.EuipmentPart;
}
else if (fi.IsBeacon())
{
result.IsRight = true;
result.Type = DCElementType.Beacon;
}
else
{
result.IsRight = false;
result.Type = DCElementType.None;
result.RMessage = "请检查族名称编码是否符合要求";
}
return result;
}
public override void Export()
{
try
{
IWorkbook book = DCRExport.GetWorkbook();
//ISheet sheet = book.CreateSheet(Name);
ISheet sheet = book.GetSheet(Name);
#region 添加数据
int index = 3;
foreach (FamilyNameCheckResult result in Results)
{
//全部显示
//if (result.IsRight) continue;
index++;
IRow rowN = sheet.CreateRow(index);
DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
int j = -1;
rowN.AddCell(++j, result.FamilyName, style);
//rowN.AddCell(++j, result.Type.GetDescription(), style);
string rowN4 = result.IsRight ? "通过" : "不通过";
rowN.AddCell(++j, rowN4, style);
rowN.AddCell(++j, result.RMessage, style);
}
#endregion
}
catch (Exception e)
{
MessageShowBase.Show(e);
}
}
}
class FamilyNameCheckResult : ModeCheckResultBase
{
public string FamilyName { get; set; }
public DCElementType Type { get; set; }
}
}