国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于MicroStation的工程措施實(shí)體定義及管理方法

2022-01-21 03:54張協(xié)崇
鐵路技術(shù)創(chuàng)新 2021年5期
關(guān)鍵詞:邊坡構(gòu)件定義

張協(xié)崇

(中鐵第四勘察設(shè)計(jì)集團(tuán)有限公司 地質(zhì)路基設(shè)計(jì)研究院,湖北 武漢 430063)

0 引言

隨著BIM技術(shù)的迅速發(fā)展[1-5],各行業(yè)對(duì)正向設(shè)計(jì)提出了迫切需求,為此各大設(shè)計(jì)院投入大量人力、物力資源研發(fā)BIM軟件[6-8]。MicroStation是一款優(yōu)秀的圖形軟件,具備強(qiáng)大的幾何繪圖、建模功能[9],但是它本身僅有線、面、體等純幾何對(duì)象,沒(méi)有鐵路線路、路基邊坡、路基支擋、地基處理、橋梁、隧道等工程及措施對(duì)象。在MicroStation上開(kāi)發(fā)BIM設(shè)計(jì)軟件,需開(kāi)發(fā)出一系列具備鐵路專業(yè)屬性、行為特征和工程關(guān)系的措施實(shí)體對(duì)象,進(jìn)行有機(jī)整合,形成一套具備BIM正向設(shè)計(jì)功能的系統(tǒng)。那么如何滿足該需求,就需要探索出一種方法,能基于MicroStation定義工程措施實(shí)體并進(jìn)行組織管理。

經(jīng)研究提出一種基于MicroStation的工程措施實(shí)體定義及管理方法:設(shè)計(jì)數(shù)據(jù)版本兼容模式,通過(guò)字符流轉(zhuǎn)換讀寫XAttribute與ECXAttribute(擴(kuò)展屬性與EC擴(kuò)展屬性),將工程措施的屬性與關(guān)系,存儲(chǔ)于Micro-Station元素,形成工程措施實(shí)體,結(jié)合分散存儲(chǔ)與按需讀取的方式,融入專業(yè)行為的算法,科學(xué)、靈活地管理工程措施實(shí)體,形成一套系統(tǒng)的具備工程屬性和行為特征的BIM模型。

1 MicroStation的XAttribute技術(shù)

XAttribute是MicroStation中最底層的一項(xiàng)技術(shù),稱為擴(kuò)展屬性,可通過(guò)MDL方式開(kāi)發(fā)[8]。其存儲(chǔ)于元素(Element)之上、非元素之內(nèi)。且XAttribute并非元素?cái)?shù)據(jù)的一部分,而是關(guān)聯(lián)于該元素。相對(duì)的,data linkage則是元素?cái)?shù)據(jù)的一部分。XAttribute與ECXAttribute具備以下特點(diǎn):

(1)通過(guò)SDK的函數(shù):StatusInt EditElement Handle::ScheduleWriteXAttribute(XAttributeHandlerIdCR h,UInt32 xAttrId,size_t dataSize,void const*data)存儲(chǔ)。

(2)每個(gè)XAttribute數(shù)據(jù)的大小不能超過(guò)100 000個(gè)字節(jié),即(1)中的data不能超過(guò)100 000個(gè)字節(jié),否則會(huì)導(dǎo)致程序崩潰。

(3)1個(gè)元素上可以存儲(chǔ)任意多個(gè)XAttribute。

(4)XAttribute的身份碼,通過(guò)XAttributeHandlerId與XAttributeID確定唯一性,XAttributeHandlerId又由MajorID、MinorID兩個(gè)合成。常規(guī)運(yùn)用方法是:1個(gè)軟件對(duì)應(yīng)1個(gè)XAttributeHandlerId,XAttributeID作為同一個(gè)軟件內(nèi)部區(qū)分不同用途的XAttribute。

(5)ECXAttribute作為一種公開(kāi)的XAttribute,由MicroStation平臺(tái)提供的一套較復(fù)雜的機(jī)制去定義與讀寫[10],可以被Bentley公司的各款軟件識(shí)別。ECXAttribute會(huì)在MicroStation原生的屬性界面中展示,比如元素或文件上的General、Geometry、Extended、Locks、Grid等屬性均為ECXAttribute,其展示示例見(jiàn)圖1。ECXAttribute的ID號(hào)固定為XAttributeHandlerId(22271,0),在讀寫其他XAttribute時(shí),需注意不能占用該ID號(hào)。

圖1 ECXAttribute示例

(6)其他XAttribute僅是一串二進(jìn)制數(shù)據(jù),二次開(kāi)發(fā)中讀寫起來(lái)比ECXAttribute簡(jiǎn)易很多;但若無(wú)二次開(kāi)發(fā)的源程序,則無(wú)法解析其數(shù)據(jù)結(jié)構(gòu)。

基于以上特點(diǎn),設(shè)定工程對(duì)象的存儲(chǔ)方式如下:

(1)軟件中所有需要存儲(chǔ)的數(shù)據(jù),包括一些過(guò)程數(shù)據(jù),轉(zhuǎn)換成void const*data存于XAttribute中,而要公開(kāi)的屬性數(shù)據(jù),相對(duì)于前者要少很多,則寫于ECXAttribute中。

