• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      張協(xié)崇

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

      0 引言

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

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

      1 MicroStation的XAttribute技術(shù)

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

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

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

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

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

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

      圖1 ECXAttribute示例

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

      基于以上特點,設(shè)定工程對象的存儲方式如下:

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

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

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

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

      圖2 自定義ECXAttribute示例

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

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

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

      在基類TSYLJRoot定義了4個虛函數(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個函數(shù)是將類中的各種數(shù)據(jù)通過字符串流wostringstream、wistringstream進行讀寫,各派生類需要重載該函數(shù):先調(diào)用基類的函數(shù)讀寫基類數(shù)據(jù),再補充自身讀寫的數(shù)據(jù)。

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

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

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

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

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

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

      4 分散存儲與按需讀取

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

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

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

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

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

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

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

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

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

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

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

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

      5 結(jié)束語

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

      猜你喜歡
      基類構(gòu)件邊坡
      這邊山 那邊坡
      基于C#面向?qū)ο蟪绦蛟O(shè)計的封裝、繼承和多態(tài)分析
      建筑構(gòu)件
      建筑構(gòu)件
      建筑構(gòu)件
      建筑構(gòu)件
      水利水電工程高邊坡的治理與加固探討
      空戰(zhàn)游戲設(shè)計實例
      基于SLOPE/W的邊坡穩(wěn)定分析
      基于不同軟件對高邊坡穩(wěn)定計算
      岳阳县| 海门市| 株洲市| 灵台县| 汾西县| 深泽县| 凌源市| 台东市| 三穗县| 郯城县| 沈丘县| 隆化县| 甘南县| 靖边县| 金华市| 黎城县| 芜湖县| 黑龙江省| 托克托县| 汉寿县| 尤溪县| 客服| 阿拉善左旗| 讷河市| 客服| 墨江| 阳山县| 西盟| 关岭| 深水埗区| 田阳县| 沈阳市| 招远市| 泰州市| 英吉沙县| 玛多县| 堆龙德庆县| 龙门县| 崇信县| 安庆市| 河北区|