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

?

基于Revit模型與清單映射的二次開發(fā)研究

2022-01-19 12:00:02張瑞強(qiáng)
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)工程量編碼

李 潔,王 亮,張瑞強(qiáng)

(北京建筑大學(xué) 土木與交通工程學(xué)院, 北京 100044)

1 研究背景

建筑信息模型(Building Information Modeling,BIM)的概念最早由EASTMAN等在19世紀(jì)70年代提出[1],此后在土木建筑領(lǐng)域被大范圍推廣,推動(dòng)著整個(gè)領(lǐng)域的信息化發(fā)展[2]。BIM作為一種新的理念和技術(shù),是建筑物理和性能特征的信息表達(dá),是一種可分享的信息資源,是一種可分享建筑信息的過程。Revit系列軟件是BIM技術(shù)的核心建模工具,是實(shí)現(xiàn)BIM技術(shù)的主要工具。它克服了利用CAD軟件設(shè)計(jì)不能實(shí)現(xiàn)模型設(shè)計(jì)聯(lián)動(dòng)變更、所見不為所得、全壽命周期參數(shù)不能實(shí)現(xiàn)數(shù)據(jù)交換等缺點(diǎn)[3]。通過Revit軟件能在設(shè)計(jì)過程中實(shí)現(xiàn)對設(shè)計(jì)關(guān)聯(lián)數(shù)據(jù)的動(dòng)態(tài)實(shí)時(shí)共享,為各種專業(yè)的協(xié)同設(shè)計(jì)提供模型應(yīng)用支撐[4]。建筑工程造價(jià)管理存在于工程概念設(shè)計(jì)到運(yùn)維的項(xiàng)目全壽命周期,是建筑工程管理貫穿全過程的工作,而工程計(jì)量則是工程造價(jià)中最重要的環(huán)節(jié),在項(xiàng)目建設(shè)的前期,因各專業(yè)結(jié)構(gòu)碰撞、計(jì)劃調(diào)整等因素,隨時(shí)會(huì)發(fā)生設(shè)計(jì)變更,進(jìn)而導(dǎo)致工程量發(fā)生變化,施工過程中項(xiàng)目階段式工程量統(tǒng)計(jì)、工程造價(jià)動(dòng)態(tài)管理都需要準(zhǔn)確及時(shí)的工程計(jì)量。BIM是實(shí)現(xiàn)工程項(xiàng)目建設(shè)信息化和工程算量精細(xì)化管理的重要基礎(chǔ),將GB 50500—2019《建設(shè)工程工程量清單計(jì)價(jià)規(guī)范》規(guī)定的工程量清單屬性信息和數(shù)據(jù)集成到工程項(xiàng)目BIM模型中,建立一個(gè)基于BIM的工程項(xiàng)目清單算量機(jī)制,可有效提高信息傳遞和分享的效率[5]。

圖1 Revit模型結(jié)構(gòu)圖Fig.1 Revit model structure chart

Revit作為BIM軟件系列最具代表性的一款建模軟件,從國外引進(jìn)到中國,用在統(tǒng)計(jì)工程量方面,勢必會(huì)存在許多差異和問題。國外許多國家,在Revit平臺(tái)內(nèi)按照結(jié)構(gòu)類型為依據(jù),將BIM模型統(tǒng)計(jì)得到的體積、面積或長度數(shù)據(jù)直接作為項(xiàng)目建設(shè)的預(yù)算工程量[6]。目前我國各地清單定額規(guī)定的計(jì)算規(guī)則和標(biāo)準(zhǔn)已經(jīng)很成熟,運(yùn)用Revit軟件直接統(tǒng)計(jì)的工程量顯然不能滿足我國的計(jì)算規(guī)則,若想適用于我國工程量清單計(jì)算,首要工作需要將Revit模型與工程量清單建立一對一映射關(guān)系。目前相關(guān)學(xué)者積極探索基于BIM模型清單映射的方法研究,林韓涵等[7]利用Revit平臺(tái)進(jìn)行插件開發(fā)的方式,實(shí)現(xiàn)模型參數(shù)與清單屬性的數(shù)據(jù)匹配,為模型清單映射關(guān)系的建立提出了指導(dǎo)性方法;景鳳等[8]運(yùn)用模塊化思想,提出了基于BIM的工程量清單與BIM標(biāo)準(zhǔn)可在EBS/WBS上達(dá)成協(xié)同。

