《簡單圖形軟件包》PPT課件.ppt_第1頁
《簡單圖形軟件包》PPT課件.ppt_第2頁
《簡單圖形軟件包》PPT課件.ppt_第3頁
《簡單圖形軟件包》PPT課件.ppt_第4頁
《簡單圖形軟件包》PPT課件.ppt_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第2章 一個簡單的二維光柵圖形軟件包,SRGP(Simple Raster Graphics Package),2,知識點: 掃描轉換 圖元的聲明 圖元的屬性控制 獲取用戶輸入的兩種方法 簡單的交互程序的結構 畫布 裁剪窗口 位塊拷貝 顯示模式,3,要求: 掌握掃描轉換、畫布、裁剪窗口等概念; 掌握圖元(點、直線段、折線、標記、圓弧、橢圓弧、字符)的含義及其參數指定方式; 掌握如何對圖元進行屬性(線型、線寬、顏色等)控制; 了解用來獲取用戶輸入的兩種基本方式:取樣方式和事件驅動方式 了解如何通過如上兩種輸入方式設計簡單的交互式繪圖程序; 了解位塊拷貝功能; 掌握4種基本的顯示模式:覆蓋、或、異

2、或、與。,4,矢量顯示(隨機掃描顯示器)和光柵顯示是兩種完全不同的圖形顯示技術 目前,光柵顯示技術占主要地位 1、光柵顯示可以用顏色或圖案來填充一個區(qū)域;2、光柵顯示以象素為單位進行讀寫和存儲,可以實現對物體細節(jié)的描述;3、圖形的任意部分均可以被移動和復制。,2.1 用圖形軟件包繪圖 2.2 基本的交互處理 2.3 光柵操作,應用 模型,應用 程序,SRGP,圖形 硬件 設備,輸出流,輸入流,2.1 用圖形軟件包繪圖,圖元的聲明 圖元的屬性 填充圖元及屬性 保存和恢復圖元的屬性 字符,2.1 用圖形軟件包繪圖,2.1.1 圖元的聲明 繪圖紙,屏幕, 坐標系 掃描轉換:將頂點(參數表示的圖形)轉

3、換為點陣(像素)表示的圖形,2.1 用圖形軟件包繪圖,基本圖元繪制:點、直線段、折線、多邊形、 圓弧、字符。 數據類型: struct Point int x, y; typedef int * VertexCoordList; 或 typedef Point *VertexList;,1. 點、直線段和折線 Void PutPixel(int x, int y, int color); /畫點函數,color :顏色值。 Void LineCoord(int x0, int y0,int x1,int y1); Void Line (Point *pt1, Point * pt2); /畫線

