#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; 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); //生成设备 uid,分类(设备、逻辑点),类型,旋转,模式(0局部1整体) ElectricBaseModelLineItem* generateLine(QUuid uid,QString sName,int mode); //生成连线 mode 0局部1整体 void clearCurPreview(); void setPanel(EditPanel* p) {_pPanel = p;} EditPanel* getPanel(){return _pPanel;} void setWizard(QPointer p){_pWizard = p;} void setCavas(QPointer p){_pCavas = p;} QPointer getCavas(){return _pCavas;} QMap getPreviewItem(){return _previewItem;}; 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)); //根据data生成item void generateOutConnection(QList,int nTypeTransCon,int nPos = 0); //生成外部连接(手动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前调用) private: void bulidAndLinkComponent(QList,QMap); //生成并连接线路上的设备 lst,mapComponents(从map中获取正确数据) //DiagramEditorComponentInfo getCompoDataFromName(const QString&,QMap); //根据名称获取数据 QList getRouteItemInfoList(QMap,QMap); //返回线路中包含的设备信息列表 private: QMap _tempItem; //临时预览对象 QMap _previewItem; //预览对象 QStandardItemModel* _pCurBayRoute; //当前使用的间隔路线 QStandardItemModel* _pCurBayComponent; //当前使用的间隔设备库 QMap _pCurTransLRoutes; //变压器中性点路线 QStandardItemModel* _pCurTransComponent; //当前使用的变压器设备库 EditBaseScene* _pCurPreviewScene; //当前预览scene EditPanel* _pPanel; //主界面 QPointer _pWizard; //向导界面数据 QPointer _pCavas; //顶层界面容器 };