add project model icon manager

This commit is contained in:
baiYue 2025-10-17 18:14:44 +08:00
parent 8e968e7845
commit 20814d00a6
45 changed files with 1523 additions and 417 deletions

View File

@ -19,8 +19,8 @@ const int g_dEditorItem_Height = 80;
const int g_nEditorBus_Height = 10; const int g_nEditorBus_Height = 10;
const int g_nVDiagramSpacing = 50; const int g_nVDiagramSpacing = 80;
const int g_nHDiagramSpacing = 50; const int g_nHDiagramSpacing = 80;
//Q_NAMESPACE //Q_NAMESPACE
enum GraphicsItemType enum GraphicsItemType
@ -38,16 +38,18 @@ enum GraphicsItemType
GIT_link= QGraphicsItem::UserType + 53, GIT_link= QGraphicsItem::UserType + 53,
GIT_ctItem= QGraphicsItem::UserType + 54, GIT_ctItem= QGraphicsItem::UserType + 54,
GIT_ctGroup= QGraphicsItem::UserType + 55, GIT_ctGroup= QGraphicsItem::UserType + 55,
GIT_ES= QGraphicsItem::UserType + 56, GIT_ptItem= QGraphicsItem::UserType + 56,
GIT_DS= QGraphicsItem::UserType + 57, GIT_ptGroup= QGraphicsItem::UserType + 57,
GIT_FES= QGraphicsItem::UserType + 58, GIT_ES= QGraphicsItem::UserType + 58,
GIT_DTEDS= QGraphicsItem::UserType + 59, GIT_DS= QGraphicsItem::UserType + 59,
GIT_PI= QGraphicsItem::UserType + 60, GIT_FES= QGraphicsItem::UserType + 60,
GIT_LA= QGraphicsItem::UserType + 61, GIT_DTEDS= QGraphicsItem::UserType + 61,
GIT_cableTer= QGraphicsItem::UserType + 62, GIT_PI= QGraphicsItem::UserType + 62,
GIT_cableEnd= QGraphicsItem::UserType + 63, GIT_LA= QGraphicsItem::UserType + 63,
GIT_2wTransformer= QGraphicsItem::UserType + 64, GIT_cableTer= QGraphicsItem::UserType + 64,
GIT_3wTransformer= QGraphicsItem::UserType + 65, GIT_cableEnd= QGraphicsItem::UserType + 65,
GIT_2wTransformer= QGraphicsItem::UserType + 66,
GIT_3wTransformer= QGraphicsItem::UserType + 67,
GIT_node= QGraphicsItem::UserType + 79, GIT_node= QGraphicsItem::UserType + 79,
GIT_bay= QGraphicsItem::UserType + 80, //间隔 GIT_bay= QGraphicsItem::UserType + 80, //间隔
//====================================== //======================================
@ -233,6 +235,7 @@ struct projectModelSetting //工程模设定类,如图标
{ {
QString modelName; //工程模名 QString modelName; //工程模名
QMap<QString,QByteArray> mapSvg; //存放选择的svg图片 QMap<QString,QByteArray> mapSvg; //存放选择的svg图片
QMap<QString,QByteArray> mapUsedSvg; //存放使用的svg
}; };
/*struct baseModelSelectManger /*struct baseModelSelectManger
@ -287,6 +290,7 @@ struct PropertyModel //工程模
{ {
PropertyModel copy; PropertyModel copy;
copy.mapProperty = mapProperty; copy.mapProperty = mapProperty;
copy.nType = nType;
copy.pBase = deepCloneModel(pBase); copy.pBase = deepCloneModel(pBase);
copy.pSelect = deepCloneModel(pSelect); copy.pSelect = deepCloneModel(pSelect);
copy.formerMeta = formerMeta; copy.formerMeta = formerMeta;

View File

@ -23,6 +23,8 @@ set(DIAGRAMCAVAS_HEADER_FILES
include/bayManagerContentDlg.h include/bayManagerContentDlg.h
include/measureSettingDlg.h include/measureSettingDlg.h
include/projectModelSetting.h include/projectModelSetting.h
include/projectIconSetting.h
include/projectIconSelectionDlg.h
include/projectDiagramNameInput.h include/projectDiagramNameInput.h
include/diagramEditor/editPanel.h include/diagramEditor/editPanel.h
include/diagramEditor/editView.h include/diagramEditor/editView.h
@ -70,6 +72,8 @@ set(DIAGRAMCAVAS_HEADER_FILES
include/graphicsItem/electricSvgGroup.h include/graphicsItem/electricSvgGroup.h
include/graphicsItem/electricSvgGroupCT.h include/graphicsItem/electricSvgGroupCT.h
include/graphicsItem/electricSvgItemCT.h include/graphicsItem/electricSvgItemCT.h
include/graphicsItem/electricSvgGroupPT.h
include/graphicsItem/electricSvgItemPT.h
include/graphicsItem/electricSvgItemES.h include/graphicsItem/electricSvgItemES.h
include/graphicsItem/electricSvgItemDS.h include/graphicsItem/electricSvgItemDS.h
include/graphicsItem/electricSvgItemFES.h include/graphicsItem/electricSvgItemFES.h
@ -125,6 +129,8 @@ set(DIAGRAMCAVAS_SOURCE_FILES
source/bayManagerContentDlg.cpp source/bayManagerContentDlg.cpp
source/measureSettingDlg.cpp source/measureSettingDlg.cpp
source/projectModelSetting.cpp source/projectModelSetting.cpp
source/projectIconSetting.cpp
source/projectIconSelectionDlg.cpp
source/projectDiagramNameInput.cpp source/projectDiagramNameInput.cpp
source/diagramEditor/editPanel.cpp source/diagramEditor/editPanel.cpp
source/diagramEditor/editView.cpp source/diagramEditor/editView.cpp
@ -172,6 +178,8 @@ set(DIAGRAMCAVAS_SOURCE_FILES
source/graphicsItem/electricSvgGroup.cpp source/graphicsItem/electricSvgGroup.cpp
source/graphicsItem/electricSvgGroupCT.cpp source/graphicsItem/electricSvgGroupCT.cpp
source/graphicsItem/electricSvgItemCT.cpp source/graphicsItem/electricSvgItemCT.cpp
source/graphicsItem/electricSvgGroupPT.cpp
source/graphicsItem/electricSvgItemPT.cpp
source/graphicsItem/electricSvgItemES.cpp source/graphicsItem/electricSvgItemES.cpp
source/graphicsItem/electricSvgItemDS.cpp source/graphicsItem/electricSvgItemDS.cpp
source/graphicsItem/electricSvgItemFES.cpp source/graphicsItem/electricSvgItemFES.cpp
@ -223,6 +231,7 @@ set(UI_FILES
ui/diagramEditorTransDetailSettingDlg.ui ui/diagramEditorTransDetailSettingDlg.ui
ui/diagramEditorTransDetailAddDlg.ui ui/diagramEditorTransDetailAddDlg.ui
ui/confirmEditorDlg.ui ui/confirmEditorDlg.ui
ui/projectIconSetting.ui
) )
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)

View File

@ -9,6 +9,7 @@ namespace Ui { class baseInfoDlg; }
QT_END_NAMESPACE QT_END_NAMESPACE
class QButtonGroup; class QButtonGroup;
class ItemPropertyDlg;
class BaseInfoDlg : public BaseContentDlg class BaseInfoDlg : public BaseContentDlg
{ {
@ -17,12 +18,18 @@ public:
BaseInfoDlg(QWidget *parent = nullptr); BaseInfoDlg(QWidget *parent = nullptr);
~BaseInfoDlg(); ~BaseInfoDlg();
void initial();
virtual void createGroupView(groupStateInfo); virtual void createGroupView(groupStateInfo);
virtual QMap<QString,propertyStateInfo> getPropertyValue(BaseProperty* = nullptr); virtual QMap<QString,propertyStateInfo> getPropertyValue(BaseProperty* = nullptr);
virtual void setPropertyValue(QVariant); virtual void setPropertyValue(QVariant);
void setParentDlg(ItemPropertyDlg* p) {_parentDlg = p;}
public slots:
void onIconManagerClicked();
private: private:
Ui::baseInfoDlg *ui; Ui::baseInfoDlg *ui;
QButtonGroup* _stateGroup; QButtonGroup* _stateGroup;
ItemPropertyDlg* _parentDlg;
}; };
#endif #endif

View File

@ -59,6 +59,7 @@ public slots:
void onSignl_openCurrentBay(); void onSignl_openCurrentBay();
private: private:
void removePanel(PowerEntity*); void removePanel(PowerEntity*);
void autoSetModelName(GraphicsBaseModelItem*); //如果此页的工程模已被设置将projectName更新到item
private: private:
QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel; QMap<QString,QPair<DrawingPanel*,QMdiSubWindow*>> m_mapDrawPanel;
int _pageIndex; int _pageIndex;

View File

@ -59,7 +59,8 @@ public:
void generateItemByModel(QStandardItemModel* pModel,int nFrom = 0,QPoint delta = QPoint(0,0)); //0间隔1变压器 void generateItemByModel(QStandardItemModel* pModel,int nFrom = 0,QPoint delta = QPoint(0,0)); //0间隔1变压器
QList<DiagramEditorComponentInfo> generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta = QPointF(0,0)); //根据data生成item QList<DiagramEditorComponentInfo> generateItemByInfo(QMap<QString,DiagramEditorRouteInfo> mapRoute,QMap<QString,DiagramEditorComponentInfo> mapCompo,QPointF delta = QPointF(0,0)); //根据data生成item
void generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置 void generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0); //生成外部连接手动bind的连接 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置
QRectF updateTarget(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nLayout,int nSource,bool regenerate = true,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map QRectF updateTarget(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nLayout,int nSource,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map
void clearCompoDir(QMap<QString,DiagramEditorRouteInfo>&,QMap<QString,DiagramEditorComponentInfo>&,int nSource); //清空component中的dir(updateTarget前调用)
private: private:
void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据) void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据)
//DiagramEditorComponentInfo getCompoDataFromName(const QString&,QMap<QString,DiagramEditorComponentInfo>); //根据名称获取数据 //DiagramEditorComponentInfo getCompoDataFromName(const QString&,QMap<QString,DiagramEditorComponentInfo>); //根据名称获取数据

View File

@ -22,6 +22,7 @@ struct Connection;
class PowerEntity; class PowerEntity;
class ElectricConnectLineItem; class ElectricConnectLineItem;
class ProjectModelSetting; class ProjectModelSetting;
class ProjectIconSetting;
class ElectricBayItem; class ElectricBayItem;
class GraphicsNonStandardItem; class GraphicsNonStandardItem;
class BayProperty; class BayProperty;
@ -64,6 +65,8 @@ public:
bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接 bool isItemValid(GraphicsProjectModelItem*); //判断item是否可以连接
void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用) void insertProjectModelName(QString,QString); //插入工程模类型(生成工程模时调用)
void showProjectIconSettingDlg(GraphicsProjectModelItem*); //显示工程模图标设置(设置使用图标)
void updateItemIcon(QString sMeta,QString sModel); //更新指定模型的图标
/********************baseModel相关**********************/ /********************baseModel相关**********************/
QMap<QUuid,GraphicsBaseModelItem*>& allBaseItems(); //获取所有基模对象 QMap<QUuid,GraphicsBaseModelItem*>& allBaseItems(); //获取所有基模对象
QVector<Connection> allBaseConnections(); QVector<Connection> allBaseConnections();
@ -124,6 +127,7 @@ private:
QMap<QString,modelStateInfo> _modelStateInfo; //模型结构信息 QMap<QString,modelStateInfo> _modelStateInfo; //模型结构信息
QMap<QString,modelDataInfo> _modelDataInfo; //模型数据信息 QMap<QString,modelDataInfo> _modelDataInfo; //模型数据信息
ProjectModelSetting* m_proModelSettingDlg; ProjectModelSetting* m_proModelSettingDlg;
ProjectIconSetting* m_projectIconSettingDlg;
BayManagerDlg* m_pBayManager; BayManagerDlg* m_pBayManager;
public: public:
static bool _dataInitialised; static bool _dataInitialised;

View File

@ -15,8 +15,8 @@ public:
void resize(int,double, double, const QPointF&); void resize(int,double, double, const QPointF&);
void updateCoordinate(); void updateCoordinate();
void move(const QPointF&); void move(const QPointF&);
virtual void loadSvg(const QByteArray& data);
virtual void addSvgItem(ElectricSvgItem* item); virtual void addSvgItem(ElectricSvgItem* item);
virtual void updateMapSvg(QMap<QString,QByteArray> map); //工程模property不含图片额外存储
protected: protected:
virtual QPainterPath shape(); virtual QPainterPath shape();
@ -24,7 +24,7 @@ protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*);
protected: protected:
QRectF m_lastBoudingRect; //记录上一时刻的boundingRect QRectF m_lastBoudingRect; //记录上一时刻的boundingRect
QByteArray m_curSvg; //当前存储的svg QMap<QString,QByteArray> m_mapSvg;
}; };
#endif #endif

View File

@ -9,7 +9,7 @@ class ElectricSvgGroupCT :public ElectricSvgGroup
public: public:
ElectricSvgGroupCT(const QRect &rect,QGraphicsItem *parent = 0); ElectricSvgGroupCT(const QRect &rect,QGraphicsItem *parent = 0);
virtual ~ElectricSvgGroupCT(); virtual ~ElectricSvgGroupCT();
virtual void setupFinish(int nType,int nSize) override; virtual void setupFinish(QVariant) override;
virtual void updateItem() override; virtual void updateItem() override;
void setCtType(int n){_nType = n;} void setCtType(int n){_nType = n;}
void setCtSize(int n){_nSize = n;} void setCtSize(int n){_nSize = n;}

View File

