freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

一種矢量圖形工具的設(shè)計(jì)與實(shí)現(xiàn)—計(jì)算機(jī)(論文)(存儲(chǔ)版)

  

【正文】 , 在已經(jīng)開始繪圖的情況下 , 不希望還能進(jìn)行別的操作 , 以避免造成系統(tǒng)流程和變量初始化等方面的錯(cuò)誤 。 重畫技術(shù) 圖形重畫 在很多情況下,需要將當(dāng)前視圖屏幕全屏重畫。 Invalidate 函數(shù)使當(dāng)前視圖屏幕的客戶區(qū)失效,從而激活圖形重畫。在 VC++中,以下兩個(gè)函數(shù)可以完成此功能。 InvalidateRgn 函數(shù)可以使一個(gè)已經(jīng)初始化的 CRgn 對(duì)象所指定的區(qū)域重畫。 blc=p_Screen[pDocm_CurrentScreen].blc。修改實(shí)現(xiàn)文件 中的消息處理函數(shù)第 16 頁(yè) 共 25 頁(yè) OnGraphFirst, 得到實(shí)現(xiàn)代碼如下: void CDrawView::OnGraphFirst() //重畫首屏 { // TODO: Add your mand handler code here CDrawDoc* pDoc=GetDocument()。這是就需要一個(gè)操作功能, 調(diào)整視圖屏幕左下角原點(diǎn)的實(shí)際坐標(biāo)( m_xStart ,m_yStart)和顯示比例 blc, 使所有的圖形元素正好能夠繪制到視圖屏幕中(在屏幕上留有一部分邊界區(qū)域),顯示全圖功能就是為完成此功能而設(shè)置的。當(dāng)至少有一個(gè)圖形元素時(shí),函數(shù)返回 TRUE, 沒有任何圖形元素時(shí),函數(shù)返回 FALSE。miny,amp。 if(bl1blc) blc=bl1。 } 圖形移動(dòng)和選中后操作 圖形點(diǎn)選功能 1) 保留選中的圖形元素 ①數(shù)據(jù)保留 要實(shí)現(xiàn)數(shù)據(jù)保留,就需要建立數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)選中的圖形元素。 在實(shí)現(xiàn)文件 中,在 CDrawDoc 文檔類的構(gòu)造函數(shù)內(nèi)動(dòng)態(tài)分配結(jié)構(gòu)數(shù)組 GraphSelect: CDrawDoc::CDrawDoc() { GraphSelect=new GraphSelectStruct[10000]。index==GraphSelect[i].indexamp。 為了選擇繪制某個(gè)圖形元素,在文檔類 CDrawDoc 中定義一個(gè)函數(shù): Private: void DrawGraph(CDC* pDC,int Lb,int index,int DrawMode,int DrawModel,short BackColor)。i++) { DrawGraph(pDC,GraphSelect[i].Lb,GraphSelect[i].index,0,1,BackColor)。i++) pDocDrawGraph(amp。 在各個(gè)圖形元素類的實(shí)現(xiàn)文件中,加入這個(gè)重載函數(shù)的實(shí)現(xiàn)代碼。 ? 鼠標(biāo)左鍵第二次按下,就會(huì)出現(xiàn)如圖 5 所示效果,圖形已經(jīng)實(shí)現(xiàn)了往右擺動(dòng)。 第 23 頁(yè) 共 25 頁(yè) 參考文獻(xiàn) [1] 錢能 .C++程序設(shè)計(jì)教程 [M].北京 : 清華大學(xué)出版社 ,1999。 這次畢業(yè)設(shè)計(jì)能圓滿的成功,都是得益于萬(wàn)老師的細(xì)心指導(dǎo)和詳細(xì)的批 改。 ( 4)學(xué)??稍试S學(xué)位論文被查閱或借閱。 only the older ones understood that this was no celebration. For several nights to e there。 ( 2)學(xué)??梢圆捎糜坝 ⒖s印或其他復(fù)制方式保存學(xué)位論文。 [7] 陳建春 .矢量圖形系統(tǒng)開發(fā)與編程 [M].北京 : 電子工業(yè)出版社 ,2021。是一個(gè)較好的實(shí)驗(yàn)性系統(tǒng) 。 ? 如圖 3所示,已經(jīng)畫出了幾個(gè)圖形。 參數(shù) x_Move 和 y_Move 分別是橫向和 縱向的偏移量。 for(int i=0。 第 20 頁(yè) 共 25 頁(yè) } //實(shí)現(xiàn)對(duì)被選 中的圖形元素的特殊繪制 for(i=0。 return TRUE。i++) { if(Lb==GraphSelect[i].Lbamp。 }GraphSelectStruct。 pDocm_CurrentScreen=0。 bl1=(maxxminx)/(m_wScreen20)。 BOOL pb=pDocGetRect(amp。 在實(shí)現(xiàn)文件 中,加入這個(gè)函數(shù)的實(shí)現(xiàn)代碼 。 Invalidate()。 CView::OnActivateView(bActivate, pActivateView, pDeactiveView)。 //得到上一屏幕的圖形參數(shù)并重畫圖形 m_xStart=p_Screen[pDocm_CurrentScreen].sx。 函數(shù) InvalidateRgn 的功能和使用方法與函數(shù) InvalidateRgn 類似, 惟一不同的是函數(shù) InvalidateRgn是使一個(gè)指定的區(qū)域重畫。 } OnGraphRedraw 函數(shù)首先得到指向當(dāng)前文檔對(duì)象的指針,然后調(diào)用UpdateAllViews 函數(shù)重畫此文檔對(duì)象所有的視圖,參數(shù) this 是指向當(dāng)前視圖對(duì)象的指針。如果應(yīng)用程序采用的是單文檔結(jié)構(gòu), 系統(tǒng)只有一個(gè)視圖,執(zhí)行此命令時(shí)使這個(gè)視圖失效并重畫,即激發(fā)視圖類的 OnDraw 執(zhí)行;如果應(yīng)用程序采用的是多文檔結(jié)構(gòu),一個(gè)文檔對(duì)象可能具有多個(gè)視圖, UpdateAllViews 可使屬于這個(gè)文檔對(duì)象的所有視圖 都重第 14 頁(yè) 共 25 頁(yè) 新繪制。 必須對(duì)圖形元素以實(shí)際形態(tài)進(jìn)行重畫 。 在實(shí)現(xiàn)文件 中 , 加入函數(shù)的實(shí)現(xiàn)代碼 。 6) 得到存儲(chǔ)各類圖形元素 CObArray 對(duì) 象數(shù)組的最大下標(biāo) 在對(duì)各個(gè)圖形元素類的所有圖形元素進(jìn)行操作時(shí),需要得到存儲(chǔ)在各個(gè)CObArray 對(duì)象中的最大數(shù)組下標(biāo),然后對(duì)各個(gè)數(shù)組項(xiàng)實(shí)現(xiàn)遍歷操作。函數(shù)返回指向新增圖形元素對(duì)象的指針 。 ②把指向新創(chuàng)建的圖形元素對(duì)象的指針,增加到文檔類中管理圖形元素對(duì)象指針的對(duì)象中。例如,可以定義一個(gè)管理 CLine 類指針的對(duì)象如下: CTypedPtrArrayCObArray,Cline*m_LineArray。在 本設(shè)計(jì)的開發(fā)中,采用一套完全面向?qū)ο蟮奈臋n組織機(jī)制。 yMinScreen=m_yStart。在應(yīng)用程序Draw 中,在視圖類 CDrawView 中有兩個(gè)變量 m_hScreen 和 m_wScreen 分別用來存儲(chǔ)當(dāng)前視圖的高度和寬度(邏輯坐標(biāo))。 3) 選中圖形元素的特殊顯示 為了讓用戶知道是否選中了圖形元素, 可以用實(shí)現(xiàn)圖形元素的特殊顯示的方法來實(shí)現(xiàn),實(shí)際上就是用不同的形式重新繪制這個(gè)圖形元素。 對(duì)于填充圓,選中區(qū)域則是 : jl1=jl。 用像素 為單位進(jìn)行計(jì)算時(shí)不方便, 于是就求出 n 個(gè)像素在當(dāng)時(shí)顯示比例下的實(shí)際距離,這個(gè)實(shí)際距離就是點(diǎn)選圖形元素第 8 頁(yè) 共 25 頁(yè) 時(shí)的有效距離。 //屏幕左下角縱坐標(biāo) }ScreenStruct。 圖形操作方面 屏幕狀態(tài)的記錄 對(duì)圖形屏幕進(jìn)行分析就會(huì)發(fā)現(xiàn),一個(gè)圖形屏幕是由三個(gè)參數(shù)來確定的 :屏幕左下角原點(diǎn)的實(shí)際橫縱坐標(biāo) m_xStart、 m_yStart 和顯示比例 blc,只要記錄下這三個(gè)參數(shù), 就可以記錄下這一屏幕的狀態(tài)。 如果在某個(gè)實(shí)現(xiàn)文件中使用這四個(gè)全局轉(zhuǎn)換函數(shù), 只需在這個(gè)實(shí)現(xiàn)文件中的開始處加入全局函數(shù)的外部引用: Extern Void DPtoVP (float x, float y, int *X, int *Y)。 Int DLtoVL(float l)。這種方法的缺點(diǎn)是造成坐標(biāo)的重復(fù)存儲(chǔ);優(yōu)點(diǎn)是具有較強(qiáng)的獨(dú)立性,不用考慮組成區(qū)域的連續(xù)直線段。所以,需要定義一個(gè)結(jié)構(gòu)來存儲(chǔ)連續(xù)直線的一個(gè)頂點(diǎn)坐標(biāo)。 圓是圓弧的一個(gè)特例,當(dāng)圓弧的弧度等于 2時(shí)就是圓。 //所處圖層 int m_id_only。把這些圖形元素中共性的東西(屬性和操作),組織存放在一個(gè)圖形元素基類 (CDraw)中,具體的圖形元素由這個(gè)基類來派生。 圖 1 系統(tǒng)功能圖 功能模塊說明 ? 文件菜單 菜單下拉選項(xiàng)有新建、打開、保存三個(gè)基本功能,可以新建新的客戶區(qū)、打開已經(jīng)存在的文件、保存希望保留的圖形。處理圖形元素的容量應(yīng)該能夠達(dá)到一般實(shí)用要求。在不同領(lǐng)域應(yīng)用 GIS,其需要 的 矢量圖形系統(tǒng)的功能是有差別的。 完成了處理點(diǎn)、線、圓、面、標(biāo)注文本等圖形元素的功能, 并具有處理圖例 (即圖形塊 )的能力; 具有相對(duì)完善的圖形操作功能,方便的圖形 I/O 功能,以及圖形移動(dòng)、刪除的功能。并且 從整體功能結(jié)構(gòu)到單獨(dú)的類的具體實(shí)現(xiàn)和 視圖的實(shí)現(xiàn),鼠標(biāo)交互繪制,圖形操作,圖形 選中、移動(dòng)、刪除等各個(gè)方面開發(fā)實(shí)現(xiàn)了一個(gè)基本的矢量圖形工具系統(tǒng)。 矢量圖形系統(tǒng)是 GIS 的重要組成部分,也是開發(fā) GIS 時(shí)的重點(diǎn)所在。應(yīng)具備鼠標(biāo)交互繪制功能,圖形數(shù)據(jù)交互輸入等功能; 4. 定制和使用線形; 5. 具有子圖填充功能; 6. 具有圖層,顏色,線形等的設(shè)置功能; 7. 具有較大的存儲(chǔ)容量。 2 總體設(shè)計(jì)思想 整體功能模塊的設(shè)計(jì) 矢量圖形工具需要實(shí)現(xiàn)的 基本功能包括文件的打開保存、圖形的編輯、基本圖形元素的繪制、圖形的選擇和重畫,本課題設(shè)計(jì)的矢量 圖形工具系統(tǒng)的功能圖如圖1。 3 矢量圖形結(jié)構(gòu) 基類的組織 對(duì)各類圖形元素進(jìn)行分析,可以發(fā)現(xiàn)各類圖形元素具有一些相同的屬性和操作功能,如圖形元素的顏色、線型線寬所在層等屬性和得到一個(gè)圖形元素是否做了刪除標(biāo)志等操作。 //線型橫向參數(shù) short m_Layer。 對(duì)圓類的創(chuàng)建方法與直線類 CLine 類似,圓除了具有圖形元素的基本特征外,還有自身的幾何特性,可以用圓心和半徑作為特征參數(shù)表示圓的幾何特性。一條連續(xù)直 線可能只有第 5 頁(yè) 共 25 頁(yè) 兩個(gè)頂點(diǎn),也可能有幾千個(gè)頂點(diǎn)。 另外一種描述方法是直接存儲(chǔ)區(qū)域的邊界頂點(diǎn)坐標(biāo),即把區(qū)域的整個(gè)邊界作為一條連續(xù)直線來存儲(chǔ)。 Void VPtoDP(int x, int y, float *X, float *Y)。 Int VLtoDL(int l)。 在各種圖形元素類 Cline、 CCircle、 CArc、 CText、 CPline、 CPlineRgn 中 ,重載虛函數(shù) Draw: public: virtual void Draw(CDC* pDC , int m_DrawMode, int m_DrawModel ,short BackColor)。 //屏幕左下角橫坐標(biāo) Float sy。 1) 有效距離 確定有效距離的方法是 : 首先確定在視圖屏幕上有效距離的大?。ㄈ?n個(gè)像素),也就是說,不管在什么比例的情況下,選中的圖形元素都以在屏幕上與要選圖形元素的距離小于 n個(gè)像素 為標(biāo)準(zhǔn)。 即按中點(diǎn)到圓的距離小于 jl。 CRgn 類封裝了一些進(jìn)行區(qū)域操作的函數(shù),可以直接解決按中點(diǎn)是否在多邊形區(qū)域中的問題。 提高圖形重畫速度 在提高圖形重畫速度時(shí),首先要得到視圖屏幕即客戶區(qū)的大小。 // TODO: add draw code for native data here xMinScreen=m_xStart。 4 矢量圖形工具系統(tǒng)的設(shè)計(jì) 類的實(shí)現(xiàn) 1) 面向?qū)ο蟮奈臋n組織機(jī)制 管理矢量圖形系統(tǒng)圖形數(shù)據(jù)的方法即文檔管理機(jī)制。在MFC 中有一個(gè)類模班 CTypedPtrArray,可以用它來創(chuàng)建一個(gè)管理類指針的對(duì)象。如增加一條直線時(shí),需要?jiǎng)?chuàng)建一個(gè) CLine 對(duì)象,并用這條直線的實(shí)際數(shù)據(jù)(起終點(diǎn)、所在圖層 、顏色等)初始化這個(gè) CLine 對(duì)象的成員變量。 這 6 個(gè)函數(shù)分別用來 實(shí)現(xiàn)增加一條直線、一個(gè)圓、一個(gè)圓弧、一個(gè)標(biāo)注文本、一條連續(xù)直線和 一個(gè)多邊形區(qū)域的功能。 在實(shí)現(xiàn)文件 中,加入函數(shù)的具體實(shí)現(xiàn)代碼。 第 13 頁(yè) 共 25 頁(yè) 函數(shù) GetGraphID 用來得到要增加的各類圖形元素的惟一識(shí)別號(hào) , 參數(shù) Lb用來表示圖形類別 。 因?yàn)樵?VC++的 R2_NOT 繪制模式下 ,線條不是彩色的 , 拖動(dòng)的圖形都不是用圖形元素的實(shí)際顏色 。 函數(shù) UpdateAllViews 使 屬于當(dāng)前文檔對(duì)象的所有視圖重畫。 Invalidate()。 2) InvalidateRgn 函數(shù) InvalidateRgn 函數(shù)的定義為: void InvalidateRgn(CRgn* pRgn, BOOL bErase=TRUE)。 if(pDocm_CurrentScreen0) //如果當(dāng)前不是首屏,當(dāng)前圖形屏幕序號(hào)減 1 pDocm_CurrentScreen。 p_Screen=pDocm_Screen。 pDocAddScreen(m_xStart,m_yStart,blc)。 指 針參數(shù)用來返回邊界矩形的最小和最大坐標(biāo),當(dāng)能計(jì)算得到邊界矩形時(shí),函數(shù)返回 TRUE,否則, 函數(shù)返回 FALSE。 SetCursor(LoadCursor(NULL,IDC_WAIT))。 if(!pb) return 。 p_Screen[0].blc=blc。 Int id_only。in_GraphSelect。 GraphSelect[n_GraphSelect++].id_only=id_only。 while(nn) GetGraph(i,nn)Draw(pDC,m_DrawMode,m_DrawModel,BackColor)。 CClientDC ht(this)。 為了實(shí)現(xiàn)圖形元素的移動(dòng)功能, 需要在圖形元素基類 CDraw 中定義一個(gè)純虛函數(shù): Public:
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1