999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

組件技術(shù)在交互式圖形設(shè)計(jì)系統(tǒng)中的應(yīng)用

2010-01-01 00:00:00彭永康,章義來,田原
電腦知識與技術(shù) 2010年6期

摘要:該文主要討論了COM技術(shù)的基本原理及其在交互圖形設(shè)計(jì)系統(tǒng)中的應(yīng)用,提出了一種以COM技術(shù)為基礎(chǔ)的基于交互技術(shù)的圖形單元組件的模型,并在開發(fā)中具體實(shí)現(xiàn)了該模型。

關(guān)鍵詞:COM;組件;接口;交互式圖形設(shè)計(jì)

Application of the Component Technique in Interactive Graph Design System

PENG Yong-kang, ZHAN Yi-lai, TIAN yuan

(Jingdezhen Ceramic Institute, Jingdezhen 333001, China)

Abstract: The main topic discussed in this article is the COM’sbasic theory and the COM’s application in the alternative graphics pattern System. A model about the graphic cell component which based on COM was analyzed and applied in the software development.

Key words: COM; component; interface; interactive graph design

在基于交互技術(shù)的圖形圖案設(shè)計(jì)系統(tǒng)開發(fā)過程中,系統(tǒng)開發(fā)人員除需考慮系統(tǒng)的構(gòu)成以及系統(tǒng)總體功能等因素外,如何讓系統(tǒng)具有良好的交互環(huán)境,提供簡單有效的交互操作方式,設(shè)計(jì)結(jié)果的“所見即所得”等問題的處理將影響到整個(gè)系統(tǒng)的設(shè)計(jì)開發(fā)過程。

在現(xiàn)代軟件開發(fā)與應(yīng)用過程中,軟件系統(tǒng)的功能已經(jīng)日益緊密的與軟件系統(tǒng)的操作方式結(jié)合,相輔相成,一個(gè)具有強(qiáng)大功能的軟件系統(tǒng),還應(yīng)具有一個(gè)簡單有效的操作界面。

組件對象模型(COM)技術(shù)的出現(xiàn),為軟件的開發(fā)工作帶來一場革命。COM技術(shù)提供了一種代碼重用的可行方法:將一組相關(guān)的代碼用COM技術(shù)進(jìn)行封裝,形成組件,即可通過接口進(jìn)行調(diào)用,同時(shí),COM技術(shù)開發(fā)的組件還是環(huán)境無關(guān)的,組件一經(jīng)生成,即可在不同的開發(fā)環(huán)境應(yīng)用。將COM技術(shù)應(yīng)用于圖形圖象處理應(yīng)用開發(fā),除了可降低系統(tǒng)開發(fā)的復(fù)雜程度,同時(shí)還具有系統(tǒng)易于升級等優(yōu)點(diǎn)。

在進(jìn)行交互式圖形圖案設(shè)計(jì)系統(tǒng)的設(shè)計(jì)與開發(fā)過程中,我們將COM技術(shù)引入系統(tǒng)的功能設(shè)計(jì)與交互界面設(shè)計(jì)環(huán)節(jié),在已經(jīng)分析出圖形圖案的基本單元的基礎(chǔ)上,將圖形圖案的基本單元的數(shù)據(jù)、數(shù)據(jù)操作方法、基本圖形單元的顯示等功能通過COM技術(shù)集成于COM組件內(nèi),用VB開發(fā)實(shí)現(xiàn)了具有交互能力的COM圖元,通過不同的COM圖元的聚合,即可實(shí)現(xiàn)圖形圖案的交互設(shè)計(jì)。

1 組件技術(shù)

組件對象模型(COM),是一種以組件為發(fā)布單元的對象模型,這種模型使各軟件組件可以用一種統(tǒng)一的方式進(jìn)行交互,具有相同的接口。COM既提供了組件之間進(jìn)行交互的規(guī)范,也提供了實(shí)現(xiàn)交互的環(huán)境。它具有與平臺無關(guān)、面向?qū)ο蟮忍攸c(diǎn)。

由圖1COM組件、COM對象、COM接口之間的關(guān)系可知,COM接口是COM對象與系統(tǒng)之間的交互通道,系統(tǒng)通過組件提供的相關(guān)接口來操作組件。

