RevitAPI: 设置管件族的连接件的半径属性抛异常 - 如何获取关联族参数
来源:互联网 发布:阿里云手机云空间 编辑:程序博客网 时间:2024/04/30 14:32
管件族的连接件有一个属性叫“半径”,我们想使用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 found sb.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 found using (Transaction transaction = new Transaction(doc)) { transaction.Start("Set Radius"); doc.FamilyManager.Set(familyPara, 0.041); transaction.Commit(); } } } } }}catch (Autodesk.Revit.Exceptions.OperationCanceledException){}
1 0
- RevitAPI: 设置管件族的连接件的半径属性抛异常 - 如何获取关联族参数
- RevitAPI: 获取DWG导出的设置信息
- RevitAPI: 如何实现族编辑器里的连接几何图形
- RevitAPI: 如何获取可以被明细表过滤器ScheduleFilter使用的参数Parameter?
- RevitAPI: 获取系统族的名称
- RevitAPI: 如何获取某个材质参数?
- RevitAPI: 如何获取RevitLinkInstance链接模型的位置?
- RevitAPI: 如何获取图纸中视口的位置
- ShardedJedisPool的连接池参数如何设置
- RevitAPI之获取元素的几何数据
- RevitAPI:获取管道的水平对正和垂直对正属性或约束
- Gnome环境下文件关联的设置
- RevitAPI: 如何从FamilyInstance获取所在的开关系统(Switch System)
- RevitAPI: 如何获取MirrorElement函数镜像之后的结果元素
- 设置具有关联条件的属性
- RevitAPI:创建不连接任何设备的导线Wire.Create
- RevitAPI: 设置打印的视图ViewSheetSetting.InSession.Views
- 设置连接属性的颜色
- windows下gitbash可以连接但是idea无法连接的问题
- 三层-架构星星之火
- [NOIP2010]导弹拦截 T3 贪心
- 打印1到最大的N位数
- Android Studio之版本管理工具Git (图文教程)
- RevitAPI: 设置管件族的连接件的半径属性抛异常 - 如何获取关联族参数
- html 基础标签知识
- quartz 分布式配置
- 我的里程碑~~
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
- socket的半包,粘包与分包的问题
- Android的手势操作识别
- 国嵌数据结构视频笔记
- error: stray ‘\302’ in program 处理