#ifndef DIAGRAM_H #define DIAGRAM_H /*********组态图********/ #include #include #include #include #include #include #include // 组态图信息 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 lstBindObj; //连接的对象 }; struct DiagramEditorWizardBayInfo //组态间隔信息 { QString sName; BayType nType; double dVoltageLevel; QList 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 lstCompo; QList lstOrder; //线路顺序容器(计算用) QList 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 lstFrom; //起始 QList lstTo; //结束 QMap mapRoute; //线路信息 QMap 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 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 mapNeutral; //中性点结构 QMap 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 _lstCon; //连接信息 QList> _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> 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 mapBus; QMap> mapSturctContainer; QMap 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 elementPositions; QHash> 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