Parcourir la source

mxg:1,解决异常报错;2修正房间转空间失败

mengxiangge il y a 5 ans
Parent
commit
2aa2d6ff40
1 fichiers modifiés avec 26 ajouts et 6 suppressions
  1. 26 6
      MBI/ToolCommand/RoomToSpaceUtils.cs

+ 26 - 6
MBI/ToolCommand/RoomToSpaceUtils.cs

@@ -26,7 +26,17 @@ namespace ToolCommand
             //删除当前视图下的所有空间和空间分割
             var doc = view.Document;
             var elements = doc.GetElements(filter);
-            return elements.Where(e => e.LevelId == view.GenLevel.Id).ToList();
+            List<Element> list=new List<Element>();
+            try
+            {
+                if(null!= view.GenLevel?.Id)
+                    list = elements.Where(e => e.LevelId == view.GenLevel.Id).ToList();
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine(e);
+            }
+            return list;
         }
         /// <summary>
         /// 房间转换成空间
@@ -136,7 +146,9 @@ namespace ToolCommand
                             relationItem.Messages.Add("房间信息无效,定位点为空");
                             continue;
                         }
-                        useSpcae = doc.GetSpaceAtPoint(location.Add(offset));
+                        ElementId phaseId = view.GetParameterElementId(BuiltInParameter.VIEW_PHASE);
+                        var phase = doc.GetElement(phaseId) as Phase;
+                        useSpcae = doc.GetSpaceAtPoint(location.Add(offset), phase);
                         if (useSpcae == null)
                         {
                             relationItem.Messages.Add("未找到对应空间");
@@ -179,19 +191,27 @@ namespace ToolCommand
             var points = GetSpacesPoints(view);
             try
             {
-                //doc.LoadFamilySymbolExt(Path.Combine(AppBaseInfo.FamilyPath, "空间标记.rfa"));
+                doc.LoadFamilySymbolExt(Path.Combine(AppBaseInfo.FamilyPath, "空间标记.rfa"));
             }
             catch (Exception ex)
             {
+                Console.WriteLine(ex);
             }
             foreach (var point in points)
             {
                 var oldSpace = doc.GetSpaceAtPoint(point, phase);
                 if (oldSpace == null)
                 {
-                    var tempSapce = doc.Create.NewSpace(level, phase, new UV(point.X, point.Y));
-                    //doc.Create.NewSpaceTag(tempSapce, new UV(point.X, point.Y), view);
-                    spaces.Add(tempSapce);
+                    try
+                    {
+                        var tempSapce = doc.Create.NewSpace(level, phase, new UV(point.X, point.Y));
+                        doc.Create.NewSpaceTag(tempSapce, new UV(point.X, point.Y), view);
+                        spaces.Add(tempSapce);
+                    }
+                    catch (Exception e)
+                    {
+                        Console.WriteLine(e);
+                    }
                 }
             }