|
|
|
|
|
#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<QString, QVariant>& 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<QString, double>& map);
|
|
|
|
|
|
bool appendDataWithUser(QMap<QString, double>& map);
|
|
|
|
|
|
void forceUpdateGridPty(QMap<QString, double>& map);
|
|
|
|
|
|
void forceUpdateTableData(VVecDouble& vvec, int& n1, int& n2, \
|
|
|
|
|
|
QMap<QString, double>& 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;
|
|
|
|
|
|
|
|
|
|
|
|
};
|