Browse Source

mxg:contextcalc计算时算法优化

mengxiangge 6 years ago
parent
commit
04c5a4e277

+ 28 - 25
MBI/SAGA.MBI/Calc/ObjectCalc.cs

@@ -59,9 +59,9 @@ namespace SAGA.MBI.Calc
             var spaces = context.RevitDoc.GetSpaces();
             foreach (Space space in spaces)
             {
-                if(!space.IsSpace())continue;
+                if (!space.IsSpace()) continue;
                 MISpace mspace = DalSpace.GetSpace(space);
-                if(mspace==null)continue;
+                if (mspace == null) continue;
                 mspace.Operator = DocumentChangedOperator.Add;
                 context.MSpaces.Add(mspace);
             }
@@ -73,9 +73,10 @@ namespace SAGA.MBI.Calc
         private static void CalcEquipPartRlt(CalcContext context)
         {
             var familyInstances = context.RevitDoc.GetFamilyInstances();
+            List<FamilyInstance> parts = new List<FamilyInstance>();
             foreach (FamilyInstance fi in familyInstances)
             {
-                if(!fi.IsValidObject)continue;
+                if (!fi.IsValidObject) continue;
                 if (fi.IsEquipment())
                 {
                     MEquipment equipment = DalEquip.GetEquipment(fi);
@@ -91,15 +92,15 @@ namespace SAGA.MBI.Calc
                     if (mSpace != null)
                     {
                         //设备所在空间添加添加一组关系
-                        context.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equipment){Operator = DocumentChangedOperator.Add});
+                        context.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equipment) { Operator = DocumentChangedOperator.Add });
                     }
                 }
-               
+
                 //在这里处理信标
-                if (fi.IsBeacon())
+                else if (fi.IsBeacon())
                 {
                     MBeacon mode = DalBeacon.GetBeacon(fi);
-                    if(mode==null)continue;
+                    if (mode == null) continue;
                     mode.Operator = DocumentChangedOperator.Add;
                     context.MBeacons.Add(mode);
 
@@ -113,30 +114,32 @@ namespace SAGA.MBI.Calc
                         context.RltBeaconinElementSps.Add(new RltBeaconinElementSp(mSpace, mode) { Operator = DocumentChangedOperator.Add });
                     }
                 }
+                else if (fi.IsEquipmentPart())
+                {
+                    parts.Add(fi);
+                }
             }
             //单独处理部件,因为部件要依赖设备
-            foreach (FamilyInstance fi in familyInstances)
+            foreach (FamilyInstance fi in parts)
             {
                 // 在这里处理部件 
-                if (fi.IsEquipmentPart())
-                {
-                    MEquipmentPart equipment = DalEquipPart.GetEquipPart(fi);
-                    if(equipment?.MEquipment == null)continue;
-                    
-                    equipment.Operator = DocumentChangedOperator.Add;
-                    context.MEquipmentParts.Add(equipment);
+                MEquipmentPart equipment = DalEquipPart.GetEquipPart(fi);
+                if (equipment?.MEquipment == null) continue;
 
-                    //识别设备所在空间
-                    var space = fi.GetReferenceSpace();
-                    if (space == null) continue;
-                    string spaceId = space.GetCloudBIMId();
-                    MISpace mSpace = context.MSpaces.FirstOrDefault(t => t.BimID == spaceId);
-                    if (mSpace != null)
-                    {
-                        //设备所在空间添加添加一组关系
-                        context.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equipment) { Operator = DocumentChangedOperator.Add });
-                    }
+                equipment.Operator = DocumentChangedOperator.Add;
+                context.MEquipmentParts.Add(equipment);
+
+                //识别设备所在空间
+                var space = fi.GetReferenceSpace();
+                if (space == null) continue;
+                string spaceId = space.GetCloudBIMId();
+                MISpace mSpace = context.MSpaces.FirstOrDefault(t => t.BimID == spaceId);
+                if (mSpace != null)
+                {
+                    //设备所在空间添加添加一组关系
+                    context.RltEquipInSpaces.Add(new RltEquipInSpace(mSpace, equipment) { Operator = DocumentChangedOperator.Add });
                 }
+
             }
 
         }

+ 2 - 3
MBI/SAGA.MBI/DataArrange/DalUploadFloor.cs

@@ -539,10 +539,9 @@ namespace SAGA.MBI.DataArrange
         {
             //if (mode.Operator == DocumentChangedOperator.None) return;
             var revitId = mode.BimID.GetBIMID();
-            if (revitId.IsNullOrEmpty()) return;
+            if (revitId==0) return;
             var fi = context.RevitDoc.GetElement(revitId) as FamilyInstance;
-            if (fi == null) return;
-            Autodesk.Revit.DB.Mechanical.Space space = fi.GetReferenceSpace();
+            Autodesk.Revit.DB.Mechanical.Space space = fi?.GetReferenceSpace();
             if (space == null) return;
             //查询有没有Space对象
             string spaceId = space.GetCloudBIMId();

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

@@ -26,7 +26,7 @@ namespace SAGA.MBI.Tools
 
         /// <summary>
         /// 云平台BIMId转化为Revit Id
-        /// 去掉文件名前缀
+        /// 去掉文件名前缀,找不到返回值为0
         /// </summary>
         /// <returns></returns>
         public static int GetBIMID(this string cbimId)