SystemCalcUtil.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:SystemCalcUtil
  3. * 作者:xulisong
  4. * 创建时间: 2019/1/2 17:55:55
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using Autodesk.Revit.DB;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Text.RegularExpressions;
  14. using System.Threading.Tasks;
  15. using Newtonsoft.Json.Linq;
  16. using SAGA.DotNetUtils.Cache;
  17. using SAGA.MBI.RequestData;
  18. using SAGA.Models;
  19. using SAGA.RevitUtils.Extends;
  20. using MBIEquipItem = SAGA.Models.EquipmentItem;
  21. namespace SAGA.GplotRelationComputerManage
  22. {
  23. /// <summary>
  24. /// 系统计算相关
  25. /// </summary>
  26. public class SystemCalcUtil
  27. {
  28. /// <summary>
  29. /// 判断元素是否是开始元素
  30. /// </summary>
  31. /// <param name="element"></param>
  32. /// <returns></returns>
  33. public static bool IsStart(Element element)
  34. {
  35. if (element is FamilyInstance)
  36. {
  37. var name = element.GetFamily().Name;
  38. return Regex.IsMatch(name, AppSetting.FamilyStartFlag);
  39. }
  40. return (element.GetParameterString(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS)??string.Empty).StartsWith(AppSetting.StartFlag);
  41. }
  42. /// <summary>
  43. /// 判定元素是否是特殊阀门
  44. /// </summary>
  45. /// <param name="element"></param>
  46. /// <returns></returns>
  47. public static bool IsStartValve(Element element)
  48. {
  49. if (element is FamilyInstance)
  50. {
  51. var name = element.GetFamily().Name;
  52. return Regex.IsMatch(name, AppSetting.FamilyStartFlag);
  53. }
  54. return false;
  55. }
  56. /// <summary>
  57. /// 判定元素是否是特殊阀门
  58. /// </summary>
  59. /// <param name="name"></param>
  60. /// <returns></returns>
  61. public static bool IsStartValveName(string name)
  62. {
  63. if (!string.IsNullOrWhiteSpace(name))
  64. {
  65. return Regex.IsMatch(name, AppSetting.FamilyStartFlag);
  66. }
  67. return false;
  68. }
  69. /// <summary>
  70. /// 创建房间缓冲集合
  71. /// </summary>
  72. /// <returns></returns>
  73. public static CacheItems<string,RoomItem> CreateRoomItems()
  74. {
  75. CacheItems<string, RoomItem> items = new CacheItems<string, RoomItem>((s) =>
  76. {
  77. var rooms = new Dictionary<string, RoomItem>();
  78. var str = new string[] {MBIBuiltInCategory.Si};
  79. List<JObject> datas = CommonConvert.QueryObjectInfoByTypes(str);
  80. foreach (var data in datas)
  81. {
  82. var roomItem = MBIItemFactory.Create<RoomItem>(data);
  83. rooms[roomItem.BimId] = roomItem;
  84. }
  85. return rooms;
  86. });
  87. return items;
  88. }
  89. /// <summary>
  90. /// 创建楼层缓冲集合
  91. /// </summary>
  92. /// <returns></returns>
  93. public static CacheItems<string, FloorSystemItem> CreateFloorItems()
  94. {
  95. CacheItems<string, FloorSystemItem> items = new CacheItems<string, FloorSystemItem>(null, (path) =>
  96. {
  97. var floorId = Path.GetFileNameWithoutExtension(path);
  98. Dictionary<string, FloorSystemItem> miss = new Dictionary<string, FloorSystemItem>();
  99. if (File.Exists(path))
  100. {
  101. var uiApp = ExternalDataWrapper.Current.UiApp.Application;
  102. var doc = uiApp.OpenDocumentFile(path);
  103. var floor = new FloorSystemItem(doc);
  104. miss[floorId] = floor;
  105. }
  106. return miss;
  107. }, Path.GetFileNameWithoutExtension);
  108. return items;
  109. }
  110. /// <summary>
  111. /// 创建关系类型壳对象
  112. /// </summary>
  113. /// <returns></returns>
  114. public static CacheItems<string, RelationTypeShell> CreateRelationShellItems()
  115. {
  116. CacheItems<string, RelationTypeShell> items = new CacheItems<string, RelationTypeShell>((s) =>
  117. {
  118. var shells = new Dictionary<string, RelationTypeShell>();
  119. foreach (var relationItem in RelationTypeManager.Items)
  120. {
  121. shells[relationItem.Type] = new RelationTypeShell(relationItem);
  122. }
  123. return shells;
  124. });
  125. return items;
  126. }
  127. /// <summary>
  128. /// 创建设备缓存对象
  129. /// </summary>
  130. /// <returns></returns>
  131. public static CacheItems<string, MBIEquipItem> CreateEquipmentItems()
  132. {
  133. CacheItems<string, MBIEquipItem> items = new CacheItems<string, MBIEquipItem>((s) =>
  134. {
  135. var equipmentItems = new Dictionary<string, MBIEquipItem>();
  136. var types = new string[] { MBIBuiltInCategory.Eq };
  137. List<JObject> equipDatas = CommonConvert.QueryObjectInfoByTypes(types);
  138. foreach (var jobject in equipDatas)
  139. {
  140. var item = MBIItemFactory.Create<MBIEquipItem>(jobject);
  141. if (item != null && !string.IsNullOrWhiteSpace(item.BimId))
  142. {
  143. equipmentItems[item.BimId]= item;
  144. }
  145. }
  146. return equipmentItems;
  147. });
  148. return items;
  149. }
  150. }
  151. }