#ifndef QMYCUSTOMPLOT_H #define QMYCUSTOMPLOT_H #include "qcustomplot.h" #include "LogIO.h" //#include "TransparentDraggableRect.h" #include "QCPSizeHandleManager.h" #include "qtColorSchemeComboBox.h" #pragma execution_character_set("utf-8") const int iFracType=15; class TransparentGroupResult; class QMyCustomPlot : public QCustomPlot { Q_OBJECT public: QMyCustomPlot(QWidget *parent = nullptr, QString strSlfName="", QString strWellName="", QString strTrackName="", QString strLineName=""); virtual ~QMyCustomPlot() { } void initGeometry(QString strUuid, int nscale, int nW); void changePropertyWaveUpdate(); // 绘图类型-变密度(成像) void initWave(QString strSlfName, QString strWaveName); // 绘图类型-波形 void initWave2(QString strSlfName, QString strWaveName); void initColorTable(); void setSchemeIndex(int nidx, int colorNum); double** getWavedata(int nrow, int ncol); QCPColorMap * updateWave(); float getScaleV(); void groupBeginResult(float fEndDepth, float fStartDepth); void groupEndResult(); protected: //virtual void mouseMoveEvent(QMouseEvent *event); public: QString m_strUuid; QString m_strSlfName; QString m_strWellName; QString m_strTrackName; QString m_strLineName; // float m_iX1, m_iX2; float m_iY1, m_iY2; //其他曲线 QString m_newFillType; QString m_newTargetLine; QColor m_newColor; QString m_newLithosImage; QString m_newHeadFill; float m_vMin; float m_vMax; QString m_strOtherScaleType; QString m_strScaleType="线性";//刻度类型(线性,对数) QColor m_frontColor;//岩性前景色 QColor m_backColor;//岩性背景色 QString m_newFillMode; bool m_bFillNow = true; QContextMenuEvent *m_event; bool m_bDrawRect = true; bool m_bX2Y = true; // bool m_bDrawCore_PHYSICS = false; //岩心分析 int dataIndex = -1; bool singleDragMove = false; float singleOldPosition = 0; QCPColorMap *m_colorMap = NULL; QCPColorScale * m_colorScale = NULL; double** m_wavedata = NULL; int m_nRow = 0; int m_nCol = 0; int m_nDrawType = 3; // 绘图类型 // 0.全周 1.正半周 2.负半周 int m_nMode = 1; float m_fScaleV = 0.0f; float m_fmin; float m_fmax; int m_nColorNum = 256; int m_nSchemeIndex = 1; bool m_bDrawDepth = false; // 绘制波深度 bool m_bDrawBase = false; // 绘制波基线 bool m_bOddEven = false; // 奇偶配色 float m_Base = 0.0f; // 波列基值 float m_MaxRange = 1023.0f; int m_nWaveJg = 100; int m_nWaveHei = 1; public: //分段刷新 QString m_strGroupUid = ""; // 解释结论终止深度 float m_fResultEndDepth = 0.0f; QVector m_x; QVector m_y; int m_iCurNum=0; int m_iSplitNum=2000; //2000000; //2000; bool m_addRandomGraph=false;//当前是否绘制曲线 true:是。 bool m_bEditRect=false; //当前是否正在编辑曲线。 bool m_bFirstTimeConnect=true; //初次绑定编辑曲线信号槽。 bool m_bPriviewRightList=false; //当前是否正在预览曲线。 // 组 QMap m_mapDragGroup; QMap m_mapDraggable_Rect; QMap m_mapDraggable_Result; QMap m_mapDraggable_GeoLith; QMap m_mapDraggable_SwallCore; QMap m_mapDraggable_Gujing; QMap m_mapDraggable_Image; QMap m_mapDraggable_MFac; QMap m_mapDraggable_Phase; QMap m_mapDraggable_Fac; QMap m_mapDraggable_Guan; QMap m_mapDraggable_Jiegutext; QMap m_mapDraggable_Line; QMap m_mapDraggable_SelectRect; QMap m_mapDraggable_RightList; QObject* m_SelectShiftLine=nullptr;//当前选中的分段线 QObject* m_SelectRect=nullptr;//当前选中的曲线编辑框 public slots: void slot_time(); public: void init(QString strName, QVector x, QVector y); void addImageToPlot(double left_Low, double right_Hight, const QString imagePath); void addRandomGraph(QVector x, QVector y, QString strSlfName, QString strLineName, QString strAliasName, QString strUnit, double newLeftScale, double newRightScale, QString strScaleType, QColor &newlineColor, double width, Qt::PenStyle lineStyle); void addTextToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); TransparentGroupResult* addResultGroup(double left_Low, double right_Hight, QString &strUuid, QString strText = ""); void addResultToPlot(double left_Low, double right_Hight, QString myResult, QString &strUuid, QString strText=""); void addGeoLithToPlot(double left_Low, double right_Hight, const QString myLith, const QString myOil, const QString myColor); void addSwallCoreToPlot(double Depth, QString LithologyImage, QString OilGasImage, QString ColorImage, double Sideleft, double width, int ind); void addGujingToPlot(double left_Low, double right_Hight, const QString strResult); void addJiegutextToPlot(double left_Low, double right_Hight, const QStringList strText, int &iMaxNum, QColor crColor=QColor(255, 255, 255, 80)); void addMFacToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); void addPhaseToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); void addFacToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); void addGuanToPlot(double left_Low, double right_Hight, const QString imagePath, float in); void addLineToPlot(double left_Low, double right_Hight, const QString strText, QColor crColor=QColor(255, 255, 255, 80)); //框选并编辑曲线 void addSelectRectToPlot(double left_Low, double right_Hight, int left_Low_Number, int right_Hight_Number); //预览 void addRightListToPlot( QList new_DepthList, QList new_ValueList); public slots: void s_LineClicked(int index); void onResetZoom(); void removeSelectedGraph(); void removeSelectedGraphByTitle(); void s_Raise(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int iTableType, QString strFormInfoType); //属性 //左刻度 void s_ChangeLeftScale(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newLeftScale); //右刻度 void s_ChangeRightScale(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newRightScale); //刻度类型 void s_ChangeScaleType(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strScaleType); //线颜色 void s_ChangeLineColor(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QColor lineColor); //线宽 void s_ChangeLineWidth(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double width); //线型 void s_ChangeLineStyle(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, Qt::PenStyle lineStyle); //岩性填充-不填充 void s_ClearFillMode(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); //岩性填充-填充 void s_ChangeFillMode(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString newFillType, QString newTargetLine, QColor newColor, QString newLithosImage, QString newHeadFill, float vMin, float vMax, QString strOtherScaleType, QColor frontColor, QColor backColor, QString newFillMode, bool bFillNow); //右键--添加分段线 void onAddShiftLine(); //校深线段 void s_AddShifLineToPlot(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double left_Low, double right_Hight); //右键--清除当前分段线 void onDelSelectShiftLine(); //清除当前分段线 void s_DelSelectShiftLineFromPlot(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); //右键--清除全部分段线 void onDelAllShiftLine(); //清除全部分段线 void s_DelAllShiftLineFromPlot(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); //右键--编辑曲线 void onEditLine(); //执行校正 void s_RuncorFromPlot(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); //执行拼接 void s_MergeFromPlot(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); //执行预览 void s_PreMergeFromPlot(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); void s_PreMerge_FromRightList(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QList new_DepthList, QList new_ValueList); //关闭预览框 void s_PreMerge_Close(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName); //Plot重新加载数据 void s_ReloadPlot(QString strUuid, QString strSlfName, QString strLineName); void s_changeDrawProperty(QVariantList vlist); void onAddRect(); //蝌蚪图重绘网格线 void drawCustomElements(); public: //蝌蚪图重绘网格线 bool mKedou = false; // bool mMousePress = false; QPoint mLastPos; QCPSizeHandleManager *mSizeHandleManager; virtual void mousePressEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event); //单点移动功能 void executeSingle(QMouseEvent *event); virtual void contextMenuEvent(QContextMenuEvent *event); private: }; #endif // QMYCUSTOMPLOT_H