ParameterDefinition.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:ParameterDefinition
  3. * 作者:xulisong
  4. * 创建时间: 2019/3/7 9:34:07
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Autodesk.Revit.DB;
  13. namespace FWindSoft.Revit
  14. {
  15. /// <summary>
  16. /// 参数定义
  17. /// </summary>
  18. public class ParameterDefinition
  19. {
  20. private DefinitionType m_DefinitionType;
  21. #region 内部标志
  22. private enum DefinitionType
  23. {
  24. Name,
  25. BuiltIn,
  26. Guid,
  27. }
  28. #endregion
  29. #region 封装输入参数
  30. /*
  31. * 将多种参数查询统一形式
  32. */
  33. #endregion
  34. public ParameterDefinition(string parameterName)
  35. {
  36. m_DefinitionType = DefinitionType.Name;
  37. Name = parameterName;
  38. }
  39. public ParameterDefinition(BuiltInParameter builtInParameter)
  40. {
  41. m_DefinitionType = DefinitionType.BuiltIn;
  42. BuiltInParameter = builtInParameter;
  43. }
  44. public ParameterDefinition(Guid guid)
  45. {
  46. m_DefinitionType = DefinitionType.Guid;
  47. Guid = guid;
  48. }
  49. /// <summary>
  50. /// 参数名称
  51. /// </summary>
  52. public string Name { get; private set; }
  53. /// <summary>
  54. /// 参数类别
  55. /// </summary>
  56. public BuiltInParameter BuiltInParameter
  57. {
  58. get; private set;
  59. }
  60. /// <summary>
  61. /// 参数唯一值
  62. /// </summary>
  63. public Guid Guid { get; private set; }
  64. /// <summary>
  65. /// 修改检测[ture是]
  66. /// </summary>
  67. public Func<Element, string, bool> CanUpdate { get; set; }
  68. /// <summary>
  69. /// 获取指定元素的参数
  70. /// </summary>
  71. /// <param name="element"></param>
  72. /// <returns></returns>
  73. public Parameter LookupParameter(Element element)
  74. {
  75. Parameter parameter = null;
  76. switch (m_DefinitionType)
  77. {
  78. case DefinitionType.Name:
  79. {
  80. parameter= element.LookupParameter(Name);
  81. break;
  82. }
  83. case DefinitionType.Guid:
  84. {
  85. parameter = element.get_Parameter(Guid);
  86. break;
  87. }
  88. case DefinitionType.BuiltIn:
  89. {
  90. parameter = element.get_Parameter(BuiltInParameter);
  91. break;
  92. }
  93. }
  94. return parameter;
  95. }
  96. /// <summary>
  97. /// 这顶指定元素的值
  98. /// </summary>
  99. /// <param name="element"></param>
  100. /// <param name="value"></param>
  101. public bool SetParameter(Element element, string value)
  102. {
  103. bool result = false;
  104. var parameter = LookupParameter(element);
  105. if (parameter == null)
  106. return result;
  107. if (CanUpdate != null && !CanUpdate(element, value))
  108. return result;
  109. return ParameterUtil.SetValue(parameter, value);
  110. }
  111. /// <summary>
  112. /// 设置元素值,检查如果新值与就值相同,则不进行更新
  113. /// </summary>
  114. /// <param name="element"></param>
  115. /// <param name="value"></param>
  116. public bool SetParameterWithCheck(Element element, string value)
  117. {
  118. bool result = false;
  119. var parameter = LookupParameter(element);
  120. if (parameter == null)
  121. return result;
  122. var oldValue = ParameterUtil.GetValue(parameter);
  123. if (oldValue == value)
  124. return result;
  125. if (CanUpdate != null && !CanUpdate(element, value))
  126. return result;
  127. return ParameterUtil.SetValue(parameter, value);
  128. }
  129. }
  130. }