#pragma once /**组态编辑时的数据模型*/ #include "graphicsDataModel/baseModel.h" #include 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 p){_pWizard = p;} QMap 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 map) {_pCurTransLRoutes = map;} QMap 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 generateItemByInfo(QMap mapRoute,QMap mapCompo,QPointF delta = QPointF(0,0),DiagramEditorBaseBlock* pParent = nullptr); //根据data生成item parent:生成的对象添加到parent下(非拓扑计算) QMultiMap generateOutConnection(QList,int nTypeTransCon,int nPos = 0,DiagramEditorBaseBlock* pParent = nullptr); //生成外部连接(手动bind的连接) nTypeTransCon变压器连线类型,1中性点连接2外部连接,nPos中性点连接时的位置 QRectF updateTarget(QMap&,QMap&,int nLayout,int nSource,bool saveToModel = true); //更新位置 nLayout主次朝向:8421,8421 上下左右,上下左右 nSource:0间隔1变压器 regenerate重新生成标志 saveToModel:生成到模型或map void clearCompoDir(QMap&,QMap&,int nSource); //清空component中的dir(updateTarget前调用) QList getRouteItemInfoList(QMap,QMap); //返回线路中包含的设备信息列表 QByteArray getWizardInfo(); //返回二进制wizard设置 void setWizardInfo(const QByteArray&); //二进制设置wizard private: void bulidAndLinkComponent(QList,QMap,DiagramEditorBaseBlock* pParent = nullptr); //生成并连接线路上的设备 lst,mapComponents(从map中获取正确数据) QByteArray serializeWizardData(const DiagramEditorProjectInfo &data); //序列化eidtor向导设置数据 DiagramEditorProjectInfo deserializeWizardData(const QByteArray &byteArray); //反序列化eidtor向导设置 DiagramEditorBaseBlock* getBlockDataByName(QString,EditorItemType); //通过名称类型获取block的data private: QMap _tempItem; //临时预览对象 QMap _previewItem; //预览对象 QStandardItemModel* _pCurBayRoute; //当前使用的间隔路线 QStandardItemModel* _pCurBayComponent; //当前使用的间隔设备库 QMap _pCurTransLRoutes; //变压器中性点路线 QStandardItemModel* _pCurTransComponent; //当前使用的变压器设备库 EditBaseScene* _pCurPreviewScene; //当前预览scene EditPanel* _pPanel; //主界面 QPointer _pWizard; //向导界面数据 int _cableCount; //导线计数 };