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

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) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

Open CASCADE Foundation ClassesBasics

Open CASCADE 基礎(chǔ)庫之基本功能

eryar@163.com

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

一、數(shù)據(jù)類型 Data Types

1.1 基本類型 Primitive Types

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

l Boolean: 用來表示邏輯數(shù)據(jù)。只有兩種狀態(tài):Standard_TrueStandard_False;

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

l ExtCharacter: 用來表示字符的擴(kuò)展;

l Integer: 用來表示整數(shù);

l Real: 用來表示實(shí)數(shù);

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

也有非存儲(chǔ)類型,如:

l CString:

l ExtString:

l Address:

下表所示為Open CASCADE中基本類型與C++中基本類型對(duì)應(yīng)表:

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 使用上述基本類型的注意事項(xiàng):

具體請(qǐng)參考《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 屬性的結(jié)論

clip_image008

二、手柄編程 Programming with Handles

2.1 手柄定義 Handle Definition

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

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

Standard_TransientOpen CASCADE中由手柄控制的類層次結(jié)構(gòu)中的基類。它有引用計(jì)數(shù)部分,所有的子類都繼承此部分。當(dāng)使用Handle()類時(shí),就可知引手柄引用實(shí)例的數(shù)量。

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

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

clip_image010

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

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

2.2 類型管理 Type Management

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

2.3 使用手柄創(chuàng)建對(duì)象 Using Handles to Create Objects

創(chuàng)建由手柄控制的對(duì)象,聲明手柄并使用標(biāo)準(zhǔn)C++的new操作符,緊隨其后調(diào)用構(gòu)造函數(shù)。

clip_image012

與指針不同的是,手柄不需要delete。因?yàn)楫?dāng)手柄引用的對(duì)象為零時(shí),對(duì)象將會(huì)被自動(dòng)釋放。

2.4 方法調(diào)用 Invoking Methods

當(dāng)你使用手柄的時(shí)候,就跟使用C++的指針一樣。調(diào)用手柄引用對(duì)象的方法使用操作符->。檢查或修改手柄的狀態(tài),通過操作符點(diǎn).來實(shí)現(xiàn)。下例所示為訪問一個(gè)點(diǎn)對(duì)象的坐標(biāo):

clip_image014

下例所示為如何檢查笛卡爾坐標(biāo)點(diǎn)的類型:

clip_image016

當(dāng)調(diào)用一個(gè)空Null手柄時(shí),NullObject異常將會(huì)產(chǎn)生。

調(diào)用類方法:類方法就是C++類中的靜態(tài)函數(shù)。即用類名加上“::”和方法名來調(diào)用。

clip_image018

2.5 手柄釋放 Handle De-allocation

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

clip_image020

Cycles

本段內(nèi)容不清楚,具體內(nèi)容請(qǐng)參考原文。

2.6 不使用CDL創(chuàng)建類 Creating Transient Classes without CDL

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

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

IMPLEMENT_STANDARD_HANDLE(class_name, ancestor_name) 這個(gè)宏實(shí)現(xiàn)了轉(zhuǎn)換方法DownCast(),應(yīng)該在C++文件中使用。

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

IMPLEMENT_STANDARD_RTTIEXT(class_name, ancestor_name) 實(shí)現(xiàn)上面的方法。

注:在使用這些宏的時(shí)候,必須確保參數(shù)的正確性,特別是父類的名字。否則定義將會(huì)不正確,且編譯也不會(huì)報(bào)錯(cuò)。

clip_image022

clip_image024

三、內(nèi)存管理 Memory Management in Open CASCADE

在幾何建模的過程中,程序創(chuàng)建和刪除相當(dāng)數(shù)量的C++對(duì)象在動(dòng)態(tài)內(nèi)存中,也就是堆中(heap)。在這種情況下,標(biāo)準(zhǔn)函數(shù)管理內(nèi)存的性能可能不足夠。所以,Open CASCADE在標(biāo)準(zhǔn)包中實(shí)現(xiàn)了內(nèi)存的管理。

3.1 用法 Usage

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

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

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

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

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

3.2 配置內(nèi)存管理器 Configuring Memory Manager

Open CASCADE內(nèi)存管理器可以被配置以便對(duì)不同的內(nèi)存區(qū)域使用不同的優(yōu)化技術(shù),或者根本不使用任何優(yōu)化而直接使用Cmalloc()和free()函數(shù)。配置方法為修改環(huán)境變量的值:

