DiagramDesigner/diagramCavas/include/topologyManager.h

121 lines
7.0 KiB
C++
Raw Permalink 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 TOPOLOGYMANAGER_H
#define TOPOLOGYMANAGER_H
/****************************
* 拓扑关系管理类
* *************************/
#include <QObject>
#include <QList>
#include "powerConnection.h"
#include "powerTerminal.h"
#include "global.h"
class PowerEntity;
class BaseProperty;
class TopologyManager : public QObject {
Q_OBJECT
public:
static TopologyManager& instance();
// 实体管理
PowerEntity* createEntity(EntityType type,const QString& uuid,const QString& name,ModelFunctionType tpe = ModelFunctionType::ProjectModel,const QString& block = QString());
PowerEntity* findEntity(const QString& id,ModelFunctionType = ModelFunctionType::ProjectModel) const;
bool deleteEntity(const QString& id,ModelFunctionType = ModelFunctionType::ProjectModel);
QList<PowerEntity*> getEntitiesByBlock(const QString&); //通过名称返回entity中的实体(blockEditor中)
void moveTempBlockData(); //blockEditor中将临时数据转为全局数据
void clearGlobalBlockData(const QString&); //清除全局数据中的blockdata(block修改时)
void cloneEditorToBase(); //将editor中的数据深拷贝到base中
// 连接管理
PowerConnection* createConnection(const QString& uuid,const QString& fromTerId, const QString& toTerId,const QString& fromId,const QString& toId,ModelFunctionType tpe = ModelFunctionType::ProjectModel);
QList<PowerConnection*> getConnectionsForTerminal(const QString& terminalId,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
void removeConnection(const QString& connId,ModelFunctionType = ModelFunctionType::ProjectModel);
bool validateConnection(const QString& fromTermId, const QString& toTermId,ModelFunctionType = ModelFunctionType::ProjectModel) const;
// 连接查询接口
QList<PowerConnection*> getConnectionsFor(const QString& entityId,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
PowerConnection* connection(const QString& conId,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
PowerConnection* connection(const QString& fromPin,const QString& toPin,ModelFunctionType tpe = ModelFunctionType::ProjectModel);
PowerConnection* ifConnection(const QString& entityId1,const QString& entityId2,ModelFunctionType tpe = ModelFunctionType::ProjectModel); //返回两个item之间的连接
QHash<QString,PowerConnection*> getAllConnections(ModelFunctionType tpe = ModelFunctionType::ProjectModel);
PowerEntity* getEntity(const QString& id,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
QList<PowerEntity*> findEntitiesByName(const QString& name,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
//==========================组态图拓扑相关===================================
PowerEntity* createDiagram(const QString& id,const QString& name,ModelFunctionType tpe = ModelFunctionType::ProjectModel); //单独创建组态图
PowerEntity* findDiagram(const QString& id,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
bool deleteDiagram(const QString& id,ModelFunctionType tpe = ModelFunctionType::ProjectModel);
public:
// 接线点管理
PowerTerminal* createTerminal(const QString& parentEntityId,
TerminalType type,
const QString& name,
const QPointF& relPos = QPointF(),
const QString& uuid = "",
ModelFunctionType tpe = ModelFunctionType::ProjectModel,double dPerX = 0.0,double dPerY = 0.0);
bool deleteTerminal(const QString& terminalId,ModelFunctionType tpe = ModelFunctionType::ProjectModel);
PowerTerminal* getTerminal(const QString& terminalId,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
QList<PowerTerminal*> getTerminalsForEntity(const QString& entityId,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const;
PowerEntity* getEntityByTerminal(const QString& terminalId,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const; //返回terminal所在的entity实体
PowerConnection* getConnectionContainsTerminal(const QString& terminalId,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const; //返回包含terminal的connection
signals:
void entityCreated(const QString&);
void entityDeleted(const QString&);
void connectionCreated(const QString&);
void connectionRemoved(const QString&);
private:
explicit TopologyManager(QObject* parent = nullptr);
~TopologyManager();
void clearAllData();
QHash<QString, PowerEntity*> m_entities; // ID到实体映射
QHash<QString, PowerEntity*> m_diagrams; // 组态图拓扑结构
QHash<QString, PowerEntity*> m_monitorDiagrams; //运行时组态
// 连接存储
QHash<QString,PowerConnection*> m_connections;
QMultiHash<QString,PowerConnection*> m_connectionIndex; // 接线点ID到连接的映射
QHash<QString, PowerTerminal*> m_allTerminals; // ID到接线点映射
QHash<QString, QList<PowerTerminal*>> m_terminalsByEntity; // 实体ID到接线点列表
QHash<QString, QSet<QString>> m_entityConnections; // <entityId, Set<connectionId>>
private:
QHash<QString, PowerEntity*> m_baseEntities; // ID到实体映射基模
QHash<QString, PowerEntity*> m_baseDiagrams; // 组态图拓扑结构(基模)
// 连接存储
QHash<QString,PowerConnection*> m_baseConnections;
QMultiHash<QString,PowerConnection*> m_baseConnectionIndex; // 接线点ID到连接的映射基模
QHash<QString, PowerTerminal*> m_baseAllTerminals; // ID到接线点映射基模
QHash<QString, QList<PowerTerminal*>> m_baseTerminalsByEntity; // 实体ID到接线点列表基模
QHash<QString, QSet<QString>> m_baseEntityConnections; // <entityId, Set<connectionId>>(基模)
private:
QHash<QString, PowerEntity*> m_editorEntities; // ID到实体映射编辑器
// 连接存储
QHash<QString,PowerConnection*> m_editorConnections;
QMultiHash<QString,PowerConnection*> m_editorConnectionIndex; // 接线点ID到连接的映射编辑器
QHash<QString, PowerTerminal*> m_editorAllTerminals; // ID到接线点映射编辑器
QHash<QString, QList<PowerTerminal*>> m_editorTerminalsByEntity; // 实体ID到接线点列表编辑器
QHash<QString, QSet<QString>> m_editorEntityConnections; // <entityId, Set<connectionId>>(编辑器)
private:
QHash<QString, PowerEntity*> m_blockEntities; // ID到实体映射模块编辑
// 连接存储
QHash<QString,PowerConnection*> m_blockConnections;
QMultiHash<QString,PowerConnection*> m_blockConnectionIndex; // 接线点ID到连接的映射模块编辑
QHash<QString, PowerTerminal*> m_blockAllTerminals; // ID到接线点映射模块编辑
QHash<QString, QList<PowerTerminal*>> m_blockTerminalsByEntity; // 实体ID到接线点列表模块编辑
QHash<QString, QSet<QString>> m_blockEntityConnections; // <entityId, Set<connectionId>>(模块编辑)
};
#endif