@ -0,0 +1,22 @@
#ifndef ELECTRICSVGGROUPPT_H
#define ELECTRICSVGGROUPPT_H
#include "graphicsItem/electricSvgGroup.h"
class ElectricSvgGroupPT :public ElectricSvgGroup
{
Q_OBJECT
public:
ElectricSvgGroupPT(const QRect &rect,QGraphicsItem *parent = 0);
virtual ~ElectricSvgGroupPT();
virtual void setupFinish(QVariant) override;
virtual void updateItem() override;
virtual void updateLayout() override;
QList<int>& getLstType() {return m_lstType;}
protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
protected:
QList<int> m_lstType; //绕组类型 1星型 0三角
};
#endif

View File

@ -13,8 +13,9 @@ public:
void resize(int,double, double, const QPointF&); void resize(int,double, double, const QPointF&);
void updateCoordinate(); void updateCoordinate();
void move(const QPointF&); void move(const QPointF&);
virtual void loadSvg(const QByteArray& data); virtual void loadSvg(){};
virtual void loadSvg(QByteArray); //第二种load直接加载图片
virtual void updateMapSvg(QMap<QString,QByteArray> map);
protected: protected:
virtual QPainterPath shape(); virtual QPainterPath shape();
virtual void editShape(int, const QPointF&); virtual void editShape(int, const QPointF&);
@ -22,7 +23,7 @@ protected:
protected: protected:
QRectF m_lastBoudingRect; //记录上一时刻的boundingRect QRectF m_lastBoudingRect; //记录上一时刻的boundingRect
QSvgRenderer* m_pRender; QSvgRenderer* m_pRender;
QMap<QString,QByteArray> m_mapSvg;
}; };
#endif #endif

View File

@ -0,0 +1,19 @@
#ifndef ELECTRICSVGITEMPT_H
#define ELECTRICSVGITEMPT_H
#include "electricSvgItem.h"
class ElectricSvgItemPT :public ElectricSvgItem
{
Q_OBJECT
public:
ElectricSvgItemPT(const QRect &rect,QGraphicsItem *parent = 0);
virtual ~ElectricSvgItemPT();
void setItemType(int n){_itemType = n;}
protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*);
int _itemType = 0; //1星型 0三角
};
#endif

View File

@ -12,8 +12,6 @@ public:
ElectricSvgItemRect(const QRect &rect, bool genNewPort = true,QGraphicsItem *parent = 0); ElectricSvgItemRect(const QRect &rect, bool genNewPort = true,QGraphicsItem *parent = 0);
virtual ~ElectricSvgItemRect(); virtual ~ElectricSvgItemRect();
//virtual void updateByProperty();
protected: protected:
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*);
private: private:

View File

@ -556,7 +556,7 @@ public:
virtual void updateConnectData(); //更新连接关系数据 virtual void updateConnectData(); //更新连接关系数据
virtual void setModelName(QString sName){_modelName = sName;} virtual void setModelName(QString sName){_modelName = sName;}
virtual QString getModelName() const {return _modelName;} virtual QString getModelName() const {return _modelName;}
virtual void setupFinish(int nType,int nSize){} //设置完成后调用(如ctpt) virtual void setupFinish(QVariant){} //设置完成后调用(如ctpt)
virtual void updateItem(){}; //更新自身(如ct,pt) virtual void updateItem(){}; //更新自身(如ct,pt)
virtual void updateTerPos(); //ct,pt等item大小变动后重新计算端点位置 virtual void updateTerPos(); //ct,pt等item大小变动后重新计算端点位置
protected: protected:

View File

@ -28,6 +28,7 @@ public:
void showDlg(modelDataInfo,QUuid,GraphicsProjectModelItem*); //显示属性页面 void showDlg(modelDataInfo,QUuid,GraphicsProjectModelItem*); //显示属性页面
void setModelController(FixedPortsModel* p) {_curModelController = p;} void setModelController(FixedPortsModel* p) {_curModelController = p;}
auto getModelController() {return _curModelController;} auto getModelController() {return _curModelController;}
auto getCurItem() {return _curItem;}
public slots: public slots:
void onOkClicked(); void onOkClicked();
void onCancelClicked(); void onCancelClicked();

View File

@ -46,7 +46,10 @@ public:
if(pTer == nullptr){ //BaseModel中不存在则拷贝 if(pTer == nullptr){ //BaseModel中不存在则拷贝
double dX = terminal->getPerX(); double dX = terminal->getPerX();
double dY = terminal->getPerY(); double dY = terminal->getPerY();
TopologyManager::instance().createTerminal(m_id,terminal->type(),terminal->name(),terminal->relativePosition(),terminal->id(),ModelFunctionType::BaseModel,dX,dY); auto newTer = TopologyManager::instance().createTerminal(m_id,terminal->type(),terminal->name(),terminal->relativePosition(),terminal->id(),ModelFunctionType::BaseModel,dX,dY);
if(newTer){
newTer->setPortLocate(terminal->getPortLocate());
}
} }
} }

View File

@ -13,7 +13,8 @@ enum class TerminalType {
PowerOutput, PowerOutput,
PowerConnect, PowerConnect,
ControlSignal, ControlSignal,
ProtectiveGround ProtectiveGround,
NewTral
}; };
class PowerTerminal : public QObject { class PowerTerminal : public QObject {
@ -50,6 +51,8 @@ public:
double getPerX() {return m_dPerX;} double getPerX() {return m_dPerX;}
void setPerY(double d) {m_dPerY = d;} void setPerY(double d) {m_dPerY = d;}
double getPerY() {return m_dPerY;} double getPerY() {return m_dPerY;}
void setPortLocate(int n) {m_portLocate = n;}
int getPortLocate() {return m_portLocate;}
signals: signals:
void positionChanged(const QPointF& newPosition); void positionChanged(const QPointF& newPosition);
@ -62,6 +65,7 @@ private:
QString m_generateBy; //被哪个Terminal生成 QString m_generateBy; //被哪个Terminal生成
double m_dPerX = 0.0; //横向百分比位置 double m_dPerX = 0.0; //横向百分比位置
double m_dPerY = 0.0; //纵向百分比位置 double m_dPerY = 0.0; //纵向百分比位置
int m_portLocate = 0; //所处位置(上下左右)
}; };
#endif //POWERTERMINAL_H #endif //POWERTERMINAL_H

View File

@ -0,0 +1,21 @@
#ifndef PROJECTICONSELECTIONDLG_H
#define PROJECTICONSELECTIONDLG_H
#include <QDialog>
#include <QListWidget>
#include <QVBoxLayout>
#include <QDialogButtonBox>
class ProjectIconSelectionDlg : public QDialog {
Q_OBJECT
public:
ProjectIconSelectionDlg(const QMap<QString,QByteArray>,QWidget* parent = nullptr);
QByteArray selectedSVG() const;
private:
QListWidget* listWidget;
QMap<QString,QByteArray> svgMap;
};
#endif

View File

@ -0,0 +1,37 @@
#ifndef PROJECTICONSETTING_H
#define PROJECTICONSETTING_H
/*********工程模使用的图标设置*********/
#include <QDialog>
class FixedPortsModel;
class GraphicsProjectModelItem;
QT_BEGIN_NAMESPACE
namespace Ui { class projectIconSetting; }
QT_END_NAMESPACE
class ProjectIconSetting : public QDialog
{
Q_OBJECT
public:
ProjectIconSetting(QWidget *parent = nullptr);
~ProjectIconSetting();
void showDlg(GraphicsProjectModelItem*);
void initial();
void addItems(QMap<QString,QByteArray>);
void selectImage(int row);
void setController(FixedPortsModel* p){_controller = p;}
public slots:
void onOkClicked();
void onCellClicked(int row,int col);
private:
Ui::projectIconSetting *ui;
QSize _iconSize;
FixedPortsModel* _controller;
QString _sMetaModel;
QString _sModel;
};
#endif

View File

@ -6,17 +6,20 @@
#include "global.h" #include "global.h"
#include "baseProperty.h" #include "baseProperty.h"
#include "basePropertyManager.h" #include "basePropertyManager.h"
#include "itemPropertyDlg.h"
#include <QButtonGroup> #include <QButtonGroup>
BaseInfoDlg::BaseInfoDlg(QWidget *parent) BaseInfoDlg::BaseInfoDlg(QWidget *parent)
: BaseContentDlg(parent) : BaseContentDlg(parent)
, ui(new Ui::baseInfoDlg) , ui(new Ui::baseInfoDlg)
,_parentDlg(nullptr)
{ {
ui->setupUi(this); ui->setupUi(this);
_stateGroup = new QButtonGroup(this); _stateGroup = new QButtonGroup(this);
_stateGroup->addButton(ui->rb_inService,1); _stateGroup->addButton(ui->rb_inService,1);
_stateGroup->addButton(ui->rb_outService,0); _stateGroup->addButton(ui->rb_outService,0);
_stateGroup->setExclusive(true); _stateGroup->setExclusive(true);
initial();
} }
BaseInfoDlg::~BaseInfoDlg() BaseInfoDlg::~BaseInfoDlg()
@ -24,6 +27,11 @@ BaseInfoDlg::~BaseInfoDlg()
delete ui; delete ui;
} }
void BaseInfoDlg::initial()
{
connect(ui->btn_icon,&QPushButton::clicked,this,&BaseInfoDlg::onIconManagerClicked);
}
void BaseInfoDlg::createGroupView(groupStateInfo infos) void BaseInfoDlg::createGroupView(groupStateInfo infos)
{ {
QList<gridInfo> lstGrid = DataBase::GetInstance()->getAllGrid(); QList<gridInfo> lstGrid = DataBase::GetInstance()->getAllGrid();
@ -152,3 +160,10 @@ void BaseInfoDlg::setPropertyValue(QVariant var)
} }
} }
} }
void BaseInfoDlg::onIconManagerClicked()
{
if(_parentDlg){
_parentDlg->getModelController()->showProjectIconSettingDlg(_parentDlg->getCurItem());
}
}

View File

@ -25,6 +25,7 @@ ElectricBaseModelPortItem::ElectricBaseModelPortItem(const ElectricBaseModelPort
setHandleVisible(false); setHandleVisible(false);
setFunctionHandleIfShow(false); setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false); setFunctionHandleEnaable(false);
setPos(obj.pos());
} }
ElectricBaseModelPortItem* ElectricBaseModelPortItem::clone() const ElectricBaseModelPortItem* ElectricBaseModelPortItem::clone() const

View File

@ -21,6 +21,7 @@ ElectricBaseModelSvgItem::ElectricBaseModelSvgItem(const ElectricBaseModelSvgIte
m_lastBoudingRect = obj.m_lastBoudingRect; m_lastBoudingRect = obj.m_lastBoudingRect;
m_icon = obj.m_icon; m_icon = obj.m_icon;
m_pRender = new QSvgRenderer(m_icon); m_pRender = new QSvgRenderer(m_icon);
setRotation(obj.rotation());
} }
ElectricBaseModelSvgItem* ElectricBaseModelSvgItem::clone() const ElectricBaseModelSvgItem* ElectricBaseModelSvgItem::clone() const

View File

