Exemplo n.º 1
0
        /// <summary>
        /// 检测系统中是否有默认连接项,无则进行添加
        /// </summary>
        /// <param name="src"></param>
        /// <param name="type"></param>
        protected FamilySymbol Judge_LoadDefaultFitting(MEPCurve src, MEPCurveConnectTypeENUM type)
        {
            FamilySymbol fs = null;

            switch (type)
            {
            case MEPCurveConnectTypeENUM.Elbow:    //弯头
                fs = src.GetDefaultFittingSymbol(RoutingPreferenceRuleGroupType.Elbows); break;

            case MEPCurveConnectTypeENUM.Tee:    //三通
                fs = src.GetDefaultFittingSymbol(RoutingPreferenceRuleGroupType.Junctions); break;

            case MEPCurveConnectTypeENUM.Cross:    //四通
                fs = src.GetDefaultFittingSymbol(RoutingPreferenceRuleGroupType.Crosses); break;

            case MEPCurveConnectTypeENUM.Transition:    //过渡件
                fs = src.GetDefaultFittingSymbol(RoutingPreferenceRuleGroupType.Transitions); break;

            case MEPCurveConnectTypeENUM.TakeOff:    //侧接
                fs = src.GetDefaultTakeoffFittingSymbol(); break;

            default:
                fs = null;
                break;
            }

            if (fs != null)
            {
                return(fs);
            }

            if (this.IsOnlyUseRevitDefault)
            {
                return(null);
            }

            var familyName = this.GetDefaultFittingName(src, type);

            if (familyName == null)
            {
                return(null);
            }

            fs = FamilyLoadUtils.FindFamilySymbol_SubTransaction(src.Document, familyName, null);
            if (fs == null)
            {
                return(null);
            }
            if (src is Pipe || src is Duct)
            {
                RoutingPreferenceManager rpm = src.GetMEPCurveType().RoutingPreferenceManager;
                var rule = new RoutingPreferenceRule(fs.Id, "");
                rule.AddCriterion(PrimarySizeCriterion.All());

                switch (type)
                {
                case MEPCurveConnectTypeENUM.Elbow:    //弯头
                    rpm.AddRule(RoutingPreferenceRuleGroupType.Elbows, rule); break;

                case MEPCurveConnectTypeENUM.Tee:    //三通
                    rpm.AddRule(RoutingPreferenceRuleGroupType.Junctions, rule); break;

                case MEPCurveConnectTypeENUM.Cross:    //四通
                    rpm.AddRule(RoutingPreferenceRuleGroupType.Crosses, rule); break;

                case MEPCurveConnectTypeENUM.Transition:    //过渡件
                    rpm.AddRule(RoutingPreferenceRuleGroupType.Transitions, rule); break;

                case MEPCurveConnectTypeENUM.TakeOff:    //侧接
                    rpm.AddRule(RoutingPreferenceRuleGroupType.Junctions, rule); break;

                default:
                    break;
                }
            }
            else if (src is Conduit)
            {
                Parameter param = null;

                switch (type)
                {
                case MEPCurveConnectTypeENUM.Elbow:    //弯头
                    param = (src.Document.GetElement(src.GetTypeId())).GetParameters("弯头").FirstOrDefault(); break;

                case MEPCurveConnectTypeENUM.Tee:    //三通
                    param = (src.Document.GetElement(src.GetTypeId())).GetParameters("T 形三通").FirstOrDefault(); break;

                case MEPCurveConnectTypeENUM.Cross:    //四通
                    param = (src.Document.GetElement(src.GetTypeId())).GetParameters("交叉线").FirstOrDefault(); break;

                case MEPCurveConnectTypeENUM.Transition:    //过渡件
                    param = (src.Document.GetElement(src.GetTypeId())).GetParameters("过渡件").FirstOrDefault(); break;

                default:
                    break;
                }

                if (param != null)
                {
                    param.Set(fs.Id);
                }
            }
            else if (src is CableTray)
            {
                Parameter param = null;
                var       t     = new FilteredElementCollector(src.Document).OfClass(typeof(CableTrayType)).FirstOrDefault(p => p.GetParameters("族名称").First().AsString() == "带配件的电缆桥架");
                switch (type)
                {
                case MEPCurveConnectTypeENUM.Elbow:    //弯头
                    param = t.GetParameters("水平弯头").FirstOrDefault(); break;

                case MEPCurveConnectTypeENUM.Tee:    //三通
                    param = t.GetParameters("T 形三通").FirstOrDefault(); break;

                case MEPCurveConnectTypeENUM.Cross:    //四通
                    param = t.GetParameters("交叉线").FirstOrDefault(); break;

                case MEPCurveConnectTypeENUM.Transition:    //过渡件
                    param = t.GetParameters("过渡件").FirstOrDefault(); break;

                default:
                    break;
                }

                if (param != null)
                {
                    param.Set(fs.Id);
                }
            }
            return(fs);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获取设置文件中管件名称
        /// </summary>
        /// <param name="src"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private string GetDefaultFittingName(MEPCurve src, MEPCurveConnectTypeENUM type)
        {
            string searchText = "/Root/";

            if (src is Pipe)
            {
                searchText += "Pipe/";
            }
            else if (src is Duct)
            {
                var con = src.ConnectorManager.Lookup(0);
                if (con.Shape == ConnectorProfileType.Round)
                {
                    searchText += "Duct/圆形/";
                }
                else if (con.Shape == ConnectorProfileType.Rectangular)
                {
                    searchText += "Duct/矩形/";
                }
                else if (con.Shape == ConnectorProfileType.Oval)
                {
                    searchText += "Duct/椭圆/";
                }
            }
            else if (src is Conduit)
            {
                searchText += "Conduit/";
            }
            else if (src is CableTray)
            {
                searchText += "CableTray/";
            }

            switch (type)
            {
            case MEPCurveConnectTypeENUM.Elbow:    //弯头
                searchText += "弯头"; break;

            case MEPCurveConnectTypeENUM.Tee:    //三通
                searchText += "三通"; break;

            case MEPCurveConnectTypeENUM.Cross:    //四通
                searchText += "四通"; break;

            case MEPCurveConnectTypeENUM.Transition:    //过渡件
                searchText += "过渡件"; break;

            case MEPCurveConnectTypeENUM.TakeOff:    //侧接
                searchText += "侧接"; break;

            default:
                break;
            }

            System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
            xml.Load(FamilyLoadUtils.FamilyLibPath + "\\..\\..\\SysData\\MEPCurveConnect.xml");
            var node = xml.SelectSingleNode(searchText);

            if (node == null)
            {
                return(null);
            }
            else
            {
                return(node.InnerText);
            }
        }