/* ==============================================================================
* 功能描述:SagaCheck
* 创 建 者:Garrett
* 创建日期:2019/6/11 16:09:09
* ==============================================================================*/
using System;
using System.Linq;
using System.Text.RegularExpressions;
using Autodesk.Revit.DB;
using SAGA.DotNetUtils.Extend;
using SAGA.RevitUtils.Extends;
using ServiceRevitLib.Common;
using ServiceRevitLib.Mode;
namespace ServiceRevitLib.DataCheck.Mode
{
///
/// SagaCheck
///
class SagaCheck : CheckBase
{
public override void Check()
{
try
{
base.Check();
#region
string resultMsg = null;
ResultState resultState = 0;
string planName = "";
//判断是否存在Saga标记
var document = m_Doc;
var sagaPlans = document.GetElements()
.Where(t => t.ViewType == ViewType.FloorPlan && t.Name.Contains("-saga")).ToList();
if (sagaPlans.Count == 0)
{
resultState = ResultState.Failure;
resultMsg = "缺少saga标记";
}
else if (sagaPlans.Count() >= 2)
{
resultState = ResultState.Failure;
resultMsg = "有多个saga标记";
}
else
{
//只有一个saga标记
var sagaPlan = sagaPlans.FirstOrDefault();
if (sagaPlan != null)
{
planName = sagaPlan.Name;
//打标记的楼层名称必需为指定格式;B1,B1M,F1,F1M,RFM,RF
if (Regex.IsMatch(planName, $"{RegexConstPattern.IsMBIView}"))
{
var rfLevel = document.GetLevels().FirstOrDefault(t =>
System.Text.RegularExpressions.Regex.IsMatch(t.Name, $"{RegexConstPattern.IsRF}"));
if (rfLevel == null)
{
resultState = ResultState.Failure;
resultMsg = $"缺少RF标高";
}
else
{
if (rfLevel.Elevation.IsThanEq(sagaPlan.GenLevel.Elevation))
{
resultState = ResultState.Success;
}
else
{
resultState = ResultState.Failure;
resultMsg = $"RF标高的位置不正确,请检查";
}
}
}
else
{
resultState = ResultState.Failure;
resultMsg = $"楼层 {planName} 不符合楼层命名规范";
}
}
}
Content.Add(new SagaCheckResult() { PlanName = planName, Result = resultState, ResultMsg = resultMsg });
#endregion
}
catch (Exception e)
{
Result = ResultState.Failure;
ResultMsg = $"{e.Message}\r\n{e.StackTrace}";
}
}
}
}