@ -9,7 +9,7 @@
#include "topologyManager.h" #include "topologyManager.h"
#include "powerEntity.h" #include "powerEntity.h"
#include "diagramEditor/diagramEditorWizard.h" #include "diagramEditor/diagramEditorWizard.h"
//#include "componentIconManager.h" #include "projectModelManager.h"
#include "baseProperty.h" #include "baseProperty.h"
#include "diagramEditor/editPanel.h" #include "diagramEditor/editPanel.h"
#include "graphicsDataModel/diagramEditorModel.h" #include "graphicsDataModel/diagramEditorModel.h"
@ -110,10 +110,18 @@ void DiagramCavas::onSignal_savePage()
case QMessageBox::Save: //todo:已存在更新 case QMessageBox::Save: //todo:已存在更新
{ {
QMap<QUuid,GraphicsProjectModelItem*> map = pPanel->getModelController()->allItems(); QMap<QUuid,GraphicsProjectModelItem*> map = pPanel->getModelController()->allItems();
QList<QString> updatedModel; //更新过图标的模型
for(auto pItem:map) for(auto pItem:map)
{ {
BaseProperty* pData = dynamic_cast<BaseProperty*>(pItem->getProperty()); BaseProperty* pData = dynamic_cast<BaseProperty*>(pItem->getProperty());
if(pData){ if(pData){
QString sMeta = pData->metaModelName();
QString sModel = pData->modelName();
if(!updatedModel.contains(sModel)){
ProjectModelManager::instance().updateSetting(sMeta,sModel); //更新使用的图标数据
updatedModel.append(sModel);
}
if(pItem->itemChanged() || pData->dataChanged()) if(pItem->itemChanged() || pData->dataChanged())
{ {
pItem->updateConnectData(); //更新连接状态 pItem->updateConnectData(); //更新连接状态
@ -340,6 +348,21 @@ void DiagramCavas::removePanel(PowerEntity* pEntity)
} }
} }
void DiagramCavas::autoSetModelName(GraphicsBaseModelItem* pItem)
{
ModelProperty* p = pItem->getProperty();
BaseModelProperty* pro = dynamic_cast<BaseModelProperty*>(p);
if(pro){
QString sMeta = pro->metaModelName();
QString sModel = sMeta+"_"+_curPage;
bool exist = ProjectModelManager::instance().getData()[sMeta].contains(sModel);
if(exist){
pro->setModelName(sModel);
pro->getModelProperty().modelSetting.modelName = sModel;
}
}
}
void DiagramCavas::onCreateTestBaseModelDiagram() void DiagramCavas::onCreateTestBaseModelDiagram()
{ {
PowerEntity* pEntity; PowerEntity* pEntity;
@ -424,6 +447,7 @@ void DiagramCavas::onSignal_wizardFinished(QString sName,QMap<QUuid,GraphicsBase
cloneItem->setPos(pItem->pos()); cloneItem->setPos(pItem->pos());
pPanel->getModelController()->addBaseItem(cloneItem->itemId(),cloneItem); pPanel->getModelController()->addBaseItem(cloneItem->itemId(),cloneItem);
pPro->setDataChanged(true); pPro->setDataChanged(true);
autoSetModelName(cloneItem);
if(pPro->type() != 8){ if(pPro->type() != 8){
PowerEntity* pEntity = TopologyManager::instance().findEntity(pPro->uuid().toString(),ModelFunctionType::BaseModel); PowerEntity* pEntity = TopologyManager::instance().findEntity(pPro->uuid().toString(),ModelFunctionType::BaseModel);

View File

@ -256,7 +256,8 @@ void DiagramEditorBayDetailSettingDlg::onOkClicked()
else if(nLayout == 1){ //横,右下 else if(nLayout == 1){ //横,右下
nDir = 14; nDir = 14;
} }
QRectF recBounding = getModel()->updateTarget(_curBayInfo.mapRoute,_curBayInfo.mapComponent,nDir,0,true,false); getModel()->clearCompoDir(_curBayInfo.mapRoute,_curBayInfo.mapComponent,0);
QRectF recBounding = getModel()->updateTarget(_curBayInfo.mapRoute,_curBayInfo.mapComponent,nDir,0,false);
if(_curOperateObj->getRecSize().isEmpty()) if(_curOperateObj->getRecSize().isEmpty())
_curOperateObj->setRecSize(recBounding); _curOperateObj->setRecSize(recBounding);
_curOperateObj->setBayInfo(_curBayInfo); _curOperateObj->setBayInfo(_curBayInfo);

View File

@ -45,6 +45,7 @@ void DiagramEditorBayPreviewDlg::showDlg(int nLayout)
else if(nLayout == 1){ //横,右下 else if(nLayout == 1){ //横,右下
nDir = 14; nDir = 14;
} }
_pParent->getModel()->clearCompoDir(_pParent->getBayInfo().mapRoute,_pParent->getBayInfo().mapComponent,0);
_pParent->getModel()->updateTarget(_pParent->getBayInfo().mapRoute,_pParent->getBayInfo().mapComponent,nDir,0); _pParent->getModel()->updateTarget(_pParent->getBayInfo().mapRoute,_pParent->getBayInfo().mapComponent,nDir,0);
} }

View File

@ -33,6 +33,7 @@ void DiagramEditorPreviewDlg::initial()
_pScene = new EditPreviewScene(this); _pScene = new EditPreviewScene(this);
_pScene->setSceneRect(_pParent->getScene()->sceneRect()); //使用父窗口scene大小 _pScene->setSceneRect(_pParent->getScene()->sceneRect()); //使用父窗口scene大小
_pView->setScene(_pScene); _pView->setScene(_pScene);
_pView->centerOn(QPointF(0,0));
} }
void DiagramEditorPreviewDlg::showDlg() void DiagramEditorPreviewDlg::showDlg()

View File

@ -275,11 +275,19 @@ void DiagramEditorTransDetailSettingDlg::onOkClicked()
QRectF rec2; QRectF rec2;
QRectF rec3; QRectF rec3;
QRectF result; QRectF result;
if(_transInfo.mapNeutral.contains(0))
getModel()->clearCompoDir(_transInfo.mapNeutral[0].mapRoute,_transInfo.mapComponent,1);
if(_transInfo.mapNeutral.contains(1))
getModel()->clearCompoDir(_transInfo.mapNeutral[1].mapRoute,_transInfo.mapComponent,1);
if(_transInfo.mapNeutral.contains(2))
getModel()->clearCompoDir(_transInfo.mapNeutral[2].mapRoute,_transInfo.mapComponent,1);
if(_transInfo.mapNeutral.contains(0)){ if(_transInfo.mapNeutral.contains(0)){
QPointF delta = QPointF(100,-25); QPointF delta = QPointF(100,-25);
_transInfo.mapNeutral[0].nType = 0; _transInfo.mapNeutral[0].nType = 0;
_transInfo.mapNeutral[0].delPoint = delta; _transInfo.mapNeutral[0].delPoint = delta;
rec1 = getModel()->updateTarget(_transInfo.mapNeutral[0].mapRoute,_transInfo.mapComponent,18,1,true,false); //1右2上 rec1 = getModel()->updateTarget(_transInfo.mapNeutral[0].mapRoute,_transInfo.mapComponent,14,1,false); //1右2下
rec1.translate(delta); //相对trans偏移 rec1.translate(delta); //相对trans偏移
result = result.united(rec1); result = result.united(rec1);
} }
@ -287,7 +295,7 @@ void DiagramEditorTransDetailSettingDlg::onOkClicked()
QPointF delta = QPointF(-150,0); QPointF delta = QPointF(-150,0);
_transInfo.mapNeutral[1].nType = 1; _transInfo.mapNeutral[1].nType = 1;
_transInfo.mapNeutral[1].delPoint = delta; _transInfo.mapNeutral[1].delPoint = delta;
rec2 = getModel()->updateTarget(_transInfo.mapNeutral[1].mapRoute,_transInfo.mapComponent,14,1,true,false); //1右2下 rec2 = getModel()->updateTarget(_transInfo.mapNeutral[1].mapRoute,_transInfo.mapComponent,24,1,false); //1左2下
rec2.translate(delta); rec2.translate(delta);
result = result.united(rec2); result = result.united(rec2);
} }
@ -295,7 +303,7 @@ void DiagramEditorTransDetailSettingDlg::onOkClicked()
QPointF delta = QPointF(100,25); QPointF delta = QPointF(100,25);
_transInfo.mapNeutral[2].nType = 2; _transInfo.mapNeutral[2].nType = 2;
_transInfo.mapNeutral[2].delPoint = delta; _transInfo.mapNeutral[2].delPoint = delta;
rec3 = getModel()->updateTarget(_transInfo.mapNeutral[2].mapRoute,_transInfo.mapComponent,24,1,true,false); //1左2下 rec3 = getModel()->updateTarget(_transInfo.mapNeutral[2].mapRoute,_transInfo.mapComponent,14,1,false); //1右2下
rec3.translate(delta); rec3.translate(delta);
result = result.united(rec3); result = result.united(rec3);
} }

View File

@ -44,11 +44,19 @@ void DiagramEditorTransPreviewDlg::showDlg(int nType)
void DiagramEditorTransPreviewDlg::updateModelData(int nType) void DiagramEditorTransPreviewDlg::updateModelData(int nType)
{ {
if(nType == 0 || nType == 1 || nType == 2){ if(nType == 0 || nType == 1 || nType == 2){
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[nType].mapRoute,_pParent->getTransInfo().mapComponent,14,1); //1右2下 _pParent->getModel()->clearCompoDir(_pParent->getTransInfo().mapNeutral[nType].mapRoute,_pParent->getTransInfo().mapComponent,1);
if(nType == 0 || nType == 2)
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[nType].mapRoute,_pParent->getTransInfo().mapComponent,14,1); //1右2下
else if(nType == 1)
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[nType].mapRoute,_pParent->getTransInfo().mapComponent,24,1); //1左2下
} }
else if(nType == 3){ //整个变压器 else if(nType == 3){ //整个变压器
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[0].mapRoute,_pParent->getTransInfo().mapComponent,18,1); //1右2上 _pParent->getModel()->clearCompoDir(_pParent->getTransInfo().mapNeutral[0].mapRoute,_pParent->getTransInfo().mapComponent,1);
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[1].mapRoute,_pParent->getTransInfo().mapComponent,14,1); //1右2下 _pParent->getModel()->clearCompoDir(_pParent->getTransInfo().mapNeutral[1].mapRoute,_pParent->getTransInfo().mapComponent,1);
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[2].mapRoute,_pParent->getTransInfo().mapComponent,24,1); //1左2下 _pParent->getModel()->clearCompoDir(_pParent->getTransInfo().mapNeutral[2].mapRoute,_pParent->getTransInfo().mapComponent,1);
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[0].mapRoute,_pParent->getTransInfo().mapComponent,14,1); //1右2下
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[1].mapRoute,_pParent->getTransInfo().mapComponent,24,1); //1左2下
_pParent->getModel()->updateTarget(_pParent->getTransInfo().mapNeutral[2].mapRoute,_pParent->getTransInfo().mapComponent,14,1); //1右2下
} }
} }

View File

