|
@@ -109,6 +109,9 @@ namespace SAGA.MBI.ToolsData.ModeCheck
|
|
|
signResult.InstPassRate = rateFunc((t) => new List<DCElementType>() { DCElementType.Equipment, DCElementType.EuipmentPart, DCElementType.Beacon }.Contains(((ElementRangeCheckResult)t).RType));
|
|
|
}
|
|
|
|
|
|
+ private double m_HTop = 0;
|
|
|
+ private double m_HBase = 0;
|
|
|
+ private List<double> m_HSandwishs=new List<double>();
|
|
|
/// <summary>
|
|
|
/// 设置当前楼层底部和顶部范围
|
|
|
/// </summary>
|
|
@@ -119,45 +122,66 @@ namespace SAGA.MBI.ToolsData.ModeCheck
|
|
|
bool rt = true;
|
|
|
try
|
|
|
{
|
|
|
+ m_HBase = result.HBase;
|
|
|
+ m_HSandwishs = new List<double>();
|
|
|
//设置楼层底部高度
|
|
|
var curLevelName = result.RFloorName;
|
|
|
+ var levels = doc.GetLevels();
|
|
|
+ var mbiLevels = levels.Where(t => Regex.IsMatch(t.Name, @"([BF][1-9]\d*M?\d?|RFM?\d?)")).ToList();
|
|
|
+ Func<string, bool> isSandwichFunc = (str) => { return Regex.IsMatch(str, @"([BF][1-9]\d*M\d?|RFM?\d?)");};
|
|
|
//设置楼层顶部高度
|
|
|
- if (curLevelName == "RF" || curLevelName == "RFM")
|
|
|
+ if (curLevelName == "RF")
|
|
|
{
|
|
|
- result.HTop = double.MaxValue;
|
|
|
- result.HSamdwich = double.MaxValue;
|
|
|
+ m_HTop = double.MaxValue;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- var levels = doc.GetLevels();
|
|
|
- var mbiLevels = levels.Where(t => Regex.IsMatch(t.Name, @"([BF][1-9]\d*M?|RFM?)"));
|
|
|
- var topLevel = mbiLevels.FirstOrDefault(t => t.Elevation.IsThan(result.HBase));
|
|
|
- if (topLevel == null)
|
|
|
+ var hightThanBaseLevels=mbiLevels.Where(t => t.Elevation.IsThan(m_HBase));
|
|
|
+ foreach (Level level in hightThanBaseLevels)
|
|
|
{
|
|
|
- throw new Exception($"标高编码不合法:{curLevelName}不应该是顶层,缺少标高RF或标高RF标注的位置不正确");
|
|
|
- }
|
|
|
- double nextL = topLevel.Elevation;
|
|
|
- string tempTopLevelName = topLevel.Name;
|
|
|
- //如果是夹层,获取夹层的上一层
|
|
|
- if (Regex.IsMatch(tempTopLevelName, @"([BF][1-9]\d*M|RFM)"))
|
|
|
- {
|
|
|
- result.HSamdwich = nextL;
|
|
|
- topLevel = mbiLevels.FirstOrDefault(t => t.Elevation.IsThan(nextL));
|
|
|
- if (topLevel == null)
|
|
|
- {
|
|
|
- throw new Exception($"标高编码不合法:{tempTopLevelName}不应该是顶层,缺少标高RF或标高RF标注的位置不正确");
|
|
|
- }
|
|
|
+ m_HTop = level.Elevation;
|
|
|
+ if(isSandwichFunc(level.Name))
|
|
|
+ m_HSandwishs.Add(level.Elevation);
|
|
|
else
|
|
|
{
|
|
|
- result.HTop = topLevel.Elevation;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- result.HSamdwich = nextL;
|
|
|
- result.HTop = nextL;
|
|
|
- }
|
|
|
}
|
|
|
+
|
|
|
+ //if (curLevelName == "RF" || curLevelName == "RFM")
|
|
|
+ //{
|
|
|
+ // result.HTop = double.MaxValue;
|
|
|
+ // result.HSamdwich = double.MaxValue;
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
+ // if (topLevel == null)
|
|
|
+ // {
|
|
|
+ // throw new Exception($"标高编码不合法:{curLevelName}不应该是顶层,缺少标高RF或标高RF标注的位置不正确");
|
|
|
+ // }
|
|
|
+ // double nextL = topLevel.Elevation;
|
|
|
+ // string tempTopLevelName = topLevel.Name;
|
|
|
+ // //如果是夹层,获取夹层的上一层
|
|
|
+ // if (Regex.IsMatch(tempTopLevelName, @"([BF][1-9]\d*M|RFM)"))
|
|
|
+ // {
|
|
|
+ // result.HSamdwich = nextL;
|
|
|
+ // topLevel = mbiLevels.FirstOrDefault(t => t.Elevation.IsThan(nextL));
|
|
|
+ // if (topLevel == null)
|
|
|
+ // {
|
|
|
+ // throw new Exception($"标高编码不合法:{tempTopLevelName}不应该是顶层,缺少标高RF或标高RF标注的位置不正确");
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // result.HTop = topLevel.Elevation;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // result.HSamdwich = nextL;
|
|
|
+ // result.HTop = nextL;
|
|
|
+ // }
|
|
|
+ //}
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
@@ -181,8 +205,7 @@ namespace SAGA.MBI.ToolsData.ModeCheck
|
|
|
try
|
|
|
{
|
|
|
double hb = signResult.HBase;
|
|
|
- double ht = signResult.HTop;
|
|
|
- double hjc = signResult.HSamdwich;
|
|
|
+ double ht = m_HTop;
|
|
|
//使用时,单位转化为英寸
|
|
|
double w = signResult.Redundant.ToApi();
|
|
|
double zb = 0, zt = 0;
|
|
@@ -229,7 +252,7 @@ namespace SAGA.MBI.ToolsData.ModeCheck
|
|
|
if (isBoxInst)
|
|
|
{
|
|
|
rb = zb.IsBetween(hb - w, hb);
|
|
|
- rt = zt.IsBetween(ht - w, ht) || zt.IsBetween(hjc - w, hjc);
|
|
|
+ rt = zt.IsBetween(ht - w, ht) || m_HSandwishs.Any(t=>zt.IsBetween(t-w,t));
|
|
|
result.IsRight = rb && rt;
|
|
|
string ttip = rb ? "" : "底部";
|
|
|
string ttop = rt ? "" : rb ? "和顶部" : "顶部";
|