天天看點

OpenCASCADE Application Framework Data Framework Services

OpenCASCADE的資料架構對來自不同程式的資料提供了統一的處理環境。這就簡化了資料交換、修改,也保證了資料統一性、穩定性。

[email protected]

OpenCASCADE的資料架構對來自不同程式的資料提供了統一的處理環境。這就簡化了資料交換、修改,也保證了資料統一性、穩定性。實作方法需要用到以下部分:

u 标号Tha tag

u 标簽The label

u 屬性The attribute

OpenCASCADE Application Framework Data Framework Services

Figure 1. Contents of a document

如上圖所示,架構樹的第一個标簽(label)是根标簽(root)。每個标簽(label)有個以整數表示的标号(tag)。由目前标簽的标号到根标簽的标号,可以得到一個惟一的标号清單,如:0:1:2:1。

每個标簽(label)可以一些屬性(attribute),這些屬性可以包含資料。每個屬性由GUID來區分。标簽最重要的性質是其入口隻是資料架構的一個位址。

一個标号Tag就是一個整數,它用兩種方式标示了一個label:

u 相對标示法 Relative identification:一個标簽的标号隻與其父标簽有關系。如對于一個指定的标簽,可能由四個子标簽組成,其标号分别為2,7,18,100。使用相對标示方法,在設定屬性時有安全的範圍。

u 絕對标示法 Absolute identification:一個标簽在資料架構中位置由無歧義的、從根标簽的标号到目前标簽的标号用冒号表示的标号清單(list of tags)來表示。

不管采用哪種方法,都要注意的是這些标号的值沒什麼實際的意義。隻是用來确定每個标簽在樹結構的位置,都是為了使用文檔支援Undo/Redo的功能。

建立标号Tag的兩種方式:

u Random delivery 随機建立;

u User-defined delivery 使用者自定義建立;

正如字面所說,随機建立标号時,标号是由系統随機生成。使用者自定義建立标号時,标号的值是建立标号函數的參數。

1. 随機建立标号法生成子标簽 Creating child labels using random delivery of tags

使用TDF_TagSource::NewChild來添加标簽。如下代碼所示,函數NewChild的參數level2也是一個TDF_Label。

OpenCASCADE Application Framework Data Framework Services

2. 使用者自定義建立标号法生成子标簽 Creation of a child label by user delivery from a tag

建立子标簽的另一種方式就是使用者自定義建立。即在指定标号建立标簽。可以使用TDF_Label::FindChild和TDF_Label::Tag來獲得指定标号的子标簽。

OpenCASCADE Application Framework Data Framework Services

如上代碼所示,3是需要查找的标簽的标号,Standard_False用來表示若查找不到指定标号時是否建立子标簽。

三、标簽The Label

标号(Tag)給了标簽(Label)一個唯一的位址。資料架構中的标簽是包含屬性,綁定資料的容器。資料架構的本質是一個标簽樹,如下圖所示:

OpenCASCADE Application Framework Data Framework Services

資料架構中的标簽不能被删除,是以,當文檔打開後已經的資料架構結構不能被删除。

1. 建立标簽 Label creation

可以在任意層次建立标簽,也可以找到标簽在資料架構中的深度(Depth)。TDF_Label提供上述功能。

2. 建立子标簽 Creating child labels

在資料架構中指定标簽上建立子标簽使用TDF_Label::FindChild。如下所示:

OpenCASCADE Application Framework Data Framework Services

當把FindChilde的第二個參數設為Standard_True時,就確定了查找不到指定标号的标簽時會建立一個标簽。如下所示:

OpenCASCADE Application Framework Data Framework Services

3. 通路子标簽 Retrieving child labels

可以使用周遊器來通路目前标簽的第一層的子标簽。如下所示:

OpenCASCADE Application Framework Data Framework Services

也可以通路目前标簽的所有子标簽,如下所示:

OpenCASCADE Application Framework Data Framework Services

使用TDF_Tool::Entry可以得到目前标簽的入口字元串,如下所示:

OpenCASCADE Application Framework Data Framework Services

4. 通路父标簽

通路目前标簽的父标簽:

OpenCASCADE Application Framework Data Framework Services

四、屬性The Attribute

标簽本身不包含任何資料。所有資料,不管什麼類型,程式的非程式的資料都是儲存在屬性中。屬性是綁定在标簽上,且屬性可以是任意類型的資料。OCAF提供許多直接可以使用的屬性如:整數、實數、軸、平面。也有用于拓樸、功能、可視化的屬性。每種類型的屬性由GUID來辨別。這樣做的好處就是所有類型的屬性都以相同的方式處理。可以建立新的執行個體,通路、綁定到标簽和從标簽上删除等。

1.通路标簽的屬性

使用函數TDF_Label::FindAttribute來通路标簽的屬性。如下例所示,

OpenCASCADE Application Framework Data Framework Services

2.使用GUID來辨別屬性 Identifying an attribute using a GUID

可以建立一個屬性對象并得到其GUID。如下例所示,建立了一個整數屬性,通過方法ID來得到GUID。

OpenCASCADE Application Framework Data Framework Services

3. 将屬性綁定到标簽 Attaching an attribute to a label

使用函數TDF_Label::Add來将屬性綁定到标簽。重複綁定相同GUID的屬性到一個标簽會出現錯誤。TDF_Attribute::Label可以得到綁定屬性的标簽。如下所示:

OpenCASCADE Application Framework Data Framework Services

4. 測試标簽綁定狀态 Testing the attachment to a label

可以使用函數TDF_Attribute::IsA來檢驗屬性是否已經綁定到标簽上,函數的參數是屬性的GUID。在下例所示,是檢測目前标簽是否有整數屬性,然後得出這個标簽屬性的數量。函數TDF_Tool::HasAttribute用來檢測标簽是否綁定的有屬性,函數TDF_Tool::NbAttributes傳回标簽綁定屬性的數量。

OpenCASCADE Application Framework Data Framework Services

5. 删除标簽的屬性 Removing an attribute from a label

若要将屬性從标簽中删除,可以使用TDF_Label::Forget,函數參數為屬性的GUID。若要删除标簽所有屬性,使用函數TDF_Label::ForgetAll。

OpenCASCADE Application Framework Data Framework Services

6. 特定屬性的建立 Specific attribute creation

見《Application Framework User's Guide》。

輸出結果如下所示:

PDF Version: OpenCASCADE Application Framework Data Framework Services