久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

以文本方式查看主題

-  曙海教育集團論壇  (http://m.rfoamep.cn/bbs/index.asp)
--  Protel開發(fā)  (http://m.rfoamep.cn/bbs/list.asp?boardid=41)
----  Protel99原理圖顯示庫的開發(fā)  (http://m.rfoamep.cn/bbs/dispbbs.asp?boardid=41&id=1856)

--  作者:wangxinxin
--  發(fā)布時間:2010-11-29 12:07:12
--  Protel99原理圖顯示庫的開發(fā)
摘要:電路原理圖的顯示是開發(fā)電路故障診斷等軟件中的關鍵技術。本文利用Visual C++6.0和面向對象方法開發(fā)了Protel99原理圖顯示庫。在分析Protel99原理圖文件的格式的基礎上,詳細描述了顯示庫的主要的類和方法函數(shù)的設計原理。顯示庫在某電源測試臺軟件中得到成功的應用,稍作修改,便可用于其它矢量圖形的顯示,如AutoCAD圖形。

關鍵詞: Protel99;原理圖;Visual C++;面向對象

 1 引言

在進行電路故障診斷等軟件設計時,會遇到電路圖的顯示、拓撲分析等問題。在自己的程序中,直接實現(xiàn)上述功能是不現(xiàn)實的。Protel99是國內使用非常廣泛的電路圖的繪制工具,于是筆者開發(fā)了Protel99原理圖顯示庫,該顯示庫讀取Protel99生成的原理圖文件,完成電路圖的顯示、拓撲分析等功能,為測試人員提供盡可能多的測試信息,引導測試人員進行故障隔離定位及元件的檢測、方便電路的維修。具體如下:①讀取Protel99原理圖文件,轉變?yōu)樽远x格式的原理圖文件,并顯示;②實現(xiàn)了電路圖的自由縮放、元件和電氣節(jié)點的點選、定位和屬性的設置;③查詢和導出電路圖的網(wǎng)表。

2 Protel99原理圖顯示庫的開發(fā)

Protel99原理圖顯示庫需要把Protel99原理圖文件轉換成自定義格式的原理圖文件,因此先介紹Protel99原理圖的文件格式。

2.1  Protel99原理圖的文件格式

Protel99原理圖文件(SCH)是Protel99存儲原理圖的格式,存儲了許多供Protel99使用的信息,通常是以二進制格式存放的,格式比較復雜,所以首先把SCH格式轉換為ASC格式。ASC格式是文本文件,簡明易讀,包含了構造自定義格式原理圖所需的所有信息。文本文件中每一行表達一個確定的信息,對于一行而言,每個字符串之間是用空格隔開的。Protel99原理圖文件(ASC)的基本結構如下:

(1)[Font_Table]區(qū)段

定義原理圖文本顯示使用的字體。

(2)Library……EndLibrary區(qū)段

定義元件庫,每個庫用“Component…EndComponent”描述,包含了該元件庫的信息:庫的描述、庫名、庫的組成元素(用“Part…EndNormalPart”段描述)。本區(qū)段有很多信息僅供Protel99使用的,可以忽略。

(3)[Sheet……EndSheet]區(qū)段

原理圖中元素的描述。位于緊接Sheet后的一行是描述頁面(頁面的尺寸,背景顏色,是否顯示網(wǎng)格等)的;Template…EndTemplate描述原理圖的模板(標簽,線條,圖標等);位于EndTemplate之后的內容描述原理圖的中的元素(元件、導線、總線、網(wǎng)絡標簽等)。本區(qū)段有很多信息僅供Protel99使用的,可以忽略。

2.2  Protel99原理圖顯示庫的類的設計

VisualC++ 是面向對象的程序設計語言,其MFC封裝了幾乎所有的WINDOWS API函數(shù),提供了完善的圖形繪制能力,可以繪制原理圖中的各種圖形元素,如矩形、點、線等。

分析可知,Protel99原理圖是由以下圖形元素組成的,直線、連續(xù)直線及多邊形區(qū)域、橢圓及橢圓區(qū)域、矩形及矩形區(qū)域、圓弧及橢圓弧、文本等,Protel99原理圖文件中已包含了各種圖形元素的具體參數(shù)和組織方式。在了解了Protel99原理圖的文件格式之后,就可以進行類的設計。設計的思想是面向對象和Protel99原理圖的文件格式相結合的方法。主要設計了如下幾個類:

2.2.1  圖形元素基類(CDrawElement)

對各類圖形元素進行分析,可以發(fā)現(xiàn)各類圖形元素具有一些相同的屬性和操作功能,如圖形元素的顏色、線型、線寬等和繪制圖形元素等操作。把各類圖形元素中共性的屬性和操作放在圖形元素基類(CDrawElement)中,具體的圖形元素類(圓弧類、多邊形類等)由這個類派生,不再一一贅述。

class CDrawElement : public CObject 

{  long m_lColorPen;  //筆色                 

short m_sLineWide;          //線寬(像素)

………//其它屬性  

void CalNewCoordinate(BOOL bMir, short sOriCom, int nComX, int nComY,

int nX,int nY,int *nNewX, int *nNewY);// 計算絕對坐標函數(shù),參數(shù)依次為:元件鏡像否、

          //元件的方向、元件的起點坐標XY、原始坐標XY、絕對坐標XY指針

          //根據(jù)所屬元件的位置屬性和本元素的相對坐標計算本元素的絕對坐標

virtual void Draw(CDC *pDC, BOOL bMirrored,       short sOrientation, int nComX, int nComY,)=0;

//繪制元素的純虛函數(shù),參數(shù)依次為:繪圖設備上下文指針、元件鏡像否、元件的方向、

//元件的起點坐標XY

virtual BOOL ReadWriteFile(CFile *file, BOOL bWrite);

//存儲或讀取自定義矢量原理圖二進制文件

………//其它方法};

說明:①該類是各個具體的圖形元素類的基類;②如果該類的派生類元素包含在某一元件庫中(如管腳Pin類),該元素的坐標是相對坐標(相對于所屬元件起點坐標的坐標),該元素的絕對坐標是根據(jù)所屬元件的位置屬性(起點、方向、是否鏡像)和本元素的相對坐標計算得出的;如果該類的派生類元素直接包含在原理圖中(如導線Wire類),則該元素的坐標就是絕對坐標;③該類中定義了繪制元素的純虛函數(shù),以便在其派生類中實現(xiàn)多態(tài),繪制不同的元素,如直線、圓弧等;④ReadWriteFile是存取自定義格式二進制文件,本類僅存取公共屬性,而派生類中不僅存取公共屬性而且存取各類元素特有的屬性。

2.2.2  元件類(CComponentSche)

分析Protel99原理圖文件可知,各個元件的信息是這樣組織的,元件的繪制信息,即元件的組成元素,如:管腳、直線、多邊形等,是存放在元件庫中的,其它信息,如元件的起點坐標、元件庫的索引、元件名稱等是單獨存放的。本文設計了元件庫類(CComLibSche)和元件類(CComponentSche),元件庫類(CComLibSche)見2.2.3。

元件類(CComponentSche)派生于CObject,封裝了元件的起點坐標、元件庫的索引、元件名稱等屬性和元件的繪制(結合對應的元件庫)、屬性的存取、元件的點選、得到元件的邊界矩形等操作,類代碼從略。下面給出元件的繪制的算法:

void CComponentSche::Draw(CDC *pDC)

{    CComLibSche  *pComLib;// 元件庫指針

根據(jù)本元件的元件庫的索引得到相應的元件庫并把地址賦給pComLib;

pComLib->Draw(pDC,m_bMirrored,m_sOrientation,m_nX,m_nY);

//把繪圖設備上下文指針、鏡像否、方向、起點坐標等參數(shù)傳遞給

//元件庫的繪制函數(shù),讓元件庫完成元件的繪制。

繪制元件名稱;       

繪制元件型號;

根據(jù)本元件的選中狀態(tài),繪制邊界矩形;}

2.2.3  元件庫類(CComLibSche)

派生于CObject,封裝了該類元件的組成元素(如:管腳、直線、多邊形等,各類圖形對象按照數(shù)組的形式組織)、元件庫的索引等屬性和該類元件的繪制等操作,類代碼從略。下面給出該類元件的繪制的算法:

void CComLibSche::Draw(CDC *pDC, BOOL bMirrored, short sOrientation,

int nComX, int nComY)// 參數(shù)依次為:繪圖設備上下文指針、元件鏡像否、

//元件的方向、元件的起點坐標XY

{    n=GetPinNums();//得到管腳對象數(shù)組中元素的個數(shù)

while(n--){  CPinElement* pPin;//管腳類指針

pPin =GetPin(n)//從管腳對象數(shù)組中得到一個管腳對象

pPin ->Draw(pDC,bMirrored,sOrientation,nComX,nComY);

//把繪圖設備上下文指針、元件鏡像否、元件的方向、元件起點坐標XY等參數(shù)

//傳遞給管腳類的繪制函數(shù),讓管腳類完成管腳的繪制。

}

………//完成其它各類圖形對象的繪制}

說明:元件庫類(CComLibSche)的設計充分體現(xiàn)了面向對象的封裝特性。元件庫的管理機制體現(xiàn)在分層上,元件庫類(CComLibSche)只是封裝了各類圖形對象,不直接管理到每個圖形,各類圖形對象的操作(如:繪制、屬性的存取等)由各類圖形對象類具體負責。這種分層結構帶來了程序設計和管理上的便利,分層結構是本顯示庫設計的特色之一,原理圖類(CSCheFigure)的設計也用到了這種結構,見2.2.4的算法示例。

2.2.4  原理圖類(CSCheFigure)

派生于CObject,封裝了Protel99原理圖顯示庫的所有功能,是該顯示庫的對外接口,包含了原理圖中的相應元素,如:元件庫、元件、電氣節(jié)點、字體表、圖紙等。類代碼如下:

class __declspec(dllexport) CSCheFigure : public CObject 

{CTypedPtrArray<CObArray,CComLibSche*>m_ComLibArray;//元件庫對象指針數(shù)組

CTypedPtrArray<CObArray,CComponentSche*>m_ComponentArray; //元件對象指針數(shù)組

CTypedPtrArray<CObArray,CNetNodeGroup*>m_NetGroupArray; //電氣節(jié)點對象指針數(shù)組

float m_fScale,; //比例尺

………//其它屬性               

BOOL WriteSSS(CString strSSSFile);//把CSCheFigure對象的信息寫入自定義矢量原理圖二進制文件

BOOL ReadProtel(CString strSchFile);//讀取Protel99原理圖文本文件ASC,初始化CSCheFigure對象

void Draw(CDC *pDC);//繪制原理圖

………//其它方法};

下面給出本類中一些函數(shù)的算法:

(1)ReadProtel函數(shù)的算法

BOOL CSCheFigure::ReadProtel(CString strSchFile)

{ 打開文件strSchFile;

跳過文件頭;

生成字體表;

依次生成各個元件庫對象,并添加到元件庫對象數(shù)組;

生成頁面對象;

根據(jù)讀到的字符串,生成各個對象(如元件、導線、網(wǎng)絡標簽、標簽等),并添加到相應對象數(shù)組;

跳過"Version 2.0 Sheet"行及以后內容;

關閉文件strSchFile;

合并各個導線(Wire)、連接點(Junction)和電源端口(PowerObject) 對象,依次生成各個電氣節(jié)點對象,并添加到電氣節(jié)點對象數(shù)組;

return TRUE;}

(2)原理圖繪制函數(shù)的算法

void CSCheFigure::Draw(CDC *pDC)

{    m_pSheetType->Draw(pDC);//m_pSheetType為圖紙對象指針,繪制圖紙

n= GetComponentNums ();//得到元件對象數(shù)組中元素的個數(shù)

while(n--){    CComponentSche* pCom;// 元件類指針

pCom =GetComponent(n)//從元件對象數(shù)組中得到一個元件對象

pCom -> Draw(pDC); //繪制元件對象

}

………//完成其它各類圖形對象的繪制}

(3)WriteSSS函數(shù)的算法

BOOL WriteSSS(CString strSSSFile)

{    CFile file;

if(!file.Open(strDesFile,CFile::modeCreate|CFile::modeWrite,NULL))

return FALSE;

n= GetComponentNums ();//得到元件對象數(shù)組中元素的個數(shù)

file.Write((unsigned char *)&n,sizeof(int));

………//把其它對象數(shù)組中元素的個數(shù)寫入file

n= GetComponentNums ();//得到元件對象數(shù)組中元素的個數(shù)

while(n--){    CComponentSche* pCom;// 元件類指針

pCom =GetComponent(n)//從元件對象數(shù)組中得到一個元件對象

pCom -> ReadWriteFile(&file,TRUE); //把元件對象的信息寫入file

}

………//把其它各類對象的信息寫入file

file.Close();

return TRUE;}

其它類的設計,如:字體類、圖紙類等,不再一一贅述。

2.2.5  坐標的轉換和圖形的縮放

Protel99使用的坐標系是數(shù)學坐標系,坐標原點位于原理圖的左下角,以像素為單位,向右為X軸正方向,向上為Y軸正方向。為方便起見,本顯示庫采用的Windows映像方式為MM_TEXT,因為MM_TEXT方式的坐標也是以像素為單位。但是在MM_TEXT方式下,屏幕(窗口)的原點在左上角,而X和Y的正方向分別是向右和向下,所以必須進行坐標的轉換。為完成圖形的縮放,需要定義一個比例尺m_fScale,該比例尺記錄的是一個顯示坐標單位所代表的實際坐標數(shù)值。

確定比例尺的算法:

float fScale1;

fScale1=(float)(原理圖實際寬度/當前視圖的寬度);

m_fScale=(float)(原理圖實際高度)/(當前視圖的高度);

if(fScale1>m_fScale)    m_fScale=fScale1;

實際坐標轉變?yōu)轱@示坐標的算法:

顯示坐標X=(int)(實際坐標X/m_fScale);

顯示坐標Y =(int)( (原理圖實際高度-實際坐標Y)/m_fScale);

顯示坐標轉變?yōu)閷嶋H坐標的算法(略)

本顯示庫把上述算法封裝在原理圖類(CSCheFigure)中,需要坐標轉換時只要調用原理圖類的函數(shù)即可。

 3結論

     本文介紹了Protel99原理圖顯示庫開發(fā)中的關鍵技術。本顯示庫是使用Visual C++開發(fā)的,采用面向對象的設計方法,提高了代碼的可重用性;忽略了Protel99原理圖文件中一些不必要的信息;能夠用于需要顯示Protel99原理圖的軟件中,用戶也可以根據(jù)功能的需要進行擴充。在某電源測試臺軟件中Protel99原理圖顯示庫得到成功的應用,取得了滿意的效果,如圖1所示。本顯示庫稍作修改,便可用于其它矢量圖形的顯示,如AutoCAD圖形。

  

圖1  Protel99原理圖顯示庫在某電源測試臺軟件中的應用


久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
午夜精品区一区二区三| 国产米奇在线777精品观看| 欧美成人a∨高清免费观看| 色先锋资源久久综合| 亚洲日本欧美在线| 91久久精品网| 欧美日韩中字一区| 91麻豆精品91久久久久久清纯 | 亚洲综合在线五月| 视频在线观看91| 国产一区二区三区精品视频| 国产一区二区三区免费在线观看| 国产传媒欧美日韩成人| av一区二区三区黑人| 成人在线视频电影| 天堂一区二区三区| 91精品婷婷国产综合久久竹菊| 精品久久久久久综合日本欧美| 国产日韩三级在线| 午夜精品福利视频网站| 国产主播一区二区三区| av电影在线观看一区| 欧美日韩精品一区| 色婷婷久久久综合中文字幕| 欧美一级电影网站| 亚洲视频你懂的| 麻豆国产91在线播放| 91丨porny丨在线| 少妇特黄a一区二区三区 | 欧美tk—视频vk| 国产三级精品三级| 亚洲午夜电影网| 成人久久久精品乱码一区二区三区| 国产精品一区视频网站| 91久久线看在观草草青青| 久久久精品影视| 日韩国产欧美在线观看| 99国产精品国产精品久久| 日本成人黄色| 欧美zozo另类异族| 亚洲成av人在线观看| 国产成人免费高清| 欧美亚洲爱爱另类综合| 91精品国产福利| 亚洲免费在线视频一区 二区| 激情另类小说区图片区视频区| 国产区二精品视| 91精品午夜视频| 亚洲韩国一区二区三区| 91免费国产在线| 欧美午夜精品电影| 亚洲美女视频在线观看| 成人国产亚洲欧美成人综合网| 天堂社区 天堂综合网 天堂资源最新版| 日韩免费福利电影在线观看| 日韩成人免费电影| 精品国产综合| 精品国产凹凸成av人导航| 日韩电影在线一区二区三区| 精品伦精品一区二区三区视频| 欧美美女直播网站| 亚洲国产精品影院| 国产麻豆日韩| 精品国产在天天线2019| 蜜桃视频一区二区三区| 日本成人黄色免费看| 国产精品美女久久久久久久| 成人一区二区视频| 欧美日韩专区在线| 三级成人在线视频| 日本一区二区三区视频在线播放| 精品国产乱码久久久久久浪潮| 男女男精品网站| 午夜视频久久久| 亚洲乱码国产乱码精品精98午夜| 91免费看片在线观看| 欧美一区二区日韩| 另类小说欧美激情| 日本道色综合久久| 午夜伊人狠狠久久| 日韩欧美亚洲区| 亚洲最色的网站| 久久天堂国产精品| 18成人在线观看| 国产精品一区二区三区免费观看| 精品福利在线导航| 成人高清av在线| 日韩欧美成人一区| 成人亚洲一区二区一| 6080午夜不卡| 国产不卡在线一区| 日韩免费视频线观看| 国产精品白丝av| 欧美一区二区三区电影| 国产精品一区专区| 欧美一区二区视频网站| 国产一区二区三区综合| 欧美日本在线观看| 国产一区二区福利| 日韩欧美一级片| 91超碰在线电影| 国产精品久久久久久久午夜片| 99久久99久久| 欧美国产欧美综合| 久久国产精品-国产精品| 亚洲天堂免费看| 日韩成人av网站| 性欧美疯狂xxxxbbbb| 色噜噜久久综合| 免费xxxx性欧美18vr| 欧美日韩一级黄| 国产精品99久久久久久宅男| 日韩欧美一区二区免费| 91视频一区二区三区| 国产精品久久久久久户外露出 | 欧美乱妇20p| 国产成人av资源| 久久精品日韩一区二区三区| 国产伦精品一区二区三区视频孕妇| 国产精品区一区二区三| 久久99精品久久久久久久青青日本| 亚洲情趣在线观看| 亚洲一区二区在| 国产一区二区三区四区五区入口| 日韩一区二区三区四区| 91精品天堂| 亚洲一区在线电影| 欧美久久一二区| 国产精品一区二区三区免费| 夜夜爽夜夜爽精品视频| 欧美视频一区二区三区| 91网站视频在线观看| 亚洲日本青草视频在线怡红院 | 蜜桃视频在线观看成人| 日日骚欧美日韩| 日韩免费性生活视频播放| 久久久久久艹| 奇米精品一区二区三区在线观看 | 快播亚洲色图| 久久99久久精品欧美| 久久综合久久综合久久综合| 欧美精品中文字幕一区二区| 青娱乐精品视频在线| 精品国产一区久久| 欧美日韩精品免费观看| 国产在线观看免费一区| 中文字幕国产一区二区| 欧美午夜精品一区二区蜜桃| 国产高清不卡av| 久久精工是国产品牌吗| 国产欧美一区二区精品秋霞影院| 亚洲人成影视在线观看| 91亚洲精品乱码久久久久久蜜桃 | 蜜桃一区二区三区在线观看| 久久一日本道色综合| 亚洲三区在线| 91理论电影在线观看| 热久久久久久久| 欧美国产日产图区| 欧美日韩国产区一| 久久精品一区二区三区不卡免费视频| 蜜臀av一级做a爰片久久| 国产精品免费网站在线观看| 欧美性色综合网| 免费久久久一本精品久久区| 国产高清精品久久久久| 一区二区三区精品在线观看| 日韩一区二区中文字幕| 亚洲电影免费| 激情欧美一区二区三区中文字幕 | 欧美日韩精品免费观看| 成人动漫精品一区二区| 奇米精品一区二区三区在线观看 | 欧美乱妇20p| 欧美重口乱码一区二区| 99精品视频一区| 日本不卡123| 一区二区三区日韩欧美| 久久视频一区二区| 欧美顶级少妇做爰| 色999日韩国产欧美一区二区| 精品一区久久久久久| 99久久精品免费| 国产精品自在欧美一区| 日韩成人一级大片| 亚洲一区欧美一区| 亚洲欧美一区二区三区国产精品| 久久婷婷久久一区二区三区| 欧美丰满一区二区免费视频| 亚洲视频精品一区| 欧美日韩一区二区三区在线观看免| 91视频婷婷| 99久久精品国产观看| 国产精品456| 蜜桃av噜噜一区| 天天射综合影视| 亚洲国产精品自拍| 亚洲一区在线视频观看| 亚洲免费视频成人| 国产精品乱码一区二区三区软件 |