ExportData.cs 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Autodesk.Revit.DB;
  5. using SAGA.MBI.Common;
  6. using SAGA.RevitUtils.Extends;
  7. namespace SAGA.MBI.RevitExport
  8. {
  9. public class ExportData
  10. {
  11. public ExportData()
  12. {
  13. All = new List<RevitElementWrapper>();
  14. Walls = new List<RevitElementWrapper>();
  15. Spaces = new List<RevitElementWrapper>();
  16. Columns = new List<RevitElementWrapper>();
  17. VirtualWalls = new List<RevitElementWrapper>();
  18. Equipments = new List<RevitElementWrapper>();
  19. }
  20. public List<RevitElementWrapper> All { get; set; }
  21. public List<RevitElementWrapper> Walls { get; set; }
  22. public List<RevitElementWrapper> Spaces { get; set; }
  23. public List<RevitElementWrapper> Columns { get; set; }
  24. public List<RevitElementWrapper> VirtualWalls { get; set; }
  25. public List<RevitElementWrapper> Equipments { get; set; }
  26. }
  27. public class ExportDataBuilder
  28. {
  29. /// <summary>
  30. /// 创建数据源
  31. /// </summary>
  32. /// <returns></returns>
  33. public static ExportData CreateExportData(Document doc)
  34. {
  35. ExportData data = new ExportData();
  36. FilteredElementCollector collector = new FilteredElementCollector(doc);
  37. return data = CreateExportData(collector);
  38. }
  39. /// <summary>
  40. /// 导出相关数据
  41. /// </summary>
  42. /// <param name="elements"></param>
  43. /// <returns></returns>
  44. public static ExportData CreateExportData(List<Element> elements)
  45. {
  46. ExportData data = new ExportData();
  47. if (elements == null || !elements.Any())
  48. return data;
  49. var doc = elements[0].Document;
  50. FilteredElementCollector collector = new FilteredElementCollector(doc, elements.Select(e => e.Id).ToList());
  51. return data = CreateExportData(collector);
  52. }
  53. public static ExportData CreateExportData(FilteredElementCollector collector)
  54. {
  55. ExportData data = new ExportData();
  56. data.All = new List<RevitElementWrapper>();
  57. data.Walls.AddRange(collector.Clone().FilterElements<Wall>().Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.Wall }));
  58. data.VirtualWalls.AddRange(collector.Clone().FilterElements<CurveElement>(BuiltInCategory.OST_MEPSpaceSeparationLines).Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.VirtualWall }));
  59. // data.Spaces.AddRange(collector.Clone().FilterElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.Space }));
  60. //增加空间排序功能
  61. var originSpaces = collector.Clone().GetUseSpaces();
  62. var useSpaces = SpaceSortUtils.Sort(originSpaces);
  63. data.Spaces.AddRange(useSpaces.Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.Space }));
  64. var familyInstances = collector.Clone().FilterElements<FamilyInstance>();
  65. foreach (FamilyInstance familyInstance in familyInstances)
  66. {
  67. var category = familyInstance.Category.Id.IntegerValue;
  68. if (category == (int)BuiltInCategory.OST_Columns || category == (int)BuiltInCategory.OST_StructuralColumns)
  69. {
  70. data.Columns.Add(new RevitElementWrapper(familyInstance) { Category = MbiElementCategory.Column });
  71. }
  72. else
  73. {
  74. data.Equipments.Add(new RevitElementWrapper(familyInstance) { Category = MbiElementCategory.Equipment });
  75. }
  76. }
  77. #region 要不要继续这么写,还是改掉
  78. data.All.AddRange(data.Walls);
  79. data.All.AddRange(data.VirtualWalls);
  80. data.All.AddRange(data.Spaces);
  81. data.All.AddRange(data.Columns);
  82. data.All.AddRange(data.Equipments);
  83. #endregion
  84. return data;
  85. }
  86. }
  87. }