RenameSystemName.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /* ==============================================================================
  2. * 功能描述:RenameSystemName
  3. * 创 建 者:Garrett
  4. * 创建日期:2019/6/20 9:11:31
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using Autodesk.Revit.DB;
  11. using Autodesk.Revit.DB.Electrical;
  12. using SAGA.DotNetUtils.Extend;
  13. using SAGA.DotNetUtils.NPOI;
  14. using SAGA.DotNetUtils.Others;
  15. using SAGA.RevitUtils.Extends;
  16. namespace Saga.PlugIn.Other
  17. {
  18. /// <summary>
  19. /// RenameSystemName
  20. /// </summary>
  21. class RenameSystemName
  22. {
  23. private static void OperateFloor(string fullPah, List<Ref_RenameSystem> refRenameSystems)
  24. {
  25. var doc= ExternalDataWrapper.Current.UiApp.Application.OpenDocumentFile(fullPah);
  26. using (Transaction trans = new Transaction(doc, "重命名系统名称"))
  27. {
  28. trans.Start();
  29. try
  30. {
  31. var types = doc.GetElements(typeof(MEPSystemType));
  32. types.AddRange(doc.GetElements(typeof(CableTrayType)));
  33. foreach (ElementType type in types)
  34. {
  35. string typeName = type.Name;
  36. var refPair=refRenameSystems.FirstOrDefault(t => t.OldName == typeName);
  37. if (refPair != null)
  38. {
  39. type.Name = refPair.NewName;
  40. }
  41. }
  42. trans.Commit();
  43. }
  44. catch (Exception e)
  45. {
  46. Console.WriteLine(e);
  47. trans.RollBack();
  48. }
  49. }
  50. }
  51. public void Operate(string referPath,string revitDir)
  52. {
  53. var refPairs = GetReferencePairs(referPath);
  54. if (!refPairs.Any()) return;
  55. var list = GetRevitFiles(revitDir);
  56. if (!list.Any()) return;
  57. foreach (string fullPath in list)
  58. {
  59. OperateFloor(fullPath, refPairs);
  60. }
  61. }
  62. /// <summary>
  63. /// 获取需要修改的Revit文件
  64. /// </summary>
  65. /// <param name="revitDir"></param>
  66. /// <returns></returns>
  67. private static List<string> GetRevitFiles(string revitDir)
  68. {
  69. DirectoryInfo directory=new DirectoryInfo(revitDir);
  70. List<string> list=new List<string>();
  71. try
  72. {
  73. list=directory.GetFiles("*.rvt").Where(t=>!t.FullName.Is000File()).Select(t=>t.FullName).ToList();
  74. }
  75. catch (Exception e)
  76. {
  77. Console.WriteLine(e);
  78. }
  79. return list;
  80. }
  81. /// <summary>
  82. /// 参考-表
  83. /// </summary>Sheet1
  84. [SheetInfo(SheetName = "Sheet1", RowStartIndex = 3)]
  85. public class Ref_RenameSystem
  86. {
  87. [CellIndex(2)]
  88. public string OldName { get; set; }
  89. [CellIndex(3)]
  90. public string NewName { get; set; }
  91. }
  92. /// <summary>
  93. /// 获取可识别的管道系统名称
  94. /// </summary>
  95. /// <returns></returns>
  96. private static List<Ref_RenameSystem> GetReferencePairs(string path)
  97. {
  98. var list = NPOIHelper
  99. .ConvertExcelSheetToModel<Ref_RenameSystem>(path);
  100. return list;
  101. }
  102. }
  103. }