本文在以往研究基礎(chǔ)上,利用ODBC開放數(shù)據(jù)庫互聯(lián)原理,基于Revit軟件建立工程量清單與BIM模型的映射關(guān)系,二次開發(fā)插件創(chuàng)建清單XML文件,并將清單屬性寫入模型共享參數(shù),從而使Revit模型具備清單屬性,建立了一個(gè)基于Revit模型的工程項(xiàng)目清單算量機(jī)制。

2 Revit模型與清單映射關(guān)系分析

Revit模型由族組成,承載著項(xiàng)目的各種信息,項(xiàng)目信息由族以參數(shù)的形式承載。無論是柱、梁、板,還是管道、閥門、設(shè)備機(jī)器,都是由不同的族組成,由此可以說,在Revit中,一個(gè)項(xiàng)目是由眾多圖形化族個(gè)體按照一定規(guī)則組成的數(shù)字信息集合體模型,族是項(xiàng)目數(shù)據(jù)信息的容器。項(xiàng)目中每個(gè)分部工程由許多類分項(xiàng)工程組成,即在Revit中每種構(gòu)件按規(guī)格、尺寸和形狀不同具有多種族類別。Revit是創(chuàng)建項(xiàng)目三維信息模型的工具,Revit模型結(jié)構(gòu)組成應(yīng)與項(xiàng)目本身專業(yè)層級(jí)結(jié)構(gòu)劃分相似,只是在平臺(tái)中項(xiàng)目的各項(xiàng)分部分項(xiàng)工程以不同的族類別存在。由此可將模型構(gòu)成劃分為如圖1所示的樹狀層級(jí)結(jié)構(gòu),模型可分為結(jié)構(gòu)、建筑、機(jī)電、暖通等專業(yè),與項(xiàng)目本身一致,各專業(yè)由不同分部分項(xiàng)工程組成。

工程量清單是建設(shè)工程的分部分項(xiàng)工程項(xiàng)目、措施項(xiàng)目、規(guī)費(fèi)項(xiàng)目、稅金項(xiàng)目和其他項(xiàng)目的名稱和相應(yīng)數(shù)量等的明細(xì)清單。根據(jù)GB 50500—2019《建設(shè)工程工程量清單計(jì)價(jià)規(guī)范》規(guī)定的分部分項(xiàng)工程工程量清單中各專業(yè)工程量清單具有5級(jí)層級(jí)結(jié)構(gòu),分別是工程分類、附錄分類、分部工程、分項(xiàng)工程、清單子目,層級(jí)結(jié)構(gòu)如圖2所示。工程量清單層次分類依據(jù)項(xiàng)目中建筑功能化層級(jí)結(jié)構(gòu),以此依據(jù)對清單子目進(jìn)行項(xiàng)目編碼,類似工程量清單分類依據(jù),在清單項(xiàng)目中進(jìn)行項(xiàng)目編碼。以矩形柱的項(xiàng)目編碼“010502001001”為例,“01”表示房屋建筑與裝飾工程分類順序碼,“05”表示混凝土及鋼筋工程附錄分類順序碼,“02”表示現(xiàn)澆混凝土柱分部工程分類順序碼,“001”表示矩形柱分項(xiàng)工程分類順序碼,“001”表示矩形柱清單子目項(xiàng)目順序碼[9]。

圖2 工程量清單結(jié)構(gòu)圖Fig.2 Bill of quantities structure chart

分別對Revit模型和工程量清單層級(jí)結(jié)構(gòu)進(jìn)行分析之后,不難發(fā)現(xiàn)兩者之間具有許多相似之處,因兩者均是圍繞項(xiàng)目展開,在同一個(gè)項(xiàng)目中所具備的層級(jí)結(jié)構(gòu)種類和數(shù)量相同,只是分類方式和分類名稱不盡相同,但兩者層級(jí)結(jié)構(gòu)均與項(xiàng)目本身一致,是樹狀結(jié)構(gòu),且個(gè)別相同層級(jí)之間結(jié)構(gòu)組成元素相同,依據(jù)統(tǒng)一項(xiàng)目相同元素分類劃分規(guī)則,結(jié)合兩者層級(jí)結(jié)構(gòu)相似之處,將相同結(jié)構(gòu)對應(yīng)層級(jí)進(jìn)行映射匹配,可對Revit模型與工程量清單建立層級(jí)結(jié)構(gòu)一對一映射關(guān)系,映射關(guān)系如圖3所示。

