GridFrame/diagramCavas/include/graphicsDataModel/diagramEditorModel.h

95 lines
6.6 KiB
C
Raw Normal View History

2026-03-23 11:11:55 +08:00
#pragma once
/**组态编辑时的数据模型*/
#include "graphicsDataModel/baseModel.h"
#include <QPointer>
#include <QStandardItemModel>
#include "common/core_model/diagram.h"
#include "common/core_model/topology.h"
class GraphicsBaseModelItem;
class DiagramEditorItemProperty;
class GraphicsBaseItem;
class EditBaseScene;
class ElectricBaseModelLineItem;
class DiagramEditorTransformerBlock;
class EditPanel;
class DiagramEditorWizard;
class DiagramCavas;
class EditBaseItem;
class DiagramEditorBaseBlock;
class DiagramEditorBayBlock;
int const g_nHorizontalBlockSpacing = 100; //间隔横向间距
class DiagramEditorModel : public BaseModel
{
Q_OBJECT
public:
DiagramEditorModel();
~DiagramEditorModel();
bool addPreviewItem(QUuid uuid,GraphicsBaseModelItem*,int mode); //mode 0局部1整体
DiagramEditorItemProperty* addPreviewData(QUuid id,int type,QString name,QString metaName,QString sBlock,int mode = 0); //添加图元基模数据 mode:0局部1整体
void createTopoTerminalsByItem(GraphicsBaseItem*,ModelFunctionType funType = ModelFunctionType::ProjectModel); //通过图形对象创建port接线点(新建)
QRectF generateTempBay(DiagramEditorBayBlock*); //通过设置生成间隔预览对象
void generateTempTrans(int nType,DiagramEditorTransformerBlock* block = nullptr); //0高压侧1中压侧2低压侧3整个变压器
void connectTransToNeutral(DiagramEditorTransformerBlock* block); //连接变压器与中性点设备
void linkTransItem(GraphicsBaseModelItem*,QStandardItemModel*,DiagramEditorTransformerBlock* pBlock); //连接中性点与设备点
2026-04-01 10:41:12 +08:00
GraphicsBaseModelItem* generateComponent(QUuid uid,QString sName,int nCategory,int nType,int baseType,QPointF pos,int nRotate,int mode,DiagramEditorBaseBlock* pBlock = nullptr); //生成设备 uid,分类(设备、逻辑点),基模类型,基础类型,旋转,模式(0局部1整体)
2026-03-23 11:11:55 +08:00
ElectricBaseModelLineItem* generateLine(QUuid uid,QString sName,int mode,DiagramEditorBaseBlock* pBlock = nullptr); //生成连线 mode 0局部1整体
void clearCurPreview();
void setPanel(EditPanel* p) {_pPanel = p;}
EditPanel* getPanel(){return _pPanel;}
void setWizard(QPointer<DiagramEditorWizard> p){_pWizard = p;}
QMap<QUuid,GraphicsBaseModelItem*> getPreviewItem(){return _previewItem;};
void clearItems();
void generatePreview(bool bVisible = true); //生成预览
void calculateBlockPos(); //重新计算block位置
void setItemInBlockPos(); //设置block中的item位置
void refreshConnection(); //刷新连接线
void setCurBayRouteModel(QStandardItemModel* p) {_pCurBayRoute = p;}
QStandardItemModel* getCurBayRouteModel() {return _pCurBayRoute;}
void setCurBayComponentModel(QStandardItemModel* p) {_pCurBayComponent = p;}
QStandardItemModel* getCurBayComponentModel() {return _pCurBayComponent;}
void setCurTransRouteModels(QMap<int,QStandardItemModel*> map) {_pCurTransLRoutes = map;}
QMap<int,QStandardItemModel*> getCurTransRouteModels() {return _pCurTransLRoutes;}
void setCurTransComponentModel(QStandardItemModel* p) {_pCurTransComponent = p;}
QStandardItemModel* setCurTransComponentModel() {return _pCurTransComponent;}
void setCurPreviewScene(EditBaseScene* p) {_pCurPreviewScene = p;}
EditBaseScene* getCurPreviewScene(){return _pCurPreviewScene;}
QStandardItem* getNameItem(const QString&,int nFrom = 0); //获取返回当前设备模型中的name项 nFrom,0间隔1变压器
void generateItemByModel(QStandardItemModel* pModel,DiagramEditorBaseBlock* pBlock,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),DiagramEditorBaseBlock* pParent = nullptr); //根据data生成item parent:生成的对象添加到parent下(非拓扑计算)
QMultiMap<int,QUuid> generateOutConnection(QList<DiagramEditorComponentInfo>,QList<HierarchyItem>&,int nTypeTransCon,int nPos = 0,DiagramEditorBaseBlock* pParent = nullptr); //生成外部连接手动bind的连接relation:层级关系引用 nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置
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前调用)
QList<DiagramEditorComponentInfo> getRouteItemInfoList(QMap<QString,DiagramEditorComponentInfo>,QMap<QString,DiagramEditorRouteInfo>); //返回线路中包含的设备信息列表
QByteArray getWizardInfo(); //返回二进制wizard设置
void setWizardInfo(const QByteArray&); //二进制设置wizard
signals:
void updateTopologyItems(QList<HierarchyItem>,bool,bool); //更新当前拓扑列表 <连接关系,是否刷新,显示全部层级>
private:
void bulidAndLinkComponent(QList<DiagramEditorComponentInfo>,QMap<QString,DiagramEditorComponentInfo>,DiagramEditorBaseBlock* pParent = nullptr); //生成并连接线路上的设备 lstmapComponents(从map中获取正确数据)
QByteArray serializeWizardData(const DiagramEditorProjectInfo &data); //序列化eidtor向导设置数据
DiagramEditorProjectInfo deserializeWizardData(const QByteArray &byteArray); //反序列化eidtor向导设置
DiagramEditorBaseBlock* getBlockDataByName(QString,EditorItemType); //通过名称类型获取block的data
private:
QMap<QUuid,GraphicsBaseModelItem*> _tempItem; //临时预览对象
QMap<QUuid,GraphicsBaseModelItem*> _previewItem; //预览对象
QStandardItemModel* _pCurBayRoute; //当前使用的间隔路线
QStandardItemModel* _pCurBayComponent; //当前使用的间隔设备库
QMap<int,QStandardItemModel*> _pCurTransLRoutes; //变压器中性点路线
QStandardItemModel* _pCurTransComponent; //当前使用的变压器设备库
EditBaseScene* _pCurPreviewScene; //当前预览scene
EditPanel* _pPanel; //主界面
QPointer<DiagramEditorWizard> _pWizard; //向导界面数据
int _cableCount; //导线计数
};