青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

Open CASCADE Foundation Classes – Basics

Posted on 2012-08-23 20:28 eryar 閱讀(4508) 評論(2)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

Open CASCADE Foundation ClassesBasics

Open CASCADE 基礎庫之基本功能

eryar@163.com

本章主要介紹Open CASCADE的基本功能,如內存管理(memory management)、手柄編程(programming with handles)、基本類型(primitive types)、異常處理(exception handling)、泛型編程(genericity by downcasting)、Plug-in的創建等……

一、數據類型 Data Types

1.1 基本類型 Primitive Types

基本類型是由語言定義的且他們是由值控制的。有些基本類型從類Storable繼承而來。這就意味著他們可以在持久性對象中使用,或者被包含在對象的方法中,或者作為對象內部的一部分。由類Standard_Storable派生的類有:

l Boolean: 用來表示邏輯數據。只有兩種狀態:Standard_TrueStandard_False;

l Character: 用來表示任意ASCII字符;

l ExtCharacter: 用來表示字符的擴展;

l Integer: 用來表示整數;

l Real: 用來表示實數;

l ShortReal: 用來表示實數的另一種選擇,精度要低;

也有非存儲類型,如:

l CString:

l ExtString:

l Address:

下表所示為Open CASCADE中基本類型與C++中基本類型對應表:

C++ Types

Open CASCADE Types

int

Standard_Integer

double

Standard_Real

float

Standard_ShortReal

unsigned int

Standard_Boolean

Standard_False = 0;

Standard_True = 1;

char

Standard_Character

short

Standard_ExtCharacter

char*

Standard_CString

void*

Standard_Address

short*

Standard_ExtString

clip_image002 使用上述基本類型的注意事項:

具體請參考《Open CASCADE Foundation Classes User's Guide》;

1.2 由值控制的類型

由值控制的變量類型分為三類:

l 基本類型;

l 枚舉類型;

l 不是由類Standard_Persistent直接或間接派生的類;

由值控制的變量比由手柄控制的變量更直接,更快,就是不能保存到文件。

clip_image004

1.3 由引用控制的類型

由手柄控制的變量分為兩類:

l 由類Persistent派生的類,這種類可以保存到文件;

l 由類Transient派生的類;

clip_image006

1.4 屬性的結論

clip_image008

二、手柄編程 Programming with Handles

2.1 手柄定義 Handle Definition

手柄與C++的指針(pointer)類似。幾個手柄可以引用同一個對象,同樣地,一個手柄也可以引用了幾個對象,但是一次只能是一個對象。為了訪問引用的對象,必須先解除引用(de-referenced),就像使用C++的指針一樣。臨時變量和持久變量既可以是由值控制的也可以是由手柄控制的。引用非持久性對象的手柄稱為不可存儲手柄。因此,持久性對象不能包含不可存儲手柄。

類的組織:使用手柄的類的對象可以是持久的也可是臨時的。從類Standard_Transient繼承的類的實例是臨時的,而從類Standard_Persistent繼承的類的實例是持久的。本章只討論臨時類及其相關的手柄。持久類及其相關的手柄的組織與此類似。

Standard_TransientOpen CASCADE中由手柄控制的類層次結構中的基類。它有引用計數部分,所有的子類都繼承此部分。當使用Handle()類時,就可知引手柄引用實例的數量。

直接或間接由類Transient派生的類,CDL extractor將創建類的相應的手柄Handle(),類名是相同的,只是在類名前加上了“Handle_*”。Open CASCADE提供預處理器的宏定義Handle(),用來產生相應類的帶手柄的類。

使用手柄:在對臨時對象執行任何操作之前,你必須聲明手柄。如:若點(Point)和線(Line)是從包Geom中定義的兩個臨時對象,代碼如下:

clip_image010

聲明手柄創建了一個未指向任何對象的空手柄。手柄可以通過其方法IsNull()來驗證。使用手柄無效,可使用方法Nullify()。

只要類型兼容,既可以從創建新的對象或通過賦值來初始化手柄。手柄僅用于共享的對象。對于所有的本地操作,建議使用由值控制的類。

2.2 類型管理 Type Management

