コード例 #1
0
ファイル: ConduitFittingMEP.cs プロジェクト: sunjini/eZRvt
        /// <summary>
        /// 获取线管所对应的弯头的族文档中,族参数“弯曲半径 = 管件外径 * 15” 后面的数值 15
        /// </summary>
        /// <param name="conduit"> 线管对象 </param>
        /// <returns>  </returns>
        private double?GetElbowRadiusRatio(Transaction docTrans, Conduit conduit)
        {
            ConduitType cdType = _doc.GetElement(conduit.GetTypeId()) as ConduitType;

            Parameter paElbow = cdType.get_Parameter(BuiltInParameter.RBS_CURVETYPE_DEFAULT_BEND_PARAM);

            if (paElbow == null)
            {
                throw new NullReferenceException("在线管中没有找到匹配的弯头参数");
            }

            ElementId elbowId = paElbow.AsElementId();

            FamilySymbol fs = _doc.GetElement(elbowId) as FamilySymbol;

            if (docTrans.GetStatus() == TransactionStatus.Started)
            {
                docTrans.Commit();
            }

            // 在_doc.EditFamily之前,必须要确保没有打开的事务
            Document famDoc;

            famDoc = _doc.EditFamily(fs.Family);

            if (null == famDoc || !famDoc.IsFamilyDocument)
            {
                throw new NullReferenceException("无法编辑线管设定的弯头所对应的族文件");
            }

            ElbowFamily mepElbow = new ElbowFamily(famDoc);

            string formula = mepElbow.GetFormula();  // 其值应该大致为 “管件外径 * 15”

            famDoc.Close(false);

            //
            docTrans.Start("读取完弯头族文档中的参数后重新开启事务");
            try
            {
                string ratio = formula.Split(new char[] { '*' })[1];
                return(double.Parse(ratio));
            }
            catch
            {
                throw new InvalidOperationException("弯头的族参数不是“管件外径 * 15”的形式");
            }
        }