@ -28,11 +28,16 @@ void BaseModel::createTopoTerminalsByItem(GraphicsBaseItem* pItem,ModelFunctionT
case T_lineInOut: case T_lineInOut:
terType = TerminalType::PowerConnect; terType = TerminalType::PowerConnect;
break; break;
case T_newTral:
terType = TerminalType::NewTral;
break;
default: default:
break; break;
} }
QPointF f = port->pos(); QPointF f = port->pos();
TopologyManager::instance().createTerminal(pEntity->id(),terType,"",port->pos(),port->getId(),funType); auto pTer = TopologyManager::instance().createTerminal(pEntity->id(),terType,"",port->pos(),port->getId(),funType);
if(pTer)
pTer->setPortLocate(port->portPos());
} }
} }
} }
@ -241,24 +246,193 @@ template<typename TypeLine> void BaseModel::establishConnection(GraphicsBaseItem
else else
{ {
QMap<QString,ItemPort*> mapSrc = pSrc->getPorts(); QMap<QString,ItemPort*> mapSrc = pSrc->getPorts();
QMap<QString,ItemPort*> mapDest = pDest->getPorts();
pSrcPort = nullptr; pSrcPort = nullptr;
for(auto& port:mapSrc) pDestPort = nullptr;
{
if(port->getType() == T_lineOut) if(nMode == 1){ //连接中性点
{ if(nTypeSrc == 15 || nTypeSrc == 16){ //src是变压器中性点
pSrcPort = port; for(auto& port:mapSrc) //连接中性点
break; {
int nTpe = port->getType();
int nPos = port->portPos();
if(nTpe == T_newTral){
if(nParam == 0){
if(nPos == P_top){
pSrcPort = port;
}
}
else if(nParam == 1){
if(nPos == P_left || nPos == P_right){
pSrcPort = port;
}
}
else if(nParam == 2){
if(nPos == P_down){
pSrcPort = port;
}
}
}
}
for(auto& port:mapDest)
{
if(port->getType() == T_lineIn)
{
pDestPort = port;
break;
}
}
}
else if(nTypeDest == 15 || nTypeDest == 16){ //dest是变压器中性点
for(auto& port:mapSrc)
{
if(port->getType() == T_lineIn) //始终从中性点出
{
pSrcPort = port;
break;
}
}
for(auto& port:mapDest) //连接中性点
{
int nTpe = port->getType();
int nPos = port->portPos();
if(nTpe == T_newTral){
if(nParam == 0){
if(nPos == P_top){
pDestPort = port;
}
}
else if(nParam == 1){
if(nPos == P_left || nPos == P_right){
pDestPort = port;
}
}
else if(nParam == 2){
if(nPos == P_down){
pDestPort = port;
}
}
}
}
} }
} }
else if(nMode == 2){ //连接变压器
if(nTypeSrc == 15 || nTypeSrc == 16){ //src是变压器
for(auto& port:mapSrc)
{
int nTpe = port->getType();
int nPos = port->portPos();
if(nTpe != T_newTral){
if(nParam == 0){
if(nPos == P_top){
pSrcPort = port;
}
}
else if(nParam == 1){
if(nPos == P_left || nPos == P_right){
pSrcPort = port;
}
}
else if(nParam == 2){
if(nPos == P_down){
pSrcPort = port;
}
}
}
}
QMap<QString,ItemPort*> mapDest = pDest->getPorts(); int transType = 0;
pDestPort = nullptr; if(pSrcPort){
for(auto& port:mapDest) transType = pSrcPort->getType();
{ }
if(port->getType() == T_lineIn) for(auto& port:mapDest) //根据变压器端点选择连接端点类型
{
if(transType == T_lineOut)
{
if(port->getType() == T_lineIn)
{
pDestPort = port;
break;
}
}
else{
if(port->getType() == T_lineOut)
{
pDestPort = port;
break;
}
}
}
}
else if(nTypeDest == 15 || nTypeDest == 16){ //dest是变压器
for(auto& port:mapDest)
{
int nTpe = port->getType();
int nPos = port->portPos();
if(nTpe != T_newTral){
if(nParam == 0){
if(nPos == P_top){
pDestPort = port;
}
}
else if(nParam == 1){
if(nPos == P_left || nPos == P_right){
pDestPort = port;
}
}
else if(nParam == 2){
if(nPos == P_down){
pDestPort = port;
}
}
}
}
int transType = 0;
if(pDestPort){
transType = pDestPort->getType();
}
for(auto& port:mapSrc) //根据变压器端点选择连接端点类型
{
if(transType == T_lineOut)
{
if(port->getType() == T_lineIn)
{
pSrcPort = port;
break;
}
}
else{
if(port->getType() == T_lineOut)
{
pSrcPort = port;
break;
}
}
}
}
}
else{
for(auto& port:mapSrc)
{ {
pDestPort = port; if(port->getType() == T_lineOut)
break; {
pSrcPort = port;
break;
}
}
for(auto& port:mapDest)
{
if(port->getType() == T_lineIn)
{
pDestPort = port;
break;
}
} }
} }
} }

View File

@ -18,6 +18,9 @@
#include "diagramEditor/diagramEditorWizard.h" #include "diagramEditor/diagramEditorWizard.h"
#include "diagramEditor/diagramEditorStructContainer.h" #include "diagramEditor/diagramEditorStructContainer.h"
int g_nCompoWidth = 50; //元件默认宽度(计算布局使用)
int g_nCompoHeight = 50;
DiagramEditorModel::DiagramEditorModel() DiagramEditorModel::DiagramEditorModel()
:_pCurBayRoute(nullptr) :_pCurBayRoute(nullptr)
,_pCurBayComponent(nullptr) ,_pCurBayComponent(nullptr)
@ -115,11 +118,16 @@ void DiagramEditorModel::createTopoTerminalsByItem(GraphicsBaseItem* pItem,Model
case T_lineInOut: case T_lineInOut:
terType = TerminalType::PowerConnect; terType = TerminalType::PowerConnect;
break; break;
case T_newTral:
terType = TerminalType::NewTral;
break;
default: default:
break; break;
} }
QPointF f = port->pos(); QPointF f = port->pos();
TopologyManager::instance().createTerminal(pEntity->id(),terType,"",port->pos(),port->getId(),funType,port->getXPercent(),port->getYPercent()); auto pTer = TopologyManager::instance().createTerminal(pEntity->id(),terType,"",port->pos(),port->getId(),funType,port->getXPercent(),port->getYPercent());
if(pTer)
pTer->setPortLocate(port->portPos());
} }
} }
} }
@ -347,16 +355,21 @@ void DiagramEditorModel::generateTempTrans(int nType,DiagramEditorTransformerBlo
if(typ == TransformerType::twoWinding){ if(typ == TransformerType::twoWinding){
generateItemByModel(_pCurTransLRoutes.value(0),1,QPoint(100,-25)); generateItemByModel(_pCurTransLRoutes.value(0),1,QPoint(100,-25));
generateItemByModel(_pCurTransLRoutes.value(2),1,QPoint(100,25)); generateItemByModel(_pCurTransLRoutes.value(2),1,QPoint(100,25));
pInfo.mapNeutral[0].delPoint = QPoint(100,-25); if(pInfo.mapNeutral.contains(0))
pInfo.mapNeutral[2].delPoint = QPoint(100,25); pInfo.mapNeutral[0].delPoint = QPoint(100,-25);
if(pInfo.mapNeutral.contains(2))
pInfo.mapNeutral[2].delPoint = QPoint(100,25);
} }
else if(typ == TransformerType::threeWinding){ else if(typ == TransformerType::threeWinding){
generateItemByModel(_pCurTransLRoutes.value(0),1,QPoint(100,-25)); generateItemByModel(_pCurTransLRoutes.value(0),1,QPoint(100,-25));
generateItemByModel(_pCurTransLRoutes.value(1),1,QPoint(-150,0)); generateItemByModel(_pCurTransLRoutes.value(1),1,QPoint(-150,0));
generateItemByModel(_pCurTransLRoutes.value(2),1,QPoint(100,25)); generateItemByModel(_pCurTransLRoutes.value(2),1,QPoint(100,25));
pInfo.mapNeutral[0].delPoint = QPoint(100,-25); if(pInfo.mapNeutral.contains(0))
pInfo.mapNeutral[1].delPoint = QPoint(-150,0); pInfo.mapNeutral[0].delPoint = QPoint(100,-25);
pInfo.mapNeutral[2].delPoint = QPoint(100,25); if(pInfo.mapNeutral.contains(1))
pInfo.mapNeutral[1].delPoint = QPoint(-150,0);
if(pInfo.mapNeutral.contains(2))
pInfo.mapNeutral[2].delPoint = QPoint(100,25);
} }
connectTransToNeutral(block); connectTransToNeutral(block);
@ -646,7 +659,7 @@ void DiagramEditorModel::calculateBlockPos()
pCon->setMidUpY(deltaY); pCon->setMidUpY(deltaY);
pCon->setMidDownY(deltaY+50); pCon->setMidDownY(deltaY+50);
pCon->setStartX(dDeltaX); pCon->setStartX(dDeltaX);
dDeltaX += pCon->getWidth(); dDeltaX += pCon->getWidth()+100;
//计算container中block中心点的位置 //计算container中block中心点的位置
auto mapBlocks = pCon->getBlockMap(); auto mapBlocks = pCon->getBlockMap();
@ -820,10 +833,12 @@ void DiagramEditorModel::refreshConnection()
auto pFromData = pFromItem->getProperty(); auto pFromData = pFromItem->getProperty();
auto pToData = pToItem->getProperty(); auto pToData = pToItem->getProperty();
if(pFromData->type() == 1){ //from是母线 if(pFromData->type() == 1){ //from是母线
pFromItem->movePort(fromTerId,pFromItem->mapFromScene(calculateBusPortPos(pFromItem,pToItem))); QPointF p = calculateBusPortPos(pFromItem,pToItem);
pFromItem->movePort(fromTerId,pFromItem->mapFromScene(p));
} }
else if(pToData->type() == 1){ //to是母线 else if(pToData->type() == 1){ //to是母线
pToItem->movePort(toTerId,pToItem->mapFromScene(calculateBusPortPos(pToItem,pFromItem))); QPointF p = calculateBusPortPos(pToItem,pFromItem);
pToItem->movePort(toTerId,pToItem->mapFromScene(p));
} }
auto portsFrom = pFromItem->getPorts(); auto portsFrom = pFromItem->getPorts();
@ -835,6 +850,15 @@ void DiagramEditorModel::refreshConnection()
pLine->setStartPoint(pFrom->scenePos()); pLine->setStartPoint(pFrom->scenePos());
pLine->setEndPoint(pTo->scenePos()); pLine->setEndPoint(pTo->scenePos());
pLine->calculatePath(); pLine->calculatePath();
PowerTerminal* pTopoFrom = TopologyManager::instance().getTerminal(fromTerId,ModelFunctionType::EditorModel);
PowerTerminal* pTopoTo = TopologyManager::instance().getTerminal(toTerId,ModelFunctionType::EditorModel);
if(pTopoFrom && pTopoTo){
QPointF p1 = pFrom->pos();
QPointF p2 = pTo->pos();
pTopoFrom->setRelativePosition(p1);
pTopoTo->setRelativePosition(p2);
}
} }
} }
} }
@ -1059,47 +1083,48 @@ void DiagramEditorModel::generateOutConnection(QList<DiagramEditorComponentInfo>
} }
} }
QRectF DiagramEditorModel::updateTarget(QMap<QString,DiagramEditorRouteInfo>& data,QMap<QString,DiagramEditorComponentInfo>& compos,int nLayout,int nSource,bool regenerate,bool saveToModel) void DiagramEditorModel::clearCompoDir(QMap<QString,DiagramEditorRouteInfo>& data,QMap<QString,DiagramEditorComponentInfo>& compos,int nSource)
{
for(auto &routeInfo:data){
routeInfo.lstOrder.clear();
routeInfo.lstReverse.clear();
for(auto &compo:routeInfo.lstCompo){
compo.nUsedDirection = 0;
auto pItemName = getNameItem(compo.sName,nSource);
if(pItemName){ //手动清空item数据
int nVal = pItemName->data().toInt();
pItemName->setData(QString::number(0)); //在公用模型中更新设备方向占用(重要)
//pItemName->setData(QPoint(0,0),Qt::UserRole+2); //设置相对位置
pItemName->setData(0,Qt::UserRole+5); //旋转
}
}
for(auto &compoInfo:compos){
compoInfo.nUsedDirection = 0;
compoInfo.nRotate = 0;
}
}
/*for(auto &routeInfo:data){
routeInfo.lstOrder.clear();
routeInfo.lstReverse.clear();
for(auto &compo:routeInfo.lstCompo){
compo.nUsedDirection = 0;
}
}
for(auto &compoInfo:compos){
compoInfo.nUsedDirection = 0;
compoInfo.nRotate = 0;
}*/
}
QRectF DiagramEditorModel::updateTarget(QMap<QString,DiagramEditorRouteInfo>& data,QMap<QString,DiagramEditorComponentInfo>& compos,int nLayout,int nSource,bool saveToModel)
{ {
QRectF recBounding; //包含所有元件的矩形 QRectF recBounding; //包含所有元件的矩形
auto& mapRoute = data; auto& mapRoute = data;
QString sMainRoute; QString sMainRoute;
if(regenerate){ //清空方位数据
if(saveToModel){
for(auto &routeInfo:data){
routeInfo.lstOrder.clear();
routeInfo.lstReverse.clear();
for(auto &compo:routeInfo.lstCompo){
compo.nUsedDirection = 0;
auto pItemName = getNameItem(compo.sName,nSource);
if(pItemName){ //手动清空item数据
int nVal = pItemName->data().toInt();
pItemName->setData(QString::number(0)); //在公用模型中更新设备方向占用(重要)
//pItemName->setData(QPoint(0,0),Qt::UserRole+2); //设置相对位置
pItemName->setData(0,Qt::UserRole+5); //旋转
}
}
}
}
else{
for(auto &routeInfo:data){
routeInfo.lstOrder.clear();
routeInfo.lstReverse.clear();
for(auto &compo:routeInfo.lstCompo){
compo.nUsedDirection = 0;
}
}
for(auto &compoInfo:compos){
compoInfo.nUsedDirection = 0;
compoInfo.nRotate = 0;
//compoInfo.deltaPos = QPoint(0,0);
}
}
}
bool hasMain = false; bool hasMain = false;
for(auto& route:mapRoute){ for(auto& route:mapRoute){
if(route.bMainRoute == true){ if(route.bMainRoute == true){
@ -2123,15 +2148,15 @@ QRectF DiagramEditorModel::updateTarget(QMap<QString,DiagramEditorRouteInfo>& da
if(!points.empty()){ if(!points.empty()){
qreal minX = points[0].x(); qreal minX = points[0].x();
qreal maxX = points[0].x(); qreal maxX = points[0].x()+g_nCompoWidth;
qreal minY = points[0].y(); qreal minY = points[0].y();
qreal maxY = points[0].y(); qreal maxY = points[0].y()+g_nCompoHeight;
for (const QPointF& point : points) { for (const QPointF& point : points) {
minX = qMin(minX, point.x()); minX = qMin(minX, point.x());
maxX = qMax(maxX, point.x()); maxX = qMax(maxX, point.x()+g_nCompoWidth);
minY = qMin(minY, point.y()); minY = qMin(minY, point.y());
maxY = qMax(maxY, point.y()); maxY = qMax(maxY, point.y()+g_nCompoHeight);
} }
recBounding = QRectF(QPointF(minX, minY), QPointF(maxX, maxY)); recBounding = QRectF(QPointF(minX, minY), QPointF(maxX, maxY));

View File

@ -6,6 +6,7 @@
#include "graphicsItem/electricConnectLineItem.h" #include "graphicsItem/electricConnectLineItem.h"
#include "graphicsItem/electricPortItem.h" #include "graphicsItem/electricPortItem.h"
#include "graphicsItem/electricSvgGroupCT.h" #include "graphicsItem/electricSvgGroupCT.h"
#include "graphicsItem/electricSvgGroupPT.h"
#include "graphicsItem/electricSvgItemDS.h" #include "graphicsItem/electricSvgItemDS.h"
#include "graphicsItem/electricSvgItemES.h" #include "graphicsItem/electricSvgItemES.h"
#include "graphicsItem/electricSvgItemFES.h" #include "graphicsItem/electricSvgItemFES.h"
@ -39,6 +40,7 @@
#include "projectModelSetting.h" #include "projectModelSetting.h"
#include "bayManagerDlg.h" #include "bayManagerDlg.h"
#include "projectModelManager.h" #include "projectModelManager.h"
#include "projectIconSetting.h"
#include "global.h" #include "global.h"
bool FixedPortsModel::_dataInitialised = false; bool FixedPortsModel::_dataInitialised = false;
@ -49,6 +51,7 @@ FixedPortsModel::FixedPortsModel(PowerEntity* pEntity)
,_Interface(nullptr) ,_Interface(nullptr)
,_pEntity(pEntity) ,_pEntity(pEntity)
,m_proModelSettingDlg(nullptr) ,m_proModelSettingDlg(nullptr)
,m_projectIconSettingDlg(nullptr)
,m_pBayManager(nullptr) ,m_pBayManager(nullptr)
{ {
_cavas = nullptr; _cavas = nullptr;
@ -156,7 +159,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[3].icon; svg = DataBase::GetInstance()->ModelType()[3].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["cb"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -168,21 +171,11 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pCb = new ElectricSvgItemRect(QRect(0, 0, dX, dY),false); auto pCb = new ElectricSvgItemRect(QRect(-dX*0.5, -dY*0.5, dX, dY),false);
pCb->setItemType(GIT_itemRect); pCb->setItemType(GIT_itemRect);
pCb->loadSvg(svg); pCb->loadSvg(svg);
item = pCb; item = pCb;
QJsonArray portArr = pro->context()["port"].toArray(); QJsonArray portArr = pro->context()["port"].toArray();
/*for(QJsonValueRef portJson:portArr)
{
QJsonObject portObj = portJson.toObject();
QString portId = portObj["portId"].toString();
int x = portObj["x"].toInt();
int y = portObj["y"].toInt();
HandleType tye = HandleType(portObj["portType"].toInt());
PortPos locate = PortPos(portObj["locate"].toInt());
item->addPort(P_const,QPointF(x,y),portId,tye,locate);
}*/
addPortsToItem_json(P_const,portArr,item); addPortsToItem_json(P_const,portArr,item);
} }
else if(type == GIT_node) else if(type == GIT_node)
@ -192,14 +185,6 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
item = pNode; item = pNode;
QJsonArray portArr = pro->context()["port"].toArray(); QJsonArray portArr = pro->context()["port"].toArray();
/*for(QJsonValueRef portJson:portArr)
{
QJsonObject portObj = portJson.toObject();
QString portId = portObj["portId"].toString();
int x = portObj["x"].toInt();
int y = portObj["y"].toInt();
item->addPort(p_movable,QPointF(x,y),portId);
}*/
addPortsToItem_json(p_movable,portArr,item); addPortsToItem_json(p_movable,portArr,item);
} }
else if(type == GIT_bus) else if(type == GIT_bus)
@ -210,7 +195,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[1].icon; svg = DataBase::GetInstance()->ModelType()[1].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["bus"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -258,9 +243,8 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pCt = new ElectricSvgGroupCT(QRect(0, 0, dX, dY)); auto pCt = new ElectricSvgGroupCT(QRect(-dX*0.5, -dY*0.5, dX, dY));
pCt->setItemType(GIT_ctGroup); pCt->setItemType(GIT_ctGroup);
pCt->loadSvg(svg);
item = pCt; item = pCt;
QJsonArray portArr = pro->context()["port"].toArray(); QJsonArray portArr = pro->context()["port"].toArray();
@ -274,7 +258,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[7].icon; svg = DataBase::GetInstance()->ModelType()[7].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["ds"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -286,7 +270,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pDs = new ElectricSvgItemDS(QRect(0, 0, dX, dY)); auto pDs = new ElectricSvgItemDS(QRect(-dX*0.5, -dY*0.5, dX, dY));
pDs->setItemType(GIT_DS); pDs->setItemType(GIT_DS);
pDs->loadSvg(svg); pDs->loadSvg(svg);
item = pDs; item = pDs;
@ -302,7 +286,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[8].icon; svg = DataBase::GetInstance()->ModelType()[8].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["es"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -314,7 +298,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pEs = new ElectricSvgItemES(QRect(0, 0, dX, dY)); auto pEs = new ElectricSvgItemES(QRect(-dX*0.5, -dY*0.5, dX, dY));
pEs->setItemType(GIT_ES); pEs->setItemType(GIT_ES);
pEs->loadSvg(svg); pEs->loadSvg(svg);
item = pEs; item = pEs;
@ -330,7 +314,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[9].icon; svg = DataBase::GetInstance()->ModelType()[9].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["fes"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -342,7 +326,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pFes = new ElectricSvgItemFES(QRect(0, 0, dX, dY)); auto pFes = new ElectricSvgItemFES(QRect(-dX*0.5, -dY*0.5, dX, dY));
pFes->setItemType(GIT_FES); pFes->setItemType(GIT_FES);
pFes->loadSvg(svg); pFes->loadSvg(svg);
item = pFes; item = pFes;
@ -358,7 +342,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[10].icon; svg = DataBase::GetInstance()->ModelType()[10].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["dteds"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -370,7 +354,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pDteds = new ElectricSvgItemDTEDS(QRect(0, 0, dX, dY)); auto pDteds = new ElectricSvgItemDTEDS(QRect(-dX*0.5, -dY*0.5, dX, dY));
pDteds->setItemType(GIT_DTEDS); pDteds->setItemType(GIT_DTEDS);
pDteds->loadSvg(svg); pDteds->loadSvg(svg);
item = pDteds; item = pDteds;
@ -386,7 +370,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[11].icon; svg = DataBase::GetInstance()->ModelType()[11].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["potential_indicator"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -398,7 +382,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pPi = new ElectricSvgItemPI(QRect(0, 0, dX, dY)); auto pPi = new ElectricSvgItemPI(QRect(-dX*0.5, -dY*0.5, dX, dY));
pPi->setItemType(GIT_PI); pPi->setItemType(GIT_PI);
pPi->loadSvg(svg); pPi->loadSvg(svg);
item = pPi; item = pPi;
@ -414,7 +398,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[12].icon; svg = DataBase::GetInstance()->ModelType()[12].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["lightning_arrester"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -426,7 +410,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pLa = new ElectricSvgItemLA(QRect(0, 0, dX, dY)); auto pLa = new ElectricSvgItemLA(QRect(-dX*0.5, -dY*0.5, dX, dY));
pLa->setItemType(GIT_LA); pLa->setItemType(GIT_LA);
pLa->loadSvg(svg); pLa->loadSvg(svg);
item = pLa; item = pLa;
@ -442,7 +426,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[13].icon; svg = DataBase::GetInstance()->ModelType()[13].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["cable_termination"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -454,7 +438,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pCt = new ElectricSvgItemCableTer(QRect(0, 0, dX, dY)); auto pCt = new ElectricSvgItemCableTer(QRect(-dX*0.5, -dY*0.5, dX, dY));
pCt->setItemType(GIT_cableTer); pCt->setItemType(GIT_cableTer);
pCt->loadSvg(svg); pCt->loadSvg(svg);
item = pCt; item = pCt;
@ -470,7 +454,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
svg = DataBase::GetInstance()->ModelType()[14].icon; svg = DataBase::GetInstance()->ModelType()[14].icon;
} }
else{ else{
svg = model.modelSetting.mapSvg.first(); svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["cable_end"];
} }
if(width == 0 && height == 0){ if(width == 0 && height == 0){
@ -482,7 +466,7 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
dY = height; dY = height;
} }
auto pCe = new ElectricSvgItemCableEnd(QRect(0, 0, dX, dY)); auto pCe = new ElectricSvgItemCableEnd(QRect(-dX*0.5, -dY*0.5, dX, dY));
pCe->setItemType(GIT_cableEnd); pCe->setItemType(GIT_cableEnd);
pCe->loadSvg(svg); pCe->loadSvg(svg);
item = pCe; item = pCe;
@ -490,7 +474,62 @@ void FixedPortsModel::addNodeItem(QUuid id/*,int type*/,QPointF pos,double width
addPortsToItem_json(P_const,portArr,item); addPortsToItem_json(P_const,portArr,item);
} }
else if(type == GIT_2wTransformer)
{
PropertyModel model = ProjectModelManager::instance().getData()[sMeta][sProModel];
QByteArray svg;
if(model.modelSetting.mapSvg.isEmpty()){
svg = DataBase::GetInstance()->ModelType()[15].icon;
}
else{
svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["transformer_2w"];
}
if(width == 0 && height == 0){
dX = 100;
dY = 100;
}
else{
dX = width;
dY = height;
}
auto p2w = new ElectricSvgItem2wTransformer(QRect(-dX*0.5, -dY*0.5, dX, dY));
p2w->setItemType(GIT_2wTransformer);
p2w->loadSvg(svg);
item = p2w;
QJsonArray portArr = pro->context()["port"].toArray();
addPortsToItem_json(P_const,portArr,item);
}
else if(type == GIT_3wTransformer)
{
PropertyModel model = ProjectModelManager::instance().getData()[sMeta][sProModel];
QByteArray svg;
if(model.modelSetting.mapSvg.isEmpty()){
svg = DataBase::GetInstance()->ModelType()[15].icon;
}
else{
svg = ProjectModelManager::instance().getData()[sMeta][sProModel].modelSetting.mapUsedSvg["transformer_3w"];
}
if(width == 0 && height == 0){
dX = 100;
dY = 100;
}
else{
dX = width;
dY = height;
}
auto p3w = new ElectricSvgItem3wTransformer(QRect(-dX*0.5, -dY*0.5, dX, dY));
p3w->setItemType(GIT_3wTransformer);
p3w->loadSvg(svg);
item = p3w;
QJsonArray portArr = pro->context()["port"].toArray();
addPortsToItem_json(P_const,portArr,item);
}
if(item) if(item)
{ {
item->setItemId(id); item->setItemId(id);
@ -974,6 +1013,9 @@ void FixedPortsModel::onSignal_generateDiagram(const QString& sName)
for(auto& item:_baseItem){ for(auto& item:_baseItem){
BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(item->getProperty()); BaseModelProperty* pBase = dynamic_cast<BaseModelProperty*>(item->getProperty());
if(pBase){ if(pBase){
int nType = pBase->type();
if(nType == 0) //为节点等无属性对象时跳过
continue;
QString sModel = pBase->getModelProperty().modelSetting.modelName; QString sModel = pBase->getModelProperty().modelSetting.modelName;
if(sModel.isEmpty()){ if(sModel.isEmpty()){
lstInfo.append(pBase->name()); lstInfo.append(pBase->name());
@ -1023,8 +1065,8 @@ void FixedPortsModel::addPortsToItem_json(PortState sta,QJsonArray jArr,Graphics
{ {
QJsonObject portObj = portJson.toObject(); QJsonObject portObj = portJson.toObject();
QString portId = portObj["portId"].toString(); QString portId = portObj["portId"].toString();
int x = portObj["x"].toInt(); double x = portObj["x"].toDouble();
int y = portObj["y"].toInt(); double y = portObj["y"].toDouble();
if(sta == P_const){ if(sta == P_const){
HandleType tye = HandleType(portObj["portType"].toInt()); HandleType tye = HandleType(portObj["portType"].toInt());
PortPos locate = PortPos(portObj["locate"].toInt()); PortPos locate = PortPos(portObj["locate"].toInt());
@ -1151,10 +1193,15 @@ void FixedPortsModel::createTopoTerminalsByData(PowerEntity* pParent,QJsonObject
case T_lineInOut: case T_lineInOut:
terType = TerminalType::PowerConnect; terType = TerminalType::PowerConnect;
break; break;
case T_newTral:
terType = TerminalType::NewTral;
break;
default: default:
break; break;
} }
TopologyManager::instance().createTerminal(pParent->id(),terType,"",QPointF(x,y),portId,funType); auto pTer = TopologyManager::instance().createTerminal(pParent->id(),terType,"",QPointF(x,y),portId,funType);
if(pTer)
pTer->setPortLocate(locate);
} }
} }
@ -1171,6 +1218,35 @@ void FixedPortsModel::insertProjectModelName(QString uuid,QString name)
if(!_projectModelName.contains(uuid)) if(!_projectModelName.contains(uuid))
_projectModelName.insert(uuid,name); _projectModelName.insert(uuid,name);
} }
void FixedPortsModel::showProjectIconSettingDlg(GraphicsProjectModelItem* pItem)
{
if(m_projectIconSettingDlg == nullptr)
{
m_projectIconSettingDlg = new ProjectIconSetting(_widget);
m_projectIconSettingDlg->setController(this);
}
m_projectIconSettingDlg->showDlg(pItem);
}
void FixedPortsModel::updateItemIcon(QString sMeta,QString sModel)
{
for(auto &pItem:_nodeItem){
auto pro = pItem->getProperty();
QString sMe = pro->metaModelName();
QString sMo = pro->modelName();
if(sMeta == sMe && sModel == sMo){
auto pI = dynamic_cast<ElectricSvgItem*>(pItem);
auto pG = dynamic_cast<ElectricSvgGroup*>(pItem);
if(pI){
pI->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg);
}
if(pG){
pG->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg);
}
}
}
}
/*********************baseModel**********************/ /*********************baseModel**********************/
QMap<QUuid,GraphicsBaseModelItem*>& FixedPortsModel::allBaseItems() QMap<QUuid,GraphicsBaseModelItem*>& FixedPortsModel::allBaseItems()
@ -1308,6 +1384,9 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
GraphicsBaseModelItem* pBaseItem = _baseItem.value(pBase->uuid()); GraphicsBaseModelItem* pBaseItem = _baseItem.value(pBase->uuid());
pPro->setSourceItemId(pBaseItem->itemId().toString()); //设置被哪个对象生成 pPro->setSourceItemId(pBaseItem->itemId().toString()); //设置被哪个对象生成
pPro->setMetaModelName(pBase->metaModelName()); //传递基模名 pPro->setMetaModelName(pBase->metaModelName()); //传递基模名
QString sMeta = pBase->metaModelName();
QString sModel = pBase->modelName();
int type = pBase->graphicsType(); int type = pBase->graphicsType();
if(type == GIT_baseNode) if(type == GIT_baseNode)
{ {
@ -1324,8 +1403,10 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["bus"] = svg; //初始化使用的图标
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pBus = new ElectricSvgItemBus(rec.toRect()); auto pBus = new ElectricSvgItemBus(rec.toRect());
pBus->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg);
pBus->loadSvg(svg); pBus->loadSvg(svg);
pProItem = pBus; pProItem = pBus;
pProItem->setItemType(GIT_bus); pProItem->setItemType(GIT_bus);
@ -1339,8 +1420,10 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["cb"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pBreaker = new ElectricSvgItemRect(rec.toRect()); auto pBreaker = new ElectricSvgItemRect(rec.toRect());
pBreaker->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg);
pBreaker->loadSvg(svg); pBreaker->loadSvg(svg);
pProItem = pBreaker; pProItem = pBreaker;
pProItem->setItemType(GIT_itemRect); pProItem->setItemType(GIT_itemRect);
@ -1354,14 +1437,35 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["ct"] = svg;
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["zsct"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pCtGroup = new ElectricSvgGroupCT(rec.toRect()); auto pCtGroup = new ElectricSvgGroupCT(rec.toRect());
pCtGroup->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg);
pCtGroup->setGroupType(1); pCtGroup->setGroupType(1);
pCtGroup->setLayout(1); pCtGroup->setLayout(1);
pCtGroup->loadSvg(svg);
pProItem = pCtGroup; pProItem = pCtGroup;
pProItem->setItemType(GIT_ctGroup); pProItem->setItemType(GIT_ctGroup);
} }
else if(type == GIT_basePT)
{
QByteArray svg;
if(pBase->getModelProperty().modelSetting.mapSvg.isEmpty()){
svg = DataBase::GetInstance()->ModelType()[6].icon;
}
else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first();
}
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["y"] = svg;
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["z"] = svg;
QRectF rec = pBaseItem->boundingRect();
auto pPtGroup = new ElectricSvgGroupPT(rec.toRect());
pPtGroup->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg);
pPtGroup->setGroupType(1);
pPtGroup->setLayout(1);
pProItem = pPtGroup;
pProItem->setItemType(GIT_ctGroup);
}
else if(type == GIT_baseES) else if(type == GIT_baseES)
{ {
QByteArray svg; QByteArray svg;
@ -1371,8 +1475,10 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["es"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pEs = new ElectricSvgItemES(rec.toRect()); auto pEs = new ElectricSvgItemES(rec.toRect());
pEs->updateMapSvg(ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg);
pEs->loadSvg(svg); pEs->loadSvg(svg);
pProItem = pEs; pProItem = pEs;
pProItem->setItemType(GIT_ES); pProItem->setItemType(GIT_ES);
@ -1386,6 +1492,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["ds"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pDs = new ElectricSvgItemDS(rec.toRect()); auto pDs = new ElectricSvgItemDS(rec.toRect());
pDs->loadSvg(svg); pDs->loadSvg(svg);
@ -1401,6 +1508,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["fes"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pFes = new ElectricSvgItemFES(rec.toRect()); auto pFes = new ElectricSvgItemFES(rec.toRect());
pFes->loadSvg(svg); pFes->loadSvg(svg);
@ -1416,6 +1524,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["dteds"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pDteds = new ElectricSvgItemDTEDS(rec.toRect()); auto pDteds = new ElectricSvgItemDTEDS(rec.toRect());
pDteds->loadSvg(svg); pDteds->loadSvg(svg);
@ -1431,6 +1540,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["potential_indicator"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pPi = new ElectricSvgItemPI(rec.toRect()); auto pPi = new ElectricSvgItemPI(rec.toRect());
pPi->loadSvg(svg); pPi->loadSvg(svg);
@ -1446,6 +1556,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["lightning_arrester"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pLa = new ElectricSvgItemLA(rec.toRect()); auto pLa = new ElectricSvgItemLA(rec.toRect());
pLa->loadSvg(svg); pLa->loadSvg(svg);
@ -1461,6 +1572,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["cable_termination"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pCt = new ElectricSvgItemCableTer(rec.toRect()); auto pCt = new ElectricSvgItemCableTer(rec.toRect());
pCt->loadSvg(svg); pCt->loadSvg(svg);
@ -1476,6 +1588,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["cable_end"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto pCe = new ElectricSvgItemCableEnd(rec.toRect()); auto pCe = new ElectricSvgItemCableEnd(rec.toRect());
pCe->loadSvg(svg); pCe->loadSvg(svg);
@ -1491,6 +1604,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["transformer_2w"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto p2w = new ElectricSvgItem2wTransformer(rec.toRect()); auto p2w = new ElectricSvgItem2wTransformer(rec.toRect());
p2w->loadSvg(svg); p2w->loadSvg(svg);
@ -1506,6 +1620,7 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
else{ else{
svg = pBase->getModelProperty().modelSetting.mapSvg.first(); svg = pBase->getModelProperty().modelSetting.mapSvg.first();
} }
ProjectModelManager::instance().getData()[sMeta][sModel].modelSetting.mapUsedSvg["transformer_3w"] = svg;
QRectF rec = pBaseItem->boundingRect(); QRectF rec = pBaseItem->boundingRect();
auto p3w = new ElectricSvgItem3wTransformer(rec.toRect()); auto p3w = new ElectricSvgItem3wTransformer(rec.toRect());
p3w->loadSvg(svg); p3w->loadSvg(svg);
@ -1522,65 +1637,73 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
if(pBase->graphicsType() != GIT_baseLine) //非连接线对象 if(pBase->graphicsType() != GIT_baseLine) //非连接线对象
{ {
PowerEntity* pEntity = TopologyManager::instance().createEntity(EntityType::Component,pPro->uuid().toString(),pBase->name()); if(pProItem){
QList<PowerTerminal*> lstBase = TopologyManager::instance().getTerminalsForEntity(pBase->uuid().toString(),ModelFunctionType::BaseModel); //获取基模的逻辑点 PowerEntity* pEntity = TopologyManager::instance().createEntity(EntityType::Component,pPro->uuid().toString(),pBase->name());
for(auto& baseTer:lstBase) QList<PowerTerminal*> lstBase = TopologyManager::instance().getTerminalsForEntity(pBase->uuid().toString(),ModelFunctionType::BaseModel); //获取基模的逻辑点
{ for(auto& baseTer:lstBase)
QUuid uid = QUuid::createUuid();
double dPerX = baseTer->getPerX();
double dPerY = baseTer->getPerY();
PowerTerminal* proTer = TopologyManager::instance().createTerminal(pEntity->id(),baseTer->type(),"",baseTer->relativePosition(),uid.toString(),ModelFunctionType::ProjectModel,dPerX,dPerY);
proTer->setGenerateBy(baseTer->id());
if(proTer->type() == TerminalType::PowerConnect)
{ {
pProItem->addPort(p_movable,proTer->relativePosition(),proTer->id()); QUuid uid = QUuid::createUuid();
ItemPort* pPort = pProItem->getPortById(proTer->id()); double dPerX = baseTer->getPerX();
pPort->setSourcePortId(baseTer->id()); double dPerY = baseTer->getPerY();
} QPointF pRelaPos = baseTer->relativePosition();
else if(proTer->type() == TerminalType::PowerInput || proTer->type() == TerminalType::PowerOutput) PowerTerminal* proTer = TopologyManager::instance().createTerminal(pEntity->id(),baseTer->type(),"",pRelaPos,uid.toString(),ModelFunctionType::ProjectModel,dPerX,dPerY);
{ proTer->setGenerateBy(baseTer->id());
HandleType typ; if(proTer->type() == TerminalType::PowerConnect)
if(proTer->type() == TerminalType::PowerInput){
typ = T_lineIn;
}
else{
typ = T_lineOut;
}
QPointF pos = proTer->relativePosition();
PortPos locate;
if(pos.x() < 0)
{ {
locate = P_left; pProItem->addPort(p_movable,proTer->relativePosition(),proTer->id());
ItemPort* pPort = pProItem->getPortById(proTer->id());
pPort->setSourcePortId(baseTer->id());
} }
else if(pos.x() > 0) else if(proTer->type() == TerminalType::NewTral){
pProItem->addPort(P_const,proTer->relativePosition(),proTer->id(),T_newTral,PortPos(baseTer->getPortLocate()));
ItemPort* pPort = pProItem->getPortById(proTer->id());
pPort->setSourcePortId(baseTer->id());
}
else if(proTer->type() == TerminalType::PowerInput || proTer->type() == TerminalType::PowerOutput)
{ {
locate = P_right; HandleType typ;
} if(proTer->type() == TerminalType::PowerInput){
else if(pos.y() > 0) typ = T_lineIn;
{ }
locate = P_down; else{
} typ = T_lineOut;
else if(pos.y() < 0) }
{ QPointF pos = proTer->relativePosition();
locate = P_top; PortPos locate = PortPos(baseTer->getPortLocate());
} /*if(pos.x() < 0)
pProItem->addPort(P_const,pos,proTer->id(),typ,locate,dPerX,dPerY); {
locate = P_left;
}
else if(pos.x() > 0)
{
locate = P_right;
}
else if(pos.y() > 0)
{
locate = P_down;
}
else if(pos.y() < 0)
{
locate = P_top;
}*/
pProItem->addPort(P_const,pos,proTer->id(),typ,locate,dPerX,dPerY);
ItemPort* pPort = pProItem->getPortById(proTer->id()); ItemPort* pPort = pProItem->getPortById(proTer->id());
pPort->setSourcePortId(baseTer->id()); pPort->setSourcePortId(baseTer->id());
}
} }
pProItem->setItemId(QUuid(pEntity->id()));
pProItem->updateHandles();
pProItem->setPos(pBaseItem->pos());
pPanel->getScene()->addItem(pProItem);
pProItem->setProperty(pPro); //绑定模型
pProItem->updateByProperty(); //使用模型更新自身
//QString sModel = _projectModelName.value(id.toString());
//QString sModel = pBase->getModelProperty().modelSetting.modelName;
//pProItem->setModelName(sModel);
pPanel->getModelController()->addNodeItem(QUuid(pEntity->id()),pProItem);
} }
pProItem->setItemId(QUuid(pEntity->id()));
pProItem->updateHandles();
pProItem->setPos(pBaseItem->pos());
pPanel->getScene()->addItem(pProItem);
pProItem->setProperty(pPro); //绑定模型
pProItem->updateByProperty(); //使用模型更新自身
//QString sModel = _projectModelName.value(id.toString());
//QString sModel = pBase->getModelProperty().modelSetting.modelName;
//pProItem->setModelName(sModel);
pPanel->getModelController()->addNodeItem(QUuid(pEntity->id()),pProItem);
} }
else //连接线对象 else //连接线对象
{ {
@ -1675,8 +1798,11 @@ void FixedPortsModel::addProjectItemByBaseData(DrawingPanel* pPanel,GraphicsBase
pPro->setConnection(Connection(QUuid(proFromItemId),QUuid(proFromTerId),proFromType,proFromPos,QUuid(proToItemId),QUuid(proToTerId),proToType,proToPos)); pPro->setConnection(Connection(QUuid(proFromItemId),QUuid(proFromTerId),proFromType,proFromPos,QUuid(proToItemId),QUuid(proToTerId),proToType,proToPos));
} }
} }
QString sModel = pBase->getModelProperty().modelSetting.modelName; //QString sModel = pBase->getModelProperty().modelSetting.modelName;
pProItem->setModelName(sModel); if(pProItem){
pProItem->setModelName(sModel);
pProItem->setRotation(pItem->rotation());
}
} }
} }
} }

View File

@ -102,28 +102,15 @@ void ElectricSvgGroup::move(const QPointF& point)
moveBy(point.x(), point.y()); moveBy(point.x(), point.y());
} }
void ElectricSvgGroup::loadSvg(const QByteArray& data) void ElectricSvgGroup::updateMapSvg(QMap<QString,QByteArray> map)
{ {
if(_groupType == 0){ //联合 m_mapSvg = map;
}
else if(_groupType == 1){ //聚合
m_curSvg = data; //保存图片到组
for(auto pItem:m_childItems){
auto pSvg = dynamic_cast<ElectricSvgItem*>(pItem);
if(pSvg){
pSvg->loadSvg(data);
}
}
}
} }
void ElectricSvgGroup::addSvgItem(ElectricSvgItem* item) void ElectricSvgGroup::addSvgItem(ElectricSvgItem* item)
{ {
item->setParentItem(this); // 关键:设置父项 item->setParentItem(this); // 关键:设置父项
m_childItems.append(item); m_childItems.append(item);
if(!m_curSvg.isEmpty())
item->loadSvg(m_curSvg);
updateLayout(); updateLayout();
} }

View File

@ -23,10 +23,13 @@ ElectricSvgGroupCT::~ElectricSvgGroupCT()
} }
void ElectricSvgGroupCT::setupFinish(int nType,int nSize) void ElectricSvgGroupCT::setupFinish(QVariant var)
{ {
_nType = nType; if(var.canConvert<QPair<int,int>>()){
_nSize = nSize; QPair<int,int> pair = var.value<QPair<int,int>>();
_nType = pair.first;
_nSize = pair.second;
}
updateItem(); updateItem();
} }
@ -56,6 +59,7 @@ void ElectricSvgGroupCT::updateItem()
ElectricSvgItemCT* p = new ElectricSvgItemCT(rec); ElectricSvgItemCT* p = new ElectricSvgItemCT(rec);
p->setItemType(_nType); p->setItemType(_nType);
p->setMoveable(false); p->setMoveable(false);
p->loadSvg(m_mapSvg["ct"]);
addSvgItem(p); addSvgItem(p);
} }
} }
@ -63,6 +67,7 @@ void ElectricSvgGroupCT::updateItem()
ElectricSvgItemCT* p = new ElectricSvgItemCT(rec); ElectricSvgItemCT* p = new ElectricSvgItemCT(rec);
p->setItemType(_nType); p->setItemType(_nType);
p->setMoveable(false); p->setMoveable(false);
p->loadSvg(m_mapSvg["zsct"]);
addSvgItem(p); addSvgItem(p);
} }
updateTerPos(); updateTerPos();

View File

@ -0,0 +1,140 @@
#include "graphicsItem/electricSvgGroupPT.h"
#include "graphicsItem/electricSvgItemPT.h"
#include "global.h"
#include <QPainter>
#include <QStyleOption>
#include <QGraphicsScene>
#include <QGraphicsView>
ElectricSvgGroupPT::ElectricSvgGroupPT(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgGroup(rect,parent)
{
setHandleIfShow(H_textCaption,false);
setHandleVisible(false);
setFunctionHandleIfShow(false);
setFunctionHandleEnaable(false);
}
ElectricSvgGroupPT::~ElectricSvgGroupPT()
{
}
void ElectricSvgGroupPT::setupFinish(QVariant var)
{
if(var.canConvert<QList<int>>()){
QList<int> lst = var.value<QList<int>>();
m_lstType = lst;
}
updateItem();
}
void ElectricSvgGroupPT::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
ElectricSvgGroup::paint(painter,option,widget);
if(m_childItems.isEmpty()){ //无对象时绘制提示框
QPen pen(Qt::lightGray);
pen.setStyle(Qt::DotLine);
painter->setPen(pen);
painter->drawRect(m_boundingRect);
}
}
void ElectricSvgGroupPT::updateItem()
{
for(auto pItem:m_childItems){
delete pItem;
}
m_childItems.clear();
QRect rec(0,0,30,30);
for(int i = 0;i < m_lstType.size();++i){
ElectricSvgItemPT* p = new ElectricSvgItemPT(rec);
if(m_lstType[i] == 1){
p->loadSvg(m_mapSvg["y"]);
p->setItemType(1);
}
else{
p->loadSvg(m_mapSvg["z"]);
p->setItemType(0);
}
p->setMoveable(false);
addSvgItem(p);
}
updateTerPos();
}
void ElectricSvgGroupPT::updateLayout()
{
if (m_childItems.isEmpty()) return;
// 获取所有子项
//QList<QGraphicsItem*> children = childItems();
int n = m_childItems.size();
if (n == 0) return;
// 中心点
QPointF center(0, 0); // 假设以当前item的坐标系中心为布局中心
// 圆的半径(假设所有子项大小相同)
qreal radius = m_childItems.first()->boundingRect().width()*0.5; // 根据需要调整
// 布局半径(子项中心到布局中心的距离)
qreal layoutRadius = radius * 1; // 根据需要调整
switch(n) {
case 1:
// 单个子项放在中心
m_childItems[0]->setPos(center);
break;
case 2:
// 两个子项上下排列
m_childItems[0]->setPos(center.x(), center.y() - layoutRadius);
m_childItems[1]->setPos(center.x(), center.y() + layoutRadius);
break;
case 3:
// 三个子项三角形排列
for (int i = 0; i < 3; ++i) {
qreal angle = 2 * M_PI * i / 3 - M_PI / 2; // 从顶部开始
m_childItems[i]->setPos(center.x() + layoutRadius * cos(angle),
center.y() + layoutRadius * sin(angle));
}
break;
case 4:
// 四个子项正方形排列
for (int i = 0; i < 4; ++i) {
qreal angle = 2 * M_PI * i / 4 - M_PI / 4; // 从右上角开始
m_childItems[i]->setPos(center.x() + layoutRadius * cos(angle),
center.y() + layoutRadius * sin(angle));
}
break;
case 5:
// 五个子项五角星排列
for (int i = 0; i < 5; ++i) {
qreal angle = 2 * M_PI * i / 5 - M_PI / 2; // 从顶部开始
m_childItems[i]->setPos(center.x() + layoutRadius * cos(angle),
center.y() + layoutRadius * sin(angle));
}
break;
default:
// 对于多于5个的情况使用圆形排列
for (int i = 0; i < n; ++i) {
qreal angle = 2 * M_PI * i / n;
m_childItems[i]->setPos(center.x() + layoutRadius * cos(angle),
center.y() + layoutRadius * sin(angle));
}
break;
}
updateBoundRect();
}

View File

@ -113,9 +113,14 @@ void ElectricSvgItem::move(const QPointF& point)
moveBy(point.x(), point.y()); moveBy(point.x(), point.y());
} }
void ElectricSvgItem::loadSvg(const QByteArray& data) void ElectricSvgItem::loadSvg(QByteArray b)
{ {
m_pRender = new QSvgRenderer(data); m_pRender = new QSvgRenderer(b);
}
void ElectricSvgItem::updateMapSvg(QMap<QString,QByteArray> map)
{
m_mapSvg = map;
} }
void ElectricSvgItem::editShape(int nHandle,const QPointF& ptMouse) void ElectricSvgItem::editShape(int nHandle,const QPointF& ptMouse)

View File

@ -3,6 +3,7 @@
#include "graphicsItem/itemPort.h" #include "graphicsItem/itemPort.h"
#include "graphicsItem/electricConnectLineItem.h" #include "graphicsItem/electricConnectLineItem.h"
#include <QSvgRenderer>
#include <QPainter> #include <QPainter>
#include <QStyleOption> #include <QStyleOption>
#include <QJsonArray> #include <QJsonArray>

View File

@ -0,0 +1,30 @@
#include "graphicsItem/electricSvgItemPT.h"
#include "global.h"
#include <QSvgRenderer>
#include <QPainter>
#include <QStyleOption>
#include <QGraphicsScene>
#include <QGraphicsView>
ElectricSvgItemPT::ElectricSvgItemPT(const QRect &rect, QGraphicsItem *parent)
: ElectricSvgItem(rect,parent)
{
setFlag(QGraphicsItem::ItemIsSelectable, false);
setFlag(QGraphicsItem::ItemIsFocusable, false);
setAcceptedMouseButtons(Qt::NoButton);
}
ElectricSvgItemPT::~ElectricSvgItemPT()
{
}
void ElectricSvgItemPT::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
if (!m_pRender || !m_pRender->isValid())
return;
m_pRender->render(painter, m_boundingRect);
}

View File

@ -2,6 +2,7 @@
#include "graphicsItem/itemPort.h" #include "graphicsItem/itemPort.h"
#include "global.h" #include "global.h"
#include <QSvgRenderer>
#include <QPainter> #include <QPainter>
#include <QStyleOption> #include <QStyleOption>
#include <QGraphicsScene> #include <QGraphicsScene>
@ -32,7 +33,6 @@ ElectricSvgItemRect::~ElectricSvgItemRect()
} }
void ElectricSvgItemRect::updateHandles() void ElectricSvgItemRect::updateHandles()
{ {
ElectricSvgItem::updateHandles(); ElectricSvgItem::updateHandles();

View File

@ -23,7 +23,7 @@ ItemPropertyDlg::ItemPropertyDlg(QWidget *parent)
,_curModelController(nullptr) ,_curModelController(nullptr)
{ {
ui->setupUi(this); ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); this->setWindowFlags(Qt::FramelessWindowHint |Qt::WindowStaysOnTopHint | windowFlags());
initial(); initial();
} }
@ -88,8 +88,7 @@ void ItemPropertyDlg::onOkClicked()
if(!mapPro.empty()) if(!mapPro.empty())
DataManager::instance().updateModelData(_curModel,curUuid_,iter.key(),mapPro); DataManager::instance().updateModelData(_curModel,curUuid_,iter.key(),mapPro);
if(nType == 4 && iter.key() == "base_extend"){ //ct
if(nType == 4){ //ct
int nCtSize = 0; //ct设置的个数 int nCtSize = 0; //ct设置的个数
int nCtType = 0; //ct类型 1三相0零相 int nCtType = 0; //ct类型 1三相0零相
if(mapPro.contains("ct_winding")){ if(mapPro.contains("ct_winding")){
@ -105,11 +104,34 @@ void ItemPropertyDlg::onOkClicked()
nCtType = val.defaultValue.toInt(); nCtType = val.defaultValue.toInt();
} }
if(_curItem){ QPair<int,int> pair(nCtType,nCtSize);
_curItem->setupFinish(nCtType,nCtSize); QVariant var = QVariant::fromValue(pair);
_curItem->setupFinish(var);
}
else if(nType == 5 && iter.key() == "base_extend"){ //pt
QList<int> lst; //二次绕组接法
if(mapPro.contains("pt_sec_winding")){
propertyStateInfo val = mapPro.value("pt_sec_winding");
QJsonObject obj = val.defaultValue.toJsonObject();
QJsonArray arr = obj["winding"].toArray();
for (QJsonValueRef jsonObj : arr)
{
QJsonObject node = jsonObj.toObject();
QString sWinding = node["windingConnectionMethod"].toString();
if(sWinding == "Y"){
lst.append(1);
}
else{
lst.append(0);
}
}
QVariant var = QVariant::fromValue(lst);
_curItem->setupFinish(var);
} }
} }
} }
_curItem = nullptr;
hide(); hide();
} }
@ -152,7 +174,9 @@ void ItemPropertyDlg::createGroupView(const QString& str)
BaseContentDlg* contentDlg = nullptr; BaseContentDlg* contentDlg = nullptr;
BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_); BaseProperty* pPro = BasePropertyManager::instance().findEntityData(curUuid_);
if(str == QString("component") || str == QString::fromWCharArray(L"基本信息")){ if(str == QString("component") || str == QString::fromWCharArray(L"基本信息")){
contentDlg = new BaseInfoDlg(ui->stackedWidget); auto pDlg = new BaseInfoDlg(ui->stackedWidget);
pDlg->setParentDlg(this);
contentDlg = pDlg;
} }
else if(str == "base_extend" || str == QString::fromWCharArray(L"扩展信息")){ else if(str == "base_extend" || str == QString::fromWCharArray(L"扩展信息")){
if(pPro->type() == 4) if(pPro->type() == 4)

View File

@ -0,0 +1,54 @@
#include "projectIconSelectionDlg.h"
#include <QSvgRenderer>
#include <QPainter>
#include <QPixmap>
ProjectIconSelectionDlg::ProjectIconSelectionDlg(const QMap<QString,QByteArray> mapSvg,QWidget* parent)
: QDialog(parent),svgMap(mapSvg)
{
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint| windowFlags());
setWindowTitle("选择SVG图标");
resize(400, 300);
QVBoxLayout* layout = new QVBoxLayout(this);
listWidget = new QListWidget(this);
listWidget->setIconSize(QSize(32, 32));
listWidget->setViewMode(QListWidget::IconMode);
listWidget->setResizeMode(QListWidget::Adjust);
listWidget->setStyleSheet(
"QListWidget::item:selected {"
" background: #4e72b8;"
" color: palette(HighlightedText);"
"}"
);
for (auto& svgData : svgMap) {
QSvgRenderer renderer(svgData);
QPixmap pixmap(32, 32);
pixmap.fill(Qt::white);
QPainter painter(&pixmap);
renderer.render(&painter);
QListWidgetItem* item = new QListWidgetItem(QIcon(pixmap), "");
item->setData(Qt::UserRole, svgData);
listWidget->addItem(item);
}
QDialogButtonBox* buttonBox = new QDialogButtonBox(
QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
layout->addWidget(listWidget);
layout->addWidget(buttonBox);
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
}
QByteArray ProjectIconSelectionDlg::selectedSVG() const {
if (listWidget->currentItem()) {
return listWidget->currentItem()->data(Qt::UserRole).toByteArray();
}
return QByteArray();
}

View File

@ -0,0 +1,139 @@
#include "projectIconSetting.h"
#include "ui_projectIconSetting.h"
#include "graphicsDataModel/fixedPortsModel.h"
#include "projectIconSelectionDlg.h"
#include "graphicsItem/graphicsBaseItem.h"
#include "baseProperty.h"
#include "projectModelManager.h"
#include <QSvgRenderer>
#include <QPainter>
ProjectIconSetting::ProjectIconSetting(QWidget *parent)
: QDialog(parent)
, ui(new Ui::projectIconSetting)
,_controller(nullptr)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | windowFlags());
initial();
}
ProjectIconSetting::~ProjectIconSetting()
{
delete ui;
}
void ProjectIconSetting::showDlg(GraphicsProjectModelItem* pItem)
{
ui->tableWidget->clear();
ui->tableWidget->setRowCount(0);
show();
ModelProperty* p = pItem->getProperty();
BaseProperty* pro = dynamic_cast<BaseProperty*>(p);
if(pro)
{
QString sName = pro->name();
QString sMetaModel = pro->metaModelName();
QString sModel = pro->modelName();
_sMetaModel = sMetaModel;
_sModel = sModel;
bool bExist = ProjectModelManager::instance().ifProjectExsit(sModel);
if(bExist){
auto mapUsed = ProjectModelManager::instance().getData()[sMetaModel][sModel].modelSetting.mapUsedSvg;
addItems(mapUsed);
}
}
}
void ProjectIconSetting::initial()
{
QStringList headerText;
headerText<<"类别"<<"图标";
ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
ui->tableWidget->setColumnCount(headerText.count());
ui->tableWidget->setHorizontalHeaderLabels(headerText);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
connect(ui->tableWidget, &QTableWidget::cellClicked, this, &ProjectIconSetting::onCellClicked);
connect(ui->btn_ok,&QPushButton::clicked,this,&ProjectIconSetting::onOkClicked);
_iconSize = QSize(32,32);
}
void ProjectIconSetting::addItems(QMap<QString,QByteArray> mapSvg)
{
for(auto iter = mapSvg.begin();iter != mapSvg.end();++iter){
int row = ui->tableWidget->rowCount();
ui->tableWidget->insertRow(row);
QTableWidgetItem* tagItem = new QTableWidgetItem(iter.key());
ui->tableWidget->setItem(row, 0, tagItem);
QTableWidgetItem* iconItem = new QTableWidgetItem();
ui->tableWidget->setItem(row, 1, iconItem);
QByteArray arr = iter.value();
iconItem->setData(Qt::UserRole, arr);
if(!arr.isEmpty()){
QSvgRenderer renderer(arr);
// 创建目标大小的pixmap
QPixmap pixmap(_iconSize);
//pixmap.fill(Qt::transparent); // 透明背景
// 创建画家并在pixmap上绘制SVG
QPainter painter(&pixmap);
renderer.render(&painter, pixmap.rect());
iconItem->setIcon(pixmap);
}
}
}
void ProjectIconSetting::selectImage(int row)
{
if(!_sMetaModel.isEmpty() && !_sModel.isEmpty()){
auto mapAllSvg = ProjectModelManager::instance().getData()[_sMetaModel][_sModel].modelSetting.mapSvg;
ProjectIconSelectionDlg dialog(mapAllSvg, this);
if (dialog.exec() == QDialog::Accepted) {
QByteArray selectedSVG = dialog.selectedSVG();
if (!selectedSVG.isEmpty()) {
QSvgRenderer renderer(selectedSVG);
QPixmap pixmap(32, 32);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
renderer.render(&painter);
ui->tableWidget->item(row, 1)->setIcon(QIcon(pixmap));
// 如果需要保存原始SVG数据可以这样
ui->tableWidget->item(row, 1)->setData(Qt::UserRole, selectedSVG);
}
}
}
}
void ProjectIconSetting::onOkClicked()
{
QMap<QString,QByteArray> mapUsedSvg;
for (int row = 0; row < ui->tableWidget->rowCount(); ++row) {
QTableWidgetItem *itemTag = ui->tableWidget->item(row, 0);
if (itemTag) {
QTableWidgetItem *itemSvg = ui->tableWidget->item(row, 1);
if(itemSvg){
QByteArray svg = itemSvg->data(Qt::UserRole).toByteArray();
mapUsedSvg.insert(itemTag->text(),svg);
}
}
}
ProjectModelManager::instance().getData()[_sMetaModel][_sModel].modelSetting.mapUsedSvg = mapUsedSvg;
_controller->updateItemIcon(_sMetaModel,_sModel);
hide();
}
void ProjectIconSetting::onCellClicked(int row,int col)
{
if (col == 1) { // 如果是按钮列
selectImage(row);
}
}