2 原理及模型

具備交互能力的COM組件(以后簡稱UI組件集)共有兩類:線條組件和平面區(qū)域組件,兩類組件均在其內(nèi)部集中實(shí)現(xiàn)了圖形單元組件的數(shù)據(jù)存取、顯示、編輯等功能。在以具備交互能力的COM組件為基礎(chǔ)設(shè)計(jì)開發(fā)的圖形圖案設(shè)計(jì)系統(tǒng)內(nèi),我們只需根據(jù)所選功能創(chuàng)建相應(yīng)組件的實(shí)例化對象,拾取并編輯有關(guān)圖元的外觀等屬性,即可完成有關(guān)圖案的設(shè)計(jì);在系統(tǒng)的設(shè)計(jì)開發(fā)過程中,由于組件自身提供了圖元初始化、圖元顯示以及圖元的拾取編輯等能力,將系統(tǒng)中的圖元拾取判斷,圖元幾何變換,圖元狀態(tài)變遷等復(fù)雜的工作簡化為向組件傳遞組件進(jìn)行相關(guān)操作所需的各種數(shù)據(jù)、事件、操作類型等工作,簡化了系統(tǒng)主控程序的設(shè)計(jì)復(fù)雜性,降低了系統(tǒng)的設(shè)計(jì)難度。

在圖形圖案設(shè)計(jì)系統(tǒng)中所有的UI組件中均實(shí)現(xiàn)了IOutTable接口,并將所有的系統(tǒng)與UI組件、UI組件與LayerSvr組件的調(diào)用以及數(shù)據(jù)通信操作均集成于該接口內(nèi),這樣在圖形圖案系統(tǒng)內(nèi),只需在創(chuàng)建具體的圖元對象時(shí)需區(qū)別具體使用的組件,以利于圖元組件的實(shí)例化外,在系統(tǒng)的編輯、顯示等操作過程中,完全無需考慮圖元組件的類型,統(tǒng)一經(jīng)由IopTable接口實(shí)現(xiàn)對圖元的編輯與顯示功能。

基于COM組件的特點(diǎn),設(shè)計(jì)開發(fā)了一個(gè)用于內(nèi)存中按圖層格式組織系統(tǒng)實(shí)時(shí)設(shè)計(jì)數(shù)據(jù)的COM組件—LayerSvr組件,并在該組件中實(shí)現(xiàn)了ILayer、IBufFile、ICObject三個(gè)接口,分別實(shí)現(xiàn)圖案實(shí)時(shí)數(shù)據(jù)的分層管理、內(nèi)存實(shí)時(shí)數(shù)據(jù)與外部文件的存取、組件內(nèi)數(shù)據(jù)與內(nèi)存實(shí)時(shí)記錄之間的數(shù)據(jù)與操作(刪除、反刪除)等功能。

圖2所示的LineCtl、ArcCtl、CircleCtl、RectangleCtl、PolyLineCtl、PolygonCtl、SplineCtl、Time3SplineCtl等UI組件均實(shí)現(xiàn)了相同的調(diào)用接口IoutTable;上述組件具有相同的的調(diào)用與處理邏輯。

在整個(gè)系統(tǒng)的組件構(gòu)成示意圖中,selNode組件處于整個(gè)UI組件的底層位置,提供一個(gè)用于直線、矩形、圓、圓弧、多線、多邊形、三次樣條曲線、貝賽爾曲線等UI組件中存儲相關(guān)點(diǎn)坐標(biāo)信息的COM組件,同時(shí)該組件提供了點(diǎn)的基本交互功能,如點(diǎn)的拾取、移動(dòng)及點(diǎn)的顯示等。

Coordinations組件提供不同規(guī)格的坐標(biāo)系,以便在系統(tǒng)中應(yīng)用不同的坐標(biāo)來設(shè)計(jì)圖案,并提供諸如平移、旋轉(zhuǎn)、縮放、錯(cuò)切等圖元幾何變換功能。

3 接口描述

3.1 IoutTable接口

