/// <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”的形式"); } }