📄 realtime.h
字号:
/**
* 曲线图中Y轴上每单位对应的刻度数
**/
double m_nUnitsPerCycle;
/**
* y轴滚动条对应的数值最小值
**/
double m_dYMin;
/**
* y轴滚动条对应的数值最大值
**/
double m_dYMax;
public:
/**
* y轴滚动的页数
**/
int m_nYPages;
/**
* 候选值(单位时间刻度所对应的间隔值)数组
**/
DWORD m_SpeedLevel[14];
/**
* 候选值(Y轴上单位刻度所对应的间隔值)数组
**/
double m_gapLevel[10];
/**
* 曲线图中显示页X轴上的刻度数
**/
int m_nXTicks;
/**
* 曲线图中X轴上大刻度所包含的小刻度数
**/
int m_nXTicksInLarge;
/**
* 曲线图中显示页Y轴上的刻度数
**/
int m_nYTicks;
/**
* 曲线图中Y轴上大刻度所包含的小刻度数(要求1 < m_nYTicksInLarge < m_nYTicks)
**/
int m_nYTicksInLarge;
/**
* 网格显示类型
* (NOGRID:无网格,BIGGRID:每条网格线对应一个大刻度,SMALLGRID:每条网格线对应一个小刻度)
**/
enum CGridType{ NOGRID, BIGGRID, SMALLGRID };
/**
* 网格显示样式
**/
CGridType m_nGridShow;
/**
* 辅助图绘制重绘标志
**/
bool m_redrawFlag;
/**
* 辅助图绘制控制标志
**/
bool m_bControl;
/**
* 曲线图每次滚动的刻度数
**/
int m_nOffset;
/**
* 曲线图每次滚动的刻度数
**/
int m_nYOffset;
/**
* 曲线图中当前显示页中最大刻度在所在页中对应的刻度索引
* (相对于曲线图当前页,0 <= m_nTick < m_nXTicks)
**/
int m_nTick;
/**
* 曲线图当前页的的页索引(以0开始)
**/
int m_nPage;
/**
* 曲线图的总页数
**/
int m_nMaxPages;
/**
* 曲线图中曲线数组
**/
CArray<CALine, CALine&> m_cLines;
/**
* 曲线图中当前绘制曲线指针
**/
CALine *m_pCurLine;
private:
public:
/**
* 获取曲线图中可编辑曲线
* @param 无
* @return 可编辑曲线索引(-1表示无可编辑曲线)
**/
int GetEditCurve(){ return nEditLIndex; }
/**
* 设置曲线图中可编辑曲线
* @param
* @nIndex 可编辑曲线索引
* @return 无
**/
void SetEditCurve(int nIndex){ nEditLIndex = nIndex; }
/**
* 准备编辑当前可编辑曲线在当前显示页中的部分
* @param
* @pView 绘制曲线图的视图指针
* @point 鼠标光标的坐标(设备坐标)
* @return 无
**/
void PrepareEdit(CView *pView, CPoint point);
/**
* 正在编辑当前可编辑曲线在当前显示页中的部分
* @param
* @pView 绘制曲线图的视图指针
* @point 鼠标光标的坐标(设备坐标)
* @return 无
**/
bool DoEditing(CView *pView, CPoint point);
/**
* 结束编辑当前可编辑曲线在当前显示页中的部分
* @param
* @pView 绘制曲线图的视图指针
* @point 鼠标光标的坐标(设备坐标)
* @return 无
**/
void FinishEditing(CView *pView, CPoint point);
/**
* 设置X轴刻度属性
* @param
* @XTicks X轴一页的刻度数
* @XTicksInLarge X轴大刻度所包含的小刻度数
* @return
* true:设置成功,false:设置失败
**/
bool SetXAxis(int XTicks, int XTicksInLarge);
/**
* 设置Y轴刻度属性
* @param
* @YTicks Y轴一页的刻度数
* @YTicksInLarge Y轴大刻度所包含的小刻度数
* @return
* true:设置成功,false:设置失败
**/
bool SetYAxis(int YTicks, int YTicksInLarge);
/**
* 设置当前要显示的字符串排列方式
* @param
* @x 水平排列方式
* @y 垂直排列方式
* @return 无
**/
void SetStringAlign(CTextAlign x, CTextAlign y){ m_strAlign.HAlign = x; m_strAlign.VAlign = y; }
/**
* 获取绘制准备状态
* @param 无
* @return
* true:准备就绪
* false:未准备好
**/
bool IsPrepared(){ return m_bPrepared; }
/**
* 获取曲线图中是否有数据
* @param 无
* @return
* true:无数据
* false:有数据
**/
bool IsNull(){ return m_nMaxTime == 0; }
/**
* 设置曲线图滚动方式
* @param
* @flag(true:向前滚动,false:向后滚动)
* @return 无
**/
void SetForward(bool flag){ m_bForward = flag; }
bool InitialSetting(int XTicks, int XTicksInLarge, int YTicks,
int YTicksInLarge, DWORD SecsPerCycle, double ymin, double UnitsPerCycle);
/**
* 调整X刻度比例设置
* @param
* @nUnitsPerCycle 每刻度所对应刻度值
* @nMax X轴当前总刻度数
* @return true:调整成功,false:调整失败
**/
bool AdjustXSetting(double nUnitsPerCycle, int& nMax, int& nPos);
/**
* 调整Y刻度比例设置
* @param
* @nUnitsPerCycle 每刻度所对应刻度值
* @return true:调整成功,false:调整失败
**/
bool AdjustYSetting(double nUnitsPerCycle);
/**
* 准备缩略图
**/
void PrepareSketch(double& XUnits, double& YUnits);
/**
* 绘制背景色
* @param
* @pDC 绘制背景色的设备环境指针
* @rt 绘制背景色的区域矩形
* @return 无
**/
void DrawBkGround(CDC *pDC,CRect &rt);
/**
* 设置曲线图绘制区与曲线图客户区的比例信息
* @param
* @xmin:曲线图绘制区最左侧与曲线图客户区最左侧的距离占曲线图客户区宽度的比率(0<xmin<xmax)
* @ymin:曲线图绘制区最上侧与曲线图客户区最上侧的距离占曲线图客户区高度的比率(0<ymin<ymax)
* @xmax:曲线图绘制区最右侧与曲线图客户区最左侧的距离占曲线图客户区宽度的比率(xmin<xmax<1)
* @ymax:曲线图绘制区最下侧与曲线图客户区最上侧的距离占曲线图客户区高度的比率(ymin<ymax<1)
**/
bool SetRatio(double xmin, double ymin, double xmax, double ymax);
/**
* 获取曲线图绘制区矩形
* @param
* @rt 曲线图绘制区矩形
* @return 无
**/
void GetPixelRect(RECT& rt);
/**
* 设置曲线图绘制区矩形
* @param
* @rt 曲线图绘制区矩形
* @return 无
**/
void SetPixelRect(RECT& rt);
/**
* 设置曲线图当前显示页中的X刻度值范围
* @param
* @xmin 当前显示页中X轴最小刻度值(0<=xmin<xmax)
* @xmax 当前显示页中X轴最大刻度值(xmin<xmax)
* @return
* true:设置成功
* false:设置失败
**/
bool SetXRange(double xmin, double xmax);
/**
* 设置曲线图当前显示页中的Y刻度值范围
* @param
* @ymin 当前显示页中Y轴最小刻度值(ymin<ymax)
* @ymax 当前显示页中Y轴最大刻度值(ymin<ymax)
* @return
* true:设置成功
* false:设置失败
**/
bool SetYRange(double ymin, double ymax);
/**
* 设置曲线图当前显示页中的刻度值范围
* @param
* @xmin 当前显示页中X轴最小刻度值(0<=xmin<xmax)
* @xmax 当前显示页中X轴最大刻度值(xmin<xmax)
* @ymin 当前显示页中Y轴最小刻度值(ymin<ymax)
* @ymax 当前显示页中Y轴最大刻度值(ymin<ymax)
* @return
* true:设置成功
* false:设置失败
**/
bool SetRange(double xmin, double ymin, double xmax, double ymax);
/**
* 重新计算曲线图绘制中各区域矩形
* @param
* @rt 曲线图绘制区矩形
* @return 无
**/
void RecalcRects(CRect &rt);
/**
* 获取X轴滚动条尺寸
* @param 无
* @return X轴滚动条尺寸
**/
CRect XScrollBarSize();
/**
* 获取Y轴滚动条尺寸
* @param 无
* @return Y轴滚动条尺寸
**/
CRect YScrollBarSize();
/**
* 准备绘制曲线图
* @param
* @pDC 绘制曲线图的设备环境指针
* @rt 曲线图客户区矩形
* @return
* true:准备就绪
* false:未准备好
**/
bool DoPrepare(CDC *pDC, CRect& rt);
/**
* 绘制字符串
* @param
* @x 显示位置x坐标
* @y 显示位置y坐标
* @theta 字符串偏转角度(以角度表示)
* @fmt 绘制字符串指针
* @return 无
**/
void PrintString(int x, int y, int theta, const char* fmt);
/**
* 绘制时间轴刻度值
* @param
* @x 显示位置x坐标
* @y 显示位置y坐标
* @sec 刻度值,时间(单位:毫秒)
* @return 无
**/
void DrawXAxisTimeTicks(int x, int y, DWORD sec);
/**
* 绘制曲线图中采样数据对应的最晚时间和采样总时间及X轴标题
* @param 无
* @return 无
**/
void PrintTime();
/**
* 显示时间
* @param
* @x 显示位置x坐标
* @y 显示位置y坐标
* @Tag 时间名称字符串指针
* @cTime 显示时间(单位:毫秒)
* @return 无
**/
void ShowTime(int x, int y, const char* Tag, DWORD cTime);
/**
* 绘制X轴及相关信息
* @param
* @pDC 绘制曲线图的设备环境指针
* @return 无
**/
// void XAxis(CDC *pDC);
void XAxis();
/**
* 绘制Y轴及相关信息
* @param
* @pDC 绘制曲线图的设备环境指针
* @return 无
**/
void YAxis();
/**
* 绘制坐标平面背景
**/
void DrawPlot();
/**
* 绘制曲线图框架及相关信息
* @param
* @pDC 绘制曲线图的设备环境指针
* @return 无
**/
void DrawFrame(CDC *pDC);
/**
* 刷新曲线图
* @param
* @pDC 绘制曲线图的设备环境指针
* @return 无
**/
void RefreshGraph(CDC* pDC);
/**
* 判断当前曲线中连接第index个采样点与第index+1个采样点的线段是否有部分落在当前页中,
* 若有则计算该部分的端点坐标。
* @param
* @index 线段起始端点在曲线中对应的索引
* @x1 输出线段落在当前页中的部分的起始端点的x坐标(若返回值为false,则此值无效)
* @y1 输出线段落在当前页中的部分的起始端点的y坐标(若返回值为false,则此值无效)
* @x2 输出线段落在当前页中的部分的终止端点的x坐标(若返回值为false,则此值无效)
* @y2 输出线段落在当前页中的部分的终止端点的x坐标(若返回值为false,则此值无效)
* @return
* true:当前曲线中连接第index个采样点与第index+1个采样点的线段有落在当前页中的部分,
* false:当前曲线中连接第index个采样点与第index+1个采样点的线段无落在当前页中的部分
**/
bool CalPoint(int index, double& x1, double& y1, double& x2, double& y2);
/**
* 修正函数
* @param
* @ax1 修正x参考值1
* @ay1 修正y参考值1
* @ax2 修正x参考值2
* @ay2 修正y参考值2
* @x1 采样点1对应时间值
* @y1 采样点1对应采样值
* @x2 采样点2对应时间值
* @y2 采样点2对应采样值
* @return (true:修正成功,false:修正失败)
**/
bool Correct(double ax1, double ay1, double ax2, double ay2, double& x1, double& y1, double& x2, double& y2);
/**
* 向曲线图中添加新的采样曲线
* @param
* @sName 曲线名
* @nInterval 采样间隔
* @nColor 曲线颜色
* @sDes 曲线描述信息
* @sUnit 曲线中采样值的单位
* @dLow 曲线中各采样点对应的Y坐标值范围下限
* @dHigh 曲线中各采样点对应的Y坐标值范围上限
* @nStyle 曲线风格
* @nWidth 曲线宽度
* @return 无
**/
void AddLine(const CString sName, DWORD nInterval = 1000, COLORREF nColor = RGB(255, 0, 0),/*亮红色*/
const CString sDes = "N/A", const CString sUnit = "N/A", double dLow = 0, double dHigh = 100,
int nStyle = PS_SOLID, int nWidth = 0);
/**
* 实时绘制时向曲线图中加入采样数据
* @param
* @dValue 采样数据
* @return 无
**/
void AddValue(int i, double dValue);//SPLINEDATA pkg);
/**
* 在实时辅助图中重绘最后一页
* @param 无
* @return 无
**/
void RestoreRealDraw();
/**
* 结束实时绘制
* @param 无
* @return 无
**/
void EndRealDraw();
protected:
/**
* 绘制曲线
* @param
* @pDC 绘制曲线图的设备环境指针
* @bFlag true:正常绘制,false:非正常绘制(用于实时恢复)
* @return 无
**/
void DrawSplineCurve(CDC* pDC, bool bFlag = true);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -