ParseConnector.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:ParseConnector
  3. * 作者:xulisong
  4. * 创建时间: 2019/6/18 11:26:05
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Autodesk.Revit.DB;
  13. using Autodesk.Revit.DB.Mechanical;
  14. using JBIM;
  15. using JBIM.Relationship;
  16. using RevitExport;
  17. using RevitToJBim.Common;
  18. using JConnector = JBIM.Component.Connector;
  19. namespace RevitToJBim.ComponentParse
  20. {
  21. [UsableParse]
  22. public class ParseConnector : ParseBase
  23. {
  24. public override List<string> FastIndex()
  25. {
  26. return new List<string>() { typeof(Connector).FullName, typeof(MechanicalSystemType).FullName };
  27. }
  28. public override bool Match(ElementWrapper wrapper)
  29. {
  30. return wrapper.GetObject<Connector>() != null;
  31. }
  32. protected override List<BimId> ParseInner(ElementWrapper wrapper, JBimParseContext context)
  33. {
  34. var connector = wrapper.GetObject<Connector>();
  35. if (connector == null)
  36. {
  37. return null;
  38. }
  39. JConnector jConnector = ParseCore.CreateConnector(connector);
  40. jConnector.SourceId = wrapper.SourceId;
  41. context.AddBimObject(jConnector);
  42. #region 所属类别解析
  43. //直接递归方式获取
  44. var owner = connector.Owner;
  45. if (owner != null)
  46. {
  47. ElementWrapper systemTypeWrapper = new ElementWrapper(owner);
  48. jConnector.Owner = context.Parser.ParseElement(systemTypeWrapper)?.FirstOrDefault();
  49. }
  50. #endregion
  51. #region 所属系统解析
  52. //维护关联并递归
  53. var connectorId = jConnector.SourceId;
  54. var systemId = connector.MEPSystem?.Id?.ToString();
  55. if (!string.IsNullOrWhiteSpace(systemId))
  56. {
  57. OneToOneRel rel = new OneToOneRel(connectorId, systemId);
  58. rel.SetElementType(TypeDefinition.MepSystem);
  59. context.RelationShips.Add(rel);
  60. }
  61. #endregion
  62. #region 关联Connector
  63. //这里只维护关联,不进行递归
  64. var refConnectors = new List<Connector>();
  65. OneToManyRel relMany = new OneToManyRel(connectorId){RelatedObjects=new List<string>()};
  66. foreach (var refConnector in refConnectors)
  67. {
  68. relMany.RelatedObjects.Add(RevitIdGenerator.GetConnectorId(refConnector));
  69. }
  70. if (relMany.RelatedObjects.Any())
  71. {
  72. context.RelationShips.Add(relMany);
  73. }
  74. #endregion
  75. return new List<BimId>() { jConnector.Id };
  76. }
  77. public override List<ElementWrapper> ArrangeRefElements(ElementWrapper wrapper, JBimParseContext context)
  78. {
  79. if (!(wrapper.RefObject is Connector connector))
  80. {
  81. return null;
  82. }
  83. if (connector.MEPSystem == null)
  84. {
  85. return null;
  86. }
  87. //创建MepSystem
  88. var mepSystemElementWrapper = new ElementWrapper(connector.MEPSystem);
  89. return new List<ElementWrapper>() { mepSystemElementWrapper };
  90. }
  91. }
  92. }