3 Revit模型清單映射

3.1 Revit模型清單映射插件設(shè)計(jì)思路

通常情況下,Revit模型不含有清單屬性(項(xiàng)目編碼、項(xiàng)目特征參數(shù)值),通過手動(dòng)添加共享參數(shù)的形式較煩瑣,因此基于此問題研究二次開發(fā)插件,為模型批量創(chuàng)建清單屬性參數(shù),建立由Revit模型直接導(dǎo)出清單工程量數(shù)據(jù)表的橋梁。

在Revit模型和清單映射射過程中,以XML樹數(shù)據(jù)結(jié)構(gòu)為橋梁,依據(jù)模型與清單層級(jí)結(jié)構(gòu)的映射關(guān)系,通過定義XML數(shù)據(jù)結(jié)構(gòu)基類,創(chuàng)建清單節(jié)點(diǎn)內(nèi)容,利用XML結(jié)構(gòu)獨(dú)立存儲(chǔ)清單數(shù)據(jù),實(shí)現(xiàn)清單數(shù)據(jù)與Revit模型的交互。Revit模型與清單數(shù)據(jù)映射插件設(shè)計(jì)思路如圖4所示,創(chuàng)建XML格式清單文件后,通過定義讀取XML文件工具對清單文件進(jìn)行界面交互讀取,定義數(shù)據(jù)轉(zhuǎn)換工具實(shí)現(xiàn)輸入清單子目數(shù)據(jù)轉(zhuǎn)換為XML數(shù)據(jù)格式,定義XML清單導(dǎo)出工具將編譯完成的XML清單文件進(jìn)行XML格式文件的導(dǎo)出,最后將XML文件的清單信息寫入模型的共享參數(shù),完成Revit模型與清單的映射。

3.2 Revit模型清單映射插件設(shè)計(jì)

3.2.1 XML清單文件創(chuàng)建

基于XML文檔模式尤其適用于與第三方交換信息的特點(diǎn),以XML數(shù)據(jù)結(jié)構(gòu)為橋梁完成模型與清單數(shù)據(jù)交互,將清單數(shù)據(jù)以XML數(shù)據(jù)結(jié)構(gòu)形式存儲(chǔ),并形成XML清單文件,為清單數(shù)據(jù)傳輸進(jìn)入Revit平臺(tái)奠定基礎(chǔ)。

3.2.1.1 定義XML清單樹形數(shù)據(jù)結(jié)構(gòu)

首先定義XML樹形數(shù)據(jù)結(jié)構(gòu)基類BaseModel,用于擴(kuò)展數(shù)據(jù)內(nèi)容,基類的使用有2個(gè)方面作用:一方面,減少代碼的冗余量,通過對基類的繼承重構(gòu)相應(yīng)功能,實(shí)現(xiàn)XML節(jié)點(diǎn)的創(chuàng)建,可以有效提高清單文件編碼速度和質(zhì)量;另一方面,利用關(guān)聯(lián)數(shù)據(jù)庫支持XML清單數(shù)據(jù)節(jié)點(diǎn)的編輯,實(shí)現(xiàn)對XML清單數(shù)據(jù)節(jié)點(diǎn)的插入、刪除、修改功能。創(chuàng)建BaseModel基類并實(shí)現(xiàn)INotifyPropertyChanged接口方法,實(shí)現(xiàn)清單數(shù)據(jù)被修改后,與控件頁面顯示同步。

圖3 Revit模型清單映射關(guān)系圖Fig.3 Mapping relationships of Revit model and bill

圖4 Revit模型與清單映射插件開發(fā)技術(shù)路線Fig.4 Technical route of Revit model and bill mapping plug-in development

XML數(shù)據(jù)結(jié)構(gòu)基類定義完成后,結(jié)合模型與清單融合結(jié)構(gòu)的特點(diǎn),需要對XML數(shù)據(jù)結(jié)構(gòu)進(jìn)行定義,引用類ITreeNodeModel樹形數(shù)據(jù)的接口,用來統(tǒng)一樹形數(shù)據(jù)的基本結(jié)構(gòu),并依據(jù)清單模型映射關(guān)系定義XML清單文件根節(jié)點(diǎn)(root)、父節(jié)點(diǎn)(parent)、子節(jié)點(diǎn)(children)數(shù)據(jù)類型和數(shù)據(jù)名稱。清單樹結(jié)構(gòu)如圖5所示,所形成的XML清單數(shù)據(jù)結(jié)構(gòu)如圖6所示。定義公有根節(jié)點(diǎn)、父節(jié)點(diǎn)、子節(jié)點(diǎn)變量,并用{get;set;}方法對變量進(jìn)行屬性賦值。

