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

正文內(nèi)容

一種矢量圖形工具的設(shè)計(jì)與實(shí)現(xiàn)—計(jì)算機(jī)(論文)-在線瀏覽

2025-02-09 10:09本頁(yè)面
  

【正文】 5. 具有子圖填充功能; 6. 具有圖層,顏色,線形等的設(shè)置功能; 7. 具有較大的存儲(chǔ)容量。 課題研究方法 面向?qū)ο蟮某绦蛟O(shè)計(jì),是目前程序設(shè)計(jì)的主流方法,在本設(shè)計(jì)中,將利用面向?qū)ο蟮某绦蛟O(shè)計(jì)和 C++類的組織方法,組織建立一個(gè)基本矢量圖形的圖形元素類。 本系統(tǒng)的開(kāi)發(fā)要求采用 VC 開(kāi)發(fā)平臺(tái),實(shí)現(xiàn)一個(gè)用于 GIS 的基本矢量圖形系統(tǒng)。該過(guò)程涉及與矢量圖形系統(tǒng)設(shè)計(jì)有關(guān)的類及其主要操作。 2 總體設(shè)計(jì)思想 整體功能模塊的設(shè)計(jì) 矢量圖形工具需要實(shí)現(xiàn)的 基本功能包括文件的打開(kāi)保存、圖形的編輯、基本圖形元素的繪制、圖形的選擇和重畫(huà),本課題設(shè)計(jì)的矢量 圖形工具系統(tǒng)的功能圖如圖1。 矢量圖形系統(tǒng)文件菜單編輯菜單鼠標(biāo)繪制圖形操作保存新建撤消復(fù)制粘貼打開(kāi)直線圓、圓弧、填充圓連續(xù)直線、多邊形區(qū)域標(biāo)注文本圖形放大圖形重畫(huà)圖形擺動(dòng)重畫(huà)上屏重畫(huà)首屏顯示全圖選中操作鼠標(biāo)點(diǎn)選放棄選中第 3 頁(yè) 共 25 頁(yè) ? 編輯菜單 下拉菜單里面的撤消選項(xiàng)可以撤消上一步的操作,同時(shí)選中圖形后可以進(jìn)行復(fù)制 和 粘貼 的 操作。 ? 選中操作 基本的矢量圖形系統(tǒng)應(yīng)該具有鼠標(biāo)點(diǎn)選圖形的功能,選中圖形后可以進(jìn)行簡(jiǎn)單的拖動(dòng)、刪除 等基本功能。被選中的圖形,會(huì)以特殊的方式顯示出來(lái)。 3 矢量圖形結(jié)構(gòu) 基類的組織 對(duì)各類圖形元素進(jìn)行分析,可以發(fā)現(xiàn)各類圖形元素具有一些相同的屬性和操作功能,如圖形元素的顏色、線型線寬所在層等屬性和得到一個(gè)圖形元素是否做了刪除標(biāo)志等操作。如圖 2。 //筆色 short m_ColorBrush。 //線寬 short m_LineType。 //線型橫向參數(shù) short m_Layer。 //圖形元素唯一 標(biāo)識(shí)號(hào) BOOL b_Delete。 CDraw (short ColorPen,short ColorBrush,float LineWide,short LineType,float xScale,short Layer,int id_only,BOOL Delete) virtual ~CDraw()。 1) 點(diǎn)類圖形元素組織 點(diǎn)類圖形元素 ,其基本特性是各個(gè)圖形相互獨(dú)立,且每個(gè)圖形元素具有有限個(gè)固定的特征點(diǎn)。 對(duì)圓類的創(chuàng)建方法與直線類 CLine 類似,圓除了具有圖形元素的基本特征外,還有自身的幾何特性,可以用圓心和半徑作為特征參數(shù)表示圓的幾何特性。所以可以從一個(gè)圓類派生得到一個(gè)圓弧類。 CText 類也有兩個(gè)構(gòu)造函數(shù),第二個(gè)構(gòu)造參數(shù)有多個(gè)參數(shù),并利用多個(gè)參數(shù)對(duì)類的成員變量進(jìn)行初始化。 2) 線類圖形元素組織 線類圖形元素包括很多種,如連續(xù)直線、混合線、樹(shù)狀線等,在本設(shè)計(jì)中,以最簡(jiǎn)單的連續(xù)直線為例進(jìn)行討論,對(duì)于其他類型線的實(shí)現(xiàn)方法,可根據(jù)連續(xù)直線的實(shí)現(xiàn)方法來(lái)開(kāi)發(fā)。一條連續(xù)直 線可能只有第 5 頁(yè) 共 25 頁(yè) 兩個(gè)頂點(diǎn),也可能有幾千個(gè)頂點(diǎn)。 3) 面類圖形元素的組織 面類圖形元素一般是由閉合線圍成的區(qū)域。最常用的面是多邊形區(qū)域,其邊界由一條連續(xù)直線組成。 在描述多邊形區(qū)域時(shí),最主要的是要描述邊界頂點(diǎn)坐標(biāo)。 另外一種描述方法是直接存儲(chǔ)區(qū)域的邊界頂點(diǎn)坐標(biāo),即把區(qū)域的整個(gè)邊界作為一條連續(xù)直線來(lái)存儲(chǔ)。 在本設(shè)計(jì)中,采用直接存儲(chǔ)邊界坐標(biāo)的方式。所以,可以由連續(xù)直線類 CPline 派生出一個(gè)CPlineRgn 類,來(lái)對(duì)多邊形區(qū)域進(jìn)行管理??蛻魠^(qū)的左下角的坐標(biāo)定義為 (m_xStart,m_yStart),并確定一個(gè)變量 blc 作為邏輯坐標(biāo)和實(shí)際坐標(biāo)的比例關(guān)系。 Void VPtoDP(int x, int y, float *X, float *Y)。 Float VLtoDL(int l)。 函數(shù) DLtoVL 用來(lái)將實(shí)際坐標(biāo)長(zhǎng)度轉(zhuǎn)換成邏輯坐標(biāo)長(zhǎng)度,參數(shù) l 是一個(gè)實(shí)際坐標(biāo)長(zhǎng)度,函數(shù)返回邏輯坐標(biāo)表示的長(zhǎng)度值。 Void VPtoDP(int x, int y, float *X, float *Y )。 Int VLtoDL(int l)。 Extern Void VPtoDP (int x, int y, float *X, float *Y)。 Extern Int VLtoDL (int l)。在圖形元素基類 CDraw 中,抽象定義一個(gè)進(jìn)行繪制操作的虛函數(shù)。 在各種圖形元素類 Cline、 CCircle、 CArc、 CText、 CPline、 CPlineRgn 中 ,重載虛函數(shù) Draw: public: virtual void Draw(CDC* pDC , int m_DrawMode, int m_DrawModel ,short BackColor)。 為了實(shí)現(xiàn)記錄屏幕狀態(tài)的功能,在文檔類 CDrawDoc 中定義一個(gè)結(jié)構(gòu)數(shù)組來(lái)存儲(chǔ)歷史圖形屏幕。 //當(dāng)前屏幕的序號(hào) int m_MaxScreen。 //記錄屏幕參數(shù)的結(jié)構(gòu)數(shù)組 第 7 頁(yè) 共 25 頁(yè) Typedef struct { Float blc。 //屏幕左下角橫坐標(biāo) Float sy。 在文檔類 CDrawDoc 中定義一個(gè)函數(shù),來(lái)完成存儲(chǔ)一個(gè)圖形屏幕狀 態(tài)的操作功能 : Public: Void AddScreen(float StartX, float StartY, float blc)。 在圖形元素的基類 CDraw 中定義一個(gè)虛函數(shù): Public: Virtual void GetRect(float *minx,float *minY,float *maxX,float *maxY)=0。 在由 CDraw 類派生的各個(gè)圖形元素類中重載虛函數(shù) GetRect, 即在各個(gè)類中加入以下定義代碼 : Public: Virtual void GetRect(float *minx,float *minY,float *maxX,float *maxY)。 1) 有效距離 確定有效距離的方法是 : 首先確定在視圖屏幕上有效距離的大?。ㄈ?n個(gè)像素),也就是說(shuō),不管在什么比例的情況下,選中的圖形元素都以在屏幕上與要選圖形元素的距離小于 n個(gè)像素 為標(biāo)準(zhǔn)。 只要鼠標(biāo)按中點(diǎn)到某圖形元素的實(shí)際距離小于這個(gè)有 效距離,就算選中了這個(gè)圖形。 //即 n 個(gè)像素的實(shí)際長(zhǎng)度 2) 各圖形元素選中的判斷 ? 直線 和連續(xù)直線 因?yàn)橹本€是沒(méi)有寬度的,所以, 直線的點(diǎn)選判斷實(shí)際上是要判斷一個(gè)點(diǎn)與一條直線的距離是否在一定的距離范圍之內(nèi)。 為了完成計(jì)算點(diǎn)到直線距離的功能, 定義了一個(gè)函數(shù) PointLine 在圖形元素基類 CDraw 中,使之在直線和連續(xù)直線類中都可以用到: Public: float PointLine(float xx,float yy,float x1,float y1,float x2,float y2)。 即按中點(diǎn)到圓的距離小于 jl。 ? 圓弧 圓弧的選中區(qū)域同圓類似,首先要確定按中點(diǎn)是否在圓弧所在的圓上。 因?yàn)閳A弧不是封閉的, 還要確定按中點(diǎn)相對(duì)于圓心的弧度是否在圓弧的弧度范圍內(nèi),可以通過(guò) CArc 類中的成員函數(shù) IsInArc 函數(shù)來(lái)確定。最簡(jiǎn)單的多邊形區(qū)域就是沒(méi)有旋轉(zhuǎn)的矩形(如水平標(biāo)注的文本就是這種情況),判斷一個(gè)點(diǎn)是否在這種矩形中的算法非常簡(jiǎn)單。 CRgn 類封裝了一些進(jìn)行區(qū)域操作的函數(shù),可以直接解決按中點(diǎn)是否在多邊形區(qū)域中的問(wèn)題。在矢量圖形 Draw第 9 頁(yè) 共 25 頁(yè) 中,要求選 中線類圖形元素時(shí),用虛線表示;選中區(qū)域類圖形元素時(shí),就用 虛邊線、變色或反色顯示。 圖形的移動(dòng) 圖形移動(dòng)指的是將圖形元素在橫向和縱向上移動(dòng)一定的偏移量, 得到移動(dòng)后圖形元素的坐標(biāo)。在圖形元素基類 CDraw 中定義一個(gè)純虛函數(shù): Public: virtual void Move(float x_Move ,float y_Move )=0。 提高圖形重畫(huà)速度 在提高圖形重畫(huà)速度時(shí),首先要得到視圖屏幕即客戶區(qū)的大小。在進(jìn)行圖形繪制前,把視圖屏幕矩形有邏輯坐標(biāo)轉(zhuǎn)換成實(shí)際坐標(biāo)。在實(shí)現(xiàn)文件 中,增加全局變量的定義 : Float xMinScreen , yMinScreen , xMaxScreen , yMaxScreen。在實(shí)現(xiàn)文件 中的繪制函數(shù) CDrawView::OnDraw(CDC* pDC)中加入代碼,實(shí)現(xiàn)在每次繪制前得到視圖屏 幕邊界的實(shí)際坐標(biāo) : void CDrawView::OnDraw(CDC* pDC) { CDrawDoc* pDoc = GetDocument()。 // TODO: add draw code for native data here xMinScreen=m_xStart。 xMaxScreen=xMinScreen+blc*m_wScreen。 DrawBack(pDC)。 m_MapMode=pDCSetMapMode(1)。 4 矢量圖形工具系統(tǒng)的設(shè)計(jì) 類的實(shí)現(xiàn) 1) 面向?qū)ο蟮奈臋n組織機(jī)制 管理矢量圖形系統(tǒng)圖形數(shù)據(jù)的方法即文檔管理機(jī)制。 這種機(jī)制就是通過(guò)圖形元素類創(chuàng)建很多圖形元素對(duì)象,每個(gè)圖 形元素對(duì)象作 為一個(gè)整體來(lái)組織存儲(chǔ)空間的分配、存取等各種管理功能。這種文檔管理機(jī)制具有組織簡(jiǎn)單 、 結(jié)構(gòu)化和移植性好, 以及比較容易利用 VC++程序設(shè)計(jì)語(yǔ)言的開(kāi)發(fā)功能等優(yōu)點(diǎn)。 管理一個(gè)矢量圖形系統(tǒng)文檔的思路是: 每個(gè)圖形元素是圖形元素類創(chuàng)建的一個(gè)對(duì)象,在創(chuàng)建這個(gè)對(duì)象時(shí)得到指向這個(gè)對(duì)象的指針,建立一個(gè)對(duì)象指針數(shù)組來(lái)管理這些指針,以達(dá)到管理所有圖形元素對(duì)象的目的。在MFC 中有一個(gè)類模班 CTypedPtrArray,可以用它來(lái)創(chuàng)建一個(gè)管理類指針的對(duì)象。 其他各圖形類的管理類指針對(duì)象和 Cline 類指針的對(duì)象類似: CTypedPtrArrayCObArray,CCircle*m_CircleArray。 CTypedPtrArrayCObArray,CText*m_TextArray。 CTypedPtrArrayCObArray,CPlineRgn*m_PLineRgnArray。如增加一條直線時(shí),需要?jiǎng)?chuàng)建一個(gè) CLine 對(duì)象,并用這條直線的實(shí)際數(shù)據(jù)(起終點(diǎn)、所在圖層 、顏色等)初始化這個(gè) CLine 對(duì)象的成員變量。如增加一條 CLine 對(duì)象后,需要把指向這個(gè) CLine 對(duì)象的指針增加到文檔類的 m_LineArray 對(duì)象中。 CCircle* AddCircle(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float CircleX,float CircleY,float CircleR,BOOL bFill)。 CText* AddText(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,float StartX,float StartY,float Angle1,float Angle2,float TextHeight,float TextWide,float OffWide,unsigned char TextFont,int TextLong,CString Text); CPline* AddPLine(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer,int id_only,int Numble,PointStruct *PointList)。 這 6 個(gè)函數(shù)分別用來(lái) 實(shí)現(xiàn)增加一條直線、一個(gè)圓、一個(gè)圓弧、一個(gè)標(biāo)注文本、一條連續(xù)直線和 一個(gè)多邊形區(qū)域的功能。 3) 得到指向 圖形元素對(duì)象的指針 在一個(gè)矢量圖形系統(tǒng)中,有大量的圖形元素,指向圖形元素對(duì)象的指針被保存在文檔類對(duì)應(yīng)的 CObArray 對(duì)象中。 在實(shí)現(xiàn)文件 中,加入函數(shù)的具體實(shí)現(xiàn)代碼。 在實(shí)現(xiàn)文件 中,加入函數(shù)的具體實(shí)現(xiàn)代碼。 在實(shí)現(xiàn)文件 中,加入函數(shù)的具體實(shí)現(xiàn)代碼。為了得到存儲(chǔ)在各個(gè) CObArray 對(duì)象中的最大數(shù)組下標(biāo),在文檔類 CDrawDoc 中定義一個(gè)函數(shù)如下: Public: Int GetGraphUpperBound(short Lb)。 7) 得到某個(gè)識(shí)別號(hào)的圖形元素對(duì)象指針在 CObArray 數(shù)組中的存放位置 Public: Int GetGraphIndex(short Lb,int ID)。 8) 得到圖形元素的唯一識(shí)別號(hào) 在應(yīng)用程序 Draw 中 , 采用同類圖形元素具有惟一識(shí)別號(hào)的方法 , 即每一類別的圖形元素具有不同的成員變量 m_id_only。 第 13 頁(yè) 共 25 頁(yè) 函數(shù) GetGraphID 用來(lái)得到要增加的各類圖形元素的惟一識(shí)別號(hào) , 參數(shù) Lb用來(lái)表示圖形類別 。
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1