RevitTrigger.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System;
  2. using System.Collections.Generic;
  3. using Autodesk.Revit.DB;
  4. namespace FWindSoft.Revit
  5. {
  6. /// <summary>
  7. /// 触发器就是过滤器
  8. /// </summary>
  9. public class RevitTrigger
  10. {
  11. public RevitTrigger(ElementFilter filter, ChangeType change)
  12. {
  13. Filter = filter;
  14. ChangeType = change;
  15. }
  16. public RevitTrigger(Document document, ElementFilter filter, ChangeType change):this(filter,change)
  17. {
  18. Document = document;
  19. }
  20. public RevitTrigger(Document document, ICollection<ElementId> elements, ChangeType change):this(document, filter:null, change:change)
  21. {
  22. ElementIds = elements;
  23. }
  24. #region 触发器关联属性
  25. public Document Document { get; set; }
  26. public ICollection<ElementId> ElementIds { get; set; }
  27. public ChangeType ChangeType { get; set; }
  28. public ElementFilter Filter { get; set; }
  29. #endregion
  30. #region 方法标记
  31. /// <summary>
  32. /// 附加触发器
  33. /// </summary>
  34. /// <param name="updater"></param>
  35. public void AttachUpdater(RevitUpdater updater)
  36. {
  37. AttachUpdaterId(updater.GetUpdaterId());
  38. }
  39. public void AttachUpdaterId(UpdaterId updaterId)
  40. {
  41. if (Document == null)
  42. {
  43. UpdaterRegistry.AddTrigger(updaterId, Filter, ChangeType);
  44. }
  45. else if(ElementIds==null)
  46. {
  47. UpdaterRegistry.AddTrigger(updaterId, Document, Filter, ChangeType);
  48. }
  49. else if (Filter == null)
  50. {
  51. UpdaterRegistry.AddTrigger(updaterId, Document, ElementIds, ChangeType);
  52. }
  53. }
  54. #endregion
  55. }
  56. }