MBIInfoUtil.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. namespace SAGA.GplotRelationComputerManage
  16. {
  17. public class MBIInfoUtil
  18. {
  19. /// <summary>
  20. /// 获取现实名称
  21. /// </summary>
  22. /// <param name="fi"></param>
  23. /// <returns></returns>
  24. public static string GetShowName(Element fi)
  25. {
  26. if (fi == null)
  27. {
  28. return string.Empty;
  29. }
  30. string useName = fi.Id.ToString();
  31. if (!(fi is FamilyInstance))
  32. {
  33. return useName;
  34. }
  35. do
  36. {
  37. var floorId=fi.Document.PathName.GetFileName();
  38. string bimId = string.Format($"{floorId}:{useName}");
  39. //var equip = CommonConvert.QueryObjectById(bimId);
  40. var equip = DalCommon.QueryObjectByBIMID(bimId);
  41. if (equip != null)
  42. {
  43. var jo = equip.CloundJObject;
  44. useName = jo.GetValueEx("EquipLocalName");
  45. if (!string.IsNullOrEmpty(useName))
  46. {
  47. break;
  48. }
  49. useName = jo.GetValueEx("EquipName");
  50. if (!string.IsNullOrEmpty(useName))
  51. {
  52. break;
  53. }
  54. }
  55. useName = fi.GetFamily().Name;
  56. break;
  57. }
  58. while (false);
  59. return string.Format($"{useName}:{fi.Id.ToString()}");
  60. }
  61. /// <summary>
  62. /// 标识元素是否是设备
  63. /// </summary>
  64. /// <param name="element"></param>
  65. /// <returns></returns>
  66. public static bool IsEquipment(Element element)
  67. {
  68. if (!(element is FamilyInstance))
  69. {
  70. return false;
  71. }
  72. List<BuiltInCategory> categories = new List<BuiltInCategory>();
  73. categories.Add(BuiltInCategory.OST_PipeFitting);
  74. categories.Add(BuiltInCategory.OST_DuctFitting);
  75. if (categories.Any(c => element.Category.Id.IntegerValue == (int)c))
  76. {
  77. return false;
  78. }
  79. string familyName = element.GetFamily()?.Name ?? string.Empty;
  80. var match = Regex.Match(familyName, @"^(?:((?:[A-Z][A-Z]){2,3})\s*-\s*\S*)");
  81. return match.Success;
  82. }
  83. /// <summary>
  84. /// 通过标高名称获取楼层名称
  85. /// </summary>
  86. /// <param name="levelName"></param>
  87. /// <returns></returns>
  88. public static string GetFloorNameByLevel(string levelName)
  89. {
  90. return levelName.Replace(AppSetting.ViewSuffix, "");
  91. }
  92. /// <summary>
  93. /// 获取当前项目下的楼层信息
  94. /// </summary>
  95. /// <returns></returns>
  96. public static List<MBIFloorInfo> GetFloors()
  97. {
  98. List<MBIFloorInfo> result = new List<MBIFloorInfo>();
  99. MProject project = MBIControl.ProjectCur;
  100. var projectId = project.Id;
  101. List<MBuilding> buildings = ModeFileConvert.GetProjectBuildings(projectId);
  102. foreach (var mBuilding in buildings)
  103. {
  104. List<MFloor> floors = ModeFileConvert.GetBuildingFloors(mBuilding.Id);
  105. foreach (MFloor floor in floors)
  106. {
  107. MBIFloorInfo info = new MBIFloorInfo();
  108. info.BuildingId = mBuilding.Id;
  109. info.BuildingName = mBuilding.LocalName;
  110. info.FloorId = floor.Id;
  111. info.FloorName = floor.LocalName;
  112. result.Add(info);
  113. }
  114. }
  115. return result;
  116. }
  117. }
  118. }