Open CASCADE提供一種描述數據類型層次的通用方式,并且可以運行時檢查對象類型,與C++的RTTI類似。對于從類Standard_Transient繼承的每個類,CDL extractor從類Standard_Type創建代碼。由類Standard_Transient派生的類的虛函數DynamicType()返回一個實例。通過虛函數IsKind()來檢查給定的對象是不是指定的類型。

2.3 使用手柄創建對象 Using Handles to Create Objects

創建由手柄控制的對象,聲明手柄并使用標準C++的new操作符,緊隨其后調用構造函數。

clip_image012

與指針不同的是,手柄不需要delete。因為當手柄引用的對象為零時,對象將會被自動釋放。

2.4 方法調用 Invoking Methods

當你使用手柄的時候,就跟使用C++的指針一樣。調用手柄引用對象的方法使用操作符->。檢查或修改手柄的狀態,通過操作符點.來實現。下例所示為訪問一個點對象的坐標:

clip_image014

下例所示為如何檢查笛卡爾坐標點的類型:

clip_image016

當調用一個空Null手柄時,NullObject異常將會產生。

調用類方法:類方法就是C++類中的靜態函數。即用類名加上“::”和方法名來調用。

clip_image018

2.5 手柄釋放 Handle De-allocation

在刪除一個對象之前,必須其沒有被引用。為了減少管理對象生命周期的編程工作量,Open CASCADE中對象的刪除函數是由手柄控制類的引用計數(reference counter)來確保。手柄就是用來管理引用計數,當對象不再引用時將會調用delete將其刪除。當是Standard_Transient的子類時,通常不需要直接使用delete操作符。當對相同的對象使用new時,引用計數將會增加。當手柄被銷毀、置為空或重新賦值,引用計數將會減少。當引用計數為0時對象將會自動調用delete操作符。內存分配的原理如下所示:

clip_image020

Cycles

本段內容不清楚,具體內容請參考原文。

2.6 不使用CDL創建類 Creating Transient Classes without CDL

盡管可用CDL extractor生成手柄類及其相關C++代碼,然而也可不用CDL管理手柄。為此,在文件Standard_DefineHandle.hxx中提供了幾個宏定義:

DECLARE_STANDARD_HANDLE(class_name, ancestor_name) 這個宏定義了以class_name為類名并繼承類ancestor_name的手柄類。這個宏必須放在頭文件中,且基類必須是可用的。

IMPLEMENT_STANDARD_HANDLE(class_name, ancestor_name) 這個宏實現了轉換方法DownCast(),應該在C++文件中使用。

DEFINE_STANDARD_RTTI(class_name) 這個宏聲明方法需要RTTI支持,應該在類的public中使用。

IMPLEMENT_STANDARD_RTTIEXT(class_name, ancestor_name) 實現上面的方法。

注:在使用這些宏的時候,必須確保參數的正確性,特別是父類的名字。否則定義將會不正確,且編譯也不會報錯。

clip_image022

clip_image024

三、內存管理 Memory Management in Open CASCADE

在幾何建模的過程中,程序創建和刪除相當數量的C++對象在動態內存中,也就是堆中(heap)。在這種情況下,標準函數管理內存的性能可能不足夠。所以,Open CASCADE在標準包中實現了內存的管理。

3.1 用法 Usage

使用Open CASCADE內存管理只需要在C中使用malloc()的地方使用Standard::Allocate();在使用free()的地方使用Standard::Free();在使用realloc()的地方使用Standard::Reallocate()。

C++中,類的操作符new()和delete()已經定義了在申請內存時使用Standard::Allocate()并在釋放時使用Standard::Free()。所以,類所有的對象的內存都將由Open CASCADE的內存管理器來管理。

CDL extractor為所有的類定義了new()和delete()。所以,所有的Open CASCADE的類(小部分除外)都使用Open CASCADE的內存管理器。

由于操作符new()和delete()被繼承,所以,所有從Open CASCADE派生的類,所有從Standard_Transient類派生的類都是由內存管理器管理。

注:若重載了部分從Standard_Transient類派生類的new()和delete(),盡管不推薦這樣做,方法Delete()必須重定義,以便對這樣的指針使用delete操作。這將確保合適的delete()函數將會被調用,即使是由手柄控制的對象。

3.2 配置內存管理器 Configuring Memory Manager