View File

@ -50,6 +50,12 @@ void ProjectModelSetting::initial()
/*QRegularExpression regExp("[a-zA-Z0-9]+"); /*QRegularExpression regExp("[a-zA-Z0-9]+");
QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this); QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this);
ui->le_saveAs->setValidator(validator);*/ ui->le_saveAs->setValidator(validator);*/
ui->listWidget_icon->setStyleSheet(
"QListWidget::item:selected {"
" background: #4e72b8;"
" color: palette(HighlightedText);"
"}"
);
} }
void ProjectModelSetting::loadPicture() void ProjectModelSetting::loadPicture()
@ -65,7 +71,9 @@ void ProjectModelSetting::loadPicture()
for(int i=0;i<files.size();i++) for(int i=0;i<files.size();i++)
{ {
QString sPath = path+files.at(i); QString sPath = path+files.at(i);
QListWidgetItem *newitem=new QListWidgetItem(QIcon(QPixmap(sPath).scaled(100, 100)),files.at(i)); QPixmap pixmap(sPath);
pixmap.fill(Qt::transparent);
QListWidgetItem *newitem=new QListWidgetItem(QIcon(pixmap.scaled(100, 100)),files.at(i));
QFile file(sPath); QFile file(sPath);
if (!file.open(QIODevice::ReadOnly)) { if (!file.open(QIODevice::ReadOnly)) {
LOG_WARN("File", QString("%1 svgfile open failed").arg(sPath)); LOG_WARN("File", QString("%1 svgfile open failed").arg(sPath));
@ -84,16 +92,24 @@ void ProjectModelSetting::loadPicture()
void ProjectModelSetting::setSelectedItems(QStringList lst) void ProjectModelSetting::setSelectedItems(QStringList lst)
{ {
QList<QListWidgetItem*> lstItem = ui->listWidget_icon->findItems(lst.first(),Qt::MatchExactly); /*QList<QListWidgetItem*> lstItem = ui->listWidget_icon->findItems(lst.first(),Qt::MatchExactly);
if(!lstItem.empty()) if(!lstItem.empty())
{ {
ui->listWidget_icon->setCurrentItem(lstItem.first()); ui->listWidget_icon->setCurrentItem(lstItem.first());
}*/
foreach(const QString &name, lst) {
QList<QListWidgetItem*> items = ui->listWidget_icon->findItems(name, Qt::MatchExactly);
foreach(QListWidgetItem* item, items) {
item->setSelected(true);
}
} }
} }
void ProjectModelSetting::showDlg(GraphicsBaseModelItem* srcNode) void ProjectModelSetting::showDlg(GraphicsBaseModelItem* srcNode)
{ {
show(); show();
ui->label_infoIcon->clear();
ui->treeView_base->setModel(nullptr); ui->treeView_base->setModel(nullptr);
ui->treeView_sub->setModel(nullptr); ui->treeView_sub->setModel(nullptr);
ModelProperty* p = srcNode->getProperty(); ModelProperty* p = srcNode->getProperty();
@ -181,14 +197,19 @@ void ProjectModelSetting::onCancelClicked()
void ProjectModelSetting::onSelectClicked() void ProjectModelSetting::onSelectClicked()
{ {
QList<QListWidgetItem*> items = ui->listWidget_icon->selectedItems(); QList<QListWidgetItem*> items = ui->listWidget_icon->selectedItems();
QStringList lst;
for(auto& item:items) for(auto& item:items)
{ {
if(!_curItemData->getModelProperty().modelSetting.mapSvg.contains(item->text())) if(!_curItemData->getModelProperty().modelSetting.mapSvg.contains(item->text()))
{ {
QByteArray data = item->data(Qt::UserRole + 1).toByteArray(); QByteArray data = item->data(Qt::UserRole + 1).toByteArray();
_curItemData->getModelProperty().modelSetting.mapSvg.insert(item->text(),data); _curItemData->getModelProperty().modelSetting.mapSvg.insert(item->text(),data);
ui->label_infoIcon->setText("当前选择:"+item->text());
} }
lst.append(item->text());
}
if(!lst.isEmpty()){
ui->label_infoIcon->setText("当前选择:"+lst.join(","));
} }
} }
@ -337,10 +358,10 @@ void ProjectModelSetting::onSaveClicked()
if(pro){ if(pro){
if(pro->metaModelName() == _curItemData->metaModelName()){ //将相同基模item的工程模名称都置为相同(改一个全变) if(pro->metaModelName() == _curItemData->metaModelName()){ //将相同基模item的工程模名称都置为相同(改一个全变)
pro->setModelName(sModel); pro->setModelName(sModel);
pro->getModelProperty().modelSetting.modelName = sModel;
} }
} }
} }
//_controller->getScene()->update();
} }
} }
} }

