ElementWrapperFactory.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:ElementWrapperFactory
  3. * 作者:xulisong
  4. * 创建时间: 2019/6/24 8:44:46
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Autodesk.Revit.DB;
  13. using RevitExport;
  14. using RevitExport.Export;
  15. using SAGA.RevitUtils.Extends;
  16. using SAGA.RevitUtils.MEP;
  17. namespace RevitToJBim.Common
  18. {
  19. /// <summary>
  20. /// 解析对象创建工厂
  21. /// </summary>
  22. public class ElementWrapperFactory
  23. {
  24. /// <summary>
  25. /// 根据element创建带分类对象的解析信息。便于快速过滤
  26. /// </summary>
  27. /// <param name="element"></param>
  28. /// <returns></returns>
  29. public static ElementWrapper CreateWrapper(Element element)
  30. {
  31. if (element is FamilyInstance fi)
  32. {
  33. CreateWrapper(fi);
  34. }
  35. return new ElementWrapper(element);
  36. }
  37. /// <summary>
  38. /// 创建FamilyInstance的wrapper
  39. /// </summary>
  40. /// <param name="familyInstance"></param>
  41. /// <returns></returns>
  42. public static ElementWrapper CreateWrapper(FamilyInstance familyInstance)
  43. {
  44. var useFamilyType = FamilyType.Undefine;
  45. var category = familyInstance.Category;
  46. if (category != null)
  47. {
  48. var enumValue = (BuiltInCategory)category.Id.IntegerValue;
  49. #region category转换
  50. switch (enumValue)
  51. {
  52. case BuiltInCategory.OST_Doors:
  53. {
  54. useFamilyType = FamilyType.Door;
  55. break;
  56. }
  57. case BuiltInCategory.OST_Windows:
  58. {
  59. useFamilyType = FamilyType.Window;
  60. break;
  61. }
  62. case BuiltInCategory.OST_Columns:
  63. {
  64. useFamilyType = FamilyType.Column;
  65. break;
  66. }
  67. }
  68. #endregion
  69. }
  70. if (useFamilyType == FamilyType.Undefine)
  71. {
  72. //判断部件和设备
  73. var family = familyInstance.GetFamily();
  74. ///todo
  75. }
  76. if (useFamilyType == FamilyType.Undefine)
  77. {
  78. var connectors = familyInstance.GetAllConnectors();
  79. if (connectors.Any(c => c.Domain == Domain.DomainHvac || c.Domain == Domain.DomainPiping))
  80. {
  81. useFamilyType = FamilyType.Other;
  82. }
  83. }
  84. if (useFamilyType == FamilyType.Undefine)
  85. {
  86. return null;
  87. }
  88. ElementWrapper wrapper = new ElementWrapper(familyInstance);
  89. wrapper.Category = CategoryGenerator.BuildingCategory(useFamilyType);
  90. return wrapper;
  91. }
  92. }
  93. }