圖5 XML清單文檔樹Fig.5 XML bill document tree

圖6 XML清單數(shù)據(jù)結(jié)構(gòu)Fig.6 XML bill data structure

3.2.1.2 定義XML節(jié)點(diǎn)數(shù)據(jù)內(nèi)容

通過XML為橋梁搭建好清單文件數(shù)據(jù)結(jié)構(gòu),需要為節(jié)點(diǎn)定義數(shù)據(jù)內(nèi)容,依據(jù)清單規(guī)范規(guī)定,清單文件包括項(xiàng)目編碼、項(xiàng)目名稱、項(xiàng)目特征、計(jì)量單位、工程量5項(xiàng)數(shù)據(jù)列。為了滿足Revit軟件直接輸出清單規(guī)范格式的清單工程量,Revit模型參數(shù)內(nèi)容中可獲取項(xiàng)目名稱、計(jì)量單位、工程量3項(xiàng)數(shù)據(jù)內(nèi)容,而項(xiàng)目編碼和項(xiàng)目特征是相比兩者之間清單中獨(dú)有的數(shù)據(jù)屬性。因此需要在創(chuàng)建XML清單文件時(shí),使用XML樹結(jié)構(gòu)承載清單獨(dú)有的數(shù)據(jù)內(nèi)容。在定義好的XML清單文件數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,為節(jié)點(diǎn)增設(shè)項(xiàng)目編碼和項(xiàng)目特征2項(xiàng)數(shù)據(jù)屬性。為項(xiàng)目編碼和項(xiàng)目特征分別定義一個(gè)私有變量,并定義公用屬性,即定義為公有變量,在{get;set;}方法中進(jìn)行取值和賦值。這樣在對屬性進(jìn)行賦值時(shí),會(huì)自動(dòng)調(diào)用set方法,在對屬性進(jìn)行取值時(shí),自動(dòng)調(diào)用get方法。結(jié)合2項(xiàng)屬性的基本特征,項(xiàng)目特征由描述性文字組成,無其他特殊要求;項(xiàng)目編碼由數(shù)字組成且項(xiàng)目編碼不可重復(fù),需要編譯程序?qū)斎氲捻?xiàng)目編碼進(jìn)行檢驗(yàn),保證編碼的唯一性。定義私有bool變量,通過對已經(jīng)存在的項(xiàng)目編碼與最近一次輸入的項(xiàng)目編碼進(jìn)行比對,若新輸入的代碼與現(xiàn)存所有代碼存在重復(fù)則返回“true”值,頁面顯示“您輸入的代碼已經(jīng)存在”,反之則新輸入代碼沒有重復(fù)項(xiàng),程序返回“false”值,新的項(xiàng)目編碼鍵入成功。判斷新鍵入項(xiàng)目編碼是否存在的邏輯路線如圖7所示。

圖7 保證項(xiàng)目編碼唯一性邏輯路線Fig.7 Logical route of ensure the item code uniqueness

3.2.1.3 定義讀取XML數(shù)據(jù)工具

