Revit API 操作共享参数和项目参数
1.获取共享参数
1 private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp) 2 { 3 StringBuilder str = new StringBuilder(); 4 DefinitionFile definitionFile = revitApp.OpenSharedParameterFile(); 5 DefinitionGroups groups = definitionFile.Groups; 6 foreach (DefinitionGroup group in groups) 7 { 8 foreach (Definition definition in group.Definitions) 9 { 10 string name = definition.Name; 11 ParameterType type = definition.ParameterType; 12 str.AppendLine(string.Format("{0}---{1}", name, type.ToString())); 13 } 14 } 15 return str.ToString(); 16 }
2.创建共享参数
1 private void CreateSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp, Autodesk.Revit.DB.Document revitDoc) 2 { 3 try 4 { 5 string sharedParametersFilename = @"C:\shared-parameters.txt"; 6 string groupName = "MyGroup"; 7 string definitionName = "MyDefinition"; 8 ParameterType parameterType = ParameterType.Text; 9 CategorySet categorySet = new CategorySet(); 10 Category wallCategory = revitDoc.Settings.Categories.get_Item(BuiltInCategory.OST_Walls); 11 categorySet.Insert(wallCategory); 12 bool instanceParameter = true; 13 BuiltInParameterGroup parameterGroup = BuiltInParameterGroup.PG_DATA; 14 if (!System.IO.File.Exists(sharedParametersFilename)) 15 { 16 try 17 { 18 System.IO.StreamWriter sw = System.IO.File.CreateText(sharedParametersFilename); 19 sw.Close(); 20 } 21 catch (Exception) 22 { 23 throw new Exception(string.Format("Can't create shared parameter file:{0}", sharedParametersFilename)); 24 } 25 } 26 revitApp.SharedParametersFilename = sharedParametersFilename; 27 28 DefinitionFile definitionFile = revitApp.OpenSharedParameterFile(); 29 if (definitionFile == null) 30 { 31 throw new Exception("Can not open shared parameter file"); 32 } 33 34 DefinitionGroups groups = definitionFile.Groups; 35 DefinitionGroup group = groups.get_Item(groupName); 36 if (group == null) 37 { 38 group = groups.Create(groupName); 39 } 40 Definition definition = group.Definitions.get_Item(definitionName); 41 if (definition == null) 42 { 43 definition = group.Definitions.Create(new ExternalDefinitionCreationOptions(definitionName, parameterType)); 44 } 45 ElementBinding binding = null; 46 if (instanceParameter) 47 { 48 binding = revitApp.Create.NewInstanceBinding(categorySet); 49 } 50 else 51 { 52 binding = revitApp.Create.NewTypeBinding(categorySet); 53 } 54 bool insertSuccess = revitDoc.ParameterBindings.Insert(definition, binding, parameterGroup); 55 if (!insertSuccess) 56 { 57 throw new Exception("Failed to bind definition to category"); 58 } 59 } 60 catch (Exception ex) 61 { 62 throw ex; 63 } 64 }
3.获取项目参数(API无法创建项目参数的)
1 private string GetProjectParam(Autodesk.Revit.DB.Document revitDoc) 2 { 3 StringBuilder strBuild = new StringBuilder(); 4 BindingMap map = revitDoc.ParameterBindings; 5 DefinitionBindingMapIterator dep = map.ForwardIterator(); 6 while (dep.MoveNext()) 7 { 8 Definition definition = dep.Key; 9 string definitionName = definition.Name; 10 ParameterType parameterType = definition.ParameterType; 11 InstanceBinding instanceBinding = dep.Current as InstanceBinding; 12 if (instanceBinding != null) 13 { 14 CategorySet categorySet = instanceBinding.Categories; 15 strBuild.AppendLine(string.Format("Name:{0} Type:{1} CategorySet:{2}", definitionName, parameterType, categorySet.GetType().ToString())); 16 } 17 else 18 { 19 strBuild.AppendLine(string.Format("Name:{0} Type:{1}", definitionName, parameterType)); 20 } 21 } 22 return strBuild.ToString(); 23 }
4.创建项目参数
Revit API无法创建项目参数,目前没有找到创建方法。