2025-02-06 16:36:50 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "graphicsDataModel/baseModel.h"
|
|
|
|
|
|
#include "serializable.h"
|
2025-04-30 16:29:17 +08:00
|
|
|
|
#include "powerEntity.h"
|
2025-02-06 16:36:50 +08:00
|
|
|
|
|
|
|
|
|
|
#include <QSharedPointer>
|
|
|
|
|
|
#include <QJsonObject>
|
|
|
|
|
|
#include <QTimer>
|
|
|
|
|
|
|
|
|
|
|
|
class DrawingPanel;
|
|
|
|
|
|
class GraphicsBaseItem;
|
2025-06-13 19:00:05 +08:00
|
|
|
|
class GraphicsProjectModelItem;
|
|
|
|
|
|
class GraphicsBaseModelItem;
|
2025-02-06 16:36:50 +08:00
|
|
|
|
class BaseProperty;
|
2025-06-13 19:00:05 +08:00
|
|
|
|
class BaseModelProperty;
|
2025-02-06 16:36:50 +08:00
|
|
|
|
class DesignerScene;
|
|
|
|
|
|
class HttpInterface;
|
2025-06-20 18:09:41 +08:00
|
|
|
|
class DiagramCavas;
|
2025-02-06 16:36:50 +08:00
|
|
|
|
struct Connection;
|
|
|
|
|
|
|
2025-04-30 16:29:17 +08:00
|
|
|
|
class PowerEntity;
|
|
|
|
|
|
class ElectricConnectLineItem;
|
2025-06-20 18:09:41 +08:00
|
|
|
|
class ProjectModelSetting;
|
2025-04-30 16:29:17 +08:00
|
|
|
|
|
2025-02-06 16:36:50 +08:00
|
|
|
|
class FixedPortsModel : public BaseModel, public Serializable
|
|
|
|
|
|
{
|
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
2025-04-30 16:29:17 +08:00
|
|
|
|
FixedPortsModel(PowerEntity*);
|
2025-02-06 16:36:50 +08:00
|
|
|
|
~FixedPortsModel();
|
|
|
|
|
|
public:
|
|
|
|
|
|
QMap<QUuid,QPointF> allNodePos() const;
|
|
|
|
|
|
QVector<Connection> allConnections();
|
2025-06-13 19:00:05 +08:00
|
|
|
|
QMap<QUuid,GraphicsProjectModelItem*>& allItems();
|
|
|
|
|
|
bool addNodeItem(QUuid uuid,GraphicsProjectModelItem*);
|
2025-02-06 16:36:50 +08:00
|
|
|
|
void addNodeItem(QUuid id,/*int type,*/QPointF pos);
|
|
|
|
|
|
QVariant nodeData(QUuid nodeId, NodeRole role) const;
|
2025-06-13 19:00:05 +08:00
|
|
|
|
BaseProperty* addNodeData(QUuid id,int type,QString name,QString modelName); //对应component数据,一个data可对应多个item(id,类型,名称,工程模名)
|
2025-02-06 16:36:50 +08:00
|
|
|
|
void loadNodeDataFromDataBase(); //从数据库加载数据
|
2025-05-16 19:20:46 +08:00
|
|
|
|
void addConnectLline(QUuid srcId,QUuid destId,QUuid srcPort,QUuid destPort);
|
2025-06-13 19:00:05 +08:00
|
|
|
|
void deleteNodeItem(GraphicsProjectModelItem*);
|
2025-05-16 19:20:46 +08:00
|
|
|
|
//QJsonObject saveNode(QUuid const) const;
|
2025-02-06 16:36:50 +08:00
|
|
|
|
void saveNode(int nPageId);
|
|
|
|
|
|
void setScene(DesignerScene* p){_scene = p;}
|
2025-06-27 19:17:04 +08:00
|
|
|
|
DesignerScene* getScene() {return _scene;}
|
2025-02-06 16:36:50 +08:00
|
|
|
|
void setTopWidget(DrawingPanel* p) {_widget = p;}
|
|
|
|
|
|
QWidget* getTopWidget();
|
2025-04-30 16:29:17 +08:00
|
|
|
|
QPointF getTerminalPos(const QString& sTerminalId); //获取拓扑接线点在当前diagram中的位置
|
|
|
|
|
|
ElectricConnectLineItem* getLineItemById(const QString& terminalId);
|
2025-06-20 18:09:41 +08:00
|
|
|
|
template<typename TypeLine> void establishConnection(GraphicsBaseItem*,GraphicsBaseItem*,TypeLine*); //在两个item之间建立连接
|
|
|
|
|
|
QPointF calculateBusPortPos(GraphicsBaseItem* pBus,GraphicsBaseItem* item); //计算母线上接线点位置
|
2025-04-03 18:33:10 +08:00
|
|
|
|
|
2025-06-13 19:00:05 +08:00
|
|
|
|
void showModelDlg(const QString&,QUuid,GraphicsProjectModelItem*); //点击时显示指定模型的dlg、指定item的数据(模型名,对象Uuid,触发事件的item)
|
2025-04-03 18:33:10 +08:00
|
|
|
|
void initialPropertyDlg(); //初始化属性设置dlg,每个模型拥各自的dlg
|
|
|
|
|
|
void generatePropertyDlg(const QString&);
|
2025-04-30 16:29:17 +08:00
|
|
|
|
ConfigurationDiagram* getTopologyDiagram(); //返回当前组态图的拓扑实体
|
2025-06-20 18:09:41 +08:00
|
|
|
|
void createTopoTerminalsByItem(GraphicsBaseItem*,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过图形对象创建port接线点(新建)
|
|
|
|
|
|
void createTopoTerminalsByData(PowerEntity* pParent,QJsonObject componentCon,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过componet数据创建port接线点(加载)
|
2025-06-13 19:00:05 +08:00
|
|
|
|
bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接
|
|
|
|
|
|
|
|
|
|
|
|
void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用)
|
|
|
|
|
|
/********************baseModel相关**********************/
|
|
|
|
|
|
QMap<QUuid,GraphicsBaseModelItem*>& allBaseItems(); //获取所有基模对象
|
|
|
|
|
|
QVector<Connection> allBaseConnections();
|
|
|
|
|
|
QMap<QUuid,QPointF> allBaseNodePos() const;
|
|
|
|
|
|
|
2025-06-20 18:09:41 +08:00
|
|
|
|
bool addBaseItem(QUuid uuid,GraphicsBaseModelItem*);
|
2025-06-13 19:00:05 +08:00
|
|
|
|
BaseModelProperty* addBaseNodeData(QUuid id,int type,QString name,QString metaName); //添加图元基模数据
|
2025-06-20 18:09:41 +08:00
|
|
|
|
|
|
|
|
|
|
void showProjectModelSettingDlg(GraphicsBaseModelItem*); //在基模拓扑图上打开工程模设置对话框
|
2025-06-27 19:17:04 +08:00
|
|
|
|
void generateProjectModel(const QString&,QList<GraphicsBaseModelItem*>); //由基模生成工程模
|
|
|
|
|
|
void addProjectItemByBaseData(DrawingPanel*,GraphicsBaseModelItem*,BaseProperty*); //从基模item生成工程模item
|
2025-06-20 18:09:41 +08:00
|
|
|
|
void addTestData(); //生成测试基模
|
2025-02-06 16:36:50 +08:00
|
|
|
|
Q_SIGNALS:
|
|
|
|
|
|
void activatePage(const QString&); //激活当前model所在page
|
|
|
|
|
|
public:
|
|
|
|
|
|
void setPageName(QString s) {_pageName = s;} //设置表名称
|
|
|
|
|
|
QString pageName() const {return _pageName;}
|
|
|
|
|
|
void activateModel() {Q_EMIT activatePage(_pageName);} //发送激活信号(点击)
|
|
|
|
|
|
void startHttpRequest(); //开始请求数据(运行时)
|
2025-06-20 18:09:41 +08:00
|
|
|
|
void setCavas(DiagramCavas* p) {_cavas = p;} //设置所属顶层容器
|
2025-02-06 16:36:50 +08:00
|
|
|
|
public Q_SLOTS:
|
2025-06-13 19:00:05 +08:00
|
|
|
|
void onSignal_ifExits(QUuid id,const QString&,int type,GraphicsProjectModelItem*); //判断用户输入的名称是否已存在
|
2025-02-06 16:36:50 +08:00
|
|
|
|
void onTimeOut();
|
|
|
|
|
|
void onSignal_GetPointData(QString type,QMap<qint64,double> map);
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
2025-06-13 19:00:05 +08:00
|
|
|
|
QMap<QUuid,GraphicsProjectModelItem*> _nodeItem; //工程模对象
|
|
|
|
|
|
QMap<QUuid,GraphicsBaseModelItem*> _baseItem; //基模对象
|
2025-02-06 16:36:50 +08:00
|
|
|
|
|
|
|
|
|
|
QString _pageName;
|
2025-06-20 18:09:41 +08:00
|
|
|
|
DiagramCavas* _cavas;
|
2025-02-06 16:36:50 +08:00
|
|
|
|
DesignerScene* _scene;
|
|
|
|
|
|
DrawingPanel* _widget; //顶层widget
|
|
|
|
|
|
HttpInterface* _Interface;
|
|
|
|
|
|
QTimer* _timer;
|
2025-04-30 16:29:17 +08:00
|
|
|
|
PowerEntity* _pEntity; //拓扑实体
|
2025-06-13 19:00:05 +08:00
|
|
|
|
QMap<QString,QString> _projectModelName; //该图中所有元件对应的工程模类型(todo:扩展为每张图独立的结构体) uuid,工程模名称
|
2025-04-03 18:33:10 +08:00
|
|
|
|
|
|
|
|
|
|
QMap<QString,modelStateInfo> _modelStateInfo; //模型结构信息
|
2025-04-09 16:20:34 +08:00
|
|
|
|
QMap<QString,modelDataInfo> _modelDataInfo; //模型数据信息
|
2025-06-20 18:09:41 +08:00
|
|
|
|
ProjectModelSetting* m_proModelSettingDlg;
|
2025-02-06 16:36:50 +08:00
|
|
|
|
public:
|
|
|
|
|
|
static bool _dataInitialised;
|
|
|
|
|
|
};
|
|
|
|
|
|
|