#pragma once #include "iTagHelper.h" #include "iWxDiffusionSub.h" namespace Ui { class iWxDiffusionSubKK; } // KK绘图相关的预定义 #define s_KK_Curve_L "CurveL" #define s_KK_Curve_R "CurveR" #define s_KK_Curve_S "CurveS" #define s_KK_Curve_Raw_L "RawCurveL" #define s_KK_Curve_Raw_R "RawCurveR" #define s_KK_Point_L1 "PointL1" #define s_KK_Point_L2 "PointL2" #define s_KK_Point_R1 "PointR1" #define s_KK_Point_R2 "PointR2" class M_TOOL_DIFFUSION_EXPORT iWxDiffusionSubKK : public iWxDiffusionSub { Q_OBJECT public: explicit iWxDiffusionSubKK(QString sDiffusion, \ QWidget* parent = 0); ~iWxDiffusionSubKK(); // 初始化 virtual void initUI(); // 导出导入 virtual bool importOrExport(bool bImport); // 当主窗体相态发生改变时的处理(主+次,其中次为组合,需要解析) virtual void freshOnPhaseChanged(QMap& map); /// @brief 获取 Diffusion页面中,某个参数的具体数值 /// @param sPara,参数,英文标识而且大小写敏感 /// @param d,返回的结果 /// @note 主要是左侧属性页上的各项的数据,参照xml定义进行读取 virtual bool getDiffParaOf(QString sPara, double& d); /// @brief 获取 Diffusion页面中,计算结果,基本上就是右侧对应表格的数据 /// @param vvec,返回数据,即计算结果,与右侧表格对应 virtual bool getDiffRstOf(VVecDouble& vvec); protected: // 标识 virtual void configLabels(); virtual void resetAllTags(); virtual void resetMembers(); virtual QStringList getTableTitles(); virtual void initUI_Chart(); // 默认值 virtual void initDefault(); // 返回数据 virtual bool getParaValue(QString sPara, double &dValue, QString sUnitDest = ""); virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); protected: // 算法相关 virtual bool makesureAlg(); virtual bool configAlg(); // 组织初始x数值 virtual VecDouble defaultInputs(); virtual double defaultScaleMax(); virtual double defaultScaleMin(); virtual int defaultInputCount(); // 数据刷新相关(表格+图形) virtual void refreshRstCharts(VVecDouble& vvec); virtual void _refreshRstCurves(iGuiPlot* pWxPlot, VVecDouble& vvec, bool bClearAll = true); virtual void _refreshRstPoints(iGuiPlot* pWxPlot, VVecDouble& vvec); virtual void _refreshRawCurves(iGuiPlot* pWxPlot); virtual void _recalPtBounds(iGuiPlot* pWxPlot); virtual void clearChart(iGuiPlot* pWxPlot, bool bClearAll = true); //false时,只清空曲线不清空点 // 返回指定的绘图对象体 virtual iGuiPlot* getWxPlotOf(int n = 0); // 对于表格输入后的处理 virtual void refreshTableAbouts(VVecDouble& vvec); virtual bool makesureTableInputs(VVecDouble& vvec); bool parseFirstAndLast(VVecDouble& vvec, int& n1, int& n2); bool organizePara2Map(VVecDouble& vvec, int& n1, int& n2, \ QMap& map); bool appendDataWithUser(QMap& map); void forceUpdateGridPty(QMap& map); void forceUpdateTableData(VVecDouble& vvec, int& n1, int& n2, \ QMap& map); // 重新计算兄弟节点位置 virtual void _refreshRstPointBrother(iGuiPlot* pWxPlot, \ VVecDouble& vvec, \ QStringList& listNames); QPointF _getRstPointOf(iGuiPlot* pWxPlot, \ VVecDouble& vvec, QString sPointTag); // 调用算法 virtual bool calRstByGridPty(VVecDouble& vvec); /// @brief 根据dX/dY(左侧/右侧的第二个点),反算求解指数 /// @param dIndex求解的指数 /// @param dX,dY 点通常指的是鼠标移动后对应的数值点 /// @param bL(左侧还是右侧) virtual bool inversCalIndexBy(double& dIndex, \ double dX, double dY, \ bool bL); // 曲线基础操作 // 配置曲线 void configCurveDecs(iCurveDesc* pDesc, \ QString sName, QColor clr, \ VecDouble& x, VecDouble& y, \ bool bLineVisible = true, bool bPtVisible = false); // 添加曲线 virtual bool addCurveBy(iGuiPlot* pWxPlot, VecPointF& vecFts, QString sName, \ bool bLineVisible = true, bool bPtVisible = false, \ QColor clr = QColor(), bool bUseY2 = false); virtual bool addCurveBy(iGuiPlot* pWxPlot, VecDouble& x, VecDouble& y, QString sName, \ bool bLineVisible = true, bool bPtVisible = false, \ QColor clr = QColor(), bool bUseY2 = false); // 移除指定曲线 virtual void removeCurveOf(iGuiPlot* pWxPlot, QString sName); // 获取曲线名称 QString getCurveNameOf(iGuiPlot* pWxPlot, int nIndexName); // 对图形进行最后调整 virtual void adjustPlots(iGuiPlot* pWxPlot, bool bForceLineVisible = false); // 根据当前的Plot查看对应的Helper iTagHelper* checkPlotHelper(iGuiPlot* pWxPlot); private slots: // 点移动 void slotObjPtsChanged(); private: Ui::iWxDiffusionSubKK *ui; protected: iTagHelper m_oTag1; iTagHelper m_oTag2; };