亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        電子測(cè)量?jī)x器通用繪圖模塊設(shè)計(jì)

        2018-04-18 11:33:51鄭恢康
        關(guān)鍵詞:定義測(cè)量信息

        鄭恢康 朱 偉

        (中國(guó)電子科技集團(tuán)公司第四十一研究所 山東 青島 266555)

        0 引 言

        目前很多電子測(cè)量?jī)x器,如示波器、頻譜分析儀、矢量網(wǎng)絡(luò)分析儀等,其測(cè)量結(jié)果以曲線形式進(jìn)行顯示。這些儀器軟件通常包括數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)顯示3部分。動(dòng)態(tài)波形的繪制是測(cè)試儀器中極為重要的一環(huán)[1]。其用于實(shí)現(xiàn)數(shù)據(jù)顯示的繪圖模塊具有較多共通性,含有窗口、多跡線、信息顯示、光標(biāo)等要素。但因繪圖模塊和系統(tǒng)其他部份相互關(guān)聯(lián)(例如:繪圖模塊調(diào)用采集模塊獲得測(cè)量數(shù)據(jù)),且以源碼的形式嵌入整個(gè)系統(tǒng)中,使得繪圖相關(guān)的代碼難以復(fù)用[2]。

        針對(duì)上述設(shè)計(jì)的不足,本文從通用性和復(fù)用性的角度出發(fā),應(yīng)用面向?qū)ο蟮慕M件化軟件設(shè)計(jì)方法,設(shè)計(jì)并實(shí)現(xiàn)了一種通用的繪圖模塊。該模塊基于動(dòng)態(tài)鏈接庫(kù)(DLL)技術(shù),方便地實(shí)現(xiàn)復(fù)用、集成和擴(kuò)展,滿足測(cè)量?jī)x器領(lǐng)域的繪圖需求,提高軟件開(kāi)發(fā)效率。

        1 通用繪圖模塊總體設(shè)計(jì)

        通用繪圖模塊是在Windows下使用Visual Studio 2008開(kāi)發(fā)環(huán)境, C++語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)的,它基于MFC類(lèi)庫(kù)實(shí)現(xiàn)圖形繪制功能。因此,需在開(kāi)發(fā)環(huán)境中創(chuàng)建一個(gè)“MFC常規(guī)DLL”工程,最終經(jīng)編譯得到Dll和Lib文件,與相關(guān)的頭文件一起提供給用戶。

        設(shè)計(jì)通用繪圖模塊有兩個(gè)關(guān)鍵點(diǎn):一是避免模塊依賴于軟件系統(tǒng),使模塊獨(dú)立;二是支持?jǐn)U展繪圖,滿足特殊的繪圖需求。

        為了使模塊獨(dú)立,模塊應(yīng)設(shè)計(jì)成由上層配置、調(diào)用、啟動(dòng)的方式,而減少模塊對(duì)軟件系統(tǒng)的調(diào)用[3]。另外,應(yīng)用面向?qū)ο缶幊桃蕾嚨怪玫脑瓌t[4],使系統(tǒng)與模塊之間不直接依賴于具體實(shí)現(xiàn),而是依賴于接口。

        為支持繪圖擴(kuò)展,應(yīng)用面向?qū)ο缶幊涕_(kāi)閉原則,在模塊內(nèi)實(shí)現(xiàn)共通的、基本的繪圖功能,其他繪圖則通過(guò)繪圖組件的方式進(jìn)行擴(kuò)展實(shí)現(xiàn),使模塊向修改關(guān)閉,向擴(kuò)展開(kāi)放[5]。

        對(duì)于電子測(cè)量?jī)x器領(lǐng)域,基本繪圖任務(wù)就是曲線的繪制,另外該領(lǐng)域通常以光標(biāo)的方式進(jìn)行測(cè)量數(shù)據(jù)的讀取與顯示,這兩部份可作為基本繪圖需求在模塊內(nèi)實(shí)現(xiàn)。而系統(tǒng)功能中涉及到的一些特殊繪圖需求,例如提示信息、參數(shù)設(shè)置框等,可透過(guò)繪圖組件的形式來(lái)實(shí)現(xiàn)。

        基于以上分析,定義以下主要類(lèi):

        (1) 繪圖接口類(lèi)CGraphInterface繪圖模塊對(duì)外提供的訪問(wèn)接口。

        (2) 繪圖類(lèi)CGraph實(shí)現(xiàn)對(duì)跡線、光標(biāo)、繪圖組件的管理。

        (3) 繪圖組件接口CGComponentInf用戶繼承該接口定制繪圖組件,并將指針傳給繪圖類(lèi),由繪圖類(lèi)進(jìn)行繪制。

        (4) 跡線類(lèi)CTrace實(shí)現(xiàn)跡線數(shù)據(jù)及網(wǎng)格等的繪制。

        (5) 光標(biāo)管理類(lèi)CMarkerManager實(shí)現(xiàn)光標(biāo)功能,用于繪制光標(biāo)和光標(biāo)信息,顯示測(cè)量數(shù)值。

        這幾個(gè)主要類(lèi)之間的關(guān)系如圖1所示。

        圖1 繪圖模塊UML類(lèi)圖

        另外,對(duì)于測(cè)量?jī)x器,通常要繪制動(dòng)態(tài)跡線,為了避免繪圖時(shí)閃爍,可采用雙緩沖繪圖技術(shù)[6],在CGraph類(lèi)中實(shí)現(xiàn)。

        2 各功能模塊設(shè)計(jì)

        2.1 跡線繪制模塊

        該模塊完成測(cè)量跡線、坐標(biāo)網(wǎng)格、刻度標(biāo)尺等的繪制,將這些視為跡線的屬性,封裝為CTrace類(lèi)。

        2.1.1CGraph類(lèi)相關(guān)設(shè)計(jì)

        為支持多跡線的繪置,在CGraph類(lèi)組合CTrace類(lèi)的成員變量,CGraph內(nèi)部調(diào)用CTrace接口進(jìn)行跡線相關(guān)圖形繪制,CGraph對(duì)外提供相應(yīng)的接口進(jìn)行跡線相關(guān)配置。

        在CGraph中定義成員變量:

        CList m_pTraceList;//跡線隊(duì)列

        在CGraph中定義跡線操作接口:

        (1) 添加跡線void AddTrace(CArray& data,int nTrID);

        其中data為傳入的繪圖數(shù)據(jù),nTrID為上層為該跡線分配的ID,Graph其他接口通過(guò)該ID對(duì)指定跡線進(jìn)行相關(guān)操作。

        (2) 刪除跡線void DeleteTrace(int nTrID);

        (3) 設(shè)置跡線刻度void SetTraceScale(double fTop,double fBtm,int nTrID);

        (4) 選擇當(dāng)前跡線void SelectCurTrace(int nTrID);

        2.1.2CTrace類(lèi)設(shè)計(jì)

        CTrace類(lèi)主要實(shí)現(xiàn)測(cè)量的數(shù)據(jù)坐標(biāo)轉(zhuǎn)換,以及網(wǎng)格、標(biāo)尺相關(guān)的繪制。

        CTrace類(lèi)定義成員變量,對(duì)原始數(shù)據(jù)和轉(zhuǎn)換后的繪圖數(shù)據(jù)進(jìn)行存放:

        CArray m_dataPoints; //原始數(shù)據(jù)

        CArray m_graphPoints;//繪圖數(shù)據(jù)點(diǎn)

        為支持對(duì)多種的坐標(biāo)格式,應(yīng)用面向?qū)ο缶幊潭鄳B(tài)技術(shù)[7-8],將與坐標(biāo)、及坐標(biāo)轉(zhuǎn)換相關(guān)的函數(shù)定義為虛函數(shù),在CTrace派生類(lèi)中實(shí)現(xiàn)。

        virtual void DrawGrid(CDC* pDC) = 0;

        virtual void DrawScale(CDC* pDC) = 0;

        virtual CPoint CalcOnePoint(double fXVal,

        double fYVal) = 0;//坐標(biāo)轉(zhuǎn)換

        2.2 光標(biāo)功能模塊

        該模塊用于讀取跡線上的數(shù)值。包括光標(biāo)狀態(tài)及位置的設(shè)置、光標(biāo)位置的繪制、光標(biāo)信息的繪制,封裝為CMarker類(lèi)。為支持多個(gè)光標(biāo),定義CMarkerManager類(lèi)對(duì)一組光標(biāo)進(jìn)行管理。由CGraph類(lèi)集合CMarkerManager類(lèi)的成員變量,并由CGraph調(diào)用CMarkerManager相應(yīng)接口實(shí)現(xiàn)光標(biāo)功能。

        2.2.1CGraph提供的光標(biāo)功能配置接口

        (1) 設(shè)置光標(biāo)顯示狀態(tài)void ShowMkr(UINT nMkrID,BOOL bOn);

        (2) 設(shè)置光標(biāo)位置void SetMkrPos(UINT nMkrID,UINT nPos);

        (3) 光標(biāo)信息接口void SetMkrInfoInterface(CMkrInfoInterface* pInf);

        由于光標(biāo)信息的格式是因項(xiàng)目而異,因此定義通用的光標(biāo)信息接口,由CGraph的使用者進(jìn)行實(shí)現(xiàn),并配置給CGraph。繪圖模塊在繪置光標(biāo)信息時(shí),調(diào)用該接口,以獲得要顯示的光標(biāo)信息。

        CMrkInfoInterface定義接口:

        void GetMkrInfo(

        UINT nMkrID, //光標(biāo)ID

        UINT nMkrPos,//光標(biāo)位置

        double data[2], //數(shù)值

        int nTraId, //跡線ID

        CStringArray& infoAry, //光標(biāo)信息

        CWordArray& widthAry//光標(biāo)信息區(qū)域劃分

        );

        2.2.2CMarkerManager類(lèi)設(shè)計(jì)

        該類(lèi)定義一組的光標(biāo)類(lèi)CMarker成員變量,并提供對(duì)指定光標(biāo)進(jìn)行設(shè)置的接口。

        CMarkerManager定義成員變量:

        static enum {MKR_NUM = 6};//光標(biāo)個(gè)數(shù)

        CTrace* m_pTrace; //關(guān)聯(lián)跡線

        CMarker m_mkrs[MKR_NUM]; //光標(biāo)

        CMkrInfoInterface* m_pInfoInf;// 光標(biāo)信息接口

        CMarkerManager提供的接口主要有:

        void DrawMkrs(CDC* pDC);

        void DrawMkrsInfo(CDC* pDC,CRect& rect);

        void AssociateToTrace(CGTrace* pTrace);

        void SetMkrInfoInterface(CMkrInfoInterface* pInf);

        2.2.3CMarker類(lèi)設(shè)計(jì)

        該類(lèi)實(shí)現(xiàn)對(duì)單個(gè)光標(biāo)位置、狀態(tài)、繪制的封裝。

        CMarker類(lèi)定義成員變量:

        BOOL m_bOn;//光標(biāo)狀態(tài)

        UINT m_nPos;//光標(biāo)位置

        CMarker類(lèi)提供的接口主要有:

        void DrawMkr(CDC* pDC,CPoint pt);

        void DrawMkrInfo(CDC* pDC,

        CArray& rect,

        CStringArray& strInfo);

        void SetPos(UINT nDataIdx);

        2.3 信息區(qū)配置

        該模塊用于配制繪圖區(qū)頂部和底部的顯示信息。由CGraph類(lèi)實(shí)現(xiàn)信息區(qū)的劃分,通過(guò)位置索引的方式來(lái)確定顯示的位置,在CGraph類(lèi)中實(shí)現(xiàn)對(duì)該信息的繪制。

        定義結(jié)構(gòu)體對(duì)信息內(nèi)容和位置進(jìn)行綁定:

        typedef struct _XGraphInfo

        {

        CString strText; //信息區(qū)顯示內(nèi)空

        UINT nRowIdx; //信息區(qū)位置橫向索引

        UINT nColumIdx;//信息區(qū)位置縱向索引

        }XGraphInfo;

        在CGraph類(lèi)中,定義下列成員變量存放頂部和底部信息區(qū)劃分:

        UINT m_nTopInfoRowNum;

        UINT m_nTopInfoColumNum;

        UINT m_nBtmInfoColumNum;

        UINT m_nBtmInfoColumNum;

        在CGraph類(lèi)中,定義下列成員變量存放頂部和底部信息配置:

        CArray m_aryBtmInfo;

        CArray m_aryTopInfo;

        在CGraph類(lèi)中,定義下列接口進(jìn)行信息區(qū)相應(yīng)的配置:

        void DivideTopInfoZone(UINT nRow,

        UINT nColum);//劃分頂部信息區(qū)

        void DivideBottomInfoZone(UINT nRow,

        UINT nColum);//劃分底部信息區(qū)

        void SetTopInfo(UINT nRowIdx,

        UINT nColumIdx,CString str);//設(shè)置頂部信息

        void SetBottomInfo(UINT nRowIdx,

        UINT nColumIdx,CString str);//設(shè)置底部信息

        2.4 繪圖組件化擴(kuò)展

        繪圖模塊以繪圖組件化擴(kuò)展的方式來(lái)支持使用者在繪圖區(qū)自繪制圖形。在Graph中定義隊(duì)列成員變量,對(duì)繪圖組件的指針進(jìn)行存儲(chǔ):

        CList< CGComponentInf *, CGComponentInf *> m_pComponentList;

        2.4.1CGraph提供的繪圖組件配置接口

        void AddComponent(

        CGComponentInf* pGComponent);//添加組件

        void RemoveComponent(

        CGComponentInf* pGComponent);//刪除組件

        2.4.2繪圖信息接口類(lèi)CGInfoInf

        繪圖組件需要知道繪圖區(qū)域劃分情況,因此定義繪圖信息接口類(lèi),提供以下接口:

        virtual CRect GetGridRect()=0;//獲取網(wǎng)格區(qū)

        virtual CRect GetGraphRect()=0;//獲取整個(gè)繪圖區(qū)

        virtual CPoint CalcGraphPoint(double fXValue,

        double fYValue) = 0;//數(shù)值轉(zhuǎn)換為繪圖點(diǎn)

        這些由CGraph實(shí)現(xiàn),并將指針賦給繪圖組件。

        2.4.3繪圖組件接口類(lèi)CGComponentInf

        為了支持在基本繪圖不同縱向位置進(jìn)行繪制,將基本繪圖分為背景層、網(wǎng)格層、跡線繪制層。繪圖組件接口類(lèi)提供不同在繪圖層中進(jìn)行繪制的接口:

        virtual void DrawUponBk(CDC* pDC,

        CGInfoInf* pGInfo);//在背景層之上繪制

        virtual void DrawUponTrace(CDC* pDC,

        CGInfoInf* pGInfo);//在跡線層以上繪制

        virtual void DrawUponGrid(CDC* pDC,

        CGInfoInf* pGInfo);//在網(wǎng)格層之上繪制

        以上接口由派生類(lèi)實(shí)現(xiàn),在CGraph中調(diào)用以實(shí)現(xiàn)組件繪圖。

        3 繪圖模塊的DLL封裝與導(dǎo)出

        對(duì)于使用該模塊進(jìn)行開(kāi)發(fā)的用戶而言,無(wú)需知道上述主要類(lèi)的實(shí)現(xiàn),只需知道CGraphInterface、CGComponentInf的定義。但模塊需對(duì)外提供CGraph類(lèi)對(duì)象的創(chuàng)建函數(shù),該函數(shù)返回CGraphInterface類(lèi)型指針。因此,在工程中新建GraphDll.h、GraphDll.cpp,在GraphDll.h中定義該輸出函數(shù),在GraphDll.cpp中實(shí)現(xiàn)該函數(shù)。

        4 應(yīng)用實(shí)例

        該繪圖模塊已應(yīng)用在某微波綜合測(cè)量?jī)x器中,該類(lèi)型儀器含有:矢量網(wǎng)絡(luò)分析儀器、頻譜儀、矢量電壓計(jì)、功率計(jì)等多種儀表,透過(guò)使用該模塊的基本繪圖功能和組件化繪圖擴(kuò)展方式,成功地滿足了該項(xiàng)目的繪圖需求。如圖2-圖4所示,證明該模塊具有較好的通用性。

        圖2 使用基本繪圖功能繪制跡線

        圖3 使用繪圖組件實(shí)現(xiàn)參數(shù)設(shè)置標(biāo)簽繪制

        圖4 使用繪圖組件實(shí)現(xiàn)不同繪圖層的繪制

        5 結(jié) 語(yǔ)

        本文設(shè)計(jì)了一種應(yīng)用于電子測(cè)量?jī)x器領(lǐng)域的通用繪圖模塊,給出模塊的總體設(shè)計(jì),各功能模塊的數(shù)據(jù)結(jié)構(gòu)以及接口設(shè)計(jì)。該繪圖模塊可實(shí)現(xiàn)基本的曲線繪制功能,支持以繪圖組件的方式進(jìn)行實(shí)現(xiàn)自定義繪圖。經(jīng)過(guò)測(cè)試, 表明具有易維護(hù)、通用性強(qiáng)等優(yōu)點(diǎn), 可滿足電子測(cè)量?jī)x器的圖形繪制需求。

        [1] 楊樂(lè),王厚軍,戴志堅(jiān).測(cè)試儀器中的動(dòng)態(tài)波形繪制技術(shù)[J].儀器儀表學(xué)報(bào),2006,27(S2):1159-1160.

        [2] 王澤,朱金偉,曲政.基于COM技術(shù)的通用繪圖模塊的構(gòu)建[J].計(jì)算機(jī)與數(shù)字工程,2006,34(8):158-160.

        [3] 王湘文,陳建倫,陳紀(jì)銘.分層軟件架構(gòu)設(shè)計(jì)及其應(yīng)用研究[J].福建電腦,2011,27(6):55-56.

        [4] 高松,牛治永.敏捷設(shè)計(jì)原則與設(shè)計(jì)模式的編程實(shí)踐——單一職責(zé)原則與依賴倒置原則[J].計(jì)算機(jī)應(yīng)用,2011,31(S2):149-152.

        [5] 郭榮.淺談軟件設(shè)計(jì)模式中的設(shè)計(jì)原則[J].信息安全與技術(shù),2015(11):5-6.

        [6] 王強(qiáng),湯小慷,謝存,等.基于GDI與雙緩沖技術(shù)的雷達(dá)PPI顯示器的仿真[J].科技視界,2016(12):123-123.

        [7] 周宇,張立群.面向?qū)ο蠹夹g(shù)的多態(tài)性研究[J].電腦與信息技術(shù),2006,14(6):16-19.

        [8] 李明明,管志偉.淺析C++多態(tài)的作用及實(shí)現(xiàn)原理[J].無(wú)線互聯(lián)科技,2014(7):116-116.

        猜你喜歡
        定義測(cè)量信息
        把握四個(gè)“三” 測(cè)量變簡(jiǎn)單
        滑動(dòng)摩擦力的測(cè)量和計(jì)算
        滑動(dòng)摩擦力的測(cè)量與計(jì)算
        訂閱信息
        中華手工(2017年2期)2017-06-06 23:00:31
        測(cè)量
        成功的定義
        山東青年(2016年1期)2016-02-28 14:25:25
        展會(huì)信息
        修辭學(xué)的重大定義
        山的定義
        教你正確用(十七)
        午夜福利麻豆国产精品| 中文字幕一二三四五六七区| 日本污ww视频网站| 夜夜躁狠狠躁2021| 无码国产精成人午夜视频一区二区| 狠狠色噜噜狠狠狠777米奇小说| 无码人妻精品一区二区三18禁| 国产精品av在线一区二区三区| 天堂影院久久精品国产午夜18禁| 亚洲国产色一区二区三区| 色橹橹欧美在线观看视频高清 | 亚洲va欧美va国产综合| 亚洲综合久久1区2区3区 | 午夜福利麻豆国产精品| 丝袜欧美视频首页在线| 国产麻豆国精精品久久毛片| 手机在线看片| 精品亚洲国产成人av| 久久国产精品99精品国产987| 亚洲av一二三四五区在线| 老师开裆丝袜喷水视频| 国产成人无码免费看片软件| 亚洲人成18禁网站| 中文字幕有码在线亚洲 | 久久亚洲中文字幕乱码| 国产综合无码一区二区辣椒 | 久久av高潮av喷水av无码| 中文字幕视频一区二区| 亚洲色大成网站www永久| 成人做爰高潮尖叫声免费观看| 吃下面吃胸在线看无码| 中文字幕亚洲一二三区| 国产精品99精品无码视亚| 无码的精品免费不卡在线| 亚洲一区二区精品在线看| 白浆国产精品一区二区| 欧美aaaaaa级午夜福利视频| 日韩久久久黄色一级av| 麻豆成人久久精品一区| 日韩aⅴ人妻无码一区二区| 日韩免费一区二区三区在线|