国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

油田工程應(yīng)用軟件圖形編輯關(guān)鍵技術(shù)

2014-10-26 09:17:48侯進(jìn)才劉潔
油氣與新能源 2014年4期
關(guān)鍵詞:圖元集輸繪圖

侯進(jìn)才* 劉潔

(1.中國(guó)石油天然氣管道局國(guó)際事業(yè)部;2.中國(guó)石油集團(tuán)石油職業(yè)衛(wèi)生技術(shù)服務(wù)中心)

侯進(jìn)才等. 油田工程應(yīng)用軟件圖形編輯關(guān)鍵技術(shù). 石油規(guī)劃設(shè)計(jì),2013,24(4):46~49

一款優(yōu)秀的軟件,不僅要能出色地完成系統(tǒng)功能,而且還要有美觀、方便的操作界面才能獲得用戶的青睞。圖形用戶界面簡(jiǎn)單的操作,能給用戶留下深刻的印象,用戶易于接受并積極使用。油氣集輸系統(tǒng)設(shè)備和參數(shù)眾多、工藝流程復(fù)雜,應(yīng)用最優(yōu)化理論和計(jì)算機(jī)技術(shù)對(duì)其進(jìn)行模擬優(yōu)化已經(jīng)取得了良好的效果。但是,由于模擬優(yōu)化過程比較復(fù)雜繁瑣,如果對(duì)整個(gè)工藝流程不是非常熟悉,就會(huì)增大軟件的操作難度,進(jìn)而影響軟件的使用率。如果將油氣集輸系統(tǒng)的優(yōu)化設(shè)計(jì)與工藝流程的圖形顯示相結(jié)合,開發(fā)出能夠滿足用戶工藝流程圖形編輯處理的優(yōu)化設(shè)計(jì)軟件,則能夠顯著地提高油田工程應(yīng)用軟件的使用率。以油氣集輸管網(wǎng)圖形建模程序?yàn)槔瑥膶?shí)用角度出發(fā)詳細(xì)地給出了用 C++ Builder實(shí)現(xiàn)建模過程中圖形繪制、編輯和存儲(chǔ)等關(guān)鍵技術(shù),這些技術(shù)對(duì)于編制可視化的圖形建模程序是通用的。

1 圖形程序關(guān)鍵技術(shù)

1.1 繪圖區(qū)及坐標(biāo)系

繪圖區(qū)是圖形建模程序主界面的主體部分,主要用于進(jìn)行管網(wǎng)圖形的繪制、編輯、修改、顯示等操作。C++ Builder提供的 TImage元件可以裝載圖形,并能將其看做是一塊畫布,在上面繪圖并顯示。因此,本程序應(yīng)用該組件提供的矩形區(qū)域作為繪圖區(qū)。

Windows應(yīng)用程序在其客戶區(qū)繪制圖形時(shí),首先要給出客戶區(qū)的坐標(biāo)系統(tǒng)。繪圖區(qū)域上的每一個(gè)點(diǎn)用x和y兩個(gè)坐標(biāo)表示,而在所有的GDI(Graphics Device Interface,圖形設(shè)備接口)繪制函數(shù)中,這些坐標(biāo)使用的是一種“邏輯單位”。當(dāng) GDI函數(shù)將結(jié)果輸出到某個(gè)物理設(shè)備(如屏幕或打印機(jī))上時(shí),Windows將邏輯坐標(biāo)轉(zhuǎn)換成設(shè)備坐標(biāo)。邏輯坐標(biāo)所在的坐標(biāo)系稱為“窗口”,將設(shè)備坐標(biāo)所在的坐標(biāo)系稱為“視口”;邏輯坐標(biāo)和設(shè)備坐標(biāo)的轉(zhuǎn)換是由映射模式?jīng)Q定的,Windows提供了多種類映射方式,其中MM_TEXT(“文本”映射模式)是最簡(jiǎn)單的一種方式,在這種映像方式下窗口和視口中的坐標(biāo)單位都是像素點(diǎn),坐標(biāo)方向相同:x向的正方向向右,y向的正方向向下,本程序就采用這種映射方式實(shí)現(xiàn)邏輯坐標(biāo)和設(shè)備坐標(biāo)的轉(zhuǎn)換。

