/*-------------------------------------------------------------------------
* 功能描述:ParameterDefinition
* 作者:xulisong
* 创建时间: 2019/3/7 9:34:07
* 版本号:v1.0
* -------------------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
namespace FWindSoft.Revit
{
///
/// 参数定义
///
public class ParameterDefinition
{
private DefinitionType m_DefinitionType;
#region 内部标志
private enum DefinitionType
{
Name,
BuiltIn,
Guid,
}
#endregion
#region 封装输入参数
/*
* 将多种参数查询统一形式
*/
#endregion
public ParameterDefinition(string parameterName)
{
m_DefinitionType = DefinitionType.Name;
Name = parameterName;
}
public ParameterDefinition(BuiltInParameter builtInParameter)
{
m_DefinitionType = DefinitionType.BuiltIn;
BuiltInParameter = builtInParameter;
}
public ParameterDefinition(Guid guid)
{
m_DefinitionType = DefinitionType.Guid;
Guid = guid;
}
///
/// 参数名称
///
public string Name { get; private set; }
///
/// 参数类别
///
public BuiltInParameter BuiltInParameter
{
get; private set;
}
///
/// 参数唯一值
///
public Guid Guid { get; private set; }
///
/// 修改检测[ture是]
///
public Func CanUpdate { get; set; }
///
/// 获取指定元素的参数
///
///
///
public Parameter LookupParameter(Element element)
{
Parameter parameter = null;
switch (m_DefinitionType)
{
case DefinitionType.Name:
{
parameter= element.LookupParameter(Name);
break;
}
case DefinitionType.Guid:
{
parameter = element.get_Parameter(Guid);
break;
}
case DefinitionType.BuiltIn:
{
parameter = element.get_Parameter(BuiltInParameter);
break;
}
}
return parameter;
}
///
/// 这顶指定元素的值
///
///
///
public bool SetParameter(Element element, string value)
{
bool result = false;
var parameter = LookupParameter(element);
if (parameter == null)
return result;
if (CanUpdate != null && !CanUpdate(element, value))
return result;
return ParameterUtil.SetValue(parameter, value);
}
///
/// 设置元素值,检查如果新值与就值相同,则不进行更新
///
///
///
public bool SetParameterWithCheck(Element element, string value)
{
bool result = false;
var parameter = LookupParameter(element);
if (parameter == null)
return result;
var oldValue = ParameterUtil.GetValue(parameter);
if (oldValue == value)
return result;
if (CanUpdate != null && !CanUpdate(element, value))
return result;
return ParameterUtil.SetValue(parameter, value);
}
}
}