You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/mTool/mToolDiffusion/iWxDiffusionSubKK.h

164 lines
5.5 KiB
C

#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;
};