在開發(fā)圖形建模程序圖形編輯器時(shí),如果選擇一個(gè)固定的坐標(biāo)映像方式,就不能實(shí)現(xiàn)圖形無極放縮的要求,因而大多數(shù)映像方式的設(shè)備無關(guān)性就沒有實(shí)際的意義。在本圖形建模程序中圖形元素的坐標(biāo)是采用雙精度型來表示,而MM_TEXT映像方式下坐標(biāo)的單位是像素(整數(shù))。因此,對(duì)于Windows消息(如 WM_MOUSE_MOVE)所獲得的鼠標(biāo)光標(biāo)的坐標(biāo)值即屏幕坐標(biāo),為了實(shí)現(xiàn)其與圖形元素的實(shí)際坐標(biāo)之間的映射[1],程序定義了兩個(gè)函數(shù)Field_Win和Win_Field來完成坐標(biāo)轉(zhuǎn)換,然后進(jìn)行圖形元素的處理和存儲(chǔ)。在這兩個(gè)函數(shù)中,給出一個(gè)確定實(shí)際坐標(biāo)和屏幕坐標(biāo)比例關(guān)系的變量pd_MapScale,調(diào)整其大小即可以實(shí)現(xiàn)圖形的無極縮放。同時(shí),還有圖幅寬度常量(Bx、By)和滾動(dòng)條位置變量(Xs、Ys)。坐標(biāo)映射函數(shù) Field_Win和W in_Field如下:

為了與用戶日常繪圖習(xí)慣相適應(yīng),在本程序開發(fā)的實(shí)際坐標(biāo)系中,取繪圖區(qū)的左下角點(diǎn)為原點(diǎn),設(shè)其坐標(biāo)為(Min X_,Min Y_)。在視口中繪制圖形元素時(shí),只采用MM_TEXT映像方式,通過實(shí)際坐標(biāo)與邏輯坐標(biāo)的轉(zhuǎn)換來繪制圖形。圖形系統(tǒng)的坐標(biāo)系建立后,調(diào)整視圖屏幕的實(shí)際起點(diǎn) Min X_,Min Y_就可以實(shí)現(xiàn)圖形的滾動(dòng),調(diào)整邏輯坐標(biāo)和實(shí)際坐標(biāo)的比例關(guān)系 pd_MapScale就可以實(shí)現(xiàn)圖形的無極縮放。

1.2 圖元的繪制

圖元的繪制可以使用位圖和繪圖函數(shù)兩種方式,采用位圖繪圖時(shí),由各元件的位圖在繪圖區(qū)域拼裝組成網(wǎng)絡(luò)拓?fù)鋱D。繪圖函數(shù)主要是指GDI中的各種圖形繪制和控制函數(shù)。C++ Builder中的TCanvas類封裝了Windows GDI以及相關(guān)的圖像繪制和控制函數(shù),并且為繪圖對(duì)象提供了抽象的畫布,可以指定使用的畫筆、畫刷和字體,實(shí)現(xiàn)繪制、填充各種圖案和直線以及寫入文本[2]。程序中圖元的繪制主要是通過調(diào)用TCanvas類的各種方法實(shí)現(xiàn)的,具體為,節(jié)點(diǎn)類用Stretch Draw函數(shù)調(diào)用已經(jīng)存在的位圖繪制,管線類用 MoveTo(int X,int Y)、LineTo(int X,int Y)等繪圖函數(shù)繪制。

