Parcourir la source

Merge branch 'master' of https://git.dev.tencent.com/xuhuo1234/saga

mengxiangge il y a 6 ans
Parent
commit
036b1cde00

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

@@ -172,6 +172,7 @@
     <Compile Include="SystemChecks\Model\ModelConverterUtil.cs" />
     <Compile Include="SystemChecks\Model\SystemCheckResultItem.cs" />
     <Compile Include="SystemChecks\Model\SystemCheckReportItem.cs" />
+    <Compile Include="SystemRelation\Common\EquipmentConnectionItem.cs" />
     <Compile Include="SystemRelation\Common\PointItemType.cs" />
     <Compile Include="SystemRelation\Common\RelationTypeUtil.cs" />
     <Compile Include="SystemRelation\Common\SystemCalcUtil.cs" />

+ 50 - 0
MBI/SAGA.GplotRelationComputerManage/SystemRelation/Common/EquipmentConnectionItem.cs

@@ -0,0 +1,50 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:EquipmentConnectionItem
+ * 作者:xulisong
+ * 创建时间: 2019/5/30 16:35:33
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Autodesk.Revit.DB;
+using SAGA.RevitUtils.Extends;
+
+namespace SAGA.GplotRelationComputerManage
+{
+    /// <summary>
+    /// 设备连接关系相关
+    /// </summary>
+    public class EquipmentConnectionItem
+    {
+        public EquipmentConnectionItem()
+        { }
+
+        public EquipmentConnectionItem(Connector connector)
+        {
+            Equipment = connector.Owner;
+            Domain = connector.Domain;
+            SystemTypeName=connector.MEPSystem?.GetParameter(BuiltInParameter.ELEM_TYPE_PARAM)?.AsValueString()??string.Empty;
+        }
+        /// <summary>
+        /// 关联设备
+        /// </summary>
+        public Element Equipment { get; set; }
+
+        /// <summary>
+        /// 连接域
+        /// </summary>
+        public Domain Domain { get; set; }
+        /// <summary>
+        /// 系统类型名称
+        /// </summary>
+        public string SystemTypeName { get; set; }
+        /// <summary>
+        /// 标记是否使用
+        /// </summary>
+        internal bool Used { get; set; }
+    }
+}

+ 74 - 15
MBI/SAGA.GplotRelationComputerManage/SystemRelation/FloorSystemItem.cs

@@ -164,22 +164,19 @@ namespace SAGA.GplotRelationComputerManage
 
         #region 设备节点获取
 
-        /// <summary>
-        /// 模型中包含的设备
-        /// </summary>
-        public Dictionary<string, List<FamilyInstance>> RevitEquipments { get; private set; }
-
+        private List<EquipmentConnectionItem> m_ConnectionItems ;
         /// <summary>
         /// 通过设备类型获取相关设备
         /// </summary>
         /// <returns></returns>
-        private List<FamilyInstance> GetEquipments(string category)
+        private List<FamilyInstance> GetEquipments(Domain domain,RelationTypeShell shell)
         {
-            if (RevitEquipments == null)
+            #region 初始化
+            if (m_ConnectionItems == null)
             {
+                var tempItems = new List<EquipmentConnectionItem>();
                 var doc = Document;
                 var fies = doc.FilterElements<FamilyInstance>();
-                List<StringFlag<FamilyInstance>> original = new List<StringFlag<FamilyInstance>>();
                 foreach (var familyInstance in fies)
                 {
                     var familyName = familyInstance.GetFamily().Name;
@@ -188,17 +185,80 @@ namespace SAGA.GplotRelationComputerManage
                     var match = Regex.Match(familyName, @"^(?:((?:[A-Z][A-Z]){2,3})\s*-\s*\S*)");
                     if (match.Success)
                     {
-                        original.Add(new StringFlag<FamilyInstance>(match.Groups[1].ToString(), familyInstance));
+                        var connectors = familyInstance.GetAllConnectors();
+                        foreach (var connector in connectors)
+                        {
+                            try
+                            {
+                                if (connector.IsConnected && (connector.Domain == Domain.DomainPiping || connector.Domain == Domain.DomainHvac))
+                                {
+                                    tempItems.Add(new EquipmentConnectionItem(connector));
+                                }
+                            }
+                            catch (Exception)
+                            {
+
+                            }
+                        }
                     }
                 }
+                m_ConnectionItems = tempItems;
+            }
+            #endregion
 
-                RevitEquipments = original.GroupBy(f => f.Flag)
-                    .ToDictionary(g => g.Key, g => g.ToList().Select(f => f.Instance).ToList());
+            List<FamilyInstance> result = new List<FamilyInstance>();
+            foreach (var connectionItem in m_ConnectionItems)
+            {
+                if (connectionItem.Used)
+                {
+                    continue;
+                }
+                if (connectionItem.Domain == domain && shell.IsMatchSystem(connectionItem.SystemTypeName)&&connectionItem.Equipment is FamilyInstance equipment)
+                {
+                    result.Add(equipment);
+                    connectionItem.Used = true;
+                }
             }
 
-            RevitEquipments.TryGetValue(category, out List<FamilyInstance> result);
-            return result ?? new List<FamilyInstance>();
+            return result.Distinct().ToList();
         }
+        #region 过时
+        ///// <summary>
+        ///// 模型中包含的设备
+        ///// </summary>
+        //public Dictionary<string, List<FamilyInstance>> RevitEquipments { get; private set; }
+
+        ///// <summary>
+        ///// 通过设备类型获取相关设备
+        ///// </summary>
+        ///// <returns></returns>
+        //private List<FamilyInstance> GetEquipments(string category)
+        //{
+        //    if (RevitEquipments == null)
+        //    {
+        //        var doc = Document;
+        //        var fies = doc.FilterElements<FamilyInstance>();
+        //        List<StringFlag<FamilyInstance>> original = new List<StringFlag<FamilyInstance>>();
+        //        foreach (var familyInstance in fies)
+        //        {
+        //            var familyName = familyInstance.GetFamily().Name;
+        //            if (string.IsNullOrEmpty(familyName))
+        //                continue;
+        //            var match = Regex.Match(familyName, @"^(?:((?:[A-Z][A-Z]){2,3})\s*-\s*\S*)");
+        //            if (match.Success)
+        //            {
+        //                original.Add(new StringFlag<FamilyInstance>(match.Groups[1].ToString(), familyInstance));
+        //            }
+        //        }
+
+        //        RevitEquipments = original.GroupBy(f => f.Flag)
+        //            .ToDictionary(g => g.Key, g => g.ToList().Select(f => f.Instance).ToList());
+        //    }
+
+        //    RevitEquipments.TryGetValue(category, out List<FamilyInstance> result);
+        //    return result ?? new List<FamilyInstance>();
+        //} 
+        #endregion
 
         #endregion
 
@@ -299,8 +359,7 @@ namespace SAGA.GplotRelationComputerManage
             #endregion
 
             //获取没有使用过的对象节点
-            List<FamilyInstance> singleInstances =
-                relationSetting.RelationItem.Objects.SelectMany(o => GetEquipments(o.Type)).ToList();
+            List<FamilyInstance> singleInstances = GetEquipments(useDomain, relationSetting);    
             for (int i = 0; i < singleInstances.Count; i++)
             {
                 var useInstance = singleInstances[i];