清單文件結(jié)構(gòu)及節(jié)點(diǎn)數(shù)據(jù)內(nèi)容定義完成后,對清單文件數(shù)據(jù)結(jié)構(gòu)進(jìn)行讀取,并對清單文件進(jìn)行編輯,增加、修改、刪除清單子目,輸入清單屬性信息。讀取XML數(shù)據(jù)結(jié)構(gòu)時(shí)用XML Reader方法,通過配置XML文件路徑,選擇需要讀取的XML文件,獲取XML所有節(jié)點(diǎn)集合,進(jìn)而通過foreach語句遍歷所有節(jié)點(diǎn),分別獲取XML文件根節(jié)點(diǎn)和所有清單的子節(jié)點(diǎn),將清單子節(jié)點(diǎn)按照單個(gè)子節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)追加在根節(jié)點(diǎn)下,并在讀取每個(gè)節(jié)點(diǎn)時(shí)對應(yīng)獲取該節(jié)點(diǎn)的信息(節(jié)點(diǎn)的名稱、屬性),最后將XML節(jié)點(diǎn)數(shù)據(jù)按節(jié)點(diǎn)類型轉(zhuǎn)換為實(shí)體數(shù)據(jù)完成XML清單的讀取。通過XML文檔對象模型(DOM)編輯和修改XML文件,DOM是一個(gè)非常直觀的處理XML文件類的方法。XMLDocument類位于System.Xml名稱空間中,使用DOM時(shí),在代碼開頭using部分插入“using System.Xml;”語句即可。用戶對清單文件增加、修改、刪除清單信息操作在程序中相當(dāng)于對XML節(jié)點(diǎn)的創(chuàng)建、插入、刪除、選擇節(jié)點(diǎn)編輯,進(jìn)而輸入清單文件數(shù)據(jù)內(nèi)容。

基于XMLDocument類編輯的方法,展開對清單文件節(jié)點(diǎn)結(jié)構(gòu)編輯的代碼設(shè)計(jì),編譯對清單樹利用AppendChild方法創(chuàng)建子節(jié)點(diǎn),進(jìn)行增加子節(jié)點(diǎn)時(shí),為保證選擇節(jié)點(diǎn)不為空(null),根據(jù)選擇節(jié)點(diǎn)的類型,利用If-else結(jié)構(gòu)判斷分支語句決定操作對象的層級(jí)結(jié)構(gòu),即:若選擇節(jié)點(diǎn)為父節(jié)點(diǎn),則增加節(jié)點(diǎn)為選擇節(jié)點(diǎn)的子節(jié)點(diǎn);若選擇節(jié)點(diǎn)為子節(jié)點(diǎn),則更新選擇節(jié)點(diǎn)類型為父節(jié)點(diǎn),增加節(jié)點(diǎn)為選擇節(jié)點(diǎn)的子節(jié)點(diǎn)。始終保證增加節(jié)點(diǎn)為選擇節(jié)點(diǎn)的子節(jié)點(diǎn),增加節(jié)點(diǎn)邏輯路線如圖8所示。刪除節(jié)點(diǎn)時(shí),原理同增加節(jié)點(diǎn)類似,用戶設(shè)置一個(gè)選擇節(jié)點(diǎn),使用if語句判定選擇節(jié)點(diǎn)類型,決定刪除節(jié)點(diǎn)數(shù)據(jù):若選擇節(jié)點(diǎn)為子節(jié)點(diǎn),僅刪除該節(jié)點(diǎn)數(shù)據(jù);若選擇節(jié)點(diǎn)為父節(jié)點(diǎn),需刪除該父節(jié)點(diǎn)及其所有子節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)。

圖8 清單樹增加節(jié)點(diǎn)邏輯路線Fig.8 Logical route of bill tree added node

3.2.2 清單XML數(shù)據(jù)轉(zhuǎn)換

3.2.2.1 清單數(shù)據(jù)構(gòu)造XML結(jié)構(gòu)樹節(jié)點(diǎn)

清單文件層級(jí)結(jié)構(gòu)創(chuàng)建完成后,根據(jù)項(xiàng)目結(jié)構(gòu)類型,需要對清單文件進(jìn)行針對性清單子目編輯,新編輯輸入的數(shù)據(jù)需要為其構(gòu)造XML結(jié)構(gòu)樹節(jié)點(diǎn)。在插件交互界面(圖9)導(dǎo)入XML模板清單文件至插件,在交互界面進(jìn)行輸入清單項(xiàng)數(shù)據(jù),在清單項(xiàng)數(shù)據(jù)輸入過程中,交互界面輸入的數(shù)據(jù)需要為其構(gòu)造XML結(jié)構(gòu)樹節(jié)點(diǎn),清單數(shù)據(jù)構(gòu)造XML結(jié)構(gòu)樹節(jié)點(diǎn)的邏輯技術(shù)路線如圖10所示。

圖9 清單XML編輯器交互界面Fig.9 Interactive interface of bill XML editor

