UpdateRelationEquipinSpace.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /* ==============================================================================
  2. * 功能描述:检查设备所在楼层
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/8/10 16:36:26
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using Autodesk.Revit.DB;
  12. using Autodesk.Revit.DB.Mechanical;
  13. using Newtonsoft.Json.Linq;
  14. using SAGA.DotNetUtils;
  15. using SAGA.DotNetUtils.Logger;
  16. using SAGA.DotNetUtils.Others;
  17. using SAGA.MBI.Calc;
  18. using SAGA.MBI.Common;
  19. using SAGA.MBI.DataArrange;
  20. using SAGA.MBI.Model;
  21. using SAGA.MBI.RequestData;
  22. using SAGA.MBI.Tools;
  23. using SAGA.MBI.WinView.Upload;
  24. using SAGA.RevitUtils.Extends;
  25. namespace SAGA.MBI.ToolsData
  26. {
  27. /// <summary>
  28. /// UpdateRelationEquipinFloor
  29. /// </summary>
  30. public class UpdateRelationEquipinSpace
  31. {
  32. /// <summary>
  33. /// 检查并处理所有楼层
  34. /// </summary>
  35. public static void OperateAll()
  36. {
  37. var floors = DalUploadFloor.GetHasFileFloors();
  38. foreach (UploadFloor floor in floors)
  39. {
  40. Operate(floor.MFloor);
  41. }
  42. }
  43. /// <summary>
  44. /// 只处理当前楼层
  45. /// </summary>
  46. public static void OperateCurFloor()
  47. {
  48. MFloor floor = ExternalDataWrapper.Current.Doc.GetCurMFloor();
  49. if (floor != null)
  50. Operate(floor);
  51. }
  52. /// <summary>
  53. /// 检查并处理
  54. /// </summary>
  55. /// <param name="floor"></param>
  56. /// <returns></returns>
  57. private static void Operate(MFloor floor)
  58. {
  59. var context = DalCommon.DownLoadFloorDataByBIMFloorInfo(floor);
  60. try
  61. {
  62. RebuildCloudData(context);
  63. }
  64. catch (Exception e)
  65. {
  66. MessageShowBase.Show(e);
  67. }
  68. finally
  69. {
  70. }
  71. }
  72. /// <summary>
  73. /// 检查设备所在楼层关系
  74. /// </summary>
  75. /// <param name="baseContext"></param>
  76. private static void RebuildCloudData(CalcContext baseContext)
  77. {
  78. baseContext.OpenDocument();
  79. var doc = baseContext.RevitDoc;
  80. try
  81. {
  82. JObject jobject = new JObject();
  83. JArray jcriterias = new JArray();
  84. string graphtype = RelationConst.EquipInSpaceGraphId;
  85. string reltyp = RelationConst.EquipInSpaceGraphRelationType;
  86. string graphid = RelationRequest.GetCurrentGraphId(graphtype);
  87. if (graphid == null) return;
  88. if (baseContext.MEquipments.Count == 0 && baseContext.MEquipmentParts.Count == 0) return;
  89. //空间不处理
  90. //检查设备
  91. foreach (var mode in baseContext.MEquipments)
  92. {
  93. string equipid = mode.Id;
  94. string spaceId = GetMSpace(doc, mode.BimID, baseContext.MSpaces.ToList());
  95. if (spaceId.IsNullOrEmpty()) continue;
  96. JObject jitem = new JObject();
  97. jitem.Add("from_id", equipid);
  98. jitem.Add("to_id", spaceId);
  99. jitem.Add("graph_id", graphid);
  100. jitem.Add("rel_type", reltyp);
  101. jcriterias.Add(jitem);
  102. }
  103. //检查部件
  104. foreach (var mode in baseContext.MEquipmentParts)
  105. {
  106. string equipid = mode.Id;
  107. string spaceId = GetMSpace(doc, mode.BimID, baseContext.MSpaces.ToList());
  108. if (spaceId.IsNullOrEmpty()) continue;
  109. JObject jitem = new JObject();
  110. jitem.Add("from_id", equipid);
  111. jitem.Add("to_id", spaceId);
  112. jitem.Add("graph_id", graphid);
  113. jitem.Add("rel_type", reltyp);
  114. jcriterias.Add(jitem);
  115. }
  116. //信标不用检查
  117. jobject.Add("criterias", jcriterias);
  118. RelationRequest.AddRelation(jobject);
  119. }
  120. catch (Exception e)
  121. {
  122. Console.WriteLine(e);
  123. }
  124. finally
  125. {
  126. baseContext.CloseDocument();
  127. }
  128. }
  129. private static string GetMSpace(Document doc,string bimid,List<MISpace> spaces)
  130. {
  131. FamilyInstance fi = doc.GetElement(bimid.GetBIMID()) as FamilyInstance;
  132. if (fi == null) return null;
  133. var space = fi.GetReferenceSpace();
  134. if (space == null) return null;
  135. var spaceid = space.GetCloudBIMId();
  136. var mspace = spaces.FirstOrDefault(t => t.BimID == spaceid);
  137. if (mspace == null)
  138. {
  139. mspace = DalSpace.GetSpace(space);
  140. mspace.Operator = DocumentChangedOperator.Add;
  141. mspace.AddObject();
  142. }
  143. return mspace?.Id;
  144. }
  145. }
  146. }