l MMGT_OPT

l MMGT_CLEAR

l MMGT_CELLSIZE:

l MMGT_NBPAGES:

l MMGT_THRESHOLD:

l MMGT_REENTRANT:

3.3 實(shí)現(xiàn)細(xì)節(jié) Implementation details

本段內(nèi)容請(qǐng)參考原文。

四、異常處理 Exception Handling

異常處理提供了一種從指定點(diǎn)轉(zhuǎn)換到其他點(diǎn)的一種方法。一個(gè)方法可能會(huì)產(chǎn)生一個(gè)異常,將程序從正常執(zhí)行處轉(zhuǎn)換到捕捉異常處。Open CASCADE提供了異常類的層次,其基類是包Standard中的Standard_FailureCDL extractor使用標(biāo)準(zhǔn)接口生成異常類。

Open CASCADE也提供將系統(tǒng)信號(hào)的轉(zhuǎn)換成異常的支持,如數(shù)除0這樣所有的情況都可以用安全、統(tǒng)一的方法來處理了。但是為了支持不同的平臺(tái),也使用了一些特殊的方法。

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

4.1 產(chǎn)生異常 Raising an Exception

C++的語法:產(chǎn)生適當(dāng)?shù)漠惓⑿枰{(diào)用指定類型的Raise()方法。

clip_image026

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

clip_image028

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

五、Plug-In管理

本段內(nèi)容請(qǐng)參考原文。

六、結(jié)論

本章內(nèi)容介紹了一些C++編程的知識(shí)及Open CASCADE對(duì)C++的包裝。其中,手柄編程是C++中常見的方法,這種引用計(jì)數(shù)的方式使內(nèi)存的管理更方便。

 

eryar@163.com

Pudongxin Shanghai China

2012-8-23

Feedback

# re: Open CASCADE Foundation Classes – Basics  回復(fù)  更多評(píng)論   

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

# re: Open CASCADE Foundation Classes – Basics  回復(fù)  更多評(píng)論   

2012-08-26 09:17 by eryar
學(xué)習(xí)學(xué)習(xí), 希望能做點(diǎn)東西出來@力為
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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热软件| 欧美国产高潮xxxx1819| 久久婷婷国产麻豆91天堂| 香蕉成人伊视频在线观看| 欧美一级网站| 另类激情亚洲| 亚洲国产精品视频| 亚洲激情精品| 在线综合欧美| 欧美一区二区三区视频在线| 欧美在线你懂的| 免费一区二区三区| 国产精品户外野外| 在线观看一区二区视频| 亚洲精选大片| 久久国产精品黑丝| 亚洲缚视频在线观看| 日韩一区二区高清| 欧美专区在线观看| 欧美美女操人视频| 国产亚洲综合精品| 亚洲精品乱码久久久久久蜜桃91| 亚洲小说欧美另类社区| 久久视频一区二区| 亚洲欧美美女| 新狼窝色av性久久久久久| 在线视频欧美日韩| 久久国产精品久久精品国产| 欧美成人激情视频| 国产欧美日韩视频在线观看 | 欧美日韩免费观看一区| 国产精品亚洲网站| 亚洲精品社区| 久久人91精品久久久久久不卡| 亚洲国产精品va| 欧美亚洲日本一区| 欧美日韩日本国产亚洲在线| 国产主播一区二区| 欧美一级黄色录像| 一本色道久久88综合亚洲精品ⅰ | 农夫在线精品视频免费观看| 一区二区三区视频观看| 欧美国产成人精品| 亚洲成人在线免费| 久久久久欧美| 欧美在线观看一区二区| 国产欧美日本一区二区三区| 亚洲一级网站| 在线综合视频| 国产精品v欧美精品v日本精品动漫| 亚洲激精日韩激精欧美精品| 免费在线播放第一区高清av| 欧美中文在线免费| 国产自产在线视频一区| 久久国产精品黑丝| 久久se精品一区精品二区| 国产精品视频1区| 亚洲午夜在线视频| 中文精品一区二区三区| 欧美日韩中文另类| 亚洲一区二区三区影院| 99视频在线观看一区三区| 欧美激情1区2区3区| 亚洲精品视频一区| 亚洲精品免费看| 欧美色123| 午夜久久久久| 新片速递亚洲合集欧美合集| 国产欧美日韩亚洲一区二区三区| 欧美中文字幕在线| 久久久久九九视频| 亚洲精品国产无天堂网2021| 亚洲人成在线影院| 国产精品老牛| 久久深夜福利免费观看| 六月婷婷久久| 一本在线高清不卡dvd| 一本久道久久久| 国产欧美日韩精品一区| 久久这里只精品最新地址| 亚洲精品一区中文| 国产亚洲成精品久久| 99riav1国产精品视频| 亚洲少妇最新在线视频| 亚洲乱码国产乱码精品精| 亚洲人体1000| 亚洲国产片色| 欧美精品成人91久久久久久久| 日韩视频中午一区| 亚洲国产影院| 亚洲国产成人在线| 亚洲第一级黄色片| 欧美丰满高潮xxxx喷水动漫| 亚洲国产高潮在线观看| 欧美一区成人| 久久国产欧美日韩精品| 久久精品99国产精品日本| 午夜精品久久久久久99热| 国产一区视频在线看| 国产午夜亚洲精品理论片色戒| 国产亚洲成av人片在线观看桃| 欧美刺激午夜性久久久久久久| 欧美日韩精品福利| 久久精品夜色噜噜亚洲aⅴ| 理论片一区二区在线| 午夜精品久久一牛影视| 麻豆av一区二区三区久久| 亚洲一区二区在线播放| 久久九九久精品国产免费直播| 亚洲精品网址在线观看| 午夜日韩av| 亚洲视频一区二区在线观看| 久久看片网站| 久久久久久**毛片大全| 国产精品久久久久久久久婷婷| 欧美激情精品久久久久久久变态| 国产精品久久久久久久久久直播| 欧美国产一区二区| 国产夜色精品一区二区av| 一区二区三区 在线观看视| 亚洲精品日产精品乱码不卡| 久久av一区| 久久九九精品| 国产视频久久网| 亚洲欧美另类中文字幕| 亚洲欧美日韩一区| 欧美日韩亚洲一区二区三区四区| 亚洲高清一二三区| 影音先锋成人资源站| 久久成人一区| 久久婷婷综合激情| 国产亚洲精品久久久| 国产精品久久久久久妇女6080| 亚洲天堂成人| 亚洲婷婷国产精品电影人久久| 亚洲在线观看免费| 老牛影视一区二区三区| 欧美深夜影院| 亚洲裸体俱乐部裸体舞表演av| 午夜精品亚洲| 亚洲精品美女在线观看播放| 亚洲在线国产日韩欧美| 欧美成人自拍| 精品电影在线观看| 欧美在线一二三四区| 9色精品在线| 欧美国产高潮xxxx1819| 国产午夜精品在线| 欧美中文在线视频| 久久av一区二区三区| 久久精品99无色码中文字幕| 欧美激情 亚洲a∨综合| 欧美一区亚洲二区| 久久婷婷国产麻豆91天堂| 狠狠入ady亚洲精品经典电影| 久久久精品一区| 欧美顶级艳妇交换群宴| 日韩视频中文| 国产精品久久久久久久9999| 亚洲欧美日韩久久精品| 美女精品视频一区| 99国产精品国产精品久久| 欧美色欧美亚洲另类七区| 午夜精品久久久久久久| 免费在线观看成人av| 一区二区三区三区在线| 国产亚洲精品aa午夜观看| 久热精品视频在线观看| 99视频热这里只有精品免费| 久久电影一区| 亚洲精品午夜| 国产网站欧美日韩免费精品在线观看| 久久男女视频| 亚洲少妇一区| 亚洲二区免费| 欧美一区二区三区四区在线观看| 在线精品观看| 国产精品成人一区二区三区夜夜夜| 久久成人免费网| 一个色综合av| 亚洲风情亚aⅴ在线发布| 亚洲欧美在线视频观看| 亚洲激情一区二区三区| 国产午夜精品全部视频播放| 欧美美女日韩| 猛干欧美女孩| 久久精品视频免费观看| 亚洲素人在线| 日韩亚洲一区在线播放| 一区二区三区精品视频| 99精品欧美一区二区三区| 国产精品a级| 免费成人性网站| 亚洲女与黑人做爰| 99精品黄色片免费大全| 亚洲国产精品ⅴa在线观看| 久久人体大胆视频| 久久成人一区二区| 午夜在线精品偷拍| 亚洲一区美女视频在线观看免费|