MBIInfoUtil.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using Autodesk.Revit.DB;
  2. using SAGA.DotNetUtils.Extend;
  3. using SAGA.MBI.RequestData;
  4. using SAGA.RevitUtils.Extends;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Text.RegularExpressions;
  10. using System.Threading.Tasks;
  11. using SAGA.MBI.Common;
  12. using SAGA.MBI.DataArrange;
  13. using SAGA.MBI.JsonConvert;
  14. using SAGA.MBI.Model;
  15. using SAGA.Models;
  16. namespace SAGA.GplotRelationComputerManage
  17. {
  18. public class MBIInfoUtil
  19. {
  20. /// <summary>
  21. /// 获取现实名称
  22. /// </summary>
  23. /// <param name="fi"></param>
  24. /// <returns></returns>
  25. public static string GetShowName(Element fi)
  26. {
  27. if (fi == null)
  28. {
  29. return string.Empty;
  30. }
  31. string useName = fi.Id.ToString();
  32. if (!(fi is FamilyInstance))
  33. {
  34. return useName;
  35. }
  36. do
  37. {
  38. var floorId=fi.Document.PathName.GetFileName();
  39. string bimId = string.Format($"{floorId}:{useName}");
  40. //var equip = CommonConvert.QueryObjectById(bimId);
  41. var equip = DalCommon.QueryObjectByBIMID(bimId);
  42. if (equip != null)
  43. {
  44. var jo = equip.CloundJObject;
  45. useName = jo.GetValueEx(MBIBuiltInParameter.EquipLocalName);
  46. if (!string.IsNullOrEmpty(useName))
  47. {
  48. break;
  49. }
  50. useName = jo.GetValueEx(MBIBuiltInParameter.EquipName);
  51. if (!string.IsNullOrEmpty(useName))
  52. {
  53. break;
  54. }
  55. }
  56. useName = fi.GetFamily().Name;
  57. break;
  58. }
  59. while (false);
  60. return string.Format($"{useName}:{fi.Id.ToString()}");
  61. }
  62. /// <summary>
  63. /// 标识元素是否是设备
  64. /// </summary>
  65. /// <param name="element"></param>
  66. /// <returns></returns>
  67. public static bool IsEquipment(Element element)
  68. {
  69. if (!(element is FamilyInstance))
  70. {
  71. return false;
  72. }
  73. List<BuiltInCategory> categories = new List<BuiltInCategory>();
  74. categories.Add(BuiltInCategory.OST_PipeFitting);
  75. categories.Add(BuiltInCategory.OST_DuctFitting);
  76. if (categories.Any(c => element.Category.Id.IntegerValue == (int)c))
  77. {
  78. return false;
  79. }
  80. string familyName = element.GetFamily()?.Name ?? string.Empty;
  81. return TryGetEquipmentCategory(familyName, out string category); ;
  82. }
  83. /// <summary>
  84. /// 获取设备的分类
  85. /// </summary>
  86. /// <param name="element"></param>
  87. /// <param name="category"></param>
  88. /// <returns></returns>
  89. public static bool TryGetEquipmentCategory(Element element,out string category)
  90. {
  91. category = null;
  92. if (!(element is FamilyInstance))
  93. {
  94. return false;
  95. }
  96. List<BuiltInCategory> categories = new List<BuiltInCategory>();
  97. categories.Add(BuiltInCategory.OST_PipeFitting);
  98. categories.Add(BuiltInCategory.OST_DuctFitting);
  99. if (categories.Any(c => element.Category.Id.IntegerValue == (int)c))
  100. {
  101. return false;
  102. }
  103. string familyName = element.GetFamily()?.Name ?? string.Empty;
  104. return TryGetEquipmentCategory(familyName, out category);
  105. }
  106. /// <summary>
  107. /// 获取设备的设备分类
  108. /// </summary>
  109. /// <param name="element"></param>
  110. /// <returns></returns>
  111. public static string GetEquipmentCategory(Element element)
  112. {
  113. string category = null;
  114. if (!(element is FamilyInstance fi))
  115. {
  116. return category;
  117. }
  118. string familyName = fi.GetFamily()?.Name;
  119. TryGetEquipmentCategory(familyName,out category);
  120. return category;
  121. }
  122. /// <summary>
  123. /// 截取指定字符串的category信息【如果不符合规范返回null】
  124. /// </summary>
  125. /// <param name="name"></param>
  126. /// <returns></returns>
  127. public static string GetEquipmentCategory(string name)
  128. {
  129. string category;
  130. TryGetEquipmentCategory(name, out category);
  131. return category;
  132. }
  133. public static bool TryGetEquipmentCategory(string name, out string category)
  134. {
  135. bool result = false;
  136. category = null;
  137. if (string.IsNullOrWhiteSpace(name))
  138. return result;
  139. var match = Regex.Match(name, @"^(?:((?:[A-Z][A-Z]){2,3})\s*-\s*\S*)");
  140. if (match.Success)
  141. {
  142. category = match.Groups[1].ToString();
  143. result = true;
  144. }
  145. return result;
  146. }
  147. /// <summary>
  148. /// 通过标高名称获取楼层名称
  149. /// </summary>
  150. /// <param name="levelName"></param>
  151. /// <returns></returns>
  152. public static string GetFloorNameByLevel(string levelName)
  153. {
  154. return levelName.Replace(AppSetting.ViewSuffix, "");
  155. }
  156. /// <summary>
  157. /// 获取当前项目下的楼层信息
  158. /// </summary>
  159. /// <returns></returns>
  160. public static List<MBIFloorInfo> GetFloors()
  161. {
  162. List<MBIFloorInfo> result = new List<MBIFloorInfo>();
  163. MProject project = MBIControl.ProjectCur;
  164. var projectId = project.Id;
  165. List<MBuilding> buildings = ModeFileConvert.GetProjectBuildings(projectId);
  166. foreach (var mBuilding in buildings)
  167. {
  168. List<MFloor> floors = ModeFileConvert.GetBuildingFloors(mBuilding.Id);
  169. foreach (MFloor floor in floors)
  170. {
  171. MBIFloorInfo info = new MBIFloorInfo();
  172. info.BuildingId = mBuilding.Id;
  173. info.BuildingName = mBuilding.LocalName;
  174. info.FloorId = floor.Id;
  175. info.FloorName = floor.LocalName;
  176. result.Add(info);
  177. }
  178. }
  179. return result;
  180. }
  181. public static string GetBuildingName(string floorId)
  182. {
  183. return DalProjectTree.GetBuildingByFloor(floorId)?.LocalName;
  184. }
  185. public static string GetBuildingId(string floorId)
  186. {
  187. return DalProjectTree.GetBuildingIdByFloor(floorId);
  188. }
  189. public static string GetProjectName(string floorId)
  190. {
  191. return null;
  192. }
  193. public static string GetProjectId(string floorId)
  194. {
  195. return null;
  196. }
  197. }
  198. }