4、函數,Void polylineCoord( int vertexCount, VertexCoordList xArray, VertexCoordList yArray); Void polyline(int vertexCount, VertexList vertices); /畫折線函數。 polyline(6,bowtieArray);,2. 標記 Void MarkerCoord(int x, int y); Void Marker(Point *pt); /端點做標記。 3. 多邊形和矩形 Void Polygon(int VertexCount, VertexList vert

5、ices); /畫多邊形。,,*,12,三種不同的方式: Void RectangleCoord(int leftx,int bottom Y,int right X,int topY); Void RectanglePoint(Point* leftBottom, Point* rightTop); Void Rectangle(Rectangle *rect); /畫矩形 Typedef struct Point leftBottom,rightTop; Rectangle,4. 圓弧和橢圓弧 Void CircleArc (Point *center, int radius, int s

6、tartAngle, int endAngle); /畫圓弧 Void EllipseArc(Rectangle *externRect, int startAngle,int endAngle); /畫橢圓,作為對比,vc提供了畫圖函數 畫點 畫線 折線 圓弧 橢圓 圓 填充等,Vc繪圖簡介,15,繪圖點,用坐標畫點: pDC-SetPixelV(10,15,RGB(255,0,0); 用點畫點: CPoint Point; Point.x = 10; Point.y = 15; pDC-SetPixelV(Point,RGB(255,0,0);,畫點舉例,坐標,顏色,點,顏色,17,程序代

7、碼畫線函數,X1,Y1,X2,Y2,用坐標畫線: pDC-MoveTo(0,0); pDC-LineTo(100,150);,畫線舉例,坐標,用點畫線: CPoint Point1; CPoint Point2; Point1.x = 0; Point1.y = 0; Point2.x =100; Point2.y = 150; pDC-MoveTo(Point1); pDC-LineTo(Point2);,畫線舉例,點,Point1,Point2,例:,20,繪圖圓弧函數,x1,y1,x2,y2,x3,y3,x4,y4,x3,y3和x4,y4為圓弧起點終點,x1,y1和x2,y2為圓弧的矩形

8、框,可計算半徑,逆時針方向,21,例:,ps,pe,圓弧舉例,22,繪圖橢圓函數(畫整圓),繪圖整圓,x1,y1,x2,y2,x1,y1和x2,y2為圓弧的矩形框,可計算半徑,24,畫整圓舉例,例:,2.1.2 圖元屬性,圖元的外觀由屬性決定,屬性是全局狀態(tài)變量。 1. 線型和線寬 Void SetLineStyle(enum LineStyle lineStyle); 枚舉變量 lineStyple 預定義線型: CONTINUOUS(實線)、 DASHED(虛線)、DOTTED(點線) Void SetLineWidth(int lineWidth);,2.1.2 圖元屬性,圖元在顯示時被

9、掃描轉換成離散的像素寫入幀緩沖器中,線型控制可看作有選擇地寫像素的位屏蔽器. 位屏蔽器為0表示幀緩存中相應的像素值不變(即透明), 為1表示用線段的顏色值代替幀緩存中相應的像素值。,圖元屬性,2. 顏色 SRGP中,設置顏色屬性有三種方式: 三種指定顏色的方式 通過查色表索引值 通過顏色名稱 通過紅、綠、藍三分量 Void SetColorByName(cnum Colors colorName); /使用邏輯顏色名,實際對應的顏色取決于系統(tǒng)查色表,逐段定義線色號,圖元屬性,Void SetColor(int colorIndex); /直接使用整數值來指定,colorIndex即是指向查色表

10、某表項的索引值 Void SetColor(int red, int green, int blue); /直接賦顏色分量值(對真彩色系統(tǒng)而言),2.1.3 填充圖元及其屬性,封閉的圖元有二種繪制方式 - 線畫圖:只畫出邊框; - 填充圖:填充其內部區(qū)域; Void FillRectangle(Rectangle *rec);/矩形 Void FillPolygon(int vertexCount, VertexList Vertices); /多邊形 Void FillEllipse(Rectangle * extentRect); / 橢圓 Void FillEllipseArc (Rec

11、tangle * extentRect, int startAngle, int endAngle); /扇形,區(qū)域填充屬性,填充式樣:,空心,實心,圖案,區(qū)域填充屬性,填充顏色,填充圖案,填充方式設置(控制填充圖元的外觀) Void SetFillStyle(enum FillStyle fillstyle)/設置填充方式的函數 FillStyle定義如下: enum FillStyle SOILD, /以當前前景色均勻填充圖元 BITMAP_PATTERN_OPAQUE, BITMAP_PATTERN_TRANSPARENT, / 以規(guī)則排列的位圖填充; PIXMAP_ PATTERN /

12、以規(guī)則排列的像素圖填充; 位圖:二值圖像 像素圖:多值圖像 SRGP提供位圖/像素圖資源表,2.1.3 填充圖元及其屬性(續(xù)),以規(guī)則排列的位圖填充 BITMAP_PATTERN_OPAQUE /不透明方式,對應位圖中“1”的像素用前景色(即當前設定的顏色)顯示;對應位圖中“0”的像素用背景色顯示。背景色由函數void SetBackgroundColor(int colorIndex)設定。 BITMAP_PATTERN_TRANSPARENT /透明方式,對應位圖中“1”的像素依然用前景色顯示;對應位圖 中“0”的像素,顏色保持不變。,無論是以位圖還是像素圖填充圖元,圖元所呈現的顏色總依賴

13、于當前系統(tǒng)查色表的內容,因為位圖/像素圖中保存的僅僅是顏色的索引值。,2.1.4 保存和恢復圖元的屬性,目的:為了提高程序的模塊化程度 Void InquireAttributes(AttributeGroup *group); Void SetAttributes(AttributeGroup *group); /AttributeGroup 為SRGP定義的結構,其中包括:前景色、背景色、線型、線寬、填充方式、查色表等SRGP支持的所有屬性。,2.1.5 字符,屬性:字體(宋體,楷體)、字形(粗體,斜體)、字型(7 X 9,16 X 24)、字間距、行間距。 點陣字符的參數 Void Ou

14、tText(Point *origin, char *text)/產生一個字符,其中的x坐標標明字符串text中第一個字符的左邊界,y坐標確定基線位置。 Void SetFont(int fontindex) /設置當前的字體和字型,37,2.2.1 基本原則 2.2.2 邏輯輸入設備 2.2.3 輸入方式 請求 取樣方式 事件驅動方式 2.2.4 設置輸入方式屬性,2.2 基本的交互處理,38,提供簡單一致的交互操作序列;(menu,button) 交互的每一階段,清晰顯示可選項; 樣式簡潔,選項有層次、簡單; 給用戶適當的反饋(highlight,光標形狀); 允許用戶取消操作(Undo)

15、,解決方法:菜單、按鈕、加亮、變灰、光標變化等等,2.2.1 交互系統(tǒng)設計的基本原則:,39,2.2.2 邏輯輸入設備,設計軟件包要考慮設備無關性與軟件可移植性 SRGP所支持的邏輯輸入設備有: 定位設備 鍵盤設備 (一般邏輯輸入設備有幾種?六種邏輯輸入設備,即定位設備、筆劃設備、字符串設備、定值設備、選擇設備、拾取設備 ) 邏輯輸入設備到實際物理設備的映射由設備驅動程序完成,40,一般邏輯輸入設備,主要邏輯輸入設備(交互任務): 定位:單點定位、多點定位 選擇:菜單選擇、圖素拾取 字符串:輸入字符串 數值:輸入實數值,41,定位定位中的基本問題,定位設備用來輸入一個位置坐標(x,y) 坐標系

16、統(tǒng):用戶坐標系、屏幕坐標系、物體坐標系 分辨率:定位數據精度,精度較低可以采用局部放大進行精確定位 網格約束:將鼠標位置定位在網格上 反饋:顯示定位數據或位置,42,定位定位中的基本問題,單點定位:每次輸入一個點,完成一次交互輸入。 筆劃定位:每次輸入多個點,完成一次交互輸入。,用于圖形的輸入點,43,選擇功能,選擇功能: 選擇菜單、命令(選擇) 選擇幾何圖素(拾取),44,字符輸入,字符輸入向應用程序輸入字符串 可用的方法 詞、短語、詞組以詞條形式提供選擇 鍵盤輸入 字符識別,45,數值輸入,數值輸入向應用程序輸入實數值 可用的方法 鍵盤輸入 選擇數字 模擬數值方法 數字、語音識別,對話框實

17、現,46,數值輸入,對話框實現,47,2.2.3 輸入方式,輸入控制方式:說明輸入操作與應用程序之間的關系,與應用關系緊密 3種方式: 請求方式:效率低,但有時必須使用 取樣方式:取樣輸入設備的狀態(tài),效率不高易丟失信息 事件方式:系統(tǒng)提供運行于后臺的監(jiān)控程序,監(jiān)控每一個輸入事件并將信息存入事件隊列中。應用程序可以主動處理事件。,48,請求方式,應用程序與輸入操作是串行關系,應用程序,用戶操作,49,請求方式,應用程序向輸入設備發(fā)出輸入請求命令,這段應用程序,等待用戶輸入數據,步驟(設定輸入模式后),用戶執(zhí)行一個輸入操作,應用程序得到數據,繼續(xù)執(zhí)行,應用:應用程序需要輸入數據,以便計算,例如輸入

18、一個點,50,2.2.4 取樣方式,應用程序按一定周期測試輸入設備是否有輸入,如果有輸入,馬上進行處理,優(yōu)點:隨時讀入用戶輸入的數據,對用戶的動作給出實時反饋,缺點:在兩個檢測周期內,會丟失數據,51,設置輸入設備的輸入方式: Void SetInputMode(enum Device inputDevice, enum InputMode inputMode) 枚舉變量Device與InputMode的定義為: enum Device LOCATOR, /定位設備 KEYBOARD, / 鍵盤設備 ; enum InputMode INACTIVE, /非激活狀態(tài) SAMPLE,/取樣方式

19、EVENT;/事件驅動方式,2.2.4 取樣方式,指定設備類型,指定設備方式,舉例:設定位設備為取樣方式 SetInputMode(LOCATOR,SAMPLE);,52,定位設備:輸入的信息分為3部分: 光標當前的位置 各個鍵的狀態(tài)(UP還是DOWN) 哪個鍵(左鍵還是右鍵)發(fā)生了狀態(tài)改變? 信息獲取函數 Void SampleLocator(LocatorMeasure, *measure);,2.2.4 取樣方式,53,2.2.5 事件驅動方式,應用程序與輸入操作是并行關系,應用程序,輸入動作,輸入動作,輸入動作,用戶操作,54,2.2.5 事件驅動方式,應用程序隨時查詢輸入隊列是否有事

20、件,如果有事件,應用程序轉去處理事件,步驟(設定輸入模式后),如果無事件,應用程序將掛起,等待事件。如果在指定的時間內,沒有事件發(fā)生,將返回應用程序,取出事件,放入事件記錄中,返回這個事件的設備值參數,從事件記錄中取出數據,應用程序轉去執(zhí)行,55,2.2.5 事件驅動方式,應用:應用于異步輸入數據的情況 優(yōu)點:既不丟失數據,因為用戶所有的輸入操作都存入隊列中,提高交互輸入的速度;又具有隨機性,用戶隨時輸入,56,2.2.5 事件驅動方式,基于事件驅動方法的程序結構: 初始化輸入設備; do waitEvent(event);/*等待事件發(fā)生*/ switch(event)/*處理事件*/ ca

21、se EVENT1: procedure1; break; case EVENT2: procedure2; break; ; while (TRUE);,57,2.2.6 設置輸入設備的屬性,設置輸入設備的輸入方式 Void SetLocatorEchoType(enum EchoType echoType);/定位設備反饋方式的設置 echoType取值: 1.NO_ECHO 無反饋 2.CURSOR 光標反饋 /SRGP將各種形狀的光標存儲在一張資源表中,通過調用 Void SetCursor(int cursorIndex);來選擇所需光標,58,2.2.6 設置輸入設備的屬性,3.R

22、UBBER_LINE/RUBBER_RECT 橡皮筋線/橡皮筋矩形,由二點確定:錨點與當前光標點。 錨點是固定的,錨點由函數 void SetLocatorEchoRubberAnchor(Point *anchor) 設置。當前光標點的位置隨用戶的輸入而變化。,錨點,當前點,錨點,當前點,59,定位設備的各種反饋方式示例 p38 nmt 圖2.11 函數 Void SetLocatorMeasure(Point *position); /設置光標位置,2.2.6 設置輸入設備的屬性,60,鍵盤設備無反饋方式的屬性 Void SetKeyboardEchoOrigin(Point *origi

23、n) / 用來設置初始化時屏幕上顯示輸入字符串的基點。 當鍵盤設備被激活時,缺省的狀態(tài)為空串。 下面鍵盤狀態(tài)設置函數可改變缺省狀態(tài): Void SetKeyboardMeasure(char *keyMeasure) / keyMeasure代表一個字符串,2.2.6 設置輸入設備的屬性,61,2.3 光柵操作,2.3.1 畫布 2.3.2 裁剪窗口 2.3.3 位塊拷貝 2.3.4 顯示模式,62,畫布(Canvas) 是抽象的數據類型,用來保存菜單和屏幕上一塊圖像的圖元稱為畫布。用戶可以在其中畫圖 包括一個像素圖和一些控制信息 具有獨立的坐標系 系統(tǒng)可以同時有多個畫布,只有一個處于激活狀態(tài) 屏幕是一個特殊的畫布,唯一被顯示的畫布。 繪圖命令的作用對象是處于激活狀態(tài)的畫布,2.3.1 畫布,63,例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論