怎么判断Revit的参数Parameter的值类型呢?
方法一、通过StorageType判断,请看下图:
使用StorageType,可以进行判断。StorageType一共分以下几种:
None = 0,
Integer = 1,
Double = 2,
String = 3,
ElementId = 4
从字面意思是比较好理解的。其中None的话,我也不知道在什么条件下触发。ElementId就是元素id,你可以当成是一个Int值。
提供一个简单类:
/// <summary>
/// 编码定义
/// </summary>
/// <typeparam name="T"></typeparam>
/// <creator>marc</creator>
public interface ICodeDefinition<out T>
{
/// <summary>
/// 编码号
/// </summary>
T Code { get; }
/// <summary>
/// 描述
/// </summary>
string Description { get; }
/// <summary>
/// 编码名称
/// </summary>
string Name { get; }
}
/// <summary>
/// 编码定义
/// </summary>
/// <creator>marc</creator>
public class CodeDefinition<T> : ICodeDefinition<T>
{
/// <summary>
/// 编码名称
/// </summary>
public string Name { get; }
/// <summary>
/// 编码号
/// </summary>
public T Code { get; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; }
/// <summary>
/// 构造函数
/// </summary>
public CodeDefinition(string name, T code, string description)
{
this.Name = name;
this.Code = code;
this.Description = description;
}
}
/// <summary>
/// 属性值的类型定义
/// </summary>
internal class FieldTypeDefinition
{
/// <summary>
/// 字符串
/// </summary>
public static CodeDefinition<int> String = new CodeDefinition<int>("字符串", 0, "字符串");
/// <summary>
/// 长字符串
/// </summary>
public static CodeDefinition<int> LString = new CodeDefinition<int>("长字符串", 12, "长字符串");
/// <summary>
/// 整数
/// </summary>
public static CodeDefinition<int> Int = new CodeDefinition<int>("整数", 2, "整数");
/// <summary>
/// 浮点数
/// </summary>
public static CodeDefinition<int> Double = new CodeDefinition<int>("浮点数", 3, "浮点数");
/// <summary>
/// 日期
/// </summary>
public static CodeDefinition<int> Date = new CodeDefinition<int>("日期", 1, "日期");
/// <summary>
/// 坐标点
/// </summary>
public static CodeDefinition<int> Coordinate = new CodeDefinition<int>("坐标点", 4, "坐标点(X,Y,Z)");
/// <summary>
/// 高程坐标
/// </summary>
public static CodeDefinition<int> Elevation = new CodeDefinition<int>("高程坐标", 6, "高程坐标(X,Y,Z)");
/// <summary>
/// 向量值
/// </summary>
public static CodeDefinition<int> Vector = new CodeDefinition<int>("向量值", 5, "向量值");
/// <summary>
/// 用户
/// </summary>
public static CodeDefinition<int> User = new CodeDefinition<int>("用户", 8, "用户");
/// <summary>
/// 部门
/// </summary>
public static CodeDefinition<int> Depart = new CodeDefinition<int>("部门", 9, "部门");
/// <summary>
/// 实体
/// </summary>
public static CodeDefinition<int> Entity = new CodeDefinition<int>("实体", 10, "实体");
/// <summary>
/// 转为大数据的属性类型
/// </summary>
/// <param name="revitStorageType">
/// Revit存储类型:
/// None = 0,
/// Integer = 1,
/// Double = 2,
/// String = 3,
/// ElementId = 4
/// </param>
/// <returns></returns>
public static CodeDefinition<int> As(string revitStorageType)
{
if (revitStorageType == "None")
{
return String;
}
else if (revitStorageType == "Integer")
{
return Int;
}
else if (revitStorageType == "Double")
{
return Double;
}
else if (revitStorageType == "String")
{
return String;
}
else if (revitStorageType == "ElementId")
{
return Int;
}
return String;
}
}
方法二、通过ParameterGroup来判断,如下图:
但使用此方式,更适合于判断某一类的参数。而不是特别适合于参数值的类型判断。当然,某一类的参数,他们的参数值的类型应该是一样的就是了。
建议您使用方式一进行处理。
祝您用餐愉快。