為輸入的清單數(shù)據(jù)構(gòu)建XML樹結(jié)構(gòu)節(jié)點(diǎn),首先將清單項(xiàng)集合轉(zhuǎn)為XML的節(jié)點(diǎn),利用foreach語句循環(huán)遍歷ITreeNodeModel集合(即輸入的清單項(xiàng)),判斷清單項(xiàng)是否為QcTreeNodeModel類型,確保清單項(xiàng)為QcTreeNodeModel類型后,把輸入的清單項(xiàng)數(shù)據(jù)轉(zhuǎn)換為XML節(jié)點(diǎn),并將其下的所有子清單項(xiàng)一同轉(zhuǎn)換為對應(yīng)XML節(jié)點(diǎn)下的子節(jié)點(diǎn),即可完成輸入清單項(xiàng)集合轉(zhuǎn)化為相同層級(jí)結(jié)構(gòu)的樹形數(shù)據(jù)結(jié)構(gòu)。構(gòu)造樹形數(shù)據(jù)后,清單項(xiàng)具有了XML的層級(jí)結(jié)構(gòu),利用ConvertToXMLNode方法,將數(shù)據(jù)轉(zhuǎn)換為XML結(jié)構(gòu)數(shù)據(jù)。利用Switch語句分支選擇所有需要保存的數(shù)據(jù),根據(jù)樹形結(jié)構(gòu)節(jié)點(diǎn)類型,將清單項(xiàng)根節(jié)點(diǎn)、組節(jié)點(diǎn)、子節(jié)點(diǎn)類型分別轉(zhuǎn)化為XML結(jié)構(gòu)的根節(jié)點(diǎn)、組節(jié)點(diǎn)和子節(jié)點(diǎn)結(jié)構(gòu),使用SetAttribute方法為其保存節(jié)點(diǎn)屬性(Attribute)包括清單項(xiàng)ID、項(xiàng)目編碼、項(xiàng)目特征等。清單數(shù)據(jù)構(gòu)造XML結(jié)構(gòu)樹節(jié)點(diǎn)的部分代碼如圖11所示。

圖11 清單數(shù)據(jù)構(gòu)造XML清單樹節(jié)點(diǎn)部分代碼Fig.11 Listing data constructs XML list tree nodes part code

3.2.2.2 XML數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為list列表結(jié)構(gòu)

項(xiàng)目清單文件編輯完成后,為后續(xù)將清單數(shù)據(jù)寫入Revit模型參數(shù)中奠定基礎(chǔ),需要再次將XML清單文件數(shù)據(jù)轉(zhuǎn)換為Revit軟件內(nèi)部數(shù)據(jù)進(jìn)行保存。由于Revit軟件內(nèi)不能將XML結(jié)構(gòu)數(shù)據(jù)直接寫入,需要將XML數(shù)據(jù)轉(zhuǎn)換為列表結(jié)構(gòu)數(shù)據(jù)進(jìn)行寫入。需要先將XML數(shù)據(jù)組轉(zhuǎn)換為list數(shù)據(jù)結(jié)構(gòu)組,將XML數(shù)據(jù)組中的子節(jié)點(diǎn)轉(zhuǎn)換為list數(shù)據(jù)項(xiàng),再根據(jù)XML數(shù)據(jù)結(jié)構(gòu)映射為list數(shù)據(jù)結(jié)構(gòu),邏輯路線如圖12所示。

圖12 XML數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換列表結(jié)構(gòu)邏輯路線Fig.12 Logical route of XML data structure transformation list structure

