.NET示波器控件的實(shí)例代碼分析
緣起
同事負(fù)責(zé)的項(xiàng)目中,會(huì)掃描硬件中的某個(gè)東西是否存在,因此老板希望對(duì)這些掃描結(jié)果,能有個(gè)圖像畫的介面可以查看
因此做了個(gè)小工具,可讀取同事提供的數(shù)據(jù),并將其視覺(jué)化顯示
那顯示掃描結(jié)果最容易的就是示波器了,但第三方控件的示波器功能又太繁瑣,最終就決定自己做個(gè)簡(jiǎn)單的
反正對(duì)我來(lái)說(shuō)用GDI來(lái)繪制,跟花時(shí)間去研究沒(méi)用過(guò)的第三方控件,時(shí)間也不會(huì)差太多
思路
如圖所示,示波器其實(shí)就是這樣簡(jiǎn)單的圖
整體思路其實(shí)很單純,就把一個(gè)示波器分成三個(gè)部分來(lái)繪制.
首先是上面那塊橫線,通常表示高值
第二塊是下面那塊橫線,表示低直
第三部分就是連結(jié)垂直的線
高度的運(yùn)算,我是用最簡(jiǎn)單的方式,將一個(gè)UC的高度直接除2,當(dāng)做中心y座標(biāo)
表示高點(diǎn)的則是中心y座標(biāo)往上,高度/5的位置
表示低點(diǎn)的則是中心y座標(biāo)往下,高度/5的位置
示波器的部份,則是先把頭尾的線去掉,然后再將數(shù)據(jù)拆分成兩個(gè)部分
一個(gè)部分是高點(diǎn)要繪制的座標(biāo),另一部分是低點(diǎn)要繪制的座標(biāo)
有了這兩個(gè)座標(biāo),就同時(shí)可以繪制垂直的線了
比例上則是使用示波器的值,以及這個(gè)控件的寬度做比例上的調(diào)整
代碼
int max = m_mappingDatas[m_mappingDatas.Count - 1];
m_Ratio = (max + m_mappingDatas[0]*2) / m_width;
// Draw Wafer data
for (int i = 1, j = 0; i < m_mappingDatas.Count; i+=2 ,j++)
{
float xStart = m_mappingDatas[i - 1];
float xEnd = m_mappingDatas[i];
graphics.DrawLine(pen, xStart / m_Ratio, m_yPositionOfWafer,
xEnd / m_Ratio, m_yPositionOfWafer);
graphics.DrawString((j+1).ToString(), Control.DefaultFont, brush,
(xStart / m_Ratio) - 2, m_yPositionOfNoWafer + 1);
}
// Draw No Wafer data
graphics.DrawLine(pen, 0, m_yPositionOfNoWafer,
m_mappingDatas[0] / m_Ratio, m_yPositionOfNoWafer);
for (int i = 2; i < m_mappingDatas.Count; i += 2)
{
float xStart = m_mappingDatas[i - 1];
float xEnd = m_mappingDatas[i];
graphics.DrawLine(pen, xStart / m_Ratio, m_yPositionOfNoWafer,
xEnd / m_Ratio, m_yPositionOfNoWafer);
}
graphics.DrawLine(pen, m_mappingDatas[m_mappingDatas.Count - 1] / m_Ratio, m_yPositionOfNoWafer,
m_width, m_yPositionOfNoWafer);
// Draw vertical line
for (int i = 1; i < m_mappingDatas.Count; i += 2)
{
float X1 = m_mappingDatas[i - 1];
float X2 = m_mappingDatas[i];
graphics.DrawLine(pen, X1 / m_Ratio, m_yPositionOfWafer,
X1 / m_Ratio, m_yPositionOfNoWafer);
graphics.DrawLine(pen, X2 / m_Ratio, m_yPositionOfWafer,
X2 / m_Ratio, m_yPositionOfNoWafer);
}
在我的代碼中,是要掃描半導(dǎo)體晶圓,所以高點(diǎn)是表示有晶圓,低點(diǎn)則是表示沒(méi)有晶圓
項(xiàng)目下載
相關(guān)文章
asp.net Execl的添加,更新操作實(shí)現(xiàn)代碼
asp.net Execl的添加、修改等實(shí)現(xiàn)代碼。2009-02-02
詳解ASP.NET Core WebApi 返回統(tǒng)一格式參數(shù)
這篇文章主要介紹了詳解ASP.NET Core WebApi 返回統(tǒng)一格式參數(shù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
asp.net頁(yè)面觸發(fā)事件panel滾動(dòng)條高度不變的實(shí)現(xiàn)方法
asp.net頁(yè)面按鈕點(diǎn)擊觸發(fā)事件后panel滾動(dòng)條非自動(dòng)回到頂端,每次都要往下拉一下,關(guān)于這個(gè)問(wèn)題的解決方法如下2014-11-11
ASP.NET MVC學(xué)習(xí)教程之Razor語(yǔ)法
這篇文章主要給大家介紹了關(guān)于ASP.NET MVC學(xué)習(xí)教程之Razor語(yǔ)法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
ADO.NET中的五個(gè)主要對(duì)象的詳細(xì)介紹與應(yīng)用
ADO.NET中的五個(gè)主要對(duì)象:Connection、Command、DataAdapter DataSet、DataReader詳細(xì)介紹與應(yīng)用,感興趣的朋友可以參考下2012-12-12
asp.net上傳圖片并作處理水印與縮略圖的實(shí)例代碼
asp.net 上傳圖片并作處理(生成縮略圖 、在圖片上增加文字水印、在圖片上生成圖片水?。┑膶?shí)例代碼,經(jīng)過(guò)測(cè)試!2013-06-06
.NET?如何使用?OpenTelemetry?metrics?監(jiān)控應(yīng)用程序指標(biāo)
這篇文章主要介紹了.NET?使用?OpenTelemetry?metrics?監(jiān)控應(yīng)用程序指標(biāo),通過(guò)代碼演示了如何通過(guò) OpenTelemetry 把 Metrics 的數(shù)據(jù)發(fā)送到 Prometheus 里進(jìn)行查詢與展示,然后又演示了自定義相關(guān)指標(biāo)來(lái)滿足業(yè)務(wù)數(shù)據(jù)指標(biāo)的監(jiān)控,需要的朋友可以參考下2024-06-06

