123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /* ==============================================================================
- * 功能描述:saga标记检查
- * 创 建 者:Garrett
- * 创建日期:2018/10/23 9:01:13
- * ==============================================================================*/
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using Autodesk.Revit.DB;
- using Microsoft.Win32;
- using NPOI.SS.UserModel;
- using NPOI.SS.Util;
- using NPOI.XSSF.UserModel;
- using SAGA.DotNetUtils.Extend;
- using SAGA.DotNetUtils.Others;
- using SAGA.MBI.Common;
- using SAGA.MBI.DataArrange;
- using SAGA.MBI.Model;
- using SAGA.MBI.Tools;
- using SAGA.MBI.ToolsData.CheckBase;
- using SAGA.RevitUtils.Extends;
- namespace SAGA.MBI.ToolsData.ModeCheck
- {
- /// <summary>
- /// DocumentSagaSignCheck
- /// </summary>
- public class SagaSignCheck : ModeCheckBase
- {
- /// <summary>
- /// 冗余--或者理解为楼板厚 单位mm
- /// </summary>
- private double redundant;
- public SagaSignCheck(double redundant = 500)
- {
- Name = "楼层平面图命名规范检查";
- this.redundant = redundant;
- RIsReadOnly = true;
- RIsChecked = true;
- }
- #region Check
- [DataCheckProcessAspect]
- public override bool Check()
- {
- //1,首先检查saga标记和楼层编码符合建模规范要求
- IsRight = CheckSagaSign();
- return IsRight;
- }
- /// <summary>
- /// 检查saga标记
- /// </summary>
- /// <returns></returns>
- private bool CheckSagaSign()
- {
- bool allRight = true;
- //获取建筑下的楼层
- var floors = DalProjectTree.GetSelectedFloors();
- int i = 0;
- foreach (MFloor mFloor in floors)
- {
- //if (++i > 1) break;
- var result = new SagaSignCheckResult() { Redundant = redundant };
- Results.Add(result);
- result.RFloorName = mFloor.ToString();
- result.RFileName = mFloor.RevitName + ".rvt";
- result.RPath = mFloor.FullPath;
- result.RPlanName = "-";
- //判断是否缺少模型文件
- if (mFloor.IsMissFile)
- {
- result.IsRight = false;
- allRight = result.IsRight;
- result.RMessage = "缺少模型文件";
- continue;
- }
- //判断是否存在Saga标记
- var document = result.RDocument;
- var sagaPlans = document.GetElements<ViewPlan>().Where(t => t.ViewType == ViewType.FloorPlan && t.Name.Contains("-saga"));
- if (!sagaPlans.Any())
- {
- result.IsRight = false;
- allRight = result.IsRight;
- result.RMessage = "缺少saga标记";
- continue;
- }
- else if (sagaPlans.Count() >= 2)
- {
- result.IsRight = false;
- allRight = result.IsRight;
- result.RMessage = "有多个saga标记";
- continue;
- }
- else
- {
- //只有一个saga标记
- var sagaPlan = sagaPlans.FirstOrDefault();
- string sagaPlanName = sagaPlan.Name;
- result.RPlanName = sagaPlanName;
- result.HBase = sagaPlan.GenLevel.Elevation;
- //打标记的楼层名称必需为指定格式;B1,B1M,F1,F1M,RFM,RF
- if (Regex.IsMatch(sagaPlanName, @"([BF][1-9]\d*M?|RFM?)-saga"))
- {
- result.RSequence = mFloor.Sequence;
- var rfLevel = document.GetLevels().FirstOrDefault(t => Regex.IsMatch(t.Name, @"RF(-saga)?"));
- if (rfLevel == null)
- {
- result.IsRight = false;
- result.RMessage = $"缺少RF标高";
- }
- else
- {
- if (rfLevel.Elevation.IsThanEq(result.HBase))
- {
- result.IsRight = true;
- }
- else
- {
- result.IsRight = false;
- result.RMessage = $"RF标高的位置不正确,请检查";
- }
- }
- }
- else
- {
- result.IsRight = false;
- allRight = result.IsRight;
- result.RMessage = $"楼层 {sagaPlanName} 不符合楼层命名规范";
- }
- }
- }
- return Results.All(t => t.IsRight);
- }
- #endregion
- public override void Correct()
- {
- throw new NotImplementedException();
- }
- //[DataCheckProcessAspect]
- public override void Export()
- {
- // Check();
- try
- {
- IWorkbook book = DCRExport.GetWorkbook(true);
- //ISheet sheet = book.CreateSheet(Name);
- ISheet sheet = book.GetSheet(Name);
- #region 添加数据
- int index = 4;
- //IRow row4 = sheet.CreateRow(index);
- //row4.HeightInPoints = 15;
- //row4.AddCell(0, "楼层本地名称", DataCheckNPOIStyle.Title);
- //row4.AddCell(1, "文件名", DataCheckNPOIStyle.Title);
- //row4.AddCell(2, "文件地址", DataCheckNPOIStyle.Title);
- //row4.AddCell(3, "楼层平面视图名称", DataCheckNPOIStyle.Title);
- //row4.AddCell(4, "通过", DataCheckNPOIStyle.Title);
- //row4.AddCell(5, "备注(失败原因)", DataCheckNPOIStyle.Title);
- foreach (SagaSignCheckResult result in Results)
- {
- index++;
- IRow rowN = sheet.CreateRow(index);
- DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
- rowN.AddCell(0, result.RFloorName, style);
- rowN.AddCell(1, result.RFileName, style);
- rowN.AddCell(2, result.RPath, style);
- rowN.AddCell(3, result.RPlanName, style);
- string rowN4 = result.IsRight ? "通过" : "不通过";
- rowN.AddCell(4, rowN4, style);
- rowN.AddCell(5, result.RMessage, style);
- }
- #endregion
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- }
- }
- }
- }
|