摘要Abstract:本文簡要介紹了擴充卡模式(adapter pattern),并結合程式執行個體對OpenCascade中的拓樸與幾何的擴充卡的使用進行說明。 關鍵字Key Words:OpenCascade、BRep、Topology、Geometry、Adapter
Topology and Geometry in OpenCascade-Adapters
摘要Abstract:本文簡要介紹了擴充卡模式(adapter pattern),并結合程式執行個體對OpenCascade中的拓樸與幾何的擴充卡的使用進行說明。
關鍵字Key Words:OpenCascade、BRep、Topology、Geometry、Adapter
類對象結構型模式擴充卡模式(Adapter):
意圖(Intent):将一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不相容而不能一起工作的那些類可以一起工作。
别名(Also Known As):包裝器Wrapper
動機(Motivation):有時,為複用而設計的工具箱類不能夠被複用的原因僅僅是因為它的接口與專業應用領域所需要的接口不比對。
适用性(Applicability),以下情況使用Adapter模式:
l 你想使用一個已經存在的類,而它的接口不符合你的需求;
l 你想建立一個可以複用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定相容的類)協同工作;
l (僅适用于對象Adapter)你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以比對它們的接口。對象擴充卡可以适配它的父類接口;
結構(Structure):
類擴充卡使用多重繼承對一個接口與另一個接口進行比對,如下圖所示:

Figure 1.1 Class adapter structure
對象擴充卡依賴于對象組合,如下圖所示:
Figure 1.2 Object adapter structure
協作(Collaborations):Client在Adapter執行個體上調用一些操作,接着擴充卡調用Adaptee的操作實作這個請求。
關于擴充卡模式(Adapter pattern)更多資訊,請參考GoF的經典之作《Design Patterns-Elements of Reuseable Object-Oriented Software》。
一些OpenCascade的算法可以操作表示曲線的對象,然而他們提供的API接受Adaptor3d_Curve而不接受Geom_Curve。例如,包Extrema(用來計算點、線、面之間的距離)可用來計算幾何曲線(Geom_Curve)和拓樸邊(TopoDS_Edge)的求交、投影和其他一些算法。其他的例子有計算長度,面積等。這種方法稱為擴充卡模式(Adapter pattern)。
Figure 1.3 Adaptor3d_Curve class diagram
從上面的類圖可以看出,GeomAdaptor3d_Curve是Adaptor3d_Curve的子類,該類用來适配Geom_Curve類型,BRepAdaptor_Curve用于适配TopoDS_Edge類型。BRepAdaptor_CompCurve用于适配TopoDS_Wire。對于二維曲線和曲面也有類似功能的類。通過擴充卡使不同的曲線(幾何曲線和拓樸邊)在一起工作,如下代碼所示,計算幾何曲線和拓樸邊長度的方式統一了:
程式結果如下所示:
應用擴充卡模式使OpenCascade中接口不相容的類如幾何曲線(Geom_Curve)與拓樸邊(TopoDS_Edge)可以在一起工作了,如求交計算、投影計算、長度計算等等。
1. GoF, Design Patterns-Elements of Reuseable Object-Oriented Software
2. Roman Lygin, OpenCascade notes, opencascade.blogspot.com
PDF Version: Topology and Geometry in OpenCascade-Adapters