DiagramDesigner/diagramCavas/include/topologyManager.h

97 lines
5.4 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 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);
PowerEntity* findEntity(const QString& id,ModelFunctionType = ModelFunctionType::ProjectModel) const;
bool deleteEntity(const QString& id,ModelFunctionType = ModelFunctionType::ProjectModel);
// 连接管理
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*> connectionsFrom(const QString& elementId) const;
//QList<PowerConnection*> connectionsTo(const QString& elementId) 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);
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);
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, DiagramContent*> m_views; // 组态图视图存储
QHash<QString, PowerEntity*> m_diagrams; // 组态图拓扑结构
// 连接存储
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>>(基模)
};
#endif