Open CASCADE內存管理器可以被配置以便對不同的內存區域使用不同的優化技術,或者根本不使用任何優化而直接使用Cmalloc()和free()函數。配置方法為修改環境變量的值:

l MMGT_OPT

l MMGT_CLEAR

l MMGT_CELLSIZE:

l MMGT_NBPAGES:

l MMGT_THRESHOLD:

l MMGT_REENTRANT:

3.3 實現細節 Implementation details

本段內容請參考原文。

四、異常處理 Exception Handling

異常處理提供了一種從指定點轉換到其他點的一種方法。一個方法可能會產生一個異常,將程序從正常執行處轉換到捕捉異常處。Open CASCADE提供了異常類的層次,其基類是包Standard中的Standard_FailureCDL extractor使用標準接口生成異常類。

Open CASCADE也提供將系統信號的轉換成異常的支持,如數除0這樣所有的情況都可以用安全、統一的方法來處理了。但是為了支持不同的平臺,也使用了一些特殊的方法。

如下內容為在Open CASCADE中使用異常處理的推薦方法。

4.1 產生異常 Raising an Exception

C++的語法:產生適當的異常將需要調用指定類型的Raise()方法。

clip_image026

產生了一個DomainError類型的異常并可附上相關信息“Cannot cope with this condition”,信息字符串是可選的。這個異常可以被捕捉DomainError類型的Handler捕捉到:

clip_image028

正常使用異常處理:異常不能被當作編程技巧來替代“goto”,但可作為防止方法被誤用的一種方法。

五、Plug-In管理

本段內容請參考原文。

六、結論

本章內容介紹了一些C++編程的知識及Open CASCADEC++的包裝。其中,手柄編程是C++中常見的方法,這種引用計數的方式使內存的管理更方便。

 

eryar@163.com

Pudongxin Shanghai China

2012-8-23

Feedback

# re: Open CASCADE Foundation Classes – Basics  回復  更多評論   

2012-08-24 13:18 by 力為
用這個的越來越多了,好事情!

# re: Open CASCADE Foundation Classes – Basics  回復  更多評論   

