Browse Source

mxg:修改模型信息点维护不显示部件窗体;修改推荐按坐标推荐规则

mengxiangge 6 years ago
parent
commit
298d52e683

BIN
MBI/MBIResource/DataCheck/模型检查结果输出格式-模版.xlsx


+ 1 - 1
MBI/SAGA.MBI/DataArrange/DalEquipPart.cs

@@ -35,7 +35,7 @@ namespace SAGA.MBI.DataArrange
             if (mode == null) return null;
             EquipmentPartConvert.QueryEquipPartInfo(mode);
             //mode.FMID = MatchFMConvert.QueryEquipFM(mode.Id);
-            return null;
+            return mode;
         }
 
         /// <summary>

+ 1 - 1
MBI/SAGA.MBI/Extend/ElementExtend.cs

@@ -137,7 +137,7 @@ namespace SAGA.MBI.Tools
         /// <returns></returns>
         public static XYZ ToXyz(this string xyzstr)
         {
-            XYZ xyz = XYZ.Zero;
+            XYZ xyz =null;
             var strs = xyzstr.Split(',');
             if (strs.Length == 3)
             {

+ 5 - 0
MBI/SAGA.MBI/JsonConvert/MatchFMConvert.cs

@@ -7,6 +7,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using Autodesk.Revit.DB;
 using Newtonsoft.Json.Linq;
 using SAGA.DotNetUtils;
 using SAGA.DotNetUtils.Extend;
@@ -19,6 +20,7 @@ using SAGA.MBI.RequestData;
 using SAGA.MBI.Tools;
 using SAGA.RevitUtils;
 using SAGA.RevitUtils.MEP;
+using SAGA.RevitUtils.Extends;
 
 namespace SAGA.MBI.JsonConvert
 {
@@ -133,6 +135,8 @@ namespace SAGA.MBI.JsonConvert
                 mEquipFm.CodeType = fmItem.GetValueEx("CodeType").ToInt();
                 mEquipFm.Note = fmItem.GetValueEx("Note");
 
+                mEquipFm.X = fmItem.GetValueEx("X").ToDouble();
+                mEquipFm.Y = fmItem.GetValueEx("Y").ToDouble();
                 if (fmItem.IsContainKeyEx("Infos"))
                 {
                     var fmInfos = (JObject)fmItem["Infos"];
@@ -148,6 +152,7 @@ namespace SAGA.MBI.JsonConvert
                     mEquipFm.FMJson = fmInfos.ToString();
                     mEquipFm.SetPropertyValue(mEquipFm.FMJson);
                 }
+                  
                 return mEquipFm;
             }
             catch (Exception e)

+ 4 - 0
MBI/SAGA.MBI/Model/MEquipFM.cs

@@ -188,6 +188,10 @@ namespace SAGA.MBI.Model
                 m_Location = value;
             }
         }
+
+        public double X { get; set; }
+        public double Y { get; set; }
+
         private string m_FamilyCode;
         /// <summary>
         /// 设备种族编码

+ 14 - 1
MBI/SAGA.MBI/ToolsData/ModeCheck/SystemCheck.cs

@@ -92,7 +92,7 @@ namespace SAGA.MBI.ToolsData.ModeCheck
             result.RSystemName = systemName;
             result.Type = system is MechanicalSystemType ? "风管系统" : "管道系统";
             result.IsRight = true;
-            var item = m_MEPSystems.Where(t => systemName.Contains(t.Name));
+            var item = m_MEPSystems.Where(t => SystemNameIsEqual(systemName,t.Name));
             if (!item.Any())
             {
                 result.IsRight = false;
@@ -100,6 +100,19 @@ namespace SAGA.MBI.ToolsData.ModeCheck
             }
             return result;
         }
+        /// <summary>
+        /// 系统名称相等
+        /// </summary>
+        /// <param name="originName"></param>
+        /// <param name="targetName"></param>
+        /// <returns></returns>
+        private bool SystemNameIsEqual(string originName,string targetName)
+        {
+            bool result = false;
+            string n1 = originName.ToLower();
+            string n2 = targetName.ToLower();
+            return n1.Equals(n2);
+        }
         //[DataCheckProcessAspect]
         public override void Export()
         {

+ 28 - 4
MBI/SAGA.MBI/WinView/ModeInfoMaintenance/VMMatchFM.cs

@@ -396,7 +396,15 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         {
             XYZ xXyz = x.Location.ToXyz();
             XYZ yXyz = y.Location.ToXyz();
-            return origin.DistanceTo(xXyz).CompareTo(origin.DistanceTo(yXyz));
+            if (xXyz == null)
+                xXyz = new XYZ(x.X, x.Y, origin.Z);
+            if (yXyz == null)
+                yXyz = new XYZ(y.X, y.Y, origin.Z);
+            int result = origin.FindDistance2(xXyz).CompareTo(origin.FindDistance2(yXyz));
+            if (result == 0)
+                result = origin.DistanceTo(xXyz).CompareTo(origin.DistanceTo(yXyz));
+
+            return result;
         }
     }
     /// <summary>
@@ -465,12 +473,11 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
         {
             bool result = false;
             List<Func<MEquipFM, MRevitEquipBase, bool>> funcs = new List<Func<MEquipFM, MRevitEquipBase, bool>>();
+            funcs.Add(IsSameFamilyCode);
             funcs.Add(IsSameFloor);
             funcs.Add(IsLocationNear);
             while (true)
             {
-                if (equipFm.FamilyCode != equip.Family.Code)
-                    break;
                 result = funcs.All(t => t(equipFm, equip));
                 break;
             }
@@ -506,6 +513,16 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
 
         #region 推荐方法
         /// <summary>
+        /// 同一种设备族
+        /// </summary>
+        /// <param name="equipFm"></param>
+        /// <param name="equip"></param>
+        /// <returns></returns>
+        private bool IsSameFamilyCode(MEquipFM equipFm, MRevitEquipBase equip)
+        {
+            return (equipFm.FamilyCode == equip.Family.Code);
+        }
+        /// <summary>
         ///  资产和模型为同一层
         /// </summary>
         /// <param name="equipFm"></param>
@@ -577,7 +594,7 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
                 localName = equipment.LocalName;
                 localId = equipment.LocalId;
             }
-            if (equip is MEquipmentPart part)
+            else if (equip is MEquipmentPart part)
             {
                 localName = part.LocalName;
                 localId = part.LocalId;
@@ -605,11 +622,18 @@ namespace SAGA.MBI.WinView.ModeInfoMaintenance
             XYZ fmXyz = equipFm.Location.ToXyz();
             XYZ dutyXyz = equip.Location.ToXyz();
             bool result = false;
+
             if (fmXyz != null && dutyXyz != null)
             {
                 //单位mm
                 result = fmXyz.DistanceTo(dutyXyz).IsLess(redundancy);
             }
+            else if (fmXyz == null && dutyXyz != null)
+            {
+                //取不到Location,使用X,Y中的值,进行比较,忽略Z
+                fmXyz = new XYZ(equipFm.X, equipFm.Y, 0);
+                result = fmXyz.FindDistance2(dutyXyz).IsLess(redundancy);
+            }
             return result;
         }