Переглянути джерело

Merge branch 'master' of http://dev.dp.sagacloud.cn:8886/r/Revit/SAGA.MBI

mengxiangge 6 роки тому
батько
коміт
52d24c4d78

+ 1 - 0
MBI/SAGA.MBI/SAGA.MBI.csproj

@@ -624,6 +624,7 @@
       <DependentUpon>WinBeacon.xaml</DependentUpon>
     </Compile>
     <Compile Include="DataArrange\DalUploadFloor.cs" />
+    <Compile Include="WinView\Space\FloorSpaceContext.cs" />
     <Compile Include="WinView\Space\GeometryHelper.cs" />
     <Compile Include="WinView\Space\ServerSpace.cs" />
     <Compile Include="WinView\Space\SpaceFailuresPreprocessor.cs" />

+ 133 - 0
MBI/SAGA.MBI/WinView/Space/FloorSpaceContext.cs

@@ -0,0 +1,133 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:FloorSpaceContext
+ * 作者:xulisong
+ * 创建时间: 2018/12/17 10:18:02
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Autodesk.Revit.DB;
+using SAGA.MBI.JsonConvert;
+using SAGA.MBI.Model;
+using SAGA.RevitUtils;
+using SAGA.RevitUtils.Extends;
+
+namespace SAGA.MBI.WinView
+{
+    /// <summary>
+    /// 楼层空间上下文
+    /// </summary>
+    public class FloorSpaceContext
+    {
+        public FloorSpaceContext(MFloor floor)
+        {
+            this.Floor = floor;
+        }
+        /// <summary>
+        /// 关联楼层信息
+        /// </summary>
+        public MFloor Floor { get;private set; }
+
+        #region 关联楼层项目获取
+        private Document m_Document;
+
+        public Document Document
+        {
+            get
+            {
+                if (m_Document == null)
+                {
+                    var filePath = this.Floor?.FullPath;
+                    if (!File.Exists(filePath))
+                    {
+                        throw new Exception("无法找到相关模型文件!");
+                    }
+                    var uiDoc = ExternalDataWrapper.Current.UiApp.OpenAndActivateDocument(filePath);
+                    m_Document = uiDoc.Document;
+                }
+                return m_Document;
+            }
+        }
+        #endregion
+
+        #region  物理世界空间缓存
+        /// <summary>
+        /// 物理世界存在元空间
+        /// </summary>
+        public List<MSpace> ServerSpaces { get;private set; }
+        public  List<MSpace> GetPhysicalSpaces(List<string> elementIds)
+        {
+            if (ServerSpaces == null)
+            {
+                    ServerSpaces = SpaceConvert.GetFloorSpaceInfos(this.Floor?.Id).OfType<MSpace>().ToList();
+            }
+            var   spaces= ServerSpaces.Where(s => elementIds.Exists(id => id.ToString() == s.BimID.Split(':')[1])).ToList();      
+            return spaces;
+        }
+        #endregion
+
+
+        #region 初始化空间
+
+        /// <summary>
+        /// 创建空间
+        /// </summary>
+        public void CreateSpaces()
+        {
+            #region 描述
+
+            /*
+             * 创建空间分两步:
+             * 1、创建空间
+             * 2、处理冲突
+             */
+
+            #endregion
+
+            var spacePreprocessor = new SpaceFailuresPreprocessor();
+            var document = Document;
+            using (Transaction tran = new Transaction(document, "创建空间"))
+            {
+                try
+                {
+                    FailureHandlingOptions fho = tran.GetFailureHandlingOptions();
+                    fho.SetFailuresPreprocessor(spacePreprocessor);
+                    tran.SetFailureHandlingOptions(fho);
+
+                    #region 创建空间
+
+                    spacePreprocessor.SetOperate(true);
+                    tran.Start();
+                    SpaceManager.CreateSpace(document);
+
+                    tran.Commit(); //提交获取冲突代码
+
+                    #endregion
+
+                    #region 冲突处理代码
+
+                    spacePreprocessor.SetOperate(false);
+                    tran.Start();
+
+
+                    tran.Commit();
+
+                    #endregion
+                }
+                catch (Exception ex)
+                {
+
+                    MessageShow.Show(ex);
+                }
+
+            }
+        }
+
+        #endregion
+    }
+}

+ 1 - 1
MBI/SAGA.MBI/WinView/Space/SpaceFailuresPreprocessor.cs

