/// <summary> /// 将线管连接到设备中的指定的那一个连接件上 /// </summary> /// <param name="cabConnctor"> 配电箱中的要进行连接的连接件</param> /// <returns></returns> public FamilyInstance Connect(Transaction docTrans, Connector cabConnctor) { Connector conduitConnector = null; double nearestDist = double.MaxValue; // 首先找到线管中指向配电箱的那个connector foreach (Connector conduitConn in MEPHelper.FilterConnectors(_conduit.ConduitIns.ConnectorManager.Connectors)) { // 判断准则: conduitConn 的方向与两点连线方向夹角小于90度,而且线管连接件的标高要小于设备连接件的标高 // 在满足条件的线管连接件中,取其中到设备连接件的距离最短的那一个 if (conduitConn.CoordinateSystem.BasisZ.Z > 0.000001 || conduitConn.Origin.Z >= cabConnctor.Origin.Z) { continue; } double angle = conduitConn.CoordinateSystem.BasisZ.AngleTo(cabConnctor.Origin.Subtract(conduitConn.Origin)); double dist = conduitConn.Origin.DistanceTo(cabConnctor.Origin); if (angle < Math.PI / 2 && dist < nearestDist) { conduitConnector = conduitConn; } } // 开始连接 if (conduitConnector == null) { throw new NullReferenceException(" 在线管中未找到合适的连接件来进行连接。\r\n" + " 有效的连接件的方向应该水平,低于电气设备中指定连接件的标高,而且指向设备。"); } FamilyInstance elbow = Connect(docTrans, cabConnctor, conduitConnector); return(elbow); }
public List <Connector> GetConnetors() { return(MEPHelper.FilterConnectors(MepModel.ConnectorManager.Connectors)); }