ExportDataBuilder.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:ExportDataBuilder
  3. * 作者:xulisong
  4. * 创建时间: 2019/6/24 9:59:47
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using Autodesk.Revit.DB;
  8. using Autodesk.Revit.DB.Mechanical;
  9. using Autodesk.Revit.DB.Plumbing;
  10. using RevitExport.Export;
  11. using RevitToJBim.Common;
  12. using SAGA.RevitUtils.Extends;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. namespace RevitToJBim
  19. {
  20. public class ExportDataBuilder
  21. {
  22. /// <summary>
  23. /// 创建数据源
  24. /// </summary>
  25. /// <returns></returns>
  26. public static List<ElementWrapper> CreateExportData(Document doc)
  27. {
  28. List<ElementWrapper> wrappers = new List<ElementWrapper>();
  29. //应对传入元素,不是document全集的情况
  30. //FilteredElementCollector collector = new FilteredElementCollector(doc, elements.Select(e => e.Id).ToList());
  31. #region Unit
  32. var formatOptions = doc.GetUnits().GetFormatOptions(UnitType.UT_Length);
  33. ElementWrapper wrapper = new ElementWrapper(formatOptions, null);
  34. wrappers.Add(wrapper);
  35. #endregion
  36. FilteredElementCollector collector = new FilteredElementCollector(doc);
  37. wrappers.AddRange(collector.Clone().FilterElements<Wall>().Select(e => new ElementWrapper(e)));
  38. wrappers.AddRange(collector.Clone().FilterElements<CurveElement>(BuiltInCategory.OST_MEPSpaceSeparationLines).Select(e => new ElementWrapper(e)));
  39. var sourceSpaces = collector.Clone().FilterElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).OfType<Space>().ToList();
  40. //附加逻辑判断
  41. // var originSpaces = collector.Clone().GetUseSpaces();
  42. wrappers.AddRange(sourceSpaces.Select(e => new ElementWrapper(e)));
  43. wrappers.AddRange(collector.Clone().FilterElements<Pipe>().Select(e => new ElementWrapper(e)));
  44. wrappers.AddRange(collector.Clone().FilterElements<Duct>().Select(e => new ElementWrapper(e)));
  45. var familyInstances = collector.Clone().FilterElements<FamilyInstance>();
  46. foreach (FamilyInstance familyInstance in familyInstances)
  47. {
  48. var tempWrapper = ElementWrapperFactory.CreateWrapper(familyInstance);
  49. if (tempWrapper != null)
  50. {
  51. wrappers.Add(tempWrapper);
  52. }
  53. }
  54. wrappers.AddRange(collector.Clone().FilterElements<Level>().Select(e => new ElementWrapper(e)));
  55. wrappers.AddRange(collector.Clone().FilterElements<Grid>().Select(e => new ElementWrapper(e)));
  56. return wrappers;
  57. }
  58. }
  59. }