在各不同功能的UI組件中,為系統(tǒng)調(diào)用、編輯及存儲數(shù)據(jù)的需要,在所有組件中均設(shè)計(jì)實(shí)現(xiàn)了下圖所示的調(diào)用接口(IOutTable),確保了系統(tǒng)UI組件調(diào)用統(tǒng)一性,在程序?qū)崿F(xiàn)時(shí)只需根據(jù)IoutTable接口提供的方法編程調(diào)用相應(yīng)的UI組件,即可實(shí)現(xiàn)系統(tǒng)的各項(xiàng)功能。

接口屬性與方法說明:

Canvas:畫布,組件顯示的媒介;

Public Sub Init() :對組件的點(diǎn)(selNode)及其它數(shù)據(jù)進(jìn)行初始化;

Public Function Save(FileBuf As Object) As Long:將組件數(shù)據(jù)存放在FileBuf組件中;

Public Property Get Canvas() As Object:獲取畫布指針;

Public Property Set Canvas(mVar As Object) :設(shè)置畫布指針;

Public Function IsHot(ByVal nx As Single, ByVal ny As Single) As Long:檢測鼠標(biāo)當(dāng)前位置是否處于選定位置,當(dāng)處于組件坐標(biāo)點(diǎn)上時(shí),返回點(diǎn)的位置,表明可改變組件相關(guān)點(diǎn)的坐標(biāo);若處于組件的其它位置但又處于組件可選擇的區(qū)域時(shí),返回常量WHOLE,表明若此時(shí)按下鼠標(biāo)左鍵并移動(dòng)鼠標(biāo),則可拖動(dòng)組件;

Public Function DrawTo(ByVal nx As Single, ByVal ny As Single) As Boolean:添加或修改組件的相關(guān)坐標(biāo)數(shù)據(jù);

Public Function RectSelect(ByVal OrgX As Single, ByVal OrgY As Single, _

ByVal Extx As Single, ByVal Exty As Single) As Boolean:判別在由函數(shù)所帶參數(shù)確定的矩形中是否包括當(dāng)前組件;

Public Sub BindingNode():顯示組件中點(diǎn)的跟蹤矩形,表明組件進(jìn)行編輯狀態(tài);

Private Sub HideNode():隱藏組件點(diǎn)的跟蹤矩形;

Public Sub Refresh():重新繪繪制當(dāng)前組件;

Public Sub Move(ByVal nx As Single, ByVal ny As Single):當(dāng)前組件在當(dāng)前位置的基礎(chǔ)上,x方向移動(dòng)nx,y方向移動(dòng)ny;

Public Sub Zoom(ByVal nx As Single, ByVal ny As Single):縮放組件,nx、ny為x方向、y方向的縮放倍數(shù);

Public Function GetData() As Single():獲取組件數(shù)據(jù);

Public Function Add(rdParm() As Single) As Boolean :以rdParam中的數(shù)據(jù)設(shè)置組件;

3.2 IBufFile接口

IbufFile接口主要實(shí)現(xiàn)對整個(gè)圖案操作的各項(xiàng)功能,具備圖案的導(dǎo)入、創(chuàng)建、移除、圖案顯示范圍設(shè)定、視區(qū)坐標(biāo)與世界坐標(biāo)設(shè)定等能力。

接口方法描述:

Public Function LoadPattern(lpFileNameStr as string)as Boolean;從外部存儲介質(zhì)加載圖案文件

Public Function SaveToFile(lpFileNameStr as Variant,Optional ByVal sFlag as Variant)as Boolean;圖案存盤

Public Function Remove(optional lpFileNameStr as Variant, Optional ByVal sFlag as Variant)as Boolean;移除圖案

Public Function NewFile(optional lpFileNameStr as Variant) as Boolean;新建圖案

Public Function SetViewArea(ByVal OrgX as long,ByVal OrgY as long,

ByVal ExtX as long, ByVal ExtY as long)設(shè)置圖案設(shè)備坐標(biāo)系統(tǒng)

Public Function LayerSum() as long;獲得當(dāng)前圖案的圖層總數(shù)

Public Function Records() as long;獲得當(dāng)前圖案的圖元記錄數(shù)

Public Function FileSum() as long;系統(tǒng)正在編輯的圖案數(shù)