要繪制一個(gè)圖元,基本思路就是對(duì)鼠標(biāo)左鍵的3個(gè)事件分別進(jìn)行編程:一是,當(dāng)按下鼠標(biāo)左鍵時(shí),首先要判斷繪制的是哪一類圖元,然后記錄下鼠標(biāo)在繪圖區(qū)中的邏輯坐標(biāo),并創(chuàng)建一個(gè)圖元的對(duì)象指針,用這個(gè)對(duì)象指針調(diào)用該對(duì)象類的繪圖函數(shù),通過TCanvas類中的方法進(jìn)行圖元的繪制;二是,當(dāng)按下左鍵并移動(dòng)鼠標(biāo)時(shí),應(yīng)用畫布Canvas屬性畫筆Pen模式PenMode中的pmXor模式(異或模式,或者也可以用 pmNotXor模式),讓 Pen的Color屬性和繪圖區(qū)的Color屬性做XOR運(yùn)算,并在同一位置畫兩次線,刪除掉原先繪制的圖元,然后更新參考點(diǎn)坐標(biāo),恢復(fù)Pen的模式為pmCopy(復(fù)制模式);三是,當(dāng)放開左鍵時(shí),調(diào)用繪圖函數(shù)繪制圖元,并給出圖元基礎(chǔ)信息交互界面,確認(rèn)圖元繪制操作和完成信息存儲(chǔ)。一方面,各個(gè)圖元獨(dú)立地?fù)碛兄约旱膱D元信息,因而,用戶依然可以對(duì)其進(jìn)行單獨(dú)的編輯操作;另一方面,這些信息都保存在數(shù)據(jù)庫(kù)中,當(dāng)圖形重新加載時(shí),就可以利用這些圖元信息做到準(zhǔn)確無誤地恢復(fù)整個(gè)圖紙。

在管線的繪制過程中,使用了計(jì)算機(jī)圖形學(xué)中的橡皮筋技術(shù)[3],它主要針對(duì)變形類的要求,動(dòng)態(tài)地、連續(xù)地將變形過程表現(xiàn)出來,常常用來構(gòu)造直線段。在繪圖過程中,動(dòng)態(tài)地顯示中間圖形,供設(shè)計(jì)者通過定位器(鼠標(biāo)、鍵盤等)進(jìn)行調(diào)節(jié)與控制,直到滿意后才確定下來。

圖元拾取是指在圖形空間通過某些策略搜尋到所需的幾何元素[4]。它是任何交互式繪圖程序都必須具備的基本功能,是對(duì)圖元進(jìn)行移動(dòng)、刪除、修改等編輯操作的前提和基礎(chǔ),只有首先完成了拾取操作才能對(duì)圖元進(jìn)行其他各種編輯操作。拾取效率直接關(guān)系到交互操作的快慢,尤其是生成一個(gè)復(fù)雜圖形時(shí),拾取效率顯得尤為重要;另外,拾取的準(zhǔn)確度及可靠性同樣影響系統(tǒng)操作的可靠性及效率。拾取圖元的基本方法是:在屏幕上拾取一點(diǎn),判斷該點(diǎn)在哪一圖元上[3]。程序充分考慮各種圖元的外形特征,將圖元的拾取分為點(diǎn)的拾取和線段的拾取兩大類[5]。

第一類點(diǎn)的拾?。簽榱朔奖阌脩暨M(jìn)行拾取操作,系統(tǒng)設(shè)定一個(gè)拾取精度r(r>0),在當(dāng)前光標(biāo)位置為 Pl()時(shí),如果某個(gè)圖元節(jié)點(diǎn)的屏幕坐標(biāo)P (x, y )滿足:

即鼠標(biāo)點(diǎn)擊點(diǎn)和待拾取點(diǎn)的距離小于給定的拾取精度,則表明點(diǎn)P(x,y)被選中。

圖1 線段的拾取方法

具體判別方法是:線段P0P1所在直線的方程為:

