同事负责的项目中会扫描硬件中的某个东西是否存在因此老板希望对这些扫描结果能有个图像画的介面可以查看
因此做了个小工具可读取同事提供的数据并将其视觉化显示
那显示扫描结果最容易的就是示波器了但第三方控件的示波器功能又太繁琐最终就决定自己做个简单的
反正对我来说用GDI来绘制跟花时间去研究没用过的第三方控件时间也不会差太多
思路
首先是上面那块横线通常表示高值
第二块是下面那块横线表示低直
第三部分就是连结垂直的线
高度的运算我是用最简单的方式将一个UC的高度直接除当做中心y座标
表示高点的则是中心y座标往上高度/的位置
表示低点的则是中心y座标往下高度/的位置
示波器的部份则是先把头尾的线去掉然后再将数据拆分成两个部分
一个部分是高点要绘制的座标另一部分是低点要绘制的座标
有了这两个座标就同时可以绘制垂直的线了
比例上则是使用示波器的值以及这个控件的宽度做比例上的调整
代码
[csharp]
int max = m_mappingDatas[m_mappingDatasCount ];
m_Ratio = (max + m_mappingDatas[]*) / m_width;
// Draw Wafer data
for (int i = j = ; i < m_mappingDatasCount; i+= j++)
{
float xStart = m_mappingDatas[i ];
float xEnd = m_mappingDatas[i];
graphicsDrawLine(pen xStart / m_Ratio m_yPositionOfWafer
xEnd / m_Ratio m_yPositionOfWafer)
graphicsDrawString((j+)ToString() ControlDefaultFont brush
(xStart / m_Ratio) m_yPositionOfNoWafer + )
}
// Draw No Wafer data
graphicsDrawLine(pen m_yPositionOfNoWafer
m_mappingDatas[] / m_Ratio m_yPositionOfNoWafer)
for (int i = ; i < m_mappingDatasCount; i += )
{
float xStart = m_mappingDatas[i ];
float xEnd = m_mappingDatas[i];
graphicsDrawLine(pen xStart / m_Ratio m_yPositionOfNoWafer
xEnd / m_Ratio m_yPositionOfNoWafer)
}
graphicsDrawLine(pen m_mappingDatas[m_mappingDatasCount ] / m_Ratio m_yPositionOfNoWafer
m_width m_yPositionOfNoWafer)
// Draw vertical line
for (int i = ; i < m_mappingDatasCount; i += )
{
float X = m_mappingDatas[i ];
float X = m_mappingDatas[i];
graphicsDrawLine(pen X / m_Ratio m_yPositionOfWafer
X / m_Ratio m_yPositionOfNoWafer)
graphicsDrawLine(pen X / m_Ratio m_yPositionOfWafer
X / m_Ratio m_yPositionOfNoWafer)
}
在我的代码中是要扫描半导体晶圆所以高点是表示有晶圆低点则是表示没有晶圆