[發(fā)明專利]一種空間幾何形體快速建模及體積差值計(jì)算方法有效
| 申請(qǐng)?zhí)枺?/td> | 202310913306.5 | 申請(qǐng)日: | 2023-07-25 |
| 公開(kāi)(公告)號(hào): | CN116628831B | 公開(kāi)(公告)日: | 2023-09-29 |
| 發(fā)明(設(shè)計(jì))人: | 譚光偉;賈璐;李先華;毛饒俊;胡豐雪;曾賢慧;盧川;許程智 | 申請(qǐng)(專利權(quán))人: | 江西中煤建設(shè)集團(tuán)有限公司;南昌大學(xué) |
| 主分類號(hào): | G06F30/13 | 分類號(hào): | G06F30/13;G06F30/20;G06T17/10 |
| 代理公司: | 北京眾合誠(chéng)成知識(shí)產(chǎn)權(quán)代理有限公司 11246 | 代理人: | 王煥巧 |
| 地址: | 330000 江西省*** | 國(guó)省代碼: | 江西;36 |
| 權(quán)利要求書(shū): | 查看更多 | 說(shuō)明書(shū): | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 空間 幾何 形體 快速 建模 體積 差值 計(jì)算方法 | ||
1.一種空間幾何形體快速建模及體積差值計(jì)算方法,其特征在于,包括以下步驟:
步驟一:基于高程點(diǎn)空間信息實(shí)例化對(duì)象,包括:
步驟1.1:對(duì)地形高程點(diǎn)空間信息處理,將勘測(cè)得到的地形高程點(diǎn)信息導(dǎo)入Excel中,生成所有已勘測(cè)地形高程點(diǎn)坐標(biāo)數(shù)據(jù)文件;
步驟1.2:調(diào)用Windows服務(wù)類FileInfo并實(shí)例化對(duì)象,在帶參數(shù)的構(gòu)造器中添加地形高程點(diǎn)坐標(biāo)數(shù)據(jù)文件所在位置;
步驟1.3:使用ExcelPackage類屬性中的Workbook和ExcelWorksheet類屬性Worksheets,鏈接地形高程點(diǎn)數(shù)據(jù)文件;
步驟1.4:使用for循環(huán)語(yǔ)句對(duì)地形高程點(diǎn)數(shù)據(jù)文件中坐標(biāo)數(shù)據(jù)進(jìn)行提取,將提取后的object類型的數(shù)據(jù)轉(zhuǎn)換成double類型;
步驟1.5:將轉(zhuǎn)換成double類型的高程點(diǎn)坐標(biāo)數(shù)據(jù)添加到Revit.DB.XYZ地形實(shí)例化對(duì)象中,再將實(shí)例化對(duì)象添加到Revit.DB.XYZ集合實(shí)例對(duì)象中,形成地形高程點(diǎn)空間信息實(shí)例對(duì)象;
步驟二:依據(jù)步驟一得到的地形高程點(diǎn)空間信息實(shí)例對(duì)象自動(dòng)創(chuàng)建原始地形實(shí)體模型,包括:
步驟2.1:獲取Revit當(dāng)前項(xiàng)目數(shù)據(jù)庫(kù),使用UIDocument類和Document類,激活當(dāng)前UI視圖和數(shù)據(jù)庫(kù);
步驟2.2:實(shí)例化FilteredElementCollector類的對(duì)象,調(diào)用該類的屬性O(shè)fCategory和OfClass過(guò)濾得到地形族類別OST_Topography和族類型TopographySurface;
步驟2.3:使用LINQ語(yǔ)句將過(guò)濾后的FilteredElementCollector類的對(duì)象通過(guò)族名稱查詢,得到Element實(shí)例化對(duì)象,即獲取地形元素;
步驟2.4:創(chuàng)建事務(wù)工作,使用TopographySurface類中的創(chuàng)建方法體Create,在方法體添加步驟一中的已獲取的高程點(diǎn)坐標(biāo)數(shù)據(jù),生成原始場(chǎng)地地形表面實(shí)例的三維模型;
步驟三:加密處理基坑外邊緣高程點(diǎn),創(chuàng)建基坑地表外邊緣空間形狀,包括:
步驟3.1:在原始場(chǎng)地地形實(shí)體的上表面創(chuàng)建所需要開(kāi)挖基坑的平面形狀,獲取平面形狀各頂點(diǎn)的平面坐標(biāo),創(chuàng)建函數(shù)名為boundXyz的方法體,返回值類型為L(zhǎng)istXYZ,該方法體由若干個(gè)XYZ類型的參數(shù)組成,將各頂點(diǎn)平面坐標(biāo)輸入方法體,獲取各頂點(diǎn)高程點(diǎn)坐標(biāo)值;
步驟3.2:利用空間坐標(biāo)距離公式計(jì)算各頂點(diǎn)之間的各線段距離L,以dx=0.1米為最小精度標(biāo)準(zhǔn)確認(rèn)各線段所需插入的輔助點(diǎn)個(gè)數(shù),即輔助點(diǎn)個(gè)數(shù)為(L/dx-1)個(gè);
步驟3.3:添加基坑區(qū)域外圍高程點(diǎn)坐標(biāo)值的集合,將基坑外圍邊界點(diǎn)位的集合密集處理;取基坑區(qū)域外圍邊界的起點(diǎn)與終點(diǎn),利用for語(yǔ)句對(duì)高程點(diǎn)位循環(huán)若干次,在起點(diǎn)和終點(diǎn)之間插入(L/dx-1)個(gè)輔助點(diǎn),將基坑外圍邊界上的所有高程點(diǎn)按順序連接,形成基坑場(chǎng)地地形表面外邊緣空間形狀;
步驟四:基于射線法創(chuàng)建判斷任意高程點(diǎn)是否在基坑區(qū)域內(nèi)部的方法,包括:
步驟4.1:將已勘測(cè)地形高程點(diǎn)平面坐標(biāo)沿著水平或者垂直方向發(fā)射射線,通過(guò)判斷射線和多邊形外邊緣的交點(diǎn)個(gè)數(shù)來(lái)獲取在多邊形內(nèi)部點(diǎn)位的集合,若交點(diǎn)個(gè)數(shù)為奇數(shù)時(shí)則該點(diǎn)在封閉區(qū)域內(nèi)部,若為偶數(shù)時(shí)則不在;
步驟4.2:創(chuàng)建函數(shù)名為PositionPnpoly,返回值類型為bool的靜態(tài)方法體,分別是以int類型命名的參數(shù)numVertices,表示多邊形的頂點(diǎn)個(gè)數(shù)、以Listdouble類型命名的參數(shù)vertx和verty,表示多邊形x坐標(biāo)和y坐標(biāo)的集合RR,以double類型命名的參數(shù)VerticesX和VerticesY,表示當(dāng)前x坐標(biāo)和y坐標(biāo);
步驟4.3:使用int型定義三種字段,分別為i、j、c,初始值都設(shè)置為0;
步驟4.4:在for循環(huán)語(yǔ)句中聲明i和j,初始值分別為0和numVertices-1,設(shè)置判斷條件inumVertices,循環(huán)增量設(shè)置為j=i++;在循環(huán)體中通過(guò)if條件判斷交點(diǎn)個(gè)數(shù)的奇偶性;
步驟五:依據(jù)步驟四的判斷方法獲取基坑區(qū)域內(nèi)所有已勘測(cè)地形高程點(diǎn),包括:
步驟5.1:創(chuàng)建函數(shù)名為PointsInPolygon,返回值類型為L(zhǎng)istXYZ方法體,該方法體所含參數(shù)為L(zhǎng)istXYZ類型的字段polygonPoints;檢查當(dāng)前地形所有的點(diǎn)位坐標(biāo),即創(chuàng)建需要判斷的檢查點(diǎn)坐標(biāo)的集合;
步驟5.2:使用IEnumerable類中的方法體Select,取出polygonPoints中的x坐標(biāo)的集合和y坐標(biāo)的集合;
步驟5.3:利用foreach語(yǔ)句遍歷當(dāng)前地形所有的點(diǎn)位坐標(biāo),將檢查點(diǎn)個(gè)數(shù)、polygonPoints中的x坐標(biāo)的集合和y坐標(biāo)的集合,遍歷后的檢查點(diǎn)的x坐標(biāo)、遍歷后的檢查點(diǎn)的y坐標(biāo)參數(shù)添加到步驟二中的方法體Create中,依據(jù)步驟四射線法判斷奇偶性以此判斷高程點(diǎn)是否在需要開(kāi)挖基坑的區(qū)域內(nèi)部,返回值為奇數(shù)則該點(diǎn)在區(qū)域內(nèi)部并拾取;添加區(qū)域內(nèi)部的所有高程點(diǎn),最終返回符合條件的所有高程點(diǎn);
步驟六:依據(jù)已獲取的區(qū)域內(nèi)部高程點(diǎn)創(chuàng)建生成所需開(kāi)挖基坑的地形實(shí)例,包括:
步驟6.1:創(chuàng)建名為PartitionPlate的方法體,返回值類型為L(zhǎng)istXYZ,將需要開(kāi)挖基坑的區(qū)域的多邊形頂點(diǎn)添加到步驟四中的靜態(tài)方法體中;
步驟6.2:實(shí)例化TopographyEditScope類,在實(shí)例化后的字段基礎(chǔ)上,使用Start方法體開(kāi)始地形編輯事務(wù),并獲取原始地形實(shí)例Id;
步驟6.3:在地形編輯事務(wù)基礎(chǔ)上添加Transaction新事務(wù),用來(lái)修改場(chǎng)地地形實(shí)例;
步驟6.4:使用TopographySurface類的方法體AddPoints,添加步驟三中的密集處理基坑區(qū)域外圍高程點(diǎn)位集合;
步驟6.5:通過(guò)TopographySurface類的方法體ChangePointsElevation,添加到步驟五中需要開(kāi)挖的基坑區(qū)域內(nèi)部的點(diǎn)集合,并輸入相應(yīng)的高程坐標(biāo);
步驟6.6:結(jié)束Transaction?事務(wù)和TopographyEditScope事務(wù),生成開(kāi)挖基坑后的地形實(shí)例;
步驟七:自動(dòng)計(jì)算基坑開(kāi)挖土方量,包括:
步驟7.1:分別實(shí)例化FilteredElementCollector類和ElementCategoryFilter類,在ElementCategoryFilter類的構(gòu)造器中添加OST_BuildingPad族類別屬性;將過(guò)濾后的FilteredElementCollector類的實(shí)例化對(duì)象通過(guò)WherePasses和WhereElementIsElementType兩個(gè)方法體得到實(shí)例的元素Id集合;
步驟7.2:實(shí)例化BuildingPadType類,設(shè)置初始值null,將“地坪數(shù)量是否為0”作為if判斷條件,若條件成立,則對(duì)BuildingPadType類空的實(shí)例化對(duì)象進(jìn)行創(chuàng)建,否則返回地坪實(shí)例的元素Id集合中的第一項(xiàng);
步驟7.3:實(shí)例化FilteredElementCollector類,通過(guò)LINQ語(yǔ)句篩選得到當(dāng)前地形實(shí)例所在的標(biāo)高;輸入基坑位置信息,實(shí)例化CurveLoop類,通過(guò)Append方法體添加基坑四周的線段;
步驟7.4:創(chuàng)建事務(wù)工作,使用BuildingPad類的創(chuàng)建方法Create,輸入地坪Id、場(chǎng)地所在的標(biāo)高Id,基坑線段的集合參數(shù);
步驟7.5:使用LookupParameter方法體獲取地形參數(shù)“自標(biāo)高的高度偏移”、“體積”,通過(guò)方法體Set設(shè)置基坑深度,并將體積相差量即基坑開(kāi)挖土方量在Revit中打印出來(lái)。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于江西中煤建設(shè)集團(tuán)有限公司;南昌大學(xué),未經(jīng)江西中煤建設(shè)集團(tuán)有限公司;南昌大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202310913306.5/1.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。





