【正文】
如下圖所示: 2020 屆本科畢業(yè)設(shè)計(jì)說明書 28 圖 本系統(tǒng)所繪草圖 圖 AutoCAD系統(tǒng)所打開的本系統(tǒng)所存 DXF文件 AutoCAD 軟件并不支持圖形的數(shù)據(jù)庫存儲(chǔ),本系統(tǒng)的擴(kuò)展功能為支持將草圖特征信息存儲(chǔ)到數(shù)據(jù)庫中,但這種存儲(chǔ)形式并非 DXF 格式,從而 并不能實(shí)現(xiàn)與其他 CAD軟件的數(shù)據(jù)交換與兼容,所設(shè)計(jì)的數(shù)據(jù)庫表單以畫板表、 Line 表、 Circle 表為例展示如下: 表 畫板表 2020 屆本科畢業(yè)設(shè)計(jì)說明書 29 序號 字段名 字段說明 類型 寬度 1 2 3 4 5 6 7 8 9 id name count linenumber liype linecolor fillstyle fillcolor textstyle 惟一標(biāo)識(shí)分類 (畫板號 ) 畫板名稱 實(shí)體數(shù)量 線寬 線型 線性顏色 填充方式 填充顏色 字體樣 式 int nvarchar int int char int char int char 4 10 4 4 10 4 10 4 10 表 Line 表 序號 字段名 字段說明 類型 寬度 1 2 3 4 5 6 7 id fid startpoint endpoint linenumber liype linecolor 惟一標(biāo)識(shí)分類 所屬畫板號 起始點(diǎn) 終點(diǎn) 線寬 線型 線性顏色 int int double double int char int 4 4 4 4 4 10 4 表 Circle 表 。在實(shí)現(xiàn)該部分功能時(shí),需要詳細(xì)研究 DXF 機(jī)制,主要思路是對不同類型的草圖提取其各自的特征屬性(見表),再將其轉(zhuǎn)化為 DXF 文件的各個(gè)段中的信息,最終以 ASCII 字符串的形式存儲(chǔ)。 掃過角度 public ListPoint PointList = new ListPoint()。 控制點(diǎn) 2 public float StartAngel = 0。 終止點(diǎn) public Point ControlPoint1 = new Point()。 畫刷顏色 填充閉合圖形時(shí)用 public Point StartPoint = new Point()。 閉合圖形填充方式 默認(rèn)為有邊框白色填充 public Color PenColor = new Color()。 畫筆寬度 public PenStyle PenStyle = 。 系統(tǒng)存儲(chǔ)圖形特征屬性的類的結(jié)構(gòu)如下表: 表 存儲(chǔ)圖形特征屬性的類的結(jié)構(gòu)表 變量名 所存儲(chǔ)的圖形特征屬性 public DrawObjectType Type = new DrawObjectType()。 2020 屆本科畢業(yè)設(shè)計(jì)說明書 25 5. 3 草圖復(fù)制粘貼功能的實(shí)現(xiàn) 草圖繪制系統(tǒng)所實(shí)現(xiàn)的復(fù)制粘貼功能涉及系統(tǒng)所具備的各種草圖類型,復(fù)制粘貼功能既可以在單獨(dú)的繪圖系統(tǒng)中使用,也可以完成在同時(shí)開啟的兩個(gè)不同的繪圖系統(tǒng)間的草圖的復(fù)制與粘貼。 改變草圖的形狀與大小 為了能改變草圖的形狀和大小,系統(tǒng)為每種類型的草圖都設(shè)置了鎖定紅框,鎖定紅框的作用就是紅框勾勒出圖形的大致輪廓,并以小紅點(diǎn)的形式標(biāo)記出可以改變圖形形狀和大小的特殊點(diǎn),當(dāng)鼠標(biāo)左鍵單擊已繪制的草圖時(shí)鎖定紅框隨即出現(xiàn),當(dāng)鼠標(biāo)移動(dòng)到特殊點(diǎn)時(shí)光標(biāo)形狀會(huì)發(fā)生變化,此時(shí)按下左鍵通過改變光標(biāo)位置即可實(shí)現(xiàn)草 圖的形狀大小的改變,下圖為各個(gè)類型草圖的鎖定紅框: 圖 各個(gè)類型草圖的鎖定紅框 填充閉合草圖 系統(tǒng)提供三種不同的方式填充閉合草圖,分別為有邊框白色填充、有邊框顏色填充、無邊框顏色填充。 繪制點(diǎn)軌跡曲線的效果圖如下: 圖 繪制點(diǎn)軌跡曲線的效果圖 2020 屆本科畢業(yè)設(shè)計(jì)說明書 23 繪制點(diǎn)軌跡曲線的流程圖如下: 開 始鼠 標(biāo) 左 鍵 點(diǎn) 擊 繪 圖 區(qū) 域 , 鼠 標(biāo) 停 留 于 原 點(diǎn) 或 移 動(dòng) 并獲 取 其 坐 標(biāo) 點(diǎn) 作 為 參 數(shù) 存 入 P o i n t L i s t 數(shù) 組 以 P o i n t L i s t 中 每 兩 個(gè) 相 鄰 的 元 素 為 參 數(shù) , 調(diào) 用g . D r a w L i n e ( P e n , P o i n t L i s t [ i ] . x , P o i n t L i s t [ i ] . y , P o i n t L i s t [ i 1 ] . x , P o i n t L i s t [ i 1 ] . y ) 函 數(shù) 將 點(diǎn) 軌 跡 曲 線 繪 出結(jié) 束生 成 G r a p h i c 對 象 g鼠 標(biāo) 左 鍵 是 否 按 下是否 圖 繪制點(diǎn)軌跡曲線的流程圖 5. 2 草圖編輯功能的實(shí)現(xiàn) 草圖的編輯功能主要是改變草圖的線條寬度、線條樣式、線條顏色、形狀和大小以及動(dòng)態(tài)拖動(dòng)草圖 。獲取參數(shù)后生成 提供的Graphics 對象 g,然后將 PointList 數(shù)組中的點(diǎn)按順序依次取出,使每兩個(gè)相鄰的點(diǎn)作為參數(shù),調(diào)用 (Pen, PointList [i].x, PointList [i].y, PointList [i1].x, PointList [i1].y)函數(shù)將點(diǎn)軌跡曲線繪出。獲取參數(shù)后生成 Graphics 對象 g,最后調(diào)用 (Pen, CurvePoints)函數(shù)將正六邊形繪出。獲取參數(shù)后生成 提供的 Graphics 對象 g,最后調(diào)用 (Pen, CurvePoints)函數(shù)將正五邊形繪出。獲取參數(shù)后生成 提供的 Graphics 對象 g,最后調(diào)用 (Pen, CurvePoints)函數(shù)將正方形繪出。獲取參數(shù)后生成 所提供的 Graphics 對象 g,最后調(diào)用 (Pen, CurvePoints)函數(shù)將正三角形繪出。獲取參數(shù)后生成 所提供的 Graphics 對象 g,最后調(diào)用(Pen,Rectangle)函數(shù)將矩形繪出。獲取參數(shù)后生成 所提供的 Graphics 對象 g,所以調(diào)用 (Pen,Rectangle)函數(shù)即可將橢圓繪出。獲取參數(shù)后生成 所提供的 Graphics 對象 g,因?yàn)閳A屬于一種特殊的橢圓,所以調(diào)用 (Pen, Radius, Radius, 2 * Radius, 2 * Radius)函數(shù)將圓繪出。 輸入起始角 度 StartAngle 和掃過角度 SweepAngle 的界面如下: 圖 起始角度和掃過角度的輸入界面 扇形的繪制流程類似弧線的繪制流程,但因其為閉合圖形,所以可以設(shè)置其繪制時(shí)的填充方式。 輸入起始角度 StartAngle 和掃過角度 SweepAngle 的界面如下: 圖 起始角度和掃過角度的輸入界面 繪制弧線的流程圖如下: 開 始鼠 標(biāo) 左 鍵 點(diǎn) 擊 繪 圖 域 , 拖 動(dòng) 獲 取 R e c t a n g l e 矩 形 框輸 入 起 始 角 度 S t a r t A n g l e 、 掃 過 角 度 S w e e p A n g l e調(diào) 用 g . D r a w A r c ( P e n , R e c t a n g l e , S t a r t A n g l e , S w e e p A n g l e ) 函 數(shù) 將 弧 線 繪 出結(jié) 束生 成 G r a p h i c 對 象 g鼠 標(biāo) 左 鍵 是 否 按 下否是 圖 繪制弧線的流程圖 2020 屆本科畢業(yè)設(shè)計(jì)說明書 16 扇形( PieSlice)的繪制 扇形的繪制需要在繪圖區(qū)域捕獲一個(gè)矩形框,此矩形框?yàn)榇_定所繪扇形大小尺寸的參數(shù) Rectangle,此外要繪制圓餅或橢圓餅上任意角度的扇形還需輸入起始角度StartAngle 和掃過角度 SweepAngle 以確定其形狀。 繪制多段線的效果圖如下: 圖 繪制多段線的效果圖 繪制多段線的流程圖如下: 開 始鼠 標(biāo) 左 鍵 點(diǎn) 擊 繪 圖 區(qū) 域 , 獲 取 其 坐 標(biāo) 點(diǎn) 為 多段 線 連 接 點(diǎn) 并 存 入 P o i n t L i s t 數(shù) 組從 P o i n t L i s t 數(shù) 組 按 先 后 順 序 將 坐 標(biāo) 點(diǎn) 依 次 賦 值給 P r i o r P o i n t 和 N e x t P o i n t調(diào) 用 g . D r a w L i n e ( P e n , P r i o r P o i n t . X , P r i o r P o i n t . Y , N e x t P o i n t . X , N e x t P o i n t . Y ) 函 數(shù) 將 多 段 線 逐 段 繪 出結(jié) 束否鼠 標(biāo) 右 鍵 是 否 按 下是否鼠 標(biāo) 左 鍵 是 否 按 下以 P o i n t L i s t 數(shù) 組 尾 點(diǎn) 為 P r i o r P o i n t , 以 鼠 標(biāo) 當(dāng) 前 坐 標(biāo) 點(diǎn) 為 N e x t P o i n t , 調(diào) 用 g . D r a w L i n e ( P e n , P r i o r P o i n t . X , P r i o r P o i n t . Y , N e x t P o i n t . X , N e x t P o i n t . Y ) 函 數(shù) 將 多 段 線 最 后 一 段 繪 出是否P o i n t L i s t 數(shù) 組 元 素 個(gè) 數(shù) 是 否 大 于 1否是生 成 G r a p h i c s 對 象 圖 繪制多段線的流程圖 2020 屆本科畢業(yè)設(shè)計(jì)說明書 15 弧線( Arc)的繪制 弧線的繪制需要在繪圖區(qū)域捕獲一個(gè)矩形框,此矩形框?yàn)榇_定所繪弧線大小尺寸的參數(shù) Rectangle,此外要繪制圓 或橢圓上任意角度的弧線還需輸入起始角度StartAngle 和掃過角度 SweepAngle 以確定弧線的起始點(diǎn)和終止點(diǎn)。 在生成 Graphics 對象 g 后,以 PointList 數(shù)組中依次相鄰的兩點(diǎn) PriorPoint、NextPoint 為參數(shù),循環(huán)調(diào)用 (Pen, , , 2020 屆本科畢業(yè)設(shè)計(jì)說明書 14 , ,)函數(shù)將多段線各段首尾相接逐段繪出。在多段線的繪制過程中以鼠標(biāo)左鍵點(diǎn)擊繪圖域開始繪制,以鼠標(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,然后生成 所提供的 Graphics 對象 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)完整的貝塞爾曲線即繪制完畢。這一點(diǎn)是計(jì)算機(jī)萬萬不能代替手工的工作,所以到目前為止人們只能頗感無奈。 貝塞爾曲線 的重要作用在于: 由于用計(jì)算機(jī)畫圖大部分時(shí)間是操作鼠標(biāo)來掌握線條的路徑,與手繪的感覺和效果有很大的差別。 1962年,法國數(shù)學(xué)家 Pierre B233。在歷史上,研究 貝塞爾 曲線的人最初是按照已知曲線 參數(shù)方程 來確定四個(gè)點(diǎn)的思路設(shè)計(jì)出這種矢量曲線繪制法。 Pen 為系統(tǒng)畫筆參數(shù), 和 分別為該點(diǎn)在畫板上的 X 軸坐標(biāo)分量和 Y 軸坐標(biāo)分量 ,以下各圖形介紹均以此為例。在繪制草圖之前要首先設(shè)置系統(tǒng)的畫筆( Pen)參數(shù),包括畫筆線條寬度、顏色、虛實(shí)等,其次對于閉合圖形還可設(shè)置其填充方式和顏色。 以 D X F 格 式 讀 取 草 圖第 一 步 填 充 D X F 文 件 的 固 定 字 段第 二 步 根 據(jù) 圖 形 的 特 征 屬 填 充 基本 信 息第 三 步 按 照 順 序 生 成 標(biāo) 準(zhǔn) 的 D X F文 件填 充 尺 寸 、 版 本 等 信 息填 充 圖 層 、 樣 式 表 等 信 息根 據(jù) 圖 形 填 充 實(shí) 體 信 息 圖 草圖的 DXF存儲(chǔ)流程設(shè)計(jì) 草圖的 DXF 讀取設(shè)計(jì) 草圖的 DXF 讀取主要是打開一個(gè)標(biāo)準(zhǔn)的 DXF 文件,然后將打開文件中的字符串保存起來以便后續(xù)分析提取有用的信息,將字符串按 HEADERS、 TABLES、 ENTITIES 段分別提取出來,根據(jù)分離出的信息按