【文章內(nèi)容簡(jiǎn)介】
DrawArc:繪制弧線類(lèi) DrawPentagon:繪制正五邊形類(lèi) DrawCircle:繪制圓類(lèi) DrawHexagon:繪制正六邊形類(lèi) DrawTriangle:繪制正三角形類(lèi) DrawPieSlice:繪制扇形類(lèi) DrawSquare:繪制正方形類(lèi) DrawBezierCurve:繪制貝塞爾曲線類(lèi) 不同類(lèi)型的繪圖類(lèi)之間的繼承關(guān)系如下圖所示: D r a w O b j e c tA b s t r a c t C l a s sD r a w L i n eC l a s sI n h e r i t e d f r o m D r a w O b j e c tD r a w R e c t a n g l eC l a s sI n h e r i t e d f r o m D r a w O b j e c tD r a w P o l y g o nC l a s sI n h e r i t e d f r o m D r a w L i n eD r a w P i c t u r eC l a s sI n h e r i t e d f r o m D r a w R e c t a n g l eD r a w C i r c l eC l a s sI n h e r i t e d f r o m D r a w R e c t a n g l eD r a w E l l i p s eC l a s sI n h e r i t e d f r o m D r a w R e c t a n g l eD r a w S t r i n gC l a s sI n h e r i t e d f r o m D r a w R e c t a n g l eD r a w T r i a n g l eC l a s sI n h e r i t e d f r o m D r a w C i r c l eD r a w A r cC l a s sI n h e r i t e d f r o m D r a w E l l i p s eD r a w S q u a r eC l a s sI n h e r i t e d f r o m D r a w C i r c l eD r a w H e x a g o nC l a s sI n h e r i t e d f r o m D r a w C i r c l eD r a w P e n t a g o nC l a s sI n h e r i t e d f r o m D r a w C i r c l eD r a w P i e S l i c eC l a s sI n h e r i t e d f r o m D r a w E l l i p s eD r a w B e z i e r C u r v eC l a s sI n h e r i t e d f r o m D r a w O b j e c tD r a w M u l t i L i n eC l a s sI n h e r i t e d f r o m D r a w L i n e 圖 繪圖類(lèi)之間的繼承關(guān)系圖 2020 屆本科畢業(yè)設(shè)計(jì)說(shuō)明書(shū) 9 4. 3 系統(tǒng)操作界面的設(shè)計(jì) 系統(tǒng)的操作界面由圖形繪制和編輯區(qū)域、系統(tǒng)繪圖功能參數(shù)設(shè)置區(qū)域兩大部分構(gòu)成。用戶可在系統(tǒng)參數(shù)設(shè)置區(qū)域上進(jìn)行功能 和參數(shù)選擇,在繪圖區(qū)域上對(duì)草圖進(jìn)行繪制和編輯,以求達(dá)到預(yù)期的繪圖效果。 操作界面由 WhiteBoard 用戶控件、 DrawArea 用戶控件、 ToolStrip1 系統(tǒng)控件、ToolStrip2 系統(tǒng)控件構(gòu)成。其中 DrawArea 用戶控件、 ToolStrip1 系統(tǒng)控件、ToolStrip2 系統(tǒng)控件被集成在 WhiteBoard 用戶控件之中,而 DrawArea 控件則為草圖繪制和編輯區(qū)域, ToolStrip1 控件和 ToolStrip2 控件則用來(lái)對(duì)系統(tǒng)的各項(xiàng)參數(shù)進(jìn)行設(shè)置。 DrawArea 控件和 ToolStrip ToolStrip2 控件被嵌入在 WhiteBoard 控件中,進(jìn)而將整個(gè) WhiteBoard 用戶控件加載到 Form 中形成用戶界面。 下圖為操作界面設(shè)計(jì)圖: 圖 系統(tǒng)主操作界面 4. 4 草圖存儲(chǔ)讀取機(jī)制的設(shè)計(jì) 繪制草圖的核心功能是通過(guò)調(diào)用 GDI+提供的繪圖方法而實(shí)現(xiàn) ,圖形在繪制完成之后,系統(tǒng)要能夠?qū)⑵浔4娴酱鎯?chǔ)器或者數(shù)據(jù)庫(kù)中,這就需要提取每個(gè)圖形的基本特征屬性,然后再按照 DXF 的格式將其存儲(chǔ)。 功能參數(shù)設(shè)置欄 圖形繪制和編輯區(qū)域 功能參數(shù)設(shè)置欄 2020 屆本科畢業(yè)設(shè)計(jì)說(shuō)明書(shū) 10 草圖的 DXF 存儲(chǔ)設(shè)計(jì) 草圖的 DXF 存儲(chǔ)主要是根據(jù)所繪圖形的特征屬性 等基本信息將其存儲(chǔ)為標(biāo)準(zhǔn)的DXF 文件,包含生成文件固定的字段、根據(jù)圖形特征屬性等基本信息填充 HEADERS 段、TABLES 段、 ENTITIES 段等,將所有數(shù)據(jù)按照規(guī)定的順序填充到一個(gè)文件中并將數(shù)據(jù)生成標(biāo)準(zhǔn)的 DXF 文件。 以 D X F 格 式 讀 取 草 圖第 一 步 填 充 D X F 文 件 的 固 定 字 段第 二 步 根 據(jù) 圖 形 的 特 征 屬 填 充 基本 信 息第 三 步 按 照 順 序 生 成 標(biāo) 準(zhǔn) 的 D X F文 件填 充 尺 寸 、 版 本 等 信 息填 充 圖 層 、 樣 式 表 等 信 息根 據(jù) 圖 形 填 充 實(shí) 體 信 息 圖 草圖的 DXF存儲(chǔ)流程設(shè)計(jì) 草圖的 DXF 讀取設(shè)計(jì) 草圖的 DXF 讀取主要是打開(kāi)一個(gè)標(biāo)準(zhǔn)的 DXF 文件,然后將打開(kāi)文件中的字符串保存起來(lái)以便后續(xù)分析提取有用的信息,將字符串按 HEADERS、 TABLES、 ENTITIES 段分別提取出來(lái),根據(jù)分離出的信息按照組碼提取需要的組值,最后根據(jù)所提取的信息調(diào)用系統(tǒng)繪圖功能繪出圖形。 以 D X F 格 式 讀 取 草 圖第 一 步 讀 取 D X F 文 件 的 整 個(gè) 字 符 串第 二 步 根 據(jù) 不 同 名 稱 的 段 分 離 屬于 各 個(gè) 段 的 字 符 串第 三 步 根 據(jù) 組 碼 值 提 取 草 圖 特 征屬 性第 四 步 將 草 圖 特 征 屬 性 信 息 加 載至 繪 圖 系 統(tǒng) 并 將 其 繪 出 圖 草圖的 DXF讀取流程設(shè)計(jì) 2020 屆本科畢業(yè)設(shè)計(jì)說(shuō)明書(shū) 11 5 基于 DXF 技術(shù)的草圖繪制系統(tǒng)實(shí)現(xiàn) 5. 1 草圖繪制功能的實(shí)現(xiàn) 草圖繪制功能是繪圖系統(tǒng)前臺(tái)的重要組成部分,該功能的實(shí)現(xiàn)需要為每種類(lèi)型的圖形設(shè)計(jì)其獨(dú)立的繪圖算法,并選擇適當(dāng)?shù)?GDI+所提供的繪圖方法才能將各種不同類(lèi)型的草圖順利繪出。在繪制草圖之前要首先設(shè)置系統(tǒng)的畫(huà)筆( Pen)參數(shù),包括畫(huà)筆線條寬度 、顏色、虛實(shí)等,其次對(duì)于閉合圖形還可設(shè)置其填充方式和顏色。針對(duì)不同類(lèi)型草圖的繪制方法系統(tǒng)的具體實(shí)現(xiàn)如下: 直線( Line)的繪制 直線的繪制需要在繪圖區(qū)域捕獲兩個(gè)坐標(biāo)點(diǎn),第一個(gè)坐標(biāo)點(diǎn)為直線的起始坐標(biāo)點(diǎn)StartPoint,第二個(gè)坐標(biāo)點(diǎn)為直線的終止坐標(biāo)點(diǎn) EndPoint,然后生成 所提供的 Graphics 對(duì)象 g,最后調(diào)用 (Pen, , , , )函數(shù)將其繪出 。 Pen 為系統(tǒng)畫(huà)筆參數(shù), 和 分別為該點(diǎn)在畫(huà)板上的 X 軸坐標(biāo)分量和 Y 軸坐標(biāo)分量,以下各圖形介紹均以此為例。 繪制直線的流程圖如下: 開(kāi) 始鼠 標(biāo) 左 鍵 點(diǎn) 擊 繪 圖 區(qū) 域 , 獲 取 其 坐 標(biāo) 為直 線 起 始 點(diǎn) S t a r t p o i n t鼠 標(biāo) 左 鍵 按 下 并 停 留 于 原 坐 標(biāo) 點(diǎn) 或 移 動(dòng) , 獲 取其 坐 標(biāo) 為 直 線 終 止 點(diǎn) E n d P o i n t生 成 G r a p h i c s 對(duì) 象 g調(diào) 用 g . D r a w L i n e ( P e n , S t a r t P o i n t . X , S t a r t P o i n t . Y , E n d P o i n t . X , E n d P o i n t . Y ) 函 數(shù) 將 直 線 繪 出結(jié) 束是鼠 標(biāo) 左 鍵 是 否 始 終 按 下否 圖 繪制直線的流程圖 2020 屆本科畢業(yè)設(shè)計(jì)說(shuō)明書(shū) 12 貝塞爾曲線( BezierCurve)的繪制 貝塞爾曲線 就是這樣的一條曲線,它是依據(jù)四個(gè)位置任意的點(diǎn)坐標(biāo)繪制出的一條光滑曲線 。在歷史上,研究 貝塞爾 曲線的人最初是按照已知曲線 參數(shù)方程 來(lái)確定四個(gè)點(diǎn)的思路設(shè)計(jì)出這種矢量曲線繪制法。 貝塞爾 曲線的有趣之處更在于它的 “ 皮筋效應(yīng) ” , 也就是說(shuō),隨著點(diǎn)有規(guī)律地移動(dòng),曲線將產(chǎn)生皮筋伸引一樣的變換,帶來(lái)視覺(jué)上的沖擊。 1962年,法國(guó)數(shù)學(xué)家 Pierre B233。zier第一個(gè)研究了這種 矢量 繪制曲線的方法,并給出了詳細(xì)的計(jì)算公式 。 貝塞爾曲線的重要作用在于: 由于用計(jì)算機(jī)畫(huà)圖大部分時(shí)間是操作鼠標(biāo)來(lái)掌握線條的路徑,與手繪的感覺(jué)和效果有很大的差別。即使是一位精明的畫(huà)師能輕松繪出各種圖形,拿到鼠標(biāo)想隨心所欲的畫(huà)圖也不是一件容易的事。這一點(diǎn)是計(jì)算機(jī)萬(wàn)萬(wàn)不能代替手工的工作,所以到目前為止人們只能頗感無(wú)奈。使用貝塞爾工具畫(huà)圖很大程度上彌補(bǔ)了這一缺憾。 貝塞爾曲線的繪制需要在繪圖區(qū)域捕獲四個(gè)坐標(biāo)點(diǎn),第一個(gè)坐標(biāo)點(diǎn)為貝塞爾曲線的起始坐標(biāo)點(diǎn) StartPoint,第二個(gè)坐標(biāo)點(diǎn)為貝塞爾曲線的終止坐標(biāo)點(diǎn) EndPoint,然后生成 所提供的 Graphics 對(duì)象 g 并調(diào)用 (Pen, , , , )函數(shù)繪出貝塞爾曲線的主體直線,第三個(gè)坐標(biāo)點(diǎn)為貝塞爾曲線的其中一個(gè)控制坐標(biāo)點(diǎn) ControlPoint1,還需調(diào)用 (Pen,StartPoint,ControlPoint1,ControlPoint1,EndPoint)繪制單控制點(diǎn)貝塞爾曲線,第四個(gè)坐標(biāo)點(diǎn)為貝塞爾曲線的另一個(gè)控制坐標(biāo)點(diǎn) ControlPoint2,此時(shí)調(diào)用 (Pen,StartPoint,ControlPoint1,ControlPoint2,EndPoint)完整的貝塞爾曲線即繪制完畢。 繪制貝塞爾曲線的效果圖如下: 圖 繪制貝塞爾曲線的效果圖 繪制貝塞爾曲線的流程圖如下: 2020 屆本科畢業(yè)設(shè)計(jì)說(shuō)明書(shū) 13 開(kāi) 始鼠 標(biāo) 左 鍵 點(diǎn) 擊 繪 圖 區(qū) 域 , 獲 取 其 坐標(biāo) 為 貝 塞 爾 曲 線 起 始 點(diǎn) S t a r t p o i n t鼠 標(biāo) 左 鍵 按 下 并 停 留 于 原 坐 標(biāo) 點(diǎn) 或 移 動(dòng) ,獲 取 其 坐 標(biāo) 為 貝 塞 爾 曲 線 終 止 點(diǎn) E n d P o i n t生 成 G r a p h i c s 對(duì) 象 g調(diào) 用 g . D r a w L i n e ( P e n , S t a r t P o i n t . X , S t a r t P o i n t . Y , E n d P o i n t . X , E n d P o i n t . Y ) 函 數(shù) 將 貝 塞 爾 曲 線 主 體 直 線繪 出結(jié) 束是鼠 標(biāo) 左 鍵 是 否 始 終 按 下否鼠 標(biāo) 左 鍵 按 下 并 停 留 于 原 坐 標(biāo) 點(diǎn) 或 移 動(dòng) , 獲 取其 坐 標(biāo) 為 貝 塞 爾 曲 線 一 個(gè) 控 制點(diǎn) C o n t r o l P o i n t 1調(diào) 用 g . D r a w B e z i e r ( P e n , S t a r t P o i n t , C o n t r o l P o i n t 1 , C o n t r o l P o i n t 1 , E n d P o i n t ) 函 數(shù) 將 貝 塞 爾 曲 線 單 點(diǎn) 控 制 線 繪 出鼠 標(biāo) 左 鍵 是 否 始 終 按 下是鼠 標(biāo) 左 鍵 按 下 并 停 留 于 原 坐 標(biāo) 點(diǎn) 或 移 動(dòng) , 獲 取 其坐 標(biāo) 為 貝 塞 爾 曲 線 另 外 一 個(gè) 控 制點(diǎn) C o n t r o l P o i n t 2調(diào) 用 g . D r a w B e z i e r ( P e n , S t a r t P o i n t , C o n t r o l P o i n t 1 , C o n t r o l P o i n t 2 , E n d P o i n t ) 函 數(shù) 將 完 整 的 貝 塞 爾 曲 線 繪 出鼠 標(biāo) 左 鍵 是 否 始 終 按 下是否否 圖 繪制貝塞爾曲線的流程圖 多段線 ( MultiLine) 的繪 制 多段線就是由多條直線首尾相連而組成的一種多段折線。在多段線的繪制過(guò)程中以鼠標(biāo)左鍵點(diǎn)擊繪圖域開(kāi)始繪制,以鼠標(biāo)右鍵點(diǎn)擊繪圖域結(jié)束繪制,其間所捕獲的所有坐標(biāo)點(diǎn)即為其特征點(diǎn)。 多段線的繪制需要在繪圖區(qū)域捕獲至少兩個(gè)坐標(biāo)點(diǎn),第一個(gè)坐標(biāo)點(diǎn)為多段線的起始坐標(biāo)點(diǎn) StartPoint,最后一個(gè)坐標(biāo)點(diǎn)為多段線的終止坐標(biāo)點(diǎn) EndPoint,在此兩點(diǎn)