123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /*-------------------------------------------------------------------------
- * 功能描述:ParsePipe
- * 作者:xulisong
- * 创建时间: 2019/6/13 16:54:19
- * 版本号:v1.0
- * -------------------------------------------------------------------------*/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Autodesk.Revit.DB.Plumbing;
- using JBIM;
- using JBIM.Definition;
- using RevitExport;
- using RevitExport.Export;
- using RevitToJBim.Common;
- using RevitToJBim.ParseData;
- using SAGA.RevitUtils.Extends;
- using SAGA.RevitUtils.MEP;
- using JPipe=JBIM.Component.Pipe;
- namespace RevitToJBim.ComponentParse
- {
- [UsableParseAttribute]
- public class ParsePipe : ParseBase
- {
- public override List<string> FastIndex()
- {
- return new List<string>() { typeof(Pipe).FullName };
- }
- public override bool Match(ElementWrapper wrapper)
- {
- return wrapper.RefElement is Pipe;
- }
- protected override List<BimId> ParseInner(ElementWrapper wrapper, JBimParseContext context)
- {
- /*
- * 解析思路:1、解析当前对象具体信息。
- * 2、维护一些构件的关联管理关系,可以放在这个方法中,也可以放在ArrangeRefElements中
- *
- */
- if (!(wrapper.RefElement is Pipe pipe))
- {
- return null;
- }
- JPipe jPipe = new JPipe();
- ParseCore.AttachObject(jPipe, wrapper);
- jPipe.Diameter =pipe.Diameter.FtToUse();
- var locations = new List<XYZ>();
- locations.Add(BimConvert.ConvertToXYZ(pipe.GetCurve().StartPoint()));
- locations.Add(BimConvert.ConvertToXYZ(pipe.GetCurve().EndPoint()));
- jPipe.Location = GeometryLocation.CreateLineLocation(locations);
- Polygon outLine = new Polygon(locations);
- jPipe.OutLine.Add(outLine);
- context.AddBimObject(jPipe);
- //Parameters
- jPipe.Parameters = RevitUtil.GetMEPCurveParameters(pipe);
- #region 关联数据处理相关
- #region 系统关系
- var pipeId = pipe.Id.ToString();
- try
- {
- if (pipe.MEPSystem != null)
- {
- var systemTypeName = pipe.Document.GetElement(pipe.MEPSystem.GetTypeId());
- jPipe.MepSystemTypeName = systemTypeName.Name;
- }
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message + e.StackTrace);
- }
-
- #endregion
- #region Connector连接关系
- var connectors = pipe.GetConnectors();
- ElementOneToManyRel relMany = new ElementOneToManyRel(pipeId) { RelatedObjects = new List<string>() };
- relMany.SetElementType(TypeDefinition.Property_ConnectedIds);
- foreach (var refConnector in connectors)
- {
- relMany.RelatedObjects.Add(RevitIdGenerator.GetConnectorId(refConnector));
- }
- if (relMany.RelatedObjects.Any())
- {
- context.RelationShips.Add(relMany);
- }
- #endregion
- #endregion
- return new List<BimId>(){ jPipe.Id };
- }
- public override List<ElementWrapper> ArrangeRefElements(ElementWrapper wrapper, JBimParseContext context)
- {
- if (!(wrapper.RefElement is Pipe pipe))
- {
- return null;
- }
- //创建MepSystem
- // var mepSystemElementWrapper = new ElementWrapper(pipe.MEPSystem);
- var wrappers=new List<ElementWrapper>() { };
- var connectors = pipe.GetConnectors();
- foreach (var connector in connectors)
- {
- wrappers.Add(ParseCore.GetConnectorWrapper(connector));
- }
- return wrappers;
- }
- }
- }
|