add draw bus/bay/tranformer editor blocks
This commit is contained in:
parent
064c73af08
commit
729492a5a6
|
|
@ -17,6 +17,8 @@ const double g_dGriaphicsScene_Height = 600;
|
||||||
const int g_dEditorItem_Width = 150;
|
const int g_dEditorItem_Width = 150;
|
||||||
const int g_dEditorItem_Height = 80;
|
const int g_dEditorItem_Height = 80;
|
||||||
|
|
||||||
|
const int g_nEditorBus_Height = 10;
|
||||||
|
|
||||||
//Q_NAMESPACE
|
//Q_NAMESPACE
|
||||||
enum GraphicsItemType
|
enum GraphicsItemType
|
||||||
{
|
{
|
||||||
|
|
@ -415,7 +417,8 @@ enum class EditorItemType //组态编辑中的图形项类型
|
||||||
{
|
{
|
||||||
bus = 0, //母线
|
bus = 0, //母线
|
||||||
bay, //间隔
|
bay, //间隔
|
||||||
Trans //变压器
|
Trans, //变压器
|
||||||
|
none //空白占位图
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DiagramEditorWizardTransformerInfo //组态变压器信息
|
struct DiagramEditorWizardTransformerInfo //组态变压器信息
|
||||||
|
|
@ -442,11 +445,12 @@ enum class DiagramEditorStructType
|
||||||
struct DiagramEditorConnectType //组态编辑连接信息
|
struct DiagramEditorConnectType //组态编辑连接信息
|
||||||
{
|
{
|
||||||
QString sName;
|
QString sName;
|
||||||
int nType = 0; //1母线,2间隔
|
int nType = 0; //1母线,2间隔,3变压器
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DiagramEditorBriefConnect //组态编辑时连接信息
|
struct DiagramEditorBriefConnect //组态编辑时连接信息
|
||||||
{
|
{
|
||||||
|
QUuid uid;
|
||||||
DiagramEditorConnectType con1;
|
DiagramEditorConnectType con1;
|
||||||
DiagramEditorConnectType con2;
|
DiagramEditorConnectType con2;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,18 +17,19 @@ public:
|
||||||
virtual QString getName() {return sName;}
|
virtual QString getName() {return sName;}
|
||||||
virtual void setType(int n) {nType = n;}
|
virtual void setType(int n) {nType = n;}
|
||||||
virtual int getType() {return nType;}
|
virtual int getType() {return nType;}
|
||||||
virtual void addConnect(const QString&,int nType,bool bCover = false); //与目标建立连接
|
virtual void addConnect(QUuid); //直接添加连接
|
||||||
virtual void addConnect(DiagramEditorBriefConnect); //直接添加连接
|
virtual void removeConnect(QUuid);
|
||||||
virtual void removeConnect(const QString&);
|
virtual QList<QUuid> getConnect() {return _lstCon;}
|
||||||
virtual void removeConnect(DiagramEditorBriefConnect);
|
virtual void clearConnect() {_lstCon.clear();}
|
||||||
virtual QList<DiagramEditorBriefConnect> getConnect() {return lstCon;}
|
|
||||||
virtual void clearConnect() {lstCon.clear();}
|
|
||||||
virtual void setCurContainer(DiagramEditorStructContainer* p) {_curContainer = p;}
|
virtual void setCurContainer(DiagramEditorStructContainer* p) {_curContainer = p;}
|
||||||
virtual DiagramEditorStructContainer* getCurContainer() {return _curContainer;}
|
virtual DiagramEditorStructContainer* getCurContainer() {return _curContainer;}
|
||||||
|
virtual void setContainerLevel(int n) {nContainerLevel = n;}
|
||||||
|
virtual int getContainerLevel() {return nContainerLevel;}
|
||||||
protected:
|
protected:
|
||||||
QString sName;
|
QString sName;
|
||||||
int nType; //1母线,2间隔,3变压器
|
int nType; //1母线,2间隔,3变压器
|
||||||
QList<DiagramEditorBriefConnect> lstCon; //连接信息
|
int nContainerLevel; //所处容器的层级 0,1,2,3
|
||||||
|
QList<QUuid> _lstCon; //连接信息
|
||||||
DiagramEditorStructContainer* _curContainer; //当前所处的容器
|
DiagramEditorStructContainer* _curContainer; //当前所处的容器
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,10 @@ public:
|
||||||
public:
|
public:
|
||||||
bool insertBlock(int,DiagramEditorBaseBlock*);
|
bool insertBlock(int,DiagramEditorBaseBlock*);
|
||||||
auto& getBlockMap() {return _mapBlocks;}
|
auto& getBlockMap() {return _mapBlocks;}
|
||||||
|
void setId(const QString& s) {sId = s;}
|
||||||
|
QString getId() {return sId;}
|
||||||
private:
|
private:
|
||||||
|
QString sId;
|
||||||
QMap<int,QList<DiagramEditorBaseBlock*>> _mapBlocks; //容器中包含的对象列表,<pos,listBlocks> pos当前容器中的位置:0上,1中上,2中下,3下
|
QMap<int,QList<DiagramEditorBaseBlock*>> _mapBlocks; //容器中包含的对象列表,<pos,listBlocks> pos当前容器中的位置:0上,1中上,2中下,3下
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,14 +46,20 @@ public slots:
|
||||||
void onBayListSelected(QListWidgetItem* pItem); //baylist选择事件
|
void onBayListSelected(QListWidgetItem* pItem); //baylist选择事件
|
||||||
public:
|
public:
|
||||||
QMap<int,DiagramEditorWizardBusInfo> getMapBusInfo() {return _mapBus;}
|
QMap<int,DiagramEditorWizardBusInfo> getMapBusInfo() {return _mapBus;}
|
||||||
QMap<int,QMap<int,DiagramEditorStructContainer*>> getCointainerStruct(){return _mapSturctContainer;}
|
QMap<int,QList<DiagramEditorStructContainer*>>& getContainerStruct(){return _mapSturctContainer;}
|
||||||
QList<DiagramEditorBaseBlock*> getTargetLevelBlocks(int nLevel,int nType); //返回指定层数的对应block,type:1母线,2间隔,3变压器
|
QList<DiagramEditorBaseBlock*> getTargetLevelBlocks(int nLevel,int nType); //返回指定层数的对应block,type:1母线,2间隔,3变压器
|
||||||
DiagramEditorStructContainer* getContainerByBlock(int nLevel,int nType,QString sName); //根据block名称返回container
|
QList<DiagramEditorBaseBlock*> getTargetLevelBlocks_all(int nLevel);
|
||||||
|
DiagramEditorStructContainer* getContainerByBlock(int nLevel,int nType,QString sName); //根据block名称返回container nType:1母线2间隔3变压器
|
||||||
DiagramEditorBaseBlock* getBlockByName(int nLevel,int nType,QString sName); //根据名称返回block
|
DiagramEditorBaseBlock* getBlockByName(int nLevel,int nType,QString sName); //根据名称返回block
|
||||||
|
DiagramEditorBaseBlock* getBlockByName_all(QString sName);
|
||||||
bool removeBlockByName(int nLevel,int nType,const QString& sName); //依据名称删除block
|
bool removeBlockByName(int nLevel,int nType,const QString& sName); //依据名称删除block
|
||||||
WizardBayContentDlg* getContentDlg() {return _bayContentDlg;}
|
WizardBayContentDlg* getContentDlg() {return _bayContentDlg;}
|
||||||
DiagramEditorBaySettingDlg* getBaySettingDlg() {return _baySettingDlg;}
|
DiagramEditorBaySettingDlg* getBaySettingDlg() {return _baySettingDlg;}
|
||||||
void flushTransPage(); //刷新变压器界面
|
void flushTransPage(); //刷新变压器界面
|
||||||
|
int getContainerIndex(int nLevel,DiagramEditorStructContainer*); //返回目标层级container的序号
|
||||||
|
QUuid addConnection(const QString& str1,const QString& str2,int nType1,int nType2,bool bCover = false); //插入连接
|
||||||
|
QMap<QUuid,DiagramEditorBriefConnect>& getConnection() {return _mapConnect;}
|
||||||
|
void removeConnection(QUuid);
|
||||||
private:
|
private:
|
||||||
void initial();
|
void initial();
|
||||||
void reOrderBus(); //重置bus次序
|
void reOrderBus(); //重置bus次序
|
||||||
|
|
@ -67,7 +73,8 @@ private:
|
||||||
DiagramEditorBaySettingDlg* _baySettingDlg;
|
DiagramEditorBaySettingDlg* _baySettingDlg;
|
||||||
DiagramEditorTransSettingDlg* _transSettingDlg;
|
DiagramEditorTransSettingDlg* _transSettingDlg;
|
||||||
QMap<int,DiagramEditorWizardBusInfo> _mapBus; //母线信息
|
QMap<int,DiagramEditorWizardBusInfo> _mapBus; //母线信息
|
||||||
QMap<int,QMap<int,DiagramEditorStructContainer*>> _mapSturctContainer; //划分后的区块
|
QMap<int,QList<DiagramEditorStructContainer*>> _mapSturctContainer; //划分后的区块
|
||||||
|
QMap<QUuid,DiagramEditorBriefConnect> _mapConnect; //连接列表
|
||||||
bool _busPageChanged; //母线页改变
|
bool _busPageChanged; //母线页改变
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,13 @@ class EditBaseStruct : public QGraphicsWidget
|
||||||
public:
|
public:
|
||||||
EditBaseStruct(QGraphicsItem *parent = 0);
|
EditBaseStruct(QGraphicsItem *parent = 0);
|
||||||
virtual ~EditBaseStruct();
|
virtual ~EditBaseStruct();
|
||||||
|
void setId(const QString& s) {sId = s;}
|
||||||
|
QString getId(){return sId;}
|
||||||
void setDataType(DiagramEditorStructType t) {_dataType = t;}
|
void setDataType(DiagramEditorStructType t) {_dataType = t;}
|
||||||
DiagramEditorStructType getDataType() {return _dataType;}
|
DiagramEditorStructType getDataType() {return _dataType;}
|
||||||
protected:
|
protected:
|
||||||
DiagramEditorStructType _dataType;
|
DiagramEditorStructType _dataType;
|
||||||
|
QString sId;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -2,16 +2,21 @@
|
||||||
#define EDITCONTAINERITEM_H
|
#define EDITCONTAINERITEM_H
|
||||||
//存放间隔、分段母线、变压器的实体
|
//存放间隔、分段母线、变压器的实体
|
||||||
#include <QGraphicsWidget>
|
#include <QGraphicsWidget>
|
||||||
|
#include "diagramEditor/editBaseStruct.h"
|
||||||
|
|
||||||
class EditContainerItem : public QGraphicsWidget
|
class EditContainerItem : public EditBaseStruct
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
EditContainerItem(QGraphicsItem *parent = nullptr);
|
EditContainerItem(QGraphicsItem *parent = nullptr);
|
||||||
~EditContainerItem();
|
~EditContainerItem();
|
||||||
void setupUI();
|
void setupUI();
|
||||||
|
signals:
|
||||||
|
void containerSizeChange(EditContainerItem*);
|
||||||
protected:
|
protected:
|
||||||
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
|
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
|
||||||
|
virtual void resizeEvent(QGraphicsSceneResizeEvent *event) override;
|
||||||
|
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,13 @@
|
||||||
#define EDITITEMS_H
|
#define EDITITEMS_H
|
||||||
|
|
||||||
//组态过程中的item
|
//组态过程中的item
|
||||||
#include <QGraphicsObject>
|
#include <QGraphicsWidget>
|
||||||
|
#include <QPointer>
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
class EditBaseItem : public QGraphicsObject
|
class DiagramEditorBaseBlock;
|
||||||
|
|
||||||
|
class EditBaseItem : public QGraphicsWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
|
@ -17,13 +20,16 @@ public:
|
||||||
virtual void setType(EditorItemType tpe) {nType = tpe;}
|
virtual void setType(EditorItemType tpe) {nType = tpe;}
|
||||||
virtual EditorItemType getType(){return nType;}
|
virtual EditorItemType getType(){return nType;}
|
||||||
virtual void setBoundingRect(QRectF rec) {m_boundingRect = rec;}
|
virtual void setBoundingRect(QRectF rec) {m_boundingRect = rec;}
|
||||||
virtual QRectF boundingRect() {return m_boundingRect;}
|
virtual QRectF boundingRect() const {return m_boundingRect;}
|
||||||
|
virtual void setBlockData(QPointer<DiagramEditorBaseBlock> p){_pBlock = p;}
|
||||||
|
virtual QPointer<DiagramEditorBaseBlock> getBlockData(){return _pBlock;}
|
||||||
protected:
|
protected:
|
||||||
virtual QPainterPath shape();
|
virtual QPainterPath shape();
|
||||||
protected:
|
protected:
|
||||||
QString sName;
|
QString sName;
|
||||||
EditorItemType nType;
|
EditorItemType nType;
|
||||||
QRectF m_boundingRect;
|
QRectF m_boundingRect;
|
||||||
|
QPointer<DiagramEditorBaseBlock> _pBlock;
|
||||||
};
|
};
|
||||||
|
|
||||||
/********************bus*********************/
|
/********************bus*********************/
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,9 @@ class QGraphicsLinearLayout;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
class EditMainRect;
|
class EditMainRect;
|
||||||
class EditRowData;
|
class EditRowData;
|
||||||
class EditBaseStruct;
|
class EditContainerItem;
|
||||||
|
class DiagramEditorWizard;
|
||||||
|
class DiagramEditorBaseBlock;
|
||||||
|
|
||||||
class EditPanel : public QWidget
|
class EditPanel : public QWidget
|
||||||
{
|
{
|
||||||
|
|
@ -22,10 +24,14 @@ public:
|
||||||
~EditPanel();
|
~EditPanel();
|
||||||
|
|
||||||
void initByWizardInfo();
|
void initByWizardInfo();
|
||||||
|
void setOperateWizard(DiagramEditorWizard* p) {_curWizard = p;}
|
||||||
public slots:
|
public slots:
|
||||||
void onWidthChanged(int width);
|
void onWidthChanged(int width);
|
||||||
|
void onContainerSizeChanged(EditContainerItem*); //容器大小改变时调整内部大小
|
||||||
private:
|
private:
|
||||||
void initial();
|
void initial();
|
||||||
|
void calculateContainerWidth(EditContainerItem*); //根据间隔数量计算容器宽度 todo:区分上下间隔
|
||||||
|
int getContainerBusType(QMap<int,QList<DiagramEditorBaseBlock*>>); //返回容器中母线类型(单双)
|
||||||
private:
|
private:
|
||||||
EditView* m_pEditView;
|
EditView* m_pEditView;
|
||||||
EditScene* m_pEditScene;
|
EditScene* m_pEditScene;
|
||||||
|
|
@ -37,7 +43,8 @@ private:
|
||||||
int _maxWidth;
|
int _maxWidth;
|
||||||
int _maxHeight;
|
int _maxHeight;
|
||||||
QList<EditRowData*> _lstData;
|
QList<EditRowData*> _lstData;
|
||||||
QMap<int,QMap<int,EditBaseStruct*>> _mapStruct;
|
QMap<int,QMap<int,EditContainerItem*>> _mapStruct;
|
||||||
|
DiagramEditorWizard* _curWizard;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -377,6 +377,7 @@ void DiagramCavas::onSignal_addEditWizard(QString name)
|
||||||
_pEditorWizard = new DiagramEditorWizard(this);
|
_pEditorWizard = new DiagramEditorWizard(this);
|
||||||
connect(_pEditorWizard,&DiagramEditorWizard::wizardFinish,this,[&,name](){
|
connect(_pEditorWizard,&DiagramEditorWizard::wizardFinish,this,[&,name](){
|
||||||
EditPanel* pPanel = onSignal_addEditPanel(name);
|
EditPanel* pPanel = onSignal_addEditPanel(name);
|
||||||
|
pPanel->setOperateWizard(_pEditorWizard);
|
||||||
pPanel->initByWizardInfo();
|
pPanel->initByWizardInfo();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,63 +5,26 @@ DiagramEditorBaseBlock::DiagramEditorBaseBlock(QObject *parent)
|
||||||
,_curContainer(nullptr)
|
,_curContainer(nullptr)
|
||||||
{
|
{
|
||||||
nType = 0;
|
nType = 0;
|
||||||
|
nContainerLevel = 0;
|
||||||
}
|
}
|
||||||
DiagramEditorBaseBlock::~DiagramEditorBaseBlock()
|
DiagramEditorBaseBlock::~DiagramEditorBaseBlock()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramEditorBaseBlock::addConnect(const QString& str,int n,bool bCover)
|
void DiagramEditorBaseBlock::addConnect(QUuid uid)
|
||||||
{
|
{
|
||||||
if(!bCover){
|
if(_lstCon.contains(uid))
|
||||||
if(str == sName)
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
for(auto& con:lstCon){
|
_lstCon.append(uid);
|
||||||
if(con.con1.sName == str || con.con2.sName == str){ //已存在不插入
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DiagramEditorBriefConnect con;
|
|
||||||
con.con1.sName = sName; //首参数为自己名
|
|
||||||
con.con1.nType = nType;
|
|
||||||
con.con2.sName = str;
|
|
||||||
con.con2.nType = n;
|
|
||||||
|
|
||||||
lstCon.append(con);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramEditorBaseBlock::addConnect(DiagramEditorBriefConnect obj)
|
void DiagramEditorBaseBlock::removeConnect(QUuid uid)
|
||||||
{
|
{
|
||||||
for(auto& con:lstCon){
|
_lstCon.removeOne(uid);
|
||||||
if(con == obj){ //已存在不插入
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lstCon.append(obj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramEditorBaseBlock::removeConnect(const QString& str)
|
|
||||||
{
|
|
||||||
for(int i = 0;i < lstCon.size();++i){
|
|
||||||
if(lstCon[i].con1.sName == str || lstCon[i].con2.sName == str){
|
|
||||||
lstCon.removeAt(i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DiagramEditorBaseBlock::removeConnect(DiagramEditorBriefConnect obj)
|
|
||||||
{
|
|
||||||
for(int i = 0;i < lstCon.size();++i){
|
|
||||||
if(lstCon[i] == obj){
|
|
||||||
lstCon.removeAt(i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/***************************划分后的分段bus单元****************************/
|
/***************************划分后的分段bus单元****************************/
|
||||||
DiagramEditorBusBlock::DiagramEditorBusBlock(QObject *parent)
|
DiagramEditorBusBlock::DiagramEditorBusBlock(QObject *parent)
|
||||||
:DiagramEditorBaseBlock(parent)
|
:DiagramEditorBaseBlock(parent)
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,13 @@ void DiagramEditorBaySettingDlg::showDlg(int nLevel,DiagramEditorBayBlock* p)
|
||||||
if(p){
|
if(p){
|
||||||
auto lstCon = p->getConnect();
|
auto lstCon = p->getConnect();
|
||||||
QStringList lst;
|
QStringList lst;
|
||||||
for(auto& con:lstCon){
|
|
||||||
QString sOppo = con.getOppositeName(p->getName());
|
for(auto& conId:lstCon){
|
||||||
lst.append(sOppo);
|
if(_pWizard->getConnection().contains(conId)){
|
||||||
|
auto con = _pWizard->getConnection().value(conId);
|
||||||
|
QString sOpposite = con.getOppositeName(p->getName());
|
||||||
|
lst.append(sOpposite);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ui->listWidget->addItems(lst);
|
ui->listWidget->addItems(lst);
|
||||||
}
|
}
|
||||||
|
|
@ -66,7 +70,7 @@ void DiagramEditorBaySettingDlg::addNewBay()
|
||||||
ui->cb_target->clear();
|
ui->cb_target->clear();
|
||||||
ui->listWidget->clear();
|
ui->listWidget->clear();
|
||||||
if(_pWizard){
|
if(_pWizard){
|
||||||
auto mapAllCon = _pWizard->getCointainerStruct();
|
auto mapAllCon = _pWizard->getContainerStruct();
|
||||||
for(auto iter = mapAllCon.begin();iter != mapAllCon.end();++iter){
|
for(auto iter = mapAllCon.begin();iter != mapAllCon.end();++iter){
|
||||||
if(iter.key() == g_transformerLevel)
|
if(iter.key() == g_transformerLevel)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -143,7 +147,8 @@ void DiagramEditorBaySettingDlg::onOkClicked()
|
||||||
_curOperateBlock->clearConnect();
|
_curOperateBlock->clearConnect();
|
||||||
|
|
||||||
for(int i = 0;i < ui->listWidget->count();++i){
|
for(int i = 0;i < ui->listWidget->count();++i){
|
||||||
_curOperateBlock->addConnect(ui->listWidget->item(i)->text(),1,true);
|
QUuid uid = _pWizard->addConnection(_curOperateBlock->getName(),ui->listWidget->item(i)->text(),2,1,true);
|
||||||
|
_curOperateBlock->addConnect(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pContent = _pWizard->getContentDlg();
|
auto pContent = _pWizard->getContentDlg();
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ bool DiagramEditorStructContainer::insertBlock(int nPos,DiagramEditorBaseBlock*
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
p->setCurContainer(this); //目标block所属container
|
p->setCurContainer(this); //目标block所属container
|
||||||
|
p->setContainerLevel(nPos);
|
||||||
_mapBlocks[nPos].append(p);
|
_mapBlocks[nPos].append(p);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,13 +41,15 @@ void DiagramEditorTransSettingDlg::showDlg(DiagramEditorTransformerBlock* p)
|
||||||
addNewTrans();
|
addNewTrans();
|
||||||
if(_pWizard){
|
if(_pWizard){
|
||||||
ui->le_name->setText(p->getName());
|
ui->le_name->setText(p->getName());
|
||||||
//ui->cb_level->setCurrentIndex(0);
|
|
||||||
if(p){
|
if(p){
|
||||||
auto lstCon = p->getConnect();
|
auto lstCon = p->getConnect();
|
||||||
QStringList lst;
|
QStringList lst;
|
||||||
for(auto& con:lstCon){
|
for(auto& conId:lstCon){
|
||||||
QString sOppo = con.getOppositeName(p->getName());
|
if(_pWizard->getConnection().contains(conId)){
|
||||||
lst.append(sOppo);
|
auto con = _pWizard->getConnection().value(conId);
|
||||||
|
QString sOpposite = con.getOppositeName(p->getName());
|
||||||
|
lst.append(sOpposite);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ui->listWidget->addItems(lst);
|
ui->listWidget->addItems(lst);
|
||||||
}
|
}
|
||||||
|
|
@ -61,7 +63,7 @@ void DiagramEditorTransSettingDlg::addNewTrans()
|
||||||
ui->cb_target->clear();
|
ui->cb_target->clear();
|
||||||
ui->listWidget->clear();
|
ui->listWidget->clear();
|
||||||
if(_pWizard){
|
if(_pWizard){
|
||||||
auto mapAllCon = _pWizard->getCointainerStruct();
|
auto mapAllCon = _pWizard->getContainerStruct();
|
||||||
for(auto iter = mapAllCon.begin();iter != mapAllCon.end();++iter){
|
for(auto iter = mapAllCon.begin();iter != mapAllCon.end();++iter){
|
||||||
if(iter.key() == g_transformerLevel)
|
if(iter.key() == g_transformerLevel)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -134,7 +136,8 @@ void DiagramEditorTransSettingDlg::onOkClicked()
|
||||||
_curOperateBlock->clearConnect();
|
_curOperateBlock->clearConnect();
|
||||||
|
|
||||||
for(int i = 0;i < ui->listWidget->count();++i){
|
for(int i = 0;i < ui->listWidget->count();++i){
|
||||||
_curOperateBlock->addConnect(ui->listWidget->item(i)->text(),1,true);
|
QUuid uid = _pWizard->addConnection(_curOperateBlock->getName(),ui->listWidget->item(i)->text(),3,2,true);
|
||||||
|
_curOperateBlock->addConnect(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
_pWizard->flushTransPage();
|
_pWizard->flushTransPage();
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QUuid>
|
||||||
|
#include <QtNumeric>
|
||||||
#include "diagramEditor/diagramEditorWizard.h"
|
#include "diagramEditor/diagramEditorWizard.h"
|
||||||
#include "diagramEditor/wizardBusTableDelegate.h"
|
#include "diagramEditor/wizardBusTableDelegate.h"
|
||||||
#include "ui_diagramEditorWizard.h"
|
#include "ui_diagramEditorWizard.h"
|
||||||
|
|
@ -115,6 +117,7 @@ void DiagramEditorWizard::generateBayStruct()
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pContainer = new DiagramEditorStructContainer(this);
|
auto pContainer = new DiagramEditorStructContainer(this);
|
||||||
|
pContainer->setId(QUuid::createUuid().toString());
|
||||||
auto pBus = new DiagramEditorBusBlock(this);
|
auto pBus = new DiagramEditorBusBlock(this);
|
||||||
pBus->setBusPro(sVoltage+"母线"+sDivPre,1,iter->dVoltage,0,i+1);
|
pBus->setBusPro(sVoltage+"母线"+sDivPre,1,iter->dVoltage,0,i+1);
|
||||||
pContainer->insertBlock(1,pBus);
|
pContainer->insertBlock(1,pBus);
|
||||||
|
|
@ -136,6 +139,7 @@ void DiagramEditorWizard::generateBayStruct()
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pContainer = new DiagramEditorStructContainer(this);
|
auto pContainer = new DiagramEditorStructContainer(this);
|
||||||
|
pContainer->setId(QUuid::createUuid().toString());
|
||||||
|
|
||||||
auto pBus1 = new DiagramEditorBusBlock(this);
|
auto pBus1 = new DiagramEditorBusBlock(this);
|
||||||
pBus1->setBusPro(sVoltage+"Ⅰ母"+sDivPre,1,iter->dVoltage,1,i+1);
|
pBus1->setBusPro(sVoltage+"Ⅰ母"+sDivPre,1,iter->dVoltage,1,i+1);
|
||||||
|
|
@ -143,9 +147,9 @@ void DiagramEditorWizard::generateBayStruct()
|
||||||
|
|
||||||
auto pBus2 = new DiagramEditorBusBlock(this);
|
auto pBus2 = new DiagramEditorBusBlock(this);
|
||||||
pBus2->setBusPro(sVoltage+"Ⅱ母"+sDivPre,1,iter->dVoltage,2,i+1);
|
pBus2->setBusPro(sVoltage+"Ⅱ母"+sDivPre,1,iter->dVoltage,2,i+1);
|
||||||
|
|
||||||
pContainer->insertBlock(2,pBus2);
|
pContainer->insertBlock(2,pBus2);
|
||||||
_mapSturctContainer[iter.key()].insert(i,pContainer);
|
_mapSturctContainer[iter.key()].insert(i,pContainer);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{ //双母线划分不同
|
else{ //双母线划分不同
|
||||||
|
|
@ -217,16 +221,56 @@ void DiagramEditorWizard::flushTransPage()
|
||||||
info.sName = pItem->getName();
|
info.sName = pItem->getName();
|
||||||
info.nType = pItem->getTransType();
|
info.nType = pItem->getTransType();
|
||||||
auto lstCon = pItem->getConnect(); //获取间隔所连对象的名称
|
auto lstCon = pItem->getConnect(); //获取间隔所连对象的名称
|
||||||
for(auto& con:lstCon){
|
for(auto& conId:lstCon){
|
||||||
|
if(_mapConnect.contains(conId)){
|
||||||
|
auto con = _mapConnect.value(conId);
|
||||||
QString sOpposite = con.getOppositeName(pItem->getName());
|
QString sOpposite = con.getOppositeName(pItem->getName());
|
||||||
info.lstBindObj.append(sOpposite);
|
info.lstBindObj.append(sOpposite);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
addTransformer(info);
|
addTransformer(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DiagramEditorWizard::getContainerIndex(int nLevel,DiagramEditorStructContainer* pCon)
|
||||||
|
{
|
||||||
|
auto lstCon = _mapSturctContainer.value(nLevel);
|
||||||
|
if(!lstCon.empty()){
|
||||||
|
for(int i = 0;i < lstCon.size();++i){
|
||||||
|
if(lstCon[i]->getId() == pCon->getId()){
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
QUuid DiagramEditorWizard::addConnection(const QString& str1,const QString& str2,int nType1,int nType2,bool bCover)
|
||||||
|
{
|
||||||
|
for(auto& con:_mapConnect){
|
||||||
|
if((con.con1.sName == str1 && con.con2.sName == str2) || (con.con1.sName == str2 && con.con2.sName == str1)){ //已存在不插入
|
||||||
|
return con.uid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DiagramEditorBriefConnect con;
|
||||||
|
con.uid = QUuid::createUuid();
|
||||||
|
con.con1.sName = str1;
|
||||||
|
con.con1.nType = nType1;
|
||||||
|
con.con2.sName = str2;
|
||||||
|
con.con2.nType = nType2;
|
||||||
|
|
||||||
|
_mapConnect.insert(con.uid,con);
|
||||||
|
return con.uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DiagramEditorWizard::removeConnection(QUuid uid)
|
||||||
|
{
|
||||||
|
_mapConnect.remove(uid);
|
||||||
|
}
|
||||||
|
|
||||||
void DiagramEditorWizard::addTransformer(DiagramEditorWizardTransformerInfo info)
|
void DiagramEditorWizard::addTransformer(DiagramEditorWizardTransformerInfo info)
|
||||||
{
|
{
|
||||||
int row = ui->tableWidget_trans->rowCount();
|
int row = ui->tableWidget_trans->rowCount();
|
||||||
|
|
@ -380,19 +424,107 @@ void DiagramEditorWizard::onAddBayFinished(DiagramEditorWizardBayInfo info)
|
||||||
int curIndex = ui->listWidget_bay->currentItem()->data(Qt::UserRole).toInt(); //当前层级
|
int curIndex = ui->listWidget_bay->currentItem()->data(Qt::UserRole).toInt(); //当前层级
|
||||||
|
|
||||||
if(!info.lstBindObj.isEmpty()){
|
if(!info.lstBindObj.isEmpty()){
|
||||||
auto pContainer = getContainerByBlock(curIndex,1,info.lstBindObj.first());
|
QList<int> lstlevel; //层级
|
||||||
|
if(info.nType == BayType::busSectionBay)
|
||||||
|
{
|
||||||
|
for(auto& sName:info.lstBindObj){
|
||||||
|
auto pBlock = getBlockByName(curIndex,1,sName);
|
||||||
|
if(pBlock){
|
||||||
|
int n = pBlock->getContainerLevel();
|
||||||
|
lstlevel.append(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(info.lstBindObj.size() < 2){
|
||||||
|
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"分段连接1%连接对象不足").arg(info.sName));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if(lstlevel.size() > 1){
|
||||||
|
if(lstlevel[0] != lstlevel[1]){
|
||||||
|
QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"分段连接1%连接母线错位").arg(info.sName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DiagramEditorBayBlock* pBlock = new DiagramEditorBayBlock(this);
|
DiagramEditorBayBlock* pBlock = new DiagramEditorBayBlock(this);
|
||||||
pBlock->setName(info.sName);
|
pBlock->setName(info.sName);
|
||||||
pBlock->setType(2);
|
pBlock->setType(2);
|
||||||
pBlock->setBayType(info.nType);
|
pBlock->setBayType(info.nType);
|
||||||
|
|
||||||
for(auto& sName:info.lstBindObj){
|
for(auto& sName:info.lstBindObj){
|
||||||
pBlock->addConnect(sName,1);
|
QUuid uid = addConnection(pBlock->getName(),sName,2,1);
|
||||||
|
pBlock->addConnect(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
pContainer->insertBlock(3,pBlock);
|
if(info.nType == BayType::busSectionBay){
|
||||||
|
|
||||||
|
auto pC1 = getContainerByBlock(curIndex,1,info.lstBindObj.first());
|
||||||
|
auto pC2 = getContainerByBlock(curIndex,1,info.lstBindObj.last());
|
||||||
|
int idx1 = getContainerIndex(curIndex,pC1);
|
||||||
|
int idx2 = getContainerIndex(curIndex,pC2);
|
||||||
|
int n = qAbs(idx1-idx2);
|
||||||
|
|
||||||
|
if(n == 1){ //两个容器相连,未插入container,新建
|
||||||
|
auto pContainer = new DiagramEditorStructContainer(this);
|
||||||
|
pContainer->setId(QUuid::createUuid().toString());
|
||||||
|
|
||||||
|
QList<int> lstIndex;
|
||||||
|
for(auto& sName:info.lstBindObj){ //寻找container所处index
|
||||||
|
auto pBlock = getBlockByName(curIndex,1,sName);
|
||||||
|
if(pBlock){
|
||||||
|
auto pCon = pBlock->getCurContainer();
|
||||||
|
if(pCon){
|
||||||
|
int nRes = getContainerIndex(curIndex,pCon);
|
||||||
|
if(nRes != -1){
|
||||||
|
lstIndex.append(nRes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!lstIndex.isEmpty()){
|
||||||
|
int maxIndex = lstIndex.first(); // 取第一个元素作为初始值
|
||||||
|
for (int i : lstIndex) {
|
||||||
|
if (i > maxIndex) {
|
||||||
|
maxIndex = i; // 更新最大值
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_mapSturctContainer[curIndex].insert(maxIndex,pContainer); //将容器插入到最右的前一个
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lstlevel.size() > 1){ //判断连接母线在container中的层级
|
||||||
|
if((lstlevel.value(0) == lstlevel.value(1))){ //加入container最上层
|
||||||
|
if((lstlevel.value(0) == 1)){
|
||||||
|
pContainer->insertBlock(0,pBlock);
|
||||||
|
}
|
||||||
|
else if((lstlevel.value(0) == 2)){ //加入container最下层
|
||||||
|
pContainer->insertBlock(3,pBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{ //使用已有container
|
||||||
|
int nMiddle = (idx1+idx2)*0.5;
|
||||||
|
auto pContainer = _mapSturctContainer[curIndex].value(nMiddle);
|
||||||
|
if(pContainer){
|
||||||
|
if(lstlevel.size() > 1){ //判断连接母线在container中的层级
|
||||||
|
if((lstlevel.value(0) == lstlevel.value(1))){ //加入container最上层
|
||||||
|
if((lstlevel.value(0) == 1)){
|
||||||
|
pContainer->insertBlock(0,pBlock);
|
||||||
|
}
|
||||||
|
else if((lstlevel.value(0) == 2)){ //加入container最下层
|
||||||
|
pContainer->insertBlock(3,pBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{ //其他间隔
|
||||||
|
auto pContainer = getContainerByBlock(curIndex,1,info.lstBindObj.first());
|
||||||
|
pContainer->insertBlock(3,pBlock);
|
||||||
|
}
|
||||||
_bayContentDlg->flushData(curIndex);
|
_bayContentDlg->flushData(curIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -407,7 +539,8 @@ void DiagramEditorWizard::onAddTransFinished(DiagramEditorWizardTransformerInfo
|
||||||
pTrans->setTransType(info.nType);
|
pTrans->setTransType(info.nType);
|
||||||
|
|
||||||
for(auto& sName:info.lstBindObj){
|
for(auto& sName:info.lstBindObj){
|
||||||
pTrans->addConnect(sName,2);
|
QUuid uid = addConnection(pTrans->getName(),sName,3,2);
|
||||||
|
pTrans->addConnect(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
pContainer->insertBlock(1,pTrans);
|
pContainer->insertBlock(1,pTrans);
|
||||||
|
|
@ -537,12 +670,19 @@ void DiagramEditorWizard::onTransDeleteClicked()
|
||||||
DiagramEditorStructContainer* pCon = getContainerByBlock(g_transformerLevel,3,sName);
|
DiagramEditorStructContainer* pCon = getContainerByBlock(g_transformerLevel,3,sName);
|
||||||
bool res = removeBlockByName(g_transformerLevel,3,sName);
|
bool res = removeBlockByName(g_transformerLevel,3,sName);
|
||||||
if(pCon){ //同时删除container(一个container包含一个变压器)
|
if(pCon){ //同时删除container(一个container包含一个变压器)
|
||||||
for(auto iter = _mapSturctContainer[g_transformerLevel].begin(); iter != _mapSturctContainer[g_transformerLevel].end();++iter){
|
/*for(auto iter = _mapSturctContainer[g_transformerLevel].begin(); iter != _mapSturctContainer[g_transformerLevel].end();++iter){
|
||||||
if(iter.value() == pCon){
|
if(*iter == pCon){
|
||||||
delete pCon;
|
delete pCon;
|
||||||
_mapSturctContainer[g_transformerLevel].erase(iter);
|
_mapSturctContainer[g_transformerLevel].erase(iter);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
for(int i = 0;i < _mapSturctContainer[g_transformerLevel].size();++i){
|
||||||
|
if(_mapSturctContainer[g_transformerLevel][i] == pCon){
|
||||||
|
delete pCon;
|
||||||
|
_mapSturctContainer[g_transformerLevel].removeAt(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(res){
|
if(res){
|
||||||
|
|
@ -637,6 +777,27 @@ QList<DiagramEditorBaseBlock*> DiagramEditorWizard::getTargetLevelBlocks(int nL
|
||||||
return lstBlock;
|
return lstBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<DiagramEditorBaseBlock*> DiagramEditorWizard::getTargetLevelBlocks_all(int nLevel)
|
||||||
|
{
|
||||||
|
QList<DiagramEditorBaseBlock*> lstBlock;
|
||||||
|
for(auto iter = _mapSturctContainer.begin();iter != _mapSturctContainer.end();++iter){
|
||||||
|
if(iter.key() == nLevel){
|
||||||
|
for(auto& container:iter.value())
|
||||||
|
{
|
||||||
|
auto mapBlock = container->getBlockMap();
|
||||||
|
for(auto& lst:mapBlock)
|
||||||
|
{
|
||||||
|
for(auto& block:lst)
|
||||||
|
{
|
||||||
|
lstBlock.append(block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lstBlock;
|
||||||
|
}
|
||||||
|
|
||||||
DiagramEditorStructContainer* DiagramEditorWizard::getContainerByBlock(int nLevel,int nType,QString sName)
|
DiagramEditorStructContainer* DiagramEditorWizard::getContainerByBlock(int nLevel,int nType,QString sName)
|
||||||
{
|
{
|
||||||
DiagramEditorStructContainer* pContainer = nullptr;
|
DiagramEditorStructContainer* pContainer = nullptr;
|
||||||
|
|
@ -652,14 +813,26 @@ DiagramEditorStructContainer* DiagramEditorWizard::getContainerByBlock(int nLeve
|
||||||
|
|
||||||
DiagramEditorBaseBlock* DiagramEditorWizard::getBlockByName(int nLevel,int nType,QString sName)
|
DiagramEditorBaseBlock* DiagramEditorWizard::getBlockByName(int nLevel,int nType,QString sName)
|
||||||
{
|
{
|
||||||
DiagramEditorBaseBlock* pBlock = nullptr;
|
|
||||||
auto lstBlock = getTargetLevelBlocks(nLevel,nType);
|
auto lstBlock = getTargetLevelBlocks(nLevel,nType);
|
||||||
for(auto& block:lstBlock){
|
for(auto& block:lstBlock){
|
||||||
if(block->getName() == sName){
|
if(block->getName() == sName){
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pBlock;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
DiagramEditorBaseBlock* DiagramEditorWizard::getBlockByName_all(QString sName)
|
||||||
|
{
|
||||||
|
for(auto iter = _mapSturctContainer.begin(); iter != _mapSturctContainer.end();++iter){
|
||||||
|
auto lstBlock = getTargetLevelBlocks_all(iter.key());
|
||||||
|
for(auto& block:lstBlock){
|
||||||
|
if(block->getName() == sName){
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DiagramEditorWizard::removeBlockByName(int nLevel,int nType,const QString& sName)
|
bool DiagramEditorWizard::removeBlockByName(int nLevel,int nType,const QString& sName)
|
||||||
|
|
@ -671,6 +844,18 @@ bool DiagramEditorWizard::removeBlockByName(int nLevel,int nType,const QString&
|
||||||
|
|
||||||
for(int i = 0;i< lst.size();++i){
|
for(int i = 0;i< lst.size();++i){
|
||||||
if(lst[i]->getName() == sName){
|
if(lst[i]->getName() == sName){
|
||||||
|
QList<QUuid> lstUid = lst[i]->getConnect();
|
||||||
|
for(auto uid:lstUid){ //删除对象前删除连接
|
||||||
|
auto con = _mapConnect.value(uid);
|
||||||
|
QString sOppo = con.getOppositeName(sName); //删除相连的对象中连接信息
|
||||||
|
auto pBlock = getBlockByName_all(sOppo);
|
||||||
|
if(pBlock){
|
||||||
|
pBlock->removeConnect(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeConnection(uid);
|
||||||
|
}
|
||||||
|
|
||||||
delete lst[i];
|
delete lst[i];
|
||||||
lst.removeAt(i);
|
lst.removeAt(i);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
#include "diagramEditor/editContainerItem.h"
|
#include "diagramEditor/editContainerItem.h"
|
||||||
|
|
||||||
EditContainerItem::EditContainerItem(QGraphicsItem *parent)
|
EditContainerItem::EditContainerItem(QGraphicsItem *parent)
|
||||||
: QGraphicsWidget(parent)
|
: EditBaseStruct(parent)
|
||||||
{
|
{
|
||||||
setupUI();
|
setupUI();
|
||||||
}
|
}
|
||||||
|
|
@ -23,3 +23,14 @@ void EditContainerItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
|
||||||
{
|
{
|
||||||
event->ignore();
|
event->ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditContainerItem::resizeEvent(QGraphicsSceneResizeEvent *event)
|
||||||
|
{
|
||||||
|
emit containerSizeChange(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditContainerItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||||
|
{
|
||||||
|
painter->setPen(QColor(255,0,0));
|
||||||
|
painter->drawRect(boundingRect());
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
#include "diagramEditor/editItems.h"
|
#include "diagramEditor/editItems.h"
|
||||||
|
|
||||||
EditBaseItem::EditBaseItem(QGraphicsItem *parent)
|
EditBaseItem::EditBaseItem(QGraphicsItem *parent)
|
||||||
: QGraphicsObject(parent)
|
: QGraphicsWidget(parent)
|
||||||
|
,_pBlock(nullptr)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -32,6 +33,7 @@ EditBusItem::~EditBusItem()
|
||||||
void EditBusItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
void EditBusItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||||
{
|
{
|
||||||
painter->fillRect(m_boundingRect,Qt::black);
|
painter->fillRect(m_boundingRect,Qt::black);
|
||||||
|
painter->drawText(QPointF(-10,0),sName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************Bay*********************/
|
/********************Bay*********************/
|
||||||
|
|
@ -48,8 +50,9 @@ EditBayItem::~EditBayItem()
|
||||||
|
|
||||||
void EditBayItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
void EditBayItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||||
{
|
{
|
||||||
painter->setPen(QColor(100,149,237));
|
painter->setPen(QColor(220,220,230));
|
||||||
painter->drawRect(m_boundingRect);
|
painter->drawRect(m_boundingRect);
|
||||||
|
painter->drawText(QPointF(-10,0),sName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************trans*********************/
|
/********************trans*********************/
|
||||||
|
|
@ -66,5 +69,7 @@ EditTransItem::~EditTransItem()
|
||||||
|
|
||||||
void EditTransItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
void EditTransItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||||
{
|
{
|
||||||
|
painter->setPen(QColor(180,235,155));
|
||||||
|
painter->drawRect(m_boundingRect);
|
||||||
|
painter->drawText(QPointF(-10,0),sName);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,17 @@
|
||||||
#include "diagramEditor/editRowData.h"
|
#include "diagramEditor/editRowData.h"
|
||||||
#include "diagramEditor/editMainRect.h"
|
#include "diagramEditor/editMainRect.h"
|
||||||
#include "diagramEditor/editBlock.h"
|
#include "diagramEditor/editBlock.h"
|
||||||
|
#include "diagramEditor/diagramEditorWizard.h"
|
||||||
|
#include "diagramEditor/editContainerItem.h"
|
||||||
|
#include "diagramEditor/diagramEditorStructContainer.h"
|
||||||
|
#include "diagramEditor/diagramEditorBaseBlock.h"
|
||||||
|
#include "diagramEditor/editItems.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
EditPanel::EditPanel(QWidget *parent)
|
EditPanel::EditPanel(QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
|
,_curWizard(nullptr)
|
||||||
{
|
{
|
||||||
_maxWidth = 0;
|
_maxWidth = 0;
|
||||||
_maxHeight = 0;
|
_maxHeight = 0;
|
||||||
|
|
@ -21,7 +27,7 @@ EditPanel::EditPanel(QWidget *parent)
|
||||||
m_pEditScene = new EditScene(this);
|
m_pEditScene = new EditScene(this);
|
||||||
//设置场景大小.前两个参数为scene的坐标远点,设置到view的中心点后,无论view如何缩放,secne的坐标原点都不会动,方便后续的位置计算
|
//设置场景大小.前两个参数为scene的坐标远点,设置到view的中心点后,无论view如何缩放,secne的坐标原点都不会动,方便后续的位置计算
|
||||||
//m_pEditScene->setSceneRect(-g_dGriaphicsScene_Width / 2, -g_dGriaphicsScene_Height / 2, g_dGriaphicsScene_Width, g_dGriaphicsScene_Height);
|
//m_pEditScene->setSceneRect(-g_dGriaphicsScene_Width / 2, -g_dGriaphicsScene_Height / 2, g_dGriaphicsScene_Width, g_dGriaphicsScene_Height);
|
||||||
m_pEditScene->setSceneRect(0, 0, g_dGriaphicsScene_Width*4, g_dGriaphicsScene_Height*4);
|
m_pEditScene->setSceneRect(0, 0, g_dGriaphicsScene_Width*2, g_dGriaphicsScene_Height*2);
|
||||||
|
|
||||||
m_pEditView = new EditView(this);
|
m_pEditView = new EditView(this);
|
||||||
m_pEditView->setScene(m_pEditScene);
|
m_pEditView->setScene(m_pEditScene);
|
||||||
|
|
@ -37,6 +43,154 @@ EditPanel::~EditPanel()
|
||||||
|
|
||||||
void EditPanel::initByWizardInfo()
|
void EditPanel::initByWizardInfo()
|
||||||
{
|
{
|
||||||
|
auto& mapTotal = _curWizard->getContainerStruct();
|
||||||
|
for(auto iter = mapTotal.begin();iter != mapTotal.end();++iter){
|
||||||
|
if(iter.key() == g_transformerLevel)
|
||||||
|
continue;
|
||||||
|
QGraphicsLinearLayout* layoutRowData = new QGraphicsLinearLayout(Qt::Horizontal);
|
||||||
|
layoutRowData->setSpacing(20);
|
||||||
|
//layoutRowData->setMinimumHeight(300);
|
||||||
|
EditRowData* pRow = new EditRowData();
|
||||||
|
pRow->setId(QString::number(iter.key()));
|
||||||
|
auto& mapCon = iter.value();
|
||||||
|
for(int i = 0;i < mapCon.size();++i){
|
||||||
|
EditContainerItem* pContain = new EditContainerItem();
|
||||||
|
connect(pContain,&EditContainerItem::containerSizeChange,this,&EditPanel::onContainerSizeChanged);
|
||||||
|
pContain->setMinimumWidth(g_dEditorItem_Width+40);
|
||||||
|
layoutRowData->addItem(pContain);
|
||||||
|
|
||||||
|
pContain->setId(QUuid::createUuid().toString());
|
||||||
|
|
||||||
|
QGraphicsLinearLayout* layV = new QGraphicsLinearLayout(Qt::Vertical); //container中分层布局
|
||||||
|
layV->setSpacing(10);
|
||||||
|
layV->setMinimumHeight(260);
|
||||||
|
pContain->setLayout(layV);
|
||||||
|
|
||||||
|
auto pConData = mapCon[i];
|
||||||
|
auto mapBlock = pConData->getBlockMap();
|
||||||
|
for(auto ite = mapBlock.begin();ite != mapBlock.end();++ite){
|
||||||
|
QGraphicsLinearLayout* layH = new QGraphicsLinearLayout(Qt::Horizontal); //container中每一层的布局
|
||||||
|
layV->addItem(layH);
|
||||||
|
if(ite.value().size() > 0){
|
||||||
|
for(auto pBlock:ite.value()){
|
||||||
|
int nType = pBlock->getType();
|
||||||
|
|
||||||
|
EditBaseItem* pItem = nullptr;
|
||||||
|
if(nType == 1){ //母线
|
||||||
|
auto pBus = new EditBusItem();
|
||||||
|
pBus->setType(EditorItemType::bus);
|
||||||
|
pItem = pBus;
|
||||||
|
layH->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
|
||||||
|
layH->setPreferredHeight(10); // 固定高度
|
||||||
|
}
|
||||||
|
else if(nType == 2){ //间隔
|
||||||
|
auto pBay = new EditBayItem();
|
||||||
|
pBay->setType(EditorItemType::bay);
|
||||||
|
pBay->setBoundingRect(QRectF(0,0,g_dEditorItem_Width,g_dEditorItem_Height));
|
||||||
|
pItem = pBay;
|
||||||
|
}
|
||||||
|
/*else if(nType == 3){ //变压器
|
||||||
|
auto pTrans = new EditTransItem();
|
||||||
|
pTrans->setType(EditorItemType::Trans);
|
||||||
|
pItem = pTrans;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if(pItem){
|
||||||
|
pItem->setName(pBlock->getName());
|
||||||
|
pItem->setBlockData(pBlock);
|
||||||
|
layH->addItem(pItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(mapBlock.value(0).isEmpty()){ //为空则添加间距
|
||||||
|
//layV->insertStretch(0);
|
||||||
|
QGraphicsLinearLayout* layH = new QGraphicsLinearLayout(Qt::Horizontal); //container中每一层的布局
|
||||||
|
layV->insertItem(0,layH);
|
||||||
|
auto pSpace = new EditBaseItem();
|
||||||
|
pSpace->setType(EditorItemType::none);
|
||||||
|
pSpace->setBoundingRect(QRectF(0,0,g_dEditorItem_Width,g_dEditorItem_Height));
|
||||||
|
layH->addItem(pSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mapBlock.value(3).isEmpty()){ //为空则添加间距
|
||||||
|
//layV->addStretch();
|
||||||
|
QGraphicsLinearLayout* layH = new QGraphicsLinearLayout(Qt::Horizontal); //container中每一层的布局
|
||||||
|
layV->insertItem(3,layH);
|
||||||
|
auto pSpace = new EditBaseItem();
|
||||||
|
pSpace->setType(EditorItemType::none);
|
||||||
|
pSpace->setBoundingRect(QRectF(0,0,g_dEditorItem_Width,g_dEditorItem_Height));
|
||||||
|
layH->addItem(pSpace);
|
||||||
|
}
|
||||||
|
layV->insertStretch(3);
|
||||||
|
layV->insertStretch(1);
|
||||||
|
|
||||||
|
calculateContainerWidth(pContain);
|
||||||
|
int n = getContainerBusType(mapBlock);
|
||||||
|
if(n == 1){
|
||||||
|
layoutRowData->setMaximumHeight(210);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_lstData.append(pRow);
|
||||||
|
//layoutRowData->addStretch();
|
||||||
|
_widgetLayout->addItem(layoutRowData);
|
||||||
|
|
||||||
|
if(iter.key() == 0){ //若设置了变压器,直接插入到第一行下方
|
||||||
|
if(!mapTotal.value(g_transformerLevel).empty()){
|
||||||
|
QGraphicsLinearLayout* layoutRowData = new QGraphicsLinearLayout(Qt::Horizontal);
|
||||||
|
layoutRowData->setSpacing(20);
|
||||||
|
EditRowData* pRow = new EditRowData();
|
||||||
|
pRow->setId(QString::number(g_transformerLevel));
|
||||||
|
auto& mapCon = mapTotal[g_transformerLevel];
|
||||||
|
for(int i = 0;i < mapCon.size();++i){
|
||||||
|
EditContainerItem* pContain = new EditContainerItem();
|
||||||
|
connect(pContain,&EditContainerItem::containerSizeChange,this,&EditPanel::onContainerSizeChanged);
|
||||||
|
pContain->setMinimumWidth(g_dEditorItem_Width+40);
|
||||||
|
layoutRowData->addItem(pContain);
|
||||||
|
|
||||||
|
pContain->setId(QUuid::createUuid().toString());
|
||||||
|
|
||||||
|
QGraphicsLinearLayout* layV = new QGraphicsLinearLayout(Qt::Vertical); //container中分层布局
|
||||||
|
layV->setSpacing(10);
|
||||||
|
layV->setMinimumHeight(260);
|
||||||
|
pContain->setLayout(layV);
|
||||||
|
|
||||||
|
auto pConData = mapCon[i];
|
||||||
|
auto mapBlock = pConData->getBlockMap();
|
||||||
|
for(auto ite = mapBlock.begin();ite != mapBlock.end();++ite){
|
||||||
|
QGraphicsLinearLayout* layH = new QGraphicsLinearLayout(Qt::Horizontal); //container中每一层的布局
|
||||||
|
layV->addItem(layH);
|
||||||
|
if(ite.value().size() > 0){
|
||||||
|
for(auto pBlock:ite.value()){
|
||||||
|
int nType = pBlock->getType();
|
||||||
|
|
||||||
|
EditBaseItem* pItem = nullptr;
|
||||||
|
|
||||||
|
if(nType == 3){ //变压器
|
||||||
|
auto pTrans = new EditTransItem();
|
||||||
|
pTrans->setType(EditorItemType::Trans);
|
||||||
|
pTrans->setBoundingRect(QRectF(0,0,g_dEditorItem_Width,g_dEditorItem_Width));
|
||||||
|
pItem = pTrans;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pItem){
|
||||||
|
pItem->setName(pBlock->getName());
|
||||||
|
pItem->setBlockData(pBlock);
|
||||||
|
layH->addItem(pItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
layV->insertStretch(3);
|
||||||
|
layV->insertStretch(0);
|
||||||
|
layoutRowData->addStretch();
|
||||||
|
}
|
||||||
|
layoutRowData->insertStretch(0);
|
||||||
|
_lstData.append(pRow);
|
||||||
|
_widgetLayout->addItem(layoutRowData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
_widgetLayout->addStretch();
|
_widgetLayout->addStretch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -54,11 +208,28 @@ void EditPanel::onWidthChanged(int width)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditPanel::onContainerSizeChanged(EditContainerItem* pItem)
|
||||||
|
{
|
||||||
|
if(pItem){
|
||||||
|
auto lst = pItem->childItems();
|
||||||
|
for(auto p:lst){
|
||||||
|
auto pBase = dynamic_cast<EditBaseItem*>(p);
|
||||||
|
if(pBase){
|
||||||
|
QString sName = pBase->getName();
|
||||||
|
EditorItemType tpe = pBase->getType();
|
||||||
|
if(tpe == EditorItemType::bus){
|
||||||
|
pBase->setBoundingRect(QRectF(0,0,pItem->boundingRect().width()-20,g_nEditorBus_Height));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EditPanel::initial()
|
void EditPanel::initial()
|
||||||
{
|
{
|
||||||
_mainWidget = new EditMainRect;
|
_mainWidget = new EditMainRect;
|
||||||
_widgetLayout = new QGraphicsLinearLayout(Qt::Vertical);
|
_widgetLayout = new QGraphicsLinearLayout(Qt::Vertical);
|
||||||
_widgetLayout->setSpacing(6);
|
_widgetLayout->setSpacing(40);
|
||||||
_mainWidget->setLayout(_widgetLayout);
|
_mainWidget->setLayout(_widgetLayout);
|
||||||
m_pEditScene->addItem(_mainWidget);
|
m_pEditScene->addItem(_mainWidget);
|
||||||
_mainWidget->setGeometry(m_pEditScene->sceneRect());
|
_mainWidget->setGeometry(m_pEditScene->sceneRect());
|
||||||
|
|
@ -66,3 +237,59 @@ void EditPanel::initial()
|
||||||
_maxHeight = _mainWidget->rect().height();
|
_maxHeight = _mainWidget->rect().height();
|
||||||
m_pEditView->centerOn(0,0);
|
m_pEditView->centerOn(0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditPanel::calculateContainerWidth(EditContainerItem* pItem)
|
||||||
|
{
|
||||||
|
if(pItem){
|
||||||
|
auto lst = pItem->childItems();
|
||||||
|
int nWidth = 0;
|
||||||
|
int nTop = 0; //container上层item数
|
||||||
|
int nBottom = 0; //下层
|
||||||
|
bool isSection = false; //是否分段
|
||||||
|
for(auto p:lst){
|
||||||
|
auto pBase = dynamic_cast<EditBaseItem*>(p);
|
||||||
|
if(pBase){
|
||||||
|
QString sName = pBase->getName();
|
||||||
|
EditorItemType tpe = pBase->getType();
|
||||||
|
if(tpe == EditorItemType::bay){
|
||||||
|
auto pBay = dynamic_cast<DiagramEditorBayBlock*>(pBase->getBlockData().data());
|
||||||
|
if(pBay){ //分段连接的container固定大小
|
||||||
|
BayType typ = pBay->getBayType();
|
||||||
|
if(typ == BayType::busSectionBay){
|
||||||
|
isSection = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
auto pData = pBase->getBlockData();
|
||||||
|
if(pData){
|
||||||
|
int n = pData->getContainerLevel();
|
||||||
|
if(n == 0){
|
||||||
|
nTop += 1;
|
||||||
|
}
|
||||||
|
else if(n == 3){
|
||||||
|
nBottom += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//nWidth += g_dEditorItem_Width+20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(nTop || nBottom){
|
||||||
|
nWidth = (nTop > nBottom ? nTop : nBottom)*(g_dEditorItem_Width+20);
|
||||||
|
pItem->setMinimumWidth(nWidth);
|
||||||
|
if(isSection){ //分段连接的container固定大小
|
||||||
|
pItem->setMaximumWidth(nWidth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int EditPanel::getContainerBusType(QMap<int,QList<DiagramEditorBaseBlock*>> map)
|
||||||
|
{
|
||||||
|
if(!map.value(1).isEmpty() && !map.value(2).isEmpty()){ //两条母线数据
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,11 +94,14 @@ void WizardBayContentDlg::flushData(int nLevel)
|
||||||
info.sName = pItem->getName();
|
info.sName = pItem->getName();
|
||||||
info.nType = pItem->getBayType();
|
info.nType = pItem->getBayType();
|
||||||
auto lstCon = pItem->getConnect(); //获取间隔所连对象的名称
|
auto lstCon = pItem->getConnect(); //获取间隔所连对象的名称
|
||||||
for(auto& con:lstCon){
|
|
||||||
|
for(auto& conId:lstCon){
|
||||||
|
if(_pWizard->getConnection().contains(conId)){
|
||||||
|
auto con = _pWizard->getConnection().value(conId);
|
||||||
QString sOpposite = con.getOppositeName(pItem->getName());
|
QString sOpposite = con.getOppositeName(pItem->getName());
|
||||||
info.lstBindObj.append(sOpposite);
|
info.lstBindObj.append(sOpposite);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
addBay(info);
|
addBay(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue