日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]在工控監(jiān)測領(lǐng)域,經(jīng)常需要動態(tài)繪制曲線,觀察曲線的變化趨勢,繪制波形圖,繪制頻譜等。在前面4講中介紹了MFC經(jīng)常用的TeeChart控件和Hight-Speed Chart?Ctrl,這兩個都是MFC

在工控監(jiān)測領(lǐng)域,經(jīng)常需要動態(tài)繪制曲線,觀察曲線的變化趨勢,繪制波形圖,繪制頻譜等。在前面4講中介紹了MFC經(jīng)常用的TeeChart控件和Hight-Speed Chart?Ctrl,這兩個都是MFC繪圖控件的經(jīng)典(另外,在Qt中還有QwtPlot和QCustomPlot兩大神器)。許多人問如何繪制動態(tài)變化的曲線,為此專門寫下這篇文章。



C++ GUI 繪圖控件目錄

MFC(VC)


VS2010 使用TeeChart繪圖控件 - 之一 - 控件和類的導(dǎo)入VS2010 使用TeeChart繪圖控件 - 之二 - 繪制圖形(折線圖,柱狀圖)TeeChart繪圖控件 - 之三 - 提高繪圖的效率MFC下好用的高速繪圖控件-(Hight-Speed Charting)繪制動態(tài)曲線


Qt


qt超強精美繪圖控件 - QCustomPlot一覽qt超強繪圖控件qwt - 安裝及配置









對于任何繪圖控件,都可以實現(xiàn)動態(tài)繪圖,其原則是:控件只負(fù)責(zé)繪圖,若想曲線動,就讓數(shù)據(jù)動,就像看電影一樣,電影是由一幀一幀的靜態(tài)圖片組合起來的,在一定速度上刷新,靜態(tài)圖片就能動起來;和電影的原理一樣,繪圖控件能顯示靜態(tài)的曲線,想要它動起來,就讓它頻在一定時間刷新就可以了。

這就是動態(tài)繪圖的實現(xiàn)原理。

實現(xiàn)動態(tài)曲線需要以下兩個準(zhǔn)備:


計時器Timer數(shù)組左移


基于Timer的繪圖

任何界面庫都會有Timer這個實現(xiàn),在MFC中時OnTimer消息,在Qt中是QTimer類,那種原理基本都一樣,下面將以MFC(VC)為例進行說明。

Timer是消息級別最低的消息,它會保證其它級別高的消息優(yōu)先執(zhí)行,因此,就算數(shù)據(jù)大量刷新,也不會影響主線程的其它消息。

MFC生成OnTimer消息,消息響應(yīng)函數(shù)如下:


void?CTeeChartDlg::OnTimer(UINT_PTR?nIDEvent)
{
	//?TODO:?在此添加消息處理程序代碼或調(diào)用默認(rèn)值
	CDialogEx::OnTimer(nIDEvent);
}


繪圖的實現(xiàn)就在這個消息響應(yīng)函數(shù)里


如果讓定時器設(shè)定為1秒觸發(fā),每一秒把舊數(shù)據(jù)去除,繪制新數(shù)據(jù),就能看到不停變換的波形;對于趨勢圖,假如每秒有一個新數(shù)據(jù),那么就在定長數(shù)組中,把數(shù)組所有數(shù)據(jù)整體左移,同時數(shù)組末端加入新數(shù)據(jù)。代碼如下:


///?
///?brief?左移數(shù)組
///?param?ptr?數(shù)組指針
///?param?data?新數(shù)值
///
void?LeftMoveArray(double*?ptr,size_t?length,double?data)
{
	for?(size_t?i=1;i<length;++i)
	{
		ptr[i-1]?=?ptr[i];
	}
	ptr[length-1]?=?data;
}

此函數(shù)把整個數(shù)組左移,然后新數(shù)據(jù)放置在數(shù)組最末端(右端)。


這樣,數(shù)組就實現(xiàn)“向左運動”,把左移后的數(shù)組繪制,就能在繪圖控件上發(fā)現(xiàn)其變化。

下面開始實現(xiàn)動態(tài)繪圖(這里演示TeeChart的方法,附件里有HightSpeed-Chart CChartCtrl的方法):


void?CTeeChartDlg::OnBnClickedButtonRuning()
{
	KillTimer(0);
	ZeroMemory(&m_TeeChartArray,sizeof(double)*m_c_arrayLength);
	for?(size_t?i=0;iClearSerie();
	SetTimer(0,1000,NULL);	
}

函數(shù)中幾個成員變量的定義是:



	double?m_TeeChartArray[2096];
	double?m_X[2096];
	unsigned?int?m_count;
	const?size_t?m_c_arrayLength?=?2096;

m_TeeChartArray是需要繪制的數(shù)組的Y值,m_X是對應(yīng)的x值,m_count是計數(shù)器,每繪制一次,個數(shù)加1,主要用于x軸

在timer中的實現(xiàn)如下:


void?CTeeChartDlg::OnTimer(UINT_PTR?nIDEvent)
{
	//?TODO:?在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值
	if(0?==?nIDEvent)
	{
		++m_count;
		drawMoving();
	}
	CDialogEx::OnTimer(nIDEvent);
}


drawMoving函數(shù)用于繪圖,timer設(shè)定為1秒觸發(fā)一次,這時就能看到每秒的變化,如果數(shù)據(jù)是以1秒為刷新周期,每一秒有個新數(shù)據(jù),只需要把舊的數(shù)據(jù)向左移,新數(shù)據(jù)放到數(shù)組最右端,再在繪圖控件上把此圖形畫出來即可看的像動一樣。


drawMoving函數(shù)的實現(xiàn)如下:


void?CTeeChartDlg::drawMoving()
{
	CSeries?chart_T?=?(CSeries)m_Chart.Series(0);
	chart_T.Clear();
	m_pLineSerie->ClearSerie();
	LeftMoveArray(m_TeeChartArray,m_c_arrayLength,randf(0,10));
	LeftMoveArray(m_X,m_c_arrayLength,m_count);
	DrawLine_TeeChart(m_X,m_TeeChartArray,m_c_arrayLength);
}


前面說過timer是優(yōu)先級最低的消息,如果想曲線動的流暢,可以把時鐘設(shè)置為0ms,如



SetTimer(0,0,NULL);	

這時會在保證界面流暢的前提下,以最高頻率刷新。這樣看到的圖形會非常流暢。


上面介紹的就是動態(tài)繪制曲線的思路和方法,附件中有用TeeChart實現(xiàn)和HightSpeedChart實現(xiàn)的例子,考慮到可能有些人沒有安裝TeeChart,專門把TeeChart分離出來了一個源碼,只有HightSpeedChart,不需要安裝任何控件。


demo1:

MFC下TeeChart和HightSpeedChart動態(tài)繪制曲線圖-VS2010

demo2(不用安裝任何控件):

MFC動態(tài)繪制曲線圖-HightSpeedChart實現(xiàn)


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

納祥科技推出太陽能+Type-C雙充電自行車前燈方案,方案核心模塊包含太陽能板、單片機、三極管、3顆LED燈珠與1200mAh電池,通過低功耗單片機與三極管驅(qū)動,支持強光/弱光/爆閃3種模式,高流明遠(yuǎn)射程,適配多種車型

關(guān)鍵字: 方案開發(fā) 電子方案 自行車前燈方案 納祥科技

慕尼黑2025年9月11日 /美通社/ -- 當(dāng)?shù)貢r間9月9日,賽力斯動力在德國慕尼黑國際車展期間舉辦技術(shù)發(fā)布與交流會,正式在海外市場推出全新一代賽力斯超級增程、高效發(fā)動機和新一代分布式電驅(qū)動系統(tǒng),同時與來自全球的汽車產(chǎn)...

關(guān)鍵字: 慕尼黑 分布式 發(fā)動機 新能源汽車

慕尼黑2025年9月11日 /美通社/ -- 高端智能電動汽車品牌問界(AITO)在2025年德國國際汽車及智慧出行博覽會(IAA MOBILITY)上,正式發(fā)布了其最新全球產(chǎn)品陣容——專為中東市場深度本地化打造的AIT...

關(guān)鍵字: AI 智能駕駛 測試 生態(tài)系統(tǒng)

舍弗勒首次為中國頭部車企大規(guī)模生產(chǎn)高壓逆變磚 天津工廠一年內(nèi)完成量產(chǎn)準(zhǔn)備,逆變器模塊性能參數(shù)顯著提升 與合作伙伴羅姆半導(dǎo)體共研尖端碳化硅技術(shù),效率更高、性能更優(yōu) 模塊化可擴展設(shè)計使逆變磚易于集成,可廣泛...

關(guān)鍵字: 逆變 高壓 逆變器 集成

舍弗勒以"專注驅(qū)動技術(shù)的科技公司"為主題亮相IAA MOBILITY 2025(B3館B40展臺) 合并緯湃科技后首次亮相IAA MOBILITY,展示拓展后的汽車產(chǎn)品組合 憑借在軟件、...

關(guān)鍵字: 電氣 軟件 驅(qū)動技術(shù) BSP

拉斯維加斯2025年9月11日 /美通社/ -- 在9月8日至11日舉辦的RE+ 2025展會上,全球綜合儲能解決方案供應(yīng)商德賽電池(Desay Battery)全面展示了其創(chuàng)新成果,并宣布與深圳市華寶新能源股份有限公司...

關(guān)鍵字: 電池 電芯 人工智能 鋰電

香港2025年 9月12日 /美通社/ -- 全球領(lǐng)先的互聯(lián)網(wǎng)社區(qū)創(chuàng)建者 - 網(wǎng)龍網(wǎng)絡(luò)控股有限公司 ("網(wǎng)龍"或"本公司",香港交易所股票代碼:777)欣然宣布,其子公司My...

關(guān)鍵字: AI 遠(yuǎn)程控制 控制技術(shù) BSP

慕尼黑2025年9月12日 /美通社/ -- 慕尼黑當(dāng)?shù)貢r間9月10日,在2025德國國際汽車及智慧出行博覽會(IAA MOBILITY)上,國際獨立第三方檢測、檢驗和認(rèn)證機...

關(guān)鍵字: 測試 慕尼黑 模型 HUBER

上海2025年9月12日 /美通社/ -- 近日,國際獨立第三方檢測、檢驗和認(rèn)證機構(gòu)德國萊茵TÜV大中華區(qū)(簡稱"TÜV萊茵")為上海...

關(guān)鍵字: 測試 信息安全 安全管理 開關(guān)

廣州2025年9月12日 /美通社/ -- 9月11日,由國際獨立第三方檢測、檢驗和認(rèn)證機構(gòu)德國萊茵TÜV大中華區(qū)(簡稱"TÜV萊茵"...

關(guān)鍵字: 數(shù)字化 供應(yīng)鏈 控制 電子
關(guān)閉