/*------------------------------------------------------------------------- * 功能描述: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); } } }