View File

@ -37,19 +37,10 @@
<property name="verticalSpacing"> <property name="verticalSpacing">
<number>10</number> <number>10</number>
</property> </property>
<item row="0" column="0" colspan="11"> <item row="6" column="10">
<widget class="QLabel" name="label_title"> <widget class="QLineEdit" name="le_idx_2">
<property name="maximumSize"> <property name="readOnly">
<size> <bool>false</bool>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">border:4px double dark;</string>
</property>
<property name="text">
<string/>
</property> </property>
</widget> </widget>
</item> </item>
@ -60,149 +51,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1" colspan="6">
<widget class="QLineEdit" name="le_uuid">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="7" rowspan="2" colspan="4">
<widget class="QWidget" name="widget" native="true">
<property name="styleSheet">
<string notr="true">border:2px dashed black;
border-radius:5px;</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>TAG</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="2">
<widget class="QLineEdit" name="le_tag">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>命名空间</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="6">
<widget class="QLineEdit" name="le_nameSpace">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="7">
<widget class="QLabel" name="label_4">
<property name="text">
<string>名称</string>
</property>
</widget>
</item>
<item row="3" column="8" colspan="3">
<widget class="QLineEdit" name="le_name">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>标签</string>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QLineEdit" name="le_label">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QLabel" name="label_6">
<property name="text">
<string>注释</string>
</property>
</widget>
</item>
<item row="4" column="4" colspan="7">
<widget class="QLineEdit" name="le_description">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>电网</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QComboBox" name="cb_grid"/>
</item>
<item row="5" column="3">
<widget class="QLabel" name="label_8">
<property name="text">
<string>区域</string>
</property>
</widget>
</item>
<item row="5" column="4" colspan="3">
<widget class="QComboBox" name="cb_zone"/>
</item>
<item row="5" column="7">
<widget class="QLabel" name="label_9">
<property name="text">
<string>子站</string>
</property>
</widget>
</item>
<item row="5" column="8" colspan="3">
<widget class="QComboBox" name="cb_station"/>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>间隔名称</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="6">
<widget class="QLineEdit" name="le_bayName">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="6" column="7">
<widget class="QLabel" name="label_11">
<property name="text">
<string>序号</string>
</property>
</widget>
</item>
<item row="6" column="8">
<widget class="QLineEdit" name="le_idx_1">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="6" column="9"> <item row="6" column="9">
<widget class="QLabel" name="label_12"> <widget class="QLabel" name="label_12">
<property name="maximumSize"> <property name="maximumSize">
@ -219,17 +67,115 @@ border-radius:5px;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="10"> <item row="1" column="1" colspan="6">
<widget class="QLineEdit" name="le_idx_2"> <widget class="QLineEdit" name="le_uuid">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>标签</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>间隔名称</string>
</property>
</widget>
</item>
<item row="6" column="8">
<widget class="QLineEdit" name="le_idx_1">
<property name="readOnly"> <property name="readOnly">
<bool>false</bool> <bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0"> <item row="8" column="2" colspan="2">
<widget class="QLabel" name="label_13"> <widget class="QRadioButton" name="rb_outService">
<property name="text"> <property name="text">
<string>联结 从</string> <string>OUT 服役外</string>
</property>
</widget>
</item>
<item row="5" column="4" colspan="3">
<widget class="QComboBox" name="cb_zone"/>
</item>
<item row="5" column="3">
<widget class="QLabel" name="label_8">
<property name="text">
<string>区域</string>
</property>
</widget>
</item>
<item row="6" column="7">
<widget class="QLabel" name="label_11">
<property name="text">
<string>序号</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="6">
<widget class="QLineEdit" name="le_nameSpace">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="7" rowspan="2" colspan="4">
<widget class="QWidget" name="widget" native="true">
<property name="styleSheet">
<string notr="true">border:2px dashed black;
border-radius:5px;</string>
</property>
</widget>
</item>
<item row="3" column="7">
<widget class="QLabel" name="label_4">
<property name="text">
<string>名称</string>
</property>
</widget>
</item>
<item row="5" column="8" colspan="3">
<widget class="QComboBox" name="cb_station"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>电网</string>
</property>
</widget>
</item>
<item row="6" column="1" colspan="6">
<widget class="QLineEdit" name="le_bayName">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="1" colspan="2">
<widget class="QLineEdit" name="le_label">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>服役状态</string>
</property>
</widget>
</item>
<item row="8" column="7">
<widget class="QLabel" name="label_16">
<property name="text">
<string>状态</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -240,6 +186,13 @@ border-radius:5px;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="4" colspan="7">
<widget class="QLineEdit" name="le_description">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="7" column="5"> <item row="7" column="5">
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_14">
<property name="sizePolicy"> <property name="sizePolicy">
@ -262,38 +215,17 @@ border-radius:5px;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="6" colspan="5"> <item row="2" column="1" colspan="2">
<widget class="QLineEdit" name="le_to"> <widget class="QLineEdit" name="le_tag">
<property name="readOnly"> <property name="readOnly">
<bool>false</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0"> <item row="5" column="7">
<widget class="QLabel" name="label_15"> <widget class="QLabel" name="label_9">
<property name="text"> <property name="text">
<string>服役状态</string> <string>子站</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QRadioButton" name="rb_inService">
<property name="text">
<string>IN 服役中</string>
</property>
</widget>
</item>
<item row="8" column="2" colspan="2">
<widget class="QRadioButton" name="rb_outService">
<property name="text">
<string>OUT 服役外</string>
</property>
</widget>
</item>
<item row="8" column="7">
<widget class="QLabel" name="label_16">
<property name="text">
<string>状态</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -304,8 +236,83 @@ border-radius:5px;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="9" column="1" colspan="10"> <item row="4" column="3">
<widget class="QPushButton" name="pushButton"> <widget class="QLabel" name="label_6">
<property name="text">
<string>注释</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>TAG</string>
</property>
</widget>
</item>
<item row="10" column="1" colspan="10">
<widget class="QWidget" name="widget_runTime" native="true">
<property name="styleSheet">
<string notr="true">border:1px dashed black;</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>命名空间</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>联结 从</string>
</property>
</widget>
</item>
<item row="7" column="6" colspan="5">
<widget class="QLineEdit" name="le_to">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="1" colspan="2">
<widget class="QComboBox" name="cb_grid"/>
</item>
<item row="8" column="1">
<widget class="QRadioButton" name="rb_inService">
<property name="text">
<string>IN 服役中</string>
</property>
</widget>
</item>
<item row="3" column="8" colspan="3">
<widget class="QLineEdit" name="le_name">
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="0" colspan="11">
<widget class="QLabel" name="label_title">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">border:4px double dark;</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="9" column="1" colspan="4">
<widget class="QPushButton" name="btn_equip">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
@ -325,10 +332,24 @@ border-radius:5px;</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="1" colspan="10"> <item row="9" column="6" colspan="5">
<widget class="QWidget" name="widget_runTime" native="true"> <widget class="QPushButton" name="btn_icon">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">border:1px dashed black;</string> <string notr="true"/>
</property>
<property name="text">
<string>图标库</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -0,0 +1,139 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>projectIconSetting</class>
<widget class="QDialog" name="projectIconSetting">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>441</width>
<height>324</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>21</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>21</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(180, 180, 180);</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(0, 0, 0);</string>
</property>
<property name="text">
<string>工程模图标设置</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTableWidget" name="tableWidget"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btn_ok">
<property name="text">
<string>确定</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -266,6 +266,9 @@ color: rgb(8, 8, 8);</string>
<property name="dragDropMode"> <property name="dragDropMode">
<enum>QAbstractItemView::DragDropMode::DragDrop</enum> <enum>QAbstractItemView::DragDropMode::DragDrop</enum>
</property> </property>
<property name="selectionMode">
<enum>QAbstractItemView::SelectionMode::ExtendedSelection</enum>
</property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
<width>100</width> <width>100</width>

