最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【Rhino建?!炕贕rasshopper與Rhinocommmon用C#實(shí)現(xiàn)批量Closed Breps布爾的小實(shí)踐。

2022-11-21 22:58 作者:SayLeftTurnRight  | 我要投稿

問題來源:

用grasshopper自帶的Soild Intersection電池總是有部分實(shí)體運(yùn)算不出來。

解決方式:

去查了下Rhinocommom的布爾運(yùn)算方法,發(fā)現(xiàn)帶有個(gè)tolerance參數(shù),允許我們自行調(diào)整布爾運(yùn)算的容差,調(diào)用這個(gè)函數(shù)就把問題解決了。


簡(jiǎn)述下我寫這個(gè)電池的思路。

采用的是Rhinocommom自帶的CreateBooleanIntersection Method。

Brep.CreateBooleanIntersection Method? ? ? ? ? ? https://developer.rhino3d.com/api/RhinoCommon/html/M_Rhino_Geometry_Brep_CreateBooleanIntersection.htm

有兩個(gè)需要注意的點(diǎn):

1·由于布爾運(yùn)算有可能產(chǎn)生多個(gè)實(shí)體,所以返回的是一組值,return的是一個(gè)array,不是gh常用的List。

2·當(dāng)兩個(gè)Brep沒有相交時(shí)或者運(yùn)算錯(cuò)誤時(shí),return值是NULL。但要做的是批量運(yùn)算,這可能會(huì)卡住其它Brep的運(yùn)算。


Brep.CreateBooleanIntersection Method 的返回值

處理方式:

1·遍歷一遍返回的Brep array的所有Brep,賦值給輸出端的List。

2.增加判斷語句,只有返回的Brep array為非NULL時(shí),才會(huì)進(jìn)行賦值。

?private void RunScript(Brep brep, List<Brep> breps, int t, ref object BREPS)

? {

? ?//聲明一個(gè)BrepList,用來儲(chǔ)存運(yùn)算結(jié)果

? ? List <Brep> inters = new List<Brep>();

? ? //遍歷輸入的所有Brep

? ? foreach(Brep b in breps)

? ? {

? ? ? Brep[] inter1 = Brep.CreateBooleanIntersection(brep, b, t);

? ? ? //判斷array為非NULL

? ? ? if(inter1 != null)

? ? ? {

? ? ? ? //遍歷布爾返回的array中所有Brep

? ? ? ? foreach(Brep bb in inter1)

? ? ? ? {

? ? ? ? ? inters.Add(bb);

? ? ? ? }

? ? ? }

? ? }

? ? BREPS = inters;



調(diào)整了下tolerance,實(shí)現(xiàn)的很完美。

想換成其他布爾運(yùn)算只需要改下Method名就好



【Rhino建?!炕贕rasshopper與Rhinocommmon用C#實(shí)現(xiàn)批量Closed Breps布爾的小實(shí)踐。的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
普陀区| 文安县| 洛浦县| 白山市| 赤水市| 武强县| 南澳县| 锡林浩特市| 九龙县| 巴东县| 安远县| 嘉禾县| 宁化县| 沅江市| 河源市| 烟台市| 荣昌县| 泉州市| 崇阳县| 临安市| 吉水县| 德州市| 沧州市| 米林县| 黄山市| 阿克陶县| 兴山县| 鄂托克旗| 同德县| 扶沟县| 曲阳县| 恩施市| 上林县| 凌海市| 新龙县| 陇川县| 左权县| 龙山县| 同心县| 建平县| 汝州市|