XML數(shù)據(jù)組轉(zhuǎn)換為list數(shù)據(jù)結(jié)構(gòu)組需要定義新的數(shù)據(jù)組List,使用Covert方法進(jìn)行數(shù)據(jù)轉(zhuǎn)換,利用foreach語句循環(huán)遍歷XML數(shù)據(jù)組的數(shù)據(jù),為每個(gè)數(shù)據(jù)進(jìn)行屬性數(shù)據(jù)的轉(zhuǎn)換,若數(shù)據(jù)組有子節(jié)點(diǎn),利用AddRange方法將子節(jié)點(diǎn)數(shù)據(jù)轉(zhuǎn)化為list數(shù)據(jù)項(xiàng)。數(shù)據(jù)組轉(zhuǎn)換完成后,接下來需要將數(shù)據(jù)組中的子節(jié)點(diǎn)轉(zhuǎn)換為list數(shù)據(jù)項(xiàng),與XML數(shù)據(jù)組轉(zhuǎn)換為list數(shù)據(jù)結(jié)構(gòu)組的原理類似,使用Covert方法進(jìn)行數(shù)據(jù)轉(zhuǎn)換,利用foreach語句遍歷XML的所有子節(jié)點(diǎn),分別將子節(jié)點(diǎn)的節(jié)點(diǎn)ID、項(xiàng)目編碼、項(xiàng)目特征等屬性數(shù)據(jù)進(jìn)行轉(zhuǎn)換。數(shù)據(jù)轉(zhuǎn)換完成后,為list數(shù)據(jù)結(jié)構(gòu)根據(jù)XML數(shù)據(jù)組結(jié)構(gòu)映射數(shù)據(jù)樹,利用GenerateCosTree方法,為數(shù)據(jù)生成數(shù)據(jù)樹,因數(shù)據(jù)轉(zhuǎn)換前后ID相同,通過索引數(shù)據(jù)組的ID獲取數(shù)據(jù)組項(xiàng),對獲取的數(shù)據(jù)組遍歷所有子項(xiàng),并為樹形數(shù)據(jù)的父節(jié)點(diǎn)增加子節(jié)點(diǎn),最后去掉已分類完成的子節(jié)點(diǎn),確保節(jié)點(diǎn)的唯一性。XML組轉(zhuǎn)換為list數(shù)據(jù)結(jié)構(gòu)組的部分代碼如圖13所示。

3.2.3 導(dǎo)出XML清單文件

圖13 XML組轉(zhuǎn)換為list數(shù)據(jù)結(jié)構(gòu)組部分代碼Fig.13 XML group converted to list data structure group part code

清單XML基礎(chǔ)結(jié)構(gòu)、節(jié)點(diǎn)屬性定義及清單內(nèi)容編輯完成之后,清單文件已經(jīng)編輯完成,需要構(gòu)建清單文件(xml)導(dǎo)出工具,將清單文件(xml)進(jìn)行保存。首先構(gòu)建清單文件導(dǎo)出工具,主要進(jìn)行定義清單文件(xml)保存路徑(xmlpath)、根節(jié)點(diǎn)(RootNode)及節(jié)點(diǎn)數(shù)組(List)變量。然后創(chuàng)建清單文件(CreateXmlFile):標(biāo)識(shí)XML版本以及編碼方式,選用GB2312為編碼方式(因其支持中文編碼);創(chuàng)建清單文件根節(jié)點(diǎn);在根節(jié)點(diǎn)中寫入插件標(biāo)識(shí),以便表明該XML文件用于清單文件創(chuàng)建,便于后期管理;將清單XML樹形基礎(chǔ)結(jié)構(gòu)的節(jié)點(diǎn)結(jié)構(gòu)加載至文檔中。創(chuàng)建清單文件部分代碼如圖14所示。最后按照文件路徑對清單文件進(jìn)行保存(SaveXmlFile)。

3.2.4 清單數(shù)據(jù)寫入模型共享參數(shù)

Revit平臺(tái)內(nèi)除了有內(nèi)建參數(shù),還允許用戶自定義參數(shù),自定義參數(shù)類型有共享參數(shù)和項(xiàng)目參數(shù)(圖15),由于項(xiàng)目參數(shù)不能通過API創(chuàng)建,清單數(shù)據(jù)寫入模型通過新建共享參數(shù)的方式寫入模型。利用“CreateRevitProperty”方法創(chuàng)建共享參數(shù)組,為模型創(chuàng)建共享參數(shù)并寫入?yún)?shù)內(nèi)容奠定基新建Revit共享參數(shù),新建過程中,首先檢索需要新建的共享參數(shù)是否包含在該共享參數(shù)組中,若存在則直接進(jìn)行插入;若共享參數(shù)組中沒有該共享參數(shù),新建共享參數(shù)并進(jìn)行載入模型族構(gòu)件。Revit新建共享參數(shù)部分代碼如圖16所示。

Revit共享參數(shù)組創(chuàng)建完成后,用戶操作過程中通過Revit平臺(tái)交互選擇模型構(gòu)件,拾取所選定構(gòu)件,通過“IsCosAssigmentElement”方法判斷所選定構(gòu)件是否可以寫入?yún)?shù),若選定族構(gòu)件中包含注釋文字、曲線等非清單子目元素,則不需要寫入清單屬性內(nèi)容。篩選構(gòu)件后,利用CheckCosLookupProperty方法判定構(gòu)件是否有清單屬性(如項(xiàng)目編碼、項(xiàng)目特征)共享參數(shù),使用CreateRevitProperty方法為構(gòu)件創(chuàng)建共享參數(shù)。遍歷要寫入清單屬性的所有模型元素,通過GetCosParameters方法獲取模型參數(shù),為模型寫入清單屬性,清單數(shù)據(jù)寫入模型共享參數(shù)邏輯路線如圖17所示,模型清單參數(shù)內(nèi)容寫入效果如圖18所示。

