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 "风道末端";
}
}
}