2012-08-26 09:17 by eryar
學習學習, 希望能做點東西出來@力為
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品国产综合| 老司机精品福利视频| 亚洲网站啪啪| 免费不卡中文字幕视频| 亚洲欧美日韩电影| 国产精品卡一卡二| 99国内精品| 亚洲国产高清自拍| 久久日韩粉嫩一区二区三区| 国产乱理伦片在线观看夜一区| 一区二区三区导航| 99精品国产99久久久久久福利| 欧美另类在线播放| 亚洲图片你懂的| 99国产精品国产精品久久| 欧美大色视频| 99精品视频免费全部在线| 91久久夜色精品国产九色| 免费在线观看精品| a4yy欧美一区二区三区| aaa亚洲精品一二三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 午夜精品一区二区三区电影天堂| 亚洲人体大胆视频| 欧美日韩喷水| 亚洲欧美日韩直播| 亚洲一区二区三区免费观看 | 欧美片第1页综合| 中文日韩电影网站| 亚洲自拍16p| 红桃视频国产精品| 亚洲国产高清高潮精品美女| 欧美精品成人91久久久久久久| 99国产精品私拍| 亚洲无线视频| 激情五月婷婷综合| 亚洲高清一区二区三区| 欧美日韩国内| 久久女同互慰一区二区三区| 久久久久高清| av成人免费在线观看| 亚洲视频图片小说| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 亚洲国产二区| 一区二区三区在线观看视频| 亚洲第一黄网| 日韩视频在线一区| 国产网站欧美日韩免费精品在线观看| 久久久国产精品亚洲一区| 久久亚洲精品视频| 亚洲网站视频福利| 久久婷婷国产麻豆91天堂| 日韩一区二区免费高清| 亚洲综合视频一区| 99re成人精品视频| 久久久久久久久久久一区| 一区二区三区日韩在线观看| 欧美亚洲视频一区二区| 亚洲九九爱视频| 久久精品国产99国产精品澳门| 一级日韩一区在线观看| 久久国产色av| 亚洲一区亚洲| 欧美国产日韩亚洲一区| 久久九九国产精品怡红院| 欧美日韩黄色一区二区| 毛片一区二区三区| 国产欧美欧洲在线观看| 亚洲精品免费电影| 亚洲高清一区二区三区| 亚洲欧美国产毛片在线| 中文av字幕一区| 欧美国产成人在线| 免费精品99久久国产综合精品| 国产精品极品美女粉嫩高清在线| 免费成人黄色| 国产亚洲精久久久久久| 99视频一区二区三区| 亚洲精品乱码久久久久久| 久久成年人视频| 亚洲欧美日韩国产中文在线| 欧美—级a级欧美特级ar全黄| 久久理论片午夜琪琪电影网| 国产精品一区一区| 亚洲性感美女99在线| 亚洲午夜久久久久久尤物 | 牛牛影视久久网| 麻豆精品91| 韩日欧美一区二区三区| 欧美一区午夜精品| 久久精精品视频| 国产日韩欧美一区二区三区在线观看 | 欧美一区二区成人6969| 欧美性猛交xxxx乱大交退制版 | 一本色道**综合亚洲精品蜜桃冫 | 欧美国产成人在线| 国产精品久久久久高潮| 国产精品99久久久久久www| 欧美岛国在线观看| 欧美aa在线视频| 欧美久久久久久久| 亚洲大片av| 亚洲伦理在线观看| 欧美日韩视频专区在线播放| 亚洲激情一区二区| 一区二区精品在线观看| 欧美日韩播放| 一区二区三区高清视频在线观看| 亚洲综合国产激情另类一区| 国产精品欧美经典| 羞羞色国产精品| 久久综合图片| 亚洲人永久免费| 欧美婷婷久久| 亚洲欧美变态国产另类| 久久久www成人免费无遮挡大片| 国产日韩欧美一区| 麻豆精品一区二区综合av| 91久久精品日日躁夜夜躁国产| 在线性视频日韩欧美| 国产精品久久午夜| 久久精品国产亚洲一区二区三区 | 最新国产成人av网站网址麻豆| 亚洲美女在线观看| 国产精品美女久久久| 欧美一区二区三区精品电影| 久热精品视频在线观看| 亚洲乱码国产乱码精品精可以看| 欧美日韩在线视频观看| 午夜视频久久久| 欧美高清视频一区| 亚洲欧美国产另类| 亚洲国产91精品在线观看| 欧美日韩影院| 久久久天天操| 亚洲视频导航| 欧美国产日本在线| 午夜日韩在线| 亚洲区一区二区三区| 国产视频观看一区| 欧美黄色网络| 久久精品综合| 亚洲一区二区三区激情| 欧美激情亚洲一区| 久久xxxx精品视频| 亚洲一区二区精品视频| 亚洲二区免费| 国产欧美在线看| 欧美视频成人| 欧美黄污视频| 久久人人爽人人爽| 午夜电影亚洲| 中国亚洲黄色| 亚洲免费高清| 亚洲激情成人在线| 狂野欧美激情性xxxx欧美| 亚洲香蕉网站| av成人手机在线| 亚洲精品欧美激情| 在线看一区二区| 国产午夜一区二区三区| 国产精品国产a级| 欧美日韩国产成人精品| 久久久久欧美| 亚洲一区二区三区国产| 日韩一区二区精品| 亚洲国产精品99久久久久久久久| 嫩草国产精品入口| 欧美日韩免费在线观看| 久久精品视频网| 亚洲欧美日韩国产成人| 夜久久久久久| 亚洲品质自拍| 亚洲欧洲日夜超级视频| 亚洲国产日韩欧美在线动漫| 美女精品一区| 开心色5月久久精品| 久久国产精品亚洲va麻豆| 亚洲欧美精品中文字幕在线| 在线一区欧美| 亚洲一区日韩| 性亚洲最疯狂xxxx高清| 亚洲欧美日韩在线不卡| 亚洲免费影院| 欧美中文字幕视频在线观看| 欧美在线观看www| 久久青草欧美一区二区三区| 久久精品毛片| 麻豆久久婷婷| 亚洲人成网站777色婷婷| 亚洲国产一区二区在线| 亚洲美女中文字幕| 亚洲视频一区二区在线观看| 一区二区福利| 欧美一区二区三区日韩视频| 久久精品日韩欧美| 欧美国产一区二区在线观看| 欧美日韩激情小视频| 国产精品网站视频| 国语精品一区|