Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 public List <Connector> GetConnetors()
 {
     return(MEPHelper.FilterConnectors(MepModel.ConnectorManager.Connectors));
 }