#ifndef TOPOLOGYMANAGER_H #define TOPOLOGYMANAGER_H /**************************** * 拓扑关系管理类 * *************************/ #include #include #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 getEntitiesByBlock(const QString&); //通过名称返回entity中的实体(blockEditor中) void moveTempBlockData(); //blockEditor中将临时数据转为全局数据 void clearGlobalBlockData(const QString&); //清除全局数据中的blockdata(block修改时) // 连接管理 PowerConnection* createConnection(const QString& uuid,const QString& fromTerId, const QString& toTerId,const QString& fromId,const QString& toId,ModelFunctionType tpe = ModelFunctionType::ProjectModel); QList 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 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 getAllConnections(ModelFunctionType tpe = ModelFunctionType::ProjectModel); PowerEntity* getEntity(const QString& id,ModelFunctionType tpe = ModelFunctionType::ProjectModel) const; QList 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 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 m_entities; // ID到实体映射 QHash m_diagrams; // 组态图拓扑结构 // 连接存储 QHash m_connections; QMultiHash m_connectionIndex; // 接线点ID到连接的映射 QHash m_allTerminals; // ID到接线点映射 QHash> m_terminalsByEntity; // 实体ID到接线点列表 QHash> m_entityConnections; // > private: QHash m_baseEntities; // ID到实体映射(基模) QHash m_baseDiagrams; // 组态图拓扑结构(基模) // 连接存储 QHash m_baseConnections; QMultiHash m_baseConnectionIndex; // 接线点ID到连接的映射(基模) QHash m_baseAllTerminals; // ID到接线点映射(基模) QHash> m_baseTerminalsByEntity; // 实体ID到接线点列表(基模) QHash> m_baseEntityConnections; // >(基模) private: QHash m_editorEntities; // ID到实体映射(编辑器) // 连接存储 QHash m_editorConnections; QMultiHash m_editorConnectionIndex; // 接线点ID到连接的映射(编辑器) QHash m_editorAllTerminals; // ID到接线点映射(编辑器) QHash> m_editorTerminalsByEntity; // 实体ID到接线点列表(编辑器) QHash> m_editorEntityConnections; // >(编辑器) private: QHash m_blockEntities; // ID到实体映射(模块编辑) // 连接存储 QHash m_blockConnections; QMultiHash m_blockConnectionIndex; // 接线点ID到连接的映射(模块编辑) QHash m_blockAllTerminals; // ID到接线点映射(模块编辑) QHash> m_blockTerminalsByEntity; // 实体ID到接线点列表(模块编辑) QHash> m_blockEntityConnections; // >(模块编辑) }; #endif