DiagramDesigner/common/core_model/diagram.h

373 lines
14 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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使用uuidload数据使用数据库自增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