mengxiangge vor 6 Jahren
Ursprung
Commit
0321df838e

BIN
MBI/MBIResource/DataCheck/垃圾数据检查结果输出-模版.xlsx


+ 92 - 0
MBI/SAGA.MBI/Calc/ObjectCalc.cs

@@ -26,6 +26,98 @@ namespace SAGA.MBI.Calc
     /// </summary>
     public class ObjectCalc
     {
+
+
+        #region 简单计算,只获取岗位
+
+        /// <summary>
+        /// 常规计算
+        /// </summary>
+        /// <param name="floor"></param>
+        /// <returns></returns>
+        public static CalcContext Calc_Simple(MFloor floor)
+        {
+            CalcContext context = new CalcContext(floor);
+            context.OpenDocument();
+            try
+            {
+                CalcSpace_Simple(context);
+                CalcEquipPartRlt_Simple(context);
+            }
+            catch (Exception e)
+            {
+                MessageShowBase.Show(e);
+            }
+            finally
+            {
+                context.RevitDoc.CloseDoc();
+            }
+            return context;
+        }
+        /// <summary>
+        /// 计算模型中的空间
+        /// </summary>
+        /// <param name="context"></param>
+        private static void CalcSpace_Simple(CalcContext context)
+        {
+            var spaces = context.RevitDoc.GetSpaces();
+            foreach (Space space in spaces)
+            {
+                if (!space.IsSpace()) continue;
+                MISpace mspace = DalSpace.GetSpace(space);
+                if (mspace == null) continue;
+                mspace.Operator = DocumentChangedOperator.Add;
+                context.MSpaces.Add(mspace);
+            }
+        }
+        /// <summary>
+        /// 读取空间中的设备、部件、设备所在空间的关系
+        /// </summary>
+        /// <param name="context"></param>
+        private static void CalcEquipPartRlt_Simple(CalcContext context)
+        {
+            var familyInstances = context.RevitDoc.GetFamilyInstances();
+            List<FamilyInstance> parts = new List<FamilyInstance>();
+            foreach (FamilyInstance fi in familyInstances)
+            {
+                if (!fi.IsValidObject) continue;
+                if (fi.IsEquipment())
+                {
+                    MEquipment equipment = DalEquip.GetEquipment(fi);
+                    if (equipment == null) continue;
+                    equipment.Operator = DocumentChangedOperator.Add;
+                    context.MEquipments.Add(equipment);
+                    
+                }
+
+                //在这里处理信标
+                else if (fi.IsBeacon())
+                {
+                    MBeacon mode = DalBeacon.GetBeacon(fi);
+                    if (mode == null) continue;
+                    mode.Operator = DocumentChangedOperator.Add;
+                    context.MBeacons.Add(mode);
+                    
+                }
+                else if (fi.IsEquipmentPart())
+                {
+                    parts.Add(fi);
+                }
+            }
+            //单独处理部件,因为部件要依赖设备
+            foreach (FamilyInstance fi in parts)
+            {
+                // 在这里处理部件 
+                MEquipmentPart equipment = DalEquipPart.GetEquipPart(fi);
+                if (equipment?.MEquipment == null) continue;
+
+                equipment.Operator = DocumentChangedOperator.Add;
+                context.MEquipmentParts.Add(equipment);
+                
+            }
+
+        }
+        #endregion
         /// <summary>
         /// 常规计算
         /// </summary>

+ 23 - 13
MBI/SAGA.MBI/Extend/ElementExtend.cs

@@ -12,6 +12,7 @@ using System.Threading.Tasks;
 using Autodesk.Revit.DB;
 using Autodesk.Revit.DB.Mechanical;
 using Newtonsoft.Json.Linq;
+using NPOI.SS.Formula.Functions;
 using SAGA.DotNetUtils;
 using SAGA.DotNetUtils.Extend;
 using SAGA.MBI.Common;
@@ -149,7 +150,7 @@ namespace SAGA.MBI.Tools
         /// <returns></returns>
         public static XYZ ToXyz(this string xyzstr)
         {
-            XYZ xyz =null;
+            XYZ xyz = null;
             var strs = xyzstr.Split(',');
             if (strs.Length == 3)
             {
@@ -188,20 +189,29 @@ namespace SAGA.MBI.Tools
         public static Space GetReferenceSpace(this FamilyInstance fi)
         {
             Space space = fi.Space;
-            var spaces = fi.Document.GetSpaces();
-            //没有Space属性,取定位点,判断定位点所在空间
-            if (space == null)
+            if (space != null) return space;
+            var spaces = fi.Document.GetSpaces().Where(t => t.IsValidObject).ToList();
+            Space temSpace2 = null;
+            var origin1 = fi.GetLocationPointMBIXYZ();
+            var origin2 = fi.GetBoxCenter();
+            foreach (Space tempSpace in spaces)
             {
-                var origin = fi.GetLocationPointMBIXYZ();
-                space = spaces.FirstOrDefault(t => t.IsValidObject && t.IsPointInSpace(origin));
-            }
-            //还没有找到空间,取Box中心点,判断点所在空间
-            if (space == null)
-            {
-                var origin = fi.GetBoxCenter();
-                space = spaces.FirstOrDefault(t => t.IsValidObject && t.IsPointInSpace(origin));
+                //没有Space属性,取定位点,判断定位点所在空间
+                if (tempSpace.IsPointInSpace(origin1))
+                {
+                    space = tempSpace;
+                    break;
+                }
+
+                //还没有找到空间,取Box中心点,判断点所在空间
+                if (temSpace2 != null) continue;
+                if (tempSpace.IsPointInSpace(origin2))
+                {
+                    temSpace2 = tempSpace;
+                }
             }
-            return space;
+
+            return space ?? (temSpace2);
         }
     }
 }

+ 1 - 1
MBI/SAGA.MBI/ToolsData/CorrectLossDuty.cs

@@ -91,7 +91,7 @@ namespace SAGA.MBI.ToolsData
             Log4Net.Debug("start");
             var oldContext = DalCommon.DownLoadCouldData(floor);
             Log4Net.Debug("download");
-            var newContext = ObjectCalc.Calc(floor);
+            var newContext = ObjectCalc.Calc_Simple(floor);
             Log4Net.Debug("calc");
             //分组
             var beaddContext = DalModeFileManange.GetAddContext(oldContext, newContext, true);