1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Autodesk.Revit.DB;
- using SAGA.MBI.Common;
- using SAGA.RevitUtils.Extends;
- namespace SAGA.MBI.RevitExport
- {
- public class ExportData
- {
- public ExportData()
- {
- All = new List<RevitElementWrapper>();
- Walls = new List<RevitElementWrapper>();
- Spaces = new List<RevitElementWrapper>();
- Columns = new List<RevitElementWrapper>();
- VirtualWalls = new List<RevitElementWrapper>();
- Equipments = new List<RevitElementWrapper>();
- }
- public List<RevitElementWrapper> All { get; set; }
- public List<RevitElementWrapper> Walls { get; set; }
- public List<RevitElementWrapper> Spaces { get; set; }
- public List<RevitElementWrapper> Columns { get; set; }
- public List<RevitElementWrapper> VirtualWalls { get; set; }
- public List<RevitElementWrapper> Equipments { get; set; }
- }
- public class ExportDataBuilder
- {
- /// <summary>
- /// 创建数据源
- /// </summary>
- /// <returns></returns>
- public static ExportData CreateExportData(Document doc)
- {
- ExportData data = new ExportData();
- FilteredElementCollector collector = new FilteredElementCollector(doc);
- return data = CreateExportData(collector);
- }
- /// <summary>
- /// 导出相关数据
- /// </summary>
- /// <param name="elements"></param>
- /// <returns></returns>
- public static ExportData CreateExportData(List<Element> elements)
- {
- ExportData data = new ExportData();
- if (elements == null || !elements.Any())
- return data;
- var doc = elements[0].Document;
- FilteredElementCollector collector = new FilteredElementCollector(doc, elements.Select(e => e.Id).ToList());
- return data = CreateExportData(collector);
- }
- public static ExportData CreateExportData(FilteredElementCollector collector)
- {
- ExportData data = new ExportData();
- data.All = new List<RevitElementWrapper>();
- data.Walls.AddRange(collector.Clone().FilterElements<Wall>().Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.Wall }));
- data.VirtualWalls.AddRange(collector.Clone().FilterElements<CurveElement>(BuiltInCategory.OST_MEPSpaceSeparationLines).Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.VirtualWall }));
- // data.Spaces.AddRange(collector.Clone().FilterElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.Space }));
- //增加空间排序功能
- var originSpaces = collector.Clone().GetUseSpaces();
- var useSpaces = SpaceSortUtils.Sort(originSpaces);
- data.Spaces.AddRange(useSpaces.Select(e => new RevitElementWrapper(e) { Category = MbiElementCategory.Space }));
- var familyInstances = collector.Clone().FilterElements<FamilyInstance>();
- foreach (FamilyInstance familyInstance in familyInstances)
- {
- var category = familyInstance.Category.Id.IntegerValue;
- if (category == (int)BuiltInCategory.OST_Columns || category == (int)BuiltInCategory.OST_StructuralColumns)
- {
- data.Columns.Add(new RevitElementWrapper(familyInstance) { Category = MbiElementCategory.Column });
- }
- else
- {
- data.Equipments.Add(new RevitElementWrapper(familyInstance) { Category = MbiElementCategory.Equipment });
- }
- }
- #region 要不要继续这么写,还是改掉
- data.All.AddRange(data.Walls);
- data.All.AddRange(data.VirtualWalls);
- data.All.AddRange(data.Spaces);
- data.All.AddRange(data.Columns);
- data.All.AddRange(data.Equipments);
- #endregion
- return data;
- }
- }
-
- }
|