(2)當(dāng)某個(gè)數(shù)據(jù)特別大,超過(guò)100 000個(gè)字節(jié)的限制時(shí),可分解成多個(gè)XAttribute,存儲(chǔ)于一串連續(xù)的XAttributeID中。

(3)定義所有類共同的屬性集TSYID,做成ECXAttribute,定義屬性集ECClass TSYID代碼如下:

其中,以關(guān)鍵字“Name”命名的屬性值,附在Micro-Station元素時(shí),該元素將顯示成“Name”所賦予的名稱,示例見(jiàn)圖2,圖中2個(gè)“Name”屬性值分別賦值為“左側(cè)溝平臺(tái)”“路塹擋墻A”。

圖2 自定義ECXAttribute示例

2 字符流讀寫數(shù)據(jù)

類對(duì)象的基礎(chǔ)數(shù)據(jù)由int、double、wstring等類型組成,為方便讀寫,該方法采用了字符串流來(lái)讀寫數(shù)據(jù),并轉(zhuǎn)換成字符串,再將其以二進(jìn)制數(shù)據(jù)形式存儲(chǔ)于XAttribute,具體實(shí)施方法見(jiàn)圖3。

圖3 字符串流讀寫XAttribute的流程

在基類TSYLJRoot定義了4個(gè)虛函數(shù):

virtual void write Out Stream(wostringstream&out);

virtual int read In Stream(wistringstream&in);

virtual wstring write WStr();

virtual int read WStr(wstring ws);

前2個(gè)函數(shù)是將類中的各種數(shù)據(jù)通過(guò)字符串流wostringstream、wistringstream進(jìn)行讀寫,各派生類需要重載該函數(shù):先調(diào)用基類的函數(shù)讀寫基類數(shù)據(jù),再補(bǔ)充自身讀寫的數(shù)據(jù)。

后2個(gè)函數(shù)則是將字符串流wostringstream、wistringstream與字符串進(jìn)行轉(zhuǎn)換,一般不重載,只在某些讀寫精度有變化時(shí)需要重載。

3 數(shù)據(jù)版本兼容

軟件在使用過(guò)程中需要不斷地開(kāi)發(fā)升級(jí),必定涉及類的數(shù)據(jù)結(jié)構(gòu)的調(diào)整變化。當(dāng)軟件版本持續(xù)升級(jí)時(shí),也需要讀寫不同版本的數(shù)據(jù),可采用以下方法:

(1)每個(gè)類,包括各層級(jí)的基類、派生類,都設(shè)定自身的版本號(hào)。

(2)writeOutStream中存儲(chǔ)數(shù)據(jù):調(diào)用基類write-OutStream>>存儲(chǔ)自身最新的版本號(hào)>>存儲(chǔ)自身數(shù)據(jù)。以CptSection為例,其代碼如下:

(3)readInStream中讀取數(shù)據(jù):調(diào)用基類readIn-Stream>>讀取該數(shù)據(jù)的版本號(hào)>>按版本號(hào)讀取自身數(shù)據(jù)。以CptSection為例,其代碼如下:

4 分散存儲(chǔ)與按需讀取

1個(gè)工程設(shè)計(jì)單元包含眾多繁雜的工程措施對(duì)象,相互間有包含與被包含的關(guān)系,且層次結(jié)構(gòu)復(fù)雜。若將1個(gè)設(shè)計(jì)單元的數(shù)據(jù)全部存儲(chǔ)于一處,則數(shù)據(jù)量過(guò)于龐大,該軟件以面向?qū)ο笏枷耄瑢⒏鞴こ檀胧┑膶傩詳?shù)據(jù)及其對(duì)象關(guān)系,分散存儲(chǔ)于各自的措施對(duì)象。在進(jìn)行設(shè)計(jì)時(shí),再按不同的行為需求,從某個(gè)工程措施開(kāi)始,溯源讀取所使用到的各個(gè)關(guān)聯(lián)措施的數(shù)據(jù),組成一套有機(jī)整體,完成設(shè)計(jì)行為,步驟如下:

(1)1個(gè)dgn文件包含多個(gè)模型空間(dgnModel),1個(gè)模型空間又包含眾多元素。所有工程措施對(duì)象都是1個(gè)元素,那么1個(gè)dgn文件中的1個(gè)工程措施對(duì)象的唯一身份碼,由ModelId與ElementId組成,故定義ModelElementID作為工程措施對(duì)象在MicroStation中的唯一身份碼,其代碼如下:

(2)擴(kuò)展屬性中存儲(chǔ)工程關(guān)系,也就是存儲(chǔ)相關(guān)對(duì)象的ModelElementID,以邊坡面對(duì)象為例,其包含關(guān)系見(jiàn)圖4。

圖4 邊坡面包含關(guān)系

以邊坡面與邊坡防護(hù)為例,邊坡面有父部件LjSlopeCpt和一系列邊坡防護(hù)子對(duì)象2類關(guān)系,父部件ID定義于基類LJSideCpt的ModelElementID sideId,子對(duì)象ID定義于vectorChdSPCIdAr,相關(guān)代碼如下:

