using SAGA.GplotRelationComputerManage; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SAGA.GplotManage { public class RelationDataManager { #region 静态方法 /// /// 获取所有使用uploader /// /// public static List GetAllUploaders() { List uploaders = new List(); uploaders.Add(new ElectricalRelationUploader("EquipPower", "设备电源")); uploaders.Add(new ElectricalRelationUploader("LUDistribution", "低压配电柜关系")); uploaders.Add(new ElectricalRelationUploader("ControlRelation","对象受控关系")); uploaders.Add(new SpaceRelationUploader("ElementSpNeighborhood", "空间邻接关系")); uploaders.Add(new SpaceRelationUploader("TrafficNetwork", "建筑交通网络")); uploaders.Add(new SpaceRelationUploader("ConvectionNetwork", "空气流通网络")); uploaders.Add(new SpaceRelationUploader("RadiationNetwork", "光照辐射网络")); var sytemRelationTypes = RelationTypeManager.GetSystemRelationTypes(); foreach (RelationItem relation in sytemRelationTypes) { uploaders.Add(new SystemRelationUploader(relation.Type, relation.Name)); } return uploaders; } public static void ComputerRelations(List uploaders, bool useCache) { bool containSpace = false; List systems = new List(); foreach (var uploader in uploaders) { if (uploader is SystemRelationUploader) { systems.Add(uploader.RelationType); continue; } if (!containSpace && uploader is SpaceRelationUploader) { containSpace = true; continue; } } //计算数据,以后可能合并 #region 计算空间数据 SpaceComputerHandler spaceHandler = new SpaceComputerHandler(); if (containSpace) { if (useCache) { spaceHandler.ComputerWidthCache(); } else { spaceHandler.Computer(); } } #endregion #region 计算管道数据 SystemComputerHandler systemHandler = new SystemComputerHandler(); if (useCache) { systemHandler.ComputerWidthCache(systems); } else { systemHandler.Computer(systems); } #endregion } #endregion public void InitRelationData(List uploaders) { ComputerRelations(uploaders, true); } public void CommitRelations(List uploaders) { InitRelationData(uploaders); foreach (RelationUploader uploader in uploaders) { uploader.Upload(); } } /// /// 将传入各个关系,重新计算,在生成关系数据 /// /// public void CommitRelationsByReComputer(List uploaders) { ComputerRelations(uploaders, false); foreach (RelationUploader uploader in uploaders) { uploader.Upload(); } } } }