using System.Diagnostics; using System.IO; using System.Reflection; using Autodesk.Revit.ApplicationServices; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using ShrlAlgoToolkit.Revit.Extensions; namespace ShrlAlgoToolkit.Revit.Assists; public class ParameterAssist { /// /// /// /// /// /// /// private static ExternalDefinition GetSharedParameter(DefinitionFile file, string groupname, string paramname) { var myGroups = file.Groups; var myGroup = myGroups.get_Item(groupname); ExternalDefinition extDef = null; if (myGroup != null) { extDef = myGroup.Definitions.get_Item(paramname) as ExternalDefinition; } return extDef; } /// /// 添加或附加绑定自定义共享参数 /// /// /// /// public static void AddOrAttachSharedParameter(Document doc, string paramName, BuiltInParameterGroup group = BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES, ParameterType parameterType = ParameterType.Text, params Category[] categories) { if (IsExistProjectParam(doc, paramName, out var def, out var binding)) { foreach (var cate in categories) { binding.Categories.Insert(cate); } doc.ParameterBindings.ReInsert(def, binding, group); } else { string addInPath = Assembly.GetExecutingAssembly().Location; string dirAssembly = Path.GetDirectoryName(addInPath); var filePath = Path.Combine(Path.GetTempPath(), $"TempSharedParameters.txt"); var app = doc.Application; var originSharedParametersFile = app.SharedParametersFilename.Clone().ToString(); DefinitionFile tempFile = CreateTempSharedParameterFile(app, filePath); var g = tempFile.Groups.Create("TempGroup"); var categorySet = app.Create.NewCategorySet(); foreach (Category item in categorySet) { categorySet.Insert(item); } var newInstanceBinding = app.Create.NewInstanceBinding(categorySet); ExternalDefinitionCreationOptions options = new(paramName, parameterType); try { var definition = g.Definitions.Create(options); doc.ParameterBindings.Insert(definition, newInstanceBinding, group); } finally { app.SharedParametersFilename = originSharedParametersFile.ToString(); //File.Delete(tempFile.Filename); } } } /// /// 关联族参数 /// /// /// /// public static void AssociateParametersInFamilyDocument( FamilyManager familyMgr, Parameter lengthElementPara, // 长度类型的图元参数 FamilyParameter lengthFamilyPara ) // 长度类型的族参数 { #if REVIT2018 || REVIT2020 var lengthElementParaType = lengthElementPara.Definition.ParameterType; var lengthFamilyParaType = lengthFamilyPara.Definition.ParameterType; #elif REVIT2025 var lengthElementParaType = lengthElementPara.Definition.GetDataType(); var lengthFamilyParaType = lengthFamilyPara.Definition.GetDataType(); #endif // 能关联起来的图元参数和族参数的类型要相同 if (lengthElementParaType != lengthFamilyParaType) { // 注意:有些类型不同的图元参数和族参数也是可以关联的。 // 比如PipeSize和Length类型的参数可以关联,因为他们代表了相同的物理量:长度 return; } // 判断该长度单位是否能够和族参数关联 if (!familyMgr.CanElementParameterBeAssociated(lengthElementPara)) { return; } // 进行关联操作 familyMgr.AssociateElementParameterToFamilyParameter(lengthElementPara, lengthFamilyPara); } /// /// 绑定新建参数参数 /// /// /// /// /// public static void BindingElementCategory(Document doc, Element e, Definition definition, bool isInstance) { var app = doc.Application; var bindmap = doc.ParameterBindings; Binding binding = null; var dep = bindmap.ForwardIterator(); while (dep.MoveNext()) { var depKey = dep.Key; var definitionName = depKey.Name; if (definitionName == definition.Name) { #if REVIT2018 || REVIT2020 _ = depKey.ParameterType; #elif REVIT2025 _ = depKey.GetDataType(); #endif binding = bindmap.get_Item(depKey); break; } } if (binding == null) { var categorySet = app.Create.NewCategorySet(); categorySet.Insert(e.Category); binding = isInstance ? app.Create.NewInstanceBinding(categorySet) : app.Create.NewTypeBinding(categorySet); bindmap.Remove(definition); #if REVIT2018 || REVIT2020 bindmap.ReInsert(definition, binding, BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES); #elif REVIT2025 bindmap.ReInsert(definition, binding, GroupTypeId.AdskModelProperties); #endif } else { CategorySet categorySet; if (binding is InstanceBinding instanceBinding) { categorySet = instanceBinding.Categories; } else { var typeBinding = binding as TypeBinding; categorySet = typeBinding!.Categories; } categorySet.Insert(e.Category); } } public static FamilyParameter CreateFamilyPara( Document famdoc, string paraName, #if REVIT2018 || REVIT2020 BuiltInParameterGroup paraGroup, ParameterType paramType, #elif REVIT2025 ForgeTypeId paraGroup, ForgeTypeId paramType, #endif bool isInstance ) { // 得到FamilyManager if (!famdoc.IsFamilyDocument) { throw new Exception("不是族文档"); } var familyMgr = famdoc.FamilyManager; return familyMgr.AddParameter(paraName, paraGroup, paramType, isInstance); } /// /// 只读族参数 /// /// /// public static void CreateReadOnlyParameter(Document doc, FamilyManager familyManager) { var file = Path.Combine(Environment.CurrentDirectory, "test.txt"); if (!File.Exists(file)) { File.Create(file); } doc.Application.SharedParametersFilename = file; var definitionFile = doc.Application.OpenSharedParameterFile(); using (var trans = new Transaction(doc, "只读参数")) { try { trans.Start(); var groupName = "分组名"; var definitionGroup = definitionFile.Groups.get_Item(groupName); if (definitionGroup is null) { definitionGroup = definitionFile.Groups.Create(groupName); } var definitionName = "参数名"; var definition = definitionGroup.Definitions.get_Item(definitionName); if (definition is null) { var options = new ExternalDefinitionCreationOptions(definitionName, ParameterType.Text) { UserModifiable = false, }; definition = definitionGroup.Definitions.Create(options); } if (familyManager.get_Parameter(definition) is null) { var familyParameter = familyManager.AddParameter(definition as ExternalDefinition, BuiltInParameterGroup.PG_TEXT, true); if (familyParameter != null) { familyManager.Set(familyParameter, "参数值"); } } trans.Commit(); } catch (Exception) { if (trans.HasStarted()) { trans.RollBack(); } } } } public static void CreateSharedFamilyParam(Application app, Document famdoc) { var familyMgr = famdoc.FamilyManager; // 共享参数的基本信息, 包括定义文件路径,参数分组名称,参数名称和参数类型。 var sharedParameterFilePath = @"C:\SharedParameter.txt"; var sharedParameterGroupName = "Shared_Group"; var sharedParameter = "Shared_Parameter"; #if REVIT2018 || REVIT2020 var sharedParameterType = ParameterType.Length; #elif REVIT2025 var sharedParameterType = SpecTypeId.Length; #endif ExternalDefinitionCreationOptions externalDefinitionCreationOptions = new(sharedParameter, sharedParameterType); // 打开或创建共享参数定义文件。 app.SharedParametersFilename = sharedParameterFilePath; var sharedDefinitonFile = app.OpenSharedParameterFile(); if (sharedDefinitonFile == null) { return; } // 查找共享参数的分组名称,如果没找到,就创建一个。 DefinitionGroup sharedGroup; sharedGroup = sharedDefinitonFile.Groups.get_Item(sharedParameterGroupName); if (null == sharedGroup) { sharedGroup = sharedDefinitonFile.Groups.Create(sharedParameterGroupName); } // 查找共享参数的定义,如果没有找到,就用名字和类型创建一个。 if (sharedGroup.Definitions.get_Item(sharedParameter) is not ExternalDefinition parameterDef) { parameterDef = sharedGroup.Definitions.Create(externalDefinitionCreationOptions) as ExternalDefinition; } // 创建共享族参数 #if REVIT2018 || REVIT2020 _ = familyMgr.AddParameter(parameterDef, BuiltInParameterGroup.PG_CONSTRAINTS, true); #elif REVIT2025 _ = familyMgr.AddParameter(parameterDef, GroupTypeId.Constraints, true); #endif } public void CreateSharedParam( Application app, Document doc, bool instanceParameter, string sharedParametersFilePath, string groupName, string definitionName ) { #if REVIT2018 || REVIT2020 var parameterType = ParameterType.Text; var parameterGroup = BuiltInParameterGroup.PG_DATA; #elif REVIT2025 var parameterType = SpecTypeId.String.Text; var parameterGroup = GroupTypeId.Data; #endif CategorySet categorySet = new(); var wallCategory = doc.Settings.Categories.get_Item(BuiltInCategory.OST_Walls); categorySet.Insert(wallCategory); if (!File.Exists(sharedParametersFilePath)) { try { var sw = File.CreateText(sharedParametersFilePath); sw.Close(); } catch (Exception) { throw new Exception("无法创建共享参数文件: " + sharedParametersFilePath); } } // 设置共享参数文件 app.SharedParametersFilename = sharedParametersFilePath; // 打开共享参数文件 var definitionFile = app.OpenSharedParameterFile(); if (definitionFile == null) { throw new Exception("无法打开共享参数文件"); } // 获取参数组的集合 var groups = definitionFile.Groups; // 获取参数组 var group = groups.get_Item(groupName); if (null == group) { // 如果参数组不存在,则创建一个 group = groups.Create(groupName); } if (null == group) { throw new Exception("获取参数组失败: " + groupName); } // 获取参数定义 var definition = group.Definitions.get_Item(definitionName); // 如果参数定义不存在,则创建一个 definition ??= group.Definitions.Create(new ExternalDefinitionCreationOptions(definitionName, parameterType)); // 调用不同的函数创建类型参数或者实例参数 ElementBinding binding = instanceParameter ? app.Create.NewInstanceBinding(categorySet) : app.Create.NewTypeBinding(categorySet); // 把参数定义和类别绑定起来,元素的新的参数就创建成功了。 var insertSuccess = doc.ParameterBindings.Insert(definition, binding, parameterGroup); if (!insertSuccess) { throw new Exception("绑定类别失败"); } } /// /// 创建共享参数文件 /// /// /// 共享参数文件路径 /// public static DefinitionFile CreateTempSharedParameterFile(Application revitApp, string shareFile) { System.Text.StringBuilder contents = new(); contents.AppendLine("# This is a Revit shared parameterElement file."); contents.AppendLine("# Do not edit manually."); contents.AppendLine("*META VERSION MINVERSION"); contents.AppendLine("META 2 1"); contents.AppendLine("*GROUP ID NAME"); contents.AppendLine("*PARAM GUID NAME DATATYPE DATACATEGORY GROUP VISIBLE"); File.WriteAllText(shareFile, contents.ToString()); revitApp.SharedParametersFilename = shareFile; return revitApp.OpenSharedParameterFile(); } /// /// 获取或创建共享参数文件的参数组中的参数 /// /// /// /// /// public static Definition GetDefinition(DefinitionGroup group, string paramName, bool canEdit = false) { if (group is null) { throw new ArgumentNullException(nameof(group)); } if (paramName is null) { throw new ArgumentNullException(nameof(paramName)); } var definition = group.Definitions.get_Item(paramName); if (definition != null) { return definition; } #if REVIT2018 || REVIT2020 var opt = new ExternalDefinitionCreationOptions(paramName, ParameterType.Text) { UserModifiable = canEdit }; #elif REVIT2025 var opt = new ExternalDefinitionCreationOptions(paramName, SpecTypeId.String.Text) { UserModifiable = canEdit }; #endif return group.Definitions.Create(opt); } public static ExternalDefinition GetDefinition( DefinitionFile sharedParamFile, string definitionName, #if REVIT2018 || REVIT2020 ParameterType paramType, #elif REVIT2025 ForgeTypeId paramType, #endif ref Guid guid, DefinitionGroup group ) { new List(); foreach (var definitionGroup in sharedParamFile.Groups) { foreach (var definition in definitionGroup.Definitions) { var externalDefinition = (ExternalDefinition)definition; if (externalDefinition.Name == definitionName) { return externalDefinition; } } } ExternalDefinitionCreationOptions externalDefinitionCreationOptions = new(definitionName, paramType); return group.Definitions.Create(externalDefinitionCreationOptions) as ExternalDefinition; } public static Dictionary GetDefinitionBindings(Document doc) { Dictionary dict = []; var dep = doc.ParameterBindings.ForwardIterator(); while (dep.MoveNext()) { var definition = dep.Key; var binding = dep.Current as ElementBinding; dict.Add(definition, binding); } return dict; } /// /// 获取共享参数文件中的参数组 /// /// /// 分组 /// public static DefinitionGroup GetGroup(DefinitionGroups groups, string groupName) { return groups is null ? throw new ArgumentNullException(nameof(groups)) : groupName is null ? throw new ArgumentNullException(nameof(groupName)) : groups.get_Item(groupName) ?? groups.Create(groupName); } public static DefinitionGroup GetGroup(DefinitionFile myDefinitionFile, string groupName, string log) { DefinitionGroup definitionGroup = null; var groups = myDefinitionFile.Groups; foreach (var definitionGroup2 in groups) { if (definitionGroup2.Name == groupName) { using (StreamWriter streamWriter = new(log, true)) { streamWriter.WriteLine("Group {0} already exists", groupName); } definitionGroup = definitionGroup2; return definitionGroup; } } using (StreamWriter streamWriter2 = new(log, true)) { streamWriter2.WriteLine("Group {0} not found", groupName); } definitionGroup = groups.Create(groupName); using (StreamWriter streamWriter3 = new(log, true)) { streamWriter3.WriteLine("Group {0} created", definitionGroup.Name); } return definitionGroup; } /// /// 获取共享参数文件中的参数组 /// /// /// 共享文件路径 /// public static DefinitionGroups GetGroupList(UIApplication uiapp, string parmPath) { if (uiapp is null) { throw new ArgumentNullException(nameof(uiapp)); } if (parmPath is null) { throw new ArgumentNullException(nameof(parmPath)); } if (!File.Exists(parmPath)) { File.CreateText(parmPath); } uiapp.Application.SharedParametersFilename = parmPath; return uiapp.Application.OpenSharedParameterFile()?.Groups; } /// /// 获取所有项目参数和定义元素绑定 /// /// /// public static Dictionary GetParameterElementBindings(Document doc) { //项目中所有的参数元素,包含共享参数元素 var parameterElements = doc.OfClass().Cast(); Dictionary dict = []; //绑定 var dep = doc.ParameterBindings.ForwardIterator(); while (dep.MoveNext()) { if (dep.Key is InternalDefinition definition) { var binding = dep.Current as ElementBinding; foreach (var param in parameterElements) { var def = param.GetDefinition(); if (def.Id == definition.Id) { dict.Add(param, binding); } } } } return dict; } public static void GetSharedPara(Application revitApp) { // 打开共享参数文件 var definitionFile = revitApp.OpenSharedParameterFile(); // 获取参数组的集合 var groups = definitionFile.Groups; foreach (var group in groups) { // 获取参数组内的参数定义 foreach (var definition in group.Definitions) { _ = definition.Name; #if REVIT2018 || REVIT2020 _ = definition.ParameterType; #elif REVIT2025 _ = definition.GetDataType(); #endif // 对参数定义的其他操作 } } } /// /// 初始化元素绑定(或类型) /// /// /// 要绑定类别的元素 /// 共享文件路径 public static void InitParamList(UIApplication uiapp, Element elm, string paramPath) { if (uiapp is null) { throw new ArgumentNullException(nameof(uiapp)); } if (elm is null) { throw new ArgumentNullException(nameof(elm)); } if (paramPath is null) { throw new ArgumentNullException(nameof(paramPath)); } var doc = uiapp.ActiveUIDocument.Document; var bindingMap = doc.ParameterBindings; var groups = GetGroupList(uiapp, paramPath); CategorySet elmCtgs = new(); elmCtgs.Insert(elm.Category); foreach (var groupPram in groups) { var paramGroup = GetGroup(groups, groupPram.Name); foreach (var definition in groupPram.Definitions) { var binding = bindingMap.get_Item(definition); // 如果参数组的名称包含类型 key,则表示类型绑定。 if (!paramGroup.Name.Contains("Group")) { if (binding is InstanceBinding instanceBinding) { bindingMap.ReInsert(definition, instanceBinding); } else { instanceBinding = uiapp.Application.Create.NewInstanceBinding(elmCtgs); bindingMap.Insert(definition, instanceBinding); } } else { if (binding is TypeBinding typeBinding) { bindingMap.ReInsert(definition, typeBinding); } else { typeBinding = uiapp.Application.Create.NewTypeBinding(elmCtgs); bindingMap.Insert(definition, typeBinding); } } } } } /// /// 是否存在该项目参数 /// /// /// 参数名称 /// 定义 /// 参数绑定 /// public static bool IsExistProjectParam( Document doc, string paramName, out Definition definition, out ElementBinding binding ) { var dep = doc.ParameterBindings.ForwardIterator(); var isExist = false; binding = null; definition = null; while (dep.MoveNext()) { definition = dep.Key; var definitionName = definition.Name; binding = dep.Current as ElementBinding; if (definitionName == paramName) { isExist = true; break; } } return isExist; } /// /// 判断参数是什么参数,true是项目参数的项目参数,false是共享参数的项目参数 /// /// /// public static bool IsProject(Parameter param) { var doc = param.Element.Document; var dict = GetParameterElementBindings(doc); var ds = dict.Where( e => e.Key.GetDefinition().Id == (param.Definition as InternalDefinition)?.Id); if (ds.Any())//说明是项目参数 { var d = ds.FirstOrDefault(); var parameterElement = d.Key; var binding = d.Value; if (parameterElement is SharedParameterElement)//共享参数 { return false; } else//项目参数 { return true; } } return false; } /// /// 根据定义判断是什么参数 /// /// /// /// public static bool IsShared(Document doc, Definition definition) { var sharedParamElems = doc.OfClass() .Cast(); var internalDef = definition as InternalDefinition; foreach (var elem in sharedParamElems) { var def = elem.GetDefinition(); if (internalDef.Id == def.Id) { return true; } } return false; } /// /// 根据参数名判断是否是共享参数 /// /// /// /// public static bool IsShared(Document doc, string paramName) { var dict = GetParameterElementBindings(doc); foreach (var keyValue in dict) { var key = keyValue.Key; if (key is SharedParameterElement && key.Name == paramName) { return true; } } return false; } /// /// 修改内建参数 /// /// /// /// public static void ModifyBuiltInParameter(Parameter parameter, object value) { var success = false; if (parameter == null) { throw new Exception("参数为空"); } if (parameter.IsReadOnly) { throw new Exception("参数是只读的"); } switch (parameter.StorageType) { case StorageType.Double: success = parameter.Set((double)value); break; case StorageType.ElementId: success = parameter.Set((ElementId)value); break; case StorageType.String: success = parameter.Set((string)value); break; case StorageType.Integer: success = parameter.Set((int)value); break; } if (!success) { throw new Exception("赋值失败"); } } public static DefinitionFile OpenSharedParametersFile(Application application) { var sharedParametersFile = application.OpenSharedParameterFile(); return sharedParametersFile; } public static void RemoveFamilyParameter(FamilyInstance instance, string paramName) { Document famdoc = null; Document Document = instance.Document; try { Family family = instance.Symbol.Family; if (family.IsEditable) { famdoc = instance.Document.EditFamily(family); } else { Debug.WriteLine($"{family.Name} 不可编辑。"); } if (famdoc != null) { using (Transaction ts = new(famdoc, "删除参数")) { ts.Start(); var parametersToRemove = famdoc.FamilyManager .GetParameters() .Where(fp => paramName == fp.Definition.Name); foreach (FamilyParameter fp in parametersToRemove) { famdoc.FamilyManager.RemoveParameter(fp); } ts.Commit(); } famdoc.LoadFamily(Document); famdoc.Close(false); } } catch (Exception) { Debug.WriteLine($"{famdoc.Title} 发生错误!"); } } /// /// 移除当前文档中所有可载入族的某些参数 /// /// /// public static void RemoveFamilyParams(Document doc, params string[] paramnames) { var instances = doc.OfClass().Cast(); foreach (var instance in instances) { var family = instance.Symbol.Family; var famdoc = doc.EditFamily(family); using (Transaction trans = new(famdoc, "删除参数")) { trans.Start(); foreach (var paramname in paramnames) { var param1 = instance.Symbol.GetParameters(paramname).FirstOrDefault(); if (param1 != null) { var fparam1 = famdoc.FamilyManager.get_Parameter(paramname); if (fparam1 != null) { famdoc.FamilyManager.RemoveParameter(fparam1); } } //MessageBox.ShowAhead(famdoc.Title); //var fparams = famdoc.FamilyManager.GetAllTypeParameter(); //var para = from p in fparams // where p.Definition.Name == "Code" // select p; } famdoc.LoadFamily(doc, new DefaultFamilyLoadOptions()); trans.Commit(); } famdoc.Close(false); } } /// /// 移除元素上的项目参数 /// /// public static void RemoveProjectParameter(Parameter param) { Element element = param.Element; var doc = element.Document; var dict = GetParameterElementBindings(doc); var bindings = doc.ParameterBindings; var ds = dict.Where( e => e.Key.GetDefinition().Id == (param.Definition as InternalDefinition)?.Id); if (ds.Any())//说明是项目参数 { var d = ds.FirstOrDefault(); var parameter = d.Key; var binding = d.Value; if (binding.Categories.Size == 1)//如果只剩下一个类别,则直接移除 { if (parameter is SharedParameterElement)//共享参数 { bindings.Remove(param.Definition); } else//项目参数 { doc.Delete(parameter.Id); } } else//否则只移除一个类别 { binding.Categories.Erase(element.Category); doc.ParameterBindings.ReInsert(parameter.GetDefinition(), binding); } } } public static void SharedParamsBindingCategoryset( UIApplication uiapp, DefinitionFile sharedParametersFile, ExternalDefinition param, CategorySet categorySet, bool isInstance ) { #if REVIT2018 || REVIT2020 var paramGroup = param.ParameterGroup; #elif REVIT2025 var paramGroup = param.GetGroupTypeId(); #endif var instanceBinding = uiapp.Application.Create.NewInstanceBinding(categorySet); var typeBinding = uiapp.Application.Create.NewTypeBinding(categorySet); var bindingMap = uiapp.ActiveUIDocument.Document.ParameterBindings; var extDef = GetSharedParameter(sharedParametersFile, param.OwnerGroup.Name, param.Name); if (isInstance) { bindingMap.Insert(extDef, instanceBinding, paramGroup); } else { bindingMap.Insert(extDef, typeBinding, paramGroup); } } /// /// 获取类别和参数的绑定 /// /// 激活的文档 public void ShareParameterBinging(Document doc) { var map = doc.ParameterBindings; var dep = map.ForwardIterator(); while (dep.MoveNext()) { var definition = dep.Key; // 获取参数定义的基本信息 var definitionName = definition.Name; #if REVIT2018 || REVIT2020 var parameterType = definition.ParameterType; #elif REVIT2025 var parameterType = definition.GetDataType(); #endif // 几乎都可以转型为InstanceBinding if (dep.Current is InstanceBinding instanceBinding) { // 获取绑定的类别列表 var categorySet = instanceBinding.Categories; } } } public static IEnumerable InstanceCategories { get { yield return "HVAC 区"; yield return "专用设备"; yield return "体量"; yield return "停车场"; yield return "卫浴装置"; yield return "喷头"; yield return "图纸"; yield return "地形"; yield return "场地"; yield return "坡道"; yield return "墙"; yield return "天花板"; yield return "安全设备"; yield return "家具"; yield return "家具系统"; yield return "导线"; yield return "屋顶"; yield return "常规模型"; yield return "幕墙嵌板"; yield return "幕墙竖梃"; yield return "幕墙系统"; yield return "开关系统"; yield return "房间"; yield return "护理呼叫设备"; yield return "数据设备"; yield return "机械设备"; yield return "材质"; yield return "柱"; yield return "标高"; yield return "栏杆扶手"; yield return "植物"; yield return "楼板"; yield return "楼梯"; yield return "橱柜"; yield return "火警设备"; yield return "灯具"; yield return "照明设备"; yield return "环境"; yield return "电气装置"; yield return "电气设备"; yield return "电缆桥架"; yield return "电缆桥架管路"; yield return "电缆桥架配件"; yield return "电话设备"; yield return "电路"; yield return "空间"; yield return "窗"; yield return "竖井洞口"; yield return "管件"; yield return "管道"; yield return "管道占位符"; yield return "管道系统"; yield return "管道附件"; yield return "线管"; yield return "线管管路"; yield return "线管配件"; yield return "组成部分"; yield return "结构加强板"; yield return "结构区域钢筋"; yield return "结构基础"; yield return "结构柱"; yield return "结构桁架"; yield return "结构框架"; yield return "结构梁系统"; yield return "结构路径钢筋"; yield return "结构连接"; yield return "结构钢筋"; yield return "结构钢筋网"; yield return "结构钢筋网区域"; yield return "视图"; yield return "详图项目"; yield return "软管"; yield return "软风管"; yield return "轴网"; yield return "通讯设备"; yield return "道路"; yield return "部件"; yield return "钢筋形状"; yield return "门"; yield return "面积"; yield return "项目信息"; yield return "预制零件"; yield return "风管"; yield return "风管内衬"; yield return "风管占位符"; yield return "风管管件"; yield return "风管系统"; yield return "风管附件"; yield return "风管隔热层"; yield return "风道末端"; } } public static IEnumerable ProjectParamGroups { get { yield return "IFC参数"; yield return "主端点"; yield return "光域"; yield return "其他"; yield return "分区几何图形"; yield return "分析平差"; yield return "分析模型"; yield return "分析结果"; yield return "力"; yield return "力矩"; yield return "卫浴"; yield return "可见性"; yield return "图层"; yield return "图形"; yield return "尺寸标注"; yield return "常规"; yield return "数据"; yield return "整个图例"; yield return "文字"; yield return "机械"; yield return "机械 - 流量"; yield return "机械 - 负荷"; yield return "材质和装饰"; yield return "构造"; yield return "标识数据"; yield return "标题文字"; yield return "模型属性"; yield return "次端点"; yield return "消防系统"; yield return "电气"; yield return "电气 - 照明"; yield return "电气 - 线路"; yield return "电气 - 负荷"; yield return "电气工程"; yield return "管段和管件"; yield return "结构"; yield return "结构分析"; yield return "绿色建筑属性"; yield return "编辑板形状"; yield return "能量分析"; yield return "释放/杆件力"; yield return "钢筋集"; yield return "阶段化"; yield return "限制条件"; } } public static IEnumerable TypeCategories { get { yield return "专用设备"; yield return "体量"; yield return "停车场"; yield return "卫浴装置"; yield return "喷头"; yield return "地形"; yield return "场地"; yield return "坡道"; yield return "墙"; yield return "天花板"; yield return "安全设备"; yield return "家具"; yield return "家具系统"; yield return "导线"; yield return "屋顶"; yield return "常规模型"; yield return "幕墙嵌板"; yield return "幕墙竖梃"; yield return "幕墙系统"; yield return "开关系统"; yield return "护理呼叫设备"; yield return "数据设备"; yield return "机械设备"; yield return "柱"; yield return "标高"; yield return "栏杆扶手"; yield return "植物"; yield return "楼板"; yield return "楼梯"; yield return "橱柜"; yield return "火警设备"; yield return "灯具"; yield return "照明设备"; yield return "环境"; yield return "电气装置"; yield return "电气设备"; yield return "电缆桥架"; yield return "电缆桥架管路"; yield return "电缆桥架配件"; yield return "电话设备"; yield return "窗"; yield return "管件"; yield return "管道"; yield return "管道占位符"; yield return "管道系统"; yield return "管道附件"; yield return "线管"; yield return "线管管路"; yield return "线管配件"; yield return "组成部分"; yield return "结构加强板"; yield return "结构区域钢筋"; yield return "结构基础"; yield return "结构柱"; yield return "结构桁架"; yield return "结构框架"; yield return "结构梁系统"; yield return "结构路径钢筋"; yield return "结构连接"; yield return "结构钢筋"; yield return "结构钢筋网"; yield return "结构钢筋网区域"; yield return "详图项目"; yield return "软管"; yield return "软风管"; yield return "轴网"; yield return "通讯设备"; yield return "部件"; yield return "钢筋形状"; yield return "门"; yield return "预制零件"; yield return "风管"; yield return "风管内衬"; yield return "风管占位符"; yield return "风管管件"; yield return "风管系统"; yield return "风管附件"; yield return "风管隔热层"; yield return "风道末端"; } } }