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();
}
}
}
}