add custom type extend

This commit is contained in:
baiYue 2026-04-01 10:41:12 +08:00
parent 8249661f32
commit 765e3d6187
13 changed files with 245 additions and 331 deletions

View File

@ -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 //元模属性字段对照

View File

@ -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

View File

@ -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;}

View File

@ -0,0 +1,39 @@
#ifndef BASETYPEMANAGER_H
#define BASETYPEMANAGER_H
#include <QObject>
#include <QMap>
#include <QJsonObject>
#include <QMutex>
#include "common/backend/meta_model.h"
class BaseTypeManager : public QObject
{
Q_OBJECT
private:
explicit BaseTypeManager(QObject *parent = nullptr);
QMap<int,modelType> _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<int,modelType> getMapType(){return _mapType;}
};
#endif // BIMAPMANAGER_H

View File

@ -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<DataSourceType, PropertyTypeCustomization_DataSourceType>();
BaseTypeManager::getInstance()->initial();
}
void DiagramCavas::onSignal_addDrawingPanel(PowerEntity* pItem,DiagramMode mode,QString parent)

View File

@ -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<int,modelType> 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<int,modelType> 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
}
}

View File

@ -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);

View File

@ -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<int,modelType> 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<int,modelType> 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);

View File

@ -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);

View File

@ -20,6 +20,7 @@
#include <QJsonArray>
#include <QMetaMethod>
#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<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
auto info = mapCompo.value(compo.sName);
if(_previewItem.contains(info.uid))
continue;
generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1,pParent);
int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(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<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
auto info = mapCompo.value(compo.sName);
if(_previewItem.contains(info.uid))
continue;
generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1,pParent);
int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(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<DiagramEditorComponentInfo> DiagramEditorModel::generateItemByInfo(QMap<QS
auto info = mapCompo.value(compo.sName);
if(_previewItem.contains(info.uid))
continue;
generateComponent(info.uid,info.sName,info.nCategory,info.nType,info.deltaPos+delta,info.nRotate,1,pParent);
int nBaseType = BaseTypeManager::getInstance()->getBaseTypeById(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);

View File

@ -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<QUuid,GraphicsBaseModelItem*> mapIte
pPro->setGraphicsType(pro->graphicsType());
}
}
//pPanel->getModelController()->addTestData();
QList<HierarchyItem> 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<QString,QByteArray> 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<QString,QByteArray> 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) //非连接线对象
{

View File

@ -0,0 +1,51 @@
#include "include/instance/baseTypeManager.h"
#include "dataBase.h"
#include <QJsonDocument>
#include <QFile>
// 构造函数
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;
}

View File

@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
<string>DiagramDesigner</string>
<string>GridFrame</string>
</property>
<property name="styleSheet">
<string notr="true"> QMenuBar#menubar {