根据Autodesk官方的定义,共享参数是参数定义,可用于多个族或项目中。 它最牛掰的功能在于可以直接在项目文档里给族添加参数 >>>> 就是这么简单粗暴,来我们一起了解一下Revit 中这个神奇的参数定义功能!
1. 共享参数的概念
刚才已经提到过了共享参数是用于参数定义的,而且它不仅可以在族文档中定义参数,还可以在项目文档中再定义参数,简直逆天!不仅如此,它的作用对象是族类别(注意不是族类型,族类别包括:墙啊、结构柱啊、公制常规模型等等),这些参数随后可以用于创建明细表,这是一般参数没有的待遇呀!最重要的是,共享参数定义保存在与任何族文件或 Revit 项目不相关的txt文件中,这样就可以从其他族或项目中访问此文件,不用重复定义啦!
话不多说,直接上效果图!
2. 操作方法
(1)首先你得找到“共享参数”的功能按钮在哪吧
- 它位于“管理”面板下,和Dynamo大兄弟在一个面板下哦!
2) 创建共享参数定义文件
点击创建按钮,选择文件保存的路径,如果有已经定义好的文件直接浏览即可
(3) 创建参数组,方便对参数的管理。
(4) 新建一个参数作为测试,我这边取了一个“MyDefinition”的文字类型参数。
(5)点击“确定”之后,在管理面板下打开“项目参数”
(6)添加参数,参数类型为“共享参数”,点击进行参数选择
选择“MyGroup”参数组下的参数定义,并确定。
设定共享参数的类型和参数的分组位置!
(7) 添加共享参数的作用类别,可多选。
(8)确定之后,验证是否成功,查看常规模型是否存在名为“MyDefinition”的文字类型参数。
3. 代码实现
private void CreateSharInfo(Application revitApp, Document revitDoc) { try { string sharedParametersFilename = @"C:\Users\炳勇\OneDrive\桌面\shared-parameters.txt"; string groupName = "MyGroup"; string definitionName = "MyDefinition"; ParameterType parameterType = ParameterType.Text; CategorySet categorySet = new CategorySet(); Category wallCategory = revitDoc.Settings.Categories.get_Item(BuiltInCategory.OST_GenericModel); categorySet.Insert(wallCategory); bool instanceParameter = true; BuiltInParameterGroup parameterGroup = BuiltInParameterGroup.PG_DATA; if (!System.IO.File.Exists(sharedParametersFilename)) { try { System.IO.StreamWriter sw = System.IO.File.CreateText(sharedParametersFilename); sw.Close(); } catch (Exception) { throw new Exception(string.Format("Can't create shared parameter file:{0}", sharedParametersFilename)); } } revitApp.SharedParametersFilename = sharedParametersFilename; DefinitionFile definitionFile = revitApp.OpenSharedParameterFile(); if (definitionFile == null) { throw new Exception("Can not open shared parameter file"); } DefinitionGroups groups = definitionFile.Groups; DefinitionGroup group = groups.get_Item(groupName); if (group == null) { group = groups.Create(groupName); } Definition definition = group.Definitions.get_Item(definitionName); if (definition == null) { definition = group.Definitions.Create(new ExternalDefinitionCreationOptions(definitionName, parameterType)); } ElementBinding binding = null; if (instanceParameter) { binding = revitApp.Create.NewInstanceBinding(categorySet); } else { binding = revitApp.Create.NewTypeBinding(categorySet); } bool insertSuccess = revitDoc.ParameterBindings.Insert(definition, binding, parameterGroup); if (!insertSuccess) { throw new Exception("Failed to bind definition to category"); } } catch (Exception ex) { throw ex; } }
4. 注意事项
共享参数不仅可以通过代码进行创建,还能提取并赋值,修改方法可参照其他类型参数更改的代码:Revit API 修改项目文档中族参数的几个要点;
新建共享参数文件时,必须采用unicode编码,否则系统无法识别;
共享参数的定义文件删除后,并不会影响到已经添加到模型中的参数;
好像没有什么要注意的了!