Public Function SetCoord(ByVal OrgX as Single,ByVal OrgY as Single,

ByVal ExtX as Single, ByVal ExtY as Single);設(shè)置視圖坐標(biāo)

Public Function SetWCoord(ByVal OrgX as Single,ByVal OrgY as Single,

ByVal ExtX as Single, ByVal ExtY as Single);設(shè)置世界坐標(biāo)

Public Function RefreshAll() ;徹底重繪當(dāng)前圖案

Public Function Refresh() ;重新繪制當(dāng)前圖案

Public Function SetDeviceCaps(ByVal mVar as Long)

3.3 Ilayer接口

Ilayer接口在LayerFile組件中予以實(shí)現(xiàn),系統(tǒng)可以根據(jù)用戶具體需要?jiǎng)討B(tài)創(chuàng)建與銷毀圖層,并可通過該接口提供的相關(guān)方法,實(shí)現(xiàn)圖層屬性編輯、圖層整體幾何變換(平移、縮放等)操作,增加了系統(tǒng)進(jìn)行圖案設(shè)計(jì)的靈活性。

3.4 ICObject

ICObject接口提供了一個(gè)UI組件操作LayerFile組件中緩存的圖元數(shù)據(jù)的通道,通過該接口在系統(tǒng)內(nèi)實(shí)現(xiàn)了UI組件與LayerFile組件內(nèi)的圖元數(shù)據(jù)間交互操作的能力。

4 組件實(shí)現(xiàn)

組件實(shí)現(xiàn)是以具體的編程程語言將組件的各項(xiàng)功能以及組件提供的接口加以實(shí)現(xiàn),并應(yīng)用于編程實(shí)踐過程。

在此以直線圖元的拾取判別(IsHot)算法為例,分析組件及其接口操作方法的實(shí)現(xiàn)方式,并給出相應(yīng)示范代碼。

直線圖元拾取判別(IsHot)算法可以描述如圖4所示。

將上述八個(gè)組件集中到一個(gè)VB ActiveXDLL工程中,完成編碼并進(jìn)行編譯即可生成一個(gè)包含相關(guān)COM組件的動(dòng)態(tài)庫。現(xiàn)以LineCtl組件的有關(guān)接口方法的實(shí)現(xiàn)為例,說明組件的具體實(shí)現(xiàn):

Private mNode(0 To 1) As New selNode

Private CurFocus As Long

Private mOldMouse As Long

Private mMoveOrg As MoveOrg

Private mITrans As Coordinations

'------------------------------------------------------------------

Public Function IsHot(ByVal nx As Single, ByVal ny As Single) As Long

Dim i As Long

Dim y As Single, s(1) As Single, ss(1) As Single

Dim K1, k2, k3, k4, k5

IsHot = Nul

For i = 0 To 1

With mNode(i)

If .GetFocus(nx, ny) Then

IsHot = i: CurFocus = i‘選取直線圖元端點(diǎn)

Exit Function

End If

End With

Next i

K1 = mNode(1).y - mNode(0).y

k2 = mNode(1).x - mNode(0).x

k3 = mNode(0).y

k4 = mNode(0).x

If k2 = 0 Then Exit Function

y = (K1 / k2) * (nx - k4) + k3

k5 = Abs(y - ny) ‘求鼠標(biāo)點(diǎn)(nx,ny)到直線圖元的距離dist

s(0) = SELED / 15: s(1) = 0

ss(0) = 0: ss(1) = 0

Call ITrans.ViewToWorld(s(), ss(), 2) ‘對dist進(jìn)行設(shè)備坐標(biāo)到世界坐標(biāo)轉(zhuǎn)換

If k5 < s(0) Then

With mMoveOrg

.x = nx

.y = ny

.OK = True

End With

IsHot = WHOLE 'return Whole Object 整體選中

CurFocus = WHOLE

Canvas.MousePointer = vbSizePointer

Else

Canvas.MousePointer = mOldMouse

IsHot = Nul

End If

End Function

5 組件運(yùn)行結(jié)果

上述組件應(yīng)用于軟件中進(jìn)行應(yīng)用的有關(guān)結(jié)果見圖5。