垂直于線段P0P1的直線族可以表示為:

則光標(biāo)點(diǎn)位于矩形區(qū)域的判別條件為:

式(5)中,第一個(gè)條件表示光標(biāo)點(diǎn) Pl()位于過線段兩端點(diǎn)處的兩條直線之間,第二個(gè)條件表示光標(biāo)點(diǎn) Pl()到線段P0P1的垂直距離應(yīng)不超過r0。

在設(shè)計(jì)拾取算法時(shí),為了保證在各種情況下能準(zhǔn)確地拾取到所需的圖元,將拾取精度同窗口變化、圖形縮放等因素結(jié)合起來,并用系數(shù)β表示。此外,為了提高圖元拾取效率,判斷某個(gè)圖元是否被選中時(shí),首先進(jìn)行初選,方法是判斷圖元的屬性是否當(dāng)前操作圖元,對(duì)通過初選的圖元進(jìn)行進(jìn)一步的比較。一旦圖元選取成功則終止比較以避免無謂的計(jì)算,同時(shí),根據(jù)選中圖元的 ID號(hào)從數(shù)據(jù)資源中找到圖元類的其他信息,從而為圖元的編輯做好準(zhǔn)備。拾取完成以后,給出相應(yīng)的交互式操作界面。

1.3 圖元的移動(dòng)

圖元在繪圖區(qū)繪制好后,為適合網(wǎng)絡(luò)拓?fù)涞暮侠聿季郑袝r(shí)需要進(jìn)行位置的調(diào)整,即圖元的移動(dòng)操作。利用程序來實(shí)現(xiàn)圖元移動(dòng)的操作,無論是向上、向下、向左、向右等,其原理是一樣的。先通過左鍵鼠標(biāo)準(zhǔn)確地拾取待移動(dòng)的圖元,拖動(dòng)到合適的位置以后,放開鼠標(biāo)左鍵,更新該圖元的坐標(biāo)信息,并將屏幕坐標(biāo)轉(zhuǎn)換為實(shí)際坐標(biāo)存入到數(shù)據(jù)庫(kù)中,然后重新繪制集輸管網(wǎng)圖形,實(shí)現(xiàn)了圖元的移動(dòng)。

1.4 圖元的刪除

當(dāng)一個(gè)圖元?jiǎng)?chuàng)建完畢后,如果不符合條件,可點(diǎn)擊工具欄上相應(yīng)圖元類的刪除按鈕;然后,拾取不符合條件的圖元,可以將其刪除。在程序中,當(dāng)刪除事件被觸發(fā)后,調(diào)用該圖元的 Delete接口方法,將圖元的刪除屬性賦值為 true,并通過節(jié)點(diǎn)編號(hào)找到對(duì)應(yīng)的ID,然后在數(shù)據(jù)庫(kù)中找到相應(yīng)的數(shù)據(jù)記錄,利用數(shù)據(jù)庫(kù)的ADO命令將其刪除;最后,重新繪制集輸管網(wǎng)圖形,實(shí)現(xiàn)了圖元的刪除操作。

1.5 圖元的存儲(chǔ)

