/*------------------------------------------------------------------------- * 功能描述:ParseCore * 作者:xulisong * 创建时间: 2019/6/13 18:03:03 * 版本号:v1.0 * -------------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using JBIM; using JBIM.Component; using JBIM.Definition; using RevitExport; using RevitExport.Export; using RevitToJBim.Common; using RevitToJBim.ParseData; using SAGA.RevitUtils.Extends; using JConnector = JBIM.Component.Connector; namespace RevitToJBim.ComponentParse { /* * 核心解析类不解析关系 */ /// /// 核心解析类 /// public class ParseCore { //获取可用的解析类 public static List GetUseParsers() { List result = new List(); Assembly assembly = Assembly.GetCallingAssembly(); Type[] types = assembly.GetTypes(); foreach (var type in types) { if (typeof(ParseBase).IsAssignableFrom (type)) { if (type.IsAbstract || type.IsGenericTypeDefinition) continue; var attribute = type.GetCustomAttribute(); if (attribute == null) continue; var construstor = type.GetConstructor(Type.EmptyTypes); if (construstor == null) continue; if (construstor.Invoke(null) is ParseBase parse) result.Add(parse); } } return result; } public static void AttachObject(ComponentObject bimObj, ElementWrapper wrapper) { bimObj.SourceId = wrapper.SourceId; bimObj.Name = wrapper.RefElement?.Name; } public static JConnector CreateConnector(Autodesk.Revit.DB.Connector connector) { var result= new JConnector(); result.SourceId = RevitIdGenerator.GetConnectorId(connector); switch (connector.Domain) { case Domain.DomainHvac: { result.Domain = ConnectorDomain.DomainHvac.ToString(); break; } case Domain.DomainPiping: { result.Domain = ConnectorDomain.DomainPiping.ToString(); break; } } result.IsConnected = connector.IsConnected; result.Description = connector.Description; result.Origin = BimConvert.ConvertToXYZ(connector.Origin); return result; } /// /// 获取Connector包装类 /// /// /// public static ElementWrapper GetConnectorWrapper(Autodesk.Revit.DB.Connector connector) { ElementWrapper wrapper = new ElementWrapper(connector, RevitIdGenerator.GetConnectorId(connector)); return wrapper; } /// /// 获取元素关联的connector关联信息,若connector数量为0,则返回null /// /// /// /// public static ElementOneToManyRel GetConnectorRels(Element element,List connectors) { ElementOneToManyRel relMany = new ElementOneToManyRel(element.Id.ToString()) { RelatedObjects = new List() }; relMany.SetElementType(TypeDefinition.Property_ConnectedIds); foreach (var refConnector in connectors) { relMany.RelatedObjects.Add(RevitIdGenerator.GetConnectorId(refConnector)); } if (relMany.RelatedObjects.Any()) { return relMany; } return null;//创建关系无效 } /// /// 解析定位信息 /// /// /// public static GeometryLocation GetLocation(Location location) { if (location == null) return null; if (location is LocationPoint point) { var usePoint = point.Point; return GeometryLocation.CreatePointLocation(BimConvert.ConvertToXYZ(usePoint)); } else if (location is LocationCurve curve) { var useCurve = curve.Curve.GetPoints(); return GeometryLocation.CreateLineLocation(useCurve.Select(xyz=>BimConvert.ConvertToXYZ(xyz)).ToList()); } return null; } } }