6 小結(jié)

將COM技術(shù)應(yīng)用于計(jì)算機(jī)圖形圖象處理中,既可將系統(tǒng)設(shè)計(jì)開發(fā)的復(fù)雜性降到最低,提高了各組成部件的獨(dú)立性,使系統(tǒng)功能的二次增強(qiáng)以及系統(tǒng)的升級的靈活性都有大幅度的提高。使用COM技術(shù)于圖形圖象處理,可增強(qiáng)系統(tǒng)的交互性能與系統(tǒng)設(shè)計(jì)開發(fā)與升級的靈活性,對開發(fā)一個(gè)易于操作,易于維護(hù),功能強(qiáng)勁的應(yīng)用軟件,將有極大的幫助。

參考文獻(xiàn):

[1] 潘愛民.COM原理與應(yīng)用[M].北京:清華大學(xué)出版社,2000.

[2] Petzold C.北京博彥科技發(fā)展有限公司譯.Windows程序設(shè)計(jì)[M].北京:北京大學(xué)出版社,1999.

[3] Armstrong T,Patton R.ATL開發(fā)指南[M].董梁,譯.2版.北京:電子工業(yè)出版社,2000.

[4] Mckinney B.希望圖書創(chuàng)作室譯.Hardcore Visual Basic 5.0核心技術(shù)[M].北京:北京希望電腦公司,1998.

[5] 孫家廣,楊長貴.計(jì)算機(jī)圖形學(xué)[M].北京:清華大學(xué)出版社,1998.

主站蜘蛛池模板: 亚洲成aⅴ人片在线影院八| 欧美三級片黃色三級片黃色1| 久久久久久久久18禁秘| 97se亚洲综合| 1769国产精品视频免费观看| 99爱视频精品免视看| 无码AV动漫| 免费看美女自慰的网站| 热久久国产| 香蕉综合在线视频91| 欧美日一级片| 666精品国产精品亚洲| 国产熟睡乱子伦视频网站| 青青草原国产精品啪啪视频| 欧美有码在线| 秋霞国产在线| 成人av手机在线观看| 国产毛片基地| 国产成本人片免费a∨短片| 人妻丰满熟妇αv无码| 国产视频你懂得| 熟妇丰满人妻| 国产乱人伦精品一区二区| 先锋资源久久| 自拍偷拍欧美| 亚洲欧美国产五月天综合| 国产综合色在线视频播放线视| 在线无码九区| 久久国产香蕉| 婷婷99视频精品全部在线观看| 国产国语一级毛片| 亚洲精品第一页不卡| 久久精品丝袜| 成人午夜免费观看| 亚洲日本中文字幕乱码中文| 亚洲精品麻豆| 亚洲av无码成人专区| 免费看av在线网站网址| 91欧洲国产日韩在线人成| 国产在线一二三区| 天天摸夜夜操| 日韩欧美成人高清在线观看| 日本伊人色综合网| 婷婷综合亚洲| 国产区福利小视频在线观看尤物| 亚洲国产亚综合在线区| 亚洲国产成人在线| 国产91特黄特色A级毛片| 四虎国产精品永久在线网址| 亚洲精品无码抽插日韩| 在线看国产精品| 国产女人18水真多毛片18精品| 国产资源站| 亚洲综合狠狠| 91视频精品| 久久99国产精品成人欧美| 在线无码九区| 久久久噜噜噜久久中文字幕色伊伊| 久久一级电影| 亚洲色中色| 亚洲欧美日韩色图| 国产主播在线一区| 一本大道无码高清| 欧美在线国产| 青青草欧美| 国产日韩精品欧美一区喷| 国产主播福利在线观看| 亚洲无码高清一区| 亚洲精品欧美日本中文字幕| 国产成人综合网| A级毛片高清免费视频就| 国产美女无遮挡免费视频网站| 国产成人在线小视频| 高清视频一区| 久久精品免费国产大片| 成人午夜福利视频| 国产欧美精品一区aⅴ影院| 国外欧美一区另类中文字幕| 亚洲三级色| 亚洲日韩每日更新| 亚洲高清免费在线观看| 国产成人综合在线视频|