373 lines
14 KiB
C
373 lines
14 KiB
C
#ifndef DIAGRAM_H
|
||
#define DIAGRAM_H
|
||
/*********组态图********/
|
||
#include <QString>
|
||
#include <QUuid>
|
||
#include <QJsonObject>
|
||
#include <QHash>
|
||
#include <QList>
|
||
#include <QPointF>
|
||
#include <QRectF>
|
||
|
||
// 组态图信息
|
||
struct DiagramInfo {
|
||
QVariant id; //临时id使用uuid,load数据使用数据库自增id
|
||
QString sName;
|
||
QString sTag;
|
||
QVariant parentId;
|
||
QString sBasePageName; //父组态图名称
|
||
};
|
||
|
||
struct DiagramEditorWizardBusInfo //组态编辑母线信息
|
||
{
|
||
int nIndex = 0;
|
||
double dVoltage = 0; //电压等级
|
||
int nLineType = 1; //1单母线,2双母线
|
||
int nNum1 = 0; //1母
|
||
int nNum2 = 0; //2母
|
||
int connectType = 0; //接线方式,1为分段连接
|
||
int nState = 0; //母线状态位 0已保存1新建2修改
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorWizardBusInfo &data) {
|
||
out << data.nIndex << data.dVoltage << data.nLineType << data.nNum1 << data.nNum2 << data.connectType << data.nState;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorWizardBusInfo &data) {
|
||
in >> data.nIndex >> data.dVoltage >> data.nLineType >> data.nNum1 >> data.nNum2 >> data.connectType >> data.nState;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
enum class TransformerType //变压器类型
|
||
{
|
||
twoWinding = 0, //两绕组
|
||
threeWinding //三绕组
|
||
};
|
||
|
||
enum class BayType //间隔类型
|
||
{
|
||
busSectionBay = 0, //分段
|
||
busCouplerBay, //母联
|
||
ptBay, //pt
|
||
incomingBay, //进线
|
||
outcomingBay, //出线
|
||
compensationBay, //无功补偿
|
||
bypassBay, //旁路
|
||
mainTransformerBay //主变
|
||
};
|
||
|
||
enum class EditorItemType //组态编辑中的图形项类型
|
||
{
|
||
bus = 1, //母线
|
||
bay, //间隔
|
||
trans, //变压器
|
||
line, //连接线
|
||
None //空白占位图
|
||
};
|
||
|
||
struct EditorTransConnection //组态变压器连接信息
|
||
{
|
||
QString sName;
|
||
int nPara = 0; //012,高中低侧
|
||
};
|
||
|
||
struct DiagramEditorWizardTransformerInfo //组态变压器信息
|
||
{
|
||
QString sName;
|
||
TransformerType nType;
|
||
double dVoltageLevel;
|
||
QList<EditorTransConnection> lstBindObj; //连接的对象
|
||
};
|
||
|
||
struct DiagramEditorWizardBayInfo //组态间隔信息
|
||
{
|
||
QString sName;
|
||
BayType nType;
|
||
double dVoltageLevel;
|
||
QList<QString> lstBindObj; //连接的对象
|
||
};
|
||
|
||
struct DiagramEditorComponentInfo //组态设备信息
|
||
{
|
||
int nCategory = 0; //分类 0电气设备1连接关系
|
||
QString sName;
|
||
int nType = 0; //类型 1母线2异步电动机3断路器4电缆5电流互感器6电压互感器7隔离开关8接地开关9快速接地开关10双掷接地隔离开关11带电指示器12避雷器13电缆出线套筒14电缆端
|
||
QString sBindObj; //所关联的实体名 (母线block,间隔block,变压器高中低端子)
|
||
int nBindType = 0; //关联实体的类型 1母线2间隔3变压器
|
||
int nBindPara = 0; //关联额外参数,关联变压器时为(0高1中2低)
|
||
QString sBindParent; //关联父item名,关联变压器时为变压器名
|
||
QStringList sUsedRoute; //使用设备的线路名
|
||
int nUsedDirection = 0; //被占用的方向 8421 上下左右
|
||
QPoint deltaPos = QPoint(0,0); //相对坐标(相对间隔)
|
||
QUuid uid;
|
||
int nFlag = 0; //标志0未使用1新建2修改
|
||
int nRotate = 0; //旋转角
|
||
|
||
bool operator ==(const DiagramEditorComponentInfo& obj) const {
|
||
if(nCategory == obj.nCategory && sName == obj.sName && nType == obj.nType && sBindObj == obj.sBindObj && nBindType == obj.nBindType &&
|
||
sUsedRoute == obj.sUsedRoute && nUsedDirection == obj.nUsedDirection && deltaPos == obj.deltaPos && uid == obj.uid && nFlag == obj.nFlag && nRotate == obj.nRotate)
|
||
return true;
|
||
else
|
||
return false;
|
||
}
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorComponentInfo &data) {
|
||
out << data.nCategory << data.sName << data.nType << data.sBindObj << data.nBindType << data.nBindPara << data.sBindParent << data.sUsedRoute << data.nUsedDirection << data.deltaPos << data.uid << data.nFlag << data.nRotate;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorComponentInfo &data) {
|
||
in >> data.nCategory >> data.sName >> data.nType >> data.sBindObj >> data.nBindType >> data.nBindPara >> data.sBindParent >> data.sUsedRoute >> data.nUsedDirection >> data.deltaPos >> data.uid >> data.nFlag >> data.nRotate;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
inline uint qHash(const DiagramEditorComponentInfo &key, uint seed = 0) {
|
||
return qHash(key.uid, seed);
|
||
}
|
||
|
||
struct DiagramEditorRouteInfo //间隔中单条线路信息
|
||
{
|
||
QString sRouteName;
|
||
bool bMainRoute = false; //主线路(包含设备最多的线路,决定整体布局)
|
||
QList<DiagramEditorComponentInfo> lstCompo;
|
||
QList<DiagramEditorComponentInfo> lstOrder; //线路顺序容器(计算用)
|
||
QList<DiagramEditorComponentInfo> lstReverse; //逆序容器(计算用)
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorRouteInfo &data) {
|
||
out << data.sRouteName << data.bMainRoute << data.lstCompo << data.lstOrder << data.lstReverse;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorRouteInfo &data) {
|
||
in >> data.sRouteName >> data.bMainRoute >> data.lstCompo >> data.lstOrder >> data.lstReverse;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
struct DiagramEditorBayInfo //组态编辑间隔信息
|
||
{
|
||
QString name; //间隔名
|
||
int nLayout; //布局 0纵向1横向
|
||
QList<QUuid> lstFrom; //起始
|
||
QList<QUuid> lstTo; //结束
|
||
QMap<QString,DiagramEditorRouteInfo> mapRoute; //线路信息
|
||
QMap<QString,DiagramEditorComponentInfo> mapComponent; //设备信息
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorBayInfo &data) {
|
||
out << data.name << data.nLayout << data.lstFrom << data.lstTo << data.mapRoute << data.mapComponent;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorBayInfo &data) {
|
||
in >> data.name >> data.nLayout >> data.lstFrom >> data.lstTo >> data.mapRoute >> data.mapComponent;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
struct DiagramEditorTransNeutralInfo //组态编辑变压器中性点信息
|
||
{
|
||
QString name; //中性点名
|
||
int nType = 0; //中性点类型 0高1中2低
|
||
QPointF delPoint; //相对变压器偏移量
|
||
QMap<QString,DiagramEditorRouteInfo> mapRoute; //中性点对应的线路结构
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorTransNeutralInfo &data) {
|
||
out << data.name << data.nType << data.delPoint << data.mapRoute;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorTransNeutralInfo &data) {
|
||
in >> data.name >> data.nType >> data.delPoint >> data.mapRoute;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
struct DiagramEditorTransInfo //组态编辑变压器信息
|
||
{
|
||
QString name; //变压器名
|
||
QMap<int,DiagramEditorTransNeutralInfo> mapNeutral; //中性点结构
|
||
QMap<QString,DiagramEditorComponentInfo> mapComponent; //设备信息
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorTransInfo &data) {
|
||
out << data.name << data.mapNeutral << data.mapComponent;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorTransInfo &data) {
|
||
in >> data.name >> data.mapNeutral >> data.mapComponent;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
enum class DiagramEditorStructType
|
||
{
|
||
block = 0, //模块(母线段、间隔、变压器)
|
||
blockContainer, //模块容器(包含若干模块)
|
||
rowData //行数据(包含若干容器)
|
||
};
|
||
|
||
struct DiagramEditorConnectType //组态编辑连接信息
|
||
{
|
||
QString sName;
|
||
int nType = 0; //1母线,2间隔,3变压器
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorConnectType &data) {
|
||
out << data.sName << data.nType;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorConnectType &data) {
|
||
in >> data.sName >> data.nType;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
struct DiagramEditorBriefConnect //组态编辑时连接信息
|
||
{
|
||
QUuid uid;
|
||
DiagramEditorConnectType con1;
|
||
DiagramEditorConnectType con2;
|
||
int nPara = 0; //万用参数(变压器中表示连接位置,0高压侧,1中压侧,2低压侧)
|
||
|
||
bool operator==(const DiagramEditorBriefConnect& obj)
|
||
{
|
||
if(this == &obj)
|
||
return false;
|
||
if((con1.sName == obj.con1.sName && con2.sName == obj.con2.sName)||(con1.sName == obj.con2.sName && con2.sName == obj.con1.sName))
|
||
return true;
|
||
else
|
||
return false;
|
||
}
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorBriefConnect &data) {
|
||
out << data.uid << data.con1 << data.con2 << data.nPara;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorBriefConnect &data) {
|
||
in >> data.uid >> data.con1 >> data.con2 >> data.nPara;
|
||
return in;
|
||
}
|
||
|
||
DiagramEditorConnectType getOpposite(const QString& s){ //获取另一端名称
|
||
if(con1.sName == s)
|
||
return con2;
|
||
else if(con2.sName == s)
|
||
return con1;
|
||
return DiagramEditorConnectType();
|
||
}
|
||
};
|
||
|
||
struct DiagramEditorBlockInfo //组态编辑block信息
|
||
{
|
||
QString sName;
|
||
QString sContainerId; //所属的容器id
|
||
int nType; //1母线,2间隔,3变压器
|
||
int nContainerLevel; //所处容器的层级 0,1,2,3
|
||
QUuid uid;
|
||
QList<QUuid> _lstCon; //连接信息
|
||
QList<QPair<int,QUuid>> _lstSub; //子对象列表(非拓扑计算使用) 如母线子对象为间隔,间隔子对象为item,电动机子对象为item <类型,uid> 类型:0设备1间隔
|
||
QRectF recSize; //当前大小(根据内容确定)
|
||
QPointF sceneDelta; //block中心相对位移(计算布局位置
|
||
bool bEditState; //详细编辑状态
|
||
|
||
//bus
|
||
float fVoltage; //母线电压
|
||
int nBusType; //0无前缀,1:Ⅰ母,2Ⅱ母
|
||
int nIndex; //第几段,1A,2B,3C,4D,5E,6F,7G,8H
|
||
//bay
|
||
BayType nBayType;
|
||
DiagramEditorBayInfo bayInfo; //间隔信息
|
||
//transformer
|
||
TransformerType nTransType;
|
||
DiagramEditorTransInfo transInfo;
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorBlockInfo &data) {
|
||
out << data.sName << data.sContainerId << data.nType << data.nContainerLevel << data.uid << data._lstCon << data.recSize << data.sceneDelta
|
||
<< data.bEditState << data.fVoltage << data.nBusType << data.nIndex << data.nBayType << data.bayInfo << data.nTransType << data.transInfo;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorBlockInfo &data) {
|
||
in >> data.sName >> data.sContainerId >> data.nType >> data.nContainerLevel >> data.uid >> data._lstCon >> data.recSize >> data.sceneDelta
|
||
>> data.bEditState >> data.fVoltage >> data.nBusType >> data.nIndex >> data.nBayType >> data.bayInfo >> data.nTransType >> data.transInfo;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
struct DiagramEditorContainerInfo //组态编辑容器信息
|
||
{
|
||
QString sId;
|
||
double dMidUpY; //1母上边界
|
||
double dMidDownY; //2母下边界
|
||
double dStartX; //起始x
|
||
double dStartY; //起始y
|
||
double dWidth; //宽度
|
||
double dHeight;
|
||
double dMaxUpH; //上方最大高度(1母线到上边界)
|
||
double dMaxDownH; //下方最大高度(2母线到下边界)
|
||
QMap<int,QList<DiagramEditorBlockInfo>> mapBlockInfo;
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorContainerInfo &data) {
|
||
out << data.sId << data.dMidUpY << data.dMidDownY << data.dStartX << data.dStartY << data.dWidth << data.dHeight << data.dMaxUpH << data.dMaxDownH << data.mapBlockInfo;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorContainerInfo &data) {
|
||
in >> data.sId >> data.dMidUpY >> data.dMidDownY >> data.dStartX >> data.dStartY >> data.dWidth >> data.dHeight >> data.dMaxUpH >> data.dMaxDownH >> data.mapBlockInfo;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
struct DiagramEditorProjectInfo //editor工程信息
|
||
{
|
||
QString sName;
|
||
QUuid uid;
|
||
QMap<int,DiagramEditorWizardBusInfo> mapBus;
|
||
QMap<int,QList<DiagramEditorContainerInfo>> mapSturctContainer;
|
||
QMap<QUuid,DiagramEditorBriefConnect> mapConnect;
|
||
|
||
friend QDataStream &operator<<(QDataStream &out, const DiagramEditorProjectInfo &data) {
|
||
out << data.sName << data.uid << data.mapBus << data.mapSturctContainer << data.mapConnect;
|
||
return out;
|
||
}
|
||
friend QDataStream &operator>>(QDataStream &in, DiagramEditorProjectInfo &data) {
|
||
in >> data.sName >> data.uid >> data.mapBus >> data.mapSturctContainer >> data.mapConnect;
|
||
return in;
|
||
}
|
||
};
|
||
|
||
struct DiagramContent {
|
||
QString diagramId; // 对应的PowerEntity ID
|
||
|
||
// 元素位置信息 <元素ID, 位置>
|
||
QHash<QString, QPointF> elementPositions;
|
||
QHash<QString, QList<QPointF>> connectionPaths; // 自定义路径点
|
||
};
|
||
|
||
struct BaseComponentInfo //基模图元数据
|
||
{
|
||
int id = 0;
|
||
QUuid uuid;
|
||
QString name;
|
||
QString tag;
|
||
int typeId = 0;
|
||
QJsonObject context;
|
||
QString metaMmodel;
|
||
QString projectModel;
|
||
};
|
||
|
||
struct EditorProjectInfo //editor工程数据
|
||
{
|
||
int id = 0;
|
||
QUuid uuid;
|
||
QString name;
|
||
QString tag;
|
||
};
|
||
|
||
struct EditorBaseSettingInfo //editor基础设置
|
||
{
|
||
int id = 0;
|
||
QUuid uuid;
|
||
QString projectName; //所属工程名
|
||
QString autor; //作者
|
||
QByteArray context; //内容
|
||
QUuid generateUid; //生成的图uuid
|
||
QString ts; //时间戳
|
||
};
|
||
|
||
|
||
#endif // DIAGRAM_H
|