@@ -12,7 +12,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace SAGA.MBI.WinView.Space
+namespace SAGA.MBI.WinView
 {
     /// <summary>
     /// 错误集合

+ 12 - 44
MBI/SAGA.MBI/WinView/Space/SpaceManager.cs

@@ -16,22 +16,14 @@ using SAGA.MBI.Model;
 using SAGA.RevitUtils;
 using SAGA.RevitUtils.Extends;
 
-namespace SAGA.MBI.WinView.Space
+namespace SAGA.MBI.WinView
 {
     /// <summary>
     /// 元空间管理相关模操作
     /// </summary>
     public class SpaceManager
     {
-        #region  物理世界空间管理
-        public static List<MSpace> GetPhysicalSpaces(List<string> bimIds)
-        {
-            List<MSpace> spaces = new List<MSpace>();
-
-
-            return spaces;
-        } 
-        #endregion
+      
 
         /// <summary>
         /// 更新项目中的空间分割
@@ -39,7 +31,7 @@ namespace SAGA.MBI.WinView.Space
         /// <param name="doc"></param>
         /// <param name="separations"></param>
         /// <param name="deletedIds"></param>
-        public static void UpdateSpaceSequarate(Document doc,List<SpaceSeparation> separations,List<int> deletedIds)
+        public static void UpdateSpaceSequaration(Document doc,List<SpaceSeparation> separations,List<int> deletedIds)
         {
             using (Transaction trans = new Transaction(doc, "更新空间分隔符"))
             {
@@ -111,42 +103,18 @@ namespace SAGA.MBI.WinView.Space
         /// <param name="doc"></param>
         public static void CreateSpace(Document doc)
         {
-            using (Transaction trans = new Transaction(doc, "创建空间"))
+            doc.LoadFamilySymbolExt(MBIConst.SpaceTagFamilyFilePath);
+            var view = doc.GetUseView();
+            if (view != null)
             {
-                {
-                    trans.Start();
-                    try
-                    {
-                        doc.LoadFamilySymbolExt(MBIConst.SpaceTagFamilyFilePath);
-                        FailureHandlingOptions fho = trans.GetFailureHandlingOptions();
-                        fho.SetFailuresPreprocessor(new FailuresPreprocessor());
-                        trans.SetFailureHandlingOptions(fho);
-                        var view = doc.GetUseView();
-                        if (view != null)
-                        {
-                            Parameter para = view.GetParameter(BuiltInParameter.VIEW_PHASE);
-                            ElementId phaseId = para.AsElementId();
-
-                            var phase = doc.GetElement(phaseId) as Phase;
-                            var level = view.GenLevel;
-                            //如果视图范围不对,也不能很好的创建空间
+                Parameter para = view.GetParameter(BuiltInParameter.VIEW_PHASE);
+                ElementId phaseId = para.AsElementId();
 
-                            ICollection<ElementId> elements = doc.Create.NewSpaces2(level, phase, view);
-                        }
-                        else
-                        {
-                            MessageShow.Infomation("没有找到名称以-saga结尾的平面");
-                        }
-                        //doc.Regenerate();
-                        trans.Commit();
-                    }
-                    catch (Exception e)
-                    {
-                        trans.RollBack();
-                        MessageShow.Show(e);
-                    }
-                }
+                var phase = doc.GetElement(phaseId) as Phase;
+                var level = view.GenLevel;
+                doc.Create.NewSpaces2(level, phase, view);
             }
+
         }
 
         /// <summary>

+ 3 - 1
MBI/SAGA.MBI/WinView/Space/WinCreateSpace.xaml.cs

@@ -797,6 +797,7 @@ namespace SAGA.MBI.WinView.Space
         private void Tv_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
         {
             //检测是否有未保存的数据,数据分两部分:新建的空间分隔符,删除的空间分隔符
+            #region 切换前节点处理
             if (DeletedPolylines.Count > 0 || this.canvas.Children.OfType<UIElement>().Any(el => (el is WPolyline line && line.Stroke == Brushes.Red)))
             {
                 WinConfirm confirm = new WinConfirm()
@@ -813,7 +814,8 @@ namespace SAGA.MBI.WinView.Space
                     return;
                 }
                 DeletedPolylines.Clear();
-            }
+            } 
+            #endregion
 
             if (tv.SelectedItem is TreeNodeItem item && item.Item is MFloor floor)
             {