ConduitExtension.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using Autodesk.Revit.DB;
  2. using Autodesk.Revit.DB.Electrical;
  3. using FWindSoft.SystemExtensions;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace FWindSoft.Revit
  10. {
  11. /// <summary>
  12. /// 线管相关类型扩展
  13. /// </summary>
  14. public static class ConduitExtension
  15. {
  16. /// <summary>
  17. /// 获取项目中所有线管类型
  18. /// </summary>
  19. /// <param name="doc"></param>
  20. /// <returns></returns>
  21. public static List<ConduitType> GetConduitTypes(this Document doc)
  22. {
  23. List<ConduitType> list = doc.GetElements<ConduitType>();
  24. return list;
  25. }
  26. /// <summary>
  27. /// 获取线管类型
  28. /// </summary>
  29. /// <param name="typeName"></param>
  30. /// <returns></returns>
  31. public static ConduitType GetConduitType(this Document doc, string typeName)
  32. {
  33. var list = doc.GetConduitTypes();
  34. if (list == null)
  35. return default(ConduitType);
  36. ConduitType wireTye = list.FirstOrDefault(t => t.Name.Equals(typeName));
  37. return wireTye ?? list[0].DuplicateT<ConduitType>(typeName);
  38. }
  39. /// <summary>
  40. /// 获取较较大直径的线管
  41. /// </summary>
  42. /// <param name="first"></param>
  43. /// <param name="second"></param>
  44. /// <returns></returns>
  45. public static Conduit GetLargerDiameter(this Conduit first, Conduit second)
  46. {
  47. return first.Diameter.MoreEqual(second.Diameter)
  48. ? first
  49. : second;
  50. }
  51. /// <summary>
  52. /// 获取较较小直径的线管
  53. /// </summary>
  54. /// <param name="first"></param>
  55. /// <param name="second"></param>
  56. /// <returns></returns>
  57. public static Conduit GetSmallerDiameter(this Conduit first, Conduit second)
  58. {
  59. return first.Diameter.LessEqual(second.Diameter)
  60. ? first
  61. : second;
  62. }
  63. /// <summary>
  64. /// 获取线管类型可使用的直径尺寸
  65. /// </summary>
  66. /// <param name="conduitType">线管类型</param>
  67. /// <returns></returns>
  68. public static List<ConduitSize> GetConduitSizes(this ConduitType conduitType)
  69. {
  70. var document = conduitType.Document;
  71. var standard = document.GetElement(conduitType.GetParameterElementId(BuiltInParameter.CONDUIT_STANDARD_TYPE_PARAM));
  72. var standardName = standard.Name.Trim();
  73. ConduitSizeSettings sizeSettings = ConduitSizeSettings.GetConduitSizeSettings(document);
  74. ConduitSizes useConduitSizes = null;
  75. foreach (var sizeItem in sizeSettings)
  76. {
  77. if (sizeItem.Key.Trim() == standardName)
  78. {
  79. useConduitSizes = sizeItem.Value;
  80. break;
  81. }
  82. }
  83. List<ConduitSize> conduitSizes = new List<ConduitSize>();
  84. if (useConduitSizes == null)
  85. {
  86. return conduitSizes;
  87. }
  88. foreach (var size in useConduitSizes)
  89. {
  90. conduitSizes.Add(size);
  91. }
  92. return conduitSizes;
  93. }
  94. }
  95. }