關(guān)于圖元的保存,考慮到實(shí)現(xiàn)圖形建模程序關(guān)閉后可重新調(diào)出已經(jīng)畫好的集輸管網(wǎng)圖再次進(jìn)行操作,即,要求程序具有重畫的功能,存為位圖或圖標(biāo)等格式顯然是不可取的,因此,將其幾何結(jié)構(gòu)以數(shù)據(jù)結(jié)構(gòu)的形式存儲(chǔ)在數(shù)據(jù)庫(kù)中。幾何圖形數(shù)據(jù)有多種存儲(chǔ)方式和存儲(chǔ)方法,良好的存儲(chǔ)方法將為整個(gè)系統(tǒng)的設(shè)計(jì)及功能的實(shí)現(xiàn)奠定基礎(chǔ)。對(duì)于節(jié)點(diǎn)類,定義了結(jié)構(gòu)體數(shù)組來存儲(chǔ)節(jié)點(diǎn)的名稱、x標(biāo)和y坐標(biāo)等幾何信息,并將其作為一條記錄,存儲(chǔ)在相應(yīng)的節(jié)點(diǎn)類數(shù)據(jù)表中。對(duì)于管線類,定義了單相鏈表來記錄管線的起終點(diǎn)坐標(biāo),并將相關(guān)信息也存入到數(shù)據(jù)庫(kù)中。當(dāng)需要打開已經(jīng)繪好的集輸管網(wǎng)圖時(shí),只需從數(shù)據(jù)庫(kù)中把相關(guān)的數(shù)據(jù)信息讀出來放到結(jié)構(gòu)體數(shù)組和鏈表中,再利用繪圖函數(shù)就可以畫出各圖元,從而實(shí)現(xiàn)了圖形的二次使用,也體現(xiàn)了數(shù)據(jù)圖形一體化。另外,為了與其他圖形編輯器的圖形格式兼容,軟件也設(shè)置了位圖存儲(chǔ)格式。

1.6 屏幕的縮放

