Explorar o código

Merge branch 'master' of https://git.dev.tencent.com/xuhuo1234/saga

xulisong %!s(int64=6) %!d(string=hai) anos
pai
achega
d1fdcd4cad

+ 2 - 2
MBI/SAGA.MBI/DataArrange/DalModeFileManange.cs

@@ -76,7 +76,7 @@ namespace SAGA.MBI.DataArrange
         /// <summary>
         /// 获取缺少模型的Tree
         /// </summary>
-        /// <param name="isMissFile">True 缺少模型;False 不缺少;null全部</param>
+        /// <param name="isMissFile">True 缺少模型;False 不缺少;</param>
         /// <returns></returns>
         public static List<TreeNodeItem> GetMissFileFloors(bool isMissFile = true)
         {
@@ -91,7 +91,7 @@ namespace SAGA.MBI.DataArrange
                     {
                         if (floorTree.Item is MFloor floor)
                         {
-                            if (isMissFile == null || isMissFile == floor.IsMissFile)
+                            if (isMissFile == floor.IsMissFile)
                             {
                                 TreeNodeItem tempfloorTree = new TreeNodeItem(floor);
 

+ 52 - 29
MBI/SAGA.MBI/ToolsData/ModeCheck/ElementRangeCheck.cs

@@ -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 ? "和顶部" : "顶部";

+ 1 - 10
MBI/SAGA.MBI/ToolsData/ModeCheck/SagaSignCheckResult.cs

@@ -57,16 +57,7 @@ namespace SAGA.MBI.ToolsData.ModeCheck
         /// 当前层的标高高度,所有比较的单位都是英寸
         /// </summary>
         public double HBase { get; set; }
-
-        /// <summary>
-        /// 上一层的标高高度
-        /// </summary>
-        public double HTop { get; set; }
-
-        /// <summary>
-        /// 夹层高度-如果没有夹层此值等于上一层楼层标高高度
-        /// </summary>
-        public double HSamdwich { get; set; }
+        
 
         #region RangePassRate
 

+ 5 - 1
MBI/SAGA.RevitUtils/Extends/DocumentExtend.cs

@@ -933,7 +933,11 @@ namespace SAGA.RevitUtils.Extends
         {
             return doc.FilterElements(filter);
         }
-
+        /// <summary>
+        /// 获取标高,并且标高由小到大排序
+        /// </summary>
+        /// <param name="doc"></param>
+        /// <returns></returns>
         public static List<Level> GetLevels(this Document doc)
         {
             List<Level> mLevels = null;

BIN=BIN
MBI/Updater/Update.exe


BIN=BIN
MBI/Updater/Update.pdb