RelationDataManager.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using SAGA.GplotRelationComputerManage;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace SAGA.GplotManage
  8. {
  9. public class RelationDataManager
  10. {
  11. #region 静态方法
  12. /// <summary>
  13. /// 获取所有使用uploader
  14. /// </summary>
  15. /// <returns></returns>
  16. public static List<RelationUploader> GetAllUploaders()
  17. {
  18. List<RelationUploader> uploaders = new List<RelationUploader>();
  19. uploaders.Add(new ElectricalRelationUploader("EquipPower", "设备电源"));
  20. uploaders.Add(new ElectricalRelationUploader("LUDistribution", "低压配电柜关系"));
  21. uploaders.Add(new ElectricalRelationUploader("ControlRelation","对象受控关系"));
  22. uploaders.Add(new SpaceRelationUploader("ElementSpNeighborhood", "空间邻接关系"));
  23. uploaders.Add(new SpaceRelationUploader("TrafficNetwork", "建筑交通网络"));
  24. uploaders.Add(new SpaceRelationUploader("ConvectionNetwork", "空气流通网络"));
  25. uploaders.Add(new SpaceRelationUploader("RadiationNetwork", "光照辐射网络"));
  26. var sytemRelationTypes = RelationTypeManager.GetSystemRelationTypes();
  27. foreach (RelationItem relation in sytemRelationTypes)
  28. {
  29. uploaders.Add(new SystemRelationUploader(relation.Type, relation.Name));
  30. }
  31. return uploaders;
  32. }
  33. public static void ComputerRelations(List<RelationUploader> uploaders, bool useCache)
  34. {
  35. bool containSpace = false;
  36. List<string> systems = new List<string>();
  37. foreach (var uploader in uploaders)
  38. {
  39. if (uploader is SystemRelationUploader)
  40. {
  41. systems.Add(uploader.RelationType);
  42. continue;
  43. }
  44. if (!containSpace && uploader is SpaceRelationUploader)
  45. {
  46. containSpace = true;
  47. continue;
  48. }
  49. }
  50. //计算数据,以后可能合并
  51. #region 计算空间数据
  52. SpaceComputerHandler spaceHandler = new SpaceComputerHandler();
  53. if (containSpace)
  54. {
  55. if (useCache)
  56. {
  57. spaceHandler.ComputerWidthCache();
  58. }
  59. else
  60. {
  61. spaceHandler.Computer();
  62. }
  63. }
  64. #endregion
  65. #region 计算管道数据
  66. SystemComputerHandler systemHandler = new SystemComputerHandler();
  67. if (useCache)
  68. {
  69. systemHandler.ComputerWidthCache(systems);
  70. }
  71. else
  72. {
  73. systemHandler.Computer(systems);
  74. }
  75. #endregion
  76. }
  77. #endregion
  78. public void InitRelationData(List<RelationUploader> uploaders)
  79. {
  80. ComputerRelations(uploaders, true);
  81. }
  82. public void CommitRelations(List<RelationUploader> uploaders)
  83. {
  84. InitRelationData(uploaders);
  85. foreach (RelationUploader uploader in uploaders)
  86. {
  87. uploader.Upload();
  88. }
  89. }
  90. /// <summary>
  91. /// 将传入各个关系,重新计算,在生成关系数据
  92. /// </summary>
  93. /// <param name="uploaders"></param>
  94. public void CommitRelationsByReComputer(List<RelationUploader> uploaders)
  95. {
  96. ComputerRelations(uploaders, false);
  97. foreach (RelationUploader uploader in uploaders)
  98. {
  99. uploader.Upload();
  100. }
  101. }
  102. }
  103. }