using Autodesk.Revit.DB; using HStation.Model; using HStation.RevitDev.Model.AttributeClass; using HStation.RevitDev.Model.Common; using HStation.RevitDev.Model.ModelEnum; using HStation.RevitDev.RevitDataExport.Common; using Newtonsoft.Json.Linq; using System; using System.Reflection; namespace HStation.RevitDev.RevitDataExport.Utility { public class ExportModelHelper { Document m_doc; public ExportModelHelper(Document doc) { m_doc = doc; } public string Export() { var modelMap = GlobalResource.RevitModels; JObject jobj = new JObject(); jobj["名称"] = m_doc.PathName; jobj["描述"] = m_doc.PathName; foreach (var modelPair in modelMap) { var revitType = modelPair.Key; var jArray = ExportRevitModel(revitType); string propName = GetRevitModelPropertyName(revitType); JArray array = jobj[propName] as JArray; if (array == null) { jobj[propName] = jArray; } else { foreach (var item in jArray) { array.Add(item); } } } return jobj.ToString(); } private string GetRevitModelPropertyName(RevitType revitType) { Type revitModelType = typeof(RevitModel); ExportType expType = ElementTypeMapping.GetExportType(revitType); var props = revitModelType.GetProperties(); foreach (var prop in props) { var attr = prop.GetCustomAttribute(); if (attr == null) { continue; } var attrExpType = attr.m_exportType; if (expType == attrExpType) { return prop.Name; } } return null; } private JArray ExportRevitModel(RevitType revitType) { var revitModels = GlobalResource.RevitModels[revitType]; var outElems = new JArray(); foreach (var elemId in revitModels) { ElementId id = null; if (int.TryParse(elemId, out int elementId)) { id = new ElementId(elementId); } Element rvtElem = m_doc.GetElement(id); if (rvtElem == null) { continue; } JObject outElem = rvtElem.Export(revitType); outElems.Add(outElem); } return outElems; } } }