/* ==============================================================================
* 功能描述:未在空间中的设备检查
* 创 建 者:Garrett
* 创建日期:2018/10/23 15:08:55
* ==============================================================================*/
using System;
using System.Collections.Generic;
using System.Linq;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Mechanical;
using NPOI.SS.UserModel;
using SAGA.DotNetUtils.Others;
using SAGA.RevitUtils.Extends;
namespace Saga.PlugIn.ModelCheck
{
///
/// UnitCheck
///
[ParseIndex(Index = 9)]
class EquipmentInSpaceCheck : ModeCheckBase
{
public EquipmentInSpaceCheck()
{
Name = "未在空间中的设备";
}
public override bool Check()
{
if (!RBase.IsRight)
{
IsRight = RBase.IsRight;
return IsRight;
}
IsRight = GetCheckResult();
return IsRight;
}
private bool GetCheckResult()
{
bool unitResult = true;
foreach (SagaSignCheckResult signResult in RBase.Results)
{
var document = signResult.RDocument;
var elements = document.GetFamilyInstances();
var parts = elements.Where(t => t.IsEquipment()|| t.IsEquipmentPart());
var rspaces = document.GetSpaces().Where(t => t.IsSpace()).ToList();
foreach (Element fi in parts)
{
var result = GetCheckResult(fi,rspaces);
result.RBase = signResult;
Results.Add(result);
}
}
return Results.All(t => t.IsRight);
}
///
/// 获取检测结果
///
///
///
private ModeCheckResultBase GetCheckResult(Element fi,List spaces)
{
var result = new EquipmentInSpaceCheckResult();
result.FamilyName = fi.GetFamilyName();
result.Id = fi.Id.ToString();
var space = fi.GetReferenceSpace(spaces);
if (space == null)
{
result.IsRight = false;
result.RMessage = "请检查设备是否在空间中";
}
else
{
result.IsRight = true;
result.RMessage = $"关联空间的id为{space.Id}";
}
return result;
}
//[DataCheckProcessAspect]
public override void Export()
{
try
{
IWorkbook book = DCRExport.GetWorkbook();
//ISheet sheet = book.CreateSheet(Name);
ISheet sheet = book.GetSheet(Name);
#region 添加数据
int index = 3;
//添加 共检查XXX条数据,未通过检查的如下 提示
IRow rowTip = sheet.CreateRow(index - 1);
rowTip.AddCell(0, $"总检查{Results.Count}条数据,未通过检查的如下", DataCheckNPOIStyle.Title);
foreach (EquipmentInSpaceCheckResult result in Results)
{
SagaSignCheckResult rbase = result.RBase as SagaSignCheckResult;
if (rbase == null)
continue;
//数量过多,只显示有问题的
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.Id, style);
string rowN4 = result.IsRight ? "通过" : "不通过";
rowN.AddCell(++j, rowN4, style);
rowN.AddCell(++j, result.RMessage, style);
}
#endregion
}
catch (Exception e)
{
MessageShowBase.Show(e);
}
}
}
class EquipmentInSpaceCheckResult : ModeCheckResultBase
{
public string FamilyName { get; set; }
public string Id { get; set; }
}
}