本文主要是介绍RevitAPI: 设置管件族的连接件的半径属性抛异常 - 如何获取关联族参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
管件族的连接件有一个属性叫“半径”,我们想使用api来修改它的值,直观的做法可能是这样的:
connectorElement.Radius = 0.041;
但是,Radius属性是只读的,编译不过,或者编译过了,但是抛异常。
另外一种做法是使用Parameter:
var radiusPara = connectorElement.get_Parameter(BuiltInParameter.CONNECTOR_RADIUS);
radiusPara.Set(0.041);
然而radiusPara也是只读的,照样会抛出异常。
我知道在界面上也无法直接修改,而是修改它的关联参数,例如下图中,我们修改的是”公称半径“
那么如何通过api获得这个关联参数呢?
下面的代码给出了答案:
var sb = new StringBuilder();
foreach (var connectorPara in connectorElement.GetOrderedParameters())
{foreach (FamilyParameter familyPara in doc.FamilyManager.Parameters){foreach (Parameter associatedPara in familyPara.AssociatedParameters){if (connectorPara.Id == associatedPara.Id && associatedPara.Element.Id == connectorElement.Id){//associate parameter foundsb.AppendLine("'" + associatedPara.Definition.Name + "(" + (BuiltInParameter)associatedPara.Id.IntegerValue + ")' <-> '" + familyPara.Definition.Name + "'");}}}
}
TaskDialog td = new TaskDialog("Parameter associations");
td.MainContent = sb.ToString();
td.TitleAutoPrefix = false;
td.Show();
该代码会打印出所有connectorElement的参数和族参数之间的关联关系,代码步骤解释如下:
- 调用GetOrderedParameters()获取connectorElement的所有参数,并进行遍历
- 通过Document.FamilyManager.Parameters遍历所有的族参数FamilyParameter
- 通过FamilyParameter.AssociatedParameters属性获取所有和该族参数关联的元素参数
- 遍历所有关联参数,判断connectorElement的参数和关联参数的Id一致,并且对应的Element也是同一个,即找到了关联关系
结果如图:
如此,则设置半径的可以这样做:
- 获取连接件半径属性的关联参数
- 使用Document.FamilyManager.Set(FamilyParameter, Value)来设置该关联参数
完整代码如下:
var doc = commandData.Application.ActiveUIDocument.Document;
var uiSel = commandData.Application.ActiveUIDocument.Selection;
ConnectorElement connectorElement = null;
try
{var reference = uiSel.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "Pick a connector");connectorElement = doc.GetElement(reference) as ConnectorElement;if (connectorElement != null){var radiusPara = connectorElement.get_Parameter(BuiltInParameter.CONNECTOR_RADIUS);foreach (FamilyParameter familyPara in doc.FamilyManager.Parameters){foreach (Parameter associatedPara in familyPara.AssociatedParameters){if (radiusPara.Id == associatedPara.Id && associatedPara.Element.Id == connectorElement.Id){//associate parameter foundusing (Transaction transaction = new Transaction(doc)){transaction.Start("Set Radius");doc.FamilyManager.Set(familyPara, 0.041);transaction.Commit();}}}}}
}
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
{
}
这篇关于RevitAPI: 设置管件族的连接件的半径属性抛异常 - 如何获取关联族参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!