邊坡防護(hù)LjSlopeProtectCpt有父構(gòu)件和一系列的子構(gòu)件2類關(guān)系,父構(gòu)件ID定義于ModelElementID parId,子構(gòu)件定義于vectorChdIdAr,相關(guān)代碼如下:

(3)擴(kuò)展屬性中存儲(chǔ)關(guān)系與自身數(shù)據(jù),但是并不存儲(chǔ)子對(duì)象的數(shù)據(jù),到執(zhí)行用戶行為時(shí),再根據(jù)需要讀取分散的子對(duì)象數(shù)據(jù)。

仍以邊坡面LjSlopeCpt為例說(shuō)明,LjSlopeCpt類中定義了子對(duì)象邊坡防護(hù)指針vectorChdSPCAr,但是子對(duì)象數(shù)據(jù)并不存儲(chǔ)于邊坡面的擴(kuò)展屬性中,而是存儲(chǔ)于邊坡防護(hù)對(duì)象的擴(kuò)展屬性中。

在設(shè)計(jì)邊坡面時(shí),點(diǎn)擊邊坡面后,讀取數(shù)據(jù)流程見(jiàn)圖5:①先讀取邊坡面LjSlopeCpt擴(kuò)展數(shù)據(jù);②通過(guò)LjSlopeCpt.ChdSPCIdAr找到所含子對(duì)象邊坡防護(hù)LjSlopeProtectCpt,再將分散在對(duì)子象中存儲(chǔ)的數(shù)據(jù)讀取出來(lái);③在有需要時(shí),通過(guò)LjSlopeProtectCpt中的ChdI-dAr,進(jìn)一步讀取邊坡防護(hù)子構(gòu)件(踏步、吊溝等)的數(shù)據(jù);④通過(guò)sideId讀取父部件數(shù)據(jù),再根據(jù)需要讀取父部件的其他子構(gòu)件數(shù)據(jù);⑤將這些讀取的數(shù)據(jù)構(gòu)成有機(jī)的整體開(kāi)展設(shè)計(jì)行為。

圖5 由邊坡面讀取數(shù)據(jù)

在設(shè)計(jì)邊坡防護(hù)時(shí),點(diǎn)擊邊坡防護(hù)后,讀取數(shù)據(jù)流程見(jiàn)圖6:①先讀取邊坡防護(hù)LjSlopeProtectCpt擴(kuò)展數(shù)據(jù);②通過(guò)LjSlopeProtectCpt.ChdIdAr讀取邊坡防護(hù)子構(gòu)件(踏步、吊溝等)的數(shù)據(jù);③通過(guò)LjSlopeProtectCpt.parId讀取父構(gòu)件邊坡面的數(shù)據(jù);④在有需要時(shí),讀取父構(gòu)件邊坡面的父部件數(shù)據(jù),再根據(jù)需要讀取父部件的其他子構(gòu)件數(shù)據(jù);⑤將這些讀取的數(shù)據(jù)構(gòu)成有機(jī)的整體開(kāi)展設(shè)計(jì)行為。

圖6 由邊坡防護(hù)讀取數(shù)據(jù)

5 結(jié)束語(yǔ)

MicroStation是款優(yōu)秀的圖形軟件,但并不具備工程專業(yè)特性,因此,提出一種基于MicroStation的工程措施實(shí)體定義及管理方法,可開(kāi)發(fā)出一系列具備鐵路專業(yè)屬性、行為特征和工程關(guān)系的措施實(shí)體對(duì)象,進(jìn)行有機(jī)整合,形成一套具備BIM正向設(shè)計(jì)功能的系統(tǒng),可讓工程師只需專注于專業(yè)本身,降低BIM學(xué)習(xí)成本,提高BIM設(shè)計(jì)的質(zhì)量與效率。

猜你喜歡
邊坡構(gòu)件定義
鋼筋混凝土構(gòu)件裂縫控制
建筑施工中的邊坡支護(hù)技術(shù)探析
陡幫強(qiáng)化開(kāi)采邊坡立體式在線監(jiān)測(cè)技術(shù)研究
邊坡控制爆破施工
BIM模型相連構(gòu)件獲取方法
二維極限平衡法在高邊坡工程中的應(yīng)用研究
基于構(gòu)件的軟件工程技術(shù)與理論方法探討
成功的定義
修辭學(xué)的重大定義
山的定義
海盐县| 海城市| 醴陵市| 平乐县| 柘荣县| 察雅县| 呼伦贝尔市| 中宁县| 兴城市| 上蔡县| 长沙县| 云安县| 织金县| 武定县| 革吉县| 万盛区| 蓬溪县| 三门峡市| 永寿县| 潜江市| 额济纳旗| 四平市| 永靖县| 宣城市| 麦盖提县| 旺苍县| 宝清县| 镇巴县| 永泰县| 仁布县| 阜新市| 四会市| 阿瓦提县| 龙门县| 敦煌市| 淳安县| 南阳市| 雅安市| 贞丰县| 德阳市| 庆元县|