DocExtend.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /* ==============================================================================
  2. * 功能描述:DocExtend
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/6/11 16:00:53
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Text.RegularExpressions;
  12. using System.Threading.Tasks;
  13. using Autodesk.Revit.DB;
  14. using SAGA.DotNetUtils;
  15. using SAGA.DotNetUtils.Extend;
  16. using SAGA.MBI.Common;
  17. using SAGA.MBI.DataArrange;
  18. using SAGA.MBI.Model;
  19. using SAGA.MBI.WinView.Upload;
  20. using SAGA.RevitUtils.Extends;
  21. using SAGA.RevitUtils.ExtensibleStorage;
  22. namespace SAGA.MBI.Tools
  23. {
  24. /// <summary>
  25. /// DocExtend
  26. /// </summary>
  27. public static class DocExtend
  28. {
  29. /// <summary>
  30. /// 关闭文档
  31. /// </summary>
  32. /// <param name="path"></param>
  33. /// <returns></returns>
  34. public static bool CloseDoc(string path)
  35. {
  36. if (path == null || !File.Exists(path)) return false;
  37. bool result = true;
  38. try
  39. {
  40. //打开空文件并激活
  41. var placeholderFile = MBIConst.EmptyFilePath;
  42. var uiApp = ExternalDataWrapper.Current.UiApp;
  43. var docs = uiApp.Application.Documents;
  44. if (docs.IsEmpty) return result;
  45. if (uiApp.ActiveUIDocument != null && uiApp.ActiveUIDocument.Document.PathName == path)
  46. {
  47. var docCur = uiApp.ActiveUIDocument;
  48. uiApp.OpenAndActivateDocument(placeholderFile);
  49. result = docCur.SaveAndClose();
  50. }
  51. else
  52. {
  53. foreach (Document doc in docs)
  54. {
  55. if (doc.PathName == path)
  56. {
  57. //版本升级,保存
  58. var verionName = doc.Application.VersionName;
  59. var info = BasicFileInfo.Extract(doc.PathName);
  60. var savedInVersion = info.SavedInVersion; //<==Autodesk Revit 2014
  61. result = doc.Close(verionName != savedInVersion || doc.IsModified);
  62. }
  63. }
  64. }
  65. }
  66. catch (Exception e)
  67. {
  68. Console.WriteLine(e);
  69. }
  70. return result;
  71. }
  72. /// <summary>
  73. /// 关闭文档
  74. /// </summary>
  75. /// <param name="path"></param>
  76. /// <returns></returns>
  77. public static bool CloseDoc(this Document doc)
  78. {
  79. return CloseDoc(doc?.PathName);
  80. }
  81. /// <summary>
  82. /// 简单关闭模型不保存
  83. /// </summary>
  84. /// <param name="doc"></param>
  85. /// <returns></returns>
  86. public static bool CloseDocSimple(this Document doc)
  87. {
  88. bool result = true;
  89. var basePath = doc.PathName;
  90. var uiApp = ExternalDataWrapper.Current.UiApp;
  91. if (uiApp.ActiveUIDocument != null && uiApp.ActiveUIDocument.Document.PathName == basePath)
  92. {
  93. result= false;
  94. }
  95. else
  96. {
  97. result= doc.Close();
  98. }
  99. return result;
  100. }
  101. /// <summary>
  102. /// 获取当前层的MFloor对象
  103. /// </summary>
  104. /// <param name="doc"></param>
  105. /// <returns></returns>
  106. public static MFloor GetCurMFloor(this Document doc)
  107. {
  108. MFloor floor = null;
  109. string floorId = doc.PathName.GetFileName();
  110. TreeNodeItem tree = DalModeFileManange.GetFloorTreeById(floorId);
  111. if (tree != null)
  112. {
  113. MFileBase floorBase = tree.Item;
  114. floor = floorBase as MFloor;
  115. }
  116. return floor;
  117. }
  118. /// <summary>
  119. /// 由code获取FamilySymbol
  120. /// </summary>
  121. /// <param name="doc"></param>
  122. /// <param name="code"></param>
  123. /// <returns></returns>
  124. public static FamilySymbol GetFamilySymbol(this Document doc, string code)
  125. {
  126. Func<string, bool> filterFamily = (t) =>
  127. {
  128. return Regex.IsMatch(t, $@"{code}\s*-\s*\S*");
  129. };
  130. List<Family> listFamily = doc.GetFamilys();
  131. var fa = listFamily.FirstOrDefault(t => filterFamily(t.Name));
  132. List<FamilySymbol> symbolList = fa?.GetFamilySymbols();
  133. var fs= symbolList?.FirstOrDefault();
  134. if (fs!=null&&!fs.IsActive)
  135. fs.Activate();
  136. return fs;
  137. }
  138. }
  139. }