|
@@ -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];
|