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

正文內(nèi)容

一種矢量圖形工具的設(shè)計(jì)與實(shí)現(xiàn)—計(jì)算機(jī)(論文)-閱讀頁(yè)

2024-12-27 10:09本頁(yè)面
  

【正文】 鼠標(biāo)交互繪制 VC++提供了足夠的窗口消息和已經(jīng)保護(hù)的消息處理函數(shù)解決這個(gè)問題 。 VC++提供了兩個(gè)成員函數(shù)來滿足以上的功能需求 : CWnd::SetCapture()。 //釋放鼠標(biāo)捕捉 在用鼠標(biāo)交互繪制圖形元素時(shí) , 為了直觀的看到所繪制的圖形 , 一般采用拖動(dòng)圖形的方法 。 因?yàn)樵?VC++的 R2_NOT 繪制模式下 ,線條不是彩色的 , 拖動(dòng)的圖形都不是用圖形元素的實(shí)際顏色 。 在矢量圖形系統(tǒng)設(shè)計(jì)中 , 一般采用 CClientDC 對(duì)象 , 在交互繪制圖形元素操作完成后 , 即時(shí)在視圖中重畫這個(gè)新增的圖形元素 。所謂圖形重畫,就是把當(dāng)前視圖屏幕重新繪制一次,實(shí)際上也就是讓視圖類的函數(shù) OnDraw(CDC* pDC)重新執(zhí)行一次。 1. 全屏重畫 全屏重畫有兩種方式: ①在視圖類函數(shù)的實(shí)現(xiàn)代碼中,用以下代碼來激活重畫機(jī)制: CDrawDoc* pDoc=GetDocument()。 函數(shù) UpdateAllViews 使 屬于當(dāng)前文檔對(duì)象的所有視圖重畫。 ②在視圖類函數(shù)的實(shí)現(xiàn)代碼中,用以下代碼激活重畫機(jī)制: Invalidate()。Invalidate 函數(shù)與 UpdateAllViews 函數(shù)的不同點(diǎn)是,它只能使當(dāng)前視圖重畫,而與其同文檔的其他視圖并不重畫。修改后的代碼如下: Void CDrawView::OnGraphRedraw() { CDrawDoc* pDoc=GetDocument()。 Invalidate()。 2. 局部重畫 在很多情況下, 往往只希望將當(dāng)前視圖屏幕的一部分區(qū)域 進(jìn)行 重畫,即局部重畫。 1) InvalidateRect 函數(shù)的定義為 : Void InvalidateRect(LPCRECT lpRect ,BOOL bErase=TRUE)。這個(gè)函數(shù)的調(diào)用方法與函數(shù) Invalidate 類似。 2) InvalidateRgn 函數(shù) InvalidateRgn 函數(shù)的定義為: void InvalidateRgn(CRgn* pRgn, BOOL bErase=TRUE)。 參數(shù) pRgn是指向一個(gè) CRgn對(duì)象的指針。以下代碼可使 CRgn 對(duì)象 rgn指定的區(qū)域重畫 : InvalidateRgn(amp。 第 15 頁(yè) 共 25 頁(yè) 重畫上屏、首屏和顯示全圖 1) 重畫上屏 要實(shí)現(xiàn)重畫上屏 的 操作功能,只需把 m_CurrentScreen 的值減去 1,從結(jié)構(gòu)數(shù)組 m_Screen 中 取出屏幕參數(shù)重畫圖形即可。 if(pDocm_CurrentScreen0) //如果當(dāng)前不是首屏,當(dāng)前圖形屏幕序號(hào)減 1 pDocm_CurrentScreen。 m_yStart=p_Screen[pDocm_CurrentScreen].sy。 Invalidate()。 在實(shí)現(xiàn)文件 中, 在重載的虛函數(shù) OnActiveView 中對(duì) p_Screen進(jìn)行初始化,將它指向當(dāng)前文檔對(duì)象中的結(jié)構(gòu)數(shù)組 m_Screen: void CDrawView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { p_View=this。 p_Screen=pDocm_Screen。 } 2) 重畫首屏 對(duì)于重畫首屏 的 功能來說,只要取出存儲(chǔ)在結(jié)構(gòu)數(shù)組 m_Screen 中的首屏參數(shù), 并對(duì)視圖重畫即可。 if(pDocm_CurrentScreen==0) return 。 m_yStart=p_Screen[0].sy。 pDocAddScreen(m_xStart,m_yStart,blc)。 } 3) 顯示全圖 ①得到邊界矩形 在矢量圖形系統(tǒng)中,有一種情況是,圖形中所有的圖形元素都在視圖屏幕的一個(gè) 角上,只占圖幅的一小部分。實(shí)現(xiàn)顯示全圖功能的思路是,通過得到每一類圖形元素(如直線、連續(xù)直線)的邊界矩形,然后根據(jù)視圖屏幕的大?。ㄟ壿嬜鴺?biāo))進(jìn)行計(jì)算,得到屏幕的參數(shù) m_xStart,m_yStart,blc。在 節(jié)中我們已經(jīng)介紹了邊界矩形的實(shí)現(xiàn)方法, 把所有圖形元素的邊界矩形坐標(biāo)進(jìn)行比較, 就可以得到所有圖形元素的邊界矩形。 指 針參數(shù)用來返回邊界矩形的最小和最大坐標(biāo),當(dāng)能計(jì)算得到邊界矩形時(shí),函數(shù)返回 TRUE,否則, 函數(shù)返回 FALSE。 在函數(shù) GetRect 中,首先對(duì)記錄最小值和最大值的變量初始化,然后對(duì)所有的 直線連續(xù)直線圓圓弧標(biāo)注文本多邊形區(qū)域網(wǎng)絡(luò)點(diǎn)等類圖形元素 進(jìn)行循環(huán), 得到第 17 頁(yè) 共 25 頁(yè) 每個(gè)圖形元素的邊界矩形,并比較運(yùn)算得到所有圖形元素的邊界矩形。 ②顯示全屏 在得到所有圖形元素的邊界矩形后,就可以調(diào)整視圖屏幕的基點(diǎn)和比例,使當(dāng)前視圖正好能夠繪制下所有的圖形元素。 CDrawDoc* pDoc=GetDocument()。 SetCursor(LoadCursor(NULL,IDC_WAIT))。minx,amp。maxx,amp。 SetCursor(LoadCursor(NULL,IDC_ARROW))。 if(!pb) return 。 blc=(maxyminy)/(m_hScreen20)。 m_xStart=minx10*blc。 p_Screen[0].sx=m_xStart。 p_Screen[0].blc=blc。 Invalidate()。在文檔類第 18 頁(yè) 共 25 頁(yè) CDrawDoc 中,定義一個(gè)結(jié)構(gòu)數(shù)組和一個(gè)變量 : Protected: GraphSelectStruct *GraphSelect。 //選中圖形元素的數(shù)目 結(jié)構(gòu) GraphSelectStruct 在頭文件 中( CDrawDoc 類前)定義為 : Typedef struct { Short int Lb。 Int id_only。 將選中的圖形元素存儲(chǔ)在結(jié)構(gòu)數(shù)組 GraphSelect 中,成員變量 Lb 存儲(chǔ)選中圖形元素的類別; 成員變量 Index 存儲(chǔ)圖形元素的序列號(hào),即圖形元素在指針數(shù)組中的下標(biāo);成員變量 id_only 存儲(chǔ)這個(gè)圖形元素惟一的識(shí)別號(hào),即圖形元素中的成員變量 m_id_only。 } 在 CDrawDoc 類的析構(gòu)函數(shù)中,刪除動(dòng)態(tài)分配的結(jié)構(gòu)數(shù)組: CDrawDoc::~CDrawDoc() { Delete GraphSelect。 函數(shù) AddSelectList實(shí)現(xiàn)在結(jié)構(gòu)數(shù)組 GraphSelect中增加一個(gè)選中的圖形元素,增加成功是返回 TRUE, 否則函數(shù)返回 FALSE。in_GraphSelect。amp。amp。 } GraphSelect[n_GraphSelect].Lb=Lb。 GraphSelect[n_GraphSelect++].id_only=id_only。 } ②屏幕保留 為了能夠?qū)⑦x中的圖形元素在屏幕上保留,需要修改圖形繪制函數(shù),使視圖重畫時(shí),選中的圖形元素仍然能特殊顯示。 函數(shù)的實(shí)現(xiàn)代碼如下: void CDrawDoc::DrawGraph(CDC* pDC,int Lb,int index,int DrawMode,int DrawModel,short BackColor) { GetGraph(Lb,index)Draw(pDC,DrawMode,DrawModel,BackColor)。i=8。 while(nn) GetGraph(i,nn)Draw(pDC,m_DrawMode,m_DrawModel,BackColor)。in_GraphSelect。 } } 2) 放棄選中的圖形元素 所謂“放棄”, 就是取消對(duì)圖形元素的選中。 取消對(duì)圖形元素的所有選中,從數(shù)據(jù)操作角度來說是非常重要的,只需使選中的圖形元素是為 0即可,但除數(shù)據(jù)方面所做操作外,還需要在視圖中 把選中的圖形元素恢復(fù)到正常顯示狀態(tài)下,從直覺上感覺到放棄了對(duì)圖形元素的選中。 CClientDC ht(this)。ipDocn_GraphSelect。ht,pDocGraphSelect[i].Lb,pDocGraphSelect[i].index,0,0,0)。 } 圖形移動(dòng) 圖形移動(dòng)指的是將圖形元素在橫向和縱向上移動(dòng)一定的偏移量,得到移動(dòng)后圖形元素的坐標(biāo)。 為了實(shí)現(xiàn)圖形元素的移動(dòng)功能, 需要在圖形元素基類 CDraw 中定義一個(gè)純虛函數(shù): Public: virtual void Move(float x_Move ,float y_Move )=0。 在各個(gè)圖形元素類中增第 21 頁(yè) 共 25 頁(yè) 加這個(gè)虛函數(shù)的重載定義 : Public: Virtual void Move(float x_Move ,float y_Move )。 5 系統(tǒng)測(cè)試 本課題是在 windows2021 的系統(tǒng)下, vc++ 的運(yùn)行環(huán)境中設(shè)計(jì)開發(fā)的。 下面以簡(jiǎn)單的圖形擺動(dòng) 為例說明驗(yàn)證結(jié)果: 首先畫出幾個(gè)簡(jiǎn)單的圖形,然后選擇圖形操作下拉選項(xiàng)的圖形擺動(dòng)操作,鼠標(biāo)拖動(dòng)的白線就是圖形擺動(dòng)時(shí)圖形發(fā)生的改變。同時(shí)還可以驗(yàn)證重畫上屏的操作,圖形恢復(fù)到未擺動(dòng)時(shí)的樣子。 ? 圖 4 中已經(jīng)選中了圖形擺動(dòng)的操作,圖中白線就 是鼠標(biāo)拖動(dòng)的痕跡,從左往右拖動(dòng),這時(shí)候還沒有第二次按下鼠標(biāo)左鍵。 ? 這個(gè)時(shí)候 可以驗(yàn)證重畫上屏的操作 ,就可以得到擺動(dòng)前的圖形。 圖 3 圖形擺動(dòng)前的效果 第 22 頁(yè) 共 25 頁(yè) 圖 4 圖形擺動(dòng)前操作 鼠標(biāo)左鍵第二次按下,就會(huì)出現(xiàn)如圖 5所示效果,圖形已經(jīng)實(shí)現(xiàn)了往右擺動(dòng): 圖 5 擺動(dòng)后的效果 結(jié) 論 本次課題的研究主要分析了基本的矢量圖形工具系統(tǒng)的實(shí)現(xiàn)方法,并對(duì) 其中重要的函數(shù)和算法進(jìn)行了描述。 可以處理基本的圖形元素,有 方便 的交互繪制設(shè)計(jì),同時(shí)具有豐富的圖形操作能力。 由于時(shí)間關(guān)系,矢量圖形的顏色和形狀不能進(jìn)行選擇,并且沒有實(shí)現(xiàn)數(shù)據(jù)庫(kù)相關(guān)的圖形保存功能,在今后的設(shè)計(jì)中,加入數(shù)據(jù)庫(kù)應(yīng)用技術(shù),實(shí)現(xiàn)數(shù)據(jù)庫(kù)瀏覽視圖和編輯功能以及通用數(shù)據(jù)庫(kù)過濾功能,近一步完善系統(tǒng)功能 。 [2] 蔡宇輝 ,李軍義 .面向?qū)ο蟪绦蛟O(shè)計(jì) [M].北京 : 機(jī)械工業(yè)出版社出版 ,2021。 [4] 夏云龍 .最新 Visual C++ 使 用手冊(cè)等編著 [M].北京 : 電子工業(yè)出版社 ,2021。 [6] 官章全等 .VC++高級(jí)編程范例 [D].北京 : 電子工業(yè)出版社 ,2021。 第 24 頁(yè) 共 25 頁(yè) 致 謝 本文是在 萬(wàn)武南 老師的熱情關(guān)心和指導(dǎo)下完成的,她淵博的知識(shí)和嚴(yán)謹(jǐn)?shù)闹螌W(xué)作風(fēng)使我受益匪淺,對(duì)順利完成本課題起到了極大的作用。她無論在理論上還是實(shí)踐上都給予了我很大的幫助,給了我許多有益的建議和意見,使我的思維得到了進(jìn)一步開闊,使我得到不少的提高,這對(duì)于我以后的工作和學(xué)習(xí)都有一種巨大的幫助,感謝她耐心的輔導(dǎo)。文中除了特別加以標(biāo)注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學(xué)院或其他教學(xué)機(jī)構(gòu)的學(xué)位或證書而使用過的材料。 關(guān)于學(xué)位論文使用權(quán)和研究成果知識(shí)產(chǎn)權(quán)的說明: 本人完全了解成都信息工程學(xué)院有關(guān)保管使用學(xué)位論文的規(guī)定,其中 包括: ( 1)學(xué)校有權(quán)保管并向有關(guān)部門遞交學(xué)位論文的原件與復(fù)印件。 ( 3)學(xué)校可以學(xué)術(shù)交流為目的復(fù)制、贈(zèng)送和交換學(xué)位論文。 ( 5)學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容(保密學(xué)位論文在解密后遵守此規(guī)定)。 特此聲明! 作者簽名: 2021 年 月 日 第 26 頁(yè) 共 25 頁(yè) d the whale municate over hundreds of miles? How did it use echoes to find its prey in the ocean gloom, to stun fish, diagnose illness in another whale? Questionsto which the answers could prove invaluable. But instead of learning, men threatened to wipe the species out. Aboard the catcher boat no such thoughts crossed the gunner39。s eightinch teeth. ted on the shore. Someone set it ablaze. Spar ks crackled amid whirling smoke. Excited, cherry cheeked children ringed the bonfi
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1