From 765e3d61870f428be4c5ae473c6b195147b19e52 Mon Sep 17 00:00:00 2001 From: baiYue Date: Wed, 1 Apr 2026 10:41:12 +0800 Subject: [PATCH] add custom type extend --- common/core_model/types.h | 3 + diagramCavas/CMakeLists.txt | 2 + .../graphicsDataModel/diagramEditorModel.h | 2 +- .../include/instance/baseTypeManager.h | 39 ++++++ diagramCavas/source/diagramCavas.cpp | 4 +- .../diagramEditorBayDetailAddDlg.cpp | 92 +++----------- .../diagramEditorBayDetailSettingDlg.cpp | 64 +--------- .../diagramEditorTransDetailAddDlg.cpp | 89 +++----------- .../diagramEditorTransDetailSettingDlg.cpp | 66 ++--------- .../graphicsDataModel/diagramEditorModel.cpp | 112 ++++++++++-------- .../graphicsDataModel/fixedPortsModel.cpp | 50 +++++--- .../source/instance/baseTypeManager.cpp | 51 ++++++++ ui/mainwindow.ui | 2 +- 13 files changed, 245 insertions(+), 331 deletions(-) create mode 100644 diagramCavas/include/instance/baseTypeManager.h create mode 100644 diagramCavas/source/instance/baseTypeManager.cpp diff --git a/common/core_model/types.h b/common/core_model/types.h index a986511..cc67ba7 100644 --- a/common/core_model/types.h +++ b/common/core_model/types.h @@ -35,6 +35,7 @@ enum GraphicsItemType GIT_3wTransformer= QGraphicsItem::UserType + 67, GIT_node= QGraphicsItem::UserType + 79, GIT_bay= QGraphicsItem::UserType + 80, //间隔 + GIT_CustomType= QGraphicsItem::UserType + 81, //====================================== GIT_baseNode = QGraphicsItem::UserType + 199, GIT_baseBus = QGraphicsItem::UserType + 200, @@ -52,6 +53,8 @@ enum GraphicsItemType GIT_baseCableEnd = QGraphicsItem::UserType + 212, GIT_base2wTransformer = QGraphicsItem::UserType + 213, //两绕阻变压器 GIT_base3wTransformer = QGraphicsItem::UserType + 214, //三绕组变压器 + GIT_baseMotor = QGraphicsItem::UserType + 215, //电动机 + GIT_baseCustomItem = QGraphicsItem::UserType + 299 //自定义对象 }; enum AttributeField //元模属性字段对照 diff --git a/diagramCavas/CMakeLists.txt b/diagramCavas/CMakeLists.txt index 2e48ff3..9d44d9a 100644 --- a/diagramCavas/CMakeLists.txt +++ b/diagramCavas/CMakeLists.txt @@ -126,6 +126,7 @@ set(DIAGRAMCAVAS_HEADER_FILES include/util/selectorManager.h include/util/subMovingSelector.h include/instance/dataAccessor.h + include/instance/baseTypeManager.h include/propertyType/CustomGadget.h include/propertyType/CustomType.h @@ -278,6 +279,7 @@ set(DIAGRAMCAVAS_SOURCE_FILES source/util/selectorManager.cpp source/util/subMovingSelector.cpp source/instance/dataAccessor.cpp + source/instance/baseTypeManager.cpp source/propertyType/PropertyTypeCustomization_CustomType.cpp source/propertyType/propertyTypeCustomization_DataSourceType.cpp diff --git a/diagramCavas/include/graphicsDataModel/diagramEditorModel.h b/diagramCavas/include/graphicsDataModel/diagramEditorModel.h index de5fac2..ac955b2 100644 --- a/diagramCavas/include/graphicsDataModel/diagramEditorModel.h +++ b/diagramCavas/include/graphicsDataModel/diagramEditorModel.h @@ -35,7 +35,7 @@ public: void generateTempTrans(int nType,DiagramEditorTransformerBlock* block = nullptr); //0高压侧1中压侧2低压侧3整个变压器 void connectTransToNeutral(DiagramEditorTransformerBlock* block); //连接变压器与中性点设备 void linkTransItem(GraphicsBaseModelItem*,QStandardItemModel*,DiagramEditorTransformerBlock* pBlock); //连接中性点与设备点 - GraphicsBaseModelItem* generateComponent(QUuid uid,QString sName,int nCategory,int nType,QPointF pos,int nRotate,int mode,DiagramEditorBaseBlock* pBlock = nullptr); //生成设备 uid,分类(设备、逻辑点),类型,旋转,模式(0局部1整体) + GraphicsBaseModelItem* generateComponent(QUuid uid,QString sName,int nCategory,int nType,int baseType,QPointF pos,int nRotate,int mode,DiagramEditorBaseBlock* pBlock = nullptr); //生成设备 uid,分类(设备、逻辑点),基模类型,基础类型,旋转,模式(0局部1整体) ElectricBaseModelLineItem* generateLine(QUuid uid,QString sName,int mode,DiagramEditorBaseBlock* pBlock = nullptr); //生成连线 mode 0局部1整体 void clearCurPreview(); void setPanel(EditPanel* p) {_pPanel = p;} diff --git a/diagramCavas/include/instance/baseTypeManager.h b/diagramCavas/include/instance/baseTypeManager.h new file mode 100644 index 0000000..ffec796 --- /dev/null +++ b/diagramCavas/include/instance/baseTypeManager.h @@ -0,0 +1,39 @@ +#ifndef BASETYPEMANAGER_H +#define BASETYPEMANAGER_H + +#include +#include +#include +#include +#include "common/backend/meta_model.h" + +class BaseTypeManager : public QObject +{ + Q_OBJECT + +private: + explicit BaseTypeManager(QObject *parent = nullptr); + + QMap _mapType; + +public: + // 禁止拷贝和赋值 + BaseTypeManager(const BaseTypeManager&) = delete; + BaseTypeManager& operator=(const BaseTypeManager&) = delete; + + // 获取单例实例 + static BaseTypeManager* getInstance() { + static BaseTypeManager instance; + return &instance; + } + + void initial(); + + QString getNameById(int id) const; + int getBaseTypeById(int id) const; + int getIdByName(const QString& name) const; + int getIdByModelType(const QString& name) const; //根据基模英文名返回id + QMap getMapType(){return _mapType;} +}; + +#endif // BIMAPMANAGER_H diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index c2b083e..b94743e 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -11,8 +11,6 @@ #include "graphicsItem/graphicsBaseItem.h" #include "topologyManager.h" #include "powerEntity.h" -#include "projectModelManager.h" -#include "baseProperty.h" #include "diagramEditor/editPanel.h" #include "graphicsDataModel/diagramEditorModel.h" #include "basePropertyManager.h" @@ -31,6 +29,7 @@ #include "QQuickDetailsViewMananger.h" #include "propertyType/propertyTypeCustomization_DataSourceType.h" #include "propertyType/dataSourceType.h" +#include "include/instance/baseTypeManager.h" DiagramCavas::DiagramCavas(QWidget *parent) : QMdiArea(parent) @@ -179,6 +178,7 @@ void DiagramCavas::initial() _structDataPreviewDlg->loadData(); QQuickDetailsViewManager::Get()->registerPropertyTypeCustomization(); + BaseTypeManager::getInstance()->initial(); } void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent) diff --git a/diagramCavas/source/diagramEditor/diagramEditorBayDetailAddDlg.cpp b/diagramCavas/source/diagramEditor/diagramEditorBayDetailAddDlg.cpp index 79a8769..cfaea02 100644 --- a/diagramCavas/source/diagramEditor/diagramEditorBayDetailAddDlg.cpp +++ b/diagramCavas/source/diagramEditor/diagramEditorBayDetailAddDlg.cpp @@ -6,6 +6,7 @@ #include "ui_diagramEditorBayDetailAddDlg.h" #include "diagramEditor/diagramEditorBaseBlock.h" #include "diagramEditor/diagramEditorWizard.h" +#include "include/instance/baseTypeManager.h" DiagramEditorBayDetailAddDlg::DiagramEditorBayDetailAddDlg(QWidget *parent) : QDialog(parent) @@ -40,22 +41,16 @@ void DiagramEditorBayDetailAddDlg::initial() connect(ui->tableView_selected, &QTableView::customContextMenuRequested, this, &DiagramEditorBayDetailAddDlg::onRouteRbtnClicked); connect(ui->tableView_items, &QTableView::customContextMenuRequested, this, &DiagramEditorBayDetailAddDlg::onComponentRbtnClicked); + QMap mapType = BaseTypeManager::getInstance()->getMapType(); //直接添加数据库中的基础类型 + for(auto iter = mapType.begin();iter != mapType.end();++iter){ + int index = ui->cb_type->count(); + ui->cb_type->addItem(iter.value().modelName); + ui->cb_type->setItemData(index,iter->id,Qt::UserRole); //存放基模id + ui->cb_type->setItemData(index,iter->graphicElement,Qt::UserRole+1); //存放基础类型 + } + ui->cb_category->addItem("电气设备",0); ui->cb_category->addItem("连接关系",1); - ui->cb_type->addItem("母线",1); - ui->cb_type->addItem("异步电动机",2); - ui->cb_type->addItem("断路器",3); - ui->cb_type->addItem("电缆",4); - ui->cb_type->addItem("电流互感器",5); - ui->cb_type->addItem("电压互感器",6); - ui->cb_type->addItem("隔离开关",7); - ui->cb_type->addItem("接地开关",8); - ui->cb_type->addItem("快速接地开关",9); - ui->cb_type->addItem("双掷接地隔离开关",10); - ui->cb_type->addItem("带电指示器",11); - ui->cb_type->addItem("避雷器",12); - ui->cb_type->addItem("电缆出线套筒",13); - ui->cb_type->addItem("电缆端",14); ui->tableView_items->setContextMenuPolicy(Qt::CustomContextMenu); ui->tableView_items->setSelectionMode(QAbstractItemView::SingleSelection); @@ -170,52 +165,11 @@ void DiagramEditorBayDetailAddDlg::showDlg(DiagramEditorRouteInfo info) QString sType; if(component.nCategory == 0){ sCate = "电气设备"; - if(component.nType == 1){ - sType = "母线"; - } - else if(component.nType == 2){ - sType = "异步电动机"; - } - else if(component.nType == 3){ - sType = "断路器"; - } - else if(component.nType == 4){ - sType = "电缆"; - } - else if(component.nType == 5){ - sType = "电流互感器"; - } - else if(component.nType == 6){ - sType = "电压互感器"; - } - else if(component.nType == 7){ - sType = "隔离开关"; - } - else if(component.nType == 8){ - sType = "接地开关"; - } - else if(component.nType == 9){ - sType = "快速接地开关"; - } - else if(component.nType == 10){ - sType = "双掷接地隔离开关"; - } - else if(component.nType == 11){ - sType = "带电指示器"; - } - else if(component.nType == 12){ - sType = "避雷器"; - } - else if(component.nType == 13){ - sType = "电缆出线套筒"; - } - else if(component.nType == 14){ - sType = "电缆端"; - } + sType = BaseTypeManager::getInstance()->getNameById(component.nType); //直接添加数据库中的基础类型 } else if(component.nCategory == 1){ sCate = "连接关系"; - if(component.nType == 1){ + if(component.nType == 0){ //连接点暂时写死 sType = "连接点"; } } @@ -496,24 +450,16 @@ void DiagramEditorBayDetailAddDlg::onCategoryChanged(const QString& str) { ui->cb_type->clear(); if(str == "电气设备"){ - QStringList lst; - ui->cb_type->addItem("母线",1); - ui->cb_type->addItem("异步电动机",2); - ui->cb_type->addItem("断路器",3); - ui->cb_type->addItem("电缆",4); - ui->cb_type->addItem("电流互感器",5); - ui->cb_type->addItem("电压互感器",6); - ui->cb_type->addItem("隔离开关",7); - ui->cb_type->addItem("接地开关",8); - ui->cb_type->addItem("快速接地开关",9); - ui->cb_type->addItem("双掷接地隔离开关",10); - ui->cb_type->addItem("带电指示器",11); - ui->cb_type->addItem("避雷器",12); - ui->cb_type->addItem("电缆出线套筒",13); - ui->cb_type->addItem("电缆端",14); + QMap mapType = BaseTypeManager::getInstance()->getMapType(); //直接添加数据库中的基础类型 + for(auto iter = mapType.begin();iter != mapType.end();++iter){ + int index = ui->cb_type->count(); + ui->cb_type->addItem(iter.value().modelName); + ui->cb_type->setItemData(index,iter->id,Qt::UserRole); //存放基模id + ui->cb_type->setItemData(index,iter->graphicElement,Qt::UserRole+1); //存放基础类型 + } } else if(str == "连接关系"){ - ui->cb_type->addItem("连接点",1); + ui->cb_type->addItem("连接点",0); //连接点暂时写死为0 } } diff --git a/diagramCavas/source/diagramEditor/diagramEditorBayDetailSettingDlg.cpp b/diagramCavas/source/diagramEditor/diagramEditorBayDetailSettingDlg.cpp index a9f3555..9c91020 100644 --- a/diagramCavas/source/diagramEditor/diagramEditorBayDetailSettingDlg.cpp +++ b/diagramCavas/source/diagramEditor/diagramEditorBayDetailSettingDlg.cpp @@ -3,10 +3,10 @@ #include "diagramEditor/diagramEditorBayDetailSettingDlg.h" #include "diagramEditor/diagramEditorBayDetailAddDlg.h" #include "diagramEditor/diagramEditorBayPreviewDlg.h" -#include "diagramEditor/diagramEditorWizard.h" #include "ui_diagramEditorBayDetailSettingDlg.h" #include "diagramEditor/diagramEditorBaseBlock.h" #include "graphicsDataModel/diagramEditorModel.h" +#include "include/instance/baseTypeManager.h" #include "topologyManager.h" DiagramEditorBayDetailSettingDlg::DiagramEditorBayDetailSettingDlg(QWidget *parent,DiagramEditorModel* pModel) @@ -84,70 +84,15 @@ void DiagramEditorBayDetailSettingDlg::refreshModel() QString sType; if(info.nCategory == 0){ sCategory = "设备"; - if(info.nType == 1) - { - sType = "母线"; - } - else if(info.nType == 2) - { - sType = "异步电动机"; - } - else if(info.nType == 3) - { - sType = "断路器"; - } - else if(info.nType == 4) - { - sType = "电缆"; - } - else if(info.nType == 5) - { - sType = "电流互感器"; - } - else if(info.nType == 6) - { - sType = "电压互感器"; - } - else if(info.nType == 7) - { - sType = "隔离开关"; - } - else if(info.nType == 8) - { - sType = "接地开关"; - } - else if(info.nType == 9) - { - sType = "快速接地开关"; - } - else if(info.nType == 10) - { - sType = "双掷接地隔离开关"; - } - else if(info.nType == 11) - { - sType = "带电指示器"; - } - else if(info.nType == 12) - { - sType = "避雷器"; - } - else if(info.nType == 13) - { - sType = "电缆出线套筒"; - } - else if(info.nType == 14) - { - sType = "电缆端"; - } + sType = BaseTypeManager::getInstance()->getNameById(info.nType); } else if(info.nCategory == 1){ sCategory = "连接关系"; - if(info.nType == 1){ + if(info.nType == 0){ //连接点暂时写死 sType = "连接点"; } } - + int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(info.nType); itemCate->setText(sCategory); itemCate->setData(info.nCategory); itemName->setText(info.sName); @@ -158,6 +103,7 @@ void DiagramEditorBayDetailSettingDlg::refreshModel() itemName->setData(info.nRotate,Qt::UserRole+5); itemType->setText(sType); itemType->setData(info.nType); + itemType->setData(nBaseType,Qt::UserRole+2); itemObj->setText(info.sBindObj); itemObj->setData(info.nBindType); itemObj->setData(info.nBindPara,Qt::UserRole+2); diff --git a/diagramCavas/source/diagramEditor/diagramEditorTransDetailAddDlg.cpp b/diagramCavas/source/diagramEditor/diagramEditorTransDetailAddDlg.cpp index d93967e..5dca1b2 100644 --- a/diagramCavas/source/diagramEditor/diagramEditorTransDetailAddDlg.cpp +++ b/diagramCavas/source/diagramEditor/diagramEditorTransDetailAddDlg.cpp @@ -5,6 +5,7 @@ #include "ui_diagramEditorTransDetailAddDlg.h" #include "diagramEditor/diagramEditorBaseBlock.h" #include "diagramEditor/diagramEditorWizard.h" +#include "include/instance/baseTypeManager.h" DiagramEditorTransDetailAddDlg::DiagramEditorTransDetailAddDlg(QWidget *parent) : QDialog(parent) @@ -40,22 +41,15 @@ void DiagramEditorTransDetailAddDlg::initial() connect(ui->tableView_selected, &QTableView::customContextMenuRequested, this, &DiagramEditorTransDetailAddDlg::onRouteRbtnClicked); connect(ui->tableView_items, &QTableView::customContextMenuRequested, this, &DiagramEditorTransDetailAddDlg::onComponentRbtnClicked); + QMap mapType = BaseTypeManager::getInstance()->getMapType(); //直接添加数据库中的基础类型 + for(auto iter = mapType.begin();iter != mapType.end();++iter){ + int index = ui->cb_type->count(); + ui->cb_type->addItem(iter.value().modelName); + ui->cb_type->setItemData(index,iter->id,Qt::UserRole); //存放基模id + ui->cb_type->setItemData(index,iter->graphicElement,Qt::UserRole+1); //存放基础类型 + } ui->cb_category->addItem("电气设备",0); ui->cb_category->addItem("连接关系",1); - ui->cb_type->addItem("母线",1); - ui->cb_type->addItem("异步电动机",2); - ui->cb_type->addItem("断路器",3); - ui->cb_type->addItem("电缆",4); - ui->cb_type->addItem("电流互感器",5); - ui->cb_type->addItem("电压互感器",6); - ui->cb_type->addItem("隔离开关",7); - ui->cb_type->addItem("接地开关",8); - ui->cb_type->addItem("快速接地开关",9); - ui->cb_type->addItem("双掷接地隔离开关",10); - ui->cb_type->addItem("带电指示器",11); - ui->cb_type->addItem("避雷器",12); - ui->cb_type->addItem("电缆出线套筒",13); - ui->cb_type->addItem("电缆端",14); ui->tableView_items->setContextMenuPolicy(Qt::CustomContextMenu); ui->tableView_items->setSelectionMode(QAbstractItemView::SingleSelection); @@ -110,52 +104,11 @@ void DiagramEditorTransDetailAddDlg::showDlg(DiagramEditorRouteInfo info) QString sType; if(component.nCategory == 0){ sCate = "电气设备"; - if(component.nType == 1){ - sType = "母线"; - } - else if(component.nType == 2){ - sType = "异步电动机"; - } - else if(component.nType == 3){ - sType = "断路器"; - } - else if(component.nType == 4){ - sType = "电缆"; - } - else if(component.nType == 5){ - sType = "电流互感器"; - } - else if(component.nType == 6){ - sType = "电压互感器"; - } - else if(component.nType == 7){ - sType = "隔离开关"; - } - else if(component.nType == 8){ - sType = "接地开关"; - } - else if(component.nType == 9){ - sType = "快速接地开关"; - } - else if(component.nType == 10){ - sType = "双掷接地隔离开关"; - } - else if(component.nType == 11){ - sType = "带电指示器"; - } - else if(component.nType == 12){ - sType = "避雷器"; - } - else if(component.nType == 13){ - sType = "电缆出线套筒"; - } - else if(component.nType == 14){ - sType = "电缆端"; - } + sType = BaseTypeManager::getInstance()->getNameById(component.nType); } else if(component.nCategory == 1){ sCate = "连接关系"; - if(component.nType == 1){ + if(component.nType == 0){ //连接点暂时写死 sType = "连接点"; } } @@ -481,21 +434,13 @@ void DiagramEditorTransDetailAddDlg::onCategoryChanged(const QString& str) { ui->cb_type->clear(); if(str == "电气设备"){ - QStringList lst; - ui->cb_type->addItem("母线",1); - ui->cb_type->addItem("异步电动机",2); - ui->cb_type->addItem("断路器",3); - ui->cb_type->addItem("电缆",4); - ui->cb_type->addItem("电流互感器",5); - ui->cb_type->addItem("电压互感器",6); - ui->cb_type->addItem("隔离开关",7); - ui->cb_type->addItem("接地开关",8); - ui->cb_type->addItem("快速接地开关",9); - ui->cb_type->addItem("双掷接地隔离开关",10); - ui->cb_type->addItem("带电指示器",11); - ui->cb_type->addItem("避雷器",12); - ui->cb_type->addItem("电缆出线套筒",13); - ui->cb_type->addItem("电缆端",14); + QMap mapType = BaseTypeManager::getInstance()->getMapType(); //直接添加数据库中的基础类型 + for(auto iter = mapType.begin();iter != mapType.end();++iter){ + int index = ui->cb_type->count(); + ui->cb_type->addItem(iter.value().modelName); + ui->cb_type->setItemData(index,iter->id,Qt::UserRole); //存放基模id + ui->cb_type->setItemData(index,iter->graphicElement,Qt::UserRole+1); //存放基础类型 + } } else if(str == "连接关系"){ ui->cb_type->addItem("连接点",1); diff --git a/diagramCavas/source/diagramEditor/diagramEditorTransDetailSettingDlg.cpp b/diagramCavas/source/diagramEditor/diagramEditorTransDetailSettingDlg.cpp index d3ddd62..bddf20e 100644 --- a/diagramCavas/source/diagramEditor/diagramEditorTransDetailSettingDlg.cpp +++ b/diagramCavas/source/diagramEditor/diagramEditorTransDetailSettingDlg.cpp @@ -3,12 +3,12 @@ #include "diagramEditor/diagramEditorTransDetailSettingDlg.h" #include "diagramEditor/diagramEditorTransDetailAddDlg.h" #include "diagramEditor/diagramEditorTransPreviewDlg.h" -#include "diagramEditor/diagramEditorWizard.h" #include "ui_diagramEditorTransDetailSettingDlg.h" #include "diagramEditor/diagramEditorBaseBlock.h" #include "graphicsDataModel/diagramEditorModel.h" #include "topologyManager.h" #include "diagramEditor/diagramEditorTransPreviewDlg.h" +#include "include/instance/baseTypeManager.h" DiagramEditorTransDetailSettingDlg::DiagramEditorTransDetailSettingDlg(QWidget *parent,DiagramEditorModel* pModel) : QDialog(parent) @@ -108,69 +108,18 @@ void DiagramEditorTransDetailSettingDlg::refreshModel() QStandardItem *itemObj = new QStandardItem(); QStandardItem *itemRoute = new QStandardItem(); QString sCategory; + QString sType; if(info.nCategory == 0){ sCategory = "设备"; + sType = BaseTypeManager::getInstance()->getNameById(info.nType); } else if(info.nCategory == 1){ sCategory = "连接关系"; + if(info.nType == 0){ //连接点暂时写死 + sType = "连接点"; + } } - QString sType; - if(info.nType == 1) - { - sType = "母线"; - } - else if(info.nType == 2) - { - sType = "异步电动机"; - } - else if(info.nType == 3) - { - sType = "断路器"; - } - else if(info.nType == 4) - { - sType = "电缆"; - } - else if(info.nType == 5) - { - sType = "电流互感器"; - } - else if(info.nType == 6) - { - sType = "电压互感器"; - } - else if(info.nType == 7) - { - sType = "隔离开关"; - } - else if(info.nType == 8) - { - sType = "接地开关"; - } - else if(info.nType == 9) - { - sType = "快速接地开关"; - } - else if(info.nType == 10) - { - sType = "双掷接地隔离开关"; - } - else if(info.nType == 11) - { - sType = "带点指示器"; - } - else if(info.nType == 12) - { - sType = "避雷器"; - } - else if(info.nType == 13) - { - sType = "电缆出线套筒"; - } - else if(info.nType == 14) - { - sType = "电缆端"; - } + int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(info.nType); itemCate->setText(sCategory); itemCate->setData(info.nCategory); itemName->setText(info.sName); @@ -181,6 +130,7 @@ void DiagramEditorTransDetailSettingDlg::refreshModel() itemName->setData(info.nRotate,Qt::UserRole+5); itemType->setText(sType); itemType->setData(info.nType); + itemType->setData(nBaseType,Qt::UserRole+2); itemObj->setText(info.sBindObj); itemObj->setData(info.nBindType); itemObj->setData(info.nBindPara,Qt::UserRole+2); diff --git a/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp b/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp index 44c26fc..768545f 100644 --- a/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp +++ b/diagramCavas/source/graphicsDataModel/diagramEditorModel.cpp @@ -20,6 +20,7 @@ #include #include #include "common/core_model/constants.h" +#include "include/instance/baseTypeManager.h" int g_nCompoWidth = 50; //元件默认宽度(计算布局使用) int g_nCompoHeight = 50; @@ -153,10 +154,9 @@ QRectF DiagramEditorModel::generateTempBay(DiagramEditorBayBlock* p) return itemsRect; } -GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString sName,int nCategory,int nType,QPointF pos,int nRotate,int mode,DiagramEditorBaseBlock* pBlock) +GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString sName,int nCategory,int nType,int baseType,QPointF pos,int nRotate,int mode,DiagramEditorBaseBlock* pBlock) { GraphicsBaseModelItem* pItem = nullptr; - int componentType = -1; //对应的componentType if(nCategory == 0) { QByteArray byte; @@ -166,67 +166,64 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s pBus->loadSvg(byte); pItem = pBus; pItem->setItemType(GIT_baseBus); - componentType = 1; } else if(nType == 2){ //异步电动机 - componentType = 2; + byte = DataBase::GetInstance()->ModelType()[nType].icon; + auto pMotor = new ElectricBaseModelSvgItem(QRect(-40, -40, 80, 80)); + pMotor->loadSvg(byte); + pItem = pMotor; + pItem->setItemType(GIT_baseMotor); + pItem->initialPortsByDatabase(baseType); } else if(nType == 3){ //断路器 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto pBreaker = new ElectricBaseModelSvgItem(QRect(-15, -15, 30, 30)); pBreaker->loadSvg(byte); pItem = pBreaker; pItem->setItemType(GIT_baseBreaker); - componentType = 3; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 4){ //电缆 - componentType = 8; } else if(nType == 5){ //电流互感器 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto pCt= new ElectricBaseModelSvgItem(QRect(-10, -10, 20, 20)); pCt->loadSvg(byte); pItem = pCt; pItem->setItemType(GIT_baseCT); - componentType = 4; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 6){ //电压互感器 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto pPt = new ElectricBaseModelSvgItem(QRect(-25, -25, 50, 50)); pPt->loadSvg(byte); pItem = pPt; pItem->setItemType(GIT_basePT); - componentType = 5; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 7){ //隔离开关 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto pDs = new ElectricBaseModelSvgItem(QRect(-15, -15, 30, 30)); pDs->loadSvg(byte); pItem = pDs; pItem->setItemType(GIT_baseDS); - componentType = 9; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 8){ //接地开关 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto pEs = new ElectricBaseModelSvgItem(QRect(-15, -30, 30, 60)); pEs->loadSvg(byte); pItem = pEs; pItem->setItemType(GIT_baseES); - componentType = 6; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 9){ //快速接地开关 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto pFEs = new ElectricBaseModelSvgItem(QRect(-15, -30, 30, 60)); pFEs->loadSvg(byte); pItem = pFEs; pItem->setItemType(GIT_baseFES); - componentType = 7; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 10){ //双掷接地隔离开关 byte = DataBase::GetInstance()->ModelType()[nType].icon; @@ -234,17 +231,15 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s pDtedes->loadSvg(byte); pItem = pDtedes; pItem->setItemType(GIT_baseDTEDS); - componentType = 10; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 11){ //带电指示器 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto pPi = new ElectricBaseModelSvgItem(QRect(-15, -30, 30, 60)); pPi->loadSvg(byte); pItem = pPi; pItem->setItemType(GIT_basePI); - componentType = 11; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 12){ //避雷器 byte = DataBase::GetInstance()->ModelType()[nType].icon; @@ -252,11 +247,16 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s pPi->loadSvg(byte); pItem = pPi; pItem->setItemType(GIT_baseLightningArrester); - componentType = 12; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 13){ //电缆出线套筒 - componentType = 13; + + byte = DataBase::GetInstance()->ModelType()[nType].icon; + auto pCableTer = new ElectricBaseModelSvgItem(QRect(-10, -10, 20, 20)); + pCableTer->loadSvg(byte); + pItem = pCableTer; + pItem->setItemType(GIT_baseCableTer); + pItem->initialPortsByDatabase(baseType); } else if(nType == 14){ //电缆端 byte = DataBase::GetInstance()->ModelType()[nType].icon; @@ -264,30 +264,35 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s pCableEnd->loadSvg(byte); pItem = pCableEnd; pItem->setItemType(GIT_baseCableEnd); - componentType = 14; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 15){ //两绕组变压器 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto p2W = new ElectricBaseModelSvgItem(QRect(-50, -50, 100, 100)); p2W->loadSvg(byte); pItem = p2W; pItem->setItemType(GIT_base2wTransformer); - componentType = 15; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); } else if(nType == 16){ //三绕组变压器 - byte = DataBase::GetInstance()->ModelType()[nType].icon; //注意modelType表与componentType表不一致! + byte = DataBase::GetInstance()->ModelType()[nType].icon; auto p3W = new ElectricBaseModelSvgItem(QRect(-75, -50, 150, 100)); p3W->loadSvg(byte); pItem = p3W; pItem->setItemType(GIT_base3wTransformer); - componentType = 16; - pItem->initialPortsByDatabase(componentType); + pItem->initialPortsByDatabase(baseType); + } + else{ //自定义类型 + byte = DataBase::GetInstance()->ModelType()[nType].icon; + auto pCustom = new ElectricBaseModelSvgItem(QRect(-30, -30, 60, 60)); + pCustom->loadSvg(byte); + pItem = pCustom; + pItem->setItemType(GIT_baseCustomItem); + pItem->initialPortsByDatabase(baseType); } } else if(nCategory == 1){ - if(nType == 1){ //节点 + if(nType == 0){ //节点 pItem = new ElectricBaseModelPortItem(); pItem->setItemType(GIT_baseNode); } @@ -320,7 +325,7 @@ GraphicsBaseModelItem* DiagramEditorModel::generateComponent(QUuid uid,QString s pData->setGraphicsType(pItem->getItemType()); } else if(nCategory == 0){ //设备 - pData = addPreviewData(uid,componentType,sName,DataBase::GetInstance()->ModelType()[nType].modelType,sBay,mode); + pData = addPreviewData(uid,baseType,sName,DataBase::GetInstance()->ModelType()[nType].modelType,sBay,mode); pData->setGraphicsType(pItem->getItemType()); } if(pData) @@ -422,7 +427,9 @@ void DiagramEditorModel::connectTransToNeutral(DiagramEditorTransformerBlock* bl else if(typ == TransformerType::threeWinding){ nT = 16; } - generateComponent(uid,sName,0,nT,QPoint(0,0),0,0,block); + + int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(nT); + generateComponent(uid,sName,0,nT,nBaseType,QPoint(0,0),0,0,block); auto pTransItem = _tempItem.value(uid); if(pTransItem){ @@ -534,7 +541,8 @@ void DiagramEditorModel::generatePreview(bool bVisible) QPointF pos = item->scenePos(); if(_previewItem.contains(uid)) continue; - auto pItem = generateComponent(uid,name,0,1,pos,0,1,pBus); + int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(1); + auto pItem = generateComponent(uid,name,0,1,nBaseType,pos,0,1,pBus); pBus->addSubList(qMakePair(0,uid)); if(nMaxLen > rec.width()) rec.setWidth(nMaxLen); @@ -625,7 +633,8 @@ void DiagramEditorModel::generatePreview(bool bVisible) nType = 15; else nType = 16; - auto pItem = generateComponent(uid,name,0,nType,pos,0,1,pTrans); + int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(nType); + auto pItem = generateComponent(uid,name,0,nType,nBaseType,pos,0,1,pTrans); auto pro = pItem->getProperty(); QRectF rect = item->boundingRect(); @@ -1130,8 +1139,10 @@ void DiagramEditorModel::generateItemByModel(QStandardItemModel* pModel,DiagramE QPoint pos = pItem->data(Qt::UserRole+2).toPoint(); pos += delta; QUuid uid = pItem->data(Qt::UserRole+3).toUuid(); - if(!_tempItem.contains(uid)) - generateComponent(uid,name,nCate,nType,pos,nRotate,0,pBlock); + if(!_tempItem.contains(uid)){ + int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(nType); + generateComponent(uid,name,nCate,nType,nBaseType,pos,nRotate,0,pBlock); + } } } @@ -1181,7 +1192,8 @@ QList DiagramEditorModel::generateItemByInfo(QMapgetBaseTypeById(info.nType); + generateComponent(info.uid,info.sName,info.nCategory,info.nType,nBaseType,info.deltaPos+delta,info.nRotate,1,pParent); if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"无")){ //非空且不是无 if(!lstBind.contains(info)) lstBind.append(info); @@ -1206,7 +1218,8 @@ QList DiagramEditorModel::generateItemByInfo(QMapgetBaseTypeById(info.nType); + generateComponent(info.uid,info.sName,info.nCategory,info.nType,nBaseType,info.deltaPos+delta,info.nRotate,1,pParent); if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"无")){ //非空且不是无 if(!lstBind.contains(info)) lstBind.append(info); @@ -1217,7 +1230,8 @@ QList DiagramEditorModel::generateItemByInfo(QMapgetBaseTypeById(info.nType); + generateComponent(info.uid,info.sName,info.nCategory,info.nType,nBaseType,info.deltaPos+delta,info.nRotate,1,pParent); if(!info.sBindObj.isEmpty() && info.sBindObj != QString::fromWCharArray(L"无")){ //非空且不是无 if(!lstBind.contains(info)) lstBind.append(info); diff --git a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp index 071f704..c03eefd 100644 --- a/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp +++ b/diagramCavas/source/graphicsDataModel/fixedPortsModel.cpp @@ -52,8 +52,8 @@ #include "graphicsItem/handleText.h" #include "bayMeasureDlg.h" #include "basePannelPropertyProxy.h" -//#include "global.h" #include "common/core_model/types.h" +#include "include/instance/baseTypeManager.h" bool FixedPortsModel::_dataInitialised = false; @@ -2267,7 +2267,6 @@ void FixedPortsModel::onWizardFinished(QMap mapIte pPro->setGraphicsType(pro->graphicsType()); } } - //pPanel->getModelController()->addTestData(); QList lstItem; for(auto pItem:mapItem){ @@ -2608,6 +2607,8 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase pPro->setBay(sBay); pPro->setVoltageLevel(pBase->getVoltageLevel()); + int nBaseTypeId = BaseTypeManager::getInstance()->getIdByModelType(pBase->metaModelName()); + QString sMeta = pBase->metaModelName(); QString sModel = pBase->modelName(); int type = pBase->graphicsType(); @@ -2621,7 +2622,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[1].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2638,7 +2639,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[3].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2657,7 +2658,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase QByteArray svg2; QMap mapSvg = pBase->getModelProperty().modelSetting.mapSvg; if(mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[5].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; svg2 = svg; } else{ @@ -2683,7 +2684,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase QByteArray svg2; QMap mapSvg = pBase->getModelProperty().modelSetting.mapSvg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[6].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; svg2 = svg; } else{ @@ -2708,7 +2709,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[8].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2725,7 +2726,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[7].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2742,7 +2743,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[9].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2759,7 +2760,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[10].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2776,7 +2777,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[11].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2793,7 +2794,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[12].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2810,7 +2811,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[13].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2827,7 +2828,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[14].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2844,7 +2845,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[15].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2861,7 +2862,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase { QByteArray svg; if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ - svg = DataBase::GetInstance()->ModelType()[16].icon; + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; } else{ svg = pBase->getModelProperty().modelSetting.mapSvg.first(); @@ -2881,6 +2882,23 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase pProItem->setItemType(GIT_link); pPanel->getScene()->addItem(pProItem); } + else if(type == GIT_baseCustomItem) + { + QByteArray svg; + if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){ + svg = DataBase::GetInstance()->ModelType()[nBaseTypeId].icon; + } + else{ + svg = pBase->getModelProperty().modelSetting.mapSvg.first(); + } + ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["customType"] = svg; + QRectF rec = pBaseItem->boundingRect(); + auto pCustom = new ElectricSvgItem(rec.toRect()); + pCustom->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg); + pCustom->loadSvg(svg); + pProItem = pCustom; + pProItem->setItemType(GIT_CustomType); + } if(pBase->graphicsType() != GIT_baseLine) //非连接线对象 { diff --git a/diagramCavas/source/instance/baseTypeManager.cpp b/diagramCavas/source/instance/baseTypeManager.cpp new file mode 100644 index 0000000..65c4df2 --- /dev/null +++ b/diagramCavas/source/instance/baseTypeManager.cpp @@ -0,0 +1,51 @@ +#include "include/instance/baseTypeManager.h" +#include "dataBase.h" +#include +#include + +// 构造函数 +BaseTypeManager::BaseTypeManager(QObject *parent) + : QObject(parent) +{ +} + +void BaseTypeManager::initial() { + + _mapType = DataBase::GetInstance()->ModelType(); +} + +// 通过id获取名称 +QString BaseTypeManager::getNameById(int id) const +{ + if(_mapType.contains(id)){ + return _mapType.value(id).modelName; + } + return QString(); +} + +int BaseTypeManager::getBaseTypeById(int id) const +{ + if(_mapType.contains(id)){ + return _mapType.value(id).graphicElement; + } + return -1; +} + +// 通过名称获取id +int BaseTypeManager::getIdByName(const QString& name) const +{ + for(auto iter = _mapType.begin(); iter != _mapType.end();++iter){ + if(name == iter->modelName) + return iter.key(); + } + return -1; +} + +int BaseTypeManager::getIdByModelType(const QString& str) const +{ + for(auto iter = _mapType.begin(); iter != _mapType.end();++iter){ + if(str == iter->modelType) + return iter.key(); + } + return -1; +} diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index a9f0a91..ce0dfa6 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -11,7 +11,7 @@ - DiagramDesigner + GridFrame QMenuBar#menubar {