View File

@ -270,7 +270,9 @@ void ProjectModelManager::updateSetting(const QString& sMeta,const QString& sPro
{ {
QJsonObject object; QJsonObject object;
QJsonArray arr; QJsonArray arr;
QJsonArray arrUsed;
QMap<QString,QByteArray> mapSvg = m_mapTotalData[sMeta][sProject].modelSetting.mapSvg; QMap<QString,QByteArray> mapSvg = m_mapTotalData[sMeta][sProject].modelSetting.mapSvg;
QMap<QString,QByteArray> mapUsedSvg = m_mapTotalData[sMeta][sProject].modelSetting.mapUsedSvg;
for(auto iter = mapSvg.begin();iter != mapSvg.end();++iter) for(auto iter = mapSvg.begin();iter != mapSvg.end();++iter)
{ {
@ -281,6 +283,15 @@ void ProjectModelManager::updateSetting(const QString& sMeta,const QString& sPro
} }
object["picture"] = arr; object["picture"] = arr;
for(auto iter = mapUsedSvg.begin();iter != mapUsedSvg.end();++iter)
{
QJsonObject obj;
obj["name"] = iter.key();
obj["data"] = QString::fromUtf8(iter.value());
arrUsed.push_back(obj);
}
object["usingPicture"] = arrUsed;
QJsonObject jsVal = DataBase::GetInstance()->getProjectSetting(sMeta,sProject); QJsonObject jsVal = DataBase::GetInstance()->getProjectSetting(sMeta,sProject);
if(jsVal.empty()){ if(jsVal.empty()){
DataBase::GetInstance()->insertProjectSetting(sMeta,sProject,object); DataBase::GetInstance()->insertProjectSetting(sMeta,sProject,object);
@ -823,5 +834,14 @@ projectModelSetting ProjectModelManager::getModelSetting(const QString& sMeta,co
QByteArray bData = QByteArray::fromHex(node["data"].toString().toUtf8()); QByteArray bData = QByteArray::fromHex(node["data"].toString().toUtf8());
setting.mapSvg.insert(sName,bData); setting.mapSvg.insert(sName,bData);
} }
QJsonArray arrUsed = obj["usingPicture"].toArray();
for (QJsonValueRef jsonObj : arrUsed)
{
QJsonObject node = jsonObj.toObject();
QString sName = node["name"].toString();
QByteArray bData = QByteArray::fromHex(node["data"].toString().toUtf8());
setting.mapUsedSvg.insert(sName,bData);
}
return setting; return setting;
} }