專利名稱:面向目標(biāo)的結(jié)構(gòu)區(qū)域系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)系統(tǒng)的改進(jìn),尤其涉及在一個圖形顯示設(shè)備上處理至少一個隨機(jī)圖形目標(biāo)的區(qū)域信息的系統(tǒng)和方法。
本申請包括受版權(quán)保護(hù)的主題,版權(quán)擁有者允許本文作為專利文檔或記錄而被復(fù)制,但保留所有其他權(quán)利。
區(qū)域信息的圖形處理是以有效的人機(jī)工程學(xué)方式展示圖形信息的關(guān)鍵之所在。因此,越來越多的現(xiàn)代圖形系統(tǒng)采用信息處理系統(tǒng)來處理包括文本和圖形信息在內(nèi)的各種信息,以便以更有效的方式進(jìn)行信息處理。
早期的軟件操作系統(tǒng)體系結(jié)構(gòu)受其區(qū)域處理能力之限制。其限制之一是操作系統(tǒng)體系結(jié)構(gòu)不能支持一個給定外設(shè),若其體系結(jié)構(gòu)不是設(shè)計用作或可修改用于支持該給定外設(shè)的話。另外,早期的體系結(jié)構(gòu)只是以單一預(yù)定的方式對圖形區(qū)域信息進(jìn)行處理。
因此,本發(fā)明的主要目的是在具有存儲器和顯示器的計算機(jī)上以靈活方式處理圖形目標(biāo)及其相關(guān)區(qū)域。一組類別定義在存儲設(shè)備中,用于代表幾何圖形圖元。然后,另一組類別在存儲設(shè)備中生成以代表多個幾何圖形操作。至少一個幾何圖形操作被用于第一和第二幾何圖形以生成最終幾何圖形,且該最終幾何圖形被顯示在顯示器上。可將類別容易地進(jìn)行分類以支持新的硬件環(huán)境。
圖1是根據(jù)本發(fā)明一個最佳實施例的個人計算機(jī)系統(tǒng)框圖;圖2示出了根據(jù)本發(fā)明一個最佳實施例用于圖形目標(biāo)的各種算法功能圖示說明;圖3示出了根據(jù)本發(fā)明一個最佳實施例的四方形加橢圓再減去多邊形。
圖4是根據(jù)本發(fā)明一個最佳實施例的長方形加橢圓再減去多邊形的二進(jìn)制樹結(jié)構(gòu);圖5是根據(jù)本發(fā)明一個最佳實施例的圖形區(qū)域的示例;圖6是根據(jù)本發(fā)明一個最佳實施例用于構(gòu)成圖5所示圖形區(qū)域的C++源碼的示例;圖7和圖8示出了根據(jù)本發(fā)明一個最佳實施例以兩種不同方式繪制圖5所示區(qū)域;圖9是一個Booch圖,示出了根據(jù)本發(fā)明一個最佳實施例的TGArea類別900以及與體系結(jié)構(gòu)910&920之外的類別的關(guān)系;圖10是根據(jù)本發(fā)明一個最佳實施例的TGArea類別的詳細(xì)Booch圖;圖11是根據(jù)本發(fā)明一個最佳實施例的TGArea類別的Booch圖;圖12是根據(jù)本發(fā)明一個最佳實施例的某些CAG(結(jié)構(gòu)區(qū)域幾何圖形)類別;
圖13示出了根據(jù)本發(fā)明一個最佳實施例的CAG樹;圖14示出了根據(jù)本發(fā)明一個最佳實施例的幾何集成圖形(conglometry);圖15示出了根據(jù)本發(fā)明一個最佳實施例的CAG樹的主要部分;圖16示出了根據(jù)本發(fā)明一個最佳實施例所用的某些術(shù)語;圖17示出了根據(jù)本發(fā)明一個最佳實施例在各種幀及其它們的本源之間的連接;圖18是根據(jù)本發(fā)明一個最佳實施例的抽取程序類別的Booch圖;圖19示出了根據(jù)本發(fā)明一個最佳實施例的類別的Booch圖;圖20示出了根據(jù)本發(fā)明一個最佳實施例的CAG類別的Booch圖;圖21是一個詳細(xì)的CAG樹,示出了根據(jù)本發(fā)明一個最佳實施例的CAG樹的內(nèi)部結(jié)構(gòu);圖22是根據(jù)本發(fā)明的一個最佳實施例的CAG樹內(nèi)部結(jié)構(gòu)的樹結(jié)構(gòu);圖23示出了根據(jù)本發(fā)明一個最佳實施例所用的某些術(shù)語的圖示說明;圖24示出了根據(jù)本發(fā)明一個最佳實施例的幾何集成圖形的類別層級;圖25是一流程圖,示出了根據(jù)本發(fā)明一個最佳實施例的詳細(xì)邏輯;圖26是根據(jù)本發(fā)明一個最佳實施例的詳細(xì)邏輯流程圖;以及圖27是根據(jù)本發(fā)明一個最佳實施例的詳細(xì)邏輯的流程圖。
本發(fā)明最好在IBMPS/2或AppleMacintosh十算機(jī)之類的PC機(jī)中的操作系統(tǒng)里實施。圖1示出了具有代表性的硬件環(huán)境,它展示了根據(jù)本發(fā)明的計算機(jī)的典型硬件構(gòu)造,它包括一個中央處理器10(例如常規(guī)的微處理器),該中央處理器有一內(nèi)部非易失存儲器11以及多個經(jīng)系統(tǒng)總線12相互連接的其他部件。圖1所示工作站包括一個RAM14,ROM16,用于連接諸如磁盤部件20和軟盤21之類的外設(shè)到總線上的I/O適配器18,用于把鍵盤24,鼠標(biāo)器26,揚聲器28,麥克風(fēng)32以及/或其他用戶接口設(shè)備(例如觸摸式屏幕設(shè)備)等連到總線的用戶接口適配器22,用于把工作站連到數(shù)據(jù)處理網(wǎng)絡(luò)23的通訊適配器34,以及把總線連到顯示設(shè)備38的顯示適配器36。該計算機(jī)的操作系統(tǒng)為Apple System/7一類的操作系統(tǒng)。
在一個最佳實施例中,本發(fā)明是利用面向目標(biāo)的編程技術(shù)以C++程序語言實現(xiàn)的。正如本領(lǐng)域一般技術(shù)人員所理解的,面向目標(biāo)的編程(OOP)目標(biāo)是包括數(shù)據(jù)結(jié)構(gòu)和在數(shù)據(jù)上的操作的軟件實體。根據(jù)任一現(xiàn)實社會實體的特征(以其數(shù)據(jù)元素表示)以及其行為(以其數(shù)據(jù)操縱功能表示),這些元素可以使該現(xiàn)實社會實體直接模型化。以這種方式,目標(biāo)可以成型為具體的事物,例如人和計算機(jī),而且亦可成型為抽象概念,例如數(shù)字或幾何概念。目標(biāo)技術(shù)的好處來自于三個基本原理封裝,多形性,以及繼承。
目標(biāo)根據(jù)其功能的工作來隱藏(或封裝)其數(shù)據(jù)的內(nèi)部結(jié)構(gòu)和算法。除了展現(xiàn)這些實施細(xì)節(jié),目標(biāo)展示清楚表達(dá)其抽象而無冗余信息的界面。多形性則將封裝又推進(jìn)一步。該概念是多個形狀,一個界面。一個軟件部件可以提出有關(guān)另一部件的請求而無需知道那一部件倒底是怎樣的。接收該請求的部件對其進(jìn)行解釋可根據(jù)其變量和數(shù)據(jù)確定如何執(zhí)行該請求。第三個原理是繼承,它允許開發(fā)者再使用先有的設(shè)計和編碼。這一能力使開發(fā)者避免從開始生成軟件。進(jìn)而,通過繼承,開發(fā)者獲得繼承的行為的子類別,從而使開發(fā)者將其客戶化以滿足特定的需求。
一種先有技術(shù)的方法是在過程環(huán)境中對目標(biāo)和類別庫進(jìn)行分層。市場上的許多應(yīng)用結(jié)構(gòu)(applicationframeworks)都采用了這種設(shè)計方法。在這種設(shè)計中,在單一操作系統(tǒng)的頂部有至少一個目標(biāo)層級。雖然這一方式利用了目標(biāo)層級中的封裝,多形性以及繼承這些原理,而且是對過程編程技術(shù)的重大改進(jìn),但其仍有限制。其困難之處在于雖然開發(fā)者很容易再使用他們自己的目標(biāo),但使用其他系統(tǒng)的目標(biāo)則很難,而且開發(fā)者仍需由過程操作系統(tǒng)(OS)調(diào)用進(jìn)入內(nèi)部的非目標(biāo)層級。
面向目標(biāo)編程的另一方面是應(yīng)用開發(fā)的結(jié)構(gòu)方式。結(jié)構(gòu)(framework)的最合理定義之一是由依利諾易斯大學(xué)(Uni-versity of Illinois)的強森(Ralph E.Johnson)以及普渡(Purdue)的盧梭(Vincent F.Russo)做出的。在他們1991年發(fā)表的題為“面向目標(biāo)設(shè)計的再使用“(Reusing Object—Oriented Designs)(該文發(fā)表在依利諾易斯大學(xué)技術(shù)報告UIUCDC91—1696頁)一文中提出了以下定義“一個抽象類別是一組合作執(zhí)行一組響應(yīng)的目標(biāo)的設(shè)計。因此,一個結(jié)構(gòu)是一組合作執(zhí)行所確定的計算響應(yīng)性組目標(biāo)類別”。從編程觀點出發(fā),結(jié)構(gòu)實際上是一組提供工作應(yīng)用程序的預(yù)制結(jié)構(gòu)的內(nèi)連目標(biāo)類別組。例如,一個用戶界面結(jié)構(gòu)可以提供繪制視窗,卷動條以及選項屏等的支持和“系統(tǒng)預(yù)置”行為,由于結(jié)構(gòu)基于目標(biāo)技術(shù),該行為可被繼承和置換以使開發(fā)者對結(jié)構(gòu)進(jìn)行擴(kuò)展并在一特定的知識區(qū)域生成客戶化方案。由于編程不改變初始碼而只是擴(kuò)展軟件,上述優(yōu)點便成為一個優(yōu)于傳統(tǒng)編程的主要特點。此外,由于結(jié)構(gòu)提供了體系結(jié)構(gòu)指導(dǎo)和模型并在同時允許為問題范疇提供了唯一的獨特行為,開發(fā)者不會盲目地通過編碼層級進(jìn)行工作。
從商業(yè)觀點來看,結(jié)構(gòu)能夠被視為在一特定知識領(lǐng)域封裝或嵌入專門知識的方式,公司開發(fā)機(jī)構(gòu),獨立軟件銷售商(ISV)以及系統(tǒng)集成者已經(jīng)提出了在特定領(lǐng)域中的專門知識的要求,這些特定領(lǐng)域包括制造,財會,以及現(xiàn)金交易。該專門知識被嵌入編碼中。結(jié)構(gòu)允許這些開發(fā)機(jī)構(gòu)捕捉并封裝該專門知識的通用特性,其過程是將其嵌入機(jī)構(gòu)的編碼之中。首先,這使得開發(fā)者生成或擴(kuò)展利用該專門知識的應(yīng)用程序。因此把問題解決一次并使商業(yè)規(guī)律和設(shè)計被前后一致地實施和使用。另外,在結(jié)構(gòu)和結(jié)構(gòu)上的嵌入的專門知識,對已經(jīng)在生產(chǎn)和銷售市場(例如制造,財會)上獲得專門知識的那些機(jī)構(gòu)有策略的有益含義,或生物技術(shù)具有包裝,再銷售,以及應(yīng)用其專門知識,并進(jìn)而促進(jìn)技術(shù)進(jìn)步和推廣普及的分配機(jī)制。
從歷史上看,結(jié)構(gòu)只是在最近才成為個人計算機(jī)平臺的主流概念。這一發(fā)展得力于面向目標(biāo)語言(例如C++)的效力。C++最早是在UNIX系統(tǒng)和研究人員的工作站上實現(xiàn)的,而不是在商用個人計算機(jī)上發(fā)現(xiàn)的。正是C++語言以及其他面向目標(biāo)的語言(例如Smalltalk等等)使得許多大學(xué)和研究項目產(chǎn)生了當(dāng)今商用結(jié)構(gòu)和類別庫的先驅(qū)。這些例子包括斯坦福大學(xué)(Standford University)的InterViews,卡內(nèi)基一麥倫大學(xué)(Carnegie—Mellon University)的Andrewtoolkit,以及赤瑞茨大學(xué)(University of Zurich)的ET++結(jié)構(gòu)。
根據(jù)想解決問題的性質(zhì)以及涉及的系統(tǒng)層級,有多種結(jié)構(gòu)。這些結(jié)構(gòu)類型包括幫助開發(fā)用戶界面的應(yīng)用程序結(jié)構(gòu)以及提供基本系統(tǒng)軟件服務(wù)(例如通訊,打印,文件系統(tǒng)支持,圖形等等)的低級結(jié)構(gòu)。應(yīng)用結(jié)構(gòu)的商用例子是MacApp(Apple),Bedrock(Symantec),OWL(Borland),NeXtStepApp Kit(NeXT),以及Smalltalk—80 MVC(ParcPlace)等等。
結(jié)構(gòu)編程要求開發(fā)者有與常規(guī)的其他系統(tǒng)不同的新思維方式。事實上,它與傳統(tǒng)概念的“編程”全然不同。在以前的操作系統(tǒng)中(例如DOS或UNIX),開發(fā)者自己的程序提供了所有結(jié)構(gòu)。操作系統(tǒng)通過系統(tǒng)調(diào)用提供服務(wù)“——”開發(fā)者的程序在需要服務(wù)時以及服務(wù)完成控制返回時進(jìn)行調(diào)用。程序結(jié)構(gòu)基于嵌入開發(fā)者寫的編碼中的控制流程。
當(dāng)結(jié)構(gòu)使用時,其過程相反,開發(fā)者不再依賴控制流程。開發(fā)者必須根據(jù)執(zhí)行流程事先了解編程任務(wù)的趨向。進(jìn)而,必須依據(jù)目標(biāo)的響應(yīng)性進(jìn)行思考,這必須根據(jù)結(jié)構(gòu)確定何時執(zhí)行任務(wù)。由開發(fā)者所寫的程序由不是開發(fā)者寫的而且開發(fā)者從未見到過的編碼激勵??刂屏鞒讨械霓D(zhuǎn)換可能對只在過程編程中有經(jīng)驗的開發(fā)者構(gòu)成較大的心理障礙。但是,一旦明白之后,結(jié)構(gòu)編程所需工作就大大少于其他編程。
以一個應(yīng)用結(jié)構(gòu)(application framework)給用戶提供預(yù)制功能性的同樣方法,系統(tǒng)結(jié)構(gòu)(system frameworks)(正如在最佳實施例中包括的)通過提供系統(tǒng)級服務(wù)而實現(xiàn)同樣概念。系統(tǒng)程序員之類的開發(fā)者可用其進(jìn)行子類別/置換以生成客戶化的方案。例如,考慮一個可以提供基礎(chǔ)以支持視頻,音頻,MIDI、動畫等等新的以及多功能設(shè)備的多媒體結(jié)構(gòu)。需要支持一種新設(shè)備的開發(fā)者必須寫一個設(shè)備驅(qū)動程序。若以結(jié)構(gòu)完成這一任務(wù),則開發(fā)者只需提供該新設(shè)備所要求的特性和行為。
在這種情況下,開發(fā)者提供將為該多媒體結(jié)構(gòu)調(diào)用的某種成員功能實施。開發(fā)者可得到的直接的好處在于每類設(shè)備需要的通用編碼已由多媒體結(jié)構(gòu)提供了。這意味著開發(fā)者要編寫、測試和檢測的設(shè)備驅(qū)動程序編碼減少了。使用系統(tǒng)結(jié)構(gòu)的另一例子是對于小型計算機(jī)系統(tǒng)接口(SCSI)設(shè)備,NuBus卡,以及圖形設(shè)備提供各自的I/O結(jié)構(gòu)。由于有繼承功能性,每個結(jié)構(gòu)為在其設(shè)備類別中發(fā)現(xiàn)的通用功能性提供支持。其他開發(fā)者則可依據(jù)對各種設(shè)備一致的界面。
本發(fā)明的一個最佳實施例采用了結(jié)構(gòu)的概念并將其應(yīng)用于整個系統(tǒng),對于商業(yè)和企業(yè)開發(fā)者,系統(tǒng)集成商或OEM,這意味著象MacApp一類的結(jié)構(gòu)所展示的優(yōu)點可以不僅作用于文本和用戶界面之類的應(yīng)用事物,而且亦可用于系統(tǒng)的服務(wù),例如圖形、多媒體、文件系統(tǒng)、I/O以及測試等等。
在一個最佳實施例的體系結(jié)構(gòu)中的應(yīng)用程序生成基本上與編寫附加到結(jié)構(gòu)協(xié)議的特定域的謎塊類似,在這一方式中,編程的整個概念改變了,代之以在調(diào)用多個API層級的編碼行之后寫編碼行,軟件將由在該環(huán)境中的先有結(jié)構(gòu)導(dǎo)出的類別所發(fā)展,并然后根據(jù)需要加入新行為并/或替換繼承的行為。
如此,開發(fā)者的應(yīng)用程序成為由所有其他結(jié)構(gòu)應(yīng)用程序編寫和共享的編碼集。由于開發(fā)者將可在相互的工作上工作,因此這是一個很有力的概念。這也為開發(fā)者提供了根據(jù)需要進(jìn)行客戶化的靈活性。某些結(jié)構(gòu)將被原樣使用,在某些情況下,客戶化的量將很小,所以開發(fā)者插入的謎塊將很小。在另外的情況中,用戶可以進(jìn)行很大修改并生成全新的事件。在一個最佳實施例中,如圖1所示,在RAM14中的程序由CPU10的控制并用一個面向目標(biāo)的圖形結(jié)構(gòu)來管理各種任務(wù)。
詞匯表區(qū)域(Area)—一個TGArea目標(biāo)。一個區(qū)域是一個集成幾何圖形,它可以是任意形狀,只要它可以由基本幾何圖形的有限集所定義。
基本幾何圖形(Basic Geometry)—一個“原始”幾何圖形,它是圖形設(shè)備語言的一部分。所有集成幾何圖形必須由一定數(shù)量的基本幾何圖形組成。例如,TGRect,TGEllipse,和TGPolygon都是基本幾何圖形,而TGArea則是一個集成幾何圖形,因為其由眾多的基本幾何圖形所組成。
CAG—結(jié)構(gòu)區(qū)域幾何圖形(其來自于CSG的二維或結(jié)構(gòu)固態(tài)幾何圖形)。其為在幾何圖形上進(jìn)行布示運算(加、減、與、以及異—或)從而導(dǎo)致一個新的幾何圖形。
集成幾何圖形(conglometry)—集成幾何圖形是一個MAreaGeometry子類別。一個單獨的集成幾何圖形可以由多個基本幾何圖形組成。例如,它可包括一個四方形和一個橢圓的交集。
幾何圖形(Geometry)—一個在空間中定義一個區(qū)域或通路的目標(biāo)??臻g中的任意給定點都在該通路之上或之外,或在區(qū)域之內(nèi)或之外。
GrafEdge—代表一個幾何圖形的邊界部分的目標(biāo)。例如,一個橢圓通常由兩個GrafEdge所成型一個在左邊而另一個在右邊。另一例子是一個多邊形,它的五條邊可以由五個GrafEdge所成型。
轉(zhuǎn)換—在一個幾何圖形中穿過一個邊的行為。例如,穿過一個橢圓的直線在其進(jìn)入該橢圓完成了一次轉(zhuǎn)換并在離開該橢圓時進(jìn)行了另一次轉(zhuǎn)換。
引言TGArea類別是一個隨型形狀區(qū)域的設(shè)備獨立說明。通過在其他區(qū)域定義幾何圖形(例如四方形,橢圓,和多邊形)上進(jìn)行二進(jìn)制CAG操作即可定義一個TGArea目標(biāo)(其后稱為區(qū)域)。圖2是應(yīng)用于圖形目標(biāo)的各種算法函數(shù)的圖形說明。200示出了正方形和圓的相加操作,210則是它們的減操作,220為其與操作而230則為異操作。代表二進(jìn)制樹的數(shù)據(jù)結(jié)構(gòu)可形成在計算機(jī)系統(tǒng)的存儲器中以敘述任何區(qū)域的內(nèi)容。例如,圖3示出了四方形加橢圓并減去一個多邊形(四方形+橢圓-多邊形)的情況。相關(guān)的二進(jìn)制樹結(jié)構(gòu)示于圖4中。區(qū)域的數(shù)學(xué)描述被定義為四方形加橢圓減多邊形。當(dāng)圖3中的圖形區(qū)域被充滿時,只有加重的輪廓300被充滿。類似地,它其成幀時,該幀是圍繞充滿區(qū)域的邊界繪制的。
應(yīng)用TGArea類別最通常的應(yīng)用是定義圖形的邊界。例如,一個視窗系統(tǒng)使用區(qū)域來代表其視窗的可見區(qū)域和形狀。例如在圖5中提供了根據(jù)本發(fā)明一個最佳實施例的多個重疊視圖的圖示。視圖A與視圖B重疊。視圖A的形狀為橢圓而視圖B則為矩形。視圖A的可視區(qū)只為其形狀,因其未被其他視圖覆蓋。但視圖B則由從其本身形狀中減去視圖A所形成,從而導(dǎo)致矩形減去橢圓形。這類幾何圖形信息可記錄在TGArea目標(biāo)中。重要的是要注意到就象在Macintosh區(qū)域中一樣,在與視圖A和B的邊界附近的區(qū)域并不共有亦非弧立的。這意味著當(dāng)在屏幕上繪制這些區(qū)域時,不會有象素被繪制兩次或未被繪制。它亦意味著選中測試程序從不報告模糊不清的結(jié)果。
應(yīng)用程序開發(fā)者應(yīng)用程序開發(fā)者可把區(qū)域看作與其他幾何圖形相同。換言之,區(qū)域可被填充,成幀以及進(jìn)行選中測試。但是,與其他幾何圖形不同,區(qū)域可被看作是一個“模糊”的幾何圖形;即其可被不加區(qū)別地變換而與幾何圖形的內(nèi)部標(biāo)識無關(guān)。例如,可將一預(yù)有的變換用于一個矩形區(qū)域而導(dǎo)致其成為非矩形,也可以在內(nèi)部將其本身轉(zhuǎn)換成多邊形。反之,TGRect目標(biāo)不能隨意變換而仍將是矩形。
本發(fā)明的最佳實施例簡化了區(qū)域的構(gòu)成。圖5即為本發(fā)明的最佳實施例的一個圖形區(qū)域的示例。而圖6是用來構(gòu)成圖5所示圖形區(qū)域的C++源碼的示例。源碼接近于TGraf-port。當(dāng)TGArea目標(biāo)被繪制時,它被看作象是任意其他幾何圖形。它可被填充,成幀或兩者兼有之。該幀可以是一個極細(xì)線的幀或粗線幀,而且其可有復(fù)合特性,例如點劃線或聯(lián)結(jié)方式。圖7和圖8示出了可以兩種不同方式繪制圖5的區(qū)域。圖7示出了具有細(xì)線筆繪制的填充和成幀的圖形區(qū)域,而圖8則示出了由點劃線筆繪制的填充和成幀圖形區(qū)域。
體系結(jié)構(gòu)有幾種支持TGArea類別的底層體系結(jié)構(gòu)(architec-ture)的類別組。但是,大部分應(yīng)用程序可以只由TGArea類別所簡化。圖9是示出TGArea類別900及其與體系結(jié)構(gòu)910和920之外的類別的關(guān)系的Booch圖。其中,點劃線的“云彩”指示類別或類別的集合(即TGArea類別900),連接類別的箭頭從子類別導(dǎo)向主類別并指示一個包括封裝,繼承和多性形的特性的層級,它在目標(biāo)技術(shù)和先有技術(shù)接受的圖形記號中為人所理解。雙線指出在實施或界面中采用的類別。在一條線段一端處的圓指示在該類別中的包含或使用在線段端點處的圓。有關(guān)該記號的完整說明,請參見由GradyBooch所著并由Benjamin/Cummings出版公司在1991年出版并受版權(quán)保護(hù)的題為“Object Oriented Design”一文。圖9指示出由TGrafPort 920和TGrafDevice 930類別所用的TGArea類別900。例如,使用TGratPort目標(biāo)920可以在屏幕上劃出區(qū)域。該再現(xiàn)實際上是由代表屏幕的TGrafDevice目標(biāo)910所完成的。
TGArea類別900敘述如下,只為每個類別提供不同的功能文件。繼承功能和執(zhí)行類似任務(wù)的功能只在母類別中被記錄。
區(qū)域類別TGArea類別是大部分客戶將使用的類別。它支持需要構(gòu)成一個區(qū)域并提出請求的操作,而且它可從任意的定義區(qū)域的基本幾何圖形中生成。圖10是根據(jù)本發(fā)明一個最佳實施例的TGArea的Booch圖。
TGArea該TGArea類別包括一個內(nèi)部集成幾何圖形目標(biāo),而且它安排對該集成幾何圖形的所有調(diào)用。換言之,它是一個用于集成幾何圖形的輪詢程序(wrapper)。如前所述,可由集成幾何圖形的二進(jìn)制樹成型一個區(qū)域。該TGArea類別亦可進(jìn)行樹的維護(hù),例如·樹優(yōu)化。例如,若一個大矩形完全包含一個小的橢圓,則該橢圓可從樹中去除。
·簡化樹。例如,兩個相鄰矩形可被轉(zhuǎn)換成單一的矩形或多邊形。
·用于TGArea類別的C++碼的表示如下<pre listing-type="program-listing"><![CDATA[class TGArea{publicTGArea();TGArea(const TGRect&g);TGArea(const TGEllipse&g);TGArea(const TGPolygon&g);TGArea(const TGLoop&g);TGArea(const TGGlyphRun&g);TGArea(const TGArea&g);TGArea(const TAreaGeometryHandle&g);virtual~TGArea();]]></pre>TGArea可從任意區(qū)域定義基本幾何圖形中構(gòu)成。TGArea目標(biāo)亦可從TAreaGeometryHandle(即任意集成幾何圖形)目標(biāo)中構(gòu)成。
<pre listing-type="program-listing"><![CDATA[void Add(const TGArea&);const TGArea&operator+=(const TGArea&);]]></pre>這些函數(shù)完成兩個區(qū)域的相加(和)。它們將特定的區(qū)域加到這個區(qū)域。
<pre listing-type="program-listing"><![CDATA[void Subtract(const TGArea&);const TGArea&operator-=(const TGArea&);]]></pre>這些函數(shù)執(zhí)行兩個區(qū)域的相減(或差)。它們從該區(qū)域中減去特定區(qū)域。
<pre listing-type="program-listing"><![CDATA[void Intersect(const TGArea&);const TGArea&operator*=(const TGArea&);]]></pre>列示于上的函數(shù)執(zhí)行兩個區(qū)域的相與。它們與該區(qū)域的特定區(qū)域相交。
<pre listing-type="program-listing"><![CDATA[void ExclusiveOr(const TGArea&);const TGArea&operator^=(const TGArea&);]]></pre>以上列示的函數(shù)執(zhí)行在兩個區(qū)域上的異或操作。它們與該區(qū)域的特定區(qū)域相異。
<pre listing-type="program-listing"><![CDATA[void TransformBy(const TGrafMatrix&matrix);]]></pre>該函數(shù)用特定矩陣對區(qū)域進(jìn)行變換。
<pre listing-type="program-listing"><![CDATA[void Extract(TGrafExtractor&extractor,TCAGNode*node,const TMatrixState&matrixState=TGlobalMa-trixStateGetIdentity())const;]]></pre>以上列示函數(shù)執(zhí)行抽取功能,它根據(jù)基本幾何圖形(TGRect,TGEllipse等)表示區(qū)域的幾何結(jié)構(gòu)。這些功能是通過適當(dāng)調(diào)用特定TGrafExtractor目標(biāo)實現(xiàn)的。CAG節(jié)點在區(qū)域的母節(jié)點中被通過。換言之,由區(qū)域生成的任何CAG節(jié)點應(yīng)該有其母節(jié)點所有的節(jié)點。這使CAG樹得以建立。TMatrixState目標(biāo)指定區(qū)域存在的該調(diào)用中坐標(biāo)系統(tǒng)。它可直接通過TGrafExtractor目標(biāo),或基于該目標(biāo)的新目標(biāo)可通過T GrafExtractor。
<pre listing-type="program-listing"><![CDATA[Boolean IsEnpty()Const;]]></pre>若該區(qū)域為空的話(即它不包括幾何區(qū)域),該功能返回TRUE。
<pre listing-type="program-listing"><![CDATA[void SetToEmpty();]]></pre>該上述功能將區(qū)域初始化為空區(qū)域。它等效于調(diào)用系統(tǒng)預(yù)置構(gòu)成程序,或調(diào)用GetEmptyArea。
<pre listing-type="program-listing"><![CDATA[Boolean IsRectangular()const;]]></pre>這一功能在區(qū)域是單一不旋轉(zhuǎn)矩形時返回TRUE。
<pre listing-type="program-listing"><![CDATA[Boolean IsRectilinear()const;]]></pre>該功能在區(qū)域只由水平和垂直邊組成時返回TRUE。例如,由多個不旋轉(zhuǎn)矩形構(gòu)成的區(qū)域即為直線的。
<pre listing-type="program-listing"><![CDATA[Boolean IsSingular()const;]]></pre>該功能在區(qū)域只包括一個基本幾何圖形時返回TRUE。例如,由一個多邊形構(gòu)成的區(qū)域即為單一的,而由矩形減去圓形所構(gòu)成的區(qū)域則不是。
<pre listing-type="program-listing"><![CDATA[TGRect GetBounds()const;]]></pre>上述功能返回一個它完全包含了該區(qū)域的自由邊界的矩形。
<pre listing-type="program-listing"><![CDATA[Boolean Contains(Const TGPoint&point)const;Boolean Contains(Const TGRect&rect)const;Boolean Interseets(Cornt TGPect&rect)const;]]></pre>這些功能在區(qū)域上執(zhí)行簡單選中測試操作。
<pre listing-type="program-listing"><![CDATA[TPseudoTimeStamp GetTimeStamp()const;]]></pre>該功能返回區(qū)域的時間標(biāo)記,它在區(qū)域修改時自動更改。
<pre listing-type="program-listing"><![CDATA[const TGArea&operator=(const TGArea&area);]]></pre>該功能是一個賦值算子。
<pre listing-type="program-listing"><![CDATA[Boolean operator==(const TGArea&area);Boolean operator?。?const TGArea&area);]]></pre>這些是相等算子。
<pre listing-type="program-listing"><![CDATA[const TGArea&operator>>=(TStream&stream)const;const TGArea&operator<<=(TStream&stream);]]></pre>這些是流算子。
<pre listing-type="program-listing"><![CDATA[Static const TGArea&GetEmptyArea();Static const TGArea&GetInfiniteArea();]]></pre>這些功能分別返回相對于空的常數(shù)以及無限大的區(qū)域。
<pre listing-type="program-listing"><![CDATA[};TGArea operator+(const TGArea&arca0,constTGArea&area1);]]></pre>該功能執(zhí)行兩個區(qū)域的相加,它加入一個特定區(qū)域并返回合成的區(qū)域。
<pre listing-type="program-listing"><![CDATA[TGArea operator—(const TGArea&area0,constTGArea&area1);]]></pre>該功能執(zhí)行兩個區(qū)域的相減。它從area0中減去area1并返回結(jié)果區(qū)域。
<pre listing-type="program-listing"><![CDATA[TGArea operator*(const TGArea&area0,constTGArea&area1);]]></pre>該功能執(zhí)行兩個區(qū)域的相與操作。它與特定的區(qū)域相與并返回結(jié)果區(qū)域。
<pre listing-type="program-listing"><![CDATA[TGArea operator^(const TGArea&area0,constTGArea&area1);]]></pre>該功能執(zhí)行兩個區(qū)域的相異操作。它與特定區(qū)域相異并返回結(jié)果區(qū)域。
詳細(xì)的體系結(jié)構(gòu)本部分?jǐn)⑹龈呒壋绦騿T所需的類別。這些程序員包括grafDevice程序員以及其他需要重復(fù)通過包含在一個區(qū)域中的幾何圖形進(jìn)行重復(fù)的程序員。圖11是本發(fā)明一個最佳實施例的這些類別的Booch框圖。TGArea類別1000可對TGrafExtractor目標(biāo)1020表達(dá)其內(nèi)部幾何圖形。TCAGN-ode子類別1010,1030和1040用于表達(dá)包含在該區(qū)域中的每個單獨的基本幾何圖形的輪詢項數(shù)行為。上述類別及其子類別被敘述如下。只有在每個類別中明顯不同的功能才敘述;繼承的功能和執(zhí)行類似任務(wù)的功能通常只在主類別中予以說明。
CAG類別為了被再現(xiàn)和選中測試等,集成幾何圖形必須提供內(nèi)部/外部確定的方法;即再現(xiàn)(或選中測試等)碼必須能確定一個點是否位于該集成幾何圖形之內(nèi)或之外。這由CAG類別實現(xiàn)。圖12示出了某些CAG類別。在再現(xiàn)集成幾何圖形之前,TCAGNode子類別的二進(jìn)制樹被構(gòu)成,它提供該集成幾何圖形二進(jìn)制樹的鏡象。在一個集成幾何圖形中的每個葉節(jié)點必須有一個對該樹的一個葉節(jié)點的參數(shù)。當(dāng)遇到集成幾何圖形中的一個邊時,適當(dāng)?shù)腃AG節(jié)點被通知發(fā)生了一個轉(zhuǎn)變。
參見圖3,4,5和6所示例子來考慮以下情況。集成幾何圖形由一個矩形加一個橢圓再減去一個多邊形組成,如圖3所示。其二進(jìn)制樹示于圖4。該二進(jìn)制樹既代表該集成幾何圖形的內(nèi)部結(jié)構(gòu),同時代表再現(xiàn)之前構(gòu)成的CAG樹的結(jié)構(gòu)。但是,對高級程序員而言,樹的準(zhǔn)確結(jié)構(gòu)并不重要。它由TGArea類別自動地建立。圖13是CAG樹的示例。
在每個基本幾何圖形中的邊都分別指向樹中的CAG節(jié)點葉。只要當(dāng)一個邊有一轉(zhuǎn)變,便通知其CAG節(jié)點,它導(dǎo)致樹在其頂部重新計算結(jié)果值。該值被用于確定是否當(dāng)前點處于集成幾何圖形之內(nèi)或之外。例如考慮一個掃描轉(zhuǎn)換處理。每行象素代表一個水平通道,它以不同y值穿過該集成幾何圖形。每個水平通道在從左向右穿過每條邊時都導(dǎo)致發(fā)生轉(zhuǎn)變。每次轉(zhuǎn)變發(fā)生時,掃描轉(zhuǎn)換詢問CAG樹的根以確定是否當(dāng)前位置在整個集成幾何圖形之中以確定要接通哪個象素。當(dāng)成幀一個集成幾何圖形時情況更為復(fù)雜。圖14示出了一個包括矩形加橢圓的集成幾何圖形1400。其二進(jìn)制樹由1410表示。圖15是CAG樹重要部分的詳細(xì)圖。
被成幀的集成幾何圖形由三種邊定義填充,左幀和右?guī)?“左”和“右”是隨意選擇以供區(qū)分兩個幀邊,并無順序要求于其中)。每個CAG節(jié)點都有三種轉(zhuǎn)變功能,其中之一用于三種邊的任何一條邊。所有去往每個CAG節(jié)點的轉(zhuǎn)換值(除左節(jié)點外)假設(shè)都展示偶—奇行為。換言之,節(jié)點必須將其進(jìn)入值看作為偶—奇值,且它們必須產(chǎn)生具有偶—奇行為的新值。在以下部分,某些有關(guān)幾何圖形填充和成幀區(qū)域的語言可能含糊不清。圖16示出了一些用于本發(fā)明的最佳實施例的術(shù)語。
TCAGNodeTCAGNode是提供所有CAG類別的共用協(xié)議的抽象類別。
<pre listing-type="program-listing"><![CDATA[class TCAGNode{publicvirtual~TCAGNode();typedef WrapCount long;]]></pre>
“輪詢次數(shù)”是一個在一特定點表示幾何圖形狀態(tài)的累積值。必須保持輪詢次數(shù)以確定是否在幾何圖形中的邊被一個通路穿過時,該通路是進(jìn)入還是退出該幾何圖形。
<pre listing-type="program-listing"><![CDATA[virtual void Transition(WrapCount fill)=0;virtual void T ransitionLeftFrame(WrapCount left-Frame)=0;virtual void TransitionRightFrame(WrapCount right-Frame)=0;]]></pre>每個TCAGNode子類別都有三種轉(zhuǎn)換功能,它們在其子女的填充和成幀狀態(tài)中發(fā)生轉(zhuǎn)換時由子節(jié)點調(diào)用。例如,當(dāng)發(fā)生邊轉(zhuǎn)換時,邊就調(diào)用主節(jié)點的轉(zhuǎn)換功能之一。
<pre listing-type="program-listing"><![CDATA[protectedTCAGNode();TCAGNode(const TCAGNode&);]]></pre>以上代碼是空的和復(fù)制的構(gòu)成程序。由于是抽象類別,所以它們受到保護(hù)。
<pre listing-type="program-listing"><![CDATA[TCAGNode&operator=(const TCAGNode&);]]></pre>以上代碼為賦值算子。由于是抽象類別,所以受到保護(hù)。
<pre listing-type="program-listing"><![CDATA[};TCAGChild]]></pre>以上代碼是提供具有母節(jié)點的所有CAG節(jié)點的共同協(xié)議的類別。母節(jié)點是在二進(jìn)制樹中較高的一個層級。它們由其子女所引用。
<pre listing-type="program-listing"><![CDATA[class TCAGChildpublic TCAGNode{publicvirtual~T CAGChild();protectedTCAGChild(TCAGNode*parent);]]></pre>以上構(gòu)成程序采用一個指向母CAG節(jié)點(樹中較高層級的節(jié)點)的指針。由于它是抽象類別,所以受到保護(hù)。
<pre listing-type="program-listing"><![CDATA[};TCAGUnary]]></pre>以上代碼定義了提供所有子CAG節(jié)點的共同協(xié)議的類別。該子CAG節(jié)點的值由一個源所控制。
<pre listing-type="program-listing"><![CDATA[class TCAGUnarypublic TCAGChild{publicvirtual~TCAGU nary();TCAGLeftFrameLink*GetLeftFrameLink();TCAGRightFrameLink*GetRightFrameLink();]]></pre>以上兩功能返回對TCAGLeftFrameLink和TCA-GRightFrameLink目標(biāo)的指針。它們通常被調(diào)用以連接左右?guī)D(zhuǎn)換功能。對TCAGLeftFrameLink和TCAGRight-FrameLink類別的引用如下。
<pre listing-type="program-listing"><![CDATA[protectedTCAGUnary(TCAGNode*parent);]]></pre>以上構(gòu)成程序獲得對于母CAG節(jié)點的指針。由于是抽象節(jié)點,所以其受保護(hù)。
TCAGLefeFrameLink和TCAGRightFrameLink用于幾何圖形成幀之時。當(dāng)一特定GrafEdge的轉(zhuǎn)換發(fā)生時,其母CAG節(jié)點的轉(zhuǎn)換功能之一必須被調(diào)用。但是,若GrafEdge對應(yīng)于幾何圖形的左幀或右?guī)?,則幀轉(zhuǎn)換功能之一必須被調(diào)用,而非填充轉(zhuǎn)換功能。由于GrafEdge本身并不知道要調(diào)用哪個轉(zhuǎn)換功能,所以目標(biāo)必須被用來把填充轉(zhuǎn)換導(dǎo)向左幀或右?guī)D(zhuǎn)換。圖17示出了本發(fā)明一個最佳實施例的不同幀以及其母幀之間的連接。沒有類別TCAGLeft-FrameLink和TCAGRightFrameLink,在幀GrafEdges及其母幀之間的連接就會以不同方式(即以功能指針方式)實現(xiàn)。
<pre listing-type="program-listing"><![CDATA[class TCAGLeftFrameLinkpublic TCAGUnary{publicTCAGLeftFrameLink(TCA GNode*parent);virtual~TCAGLeftFrameLink();virtual void Transition(WrapCount fill);]]></pre>填充轉(zhuǎn)換功能僅只調(diào)用其母CAG節(jié)點的Transition-LeftFrame功能。
抽取程序類別以上所列之集成幾何圖形需要將其表示為基本幾何圖形(TGRect,TGEllipse等)的集合的手段。這由圖18所示的抽取程序類別實現(xiàn)。TGArea目標(biāo)可被“反復(fù)”的唯一方式是使用TGrafExtractor類別。子類別提供與CAG節(jié)點一起處理基本幾何圖形以便產(chǎn)生所需結(jié)果的行為。例如,成幀緩沖圖形設(shè)備用若干抽取程序子類別來發(fā)現(xiàn)一個區(qū)域的內(nèi)容以便繪制該區(qū)域。
TGrafExtractor該類別允許集成幾何圖形將其內(nèi)容傾卸于其中。它有一用于每個基本幾何圖形的調(diào)用。它要求由每個子類別支持(尤其圖形設(shè)備)。當(dāng)要求抽取時,集成幾何圖形把一個引用繪到一個抽取程序,它對其進(jìn)行調(diào)用以表達(dá)其內(nèi)部幾何結(jié)構(gòu)。
<pre listing-type="program-listing"><![CDATA[class TGrafExtractor{publicvirtual~TGratExtractor();virtual void ExtractRect(const TGRect&,TCAGUnary*,const TMatrixState&matrixState=TGlobalMatrixStateGetIdentity())=0;virtual void ExtractEllipse(const TGEllipse&TCAGUnary*,const TMatrixState&matrixState=TGlobalMatrixStateGetIdentity())=0;virtual void ExtractPolygon(const TGPolygon&,TCAGUnary*,corst TMatrixState&matrixState=TGlobalMatrixStateGetIdentity())=0;virtual void ExtractLoop(const TGLoop&,TCAGUnary*,const TMatrixState&matrixState=TGlobalMatrixStateGetldentity())=0;virtual void ExtractGlyPhRun(const TGGlyPhRun&,TCAGUnary*,cornst TMatrixState&matrixState=TGlobalMatrixtateGetIdentity())=0;virtual void ExtractLine(const TGLine&,TCAGUrnary*,corst TMatrixState&matrixState=TGlobalMatrixStateGetIdentity())=0;virtual void ExtractPolyline (const TGPolyline&,TCAGUnary*,const TMatrixState&matrixState=TGlobalMatrixStateGetIdentity())=0;virtual void ExtractCurve(const TGCurve&,TCAGUrnary*,const TMatrixState&matrixState=TGlobalMatrixStateGetIdentity())=0;]]></pre>
一個集成幾何圖形的Extract功能可以調(diào)用任何Ex-tractX功能以表達(dá)其幾何內(nèi)容。例如,包括矩形加橢圓的集成幾何圖形將對ExtractRect和ExtractEllipse進(jìn)行調(diào)用。TCAGUnary目標(biāo)去往每個功能并允許該集成幾何圖形表達(dá)用于其幾何圖形的輪詢次數(shù)行為(即偶—奇或分枝數(shù))。它生成一個適當(dāng)?shù)腡CAGUnary子類別的目標(biāo)。該目標(biāo)然后被任何為該幾何圖形生成的較低層幾何圖形(即GrafEdges)所引用。這就是CAG節(jié)點樹的葉子是如何連到較低層幾何圖形的。
去往每個功能的TMatrixState目的表達(dá)該幾何圖形處于其中的坐標(biāo)系統(tǒng)。在CAG節(jié)點被收集用于集成幾何圖形后,可用最終CAG節(jié)點樹確定是否一個點處于整個集成幾何圖形之內(nèi)或之外。樹的根通往下述Render功能。
內(nèi)部體系結(jié)構(gòu)用于支持TGArea體系結(jié)構(gòu)的類別的體系結(jié)構(gòu)示于下。圖19表示類別的Booch圖。TGArea類別1900包含一個TAreaGeometryHandle目標(biāo)1960,它是MAreaGeome-try子類別1950(集成幾何圖形)的等代物。換言之,TGArea類別1900是TAreaGeometryHandle類別1960的繞接程序(wrapper),而且TAreaGeometryHandle類別1960是MAreaGeometry類別1950的替代。TGArea1900,TAreaGeometryHandle1960和MAreaGeometry1950類別都向TGrafExtractor目標(biāo)1910表達(dá)了其內(nèi)部幾何圖形。TCAGNode子類別1940用于表達(dá)每個單獨的MAreaGeometry目標(biāo)1950的輪詢次數(shù)行為。需要提供新的客戶化集成幾何圖形的用戶將對MAreaGeometry 1950進(jìn)行子分類。為了利用MAreaGeometry類別1950的引用計數(shù),它們必須將其在TAreaGeometryHandle目標(biāo)1960中環(huán)境。上述類別及其子類別將詳述如下。
CAG類別為再現(xiàn)或選中測試等,集成幾何圖形必須提供內(nèi)部/外部確定方法。例如,再現(xiàn)(或選中測試等)代碼必須確定是否一個點位于集成幾何圖形之內(nèi)部或外部。該處理由圖20所示的CAG類別實現(xiàn)。在再現(xiàn)一個集成幾何圖形之前,TCAGNode子類別的二進(jìn)制樹被構(gòu)成以鏡像圖20所示的集成幾何圖形的二進(jìn)制數(shù)。在一個集成幾何圖形中的每條邊必須有一個對該樹的葉節(jié)點之一的引用。當(dāng)遇到集成幾何圖形中的一條邊時,適當(dāng)?shù)腃AG節(jié)點便被通知已發(fā)生了轉(zhuǎn)換。參見圖3,4,5和6并考慮以下情況。該集成幾何圖形包括一個矩形加一橢圓再減去一多邊形(都是基本幾何圖形),如圖3所示。圖4示出其二進(jìn)制樹,該樹代表集成幾何圖形的內(nèi)部結(jié)構(gòu)以及在再現(xiàn)之前構(gòu)成的CAG樹結(jié)構(gòu)。
圖21是詳細(xì)的CAG樹,它示出了CAG樹的內(nèi)部結(jié)構(gòu)。每個基本幾何圖形的邊都指向各自樹中的CAG節(jié)點葉。當(dāng)邊轉(zhuǎn)變時,通知其CAG節(jié)點,它導(dǎo)致樹在其頂部重新計算結(jié)果值。該值用于確定是否當(dāng)前的點在集成幾何圖形之內(nèi)或之外。
例如考慮掃描轉(zhuǎn)換處理。每行象素都代表在不同y值處通過集成幾何圖形的水平通路。在每個水平通路從左向右通過邊時導(dǎo)致轉(zhuǎn)變發(fā)生。每次轉(zhuǎn)變時,掃描轉(zhuǎn)換詢問CAG樹的根以確定當(dāng)前位置是否在整個集成幾何圖形之內(nèi),以確定要接通哪個象素。
當(dāng)圖14所示的集成幾何圖形成幀時,情況略為復(fù)雜一些。用于內(nèi)部結(jié)構(gòu)的CAG樹示于圖22中。成幀的集成幾何圖形由三種邊定義填充,左幀和右?guī)?“左”和“右”是隨意選中以區(qū)分兩個幀的邊,并無順序而言)。每個CAG節(jié)點有三個轉(zhuǎn)變功能,每個用于三種邊之一。所有去往CAG節(jié)點(除葉節(jié)點之外)的轉(zhuǎn)變值假設(shè)展示了偶一奇行為。例如,TCA-GAdd節(jié)點將其進(jìn)入值視為偶—奇值,而且其必須產(chǎn)生具有偶—奇行為的新值。在這時,循環(huán)進(jìn)行CAG樹的評價一個對CAG節(jié)點的轉(zhuǎn)變調(diào)用可能導(dǎo)致對其母節(jié)點的轉(zhuǎn)變調(diào)用。這可能有益于測試一個非遞歸算法,該算法算術(shù)地行走于該樹以改進(jìn)性能并將棧使用減至最少。但是,這是低優(yōu)先級,因為·實際上,大部分區(qū)域很可能不夠深以導(dǎo)致嚴(yán)重問題;以及·一個轉(zhuǎn)變調(diào)用的棧使用相當(dāng)?shù)汀?br>
在以下敘述中,某些有關(guān)幾何圖形填充和成幀區(qū)域的語言可能比較模糊不清。圖23是一展示用于本發(fā)明的一個最佳實施例的術(shù)語的圖。
TCAGNodeTCAGNode是為所有CAG類別提供共用協(xié)議的抽象類別。
<pre listing-type="program-listing"><![CDATA[class TCAGNode{publicvirtual~TCAGNode();typedef WrapCount long;]]></pre>“輪詢計數(shù)(wrap count)”是表示在一特定點處的幾何圖形狀態(tài)的累積值。必須保持輪詢計數(shù)以確定是否一個通路在穿過幾何圖形的邊的時候進(jìn)入或離開該幾何圖形。
<pre listing-type="program-listing"><![CDATA[virtual void Transition(WrapCount fill)=0;virtual void TransitionLeftFrame(WrapCount left-Frame)=0;virtual void TransitionRightFrame(WrapCount right-Frame)=0;]]></pre>每個TCAGNode子類別都有三種轉(zhuǎn)變功能,它們在子類的填充和成幀狀態(tài)中發(fā)生轉(zhuǎn)變時由子節(jié)點調(diào)用。例如,當(dāng)一條邊轉(zhuǎn)變發(fā)生時,該邊調(diào)用其父母的轉(zhuǎn)變功能之一。
集成幾何圖形類別一個多形的集成幾何圖形類別組被需要來存儲集成幾何圖形的二進(jìn)制樹(與基本幾何圖形不同,它不共用聯(lián)接)。圖24示出了根據(jù)本發(fā)明一個最佳實施例的集成幾何圖形類別層級。
MAreaGeometry 2400
該類別提供了由所有集成幾何圖形共享的協(xié)議。它包括抽取,轉(zhuǎn)換,選中測試,比較和不同的詢問(矩形,直線,空白和單數(shù)),它還包括MCollectible和MReferenceCounted協(xié)改。
抽取是MAreaGeometry子類別表達(dá)其內(nèi)部幾何結(jié)構(gòu)的處理。
<pre listing-type="program-listing"><![CDATA[class MAreaGeometrypublic MCollectible,publicMReferenceCounted{publicvirtual~MAreaGeometry();virtual void Extract(TGraf Extractor&extractor,TCAGNode*node,const TMatrixState&matrixState=TGlobalMa-trixStateGetIdentity())const=0;]]></pre>以上代碼是抽取功能,表達(dá)了根據(jù)基本幾何圖形(TGRect,TGEllipse等)的集成幾何圖形結(jié)構(gòu)。通過對指定的TGrafExtrator目標(biāo)的適當(dāng)調(diào)用可完成這一功能。例如,當(dāng)MAreaGeometry子類別繪制到幀緩沖設(shè)備時調(diào)用該功能。進(jìn)入的CAG節(jié)點是集成幾何圖形的母節(jié)點。換言之,由集成幾何圖形生成的任何CAG節(jié)點都有這一節(jié)點作為其母節(jié)點。這允許CAG樹被建立。該TMatrixState目標(biāo)指定幾何圖形存在于其中以供調(diào)用的坐標(biāo)系統(tǒng)。它可直接去往TGrafExtractor目標(biāo),或基于它的新目標(biāo)可去往TGrafEx-tractor。
<pre listing-type="program-listing"><![CDATA[virtual MAreaGeometry*CloneAndTransform(constTGrafMatrix m)const=0;]]></pre>該功能復(fù)制目標(biāo),由特定矩陣變換目標(biāo),并返回一個指針到新目標(biāo)。該新目標(biāo)可以或不可以有相同的具體類型。例如,在TRectGeometry目標(biāo)2450上執(zhí)行的共同操作返回一個TPolygonGeometry目標(biāo),因為該結(jié)果不再是一個矩形。
<pre listing-type="program-listing"><![CDATA[virtual MAreaGeometry*CloneAndAdd(constMAreaGeometry&)eonst=0;virtual MAreaGeometry*CloneAndSubtract(constMAreaGeometry&)const=0;virtual MAreaGeometry*CloneAndIntersect(constMAreaGeometry&)const=0;virtual MAreaGeometry*CloneAndExclusiveOr(constMAreaGeometry&)const=0;]]></pre>上述代碼中的功能用于復(fù)制目標(biāo),執(zhí)行相應(yīng)的CAG操作,并返回一個指針到新目標(biāo)。該新目標(biāo)可以或不可以具有相同的具體類型。例如,把TPolygonGeometry目標(biāo)與TEl-lipseGeometry目標(biāo)相加返回一個TAddGeometry目標(biāo)。
幾何圖形替代類別該類別是一個引用集成幾何圖形的繞接程序類別。它允許幾何數(shù)據(jù)共用,即多個替代可以引用相同的MAreaGeometry子類別2400。由于它避免了不必要的幾何數(shù)據(jù)復(fù)制,所以是理想的。該替代(或處理),TAreaGeome-tryHandle,用于共享只讀幾何數(shù)據(jù)。
圖25是一流程圖,示出了根據(jù)本發(fā)明一個最佳實施例的詳細(xì)邏輯。處理始于功能框2500,在該處,根據(jù)要被剪取的特定幾何圖形調(diào)用抽取功能。在任何情況下,在功能框2510,2540或2570處都生成偶奇目標(biāo)而且在矩形要被剪取時,控制去往2520,在橢圓要被處理時,控制去往2550,在直線幾何圖形要被處理時,控制去往2580??刂仆ㄟ^2530,2560或2590返回。
圖26是示出根據(jù)本發(fā)明一個最佳實施例詳細(xì)邏輯的流程圖。處理始于功能框2600以調(diào)用包含的區(qū)域目標(biāo)的抽取功能。然后,若該區(qū)域目標(biāo)是多邊形幾何圖形,則在決定框2610處進(jìn)行測試以確定是否該圖形為偶—奇填充格式。若是,則生成偶奇目標(biāo)并使母CAG目標(biāo)去往生成的目標(biāo)(在功能框2630處),在功能框2640處處理該區(qū)域并在終止2650處返回控制。若圖形由決定框2610判定不是偶—奇填充格式,則在功能框2660處生成一個分枝數(shù)目標(biāo)且母CAG目標(biāo)在功能框2660處去往生成的目標(biāo),在功能框2640處處理該區(qū)域且在終止2650處返回控制。若區(qū)域目標(biāo)是一個閉合(閉合曲線)幾何圖形,則在決定框2615處進(jìn)行測試以確定是否圖形為偶—奇填充格式。若是,則在功能框2670處生成偶—奇目標(biāo)并使母CAG目標(biāo)去往生成的目標(biāo),在功能框2680處處理區(qū)域并在終點2682處返回控制。若圖形由決定框2615判定不是偶—奇填充格式,則在功能框2690中生成分枝數(shù)目標(biāo)并在框2680處將母CAG目標(biāo)送往生成的目標(biāo),在功能框2680處處理該區(qū)域并在終止2682處返回控制。
圖27是展示根據(jù)本發(fā)明一個最佳實施例的詳細(xì)邏輯流程圖。處理始于功能框2700以調(diào)用與包含的區(qū)域?qū)?yīng)的抽取功能。然后,若抽取功能是變換的幾何圖形,則在功能框2710處將變換應(yīng)用于包含的區(qū)域,在2720處將抽取功能應(yīng)用于包含的區(qū)域并在終止2730處完成處理。若抽取功能是相加幾何圖形,則母目標(biāo)被送往生成的目標(biāo)(在功能框2750處)。則在功能框2750和2760處,調(diào)用第一(左)和第二(右)目標(biāo)的抽取功能。最后,處理完成于終止2770處。
權(quán)利要求
1.在具有存儲器和顯示器的計算機(jī)上處理圖形目標(biāo)的方法,其特征在于包括以下步驟(a)在存儲器中定義代表多個幾何圖形的類別;(b)在存儲器中生成代表多個幾何圖形操作的類別;(c)將至少一個幾何圖形操作應(yīng)用到第一和第二幾何圖形以生成合成幾何圖形;以及(d)在顯示器上顯示合成的幾何圖形。
2.權(quán)利要求1所述方法,還包括在存儲器中定義代表一個幾何圖形相加操作的類別的步驟。
3.權(quán)利要求1所述方法,還包括在存儲器中定義代表幾何圖形的異操作的類別的步驟。
4.權(quán)利要求1所述方法,還包括在存儲器中定義代表幾何圖形的減操作的類別的步驟。
5.權(quán)利要求1所述方法,還包括在存儲器中定義代表幾何圖形的與操作的類別的步驟。
6.權(quán)利要求1所述方法,還包括在存儲器中定義代表橢圓幾何圖形的類別的步驟。
7.權(quán)利要求1所述方法,還包括在存儲器中定義代表一個矩形幾何圖形的類別的步驟。
8.權(quán)利要求1所述方法,還包括在存儲器中定義代表一個多邊形幾何圖形的類別的步驟。
9.權(quán)利要求1所述方法,還包括在存儲器中定義代表一個閉合幾何圖形的類別的步驟。
10.權(quán)利要求1所述方法,還包括在存儲器中定義代表一個符號幾何圖形的類別的步驟。
11.權(quán)利要求1所述方法,還包括多形地表示目標(biāo)的步驟。
12.權(quán)利要求11所述方法,還包括以可擴(kuò)展方式表示目標(biāo)的步驟。
13.權(quán)利要求1所述方法,還包括以可擴(kuò)展方式確定掃描行象素是否位于圖形目標(biāo)內(nèi)或外的步驟。
14.權(quán)利要求13所述方法,還包括用偶—奇處理對區(qū)域目標(biāo)進(jìn)行處理的步驟。
15.權(quán)利要求13所述方法,還包括用分枝數(shù)處理對區(qū)域目標(biāo)進(jìn)行處理的步驟。
16.權(quán)利要求1所述方法,還包括多形地表示多個幾何圖形的步驟。
17.權(quán)利要求16所述方法,還包括以可擴(kuò)展方式代表多個幾何圖形的步驟。
18.用于處理圖形目標(biāo)的裝置,其特征在于包括(a)一個處理器;(b)與處理器相連并由其控制的存儲器;(c)與處理器相連并由其控制的顯示器;(d)在存儲器中定義代表多個幾何圖形的類別的裝置;(e)在存儲器中生成代表多個幾何圖形操作的類別的裝置;(f)將至少一個幾何圖形操作用于第一幾何圖形和第二幾何圖形以生成合成幾何圖形的裝置;以及(g)在顯示器上顯示合成幾何圖形的裝置。
19.權(quán)利要求18所述裝置,還包括在存儲器中定義代表一個幾何圖形相加操作的類別的裝置。
20.權(quán)利要求18所述裝置,還包括在存儲器中定義代表幾何圖形的異操作的類別的裝置。21.權(quán)利要求18所述裝置,還包括在存儲器中定義代表幾何圖形的減操作的類別的裝置。
22.權(quán)利要求18所述裝置,還包括在存儲器中定義代表幾何圖形的與操作的類別的裝置。
23.權(quán)利要求18所述裝置,還包括在存儲器中定義代表橢圓幾何圖形的類別裝置。
24.權(quán)利要求18所述裝置,還包括在存儲器中定義代表一個矩形幾何圖形的類別的裝置。
25.權(quán)利要求18所述裝置,還包括在存儲器中定義代表一個多邊形幾何圖形的類別的裝置。
26.權(quán)利要求18所述裝置,還包括在存儲器中定義代表一個閉合幾何圖形的類別的裝置。
27.權(quán)利要求18所述裝置,還包括在存儲器中定義代表一個符號幾何圖形的類別的裝置。
28.權(quán)利要求18所述裝置,還包括多形地表示目標(biāo)的裝置。
29.權(quán)利要求28所述裝置,還包括以可擴(kuò)展方式表示目標(biāo)的裝置。
30.權(quán)利要求18所述裝置,還包括以可擴(kuò)展方式確定掃描行象素是否位于圖形目標(biāo)內(nèi)或外的裝置。
31.權(quán)利要求29所述裝置,還包括用偶—奇處理對區(qū)域目標(biāo)進(jìn)行處理的裝置。
32.權(quán)利要求29所述裝置,還包括用分枝數(shù)處理對區(qū)域目標(biāo)進(jìn)行處理的裝置。
33.權(quán)利要求18所述裝置,還包括多形地表示多個目標(biāo)裝置。
34.權(quán)利要求33所述裝置,還包括以可擴(kuò)展方式代表多個目標(biāo)的裝置。
35.用于在具有存儲器并與顯示器相連的計算機(jī)上處理圖形目標(biāo)的方法,其特征在于包括以下步驟(a)在存儲器中定義表示多個幾何圖形的類別;(b)在存儲器中生成表示多個幾何圖形操作的類別;(c)在存儲器中定義至少一個表示至少一個幾何圖形處理操作的類別;(d)用至少一個在存儲器中表示至少一個幾何圖形處理操作的類別處理一個幾何圖形目標(biāo)以生成一個合成幾何圖形目標(biāo);以及(e)在顯示器上顯示合成幾何圖形目標(biāo)。
36.權(quán)利要求35所述方法,還包括將至少一個幾何圖形處理操作應(yīng)用到第一和第二幾何圖形以生成合成幾何圖形的步驟。
37.權(quán)利要求35所述方法,其中的處理操作是再現(xiàn)操作。
38.權(quán)利要求35所述方法,其中的處理操作是打印操作。
39.權(quán)利要求35所述方法,其中的處理操作是圖符操作。
40.權(quán)利要求35所述方法,還包括用多形和可擴(kuò)展方式處理幾何圖形目標(biāo)以再現(xiàn)該幾何圖形目標(biāo)的步驟。
全文摘要
用于在具有存儲器和連接有顯示器的計算機(jī)上處理圖形目標(biāo)并在定義區(qū)域幾何圖形(例如四方形,橢圓形和多邊形)上由面向目標(biāo)的操作系統(tǒng)進(jìn)行二進(jìn)制結(jié)構(gòu)區(qū)域幾何圖形(CAG)操作的方法和系統(tǒng)。這些操作包括一個區(qū)域的結(jié)構(gòu)及在外設(shè)上顯示區(qū)域幾何圖形。該系統(tǒng)允許應(yīng)用程序員有效地開發(fā)和共享用于顯示包括重疊視圖和半透明視圖的多個復(fù)合視圖的軟件。
文檔編號G09G5/36GK1119046SQ94191399
公開日1996年3月20日 申請日期1994年1月3日 優(yōu)先權(quán)日1993年8月30日
發(fā)明者里查德·D·韋伯, 阿瑟·W·卡貝拉 申請人:塔里根特公司