屏幕縮放主要實(shí)現(xiàn)3個(gè)功能:屏幕放大、屏幕縮小和全屏顯示。在屏幕的縮放過程中,各圖元的實(shí)際坐標(biāo)并沒有發(fā)生變化,變化的是實(shí)際坐標(biāo)與屏幕坐標(biāo)比例關(guān)系變量pd_MapScale。當(dāng)[pd_MapScale]變化后/[pd_MapScale]變化前>1時(shí),屏幕放大;當(dāng)[pd_MapScale]變化后/[pd_MapScale]變化前<1時(shí),屏幕縮小。當(dāng)用戶點(diǎn)擊工具欄上的屏幕放大工具按鈕或點(diǎn)擊“比例”菜單下“放大”選項(xiàng)時(shí),pd_MapScale會(huì)以 10%的比例增大,變成原來的 1.1倍,即[pd_MapScale]變化后/[pd_MapScale]變化前=1.1,這時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用繪圖函數(shù)實(shí)現(xiàn)比例關(guān)系變量pd_MapScale變化后的圖形繪制;同理,反之亦然。當(dāng)用戶需要在繪圖區(qū)內(nèi)顯示已經(jīng)繪制好的整個(gè)集輸管網(wǎng)圖時(shí),系統(tǒng)會(huì)根據(jù)實(shí)際坐標(biāo)的最值(包括x最大、最小和y最大、最?。┡c繪圖區(qū)的寬度和高度之間的大小關(guān)系,來確定一個(gè)最優(yōu)的實(shí)際坐標(biāo)與屏幕坐標(biāo)比例關(guān)系變量pd_MapScale,從而將整個(gè)集輸管網(wǎng)圖以最適合的大小顯示給用戶。

1.7 屏幕閃爍的消除

圖形建模程序采用Canvas繪圖技術(shù),通過調(diào)用不同的繪圖函數(shù),實(shí)現(xiàn)節(jié)點(diǎn)、管線等圖元的繪制與添加;然而,當(dāng)用戶對(duì)圖形進(jìn)行編輯操作時(shí),需要重新繪制圖形。重新繪制的過程總是先用背景色將顯示區(qū)清除,然后再調(diào)用繪圖函數(shù)進(jìn)行繪制,而背景色往往與繪圖內(nèi)容反差很大,這樣在短時(shí)間內(nèi)背景色與顯示圖形的交替出現(xiàn),使得顯示窗口看起來在閃爍,即,屏幕閃爍是由于屏幕上顯示內(nèi)容更新不同步造成的。采用雙緩沖繪圖機(jī)理可以有效地消除屏幕閃爍。雙緩沖機(jī)理是先在內(nèi)存中創(chuàng)建一個(gè)與屏幕繪圖區(qū)域一致的對(duì)象;然后,將圖形繪制在內(nèi)存對(duì)象上;最后,一次性將這個(gè)對(duì)象上的圖形拷貝到屏幕上,這樣顯示內(nèi)存中的數(shù)據(jù)達(dá)到了同時(shí)更新的目標(biāo),消除了屏幕閃爍現(xiàn)象。

2 結(jié)語

所給出的繪圖區(qū)和坐標(biāo)系統(tǒng)建立、圖元繪制、拾取、移動(dòng)、刪除和存儲(chǔ)以及屏幕縮放等程序設(shè)計(jì)思想可以用于類似的其他工程應(yīng)用軟件。在具體的軟件開發(fā)過程中,線段類圖元的移動(dòng)可以考慮整體平移和固定一段移動(dòng)另一端兩種方式,以及選擇多個(gè)圖元同時(shí)移動(dòng)等方式。此外,除了上述幾種基本的圖形繪制與編輯操作外,程序設(shè)計(jì)人員還可以根據(jù)實(shí)際需要增加其他功能,如,圖元的復(fù)制、粘貼、撤銷與重做等功能。針對(duì)具體工藝流程中涉及的閥、泵等有進(jìn)出口的圖元,以及油井、油罐等僅有一個(gè)入口或出口的圖元,程序員還可以根據(jù)需要進(jìn)行細(xì)化處理。

[1]張義寬.計(jì)算機(jī)圖形學(xué)[M].西安: 西安電子科技大學(xué)出版社,2004.

[2]陳戰(zhàn)林,張萬里,耿宏運(yùn),等.C++ Bui l der組件大全[M].北京: 電子工業(yè)出版社,2002.

[3]何援軍.計(jì)算機(jī)圖形學(xué)[M].北京: 機(jī)械工業(yè)出版社,2006.

[4]李春雨.計(jì)算機(jī)圖形學(xué)理論與實(shí)踐[M].北京: 北京航空航天大學(xué)出版社,2004.

[5]柳朝陽(yáng),周小平.計(jì)算機(jī)圖形學(xué)——圖形的計(jì)算與顯示原理[M].西安: 西安電子科技大學(xué)出版社,2005.

猜你喜歡
圖元集輸繪圖
來自河流的你
“禾下乘涼圖”繪圖人
一種組態(tài)控件技術(shù)在電力監(jiān)控系統(tǒng)中的運(yùn)用
簡(jiǎn)述油氣集輸系統(tǒng)安全管理問題及對(duì)策
基于FLUENT天然氣集輸管道直角彎管磨損分析
煤氣與熱力(2021年4期)2021-06-09 06:17:06
學(xué)術(shù)出版物插圖的編排要求(一):圖注
聯(lián)鎖表自動(dòng)生成軟件的設(shè)計(jì)與實(shí)現(xiàn)
HYSYS軟件在復(fù)雜山區(qū)頁(yè)巖氣集輸管線中的應(yīng)用
基于HTML5 Canvas繪圖技術(shù)應(yīng)用
基于Qt繪圖系統(tǒng)的圖形應(yīng)用優(yōu)化研究與實(shí)現(xiàn)
軟件(2016年12期)2016-02-13 05:58:14
鹤壁市| 东丰县| 涡阳县| 安达市| 淳化县| 南阳市| 鲜城| 庆城县| 抚松县| 化州市| 景泰县| 东阿县| 尼勒克县| 信阳市| 巧家县| 星座| 胶南市| 定陶县| 方正县| 济南市| 阿城市| 正定县| 湾仔区| 稻城县| 石台县| 武川县| 吉隆县| 建瓯市| 博客| 岑巩县| 南安市| 通江县| 岢岚县| 梓潼县| 白山市| 繁昌县| 龙南县| 铜鼓县| 开原市| 扎兰屯市| 明光市|