DiagramDesigner/diagramCavas/include/graphicsDataModel/diagramEditorModel.h

89 lines
6.1 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
/**组态编辑时的数据模型*/
#include "graphicsDataModel/baseModel.h"
#include <QPointer>
class GraphicsBaseModelItem;
class DiagramEditorItemProperty;
class GraphicsBaseItem;
class EditBaseScene;
class ElectricBaseModelLineItem;
class DiagramEditorTransformerBlock;
class EditPanel;
class DiagramEditorWizard;
class DiagramCavas;
class EditBaseItem;
class DiagramEditorBaseBlock;
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(); //通过设置生成间隔预览对象
void generateTempTrans(int nType,DiagramEditorTransformerBlock* block = nullptr); //0高压侧1中压侧2低压侧3整个变压器
void connectTransToNeutral(DiagramEditorTransformerBlock* block); //连接变压器与中性点设备
void linkTransItem(GraphicsBaseModelItem*,QStandardItemModel*); //连接中性点与设备点
GraphicsBaseModelItem* generateComponent(QUuid uid,QString sName,int nCategory,int nType,QPointF pos,int nRotate,int mode,QString sBay = QString()); //生成设备 uid,分类(设备、逻辑点),类型,旋转,模式(0局部1整体)
ElectricBaseModelLineItem* generateLine(QUuid uid,QString sName,int mode,QString sBay = QString()); //生成连线 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(){_previewItem.clear();}
void generatePreview(); //生成预览
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;}
QStandardItem* getNameItem(const QString&,int nFrom = 0); //获取返回当前设备模型中的name项 nFrom,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),DiagramEditorBaseBlock* pParent = nullptr); //根据data生成item parent:生成的对象添加到parent下(非拓扑计算)
QMultiMap<int,QUuid> generateOutConnection(QList<DiagramEditorComponentInfo>,int nTypeTransCon,int nPos = 0,DiagramEditorBaseBlock* pParent = nullptr); //生成外部连接手动bind的连接 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
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; //导线计数
};