




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用visual basic 開發(fā)交互式cad系統(tǒng)內(nèi) 容 提 要在交互式cad系統(tǒng)中,不僅可以實(shí)現(xiàn)用鼠標(biāo)繪圖, 還可以選擇圖元,并對(duì)選中的圖元進(jìn)行縮放、縮小、等操作。在眾多的交互式cad開發(fā)工具中,visual basic是使用最簡(jiǎn)單、應(yīng)用最廣泛、使用者最多的一種開發(fā)工具,visual basic語(yǔ)言具備一定的繪圖功能。本設(shè)計(jì)的主要內(nèi)容是在學(xué)習(xí)visual basic 語(yǔ)言和交互式cad技術(shù)的基礎(chǔ)上,運(yùn)用visual basic語(yǔ)言來(lái)開發(fā)交互式cad系統(tǒng)。本系統(tǒng)具有交互繪圖功能。能實(shí)現(xiàn)鼠標(biāo)繪圖,能對(duì)圖形進(jìn)行各種形式的縮放操作。本文中的縮放主要包括圖形的放大、縮小和局部放大與全屏顯示。關(guān)鍵詞: v
2、isual basic 交互式cad 縮放a b s t r a c tin interactive cad system, not only may realize with the mouse cartography, but also may choose the chart yuan, and to the chart yuan which selects carries on the reproduce by pantograph, reduces, and so on the operation. in the multitudinous interactive cad devel
3、opment kit, visual basic is the use simple, the application is most widespread, the user most one kind of development kit, visual basic language has the certain cartography function. this design main content is in studies visual the basic language and in the interactive cad technology foundation, la
4、nguage develops the interactive cad system using visual basic. this system has the alternately cartography function. can realize the mouse cartography, can carry on each kind of form to the graph the reproduce by pantograph operation. in this article reproduce by pantograph mainly includes the graph
5、 the enlargement, reduces with the fractionated gain and the entire screen demonstration.key words: visual basic interactive cad zooming 45目 錄一、緒言 4 二、開發(fā)基礎(chǔ)5(一) 交互式cad簡(jiǎn)介 5 (二) visual basic的簡(jiǎn)介 . 5 三、系統(tǒng)分析6(一) 可行性研究 .6(二) 需求分析 6四、系統(tǒng)總體設(shè)計(jì)8jhjhjhjhj五、詳細(xì)設(shè)計(jì)8(一)界面制作 .8(二)繪圖 . 9(三)縮放 . 11六、用戶手冊(cè)16七、結(jié)束語(yǔ) .17八、致謝
6、18九、參考文獻(xiàn)19一、緒 言在眾多的交互式cad開發(fā)工具中,visual basic是使用最簡(jiǎn)單、應(yīng)用最廣泛、使用者最多的一種開發(fā)工具。visual basic功能強(qiáng)大是毫無(wú)疑問(wèn)的,所以本文采用visual basic進(jìn)行了交互式cad系統(tǒng)的開發(fā)。本文結(jié)合visual basic 語(yǔ)言介紹了交互式cad 系統(tǒng)的開發(fā)技術(shù),剖析了構(gòu)造系統(tǒng)的思路和技巧。本文的第一部分為開發(fā)基礎(chǔ)部分,比較簡(jiǎn)單的介紹了交互式cad和visual basic語(yǔ)言。第二部分為系統(tǒng)定義時(shí)期部分,介紹了系統(tǒng)的可行性研究與系統(tǒng)的硬件需求。第三部分主要分為兩部分:一個(gè)是總體設(shè)計(jì)部分,大略的介紹了所要開發(fā)的交互式cad系統(tǒng)的主要組
7、成部分。另一部分是詳細(xì)設(shè)計(jì)部分,這也是本文的主要核心部分。詳細(xì)的介紹了繪圖及圖形的縮放功能。第四是用戶手冊(cè)。 第五部分為后記部分。最后是第六部分參考文獻(xiàn)。二、開發(fā)基礎(chǔ)(一) 交互式cad簡(jiǎn)介對(duì)大多數(shù)人來(lái)說(shuō)交互式 cad技術(shù)是一個(gè)熟悉而又陌生的概念 。那么,什么是交互式cad技術(shù)呢?簡(jiǎn)單得打個(gè)比方來(lái)說(shuō):用鼠標(biāo)在屏幕上畫一條直線段,選種它時(shí),會(huì)在端點(diǎn)處顯示方形的手柄,移動(dòng)手柄,可以改變直線段的方位和長(zhǎng)度。由于采用這種技術(shù)繪圖具有方便、直觀、高效等特點(diǎn),所以在各種專業(yè)軟件,數(shù)據(jù)處理軟件、autocad、 solidwork、flash、visio、powerpoint、word等很多軟件里面有著廣泛
8、的應(yīng)用。 交互式cad技術(shù)比一般的計(jì)算機(jī)繪圖技術(shù)要復(fù)雜一些。 在交互式cad系統(tǒng)中, 不僅可以實(shí)現(xiàn)用鼠標(biāo)繪圖, 還可以選擇圖元,并對(duì)選中的圖元進(jìn)行縮放、縮小、等操作。交互式cad技術(shù)是相對(duì)于一般技術(shù)而言的。交互設(shè)計(jì)的任務(wù)包括定位、定向、定量和移動(dòng)等等。交互設(shè)計(jì)的目的在于盡可能地站在用戶的角度考慮問(wèn)題,解決問(wèn)題。交互式設(shè)計(jì)應(yīng)該遵循的基本原則有以下七種:(1)盡量減少用戶輸入數(shù)據(jù)的工作量,盡可能提供缺省值。(2)容錯(cuò)功能要強(qiáng)。(3)數(shù)據(jù)輸入方便,并提供與其他軟件的數(shù)據(jù)交換接口。(4)比較完善的幫助系統(tǒng),包括聯(lián)機(jī)幫助、上下文幫助等。(5)操作過(guò)程記憶,包括恢復(fù)操作功能和重復(fù)操作功能。(6)繪圖過(guò)程的
9、可見性。利用橡皮線功能可以顯示圖元繪制的過(guò)程。(7)指令反饋速度快。如圖元拾取時(shí),系統(tǒng)必須比較快地做出反應(yīng);如果運(yùn)算比較費(fèi)時(shí),則可以在一定精度內(nèi)進(jìn)行近似計(jì)算。交互式cad技術(shù)不僅在辦公軟件如:word 、powerpoint等軟件中均有大量的應(yīng)用而且在繪圖軟件如:autocad、coraldraw 等大量使用了交互式cad技術(shù)。(二) visual basic的簡(jiǎn)介visual basic是一種功能非常強(qiáng)大的編程語(yǔ)言。一種在計(jì)算機(jī)技術(shù)發(fā)展史上應(yīng)用得最為廣泛的語(yǔ)言。自從basic語(yǔ)言誕生以來(lái),就一直以其簡(jiǎn)單易學(xué)性而聞名于世,因而受到了廣大初學(xué)者的青睞。然而,由于它是非結(jié)構(gòu)化的編程語(yǔ)言,而且速度慢
10、、靈活性差,為此也受到了許多人的指責(zé)。很多人認(rèn)為,basic語(yǔ)言是一種游戲語(yǔ)言或數(shù)學(xué)語(yǔ)言,不能用來(lái)開發(fā)應(yīng)用程序。隨著visual basic 系列開發(fā)環(huán)境的出現(xiàn),這一現(xiàn)象已經(jīng)成為過(guò)去。visual basic 保留了basic早期的一些特性。visual basic 在原有的basic語(yǔ)言的基礎(chǔ)上進(jìn)一步發(fā)展,至今包含了數(shù)百條語(yǔ)句、函數(shù)及關(guān)鍵詞,其中很多和windows gui 有直接關(guān)系。在計(jì)算機(jī)領(lǐng)域,圖形編程是一個(gè)很重要的內(nèi)容。visual basic 作為一門功能強(qiáng)大的計(jì)算機(jī)語(yǔ)言,為用戶提供了一系列的屬性、方法和控件,利用它們,可以輕松地實(shí)現(xiàn)一般的圖形繪制。所以對(duì)于一般的圖形繪制任務(wù)而言,
11、visual basic是完全可以勝任的。三、系統(tǒng)分析(一) 可行性研究在問(wèn)題定義階段的結(jié)論進(jìn)一步復(fù)查和確認(rèn)之后,仔細(xì)分析了系統(tǒng)的處理過(guò)程,以后, 更進(jìn)一步的了解到本系統(tǒng)應(yīng)具體解決的問(wèn)題。整個(gè)系統(tǒng)的流程是在用戶的要求下進(jìn)行的,利用鼠標(biāo)事件所繪制的圖片顯示出來(lái)。并以用戶需求把它們隨意放大或縮小。windows 消息與vb事件的轉(zhuǎn)換:windows窗口程序事件對(duì)象消息visual basic對(duì)象 vb的模塊化結(jié)構(gòu):資源文件類模塊標(biāo)準(zhǔn)模塊窗體代碼窗體 (二)需求分析 在需求分析的基本任務(wù)是準(zhǔn)確地回答“系統(tǒng)必須做什么?”這個(gè)問(wèn)題。這一階段是對(duì)系統(tǒng)認(rèn)識(shí)最為全面、準(zhǔn)確、清晰、得體的一個(gè)比較關(guān)鍵的時(shí)期。需求
12、分析的結(jié)果是系統(tǒng)開發(fā)的基礎(chǔ),也應(yīng)該是用戶基本上確定自己的最終要求階段,為下一步的總體設(shè)計(jì)打好基礎(chǔ)。一旦結(jié)束需求分析,整個(gè)系統(tǒng)的框架基本上就不應(yīng)該改變了,它關(guān)系到整個(gè)系統(tǒng)的成敗。.硬件運(yùn)行要求:為了讓交互式cad系統(tǒng)能夠正常運(yùn)行,至少要具備以下的硬件要求具有486 66mhz處理器(或更高檔處理器)的ibm pc兼容機(jī) 一個(gè)鼠標(biāo) 足夠的硬盤空間,最好2gb的空間 16mb內(nèi)存 vga或更高分辨率的監(jiān)視器軟件運(yùn)行要求:u windows98操作系統(tǒng)或windows 2000 操作系統(tǒng)u vb6.0系統(tǒng)盤vb系統(tǒng)的工作流程圖:獲得數(shù)據(jù)是退出嗎 處理信息 啟 動(dòng)退 出 是否 四、系統(tǒng)總體設(shè)計(jì)交互式ca
13、d系統(tǒng)的總體設(shè)計(jì)設(shè)計(jì)交互式cad系統(tǒng)首先應(yīng)該具備一個(gè)控制系統(tǒng)的主控窗口,就是交互式cad的界面。主控模塊分繪圖、編輯、縮放三個(gè)子模塊。我做的系統(tǒng)雖說(shuō)主要圍繞縮放功能,但也是以繪圖模塊所繪制的圖形來(lái)實(shí)現(xiàn),所以也是系統(tǒng)中必不可少的部分。第一個(gè)子模塊為繪圖部分,主要有直線、多義線、圓、圓弧。第二個(gè)子模塊為編輯部分。第三個(gè)子模塊為圖形的縮放部分,也是本系統(tǒng)所要重點(diǎn)設(shè)計(jì)的部分。所以在本論文當(dāng)中主要圍繞圖元的放大、縮小、 局部放大、全屏顯示這四個(gè)部分。 系 統(tǒng) 界 面局部放大全屏顯示編輯繪圖縮放縮小放大直線多義線圓弧 圓圖3-1系統(tǒng)的總體設(shè)計(jì)五、 詳細(xì)設(shè)計(jì)(一)界面制作界面制作首先要想一想要設(shè)計(jì)一個(gè)什么樣
14、的界面,而且還要遵循很多原則。比如有美學(xué)方面的,也有習(xí)慣方面的。在總體設(shè)計(jì)原則的指導(dǎo)下,充分考慮細(xì)節(jié)問(wèn)題 。(1)制作啟動(dòng)窗口實(shí)現(xiàn)交互繪制圖元,首先需要?jiǎng)?chuàng)建圖形的界面,然后再窗體模塊中添加事件代碼。在創(chuàng)建界面之前我在設(shè)計(jì)里添加了啟動(dòng)窗口。制作啟動(dòng)窗口:?jiǎn)螕艄こ滩藛蔚奶砑哟绑w點(diǎn)擊添加窗體中的展示屏幕。屏幕上的內(nèi)容可以在屬性窗口中修改。(2)菜單設(shè)計(jì)我的設(shè)計(jì)里主要有繪圖、編輯、縮放等菜單。如總體設(shè)計(jì)中所示的這些菜單還有各自的子菜單。制作菜單首先在窗體中添加圖片框,在工具欄中打開 “菜單編輯器”,利用 “菜單編輯器”可以很方便的實(shí)現(xiàn)菜單的制作。繪圖菜單包括:“直線” “多義線” “圓弧” “圓”,它
15、們的標(biāo)題分別是“l(fā)ine”“polyline”“circle”“arc”和“text”??s放菜單包括:“放大” “縮小”“局部放大” “全屏顯示”, 它們的標(biāo)題為“zoomout” “ zoomin” “l(fā)ocalzoomout”和“extent”。(3)工具欄的設(shè)計(jì)工具條不僅使程序界面更加美觀,利用工具條上的工具按鈕,還能提高工作效率。狀態(tài)欄可以給出當(dāng)前命令的狀態(tài)、操作信息、提示和反饋信息,是計(jì)算機(jī)與用戶交互的一個(gè)重要窗口。所以要先創(chuàng)建工具條和狀態(tài)欄。創(chuàng)建工具條可以利用vb提供的toolbar控件和imagelist控件,利用statusbar控件可以創(chuàng)建狀態(tài)欄。在工具箱中單擊imageli
16、st控件,在窗體中添加控件imagelist打開屬性頁(yè)對(duì)話框。對(duì)話框有三個(gè)對(duì)象分別是通用,圖像,顏色。在圖像選項(xiàng)卡中,打開的對(duì)話框中選擇圖片的路徑和名稱,圖片將會(huì)顯示到圖片欄中(就如圖3-2所示)。 圖3-2圖像選項(xiàng)(4) 代碼設(shè)計(jì)制作菜單,工具條,狀態(tài)欄后,就給vb-cad程序添加。首先給窗體添加imagelist控件imagelist1,添加toolbar控件,用自定義屬性的“屬性頁(yè)”對(duì)話框建立與imagelist1控件的聯(lián)系。添加這些控件之后,添加控件的事件代碼。系統(tǒng)運(yùn)行后的界面如圖3-3和圖3-4圖3-3主界面 圖3-4窗口模板(二)繪圖代碼設(shè)計(jì)圖3-5 “繪圖”菜單繪圖在cad系統(tǒng)是
17、必不可少的。我只做了直線、多義線、圓、圓弧四個(gè)選項(xiàng)。繪圖離不開坐標(biāo)系統(tǒng)。因?yàn)樵趘b中,只有缺省坐標(biāo)和自定義坐標(biāo)兩個(gè)概念。其中,缺省坐標(biāo)的原點(diǎn)在于窗口的左上角,橫坐標(biāo)向右為正; 縱坐標(biāo)向下為正。交互式cad系統(tǒng)可以實(shí)現(xiàn)用鼠標(biāo)交互式地輸入數(shù)據(jù)。采用面向?qū)ο蟮木幊碳夹g(shù),需要首先創(chuàng)建一個(gè)圖元系列類和一個(gè)命令系列類。定義繪圖時(shí)的交互過(guò)程。定義好類以后,再定義類的屬性及調(diào)用類的方法就可以進(jìn)行交互繪圖了。交互式鼠標(biāo)的繪圖行為,可以在屏幕上移動(dòng)鼠標(biāo)光標(biāo),并根據(jù)光標(biāo)處的坐標(biāo)進(jìn)行繪圖。這樣整個(gè)繪圖過(guò)程就簡(jiǎn)單多了,而且也可以隨用戶的意愿來(lái)決定繪圖的大小或長(zhǎng)度等。用鼠標(biāo)事件,單擊鼠標(biāo)左鍵時(shí),開始繪圖:public s
18、ub leftbutton(x as single as single);boldraw=true單擊鼠標(biāo)右鍵時(shí),取消繪圖:public sub leftbuttondown(x as single,y as single);boldraw=false(1) 直線用line 方法繪制語(yǔ)法: object.linestep(x1,y1)step(x2,y2),color,bf其中,object:(可選)對(duì)象表達(dá)式。如果object省略,具有焦點(diǎn)的窗體作為object。stept:(可選)是關(guān)鍵字,指定起點(diǎn)坐標(biāo),相對(duì)于cuttentx和 currenty 所提供的的當(dāng)前圖標(biāo)坐標(biāo)。x1,y1: (可
19、選)single,直線的起點(diǎn)坐標(biāo)。scalemode屬性決定了使用的度量單位。如果省略,線起始于由currentx和currenty指定的位置。(2) 多義線是由多條直線組成,所以與繪制直線是同一個(gè)道理。多義線用line 方法將多義線的各個(gè)頂點(diǎn)一次連線。(3) 繪制圓形使用circle函數(shù)。語(yǔ)法 :object.circlestept(x,y),radius,color,start,end,aspect其中,object:(可選)對(duì)象表達(dá)式。如果object省略,具有焦點(diǎn)的窗體作為object。stept:(可選)是關(guān)鍵字,指定圓的中心,相對(duì)于object的cuttentx和 currenty
20、 所提供的坐標(biāo)。x,y: (必須寫)single 圓的中心坐標(biāo)。object的scalemode屬性決定使用的度量單位。radius:(必須選)single,圓的半徑。object的scalemode屬性決定使用的度量單位。start,end:(可選)singleaspect: (可選)single,圓的縱橫尺寸比。缺省值為1.0(4) 圓弧繪圓弧比起繪圓要復(fù)雜一點(diǎn),本系統(tǒng)采用圓心起點(diǎn)和終點(diǎn)繪制圓弧,除了需要知道圓心以外,還要知道圓弧的起點(diǎn)的終點(diǎn)的坐標(biāo)。語(yǔ)法:object.circlestept(x,y),radius,color,start,end,aspect用circle 方法繪圓弧時(shí),
21、需要知道圓弧的起點(diǎn)和終點(diǎn)與圓心連接和x軸正向所成的角度。圓弧的半徑可以根據(jù)圓心與起點(diǎn)的距離得到。start和end分別指定弧的起點(diǎn)和終點(diǎn)相對(duì)于中心點(diǎn)的連線與x軸正向所成的角度,用弧度表示。范圍在-2*pi()到2*pi()之間,缺省時(shí)為0。返回點(diǎn)pbegin 到點(diǎn)pend的連線與x軸正向的夾角,用弧度表示。如果重點(diǎn)坐標(biāo)大于、等于起點(diǎn)坐標(biāo)。并且終點(diǎn)坐標(biāo)大于、等于起點(diǎn)坐標(biāo) if pend.x>=pbegin.x and pend.y>=pbegin.y thengetangle=sita如果終點(diǎn)橫坐標(biāo)小于、等于起點(diǎn)橫坐標(biāo),并且終點(diǎn)縱坐標(biāo)大于、等于起點(diǎn)縱坐標(biāo)elseif pend.x&l
22、t;= pbegin.x and pend.y>=pbegin.y thengetangle=pi-sita如果終點(diǎn)橫坐標(biāo)小于、等于起點(diǎn)橫坐標(biāo),并且終點(diǎn)縱坐標(biāo)小于、等于起點(diǎn)縱坐標(biāo)elseif pend.x<= pbegin.x and pend.y<=pbegin.y thengetangle=pi+sita如果終點(diǎn)橫坐標(biāo)大于、等于起點(diǎn)橫坐標(biāo),并且終點(diǎn)縱坐標(biāo)小于、等于起點(diǎn)縱坐標(biāo)elseif pend.x= pbegin.x and pend.y<=pbegin.y thengetangle=2*pi-sitaend if計(jì)算圓弧的起始點(diǎn):angle1=getangle(
23、m_pcenter,m_pbegin)計(jì)算圓弧終止角:angle2=getangle(m_pcenter,m_pend)(三)縮放代碼設(shè)計(jì) 圖3-6 “縮放”菜單在繪圖和審圖過(guò)程中,常常有對(duì)圖形進(jìn)行縮小或放大的要求。實(shí)現(xiàn)各種方式的縮小和放大功能通過(guò)調(diào)節(jié)繪圖環(huán)境的scaleleft, scalatop, scalewidth 和scaleheight屬性或者利用scale方法可以實(shí)現(xiàn)圖形畫面的縮小、放大。縮放菜單項(xiàng)中各項(xiàng)的標(biāo)題為“ zoomout” ,“zoomin”,“ localzoomou”和“ extent”。(1) 全局縮放通過(guò)放大或縮小scale 方法的參數(shù)來(lái)實(shí)現(xiàn)。原理:就是將視口矩
24、形4個(gè)角點(diǎn)的坐標(biāo)放大一定的倍數(shù),視口內(nèi)的圖形將以相應(yīng)的倍數(shù)縮小。相反,將視口矩形4個(gè)角點(diǎn)的坐標(biāo)縮小一定倍數(shù),視口內(nèi)的圖形以相應(yīng)的倍數(shù)放大。全局圖形縮小或放大都由改變坐標(biāo)系統(tǒng)來(lái)實(shí)現(xiàn)。 全局縮小圖形private sub zoomin_click() sleft=sleft*1.2 以120%的比例放大sright=sright*1.2stopic=stopic*.2sbottom=sbottom*1.2修改坐標(biāo)系統(tǒng)call coordinateend sub全局放大圖形private sub zoomout_click() sleft=sleft*0.8 以80%的比例縮小 sright=sri
25、ght*0.8 stopic=stopic*0.8 sbottom=sbottom*0.8 改變坐標(biāo)系統(tǒng)call coordinateend sub上面兩個(gè)過(guò)程中都要調(diào)用coordinate過(guò)程,該過(guò)程利用坐標(biāo)參數(shù)scale方法修改坐標(biāo)系統(tǒng),并通過(guò)控制視口范圍來(lái)實(shí)現(xiàn)圖形的縮放操作。coordinate 過(guò)程的代碼:public sub coordinate()利用scale方法修改坐標(biāo)系統(tǒng)drawmain.picdraw.scale(sleft,stopic)-(sright,sbottom)更新繪圖環(huán)境drawmain.picdraw.refreshend sub 圖3-7原始圖形 圖3-8
26、全局放大和全局縮小結(jié)果(2) 局部放大當(dāng)希望更清楚地了解圖形的某個(gè)細(xì)節(jié)部位時(shí),可以采用局部放大技術(shù),把包含該部位的一個(gè)矩形范圍放大到整個(gè)繪圖環(huán)境。如圖3-9所示,要把e點(diǎn)和g點(diǎn)確定的矩形放大到整個(gè)繪圖環(huán)境,需要把e點(diǎn)與屏幕左上角a點(diǎn)對(duì)齊,然后按照一定比例放大圖形,使矩形內(nèi)的圖形正好全部顯示在視口內(nèi)。放大的比例包括x方向的比例和y方向的比例,若不改變圖元的形狀,并且矩形efgh內(nèi)的所有圖元能在矩形abcd中顯示,放大比例只能取x方向比例和y方向比例中的小者。a b a e b f e fg h e f g hc d c g d h 圖3-9局部放大的原理圖示實(shí)現(xiàn)局部放大先選取用戶所要放大的部分,
27、那么這個(gè)部分就用矩形來(lái)選取,用line 方法繪矩形;而且無(wú)論放大或縮小都要計(jì)算新坐標(biāo)系與邏輯坐標(biāo)系的縮放比例因子;然后重新設(shè)置視口范圍之后,就是局部放大的效果了;創(chuàng)建cviewlocalzoomout 類,并添加一些相關(guān)的代碼。然后像處理前面各繪圖類一樣,在窗體模塊中添加相對(duì)應(yīng)的鼠標(biāo)事件處理代碼。 在該類中主要實(shí)現(xiàn)選取局部放大的功能。選取行為在移動(dòng)鼠標(biāo)的過(guò)程中產(chǎn)生,放大行為在鼠標(biāo)左鍵第二次擊下的那一時(shí)刻才產(chǎn)生。就像圖3-10和3-11所示矩形窗口圖3-10用矩形窗口選擇所要放大的局部范圍圖3-11 局部放大的效果(3) 全屏顯示全屏顯示是要在繪圖環(huán)境中剛好顯示所有圖元。實(shí)際上,它是局部放大的一
28、個(gè)特例。就如圖(3-12)所示,把矩形efgh中的圖形元素正好全部顯示在abcd矩形區(qū)域中。所有圖元的包圍矩形可以通過(guò)比較所有圖元各自的包圍矩形得到。所有圖元包圍矩形對(duì)角定點(diǎn)的最小橫坐標(biāo)和最小縱坐標(biāo)可以確定一個(gè)點(diǎn),最大橫坐標(biāo)和最大縱坐標(biāo)可以確定另一個(gè)點(diǎn),由兩點(diǎn)所確定的矩形就是要求的包圍矩形。adcbehgfedcafhga b圖3-12顯示全圖的原理 圖3-13原圖 圖3-14 全屏顯示的結(jié)果 六、用戶手冊(cè)運(yùn)行系統(tǒng),會(huì)出現(xiàn)一個(gè)界面就如下面所示的圖-用戶界面。分別有菜單欄、工具欄、狀態(tài)欄就是顯示窗口。全屏顯示菜單放大繪圖工具窗口繪圖區(qū)局部放大縮小工具欄那么這個(gè)系統(tǒng)應(yīng)該如何使用?首先在執(zhí)行縮放功能
29、之前,要在窗口中利用四個(gè)繪圖工具中四個(gè)工具按鈕任意繪制幾個(gè)圖。本系統(tǒng)用的是交互式的繪圖技術(shù),所以在窗體中用鼠標(biāo)繪制圖形。而且其他功能都使用的是鼠標(biāo)事件,所以直接用鼠標(biāo)點(diǎn)擊所需要的工具來(lái)執(zhí)行其功能。若要使用放大工具,就直接點(diǎn)擊工具欄中的放大工具按鈕。并在窗口中點(diǎn)擊,就會(huì)把已繪制好的圖形放大??s小工具的使用和放大工具一致。全屏顯示的原理雖然和局部放大原理差不多,但是使用方法和放大、縮小是一樣的。使用局部放大工具,就在用戶想要放大的部位拖動(dòng)鼠標(biāo)就會(huì)出現(xiàn)矩形,第二次單擊鼠標(biāo)就執(zhí)行它的功能了。其中矩形里面的部分就是用戶所要放大的部分。 七、結(jié) 束 語(yǔ)經(jīng)過(guò)大概三個(gè)月的時(shí)間,我的畢業(yè)設(shè)計(jì)終于完成了?;仡櫿麄€(gè)
30、設(shè)計(jì)過(guò)程,不論是定義時(shí)期還是開發(fā)時(shí)期都嘗到了不少的酸甜苦辣。在這次設(shè)計(jì)中明顯感覺到自己的實(shí)踐經(jīng)驗(yàn)不足,因此很多方面都有不足與不便之處,而且遇到問(wèn)題總是不能得心應(yīng)手的解決。在設(shè)計(jì)本系統(tǒng)時(shí),因?yàn)楸救说闹R(shí)、技術(shù)水平有限,在好多地方都有不足和不便之處敬請(qǐng)您多指教。通過(guò)這次設(shè)計(jì),我還發(fā)現(xiàn)查閱資料的重要性。由于我是vb的新手,所以應(yīng)用起來(lái)不是很順當(dāng),這樣,大量的書籍資料給了我很大的幫助。而且每一位出書的作者對(duì)語(yǔ)言的人士都有各自不同的角度,所以即使是同一水平的書也會(huì)有不同的收獲。鑒于此我覺得要學(xué)好一門語(yǔ)言,就要做到多查、多看、多練、多用。取人之長(zhǎng),補(bǔ)己之短。這樣才能少走彎路。另外,平時(shí)就養(yǎng)成良好的學(xué)習(xí)習(xí)慣
31、也是非常重要的。遇到什么自認(rèn)為比較有價(jià)值的東西就應(yīng)及時(shí)地記下來(lái),以免以后遇到同樣的問(wèn)題撓頭??傊?,一次畢業(yè)設(shè)計(jì),我的受益匪淺。不論從理論上,技術(shù)上還是從經(jīng)驗(yàn)方法上都使自己有了一定的升華,這在我今后的工作中無(wú)不是最寶貴的財(cái)富。八、致謝在本次畢業(yè)設(shè)計(jì)中,我從指導(dǎo)老師徐善針老師身上學(xué)到了很多東西。徐老師認(rèn)真負(fù)責(zé)的工作態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的理論水平都使我收益非淺。他無(wú)論在理論上還是在實(shí)踐中,都給與我很大的幫助,使我得到不少的提高,這對(duì)于我以后的工作和學(xué)習(xí)都有一種巨大的幫助,感謝他耐心的輔導(dǎo), 沒(méi)有他的悉心幫助和指導(dǎo)就沒(méi)有這次畢業(yè)設(shè)計(jì)的完成。某醫(yī)療部門總務(wù)信息管理系統(tǒng)(物品管理)能及時(shí)開發(fā)完成,還
32、有同組的李國(guó)珍同學(xué)的熱心幫助,再次向尊敬的老師和同學(xué)表示深深的謝意.九、參考文獻(xiàn)1作者: 周愛武 汪海威 出版社:清華大學(xué)出版社 書名:visual basic 程序設(shè)計(jì) 2 作者:葉佳 出版社:中國(guó)水利水電出版社 書名:中文visual basic60.編程實(shí)用教程3 作者:姜曉銘 出版社:北京工業(yè)大學(xué)出版社 書名: visual basic6.0程序設(shè)計(jì) 應(yīng)用短期培訓(xùn)教程 4 作者:孫家廣 出版社:清華大學(xué)出版社 書名:計(jì)算機(jī)圖形學(xué)5 作者:魏海濤 出版社:電子工業(yè)出版社 書名: 計(jì)算機(jī)圖形學(xué)6 作者:周培德 出版社:清華大學(xué)出版社 書名: 計(jì)算幾何-算法分析與設(shè)計(jì) 附件源代碼: opti
33、on explicitglobal const pi = 3.1415926'繪圖模式public enum gedrawmode edmnormal = 1 edmselect = 2 edmdelete = 3end enum'線型public enum linestyle vbsolid = 0 vbdash = 1 vbdot = 2 vbdashdot = 3 vbdashdotdot = 4 vbinvisible = 5 vbinsidesolid = 6end enum'命令類型public enum gecommandtype ecunknown =
34、0 eccreatepoint = 1 eccreateline = 2 eccreatepolyline = 3 eccreatecircle = 4 eccreatearc = 5 eccreatetext = 6 ecselonebyone = 11 ecsellines = 12 ecselpolylines = 13 ecselcircles = 14 ecselarcs = 15 ecseltexts = 16 ecselall = 17 ecselnone = 18 ecmove = 21 ecrotate = 22 ecmirror = 23 ecviewzoomin = 31
35、 ecviewzoomout = 32 ecviewlocalzoomout = 33 ecviewpan = 34 ecviewextent = 35end enumpublic type pointapi x as long y as longend typepublic type rect left as long top as long right as long bottom as longend typepublic sleft as doublepublic stopic as doublepublic sright as doublepublic sbottom as doub
36、lepublic scal as doublepublic ptlinebegin as new positionpublic ptlineend as new positionpublic ptplpoints(1 to 100, 1 to 100) as new positionpublic plpoints(1 to 100, 1 to 100) as new positionpublic intplpointnum as integerpublic ptcirclecenter as new positionpublic ptcircler as new positionpublic
37、ptarccenter as new positionpublic ptarcbegin as new positionpublic ptarcend as new positionpublic command as gecommandtypepublic gelements as new cgelementspublic lines as new clinespublic polylines as new cpolylinespublic circles as new ccirclespublic arcs as new carcspublic texts as new ctextspubl
38、ic sellines as new clineselpublic selplines as new cplineselpublic selcircles as new ccircleselpublic selarcs as new carcselpublic seltexts as new ctextspublic intmstep as integerpublic pickradius as doublepublic bolmirror as booleanpublic intarcmirrornum as integerpublic ptbasepos as new positionpu
39、blic ptdespos as new positionpublic pbasepos as new positionpublic pdespos as new positionpublic scale1 as doublepublic sinoriginx as doublepublic sinoriginy as doublepublic genum as integerpublic entcount as integerpublic declare function rectangle lib "gdi32" (byval hdc as long, byval x1
40、 as long, byval y1 as long, byval x2 as long, byval y2 as long) as longpublic declare function getclientrect lib "user32" (byval hwnd as long, lprect as rect) as longpublic declare function getbkcolor lib "gdi32" (byval hdc as long) as longfunction distptop(pos1 as position, pos2
41、 as position) as double dim disx as double, disy as double, dist as double with pos1 disx = .x - pos2.x disy = .y - pos2.y end with distptop = sqr(disx * disx + disy * disy) 'distptop = (disx + disy + 2 * max(disx, disy) / 3end function'計(jì)算點(diǎn)到直線的距離function distptol(pos as position, cline1 as c
42、line) as double dim k as double dim c as double dim px as double, py as double dim distx as double, disty as double with pos px = .x py = .y end with call cline1.linekx(k, c) if k = 0 then distx = 10000 disty = abs(py - cline1.plinebegin.y) elseif k = 10000 then distx = abs(px - cline1.plinebegin.x)
43、 disty = 10000 else distx = abs(px - (py - c) / k) disty = abs(py - (k * px + c) end if distptol = min(distx, disty)end functionfunction getangle(pbegin as position, pend as position) as double dim tansita as double dim sita as double dim subebx as double subebx = abs(pend.x - pbegin.x) if pend.x =
44、pbegin.x then subebx = 0.0001 tansita = (abs(pend.y - pbegin.y) / subebx sita = atn(tansita) '如果終點(diǎn)橫坐標(biāo)大于起點(diǎn)橫坐標(biāo),并且終點(diǎn)縱坐標(biāo)大于起點(diǎn)縱坐標(biāo) if pend.x >= pbegin.x and pend.y >= pbegin.y then getangle = sita '如果終點(diǎn)橫坐標(biāo)小于起點(diǎn)橫坐標(biāo),并且終點(diǎn)縱坐標(biāo)大于起點(diǎn)縱坐標(biāo) elseif pend.x <= pbegin.x and pend.y >= pbegin.y then getan
45、gle = pi - sita '如果終點(diǎn)橫坐標(biāo)小于起點(diǎn)橫坐標(biāo),并且終點(diǎn)縱坐標(biāo)小于起點(diǎn)縱坐標(biāo) elseif pend.x <= pbegin.x and pend.y <= pbegin.y then getangle = pi + sita '如果終點(diǎn)橫坐標(biāo)大于起點(diǎn)橫坐標(biāo),并且終點(diǎn)縱坐標(biāo)小于起點(diǎn)縱坐標(biāo) elseif pend.x >= pbegin.x and pend.y <= pbegin.y then getangle = 2 * pi - sita end ifend functionfunction inbox(box as box, cur
46、pos as position) as boolean if curpos.x > box.minx and curpos.y > box.miny _ and curpos.x < box.maxx and curpos.y < box.maxy then inbox = true else inbox = false end ifend functionfunction min(la as double, lb as double) as double if la < lb then min = la else min = lb end ifend funct
47、ionfunction max(la as double, lb as double) as double if la > lb then max = la else max = lb end ifend functionpublic sub redraw(dmode as gedrawmode) dim pline as new cline dim ppline as new cpolyline dim pcircle as new ccircle dim parc as new carc dim ptext as new ctext dim pgelement as cgelemen
48、t dim i as integer '按指定繪圖模式重繪所有圖元 for each pline in lines set pgelement = pline pgelement.draw (dmode) next for each ppline in polylines set pgelement = ppline pgelement.draw (dmode) next for each pcircle in circles set pgelement = pcircle pgelement.draw (dmode) next for each parc in arcs set pg
49、element = parc pgelement.draw (dmode) next for each ptext in texts set pgelement = ptext pgelement.draw (dmode) nextend subpublic sub seldraw() dim pline as new cline dim ppline as new cpolyline dim pcircle as new ccircle dim parc as new carc dim ptext as new ctext dim pgelement as cgelement dim i a
50、s integer '按指定繪圖模式重繪所有圖元 for each pline in sellines set pgelement = pline pgelement.draw (edmdelete) pgelement.draw (edmselect) next for each ppline in selplines set pgelement = ppline pgelement.draw (edmdelete) pgelement.draw (edmselect) next for each pcircle in selcircles set pgelement = pcirc
51、le pgelement.draw (edmdelete) pgelement.draw (edmselect) next for each parc in selarcs set pgelement = parc pgelement.draw (edmdelete) pgelement.draw (edmselect) next for each ptext in seltexts set pgelement = ptext pgelement.draw (edmdelete) pgelement.draw (edmselect) nextend subpublic function selentitynum() as integer selentitynum = sellines.count
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZJWL 001-2024 大宗商品供應(yīng)鏈金融動(dòng)產(chǎn)質(zhì)押監(jiān)管倉(cāng)儲(chǔ)服務(wù)規(guī)范
- T-ZNZ 264.3-2024 重金屬中度污染農(nóng)田土壤修復(fù)和安全利用技術(shù)規(guī)范 第3部分:超積累東南景天與芝麻輪作
- 二零二五年度服裝品牌廠家全國(guó)代理合作協(xié)議
- 2025年度電影院包場(chǎng)租賃及廣告合作合同
- 二零二五年度金融科技股權(quán)投資合同協(xié)議
- 二零二五年度工傷事故賠償調(diào)解協(xié)議(含傷殘?jiān)u定)
- 二零二五年度全包裝修合同模板含定制家具制作
- 2025年度離職賠償協(xié)議書中的離職員工離職通知及手續(xù)辦理
- 二零二五年度聯(lián)防聯(lián)控疫情防控科研合作合同
- 2025年度線上虛擬購(gòu)物體驗(yàn)合同書
- 硬筆書法紙(打直接打印)
- 陳銀子礦山基建施工組織方案方案
- 襄陽(yáng)房地產(chǎn)市場(chǎng)月報(bào)2024年08月
- 工業(yè)互聯(lián)網(wǎng)平臺(tái)的架構(gòu)與功能
- 八年級(jí)英語(yǔ)下冊(cè)課件教學(xué)
- 人教版(2019) 必修第二冊(cè) Unit 1 Cultural Heritage Discovering Useful Structures(教案)
- 陳獨(dú)秀生平事跡
- 2024年人教版初三數(shù)學(xué)(下冊(cè))模擬試卷及答案(各版本)
- 《大學(xué)美育》高職全套教學(xué)課件
- 醫(yī)院CT機(jī)房裝飾改造工程施工組織設(shè)計(jì)
- 軟件工程自考02333重點(diǎn)難點(diǎn)匯集
評(píng)論
0/150
提交評(píng)論