圖14 創(chuàng)建清單文件(.XML)部分代碼Fig.14 Create bill file part code

圖15 Revit平臺(tái)參數(shù)管理Fig.15 Revit platform parameter management

圖16 新建Revit共享參數(shù)部分代碼Fig.16 Create Revit share parameter part code

將工程量清單參數(shù)通過插件寫入Revit模型后,Revit模型以共享參數(shù)的形式包含了工程量清單的特殊屬性(如項(xiàng)目編碼、項(xiàng)目名稱),此時(shí)的Revit模型具備的參數(shù)信息可滿足工程清單算量的數(shù)據(jù)需求,利用該模型可通過二次開發(fā)插件或者Dynamo可視化編程方式,讀取模型參數(shù)信息,定義輸出清單數(shù)據(jù)格式,完成工程量清單數(shù)據(jù)的輸出,為清單工程量統(tǒng)計(jì)奠定基礎(chǔ)。

圖17 清單數(shù)據(jù)寫入模型共享參數(shù)邏輯路線Fig.17 Logical route of bill data writing model shared parameters

圖18 模型清單參數(shù)內(nèi)容寫入效果Fig.18 Writing effect of model component bill parameter content

4 結(jié)論

本文通過分別對工程量清單和Revit模型各自層級(jí)結(jié)構(gòu)展開分析,結(jié)合兩者樹形結(jié)構(gòu)的相似性,建立清單與Revit模型的映射關(guān)系,以Visual Studio 2019為開發(fā)環(huán)境,基于C#語言開發(fā)Revit二次開發(fā)插件,實(shí)現(xiàn)Revit模型與清單的匹配,主要結(jié)論如下:

1) 工程量清單與Revit模型具有層級(jí)結(jié)構(gòu)相似性,基于兩者相似性可以建立映射關(guān)系,解決了Revit模型與工程量清單的不匹配問題。

2) XML數(shù)據(jù)格式可以充當(dāng)Revit模型與工程量清單的數(shù)據(jù)傳輸“橋梁”,在技術(shù)上實(shí)現(xiàn)工程量清單數(shù)據(jù)寫入Revit模型。

3) Revit模型與清單映射插件功能的實(shí)現(xiàn),解決了Revit模型直接輸出工程量清單過程中清單屬性缺失的問題。

猜你喜歡
數(shù)據(jù)結(jié)構(gòu)工程量編碼
基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達(dá)圖像配準(zhǔn)
《全元詩》未編碼疑難字考辨十五則
子帶編碼在圖像壓縮編碼中的應(yīng)用
電子制作(2019年22期)2020-01-14 03:16:24
Genome and healthcare
EXCEL在零星工程量計(jì)算中的應(yīng)用
江西建材(2018年2期)2018-04-14 08:01:03
“翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
中國市場(2016年45期)2016-05-17 05:15:48
工程量清單在公路工程招投標(biāo)中的應(yīng)用
TRIZ理論在“數(shù)據(jù)結(jié)構(gòu)”多媒體教學(xué)中的應(yīng)用
《數(shù)據(jù)結(jié)構(gòu)》教學(xué)方法創(chuàng)新探討
河南科技(2014年5期)2014-02-27 14:08:57
天峨县| 张家港市| 彰化县| 遂宁市| 高青县| 建昌县| 宜春市| 石城县| 德令哈市| 宜阳县| 金秀| 佛冈县| 南开区| 吉水县| 屯昌县| 英吉沙县| 阳泉市| 枣强县| 富裕县| 明星| 阿拉尔市| 扶余县| 鸡西市| 大名县| 天柱县| 常熟市| 克什克腾旗| 商丘市| 诏安县| 密云县| 濮阳县| 天水市| 昌都县| 东阿县| 九寨沟县| 浦北县| 西城区| 鄂尔多斯市| 鄂伦春自治旗| 景洪市| 宝鸡市|