锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美日韩国产精品,欧美激情免费观看,亚洲综合日本http://m.shnenglu.com/eryar/category/17808.htmlPipeCAD - Plant Piping Design Software. <br> RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.zh-cnSun, 03 Dec 2023 16:48:40 GMTSun, 03 Dec 2023 16:48:40 GMT60OpenCASCADE HLR 杞粨綰?/title><link>http://m.shnenglu.com/eryar/archive/2023/12/03/occt_hlr_contour_ana.html</link><dc:creator>eryar</dc:creator><author>eryar</author><pubDate>Sun, 03 Dec 2023 12:53:00 GMT</pubDate><guid>http://m.shnenglu.com/eryar/archive/2023/12/03/occt_hlr_contour_ana.html</guid><wfw:comment>http://m.shnenglu.com/eryar/comments/230218.html</wfw:comment><comments>http://m.shnenglu.com/eryar/archive/2023/12/03/occt_hlr_contour_ana.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/eryar/comments/commentRss/230218.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/eryar/services/trackbacks/230218.html</trackback:ping><description><![CDATA[<h1 style="text-align: center;">OpenCASCADE HLR Quadric Surface Outline Edge</h1> <p>Key Words: HLR, Outline Edge, Sihouette Edge</p> <h2>1 Introduction</h2> <p>OpenCASCADE涓叧浜庨殣钘忕嚎娑堥櫎HLR綆楁硶鐨勬弿榪板氨鏄竴鍙ヨ瘽錛歍hese algorithms are based on the principle of comparing each edge of the shape to be visualized with each of its faces, and calculating the visible and the hidden parts of each edge. 鍗蟲牴鎹潰鍒ゆ柇姣忔潯杈笶dge鐨勯伄鎸″叧緋伙紝璁$畻鍑鴻竟Edge鍙鍜屼笉鍙閮ㄥ垎銆傛墍浠LR綆楁硶鐨勮緭鍏ヤ富瑕佷負(fù)杈瑰拰闈紝璁$畻閬尅鍏崇郴渚濊禆綰塊潰姹備氦綆楁硶銆傚浜庣簿紜殑HLR綆楁硶渚濊禆綺劇‘鐨勭嚎闈㈡眰浜ょ畻娉曪紝PolyAlgo綆楁硶渚濊禆澶氭綰夸笌緗戞牸姹備氦綆楁硶銆傝緭鍏ョ殑杈逛腑闄や簡BREP涓殑杈逛互澶栵紝榪樻湁涓綾繪槸鏍規(guī)嵁鎶曞獎鏂瑰悜璁$畻寰楁潵鐨勶紝鍗沖杞粨綰縊utline錛屼篃縐頒負(fù)Contour綰褲侫CIS鐨凱HLR涓О杞粨綰縎ihouette Edge銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204423504-1679258260.png" alt="" /></p> <p>杞粨綰跨殑璁$畻鏄疕LR涓瘮杈冨叧閿殑涓姝ワ紝鏈枃浠penCASCADE涓畝鍗曠殑浜屾鏇查潰鐨勮疆寤撶嚎璁$畻鍏ユ墜鏉ョ悊瑙f洸闈㈢殑杞粨綰挎蹇碉紝涓虹悊瑙d換鎰忔洸闈㈣疆寤撶嚎璁$畻鎵撲笅鍩虹銆?/p> <h2>2 Outline Builder</h2> <p>OpenCASCADE鐨凥LR涓嬌鐢ㄧ被HLRTopoBRep_OutLiner鏉ヨ綆楀杞粨綰褲傝疆寤撶嚎鐨勮綆椾緷璧栨姇褰辨柟鍚戝強鎶曞獎鏂瑰紡錛屼富瑕佽綆楅昏緫鍦ㄥ嚱鏁癋ill()涓細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204440944-1736661418.png" alt="" /></p> <p>鎶曞獎鏂瑰紡涓昏鍒嗕負(fù)閫忚鎶曞獎Perspective鍜屽鉤琛屾姇褰憋紝宸ョ▼鍥劇敓鎴愪竴鑸嬌鐢ㄥ鉤琛屾姇褰辨柟寮忋傚疄闄呰綆楃被鏄疌ontap_Contour錛屽湪綾籆ontap_Contour涓張鏍規(guī)嵁鎶曞獎鏇查潰綾誨瀷鍒嗕負(fù)涓ょ綾誨瀷鏉ュ鐞嗭細(xì)</p> <ul> <li>浜屾鏇查潰</li> <li>浠繪剰鏇查潰</li> </ul> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204448284-503267688.png" alt="" /></p> <p>鍏朵腑鍑芥暟PerformAna()涓鴻綆楀鉤闈€佺悆闈€佸渾鏌遍潰銆佸渾閿ラ潰鐨勫杞粨綰匡紝鏈緇堜細(xì)浣跨敤綾籆ontap_ContAna銆傚叾涓瑼na涓篈nalytical瑙f瀽鏇查潰鐨勬剰鎬濓紝榪欓噷鎸囪兘鐢ㄨВ鏋愯〃杈懼紡琛ㄧず鐨勪簩嬈℃洸闈€?/p> <h2>3 Contap_ContAna</h2> <p>綾籆ontap_ContAna鑳借綆楃悆闈€佸渾鏌遍潰鍜屽渾閿ラ潰鐨勫杞粨綰緾ontour錛屼笅闈㈡垜浠富瑕佹潵鐪嬬湅榪欎笁綾婚潰鐨勫杞粨綰胯綆楃粨鏋溿?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204520587-275740948.png" alt="" /></p> <p>瀵逛簬騫寵鎶曞獎鐞冮潰浼?xì)鐢熸垚浠ユ姇濯勬柟鍚戜负娉曞悜锛屼互鐞冨崐寰勪负鍗婂緞鐨勪竴涓渾錛屼唬鐮佸涓嬫墍紺猴細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204533447-647385516.png" alt="" /></p> <p>濡備笅鍥炬墍紺轟腑鐨勭豢鑹茬殑綰匡細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204542473-1297893842.png" alt="" /></p> <p>瀵逛簬騫寵鎶曞獎鍦嗘煴闈細(xì)鐢熸垚涓ゆ潯鐩寸嚎錛岃嫢鎶曞獎鏂瑰悜涓庡渾鏌遍潰娉曞悜騫寵鏃朵笉鐢熸垚杞粨綰匡紝榪欐椂灝辨槸浣跨敤鍦嗘煴浣撲腑鐨勪笂涓嬩袱涓渾鐨勮竟銆備唬鐮佸涓嬫墍紺猴細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204549730-207895601.png" alt="" /></p> <p>鐢熸垚鐨勪袱鏉$洿綰挎柟鍚戜負(fù)鍦嗘煴闈㈢殑杞存柟鍚戯細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202312/534255-20231203204557306-1576414130.png" alt="" /></p> <p>鍦嗛敟闈㈢殑杞粨綰跨敓鎴愬嚱鏁伴昏緫綾諱技錛岀暀緇欒鑰呰嚜琛屽垎鏋愮悊瑙c?/p> <h2>4 Conclusion</h2> <p>緇間笂鎵榪幫紝BREP鐨凥LR綆楁硶闇瑕佽綆楁ā鍨嬬殑澶栬疆寤撶嚎銆傚鐞冧綋鐨凚REP杈規(guī)湁涓や釜閫鍖栬竟錛堟瀬鐐癸級錛屽強涓や釜閲嶅悎杈癸紝鑻ユ潵鎶曞獎瀹炶川涓婂彧鏈夐噸鍚堣竟涓殑涓鏉¤竟鏈夌敤錛岃岃繖涓竟榪樻槸涓崐鍦嗐備粠鐞嗚В 綆鍗曠殑浜屾鏇查潰澶栬疆寤撶嚎璁$畻鍑芥暟鍏ユ墜錛屽啀鍘繪繁鍏ョ悊瑙d換鎰忔洸闈㈢殑澶栬疆寤撶嚎璁$畻鏂規(guī)硶銆?/p> <p>鐞嗚ВHLR瀹炵幇鍘熺悊錛屽彲浠ラ噸鏋凥LR浠g爜錛屼篃鍙互瀹屽叏鑷繁鍔ㄦ墜錛屽紑鍙戝嚭婊¤凍瀹為檯闇姹傜殑鑷姩鍑哄浘紼嬪簭錛岃嚜鍔ㄥ嚭鍥炬槸宸ョ▼綾昏璁¤蔣浠朵腑鐩稿鏍稿績鐨勫姛鑳斤紝鐩墠鍥藉唴鍩轟簬PDMS鍋氳嚜鍔ㄥ嚭鍥劇浉鍏寵蔣浠跺紑鍙戠殑灝辨湁寰堝瀹躲傛湰鐫寮鏀劇殑蹇冩佸垎浜繖浜涚浉瀵規(guī)瘮杈冨叧閿姛鑳界殑鍘熺悊錛岃鍥藉唴榪欎簺浜у搧鑳芥憜鑴卞熀浜嶢utoCAD/BricsCAD寮鍙戞帴鍙f垨PDMS Draft鐨勯檺鍒訛紝寮鍙戝嚭鏇村ソ鐢ㄣ佹洿鑷敱鐏墊椿鐨勮蔣浠躲?/p><img src ="http://m.shnenglu.com/eryar/aggbug/230218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/eryar/" target="_blank">eryar</a> 2023-12-03 20:53 <a href="http://m.shnenglu.com/eryar/archive/2023/12/03/occt_hlr_contour_ana.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OpenCASCADE-HLR Edgehttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_hlr_edges.htmleryareryarSat, 02 Dec 2023 04:23:00 GMThttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_hlr_edges.htmlhttp://m.shnenglu.com/eryar/comments/230217.htmlhttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_hlr_edges.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230217.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230217.htmlOpenCASCADE-HLR Edge

1 Introduction

鐢ㄨ綆楁満鐢熸垚涓夌淮鐗╀綋鐨勭湡瀹炲浘褰紝鏄綆楁満鍥懼艦瀛︾爺絀剁殑閲嶈鍐呭銆傜湡瀹炲浘褰㈠湪浠跨湡妯℃嫙銆佸嚑浣曢犲瀷銆佸箍鍛婂獎瑙嗗拰縐戝璁$畻鍙鍖栫瓑璁稿棰嗗煙閮芥湁鐫騫挎硾搴旂敤銆傚湪鐢ㄦ樉紺鴻澶囨弿榪扮墿浣撶殑鍥懼艦鏃訛紝蹇呴』鎶婁笁緇翠俊鎭粡榪囨煇縐嶆姇褰卞彉鎹㈠湪浜岀淮鐨勬樉紺哄鉤闈笂緇樺埗鍑烘潵銆備粠涓夌淮鎶曞獎鍒頒簩緇寸殑闄嶇淮鎿嶄綔錛屼細(xì)瀵艱嚧鍥懼艦鐨勪簩涔夋с傝娑堥櫎榪欑被浜屼箟鎬э紝灝卞繀欏誨湪緇樺埗鏃舵秷闄よ閬尅鐨勪笉鍙鐨勭嚎鎴栭潰錛屼範(fàn)鎯笂縐頒箣涓烘秷闄ら殣钘忕嚎Hidden Line Removal鍜岄殣钘忛潰Hidden Face Removal銆?/p>

榪欐槸娓叉煋鏄劇ず涓婂娑堥殣鐨勯渶姹傦紝鍦ㄦ牴鎹笁緇存ā鍨嬭嚜鍔ㄧ敓鎴愬伐紼嬪浘鐨勫伐紼嬭璁¤蔣浠朵腑錛屽娑堥殣鐨勯渶姹傛湁鎵涓嶅悓銆?/p>

宸ョ▼璁捐杞歡涓庢満姊拌璁¤蔣浠朵笉鍚岋紝宸ョ▼璁捐杞歡涓嬈″嚭鍥炬秷闅愮殑妯″瀷閲忓ぇ錛屽鍑哄浘鐨勭畻娉曡姹備富瑕佹湁錛?/p>

  • 涓昏浣跨敤娑堥殣綰跨畻娉曪紱
  • 娑堥殣寰楀埌鐨勭嚎鑳芥壘鍒頒笌涓夌淮妯″瀷鐨勫叧緋伙紝鏂逛究鏍囨敞妯″瀷淇℃伅錛屽妯″瀷鍚嶇О銆佽鏍肩瓑錛?/li>
  • 鑷姩鏍囨敞甯冨眬綆楁硶錛岃兘瀵規(guī)爣娉ㄧ殑鍚嶇О銆佽鏍肩瓑鑷姩甯冨眬錛屽噺灝戞墜宸ヨ皟鏁達(dá)紱
  • 鑷姩灝哄鏍囨敞錛?/li>
  • 絎﹀彿鍖栧鐞嗭紝濡傜閬撴ā鍨嬭兘鐢ㄤ竴鏉$嚎絎﹀彿鍖栧鐞嗭紱

鍏跺疄鏈鍚庢葷粨鎴愪竴鍙ヨ瘽灝辨槸涓閿牴鎹ā鍨嬬敓鎴愯兘浜や粯鐨勫浘綰搞傝櫧鐒剁幇鍦ㄦ妧鏈笂鍏峰涓夌淮妯″瀷涓嬭濺闂寸殑鑳藉姏錛屼絾鏄洰鍓嶄簩緇村浘綰鎬緷鐒舵槸璁捐浜や粯銆佸姞宸ュ埗閫犱富瑕佷緷鎹傚伐紼嬬被璁捐杞歡涓昏鐨勫姛鑳藉氨鏄揩閫熷緩妯★紝紕版挒媯嫻嬪拰鑷姩鍥劇焊鐢熸垚銆傚綋妯″瀷閲忓ぇ鏃訛紝娑堥殣閫熷害蹇強鑷姩鐢熸垚鐨勬爣娉ㄦ枃瀛楁帓鍒楁暣榻愶紙鎴栨弧瓚沖伐紼嬩範(fàn)鎯級鎴愪簡浜岀淮鍥劇焊鑷姩鐢熸垚鐨勬牳蹇冩妧鏈紝涔熸槸紼嬪簭澶勭悊涓殑闅劇偣銆?/p>

2 HLR

鍑犱綍鍐呮牳涓鑸兘鎻愪緵HLR綆楁硶錛岀敤鏉ユ牴鎹ā鍨嬫姇褰辯敓鎴愪簩緇村伐紼嬪浘銆侽penCASCADE鐨凥LR鎻愪緵浜嗛殣钘忕嚎娑堥殣綆楁硶銆?/p>

https://www.spatial.com/zh/products/cgm-hlr-hidden-line-removal

OpenCASCADE 鎻愪緵浜嗕袱縐嶆秷闅愮畻娉曪細(xì)HLRBRep_Algo鍜孒LRBRep_PolyAlgo銆傝繖浜涚畻娉曢兘鏄熀浜庣浉鍚岀殑鍘熺悊錛氭瘮杈冨艦鐘舵瘡鏉¤竟鐩稿姣忎釜闈㈢殑鍙鎬э紝騫?璁$畻姣忔潯杈圭殑鍙閮ㄥ垎涓庢秷闅愰儴鍒嗐傜畻娉曢氳繃璁$畻鍦ㄦ寚瀹氭姇褰辨柟鍚戜笂鐨勭墿浣撴樉紺虹壒鎬э紝鍘婚櫎鎴栨爣璁拌闈㈤伄鎸$殑杈廣傝繖涓や釜綆楁硶涔熶笌涓浜涙彁鍙栧姛鑳介厤鍚堜嬌鐢紝濡傞噸鏋勪竴 涓畝鍖栫殑妯″瀷絳夛紝綆鍖栧悗鏂扮殑妯″瀷鐢辮竟緇勬垚錛屽氨鏄湪鎶曞獎鏂瑰悜涓婄殑杞粨綰褲?/p>

3 杈圭殑鍒嗙被

OpenCASCADE鐨凥LR涓皢杈瑰垎涓轟互涓嬬被鍨嬶細(xì)

  • Sharp Edges
  • Smooth Edges
  • Sewn Edges
  • Outline Edges
  • Isoparameter Edges

浠庣被HLRBRep_HLRToShape鍜岀被HLRBRep_PolyHLRToShape涓粰鍑轟簡榪欎簺杈圭殑涓浜涘畾涔夈傚叾涓璖harp Edge琛ㄧずC0榪炵畫錛堥潪G1榪炵畫錛夌殑杈癸紝灝辨槸涓鑸珽dge錛?/p>

Smooth Edge琛ㄧずG1榪炵畫錛堥潪G2 榪炵畫錛夌殑杈癸紱

Sewn Edge琛ㄧずG2榪炵畫鐨勮竟錛?/p>

Outline Edge琛ㄧず妯″瀷鐨勮疆寤撹竟錛岃繖縐嶇被鍨嬬殑杈逛笉鍦˙REP鏁版嵁涓紝闇瑕佹牴鎹姇褰辨柟鍚戠敓鎴愶紱

Isoparameter Edge琛ㄧず闈㈢殑絳夊弬綰跨敓鎴愮殑杈癸紝榪欑綾誨瀷鐨勮竟涓嶄篃涓嶅湪BREP鏁版嵁涓紱

鍏朵腑Sharp Edge銆丼mooth Edge鍜孲ewn Edge涓鑸兘鏄疊REP涓殑EDGE鏁版嵁錛岃孫utline Edge鍜孖soparameter Edge鏄牴鎹緗澶栫敓鎴愮殑杈廣傜悊瑙h竟鐨勮繖浜涘畾涔夛紝鏂逛究瀵笻LR綆楁硶榪涜鐞嗚В銆侶LR綆楁硶鏄浉瀵圭畝鍗曠殑綆楁硶錛屼富瑕佹槸灝卞皢涓婅堪浜旂綾誨瀷鐨勮竟涓庨潰榪涜姹備氦錛屽垽鏂伄鎸″叧緋匯?/p>

鐩墠OpenCASCADE涓殑HLR綆楁硶浠g爜鍐欏緱鏈夌偣涔憋紝涓婃鍦ㄦ繁鍦硂gg鐨勪縿緗楁柉寮鍙戜漢鍛樻彁鍒拌閲嶆瀯HLR閮ㄥ垎鐨勪唬鐮併傛繁鍏ョ悊瑙?HLR綆楁硶錛屼負(fù)鑷姩鐢熸垚鍥劇焊鍔熻兘鎵撲笅鍩虹銆?/p>

 



eryar 2023-12-02 12:23 鍙戣〃璇勮
]]>
OpenCASCADE 綰塊潰姹備氦http://m.shnenglu.com/eryar/archive/2023/12/02/occt_intcs.htmleryareryarSat, 02 Dec 2023 04:23:00 GMThttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_intcs.htmlhttp://m.shnenglu.com/eryar/comments/230216.htmlhttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_intcs.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230216.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230216.htmlOpenCASCADE 綰塊潰姹備氦

eryar@163.com

1 Introduction

OpenCASCADE涓嚑浣曟洸綰夸笌鏇查潰姹備氦浣跨敤綾籊eomAPI_IntCS錛屾槸瀵圭被IntCurveSurface_HInter鐨勭畝鍗曞皝瑁呫傚湪IntCurveSurface_HInter涓鏇茬嚎鍜屾洸闈㈡眰浜ゅ垎涓轟互涓嬪嚑縐嶇被鍨嬶細(xì)

  • PerformConicSurf錛氫簩嬈℃洸綰夸笌鏇查潰姹備氦錛屽叾涓張鍒嗕負(fù)涓ょ被錛氫簩嬈℃洸綰夸笌浜屾鏇查潰姹備氦鍜屼簩嬈℃洸綰垮拰鑷敱鏇查潰姹備氦錛?/li>
  • InternalPerformCurveQuadric錛氳嚜鐢辨洸綰夸笌浜屾鏇查潰姹備氦錛?/li>
  • InternalPerform錛氳嚜鐢辨洸綰垮拰鑷敱鏇查潰姹備氦錛?/li>

鏈枃涓昏浠嬬粛鏇茬嚎涓庢洸闈㈡眰浜ょ殑瀹炵幇鍘熺悊銆?/p>

2 浜屾鏇茬嚎涓庝簩嬈℃洸闈㈡眰浜?/h2>

浜屾鏇茬嚎涓庝簩嬈℃洸闈㈡眰浜や嬌鐢↖ntAna_ConicQuad璁$畻錛屼富瑕佹濊礬鏄皢鏇茬嚎鐢ㄥ弬鏁版柟紼嬭〃紺猴紝浠e叆浜屾鏇查潰鐨勪唬鏁版柟紼嬨備簩嬈℃洸闈㈠彲浠ヤ嬌鐢ㄤ簩嬈″欏瑰紡琛ㄧず錛屽皢浜屾鏇茬嚎涓庝簩嬈℃洸闈㈢浉浜よ〃紺烘垚涓涓欏瑰紡鏂圭▼錛屼嬌鐢╩ath_DirectPolynomialRoots瀵瑰欏瑰紡鏂圭▼榪涜姹傝В銆?/p>

3 浜屾鏇茬嚎涓庤嚜鐢辨洸闈㈡眰浜?/h2>

浜屾鏇茬嚎涓庤嚜鐢辨洸闈㈡眰浜ゅ皢鏇查潰浣跨敤IntCurveSurface_Polyhedron鍦║錛孷涓婇噰鏍風(fēng)鏁e緱鍒癵rid緗戞牸銆傝繖涓被瀹炵幇涓嶪ntPolyh_MaillageAffinage綾誨姛鑳芥湁閲嶅銆?/p>

IntCurveSurface_ThePolygon澶氭綰夸笌Intf_InterferencePolygonPolyhedron 緗戞牸姹備氦錛屾牴鎹孌電嚎涓庣綉鏍兼眰浜ゆ儏鍐碉紝鎵懼埌鍒濆鍊鹼紝浣跨敤IntImp_IntCS璁$畻綺劇‘鍊箋備笌鏇查潰姹備氦鐨凪arching綆楁硶綾諱技錛屼嬌鐢ㄨ凱浠f硶鍘昏綆楃簿紜氦鐐廣傝凱浠f柟紼嬩負(fù)IntImp_ZerCSParFunc錛屽啓鍑鴻繖涓柟紼嬬殑Value()鍊艱綆楀拰Derivatives()寰垎璁$畻鍏紡銆?/p>

灝嗘洸綰夸笌鏇查潰姹備氦闂杞寲涓烘眰鏇查潰鍙傛暟u,v鍜屾洸綰垮弬鏁皐錛屼嬌鏇茬嚎C(w)鏇查潰S(u,v)涓婄殑鐐歸噸鍚堬紝寤虹珛鍑芥暟濡備笅錛?/p>

F(u,v,w)=S(u,v) - C(w)

鎵姹傜殑綺劇‘浜ょ偣婊¤凍鏂圭▼F(u,v,w)=0錛孎涓轟竴鍚湁涓変釜鍧愭爣鐨勭煝閲忥紝瀵瑰簲鍑芥暟Value()錛?/p>

Fx(u,v,w)=Sx(u,v) - Cx(w) = 0

Fy(u,v,w)=Sy(u,v) - Cy(w) = 0

Fz(u,v,w)=Sz(u,v) - Cz(w) = 0

涓婇潰涓哄惈鏈変笁涓柟紼嬬殑浠,v,w涓哄彉閲忕殑闈炵嚎鎬ф柟紼嬬粍錛岀簿紜氦鐐瑰氨鏄潪綰挎ф柟紼嬬粍鐨勮В銆備嬌鐢ㄧ被math_FunctionSetRoot搴旂敤Newton-Raphson榪唬娉曟眰瑙i潪綰挎ф柟紼嬬粍鐨勮В銆備嬌鐢∟ewton榪唬娉曟湁涓墠鎻愭潯浠舵槸瑕佹眰闈炵嚎鎬ф柟紼嬬粍涓闃跺彲瀵鹼紝鍗寵鍐欏嚭Jacobian榪唬鐭╅樀錛屽嵆涓婅堪鍑芥暟Derivatives()鐨勫疄鐜板師鐞嗭細(xì)

4 鑷敱鏇茬嚎涓庝簩嬈℃洸闈㈡眰浜?/h2>

鑷敱鏇茬嚎涓庝簩嬈℃洸闈㈡眰浜ntCurveSurface_TheQuadCurvExactInter 錛岄氳繃綾籌ntCurveSurface_TheQuadCurvFuncOfTheQuadCurvExactHInter寤虹珛浜屾鏇查潰涓庢洸綰夸箣闂寸殑鍑芥暟錛屾槸姹傝В鏇茬嚎涓婂弬鏁癠鐨勪竴鍏冨嚱鏁般?/p>

5 鑷敱鏇茬嚎涓庤嚜鐢辨洸闈㈡眰浜?/h2>

鑷敱鏇茬嚎涓庤嚜鐢辨洸闈㈡眰浜ゅ拰浜岀淮鑷敱鏇茬嚎姹備氦綾諱技錛岄噰鐢ㄧ殑紱繪暎娉曘傚嵆灝嗘洸綰塊氳繃閲囨牱紱繪暎鎴愬孌電嚎Polygon錛屽皢鏇查潰閲囨牱鐢熸垚緗戞牸Polyhedron錛岄氳繃綾籌ntCurveSurface_TheInterferenceOfHInter鏉ヨ綆楀孌電嚎涓庣綉鏍肩殑鐩鎬氦銆?/p>

鍖匢ntf涓昏鐢ㄦ潵璁$畻浜岀淮澶氭綰褲佷笁緇村孌電嚎鍙婄綉鏍肩殑鐩鎬氦銆傛牴鎹鏁h綆楃殑綺椾氦鐐癸紝鍐嶆牴鎹被IntCurveSurface_TheExactHInter浣跨敤榪唬娉曟眰寰楃簿紜氦鐐廣傝繖涓濇兂涓庢洸闈㈠拰鏇查潰姹備氦鐩稿悓銆?/p>

6 姹備氦緇撴灉

鏇茬嚎涓庢洸闈㈡眰浜ょ殑緇撴灉涓昏涔熸槸淇濆瓨鍦ㄧ被IntCurveSurface_Intersection瀵硅薄涓紝榪欎釜綾葷殑璁捐涓庝簩緇存洸綰挎眰浜ょ被浼鹼紝涓嶅鐩存帴銆?/p>

鍙互鐪嬪埌IntCurveSurface_Intersection榪欎釜綾葷殑鏋勯犲嚱鏁版槸protected鐨勶紝鎰忔濇槸涓嶈兘鐩存帴浣跨敤錛岄氳繃媧劇敓綾籌ntCurveSurface_HInter璋冪敤SetValues()鍑芥暟灝嗘眰浜ょ粨鏋滀繚瀛樿搗鏉ャ傛眰浜ょ粨鏋滀負(fù)浜ょ偣IntCurveSurface_IntersectionPoint鍜屼氦綰縄ntCurveSurface_IntersectionSegment銆?/p>

鍏朵腑浜ょ偣涓璉ntCurveSurface_IntersectionPoint淇濆瓨浜嗕笁緇村潗鏍囩偣錛屼氦鐐瑰湪鏇查潰涓婄殑U,V鍙傛暟錛屼氦鐐瑰湪鏇茬嚎涓婄殑鍙傛暟U鍙婄浉浜ょ姸鎬併備氦綰夸富瑕佹槸綰跨幇闈㈠拰閲嶅悎閮ㄥ垎鐨勫嚑浣曞寮傛儏鍐墊暟鎹?/p>

浠庣被鍥句笂鍙互鐪嬪嚭錛岃繖涓璺悓鏍風(fēng)敤鍒頒簡HLR綆楁硶涓紝鐞嗚В榪欎釜濂楄礬瀵圭悊瑙LR綆楁硶鏈夊府鍔┿?/p>

7 Conclusion

緇間笂鎵榪幫紝OpenCASCADE涓皢鏇茬嚎涓庢洸闈㈡眰浜ゆ牴鎹洸綰垮拰鏇查潰綾誨瀷鐨勪笉鍚屽垎鍒鐞嗐備簩嬈℃洸綰挎洸闈㈡眰浜や緷璧朓ntAna鍖咃紝鑷敱鏇茬嚎鍜岃嚜鐢辨洸闈㈡眰浜や嬌鐢ㄧ鏁f硶錛屾渶緇堝疄鐜扮畻娉曚笌涓や釜鏇查潰姹備氦鐨凪arching綆楁硶綾諱技錛岄氳繃紱繪暎寰楀埌鐨勭簿浜ょ偣錛屽啀浠e叆榪唬鏂圭▼姹傚緱綺劇‘瑙c傚叾涓妸鏇茬嚎鎴栨洸闈㈢鏁g殑閲囨牱鐐規(guī)病鏈夎冭檻鏇茬嚎鎴栨洸闈㈢殑鏇茬巼絳夛紝閲囨牱鐐規(guī)暟閲忚緝澶э紝浼?xì)濯勫搷鎬ц兘 銆傛洸闈㈤噰鏍風(fēng)鏁d唬鐮佷笌鏇查潰姹備氦涓殑鏈夐噸澶嶃備粠鍑犱綍姹備氦綾諱腑鍙互鐪嬪埌娌℃湁瀹瑰樊鐨勮緭鍏ワ紝鍙互鎬濊冧竴涓嬭繖涓棶棰樸?/p>

TKGeomAlgo涓櫎浜嗘嫙鍚堢畻娉曞錛屽ぇ閮ㄥ垎浠g爜涓昏灝辨槸綰跨嚎姹備氦銆佺嚎闈㈡眰浜ゅ強闈㈤潰姹備氦綆楁硶銆傜悊瑙h繖浜涚畻娉曠殑瀹炵幇鍘熺悊錛屼負(fù)Boolean綆楁硶鐨勬眰浜ら昏緫鎵撲笅鍩虹銆?/p>

 



eryar 2023-12-02 12:23 鍙戣〃璇勮
]]>
OpenCASCADE浜岀淮鏇茬嚎姹備氦http://m.shnenglu.com/eryar/archive/2023/12/02/occt_int_curve2d.htmleryareryarSat, 02 Dec 2023 04:22:00 GMThttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_int_curve2d.htmlhttp://m.shnenglu.com/eryar/comments/230215.htmlhttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_int_curve2d.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230215.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230215.htmlOpenCASCADE浜岀淮鏇茬嚎姹備氦

1 Introduction

OpenCASCADE涓浜岀淮鏇茬嚎姹備氦鍜屼笁緇存洸綰挎眰浜ゆ槸涓嶅悓鐨勶紝涓夌淮鏇茬嚎姹備氦緇熶竴浣跨敤紱繪暎娉曪紝浜岀淮鏇茬嚎姹備氦鏍規(guī)嵁鏇茬嚎綾誨瀷鐨勪笉鍚屽垎縐嶇被鍨嬭繘琛屽鐞嗐備簩緇存洸綰挎眰浜や腑榪樻彁渚涗簡璁$畻鑷氦鐨勭洿鎺ユ帴鍙c傚湪TKGeomAlgo涓紝涓昏鍐呭灝辨槸鎷熷悎銆佹眰浜ょ畻娉曪紝鐞嗚В姹備氦綆楁硶鐨勫疄鐜板師鐞嗭紝杈懼埌鑳介槄璇誨拰淇敼婧愮爜鐨勭姸鎬侊紝鑳藉鍒嗘瀽鍜岃В鍐沖疄闄呴亣鍒扮殑闂錛岀悊瑙penCASCADE鐨勮兘鍔涜竟鐣岋紝鏍規(guī)嵁闇瑕侀夋嫨鎵闇瑕佺殑鍔熻兘錛屼嬌杞歡緇撴灉鍙帶銆傛湰鏂囦富瑕佷粙緇嶄簩緇存洸綰跨浉浜ょ殑瀹炵幇鍘熺悊銆?/p>

鐢變簬OpenCASCADE寮鍙戞椂闂寸浉瀵逛箙榪滐紝鍦ㄤ簩緇存洸綰挎眰浜ょ浉鍏充唬鐮佷腑澶ч噺浣跨敤浜嗗畯瀹氫箟鐨勬柟寮忔潵瀹炵幇C++ 鐨勬ā鏉縯emplate鑳藉姏錛屽畯瀹氫箟鍦ㄧ被鐨刋XX_0.cxx鏂囦歡涓紝瀵瑰簲妯℃澘瀹炵幇鍦?.gxx涓細(xì)

榪欑瀹炵幇鏂瑰紡浼?xì)璁╀唬鐮佺殑鍙Lу彉宸紝涓嶅埄浜庝唬鐮佺淮鎶ゃ傚簲璇ョ敤C++鐨勬柟寮忓榪欎簺*.gxx浠g爜閲嶆瀯錛屽寮轟唬鐮佸彲璇繪у拰鍙淮鎶ゆс?/p>

2 姹備氦鍒嗙被

浜岀淮姹備氦浣跨敤綾籊eom2dAPI_InterCurveCurve錛?榪欎釜綾繪槸瀵圭被Geom2dInt_GInter鐨勫皝瑁呫傚湪綾籊eom2dInt_GInter涓紝濡傛灉鍙緭鍏ヤ竴鏉℃洸綰匡紝鍙互璁$畻鑷氦錛屽鏋滆緭鍏ヤ袱鏉℃洸綰匡紝璁$畻涓ゆ潯鏇茬嚎鐨勭浉浜ゃ?/p>

  • IntCurve_IntConicConic錛氫簩嬈℃洸綰夸笌浜屾鏇茬嚎姹備氦銆備簩嬈℃洸綰夸笌浜屾鏇茬嚎姹備氦閮藉厛浣跨敤鍑犱綍鏂規(guī)硶璁$畻浜ょ偣錛屽啀鍒ゆ柇鏄惁鍦ㄥ弬鏁拌寖鍥村唴錛?/li>
  • Geom2dInt_TheIntConicCurveOfGInter錛氫簩嬈℃洸綰夸笌浠繪剰鏇茬嚎姹備氦銆備簩嬈℃洸綰夸笌浠繪剰鏇茬嚎姹備氦閫氳繃綾籊eom2dInt_MyImpParToolOfTheIntersectorOfTheIntConicCurveOfGInter寤虹珛璺濈鏂圭▼錛屼嬌鐢ㄧ被math_FunctionAllRoots鏉ュ鏂圭▼榪涜姹傝В錛?/li>
  • Geom2dInt_TheIntPCurvePCurveOfGInter錛氫換鎰忔洸綰夸笌浠繪剰鏇茬嚎姹備氦銆傝嚜鐢辨洸綰挎眰浜や嬌鐢ㄧ鏁f硶IntCurve_IntPolyPolyGen錛屼嬌鐢ㄧ被Geom2dInt_ThePolygon2dOfTheIntPCurvePCurveOfGInter灝嗘洸綰塊氳繃閲囨牱鐐圭敓鎴愬孌電嚎Polyline錛屼嬌鐢ㄧ被Intf_InterferencePolygon2d璁$畻澶氭綰夸箣闂寸殑綺椾氦鐐癸紝鍐嶄嬌鐢ㄧ被IntCurve_ExactIntersectionPoint閫氳繃綺椾氦鐐規(guī)壘鍒版洸綰夸笂鐨勭簿紜氦鐐癸紱

榪欎簺綾婚兘鏄粠綾籌ntRes2d_Intersection媧劇敓錛?/p>

浠庝笂鍥懼彲鐭ワ紝浜岀淮姹備氦緇撴灉綾籌ntRes2d_Intersection鐩稿叧媧劇敓綾誨彲鐭ヤ簩緇存眰浜や笌HLR綆楁硶涔熸湁鍏崇郴錛岀悊瑙d簩緇存洸綰挎眰浜ら昏緫錛屽鐞嗚ВHLR浠g爜涔熸湁甯姪銆?/p>

3 鑷氦璁$畻

褰撳彧杈撳叆涓鏉℃洸綰挎椂錛屽彲浠ュ鏇茬嚎榪涜鑷氦璁$畻錛屼富瑕佸疄鐜伴昏緫涓猴細(xì)鑻ヤ負(fù)鏅氫簩嬈℃洸綰匡紝鍒欎笉浼?xì)鑷氦锛涜嫢鏄叾浠栨洸绾垮Q屼嬌鐢ㄧ鏁f硶瀵規(guī)洸綰胯繘琛岃嚜浜よ綆椼備唬鐮佸涓嬪浘鎵紺猴細(xì)

4 姹備氦緇撴灉

浜岀淮鏇茬嚎姹備氦緇撴灉淇濆瓨鍒扮被IntRes2d_Intersection涓紝涓昏鍖呭惈涓ら儴鍒嗭細(xì)

  • IntRes2d_IntersectionPoint錛氫氦鐐規(guī)暟鎹紝淇濆瓨浜ょ偣鍧愭爣鍊鹼紝浜ょ偣鍦ㄤ袱涓洸綰夸笂鐨勫弬鏁幫紝鍙婁袱鏉℃洸綰垮湪浜ょ偣澶勭殑榪囨浮鐘舵乀ransition錛?/li>
  • IntRes2d_IntersectionSegment錛氫氦綰挎暟鎹紝褰撲袱鏉℃洸綰挎湁閲嶅彔鏃剁殑鍑犱綍濂囧紓鎯呭喌鏃訛紝姹備氦緇撴灉涓轟氦綰匡紱

鍥犱負(fù)綾籌ntRes2d_Interseciton鐨勬瀯閫犲嚱鏁皃rotected錛屾墍浠ヤ笉鑳界洿鎺ヤ嬌鐢ㄨ繖涓被錛岄兘鏄氳繃鍏舵淳鐢熺被浣跨敤鍑芥暟SetValues()灝嗚綆楀緱鍒扮殑浜ょ偣鍜屼氦綰挎暟鎹繚瀛樿搗鏉ャ傝繖閲岀被鐨勮璁℃瘮杈冪箒鐞愶紝浠g爜鍙鎬ц緝宸?/p>

5 Conclusion

OpenCASCADE瀵逛簬浜岀淮鏇茬嚎姹備氦榪涜鍒嗙被澶勭悊錛屾牴鎹洸綰跨被鍨嬫槸浜屾鏇茬嚎銆佸弬鏁版洸綰垮垎鎴愪笁綾伙細(xì)浜屾鏇茬嚎涓庝簩嬈℃洸綰挎眰浜ゃ佷簩嬈℃洸綰夸笌鍙傛暟鏇茬嚎姹備氦鍜屽弬鏁版洸綰夸笌鍙傛暟鏇茬嚎姹備氦錛屼笉鍚岀殑姹備氦綾誨瀷閲囩敤涓嶅悓鐨勭瓥鐣ュ彲浠ユ彁楂樻眰浜ゆц兘鍜岀ǔ瀹氭с備嬌鐢ㄧ鏁f硶璁$畻浜岀淮鏇茬嚎鑷氦銆備粠姹備氦緇撴灉鏉ョ湅錛屼篃澶勭悊浜嗗嚑浣曞寮傞棶棰橈紝鍗蟲洸綰塊噸鍙犳儏鍐點?/p>

瀵逛簬鏇茬嚎姹備氦榪樻湁寰堝ぇ鏀硅繘絀洪棿錛?/p>

  • 浣跨敤C++緙栫爜椋庢牸閲嶆瀯*.gxx浠g爜錛屾彁楂樹唬鐮佸彲璇繪э紝鏂逛究浠g爜緇存姢錛?/li>
  • 瀵逛簬鑷敱鏇茬嚎姹備氦鐨勭鏁f硶涓綆椾袱鏉″孌電嚎綆楁硶涓紩鍏VH鏉ュ姞閫燂紱
  • 灝嗘洸綰跨鏁f垚澶氭綰挎椂鑰冭檻​鏇茬嚎鐨勬洸鐜囧彉鍖栵紝涓嶈鍧囧寑閲囨牱錛屽噺灝戝孌電嚎鏁伴噺錛?/li>
  • 瀵逛簬涓夌淮鏇茬嚎姹備氦閮芥槸浣跨敤浜嗙鏁f硶錛屽緩璁儚浜岀淮鏇茬嚎姹備氦榪欐牱榪涜鍒嗙被澶勭悊錛屼互鍙婂紩鍏VH錛屾彁楂樻ц兘鍜岀ǔ瀹氭э紱

 



eryar 2023-12-02 12:22 鍙戣〃璇勮
]]>
OpenCASCADE鏇茬嚎涓婄偣鐨勫弽姹?/title><link>http://m.shnenglu.com/eryar/archive/2023/12/02/occt_extrema_pc.html</link><dc:creator>eryar</dc:creator><author>eryar</author><pubDate>Sat, 02 Dec 2023 04:21:00 GMT</pubDate><guid>http://m.shnenglu.com/eryar/archive/2023/12/02/occt_extrema_pc.html</guid><wfw:comment>http://m.shnenglu.com/eryar/comments/230214.html</wfw:comment><comments>http://m.shnenglu.com/eryar/archive/2023/12/02/occt_extrema_pc.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/eryar/comments/commentRss/230214.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/eryar/services/trackbacks/230214.html</trackback:ping><description><![CDATA[<h1 style="text-align: center;"><strong>OpenCASCADE鏇茬嚎涓婄偣鐨勫弽姹?/strong></h1> <p style="text-align: center;"><a href="mailto:eryar@163.com"><u>eryar@163.com</u></a></p> <h2>1 Introduction</h2> <p>鏇茬嚎鍙互鐢ㄤ唬鏁版柟紼嬭〃紺猴紝濡傚渾鍙互鐢╔^2+Y^2=R^2琛ㄧず錛屼篃鍙互鐢ㄥ弬鏁版柟紼媂(u)=RCos(u), Y(u)=RSin(u)琛ㄧず銆傝鍒ゆ柇鐐規(guī)槸涓嶆槸鍦ㄧ嚎涓婏紝鐢ㄦ洸綰夸唬鏁版柟紼嬪彲浠ュ緢鐩存帴寰楀嚭緇撴灉錛屼絾鏄嬌鐢ㄥ弬鏁版柟紼嬪氨娌℃湁閭d箞鐩存帴銆傝繖涔熸槸鍙傛暟鏇茬嚎涓婄偣鐨勫弽姹傞棶棰橈紝鍙傛暟鏇茬嚎涓婄偣鐨勫弽姹傞棶棰樺簲鐢ㄥ箍娉涳紝濡傚墠闈㈡墍榪板垽鏂偣鏄惁鍦ㄦ洸綰夸笂銆佺偣鍚戞洸綰挎姇褰便佺偣涓庣嚎鐨勬眰浜ゃ佺偣鍦ㄥ弬鏁版洸綰夸笂鐨勫弬鏁扮瓑錛岄兘涓庣偣鐨勫弽姹傞棶棰樼浉鍏熾傛湰鏂囦富瑕佺粨鍚堜唬鐮佷粙緇峅penCASCADE鏇茬嚎涓婄偣鐨勫弽姹傚疄鐜板師鐞嗗強浣跨敤榪囩▼涓殑涓浜涙敞鎰忎簨欏廣?/p> <h2>2 瀹炵幇鍘熺悊</h2> <p>鍦ㄣ奣he NURBS Book銆嬩功涓皢鐐圭殑鍙嶆眰闂褰掔粨涓虹偣鍚戞洸綰挎姇褰辮窛紱繪渶鐭殑闂錛屽涓嬪浘鎵紺猴細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223308624-288654811.png" alt="" /></p> <p>寤虹珛鍑芥暟f(u)=C’(u).(C(u) - P)琛ㄧず鐐瑰埌鏇茬嚎璺濈錛屽綋f(u)=0鏃朵負(fù)鐐瑰埌鏇茬嚎鐨勬渶鐭窛紱伙紝涓嶇鐐筆鏄惁鍦ㄦ洸綰夸笂銆傚嚑浣曟剰涔夋槸鐐瑰埌鏇茬嚎浠繪剰鐐圭殑鍚戦噺涓庝換鎰忕偣澶勭殑鍒囧悜閲忕偣縐負(fù)闆訛紝琛ㄧず鍦ㄤ袱涓悜閲忓瀭鐩寸殑鏃跺欐眰寰楁瀬鍊肩偣銆傛敞鎰忔暟瀛︽柟紼嬩腑鍨傜洿榪欎釜鍑犱綍鎰忎箟銆?/p> <p>OpenCASCADE涓疄鐜版洸綰夸笂鐐圭殑鍙嶆眰鍘熺悊涓庛奣he NURBS Book銆嬩功涓竴鑷淬傜偣鐨勫弽姹備嬌鐢ㄧ被GeomLib_Tool::Parameter()鍑芥暟錛?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223325985-1610888534.png" alt="" /></p> <p>杈撳叆鏇茬嚎銆佺偣鍜屾渶澶ц窛紱伙紝璁$畻鐐規(guī)槸鍚﹀湪鏇茬嚎涓婂強鑻ュ湪鏇茬嚎涓婏紝鐐瑰搴斿弬鏁版洸綰跨殑鍙傛暟U銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223340394-1887945485.png" alt="" /></p> <p>綾籈xtrema_ExtPC璁$畻鐐筆鍒扮嚎C鐨勬瀬鍊糆xtrema銆傛牴鎹唬鐮佹敞閲婂彲浠ョ湅鍑虹偣鐨勫弽姹傛暟瀛︽柟紼嬩笌銆奣he NURBS Book銆嬩功涓竴鑷達(dá)細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223354086-1220908578.png" alt="" /></p> <p>鏁板鏂圭▼瀵瑰簲鐨勭被鐨勫彉閲忎負(fù)myF錛岀被鍚嶄負(fù)Extrema_FuncExtPC錛屼粠綾籱ath_FunctionWithDerivative媧劇敓錛屾墍浠ュ繀欏誨疄鐜頒袱涓叧閿櫄鍑芥暟Value()鍜孌erivative()銆傚叾浠g爜娉ㄩ噴璇存槑浜嗚繖涓や釜鍑芥暟鐨勫疄鐜扮粏鑺傦細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223407926-1740284446.png" alt="" /></p> <p>鍏朵腑F(u)瀵瑰簲鍑芥暟Value():</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223417144-1935074213.png" alt="" /></p> <p>DF(u)瀵瑰簲鍑芥暟Derivative()錛屾渶鍚庝嬌鐢∟ewton娉昺ath_FunctionRoots瀵規(guī)柟紼嬭繘琛屾眰鏍廣?/p> <h2>3 娉ㄦ剰浜嬮」</h2> <p>OpenCASCADE涓偣鐨勫弽姹侴eomLib_Tool::Parameter()銆佺偣鍚戞洸綰挎姇褰盙eomAPI_ProjectPointOnCurve銆佺偣涓庢洸綰跨殑浜ょ偣IntTools_Context::ComputeVE絳夌畻娉曢兘鏄嬌鐢ㄤ簡Extrema_ExtPC綾匯?/p> <p> </p> <p>褰撲嬌鐢℅eomLib_Tool::Parameter()鍑芥暟鏉ュ垽鏂偣鏄惁鍦ㄦ洸綰夸笂鏃訛紝娉ㄦ剰绔偣澶勭偣鐨勫弽姹傝婊¤凍鍨傜洿鐨勬潯浠訛紝鍗充嬌鐐逛笌鏇茬嚎鏌愪釜绔偣璺濈灝忎簬MaxDist鏃訛紝涔熸槸榪斿洖false銆傚嵆瀵逛簬鏇茬嚎绔偣澶勭殑鎯呭喌闇瑕佽嚜宸遍鍏堝鐞嗭紝鐩存帴綆楃偣P涓庢洸綰跨鐐硅窛紱諱笌MaxDist姣旇緝錛屽厛澶勭悊绔偣銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223438492-2031001366.png" alt="" /></p> <p>鍙互鐪嬪埌榪欓噷涔熷鐞嗙殑绔偣澶勭殑鎯呭喌錛屼絾鏄渶鍚庢病鏈変笌MaxDist鏈夊叧緋伙紝鏈鍚庡宸槸Precision::SquareConfusion()銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202311/534255-20231121223453107-31137009.png" alt="" /></p> <p id="1700577295832"></p> <p> </p> <img src ="http://m.shnenglu.com/eryar/aggbug/230214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/eryar/" target="_blank">eryar</a> 2023-12-02 12:21 <a href="http://m.shnenglu.com/eryar/archive/2023/12/02/occt_extrema_pc.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OpenCASCADE - 鏇茬嚎鑷氦http://m.shnenglu.com/eryar/archive/2023/12/02/occt_edge_self_intersect.htmleryareryarSat, 02 Dec 2023 04:21:00 GMThttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_edge_self_intersect.htmlhttp://m.shnenglu.com/eryar/comments/230213.htmlhttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_edge_self_intersect.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230213.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230213.htmlOpenCASCADE - 鏇茬嚎鑷氦

1 Introduction

OpenCASCADE涓轟簩緇存洸綰挎彁渚涗簡姹備氦鍙婅嚜浜ょ殑綾?Geom2dAPI_InterCurveCurve錛氬綋浼犲叆涓涓簩緇村嚑浣曟洸綰挎椂鍙互璁$畻鑷氦self-intersections銆備絾鏄病鏈夋彁渚涚洿鎺ョ殑涓夌淮鍑犱綍鏇茬嚎姹備氦鐨勭被錛屼篃娌℃湁鐩存帴鐨勮綆楄嚜浜ょ殑綾匯傛湁浜哄悓瀛﹂棶OpenCASCADE鏈夋病鏈変笁緇存洸綰胯嚜浜ょ殑鍔熻兘錛屽叾瀹炵悊瑙d袱涓狤dge姹備氦綆楁硶鍚庯紝鍙互鑷繁瀹炵幇涓涓嚜浜ゅ嚱鏁般?/p>

2 Self-Intersection

鍥犱負(fù)OpenCASCADE涓袱鏉′笁緇存洸綰挎眰浜ょ殑綾繪槸IntTools_EdgeEdge錛屽叾瀹炵幇鍘熺悊鏄熀浜庡寘鍥寸洅鐨勫垎鍓叉硶銆傚熀浜庤繖涓垎鍓查掑綊鎬濇兂錛屽疄鐜拌嚜浜や篃鍙互鍙傝冭繖涓濊礬銆傜畻娉曠殑嫻佺▼涓猴細(xì)杈撳叆涓鏉¤璁$畻鑷氦鐨勮竟Edge錛屽杈硅繘琛岀鏁i噰鏍鳳紝灝嗛噰鏍峰緱鍒扮殑姣忔鏇茬嚎鐨勫寘鍥寸洅鐢熸垚BVH榪涜鐩鎬氦媯嫻嬶紝灝咮VH涓寘鍥寸洅鐩鎬氦鐨勪袱鏉℃洸綰胯皟鐢↖ntTools_EdgeEdge鏉ヨ綆楃浉浜ゃ?/p>

紱繪暎寰楀埌鐨勬洸綰挎浼?xì)姣旇緝澶氬Q屽鏋滅敤涓や釜寰幆鏉ユ嫻嬩袱涓ゆ洸綰挎鐨勭浉浜ゆ儏鍐墊ц兘宸紝鍙互寮曞叆BVH鎻愰珮鎬ц兘銆?/p>

3 Test

鍙互閫氳繃鎻掑糏nterpolate鏉ユ瀯閫犳洸綰挎祴璇曪紝鎸囧畾鍑犱釜鑷氦鐐規(guī)潵鏋勯犳彃鍊兼洸綰褲傝綆楃粨鏋滃涓嬪浘鎵紺猴細(xì)

涓庢洸綰挎眰浜ゅ師鐞嗙被浼鹼紝閮芥槸浣跨敤紱繪暎鐨勬柟娉曪紝鍙互鎬濊冧竴涓嬫暟鍊肩畻娉曞浣曞鐞嗐?/p>

eryar 2023-12-02 12:21 鍙戣〃璇勮
]]>
OpenCASCADE 鏇茬嚎姹備氦http://m.shnenglu.com/eryar/archive/2023/12/02/occt_int_edge_edge.htmleryareryarSat, 02 Dec 2023 04:20:00 GMThttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_int_edge_edge.htmlhttp://m.shnenglu.com/eryar/comments/230212.htmlhttp://m.shnenglu.com/eryar/archive/2023/12/02/occt_int_edge_edge.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230212.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230212.htmlOpenCASCADE 鏇茬嚎姹備氦

eryar@163.com

1 Introduction

OpenCASCADE涓彁渚涗簡浜岀淮鍑犱綍鏇茬嚎鐨勬眰浜ょ被Geom2dAPI_InterCurveCurve錛屽搴斿埌涓夌淮鍑犱綍鍙彁渚涗簡GeomAPI_IntCS, GeomAPI_IntSS錛屾病鏈夋彁渚涘嚑浣曠殑GeomAPI_IntCC姹備氦綾匯傝繖浜涘嚑浣曟眰浜や竴鑸嬌鐢ㄧ殑鏄暟鍊肩畻娉曪紝鍗寵В鏂圭▼銆傚浜庝袱鏉″嚑浣曟洸綰縋(u1), Q(u2)錛屾眰浜ゅ氨鏄ВP(u1) - Q(u2) = 0榪欎釜鏂圭▼銆備負(fù)浠涔堝浜庝笁緇村嚑浣曟洸綰挎病鏈夋彁渚涙暟鍊肩畻娉曪紵

瀵逛簬鎷撴湸杈規(guī)彁渚涗簡姹備氦綆楁硶IntTools_EdgeEdge錛岃繖涓被鏄嬌鐢ㄧ被浼間簬鏇查潰姹備氦鐨勭鏁g綉鏍兼硶錛屼嬌鐢ㄤ簡紱繪暎鍖呭洿鐩掓硶銆?/p>

鍩轟簬鍖呭洿鍚堢洅鐨勭畻娉曟槸涓掑綊綆楁硶錛岀畻娉曟濊礬錛?/p>

  1. 1) 媯鏌ヤ袱鏉¤竟鍦ㄥ弬鏁拌寖鍥村唴鐨勫寘鍥寸洅錛岃嫢絀洪棿騫叉秹錛屽垯榪涜涓嬩竴姝ワ紱鍚﹀垯閫鍑烘湰嬈″垽鏂紱
  2. 2) 鎵懼嚭涓ゆ潯杈瑰寘鍥寸洅鐨勫叕鍏遍儴鍒嗗搴旂殑鍙傛暟錛岃嫢娌℃壘鍒幫紝鍒欓鍑烘湰嬈″垽鏂紱
  3. 3) 騫跺皢絎竴鏉¤竟鍦ㄥ弬鏁拌寖鍥村唴鍒嗗壊鎴?鎴?閮ㄥ垎錛屾墽琛岀涓姝ワ紱
  4. 4) 閫鍑烘潯浠訛細(xì)娌℃湁鐩鎬氦鎴栨壘鍒扮浉浜ょ殑鍙傛暟鍊鹼紱

絎竴嬈℃槸鍒嗗埆鍒嗘垚2閮ㄥ垎錛?/p>

鍦ㄩ掑綊鍑芥暟FindSolutions()涓紝鍙幓瀵圭涓鏉¤竟榪涜鍙傛暟鍒嗗壊鎴?閮ㄥ垎錛?/p>

2 杈呭姪鍑芥暟

絎竴涓緟鍔╁嚱鏁版槸FindParameters()錛岀敤鏉ユ洿鏂扮浜屾潯杈瑰湪絎竴鏉¤竟鐨勭殑鍖呭洿鐩掍腑鐨勫弬鏁拌寖鍥達(dá)紝浣跨敤榪欎釜鍙傛暟鑼冨洿鏇存柊鍖呭洿鐩掋?/p>

絎簩涓緟鍔╁嚱鏁版槸CheckCoincidence()錛岀敤鏉ユ嫻嬩袱孌佃竟鏄惁閲嶅悎銆傜涓姝ユ槸蹇熻綆楋紝瀵硅竟閲囨牱10涓偣錛岃嫢閫氳繃鍒濇綺楁嫻嬶紝鍚庨潰鍐嶆繁鍏ヨ綆椼傝繖浜涚畻娉曢兘涓嶅お楂樻晥銆?/p>

絎笁涓緟鍔╁嚱鏁版槸IsIntersection()鐢ㄦ潵鍒ゆ柇涓よ竟鏉″湪鍙傛暟鑼冨洿鍐呮槸鍚︾浉浜ゃ?/p>

3 嫻嬭瘯

灝嗕袱鏉¤竟姹備氦榪囩▼涓殑鍖呭洿鐩掓樉紺哄嚭鏉ワ紝鏂逛究鏌ョ湅鐞嗚В綆楁硶銆傚厛嫻嬭瘯涓や釜鍦嗕箣闂寸殑鐩鎬氦錛?/p>

鍏朵腑絎竴鏉¤竟鏄豢鑹茬殑鍦嗭紝姹備氦榪囩▼涓殑鍖呭洿鐩掍篃鐢ㄧ豢鑹茶〃紺猴紱絎簩鏉¤竟鏄孩鑹茬殑鍦嗭紝姹備氦榪囩▼涓殑鍖呭洿鐩掍篃鐢ㄧ孩鑹茶〃紺恒傚洜涓哄渾鏄棴鍚堢殑錛岀涓嬈¢兘鍒嗗壊鎴?閮ㄥ垎銆傚皢涓婇潰浜ょ偣澶勭悊鏀懼ぇ錛?/p>

鍚庨潰閮芥槸灝嗙涓鏉¤竟鍒嗗壊鎴?閮ㄥ垎錛岀劧鍚庡垎鍒敤榪?閮ㄥ垎鐨勫寘鍥寸洅鍘繪壘涓庣浜屾潯杈圭浉浜ょ殑鍙傛暟鑼冨洿錛屽啀鏇存柊絎簩鏉¤竟鐨勫寘鍥寸洅銆傜戶緇斁澶т笂闈氦鐐瑰錛?/p>

鍙戠幇瀵逛簬涓や釜鍦嗙殑姹備氦錛屾墽琛屼簡100嬈★紝鏁堢巼涓嶉珮銆傚張鐢ㄤ袱涓狟鏍鋒潯鏇茬嚎姹備氦鏉ユ祴璇曪細(xì)

鍙戠幇瀵逛簬B鏍鋒潯鏇茬嚎姹備氦閫熷害杈冨揩銆?/p>

4 Conclusion

鏇茬嚎姹備氦闇瑕佽冭檻閲嶅悎閮ㄥ垎錛宱pencascae涓病鏈変嬌鐢ㄦ暟鍊肩畻娉曟潵璁$畻錛岃屾槸閲囩敤鍩轟簬鍖呭洿鐩掔殑綆楁硶鏉ュ鐞嗐傝繖縐嶇畻娉曚竴鑸儏鍐典笅鍙互蹇熸壘鍒版眰浜よВ錛屾湁鏃墮掑綊杈冩繁錛屽浜庡熀鏈洸綰垮彲浠ュ儚鏇查潰姹備氦涓鏍峰垎綾誨鐞嗕互鎻愰珮鎬ц兘銆俹pencascade涓浜庝笁緇存洸綰挎眰浜ょ畻娉曟ц兘榪樻湁浼樺寲絀洪棿銆?/p>

 



eryar 2023-12-02 12:20 鍙戣〃璇勮
]]>
[涔-OpenCASCADE鍙傝冧功綾?/title><link>http://m.shnenglu.com/eryar/archive/2023/12/02/occt_book.html</link><dc:creator>eryar</dc:creator><author>eryar</author><pubDate>Sat, 02 Dec 2023 04:19:00 GMT</pubDate><guid>http://m.shnenglu.com/eryar/archive/2023/12/02/occt_book.html</guid><wfw:comment>http://m.shnenglu.com/eryar/comments/230210.html</wfw:comment><comments>http://m.shnenglu.com/eryar/archive/2023/12/02/occt_book.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/eryar/comments/commentRss/230210.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/eryar/services/trackbacks/230210.html</trackback:ping><description><![CDATA[<p>瀛﹁屼笉鎬濆垯緗旓紝鎬濊屼笉瀛﹀垯孌嗐傚厜鐪嬩功綾嶇殑鐞嗚鐭ヨ瘑錛屾病鏈夊疄璺電湅涓嶅埌鏁堟灉銆傚厜鐪媜cc鐨勬簮鐮侊紝娌℃湁鐞嗚鏀拺錛屼笉鑳芥姄浣忓嚑浣曢棶棰樼殑鏈川銆?/p> <p>闄や簡鍦∣penCASCADE鍏ラ棬鎸囧崡涓帹鑽愮殑涔︾睄涔嬪錛岃繕鏈変竴浜涜繘闃剁殑涔︾睄錛屾斁鍦ㄩ偅鍎挎湁鏃墮棿灝辯湅鐪嬶紝鎬諱細(xì)鏈変簺鏀惰幏銆傛?zhèn)熸т笉瓚籌紝鍙湁鍕よ兘琛ユ嫏銆傚浜庣湅涓嶆噦鐨勶紝鍙兘鐢?ldquo;涔﹁鐧鵑亶錛屽叾涔夎嚜瑙?rdquo;瀹夋叞涓涓嬭嚜宸便?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202310/534255-20231030202652972-1591293169.jpg" alt="" /></p> <p id="1698668816128">鐜嬪厓 鏁板澶ц緸鍏?nbsp; 宸ュ叿涔?nbsp; 鏂逛究涓浜涘畾涔夛紝鍏紡錛屽畾鐞嗙殑鏌ユ壘銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202310/534255-20231030202814672-30785715.jpg" alt="" /></p> <p id="1698668897899">銆婅綆楁満杈呭姪鍑犱綍璁捐瀵艱銆嬫瘮杈冨叏闈㈠湴浠嬬粛浜嗚綆楁満杈呭姪鍑犱綍璁捐鐨勫彂灞曞巻鍙插強鍏朵富瑕佸唴瀹瑰拰鏈鏂拌繘灞曪紝鍖呮嫭鐜頒唬鐨凾鏍鋒潯鏇茬嚎鏇查潰銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202310/534255-20231030202949643-100965336.jpg" alt="" /></p> <p>銆婃牱鏉″嚱鏁頒笌璁$畻鍑犱綍銆嬪彊榪版牱鏉″嚱鏁板拰璁$畻鍑犱綍鐨勫熀鏈悊璁哄拰鏂規(guī)硶錛屽悓鏃訛紝鎬葷粨浜嗕綔鑰呭嚑騫存潵鍦ㄨ棰嗗煙涓殑鐮旂┒鎴愭灉.</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202310/534255-20231030203039481-1856922148.jpg" alt="" /></p> <p id="1698669042045">銆婄幇浠f暟瀛﹀熀紜涓涗功165錛氭暎涔辨暟鎹嫙鍚堢殑妯″瀷銆佹柟娉曞拰鐞嗚錛堢浜岀増錛夈嬩粙緇嶄簡澶氬厓鏁d貢鏁版嵁鎷熷悎鐨勪竴鑸柟娉曪紝鍖呮嫭澶氬厓鏁d貢鏁版嵁澶氶」寮忔彃鍊箋佸熀浜庝笁瑙掑墫鍒嗙殑鎻掑兼柟娉曘丅oole鍜屼笌Loons鏇查潰銆丼ibson鏂規(guī)硶鎴栬嚜鐒墮偦榪戞硶銆丼hepard鏂規(guī)硶銆並riging鏂規(guī)硶銆佽杽鏉挎牱鏉℃柟娉曘丮Q鎷熸彃鍊兼硶銆佸緞鍚戝熀鍑芥暟鏂規(guī)硶銆佽繍鍔?灝忎簩涔樻硶銆侀殣鍑芥暟鏍鋒潯鏂規(guī)硶銆丷鍑芥暟娉曠瓑銆傚悓鏃惰繕鐗瑰埆浠嬬粛浜嗚繎騫存潵鍥介檯涓婅秺鏉ヨ秺鐑茍鍦ㄦ棤緗戞牸寰垎鏂圭▼鏁板艱В鏂歸潰鏈夎澶氬簲鐢ㄧ殑寰勫悜鍩哄嚱鏁版柟娉曞強鍏剁浉鍏崇悊璁恒?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202310/534255-20231030203210737-959037925.jpg" alt="" /></p> <p id="1698669133469">涓昏鍐呭鍖呮嫭鍑犱綍鍋忓井鍒嗘柟紼嬬殑鏋勯犳柟娉曘佸悇縐嶅井鍒嗗嚑浣曠畻瀛愮殑紱繪暎鍖栨柟娉曞強鍏剁鏁f牸寮忕殑鏀舵暃鎬с佸嚑浣曞亸寰垎鏂圭▼鏁板兼眰瑙g殑鏈夐檺宸垎娉曘佹湁闄愬厓娉曚互鍙婃按騫抽泦鏂規(guī)硶錛岃繕鍖呮嫭鍑犱綍鍋忓井鍒嗘柟紼嬪湪鏇查潰騫蟲粦銆佹洸闈㈡嫾鎺ャ丯杈規(guī)礊濉ˉ銆佽嚜鐢辨洸闈㈣璁°佹洸闈㈤噸鏋勩佹洸闈㈡仮澶嶃佸垎瀛愭洸闈㈡瀯閫犱互鍙婁笁緇村疄浣撳嚑浣曞艦鍙樹腑鐨勫簲鐢ㄣ?/p> <p id="1698668992693"></p> <img src ="http://m.shnenglu.com/eryar/aggbug/230210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/eryar/" target="_blank">eryar</a> 2023-12-02 12:19 <a href="http://m.shnenglu.com/eryar/archive/2023/12/02/occt_book.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OpenCASCADE 鎵帬鏇查潰http://m.shnenglu.com/eryar/archive/2023/09/29/occt_sweep.htmleryareryarFri, 29 Sep 2023 13:38:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/29/occt_sweep.htmlhttp://m.shnenglu.com/eryar/comments/230116.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/29/occt_sweep.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230116.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230116.htmlOpenCASCADE 鎵帬鏇查潰

eryar@163.com

1 Introduction

钂欑毊錛?strong>Skinning錛夊氨鏄皢涓綈囨埅闈㈡洸綰匡紙section curves錛夎瀺鍚堝湪涓璧風(fēng)敓鎴愭洸闈㈢殑榪囩▼銆傝挋鐨彧鏄?strong>鏀炬牱錛?strong>Lofting錛夌殑鏂板悕璇嶏紝鏀炬牱鍙互榪芥函鍒拌綆楁満娌℃湭璇炵敓鐨勬椂鍊欙紝浠庨偅鏃跺埌鐜板湪錛屽畠涓鐩村湪閫犺埞銆佹苯杞﹀拰鑸┖宸ヤ笟涓騫挎硾鍦板簲鐢ㄣ?/p>

鎵帬錛?strong>Sweep錛夌爺絀剁殑鏄竴鏉℃埅闈㈡洸綰挎部浠繪剰璺緞鏇茬嚎鎵帬鐨勯棶棰樸傛牴鎹壂鎺犳洸闈㈢殑瀹氫箟錛屾壂鎺犳洸闈㈡湭蹇呴兘鑳借〃紺烘垚NURBS褰㈠紡錛屾墍浠ヤ竴鑸噰鐢ㄦ嫙鍚堢畻娉曟潵閫艱繎銆備竴縐嶇畻娉曟槸鍩轟簬钂欑毊娉曪紝娌跨潃璺緞鏇茬嚎鍙樻崲鍜岄噰鏍種涓埅闈紝鐒跺悗灝嗗畠浠綔涓烘埅闈㈡洸綰胯繘琛岃挋鐨傞殢鐫閲囨牱鏁伴噺N鐨勫鍔狅紝鐢熸垚鐨勬嫙鍚堟洸闈㈢簿搴︿篃灝嗘彁楂樸?/p>

鏈枃涓昏浠嬬粛OpenCASCADE涓壂鎺犻犲瀷綆楁硶鐨勪嬌鐢紝闄や簡涓婇潰涓鑸殑鎵帬鏇查潰錛岃繕鏈変竴浜涢珮綰х敤娉曘?/p>

2 Sweep with Guide

鍦―Raw Test Harness涓緭鍏ュ懡浠etsweep鍙互鐪嬪埌鏈夋寚瀹氬紩瀵?綰縂uide鐨勯夐」錛?/p>

榪欎釜寮曞綰縂uide鏈変粈涔堢敤鍛紵涓嬮潰緇欏嚭涓涓ず渚嬶細(xì)

鍏朵腑Profile鏄壂鎺犳埅闈紝Spine涓烘壂鎺犺剨綰匡紝Guide涓烘壂鎺犲紩瀵肩嚎銆傛壂鎺犵粨鏋滃氨鏄竴涓灪鏃嬬殑閽誨ご妯″瀷銆傚湪Draw Test Harness鐨勪緥瀛愪腑錛岀粰鍑轟袱涓叧浜庡紩瀵肩嚎鎵帬鐨勭ず渚嬶紝涓や釜閽誨ご錛?/p>

鎶婅繖涓や釜渚嬪瓙鐞嗚В鍩烘湰鑳芥帉鎻℃壂鎺犵畻娉曠殑浣跨敤鏂規(guī)硶錛屼粠榪欎袱涓緥瀛愬彲浠ョ湅鍑猴紝OpenCASCADE鎵帬閫犲瀷鑳藉姏榪樹笉閿欍?/p>

3 Sweep on Face

鎵帬榪樻湁涓涓兘鍔涙槸浣挎壂鎺犳埅闈㈠瀭鐩翠簬涓涓敮鎾戦潰錛岃繖鏄竴涓湁鐢ㄧ殑閫夐」銆備笅闈㈣繕鏄湪Draw Test Harness涓祴璇曚竴涓嬶細(xì)

4 Conclusion

OpenCASCADE涓壂鎺犻犲瀷綆楁硶鍔熻兘榪樻瘮杈冨己澶э紝闄や簡鏀寔甯歌鐨勬壂鎺犲錛岃繕鏀寔甯﹀紩瀵肩嚎鐨勬壂鎺狅紝鍙婂甫寮曞綰跨殑澶氫釜鎴潰鐨勫彉褰㈡壂鎺狅紝榪樻敮鎸佹埅闈㈠緇堝瀭鐩翠簬鏀寔闈㈢殑鎵帬閫夐」銆傛壂鎺犵殑鍏抽敭鏄‘瀹氭埅闈㈢殑鍙樻崲瑙勫垯錛屽簳灞傜殑钂欑毊鎷熷悎綆楁硶榪樻槸姣旇緝紼沖畾鐨勩傛妸Draw Test Harness涓袱涓捇澶寸殑渚嬪瓙鐞嗚В鍚庯紝鍩烘湰涓婂簲璇ヨ兘澶熸帉鎻penCASCADE涓壂鎺犻犲瀷鐨勪嬌鐢ㄦ柟娉曘?/p>

 



eryar 2023-09-29 21:38 鍙戣〃璇勮
]]>
甯冨皵鏁版嵁 闈㈢殑鐩鎬氦http://m.shnenglu.com/eryar/archive/2023/09/29/occt_int_face.htmleryareryarFri, 29 Sep 2023 10:45:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/29/occt_int_face.htmlhttp://m.shnenglu.com/eryar/comments/230114.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/29/occt_int_face.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230114.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230114.html甯冨皵鏁版嵁 闈㈢殑鐩鎬氦

eryar@163.com

1 Introduction

OpenCASCADE涓闈㈢殑鐩鎬氦瀹氫箟濡備笅鍥炬墍紺猴細(xì)

涓夌淮絀洪棿涓袱涓甫鏈塆eometry Surface鐨勯潰Face錛屽綋涓や釜Surface涔嬮棿鐨勮窛紱誨皬浜嶧ace涓殑瀹瑰樊Tolerance錛屽垯璁や負(fù)鏄浉浜ょ殑銆備竴鑸袱涓潰涔嬮棿鐩鎬氦寰楀埌鐨勬槸浜ょ嚎錛岃繕鏈変竴浜涙儏鍐靛緱鍒扮殑鏄氦鐐癸紝濡備笅鍥炬墍紺猴細(xì)

甯冨皵榪愮畻涓潰鐨勭浉浜ゆ槸鐩稿澶嶆潅鐨勯棶棰橈紝闄や簡鑰冭檻涓婅堪浜ょ嚎鍜屼氦鐐圭殑闂浠ュ錛岃繕瑕佽冭檻鏈夐噸鍙犵殑鎯呭喌錛涘浜庢柊鐢熸垚鐨勪氦綰匡紝榪樿鑰冭檻鐢熸垚PCurve錛涜嫢闈笂鏈夊紑瀛旓紝榪樿灝嗙┛榪囧紑瀛斿尯鍩熺殑浜ょ嚎鎺掗櫎絳夛紱鏈鍚庤鑰冭檻濡備綍淇濆瓨闈㈢浉浜ょ殑緇撴灉銆傜浉浜ょ殑璁$畻鍦ㄥ嚱鏁幫細(xì)

鏈緇堟槸璋冪敤IntTools_FaceFace鏉ヨ綆椾袱涓潰鐨勭浉浜ゃ傚茍灝嗚綆楃粨鏋滀氦綰垮拰浜ょ偣錛屾槸鍚﹂噸鍙犵瓑淇℃伅淇濆瓨鍒癇OPDS_InterfFF涓細(xì)

2 Face Info

綾籅OPDS_FaceInfo鐢ㄦ潵瀛樺偍浠ヤ笅淇℃伅錛?/p>

娉ㄦ剰PBo31鍜孭BSc1錛屼竴涓姸鎬佹槸On錛屼竴涓姸鎬佹槸Section銆傚湪鐩鎬氦澶勭悊綾籅OPAlgo_PaveFiller涓氳繃鍑芥暟BOPAlgo_PaveFiller::UpdateFaceInfo灝嗚繖浜涚浉浜ょ殑鐘舵佹洿鏂般?/p>

3 Tangent Face

浠庡墠闈㈢殑鏂囩珷鍏充簬媯嫻嬭竟涓庤竟銆佽竟涓庨潰鏄惁鏈夐噸鍙犳椂閲囩敤浜嗗浐瀹氶噰鏍風(fēng)偣鏉ュ鐞嗙殑涓嶄弗璋ㄧ殑閫昏緫鏉ョ湅錛屽垽鏂嚎鐨勯噸鍙犳槸涓鏉傜殑闂錛屽垽鏂潰涓庨潰鐨勯噸鍙犲氨鐩稿鏇村鏉傘傛湰鏂囧厛浠庣畝鍗曞叆鎵嬶紝鍏堢湅瀵逛簬鏈綆鍗曠殑涓や釜騫抽潰閲嶅彔鐨勬嫻嬶紝寮曞嚭澶у瀵逛簬浠繪剰涓や釜闈㈤噸鍙犲尯鍩熸嫻嬬殑鎬濊冦傚榪欑鐗規(guī)畩鐨勬儏鍐靛鐞嗗湪IntTools_FaceFace涓殑鍑芥暟PerformPlanes()涓疄鐜般傚叾涓嬌鐢ㄤ簩嬈℃洸闈㈢殑鍑犱綍姹備氦娉曡繘琛屽鐞嗭紝婧愮爜濡備笅錛?/p>

閫氳繃婧愮爜鍙互鐪嬪嚭錛岃嫢涓や釜騫抽潰涔嬮棿鐨勬硶鍚戝す瑙掑皬浜嶵olAng鍙婅窛紱誨皬浜嶵ol鏃訛紝鍒欒涓轟袱涓潰鏄竴鏍風(fēng)殑IntAna_Same錛涘綋璺濈澶т簬Tol鏃訛紝鍒欒涓烘病鏈夌浉浜ntAna_Empty銆?/p>

瀵逛簬閲嶅彔鐨勫鉤闈紝灝唗heTangentFaces璁劇疆鎴恡rue琛ㄧず鏄噸鍙犵殑銆傝繖閲岀暀涓嬩竴涓棶棰樺ぇ瀹舵濊冿細(xì)濡備綍鍒ゆ柇鑷敱鏇查潰鐨勯噸鍙犳儏鍐碉紵

4 Hole

褰撻潰涓婃湁瀛旀礊鏃訛紝榪樿瀵逛氦綰胯繘琛屽鐞嗭紝浠ユ帓闄ゆ帀瀛旀礊涓殑浜ょ嚎銆傚綋浣跨敤IntTools_FaceFace鏉ヨ綆椾袱涓潰鐨勪氦綰挎椂錛屽彲浠ョ湅鍒頒氦綰跨殑鑼冨洿涓嶆紜紝娌℃湁澶勭悊瀛旀礊鎯呭喌錛岀敋鑷充篃娌℃湁澶勭悊闈㈢殑杈圭晫銆傚涓嬪浘鎵紺虹孩鑹茬殑浜ょ嚎涓轟嬌鐢↖ntTools_FaceFace璁$畻寰楀埌鐨勶細(xì)

褰撲嬌鐢˙OPAlgo_PaveFiller璁$畻浜ょ嚎騫剁粨鍚圥aveBlock寰楀埌浜ょ嚎鏄劇ず濡備笅鍥炬墍紺猴細(xì)

铏界劧璁$畻涓や釜闈箣闂寸殑鐩鎬氦澶勭悊鏈緇堟槸璋冪敤鐨処ntTools_FaceFace錛屼絾鏄寰楀埌姝g‘鐨勪氦綰塊渶瑕佷嬌鐢ㄧ被BOPAlgo_PaveFiller銆傝繖閲屼篃鐣欎笅闂渚涘ぇ瀹舵濊冿細(xì)涓轟粈涔圛ntTools_FaceFace璁$畻鐨勪氦綰胯寖鍥翠笉姝g‘錛熶負(fù)浠涔圔OPAlgo_PaveFiller璁$畻鐨勪氦綰挎紜紵

5 Conclusion

緇間笂鎵榪幫紝甯冨皵鏁版嵁涓潰鐨勭浉浜ょ殑緇撴灉鍙兘鏈変氦綰匡紝涔熷彲鑳芥湁浜ょ偣銆傚皢姹備氦緇撴灉淇濆瓨鍒癋aceInfo涓備粠綆鍗曠殑涓や釜騫抽潰閲嶅彔鏉ョ湅錛屽皢閲嶅彔鐨勭姸鎬佺敤鍙橀噺theTangetFaces鏉ヤ繚瀛樸傞偅浠繪剰涓や釜鏇查潰閲嶅彔濡備綍鍒ゆ柇鍛紵闈㈢殑鐩鎬氦铏界劧鎻愪緵綾籌ntTools_FaceFace鏉ヨ綆楋紝浣嗘槸娌℃湁姝g‘澶勭悊浜ょ嚎鐨勮寖鍥達(dá)紝涓轟粈涔圔OPAlgo_PaveFiller涓彲浠ユ紜鐞嗕氦綰垮憿錛?/p>

 

紲濆ぇ瀹朵腑縐嬪浗搴嗚妭鏃ュ揩涔愶紒

 



eryar 2023-09-29 18:45 鍙戣〃璇勮
]]>
甯冨皵鏁版嵁 杈圭殑鐩鎬氦http://m.shnenglu.com/eryar/archive/2023/09/27/occt_edge_int.htmleryareryarWed, 27 Sep 2023 13:52:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/27/occt_edge_int.htmlhttp://m.shnenglu.com/eryar/comments/230108.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/27/occt_edge_int.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230108.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230108.html甯冨皵鏁版嵁 杈圭殑鐩鎬氦

eryar@163.com

1 Introduction

鍦∣penCASCADE涓浜庤竟鐨勭浉浜ゅ垎涓轟笁綾伙細(xì)杈逛笌鐐癸紝杈逛笌杈癸紝杈逛笌闈紝杈逛笌鐐圭殑鐩鎬氦宸茬粡褰掔粨涓虹偣涓庤竟鐨勭浉浜ゅ鐞嗕簡錛岃竟鐨勭浉浜や富瑕佸鐞嗚竟涓庤竟錛岃竟涓庨潰鐨勭浉浜ゃ傝竟涓庤竟銆佽竟涓庨潰鐨勭浉浜や細(xì)寮曞叆涓涓柊鐨勬暟鎹粨鏋?鍏叡閮ㄥ垎Common Part錛岀敤浜庝繚瀛橀噸鍙犵殑鍏叡閮ㄥ垎鏁版嵁銆?/p>

2 Edge/Edge Interferences

瀵逛簬涓ゆ潯杈圭殑鐩鎬氦鏄寚鍦ㄤ袱鏉¤竟鐨勬煇浜涘湴鏂圭殑璺濈灝忎簬杈圭殑瀹瑰樊涔嬪拰錛屼富瑕佸垎涓轟袱縐嶆儏鍐碉紝涓縐嶆槸涓ゆ潯杈瑰彧鏈変竴涓氦鐐圭殑鎯呭喌錛涗竴縐嶆槸鏈夐噸鍙犻儴鍒嗙殑鎯呭喌錛涘厛鐪嬪彧鏈変竴涓氦鐐規(guī)儏鍐碉細(xì)

鎴戜滑鍦―RAW涓氳繃鑴氭湰鏋勯犳渶綆鍗曠殑鎯呭喌鏉ユ祴璇曘?/p>

鍦ㄥ鐞嗚竟涓庤竟鐩鎬氦鐨勫嚱鏁癇OPAlgo_PaveFiller::PerformEE()涓紝瀵規(guī)瘡涓ゆ潯杈硅皟鐢˙OPAlgo_EdgeEdge榪涜姹備氦銆備粠榪欓噷鍙互鐪嬪埌Pave Block鐨勪嬌鐢紝鐩稿綋浜庡姣忎袱鏉¤竟涓婄殑姣忓Pave Block閮ㄥ垎榪涜姹備氦銆傝繖閲屾湁涓浜涗紭鍖栫┖闂達(dá)紝鐩墠鏄嬌鐢ㄧ殑涓や釜寰幆澶勭悊錛屽彲浠ュ皾璇曚嬌鐢˙VH鏉ユ彁鍗囦竴浜涙ц兘銆傚綋姣忓Pave Block瀵瑰簲鐨勭偣鐨勭儲寮曞彿涓鑷存椂錛屽嵆姣忓Pave Block鐨勭鐐歸噸鍙犳椂錛屼嬌鐢ㄥ揩閫熻綆楃殑綆楁硶鏉ュ垽鏂槸鍚︽湁閲嶅彔銆?/p>

瀵逛簬杈圭殑姹備氦緇撴灉淇濆瓨鍒癇OPDS_InterfEE涓紝閮戒細(xì)淇濆瓨鏄摢涓ゆ潯杈圭浉浜ゅ強鐩鎬氦鐨勫叕鍏遍儴鍒嗐傚浜庣浉浜や簬涓鐐圭殑鍏叡閮ㄥ垎鐨勭被鍨嬩負(fù)TopAbs_VERTEX錛屽浜庢湁閲嶅彔閮ㄥ垎鐨勫叕鍏遍儴鍒嗙被鍨嬩負(fù)TopAbs_EDGE錛?/p>

褰撲袱杈規(guī)潯鏈夐噸鍙犻儴鍒嗘椂錛屽涓嬪浘鎵紺猴細(xì)

濡備綍媯嫻嬩袱鏉¤竟鐨勫叕鍏遍儴鍒嗗憿錛熷湪鍑芥暟IntTools_EdgeEdge::IsCoincident()涓疄鐜幫細(xì)

//=======================================================================
//function :  IsCoincident
//purpose  : 
//=======================================================================
Standard_Boolean IntTools_EdgeEdge::IsCoincident() 
{
  Standard_Integer i, iCnt, aNbSeg, aNbP2;
  Standard_Real dT, aT1, aCoeff, aTresh, aD;
  Standard_Real aT11, aT12, aT21, aT22;
  GeomAPI_ProjectPointOnCurve aProjPC;
  gp_Pnt aP1;
  //
  aTresh=0.5;
  aNbSeg=23;
  myRange1.Range(aT11, aT12);
  myRange2.Range(aT21, aT22);
  //
  aProjPC.Init(myGeom2, aT21, aT22);
  //
  dT=(aT12-aT11)/aNbSeg;
  //
  iCnt=0;
  for(i=0; i <= aNbSeg; ++i) {
    aT1 = aT11+i*dT;
    myGeom1->D0(aT1, aP1);
    //
    aProjPC.Perform(aP1);
    aNbP2=aProjPC.NbPoints();
    if (!aNbP2) {
      continue;
    }
    //
    aD=aProjPC.LowerDistance();
    if(aD < myTol) {
      ++iCnt; 
    }
  }
  //
  aCoeff=(Standard_Real)iCnt/((Standard_Real)aNbSeg+1);
  return aCoeff > aTresh;
}

浠庝笂榪頒唬鐮佸彲浠ョ湅鍑猴紝瀵逛簬閲嶅彔閮ㄥ垎鐨勬嫻嬫槸灝嗕竴鏉¤竟鏍規(guī)嵁媯嫻嬭寖鍥村垎鎴?3孌甸噰鏍風(fēng)偣錛岃綆楁瘡涓偣鍒板彟涓鏉¤竟鐨勮窛紱伙紝婊¤凍鏉′歡鐨勯噰鏍風(fēng)偣鐨勬暟閲忚秴榪?2涓紝鍩烘湰璁や負(fù)鏄噸鍙犵殑銆備粠榪欓噷鍙互鐪嬪嚭榪欐牱媯嫻嬮噸鍙犵◢寰湁鐐逛笉涓ヨ皚銆傚浐瀹氶噰鏍風(fēng)偣鏁伴噺瀵逛簬灝忔鏇茬嚎鏉ヨ鏁伴噺榪囧ぇ錛屽浜庡緢闀跨殑鏇茬嚎鏉ヨ鏁伴噺鍙堝亸灝忥紝榪欓噷鏈夊緟鎻愰珮銆傚鏋滈噸鍙狅紝鍒欏皢鍏叡閮ㄥ垎鐨勬暟鎹繚瀛樿搗鏉ワ細(xì)

瀵逛簬嫻嬭瘯鐨凾CL鑴氭湰涓嶄細(xì)璧拌繖涓氱敤鐨勫垽鏂祦紼嬶紝浼?xì)鐩存帴鏈塈ntTools_EdgeEdge::ComputeLineLine()鍑芥暟鏉ュ鐞嗚繖縐嶇壒孌婃儏鍐碉細(xì)

浠庝繚瀛樼殑鏁版嵁鍙互鐪嬪嚭錛屽叕鍏遍儴鍒嗙殑鐩鎬氦綾誨瀷涓篢opAbs_VERTEX錛屽強浜ょ偣鍒嗗埆鍦ㄤ袱鏉¤竟涓婄殑鍙傛暟銆傚叧浜庢湁閲嶅彔閮ㄥ垎鐨勪袱鏉¤竟鐩鎬氦錛屽悓瀛︿滑鍙互鑷浣跨敤DRAW鑴氭湰鏉ユ祴璇曚竴涓嬨?/p>

3 Edge/Face Interferences

杈逛笌闈㈢殑鐩鎬氦浼?xì)閬囧埌鍜岃竟涓庤竟鐩镐氦绫讳技鐨勬儏鍐靛Q屽嵆浼?xì)鏈夐噸鍙犻儴鍒咰ommon Part銆備篃鍒嗕負(fù)涓ょ鎯呭喌錛屼竴縐嶆儏鍐墊槸杈逛笌闈㈠彧鏈変竴涓氦鐐圭殑鎯呭喌錛屼氦鐐瑰彲鑳戒細(xì)鏈夊涓紱涓縐嶆儏鍐墊槸鏈夐噸鍙犻儴鍒嗙殑鎯呭喌銆?/p>

鎴戜滑鍙互鍦ㄤ嬌鐢ㄨ剼鏈潵嫻嬭瘯涓涓嬮噸鍙犵殑鎯呭喌錛?/p>

浠庝唬鐮佷腑鍙互鐪嬪嚭褰撹竟鐨勭鐐瑰湪闈笂鏃訛紝鍒欎細(xì)鍒ゆ柇杈逛笌闈細(xì)涓嶄細(xì)閲嶅彔Coincidence銆傚垽鏂昏緫涓庡垽鏂竟鏄惁閲嶅彔綾諱技錛岄兘鏄嬌鐢ㄥ浐瀹?3涓噰鏍風(fēng)偣鐨勬柟寮忓鐞嗭紝騫跺姞涓婂畾浣嶅櫒鏉ュ垽鏂偣鏄惁鍦ㄩ潰涓婏紝鍥犱負(fù)闈笂鍙兘浼?xì)鏈夊瓟娲炲Q?/p>

//=======================================================================
//function :  IsCoincident
//purpose  : 
//=======================================================================
Standard_Boolean IntTools_EdgeFace::IsCoincident() 
{
  Standard_Integer i, iCnt;
  Standard_Real dT, aT, aD, aT1, aT2, aU, aV;
  gp_Pnt aP;
  TopAbs_State aState;
  gp_Pnt2d aP2d;
  //
  GeomAPI_ProjectPointOnSurf& aProjector=myContext->ProjPS(myFace);
  Standard_Integer aNbSeg=23;
  if (myC.GetType() == GeomAbs_Line &&
      myS.GetType() == GeomAbs_Plane)
    aNbSeg = 2; // Check only three points for Line/Plane intersection
  const Standard_Real aTresh = 0.5;
  const Standard_Integer aTreshIdxF = RealToInt((aNbSeg+1)*0.25),
                         aTreshIdxL = RealToInt((aNbSeg+1)*0.75);
  const Handle(Geom_Surface) aSurf = BRep_Tool::Surface(myFace);
  aT1=myRange.First();
  aT2=myRange.Last();
  Standard_Real aBndShift = 0.01 * (aT2 - aT1);
  //Shifting first and last curve points in order to avoid projection
  //on surface boundary and rejection projection point with minimal distance
  aT1 += aBndShift;
  aT2 -= aBndShift;
  dT=(aT2-aT1)/aNbSeg;
  //
  Standard_Boolean isClassified = Standard_False;
  iCnt=0;
  for(i=0; i <= aNbSeg; ++i) {
    aT = aT1+i*dT;
    aP=myC.Value(aT);
    //
    aProjector.Perform(aP);
    if (!aProjector.IsDone()) {
      continue;
    }
    //
    aD=aProjector.LowerDistance();
    if (aD > myCriteria) {
      if (aD > 100. * myCriteria)
        return Standard_False;
      else
        continue;
    }
    //
    ++iCnt; 
    //We classify only three points: in the begin, in the 
    //end and in the middle of the edge.
    //However, exact middle point (when i == (aNbSeg + 1)/2)
    //can be unprojectable. Therefore, it will not be able to
    //be classified. Therefore, points with indexes in 
    //[aTreshIdxF, aTreshIdxL] range are made available 
    //for classification.
    //isClassified == TRUE if MIDDLE point has been chosen and
    //classified correctly.
    if(((0 < i) && (i < aTreshIdxF)) || ((aTreshIdxL < i ) && (i < aNbSeg)))
      continue;
    if(isClassified && (i != aNbSeg))
      continue;
    aProjector.LowerDistanceParameters(aU, aV);
    aP2d.SetX(aU);
    aP2d.SetY(aV);
    IntTools_FClass2d& aClass2d=myContext->FClass2d(myFace);
    aState = aClass2d.Perform(aP2d);
    if(aState == TopAbs_OUT)
      return Standard_False;
    if(i != 0)
      isClassified = Standard_True;
  }
  //
  const Standard_Real aCoeff=(Standard_Real)iCnt/((Standard_Real)aNbSeg+1);
  return (aCoeff > aTresh);
}

姹備氦緇撴灉涓庤竟涓庤竟鐩鎬氦綾誨瀷錛屼細(xì)淇濆瓨杈逛笌闈㈢殑绱㈠紩錛屽強鍏叡閮ㄥ垎鐨勬暟鎹傞櫎浜嗕繚瀛樿繖浜涙暟鎹互澶栵紝榪樺拰鐐逛笌闈㈢浉浜や竴鏍鳳紝鏇存柊闈笂鐨勪俊鎭疐aceInfo錛屽嵆鏈夊摢浜涜竟鍦ㄩ潰涓娿?/p>

4 Conclusion

緇間笂鎵榪幫紝杈逛笌杈廣佽竟涓庨潰鐩鎬氦浼?xì)寰楀埌鍏叡閮ㄥ垎Common Part錛屽叕鍏遍儴鍒嗗彲鑳芥槸鐐癸紝涔熷彲鑳芥槸閲嶅彔鐨勮竟銆傚湪榪囨護(hù)鐩鎬氦鐨勮竟涓庤竟銆佽竟涓庨潰鏃墮兘鏈変竴瀹氱殑浼樺寲絀洪棿錛屽嵆浣跨敤BVH鏉ュ姞閫熸嫻嬬浉浜ら儴鍒嗐傚湪蹇熷垽鏂竟涓庤竟鏄惁閲嶅彔銆佽竟涓庨潰鏄惁閲嶅彔閮ㄥ垎鐨勪唬鐮侀噰鐢ㄥ浐瀹氭暟閲忕殑閲囨牱鐐圭殑澶勭悊鏂瑰紡涓嶅お涓ヨ皚銆傚皢鐩鎬氦鐨勭粨鏋滃強榪囩▼鏁版嵁閮戒繚瀛樺埌BOPDS_DS涓綔涓哄悗闈㈢畻娉曚嬌鐢ㄣ?/p>

eryar 2023-09-27 21:52 鍙戣〃璇勮
]]>
[寮婧怾-OpenCASCADE-IMGUIhttp://m.shnenglu.com/eryar/archive/2023/09/24/occt_imgui_glfw.htmleryareryarSun, 24 Sep 2023 11:33:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/24/occt_imgui_glfw.htmlhttp://m.shnenglu.com/eryar/comments/230102.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/24/occt_imgui_glfw.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230102.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230102.html[寮婧怾-OpenCASCADE-IMGUI

1 IMGUI

ImGui 鏄竴涓敤浜嶤++鐨勭敤鎴風(fēng)晫闈㈠簱錛岃法騫沖彴銆佹棤渚濊禆錛屾敮鎸丱penGL銆丏irectX絳夊縐嶆覆鏌揂PI錛屾槸涓縐嶅嵆鏃禪I錛圛mmediate Mode User Interface錛夊簱錛屼繚鐣欐ā寮忎笌鍗蟲椂妯″紡鐨勫尯鍒弬鑰?a target="_blank" rel="noopener">淇濈暀妯″紡涓庡嵆鏃舵ā寮?/strong>銆侷mGui娓叉煋闈炲父蹇紝浣嗙晫闈笂鏈夊ぇ閲忕殑鏁版嵁闆嗛渶瑕佹覆鏌撳彲鑳戒細(xì)鏈変竴浜涢棶棰橈紝闇瑕佷嬌鐢ㄤ竴浜涚紦瀛樻妧宸с傜紦瀛樺彧鏄伩鍏嶆暟鎹殑鏇存柊閫昏緫鑰楁椂澶箙褰卞搷娓叉煋錛屽疄闄呮覆鏌撹繃紼嬩笉瀛樺湪鐡墮銆?/p>

IMGUI寰堣交閲忥紝榪樻敮鎸佽法騫沖彴錛屽浜庡皬鐨勬祴璇曠▼搴廔MGUI鏄悊鎯崇殑GUI銆?/p>

2 OcctImgui

鍩轟簬opencascade鐨刧lfw sample鍔犲叆IMGUI錛岃繖鏍峰氨鍙互寮鍙戜竴浜涘甫鏈塆UI鐨勭▼搴忋傝繖浜涚▼搴忓皬宸т笖鑳芥柟渚胯法騫沖彴錛岀湅涓婂幓鏁堟灉涔熶笉閿欍?/p>

鐜板湪灝哋cctImgui寮婧愶紝寮婧愬湴鍧錛歨ttps://github.com/eryar/OcctImgui

浣跨敤Premake鏉ョ敓鎴愯В鍐蟲柟妗堬紝鍙渶瑕佸皢premake5.lua涓殑鐩稿叧絎笁鏂瑰簱鐨勮礬寰勪慨鏀逛竴涓嬶紝鍗沖彲浠ョ洿鎺ョ紪璇戣繍琛屻?/p>

3 Next

鐩墠occt鐨勮鍥句綔涓烘暣涓儗鏅紝涓嬩竴姝ュ彲浠ュ仛鎴愬儚CADRays涓偅鏍鳳紝灝唎cct鐨勮鍥句綔涓鴻鍥劇殑涓閮ㄥ垎錛岃繖鏍峰氨鍙互浣跨敤IMGUI鐨凞ocking鍔熻兘銆?/p>

浣跨敤IMGUI涔熷彲浠ュ紑鍙戝嚭寰圕ool鐨勭晫闈紝鏈鍚庢斁涓や釜鍩轟簬IMGUI寮鍙戠殑鍥懼艦鐣岄潰錛?/p>

https://github.com/adriengivry/Overload

https://github.com/sasobadovinac/CADRays

https://github.com/MeshInspector/MeshLib



eryar 2023-09-24 19:33 鍙戣〃璇勮
]]>
甯冨皵鏁版嵁 BOPDS_DShttp://m.shnenglu.com/eryar/archive/2023/09/23/BOPDS_DS.htmleryareryarSat, 23 Sep 2023 09:37:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/23/BOPDS_DS.htmlhttp://m.shnenglu.com/eryar/comments/230099.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/23/BOPDS_DS.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230099.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230099.html甯冨皵鏁版嵁 BOPDS_DS

eryar@163.com

1 Introduction

鍦∣penCASCADE涓紝甯冨皵鐩稿叧鐨勭畻瀛怬perator鏈塆eneral Fuse Operator(GFA)錛孊oolean Operator(BOA)錛孲ection Operator(SA)錛孲plitter Operator(SPA)錛岃繖浜涘竷?yōu)當(dāng)绠楀瓙閮藉呣q敤涓濂楁暟鎹粨鏋凚OPDS_DS錛屽叾涓瓨鍌ㄤ簡杈撳叆鏁版嵁鍙婁腑闂寸粨鏋滄暟鎹傚竷?yōu)當(dāng)绠楀瓙鍖呭惈涓ら儴鍒嗗Q?/p>

  • Intersection Part(IP)鐩鎬氦閮ㄥ垎錛氱浉浜ら儴鍒咺P涓昏鐢ㄦ潵璁$畻妯″瀷涔嬮棿鐨勭浉浜ゆ儏鍐碉紝騫跺皢璁$畻緇撴灉淇濆瓨鍒癇OPDS_DS涓紱
  • Building Part(BP)鏋勫緩閮ㄥ垎錛氭瀯寤洪儴浠禕P浠嶣OPDS_DS涓幏鍙栫浉浜ゅ拰鍏朵粬鏁版嵁鏉ユ瀯寤虹浉搴旂殑緇撴灉錛?/li>

鐢辨鍙錛屽竷?yōu)當(dāng)鏁版嵁BOPDS_DS鏄竷?yōu)當(dāng)鎿嶄綔涓殑鏁版嵁涓浆绔欏Q屽皢甯冨皵鎿嶄綔鐨勮緭鍏ユ暟鎹強涓棿璁$畻緇撴灉鏁版嵁閮戒繚瀛樿搗鏉ャ傛湰鏂囦富瑕佷粙緇岯OPDS_DS淇濆瓨鐨勬暟鎹?/p>

 

2 BOPDS_DS

BOPDS_DS涓瓨鍌ㄧ殑淇℃伅鏈夛細(xì)

  • Arguments錛氳緭鍏ユā鍨嬫暟鎹紱
  • Shapes錛氭ā鍨嬩俊鎭紱
  • Interferences錛氱浉浜ゆ暟鎹紱
  • Pave Blocks錛氬瓧闈㈡剰鎬濇槸閾鴻礬鐮栵紝鎴戠悊瑙g殑鏄杈笶dge鍒嗗潡錛?/li>
  • Common Blocks錛氬叕鍏遍儴鍒嗭紝杈逛笌杈癸紝杈逛笌闈㈢殑閲嶅彔閮ㄥ垎錛?/li>

榪欓噷鐨凷hapes鏄ā鍨嬩俊鎭疊OPDS_ShapeInfo錛屽瓨鍌ㄦā鍨嬬被鍨嬶紝鍖呭洿鐩掔瓑鏁版嵁錛?/p>

榪欓噷搴旇涓嶉渶瑕佸啀鍙﹀淇濆瓨myType錛屽洜涓哄湪myShape涓彲浠ョ洿鎺ヨ幏鍙栫被鍨嬩俊鎭傛ā鍨嬩俊鎭湪鍒濆鍖栧嚱鏁癐nit()涓潵璁劇疆錛屼富瑕佹槸鍖呭洿鐩掔瓑淇℃伅錛?/p>

//=======================================================================
//function : Init
//purpose  : 
//=======================================================================
void BOPDS_DS::Init(const Standard_Real theFuzz)
{
  Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx;
  Standard_Integer n1, n2, n3, nV, nW, nE, aNbF;
  Standard_Real aTol, aTolAdd;
  TopAbs_ShapeEnum aTS;
  TopoDS_Iterator aItS;
  TColStd_ListIteratorOfListOfInteger aIt1, aIt2, aIt3;
  TopTools_ListIteratorOfListOfShape aIt;
  BOPDS_IndexRange aR;
  Handle(NCollection_BaseAllocator) aAllocator;
  TopTools_MapOfShape aMS;
  //
  // 1 Append Source Shapes
  aNb=myArguments.Extent();
  if (!aNb) {
    return;
  }
  //
  myRanges.SetIncrement(aNb);
  //
  aNbS=0;
  aIt.Initialize(myArguments);
  for (; aIt.More(); aIt.Next()) {
    const TopoDS_Shape& aSx=aIt.Value();
    //
    aNbSx=0;
    TotalShapes(aSx, aNbSx, aMS);
    //
    aNbS=aNbS+aNbSx;
  }
  aMS.Clear();
  //
  myLines.SetIncrement(2*aNbS);
  //-----------------------------------------------------scope_1 f
  aAllocator=
    NCollection_BaseAllocator::CommonBaseAllocator();
  //
  //
  i1=0; 
  i2=0;
  aIt.Initialize(myArguments);
  for (; aIt.More(); aIt.Next()) {
    const TopoDS_Shape& aS=aIt.Value();
    if (myMapShapeIndex.IsBound(aS)) {
      continue;
    }
    aI=Append(aS);
    //
    InitShape(aI, aS);
    //
    i2=NbShapes()-1;
    aR.SetIndices(i1, i2);
    myRanges.Append(aR);
    i1=i2+1;
  }
  //
  aTolAdd = Max(theFuzz, Precision::Confusion()) * 0.5;
  myNbSourceShapes = NbShapes();
  //
  // 2 Bounding Boxes
  //
  // 2.1 Vertex
  for (j=0; j<myNbSourceShapes; ++j) {
    BOPDS_ShapeInfo& aSI=ChangeShapeInfo(j);
    //
    const TopoDS_Shape& aS=aSI.Shape();
    //
    aTS=aSI.ShapeType();
    //
    if (aTS==TopAbs_VERTEX) {
      Bnd_Box& aBox=aSI.ChangeBox();
      const TopoDS_Vertex& aV=*((TopoDS_Vertex*)&aS);
      const gp_Pnt& aP=BRep_Tool::Pnt(aV);
      aTol = BRep_Tool::Tolerance(aV);
      aBox.SetGap(aTol + aTolAdd);
      aBox.Add(aP);
    }
  }

鍦ㄥ垵濮嬪寲鍑芥暟涓氳繃涓や釜閫掑綊鍑芥暟TotalShapes()鍜孖nitShape()鏉ユ敹闆嗘墍鏈夋ā鍨嬫暟鎹紝鐒跺悗鍐嶅垎鍒綆楃偣銆佽竟銆侀潰鐨勫寘鍥寸洅銆傝繖浜涘寘鍥寸洅鏁版嵁涓哄悗闈嬌鐢˙VH鐩鎬氦媯嫻嬪仛鍑嗗銆?/p>

3 Interferences

鐩鎬氦鏁版嵁Interferences涓昏鐢ㄦ潵淇濆瓨姹備氦緇撴灉鏁版嵁錛屼嬌鐢ㄤ簡綆鍗曠殑媧劇敓鍏崇郴錛屼笉鍚岀殑鐩鎬氦綾誨瀷寰楀埌涓嶅悓鐨勭浉浜ょ粨鏋溿?/p>

淇濆瓨鐨勬暟鎹湁錛?/p>

鍏朵腑Index1鍜孖ndex2涓虹浉浜ょ殑涓や釜妯″瀷鍦˙OPDS_DS涓殑绱㈠紩鍙楓傚浜庣偣Vertex鍜岃竟Edge鐨勭浉浜ょ粨鏋滐紝淇濆瓨浜嗙浉浜ょ偣鍦ㄨ竟涓婄殑鍙傛暟myParam錛?/p>

 

4 DRAW

鍦―RAW涓緭鍏ョ浉鍏崇殑鍛戒護(hù)鍙互鏂逛究鍦板榪欎簺鏁版嵁緇撴瀯榪涜Debug銆?/p>

浠庢簮鐮佸彲浠ョ湅鍑猴紝鍦ㄥ仛姹備氦鐨勫垵濮嬪嚱鏁頒腑鍑嗗浜嗕笁閮ㄥ垎鏁版嵁錛屼竴涓槸BOPDS_DS錛屼竴涓槸BOPDS_Iterator錛岃繕鏈変竴閮ㄥ垎鏄紦瀛樼殑姹備氦宸ュ叿鐨勬暟鎹甀ntTools_Context銆傚悗闈㈠皢緇撳悎DRAW浠g爜瀵笴++婧愮爜璋冭瘯錛屽垎鏋愬竷?yōu)當(dāng)鎿嶄綔涓眰浜ゆ暟鎹瓸OPDS_DS淇濆瓨鐨勫叿浣撴暟鎹?/p>

 



eryar 2023-09-23 17:37 鍙戣〃璇勮
]]>
甯冨皵鏁版嵁 BOPDS_Iteratorhttp://m.shnenglu.com/eryar/archive/2023/09/18/BOPDS_Iterator.htmleryareryarMon, 18 Sep 2023 13:13:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/18/BOPDS_Iterator.htmlhttp://m.shnenglu.com/eryar/comments/230092.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/18/BOPDS_Iterator.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230092.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230092.html甯冨皵鏁版嵁 BOPDS_Iterator

eryar@163.com

1 Introduction

OpenCASCADE涓柊鐨勫竷?yōu)當(dāng)宸ュ叿TKBO鐩稿宸茬粡搴熷純鐨凾KBool浠g爜鏇磋鑼冿紝鏇存槗浜庣悊瑙c備笌ModelingData鍜孧odelingAlgorithms澶х殑妯″潡緇勭粐涓鏍鳳紝涓昏涔熸槸鏁版嵁緇撴瀯Data Structure+綆楁硶Algorithm鐨勭粍緇囧艦寮忋?/p>

鍏朵腑BOPDS涓哄竷?yōu)當(dāng)涓殑鏁版嵁缁撴瀯閮ㄥ垎锛孊OPAlgo涓哄竷?yōu)當(dāng)涓殑绠楁硶閮ㄥ垎銆傜悊瑙g畻娉曠殑鍓嶆彁鏄厛鐞嗚В鏁版嵁緇撴瀯DS(Data Structure)錛屾墍浠ュ厛浠庢暟鎹粨鏋勫叆鎵嬶紝鏉ユ繁鍏ョ悊瑙e竷?yōu)當(dāng)鎿嶄綔銆傛湰鏂囧厛浠庣畝鍗曠殑鏁版嵁緇撴瀯BOPDS_Iterator寮濮嬪婧愮爜榪涜鍒嗘瀽銆?/p>

 

2 BOPDS_Iterator

浠庣被鐨勬敞閲婂彲浠ョ湅鍑猴紝榪唬鍣˙OPDS_Iterator鏈変互涓嬩袱涓姛鑳斤細(xì)

- 鎵懼嚭鍖呭洿鐩掔浉浜ょ殑Shape錛?/p>

- 閬嶅巻鐩鎬氦鐨勪竴瀵筍hape錛?/p>

//! The class BOPDS_Iterator is
//! 1.to compute intersections between BRep sub-shapes
//! of arguments of an operation (see the class BOPDS_DS)
//! in terms of theirs bounding boxes
//! 2.provides interface to iterate the pairs of
//! intersected sub-shapes of given type
class BOPDS_Iterator 
{
public:

鍏朵腑鏍稿績鐨勭畻娉曞湪鍑芥暟Intersect()涓紝浠g爜濡備笅鎵紺猴細(xì)

//=======================================================================
// function: Intersect
// purpose: 
//=======================================================================
void BOPDS_Iterator::Intersect(const Handle(IntTools_Context)& theCtx,
                               const Standard_Boolean theCheckOBB,
                               const Standard_Real theFuzzyValue)
{
  const Standard_Integer aNb = myDS->NbSourceShapes();
  // Prepare BVH
  BOPTools_BoxTree aBoxTree;
  aBoxTree.SetSize (aNb);
  for (Standard_Integer i = 0; i < aNb; ++i)
  {
    const BOPDS_ShapeInfo& aSI = myDS->ShapeInfo(i);
    if (!aSI.HasBRep())
      continue;
    const Bnd_Box& aBox = aSI.Box();
    aBoxTree.Add (i, Bnd_Tools::Bnd2BVH (aBox));
  }
  // Build BVH
  aBoxTree.Build();
  // Select pairs of shapes with interfering bounding boxes
  BOPTools_BoxPairSelector aPairSelector;
  aPairSelector.SetBVHSets (&aBoxTree, &aBoxTree);
  aPairSelector.SetSame (Standard_True);
  aPairSelector.Select();
  aPairSelector.Sort();
  // Treat the selected pairs
  const std::vector<BOPTools_BoxPairSelector::PairIDs>& aPairs = aPairSelector.Pairs();
  const Standard_Integer aNbPairs = static_cast<Standard_Integer> (aPairs.size());
  Standard_Integer iPair = 0;
  const Standard_Integer aNbR = myDS->NbRanges();
  for (Standard_Integer iR = 0; iR < aNbR; ++iR)
  {
    const BOPDS_IndexRange& aRange = myDS->Range(iR);
    for (; iPair < aNbPairs; ++iPair)
    {
      const BOPTools_BoxPairSelector::PairIDs& aPair = aPairs[iPair];
      if (!aRange.Contains (aPair.ID1))
        // Go to the next range
        break;
      if (aRange.Contains (aPair.ID2))
        // Go to the next pair
        continue;
      const BOPDS_ShapeInfo& aSI1 = myDS->ShapeInfo (aPair.ID1);
      const BOPDS_ShapeInfo& aSI2 = myDS->ShapeInfo (aPair.ID2);
      const TopAbs_ShapeEnum aType1 = aSI1.ShapeType();
      const TopAbs_ShapeEnum aType2 = aSI2.ShapeType();
      Standard_Integer iType1 = BOPDS_Tools::TypeToInteger (aType1);
      Standard_Integer iType2 = BOPDS_Tools::TypeToInteger (aType2);
      // avoid interfering of the shape with its sub-shapes
      if (((iType1 < iType2) && aSI1.HasSubShape (aPair.ID2)) ||
          ((iType1 > iType2) && aSI2.HasSubShape (aPair.ID1)))
        continue;
      if (theCheckOBB)
      {
        // Check intersection of Oriented bounding boxes of the shapes
        const Bnd_OBB& anOBB1 = theCtx->OBB (aSI1.Shape(), theFuzzyValue);
        const Bnd_OBB& anOBB2 = theCtx->OBB (aSI2.Shape(), theFuzzyValue);
        if (anOBB1.IsOut (anOBB2))
          continue;
      }
      Standard_Integer iX = BOPDS_Tools::TypeToInteger (aType1, aType2);
      myLists(iX).Append (BOPDS_Pair (Min (aPair.ID1, aPair.ID2),
                                      Max (aPair.ID1, aPair.ID2)));
    }
  }
}

鍦ㄦ眰浜ゅ嚱鏁癐ntersect涓嬌鐢˙VH蹇熸壘鍑哄寘鍥寸洅鏈夌浉浜ょ殑姣忓Shape錛屽茍浠ョ儲寮曠殑褰㈠紡璁板綍涓嬫潵銆備粠榪欎釜鍑芥暟涓彲浠ョ湅鍑哄竷?yōu)當(dāng)鎿嶄綔鏄惁鋴社敤OBB鐨勯夐」鐨勪綔鐢細(xì)褰撲笉浣跨敤OBB鏃訛紝鍙互AABB鍖呭洿鐩掓潵媯嫻嬬浉浜ょ殑Shape錛涘綋浣跨敤OBB鏃訛紝鍦ˋABB鐨勫熀紜涓婅繘涓姝ヤ嬌鐢ㄥ寘鍥存洿绱у瘑鐨凮BB鏉ユ嫻嬬浉浜わ紝鍙互鎺掗櫎閮ㄥ垎銆傚綋鐩鎬氦鐨勬ā鍨嬩腑浠ABB媯嫻嬪氨鑳芥嫻嬪嚭鏉ョ殑錛屽啀鎵撳紑OBB閫夐」錛屼笉浼?xì)鎻愰珮鎬ц兘錛屽弽鑰屼細(xì)鏈夋墍闄嶄綆銆備負(fù)浜嗗噺灝戣繖涓獎鍝嶏紝鍦↖ntTools_Context涓紦瀛楥aching榪欎簺OBB錛岄伩鍏嶆瀯閫燨BB甯︽潵鐨勬ц兘鎹熷け銆?/p>

3 Conclusion

甯冨皵榪唬鍣˙OPDS_Iterator閫氳繃BVH鎵懼嚭姹備氦鐨勬ā鍨嬩腑姣忓鍖呭洿鐩掓湁鐩鎬氦鐨勬ā鍨嬪茍鎻愪緵閬嶅巻姣忓鍖呭洿鐩掔浉浜ょ殑妯″瀷鐨勫姛鑳斤紝涓哄悗闈㈡眰浜や綔鍑嗗銆備粠鍏朵唬鐮佸疄鐜板彲浠ョ湅鍑哄竷?yōu)當(dāng)閫夐」浣跨敤OBB瀵規(guī)ц兘鎻愰珮鏄湁闄愮殑錛屽綋浣跨敤AABB鑳芥嫻嬪嚭鏉ョ殑錛屽啀浣跨敤OBB浼?xì)闄嶄綆鎬ц兘銆傚綋浣跨敤AABB媯嫻嬪嚭鏉ョ浉浜わ紝浣哋BB涓嶇浉浜ょ殑鍦烘櫙瀵規(guī)ц兘鎻愬崌鏄庢樉銆?/p>

浠婃棩鏄?#8220;涔?jié)涓鍏簨鍙?#8221;92鍛ㄥ勾錛岃惤鍚庡氨瑕佹尐鎵擄紝鍚捐緢浠嶉渶鍔姏銆?/p>

eryar 2023-09-18 21:13 鍙戣〃璇勮
]]>
鏋勫緩宸ュ叿Premakehttp://m.shnenglu.com/eryar/archive/2023/09/18/occt_premake.htmleryareryarMon, 18 Sep 2023 12:49:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/18/occt_premake.htmlhttp://m.shnenglu.com/eryar/comments/230091.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/18/occt_premake.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230091.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230091.html鏋勫緩宸ュ叿Premake

緇忓父鐢╒isual Studio鍐欎竴浜涘皬紼嬪簭鏉ラ獙璇丱penCASCADE鐨勫姛鑳斤紝姣忔鍒涘緩欏圭洰鍚庨兘閰嶇疆澶存枃浠訛紝搴撹礬寰勶紝紼嬪簭榪愯鏃惰繕瑕侀厤緗瓺ebug鐨勭幆澧冨彉閲忥紝姣旇緝楹葷儲銆備篃灝濊瘯榪嘋Make鍜孮Make錛岄兘涓嶅お鐞嗘兂銆侰Make瀛︿範(fàn)鏇茬嚎闄″抄涓鐐癸紝榪樹細(xì)鐢熸垚涓鍫嗘枃浠躲俀Make綆鍗曚簺錛屼絾鏄湁鐨勯夐」涓嶆敮鎸併傜洿鍒扮湅鍒頒竴涓紑婧愮殑娓告垙紼嬪簭Overload錛岀湅鍏剁紪璇戣鏄庝嬌鐢ㄤ簡Premake鏉ユ瀯寤恒?/p>

浣跨敤IMGUI鐢熸垚鐨勮蔣浠剁晫闈㈡瘮杈冮叿鐐紝浣跨敤Premake鐢熸垚Visual Studio瑙e喅鏂規(guī)銆?/p>

1 浠涔堟槸鏋勫緩緋葷粺

鏋勫緩緋葷粺錛圔uildSystem錛夋槸鐢ㄦ潵浠庢簮鐮佺敓鎴愮敤鎴峰彲浠ヤ嬌鐢ㄧ殑鐩爣錛圱argets錛夌殑鑷姩鍖栧伐鍏楓傜洰鏍囧彲浠ュ寘鎷簱錛屽彲鎵ц鏂囦歡錛屾垨鑰呯敓鎴愮殑鑴氭湰絳夌瓑銆?/p>

欏圭洰妯″潡渚濊禆鍏崇郴緇存姢 錛?/p>

鐩爣鐨勫彲閰嶇疆鍖栵紙涓嶅悓緋葷粺錛歐indows錛孧ac…錛涗笉鍚屽鉤鍙幫細(xì)Win32錛學(xué)in64錛孉md64…錛?/p>

鐩爣鐢熸垚鐨勮嚜鍔ㄥ寲

2 涓轟粈涔堜嬌鐢ㄦ瀯寤虹郴緇?/h2>

涓昏鐢ㄤ簬鎻愰珮寮鍙戜漢鍛樼殑鏁堢巼涓庣ǔ瀹氾紝嫻嬭瘯涓庡彂甯冪殑鏁堢巼

-鍑忓皯寮鍙戜漢鍛樼殑鐭ヨ瘑鎴愭湰錛堟瘮濡傚鍚屼竴嫻佺▼錛屼絾澶氱騫沖彴錛屽縐嶅紑鍙戠幆澧冨樊寮傚寲鐨勪簡瑙o級

-鍑忓皯欏圭洰欏圭洰鍙樺姩鐨勭淮鎶ゆ垚鏈?/p>

– VisualStudio 鐨勭紪璇戦夐」瑙勫垯錛岄厤緗柟娉?/p>

– Xcode 鐨勭紪璇戦夐」瑙勫垯錛岄厤緗柟娉?/p>

– 鍏朵粬銆傘傘?/p>

-鍑忓皯妯″潡鐨勭淮鎶ゆ垚鏈?/p>

– 鍗忓悓浜哄憳瀵瑰伐紼嬫枃浠訛紝鐩綍鐨勪慨鏀瑰啿紿?/p>

鍑忓皯騫沖彴錛岀郴緇熺敓鎴愮殑宸紓鍖栨垚鏈紙鍙互綆媧佸湴閰嶇疆涓嶅悓鐨勫鉤鍙頒笌緋葷粺錛?/p>

– 閫氳繃綆鍗曠殑閰嶇疆錛屽彲浠ョ伒媧伙紝蹇熷湴娣誨姞錛屼慨鏀癸紝鏇存柊妯″潡

– 鍙互鏂逛究鐨勫鐞嗕緷璧栧叧緋伙紝鎻愰珮紼沖畾鎬у拰緙栬瘧閫熷害

浣跨敤鑴氭湰鍜岄厤緗枃浠訛紝瀹炵幇鑷姩娓呯悊錛岀敓鎴愭墍闇騫沖彴錛岀郴緇燂紝璋冭瘯鐜錛屾祴璇曟祦紼嬶紝鐒跺悗鍙戝竷鐗堟湰銆?/p>

鎬葷殑鏉ヨ錛屽氨鏄嬌鐢熸垚榪囩▼鏇村姞綆媧侊紝鐏墊椿錛岄珮鏁堬紝鑷姩鍖栥?/p>

3 甯歌鐨勬瀯寤虹郴緇?/h2>

涓繪祦鐨勫彲浠ヨ法騫沖彴錛屾敮鎸丆++鐨勬瀯寤虹郴緇?/p>

- CMake

- Scons

- Premake

鍏朵粬榪樻湁 GNU Make錛孏NU autotools錛孉pache Ant錛堜富瑕佺敤浜嶫ava錛夛紝Gradle錛堜富瑕佺敤浜嶫ava錛?/p>

4 浠涔堟槸Premake

Premake 鏄竴縐嶅懡浠ゅ伐鍏鳳紝閫氳繃璇誨彇欏圭洰鑴氭湰錛屾潵鐢熸垚鍚勭寮鍙戠幆澧冪殑欏圭洰鏂囦歡銆備富瑕佺敤浜庯細(xì)

鐢熸垚寮鍙戜漢鍛樺枩嬈㈢殑騫沖彴錛屽伐鍏烽泦錛堝崗鍚屽紑鍙戠殑浜哄憳錛屽彲浠ヤ嬌鐢ㄤ笉鍚岀殑騫沖彴鍜屽紑鍙戝伐鍏鳳級

閫氳繃鑴氭湰淇濇寔涓嶅悓騫沖彴錛屽伐鍏烽泦涓嬬殑欏圭洰閰嶇疆鍚屾錛堟瘮濡傛柊寤烘枃浠跺す錛屽紩鍏ユ柊鐨勫簱鏂囦歡錛?/p>

閫氳繃鑴氭湰鏉ュ揩閫熸洿鏂拌澶氫笉鍚岀殑澶у瀷浠g爜搴擄紝騫墮噸鏂扮敓鎴愰」鐩紙姣斿瀵逛緷璧栫殑澶氱钁楀悕搴撶殑鐗堟湰鏇存柊錛?/p>

蹇熷崌綰у伐鍏烽泦鐨勭増鏈紙姣斿鏃犵紳鍦頒粠VisualStudio 2010鍗囩駭鍒癡isualStudio 2019錛?/p>

鐩墠鏀寔錛?/p>

Microsoft Visual Studio 2005-2019

GNU Make錛屽寘鎷?Cygwin 鍜?MinGW

XCode

Codelite

Premake 5.0 鐩墠鏀寔錛?/p>

32 鍜?64 浣嶅鉤鍙?/p>

Xbox 360錛堜粎鏀寔Visual Studio錛?/p>

鎻掍歡妯″潡鍙互鏀寔鍏朵粬璇█錛屾鏋訛紝鍜屽伐鍏烽泦

Premake 鏄瓨綺圭殑鏃х増C搴旂敤紼嬪簭錛屽彂甯冧負(fù)涓涓崟涓殑錛岄潪甯稿皬鐨別xe鏂囦歡銆傛敮鎸佸畬鏁寸殑Lua鑴氭湰鐜

寮婧愬湴鍧錛歨ttps://github.com/premake/premake-core

涓嬭澆鍦板潃錛歨ttps://premake.github.io/

瀹炰緥鍦板潃錛?a >https://github.com/wuguyannian/tutorial_premake

5 浣跨敤Premake

浣跨敤premake鏉ユ瀯寤轟竴涓嬌鐢ㄤ簡glfw, occt鍜宨mgui鐨勭▼搴忋備粠閰嶇疆鏂囦歡鍙互鐪嬪嚭錛岄厤緗瘮CMake瑕佺畝鍗曪細(xì)

workspace "OcctImgui"
    configurations {"Debug", "Release"}
    system "Windows"
    platforms {"Win64"}
    architecture "X64"
    language "C++"
project "OcctImgui"
    kind "ConsoleApp"
    language "C++"
    targetdir "build/bin/%{cfg.buildcfg}"
    objdir "build/obj/%{cfg.buildcfg}"
    files { "**.h",  "**.cpp"}
    -- Header files.
    includedirs
    {
        "C:/OpenCASCADE-7.6.0/opencascade-7.6.0/inc", 
        "C:/glfw-3.3.8/include"
    }
    -- Library files.
    links
    {
        "TKernel", "TKMath", "TKG2d", "TKG3d", "TKGeomBase", "TKGeomAlgo", "TKBRep", "TKTopAlgo", "TKPrim", "TKMesh", "TKService", "TKOpenGl", "TKV3d", 
        "glfw3"
    }
    filter "configurations:Debug"
      defines { "DEBUG" }
      symbols "On"
      libdirs
      {
          "C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/libd", 
          "C:/glfw-3.3.8/lib"
      }
      debugenvs
      {
          "path=%path%;C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/bind"
      }
   filter "configurations:Release"
      defines { "NDEBUG" }
      symbols "Off"
      optimize "On"
      libdirs
      {
          "C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/lib", 
          "C:/glfw-3.3.8/lib"
      }
      debugenvs
      {
          "path=%path%;C:/OpenCASCADE-7.6.0/opencascade-7.6.0/win64/vc14/bin"
      }

閫氳繃premake鐢熸垚鐨刅isual Studio瑙e喅鏂規(guī)寰堝共鍑錛屾病鏈夊浣欑殑鏂囦歡銆傚悗闈㈠啀瑕佸啓涓涓皬鐨勯獙璇佺▼搴忔椂錛屽彧闇瑕佸鍒秔remake5.lua淇敼涓涓嬪嵆鍙紝寰堟柟渚褲傚浜庡皬鐨勯獙璇佺▼搴忔潵璇達(dá)紝浣跨敤premake鏄悊鎯崇殑鏋勫緩宸ュ叿銆?/p>

 



eryar 2023-09-18 20:49 鍙戣〃璇勮
]]>
OpenCASCADE GLFW IMGUIhttp://m.shnenglu.com/eryar/archive/2023/09/18/occt_imgui.htmleryareryarMon, 18 Sep 2023 12:48:00 GMThttp://m.shnenglu.com/eryar/archive/2023/09/18/occt_imgui.htmlhttp://m.shnenglu.com/eryar/comments/230090.htmlhttp://m.shnenglu.com/eryar/archive/2023/09/18/occt_imgui.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230090.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230090.htmlOpenCASCADE GLFW IMGUI

濡傛灉浠庝簨榪嘋++ Windows瀹㈡埛绔紑鍙戯紝澶у瀵筂FC銆丵t銆丏uiLib銆乄xWidgets絳夊悇縐岲irectUI搴旇鏈変簡瑙o紝鏈瘒緇欏ぇ瀹朵粙緇嶄竴涓秴綰ц交閲忕駭鐨凜++寮婧愯法騫沖彴鍥懼艦鐣岄潰妗嗘灦ImGUI. ImGUI涓昏鐢ㄤ簬娓告垙琛屼笟錛屾墍鏈夌殑鎺т歡閮介渶瑕佹墜緇樺疄鐜幫紝褰撶劧鎬ц兘涔熸槸婊℃弧鐨勶紝姣曠珶鏄洿鎺ョ敤dx/opengl鏉ュ疄鐜般侷mGUI浠撳簱錛歨ttps://github.com/ocornut/imgui

ImGUI鍙堢О涓篋ear ImGui錛屽畠鏄笌騫沖彴鏃犲叧鐨凜++杞婚噺綰ц法騫沖彴鍥懼艦鐣岄潰搴擄紝娌℃湁浠諱綍絎笁鏂逛緷璧栵紝鍙互灝咺mGUI鐨勬簮鐮佺洿鎺ュ姞鍒伴」鐩腑浣跨敤錛屼篃鍙互緙栬瘧鎴恉ll, ImGUI浣跨敤DX鎴栬匫penGL榪涜鐣岄潰娓叉煋錛屽浜庣敾闈㈣川閲忚姹傝緝楂橈紝渚嬪瀹㈡埛绔父鎴忥紝4k/8k瑙嗛鎾斁鏃訛紝鐢↖mGUI鏄緢濂界殑閫夋嫨錛屽綋鐒訛紝浣犲緱闈炲父鐔熸?zhèn)塂irectX鎴栬匫penGL錛屼笉鐒跺氨鏄疂鍓戝湪鎵嬶紝灞犻緳鏃犲姏銆傜浉瀵逛簬Qt銆丮FC銆丏uiLib銆丼OUI絳夛紝ImGUI鐨勬嫇灞曟ф洿濂斤紝涔熸洿杞婚噺綰э紝褰撶劧瀵逛簬寮鍙戣呯殑瑕佹眰涔熸洿楂?ImGUI娌℃湁綾諱技浜嶲t/MFC榪欑錛屽彲浠ユ嫋鎷芥帶浠惰繘琛屾惌寤虹晫闈紝ImGUI鐨勬墍鏈夋帶浠墮兘蹇呴』鎵嬪啓瀹炵幇銆侷mGUI鐨刣emo鍩烘湰鎻愪緵浜嗘墍鏈夋帶浠躲佸浘琛ㄧ瓑鐨勫疄鐜幫紝婧愮爜涔熸湁錛屽彲浠ュ鐓х殑瀛︿範(fàn)銆傚湪PC绔妧鏈夊瀷鏃訛紝濡傛灉鍏徃鏈夐煶瑙嗛銆佸浘褰㈠浘鍍忋?k/8k瑙嗛涓氬姟錛屾垨鑰呬竴浜涚畝鍗曠殑UI鍙互鑰冭檻涓涓嬩嬌鐢↖mGUI錛屾瘯绔熸槸鐩存帴浣跨敤DX/OpenGL鏉ヨ繘琛岀粯鍒舵覆鏌擄紝鍏跺畠鍔熻兘灝辯洿鎺ヤ嬌鐢–++鏉ュ疄鐜般?/p>

OpenCASCADE鎻愪緵浜嗕竴涓狦LFW鐨勭ず渚嬬▼搴忥紝灝哋penCASCADE涓嶪MGUI闆嗘垚璧鋒潵錛屽浜庡疄鐜頒竴浜涚畝鍗曠殑灝忕殑涓夌淮搴旂敤紼嬪簭鐨刄I錛屾湁婊℃弧鐨勭鎶鎰熴傚緢澶氭父鎴忕浉鍏崇殑灝忕▼搴忛兘鏄嬌鐢↖MGUI鏉ュ仛鐣岄潰銆?/p>

鍏朵腑OpenCASCAE寮婧愮殑鍏夌嚎榪借釜紼嬪簭CADRays鐨刄I灝辨槸鐢↖MGUI瀹炵幇鐨勶細(xì)

IMGUI涔熸敮鎸丏ocking錛屽父瑙佺殑鎺т歡閮芥湁錛屽茍涓斾篃鏀寔璺ㄥ鉤鍙幫紝鍙緷璧朞penGL錛岀敓鎴愮殑紼嬪簭浣撶Н寰堝皬銆?/p>

 

浣跨敤GLFW閰嶇疆IMGUI鍙互瀹炵幇璺ㄥ鉤鍙扮殑鐣岄潰寮鍙戯紝瀵逛簬涓嶅鏉傜殑搴旂敤紼嬪簭鏄釜涓嶉敊鐨勯夋嫨銆?/p>

 



eryar 2023-09-18 20:48 鍙戣〃璇勮
]]>
鍑犱綍鍐呮牳涓庢暟瀛?/title><link>http://m.shnenglu.com/eryar/archive/2023/09/18/occt_math.html</link><dc:creator>eryar</dc:creator><author>eryar</author><pubDate>Mon, 18 Sep 2023 12:47:00 GMT</pubDate><guid>http://m.shnenglu.com/eryar/archive/2023/09/18/occt_math.html</guid><wfw:comment>http://m.shnenglu.com/eryar/comments/230089.html</wfw:comment><comments>http://m.shnenglu.com/eryar/archive/2023/09/18/occt_math.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/eryar/comments/commentRss/230089.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/eryar/services/trackbacks/230089.html</trackback:ping><description><![CDATA[<h1 style="text-align: center;"><strong>鍑犱綍鍐呮牳涓庢暟瀛?/strong></h1> <h2>1 姒傝堪</h2> <p>浠?950騫寸涓鍙板浘褰㈡樉紺哄櫒錛堢編鍥介夯鐪佺悊宸ュぇ瀛IT鏃嬮I鍙稺hirlwind I錛夌殑璇炵敓錛屽埌1962騫碝IT鏋楄偗瀹為獙瀹ょ殑Ivan E. Sutherland鍙戣〃棰樹負(fù)“Sketchpad: 涓涓漢鏈轟氦浜掔殑鍥懼艦緋葷粺”紜畾璁$畻鏈哄浘褰㈠浣滀負(fù)鐙珛縐戝鍒嗘敮銆傜粡榪?0澶氬勾鐨勫彂灞曪紝璁$畻鏈哄浘褰㈠涓殑鍑犱綍閫犲瀷鎶鏈垚浜嗙幇鍦ㄧ殑鍑犱綍鍐呮牳銆?/p> <p>鏁板鏄垜浠粠灝忓銆佷腑瀛﹀埌澶у涓鐩撮兘鍦ㄥ涔?fàn)鐨勮瘎〃嬪Q屾槸鐜頒唬縐戞妧鐨勭悊璁哄熀紜錛屾槸鍒涙柊鐨勬簮娉夈傚嚑浣曞唴鏍鎬笌鏁板鐨勮仈緋婚潪甯哥揣瀵嗭紝緇撳悎寮婧愬嚑浣曞唴鏍竜pencascade璋堣皥瀛︿範(fàn)榪囩▼鍜屾暟瀛︾殑璁よ瘑銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202309/534255-20230912082718381-749066138.png" alt="" /></p> <p id="1694478442098"></p> <h2>2 楂樹腑鏃朵唬</h2> <p>鍦ㄥ垰瀛︿範(fàn)鐨勬椂鍊欙紝鎬繪槸鍏堜粠綆鍗曠殑寮濮嬪叆鎵嬨傛瘮濡傦紝鍏堢湅鐪嬬洿綰褲佸渾鏄粈涔堬紝鎬庝箞鏄劇ず鍑烘潵銆傞暱鏂逛綋銆佸渾鏌變綋絳夋庝箞鐢˙REP榪涜琛ㄧず錛屾庝箞鏄劇ず鍦ㄥ睆騫曚笂銆傝繖涓椂鍊欒冭檻闂鏄父浜烘濈淮錛屾垜璁や負(fù)鏄珮涓椂浠c?/p> <p>姣斿錛屾庝箞璁$畻浜岀淮鐩寸嚎涓庡渾鐨勪氦鐐瑰憿錛熶笂榪囬珮涓殑閮藉榪囷紝鑱旂珛鐩寸嚎涓庡渾鐨勪竴鍏冧簩嬈℃柟紼嬬粍錛屽皢瑙f柟紼嬬粍鐨勪唬鐮佸浐鍖栧湪浠g爜涓傚綋璁$畻妞渾涓庡渾鐨勪氦鐐規(guī)椂錛屼篃鍋氬悓鏍風(fēng)殑澶勭悊錛屽氨鏄鍐欑偣浠g爜銆傞珮涓嚑浣曞寰楀ソ鐨勶紝鍙兘浼?xì)璇存垜鍙互鐢ㄥ悜閲忓Q屽悜閲忕殑鏂規(guī)硶浼?xì)姣斾唬鏁扮殑鏂规硶閫熷害瑕佸揩銆?/p> <p>鍐嶆瘮濡傦紝鎬庝箞璁$畻鏇茬嚎鐨勫姬闀垮拰鏇查潰鐨勯潰縐憿錛熻綆楁洸綰垮彲浠ラ氳繃瀵規(guī)洸綰胯繘琛岄噰鏍風(fēng)偣錛屽皢鐐硅繛鎴愬孌電嚎錛屽啀鍒嗗埆璁$畻姣忓皬孌電嚎孌電殑闀垮害绱姞灝辨槸浜嗐傞潰縐挶浠篃鍙互綾諱技澶勭悊錛屽皢鏇查潰紱繪暎鎴愪笁瑙掑艦鎴栧洓杈瑰艦錛屽啀灝嗚繖浜涗笁瑙掑艦鎴栧洓杈瑰艦闈㈢Н绱姞銆傝繖浜涙柟娉曢兘鑳藉疄鐜幫紝浣嗘槸鎬ц兘銆佺簿搴﹂兘浼?xì)鎴愪负闂銆傝璁$畻寰楃簿搴﹂珮錛岄噰鏍峰氨瑕佸瘑錛屽氨浼?xì)甯︽潵鎬ц兘闂銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202309/534255-20230912082736855-663600608.png" alt="" /></p> <h2>3 澶у鏃朵唬</h2> <p>鍒頒簡澶у鏃朵唬瀛︿範(fàn)榪囬珮絳夋暟瀛︺佺嚎鎬т唬鏁扮瓑錛屾湁浜嗘洿鏈夊姏鐨勫伐鍏鋒潵瑙e喅鏇翠竴鑸棶棰樸傞潰鍚戝璞$紪紼嬪拰鏁板涔熸槸鐩擱氱殑錛屽氨鏄皢闂鎶借薄鐨勮兘鍔涖傝繖涓椂鍊欑溂涓病鏈夌洿綰褲佸渾銆丅鏍鋒潯鏇茬嚎銆佸鉤闈€佺悆闈€丅鏍鋒潯鏇查潰絳夌瓑錛屽彧鏈夌嚎Curve鍜岄潰Surface銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202309/534255-20230912082751089-1682592835.png" alt="" /></p> <p>鍐嶈繘涓姝ユ娊璞★紝灝嗙嚎Curve涓庝竴鍏冨嚱鏁癋(x)瀵瑰簲錛屽皢闈urface涓庡鍏冨嚱鏁板搴擣(x,y)錛屼笌鏁板寤虹珛浜嗚仈緋匯?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202309/534255-20230912082759877-1574928138.png" alt="" /></p> <p>榪欐椂灝卞彲浠ヤ嬌鐢ㄦ暟瀛﹀伐鍏峰闂榪涜澶勭悊浜嗐傚璁$畻鏇茬嚎寮ч暱錛屽氨鍙樻垚涓涓鍒囧悜閲忕殑縐垎銆傛洸綰垮垏鍚戦噺闇瑕佽綆椾竴闃跺鏁幫紝銆奣he NURBS Book銆嬬瓑涔︿笂璁$畻B鏍鋒潯寰垎鐨勫叕寮忓氨鏈夌敤錛岀湅寰匓鏍鋒潯鏇茬嚎鍜岀湅寰呭渾涓鏍蜂簡銆?/p> <p>縐垎鐨勮綆楀彲浠ヤ嬌鐢ㄦ暟鍊兼柟娉曪紝濡侼ewton-Cotes鎴朑auss縐垎娉曪紝浣跨敤鏇村皯鐨勮凱浠h幏寰楁洿楂樼殑綺懼害錛岀▼搴忎紭鍖栫殑鏂瑰悜涔熸竻鏅般?/p> <p> </p> <p>浠巓pencascade鐨勭被math_Function鍜宮ath_MultipleVarFunction鍙互鍙互鐪嬪嚭錛岃澶氬嚑浣曢棶棰橀兘鎶借薄鎴愪簡鏁板闂銆傛湁寰堝浜洪棶鎴戯紝鎬庢牱鎵嶇畻鍏ラ棬浜唎pencascade鍛紵閭e氨鏄濊冮棶棰樼殑鏂瑰紡杞崲鎴愭暟瀛︾殑鏂瑰紡錛屾垜瑙夊緱灝辯畻鍏ラ棬浜嗐傚啀鍏蜂綋鐐瑰彲鎿嶄綔鐐瑰憿錛?strong>棣栧厛灝辨槸鏁版嵁緇撴瀯鐨勫叆闂紝鎺屾彙BREP杈圭晫琛ㄧず娉曪紝濡傚湪鍦嗘煴闈urface涓婃鍑轟竴涓皬闈㈢墖Face錛岃兘姝e父鏄劇ず鍑烘潵灝辯畻鐞嗚Вopencascade涓殑BREP緇撴瀯銆傚叾嬈℃槸鍑犱綍綆楁硶鍏ラ棬錛屽氨鏄皢浠巑ath_Function鍜宮ath_MultipleVarFunction鎵鏈夌殑媧劇敓綾葷殑鏁板鍏紡鍐欏嚭鏉ャ?/strong>榪欎袱鐐瑰姩鎵嬪仛瀹岋紝鎴戣寰楀彲浠ョ畻鍏ラ棬浜嗐?/p> <p> </p> <h2>4 鐮旂┒鐢熸椂浠?/h2> <p>濡傛灉澶у鏃朵唬鎴戜滑鎺屾彙浜嗗井鍒嗐佺Н鍒嗐佺嚎鎬т唬鏁幫紝鍒扮爺絀剁敓鏃朵唬搴旇鎺屾彙鍙樺垎銆佸亸寰垎鏂圭▼銆佹渶浼樺寲鐞嗚絳夌瓑銆傚鍋忓井鍒嗘柟紼嬬敤浜庢瀯閫犺繃娓℃洸闈紝鏇茬嚎鏇查潰鎷熷悎鍏夐『鏈鍚庨兘鎶借薄鎴愬甫綰︽潫鐨勯潪綰挎ф柟紼嬬粍鐨勬眰瑙c?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202309/534255-20230912082824272-2076450802.png" alt="" /></p> <p>鍒扮爺絀剁敓鏃朵唬鍥犱負(fù)鎺屾彙鐨勬暟瀛﹀伐鍏鳳紝浼?xì)澶勭悊鐪嬩笂鍘诲緢绠鍗曚絾澶勭悊璧鋒潵鏇村鏉傜殑闂錛氬涓婂浘鎵紺虹殑榪囨浮Blend錛屼互鍙婅挋闈kinning鍜屾壂鎺燬weep絳夈?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202309/534255-20230912082833044-1553004147.png" alt="" /></p> <p>榪欐椂涔熷彲浠ユ湁涓浜涙櫤鑳界畻娉曪紝濡傞仐浼犵畻娉曘佽殎緹わ紝綺掑瓙緹SO浼樺寲綆楁硶錛孉I絳夛紝浣跨敤浠跨敓銆侀仐浼犲彉寮傜瓑鎵嬫浣挎眰瑙h凱浠f洿蹇敹鏁涖備負(fù)浼犵粺浼樺寲綆楁硶鎻愪緵鍒濆瑙o紝浣夸紶緇熺畻娉曡兘鏇村揩銆佹洿鍑嗗湴鎵懼埌瑙f瀽瑙o紝涓嶈嚦浜庢繁闄峰眬閮ㄦ渶浼樿В涓笉鑳借嚜鎷斻傚湪opencascade涓篃鏈夌浉鍏沖疄渚嬶紝濡俶ath_PSO銆傝繖浜涙櫤鑳界畻娉曟湁闅忔満鎬э紝涓嶅儚瑙f瀽綆楁硶閭f牱婊¤凍涓瀹氱害鏉熸潯浠跺繀瀹氫細(xì)鎵懼埌鐩稿鍑嗙‘絳旀銆傚彧鑳戒綔涓哄儚鏇查潰姹備氦涔嬬綉鏍肩鏁f硶錛屼綔涓哄弬鏁拌凱浠f硶鐨勯澶勭悊銆傚埌榪欎釜鏃朵唬錛屾煡鐪嬬浉鍏蟲妧鏈鏂囨鏃犲帇鍔涳紝闈㈠涓鑸殑鍑犱綍闂閮藉簲璇ュ彲浠ヤ粠瀹瑰簲瀵廣傚拰鐮旂┒鐢熶竴鏍烽潰瀵圭殑闂鏇村姞鍏蜂綋錛屼細(xì)閽葷墰瑙掑皷銆?/p> <h2>5 鎬葷粨</h2> <p>緇間笂鎵榪幫紝鍑犱綍鍐呮牳鍙互鐪嬫垚涓涓暟瀛﹀簱鐨勫瓙闆嗭紝鍙槸鍦ㄥ嚑浣曞浘褰笂鐨勫簲鐢ㄣ傚涔?fàn)鍑犱綍鍐呮牳鐨剺q囩▼綾繪瘮浜庡鐢熸椂浠f帉鎻$殑鏁板宸ュ叿銆傚湪楂樹腑鏃朵唬錛岀湅闂寰堝叿浣擄紝鍙兘case by case鐨勫鐞嗭紝鍔熻兘鑳藉仛鍑烘潵銆傚埌澶у鏃朵唬錛屾湁浜嗕竴瀹氱殑鎶借薄鑳藉姏錛堜笌闈㈠悜瀵硅薄緙栫▼涓鏍鳳級錛岀湅闂鍏鋒湁涓鑸э紝鑳戒嬌鐢ㄦ洿楂樼駭鐐圭殑鏁板宸ュ叿鏉ュ鐞嗭紝鏈夎兘鍔涙潵鍏奸【綺懼害鍜屾ц兘銆傚埌浜嗙爺絀剁敓鏃朵唬錛屽氨涓嶆曞埆浜烘潵鍗¤剸瀛愶紝鐢氳嚦鑳借秴瓚婂埆浜恒傝繖涓椂鍊欎笉瑕佺粰鑷繁璁鵑檺錛屾壘鍑嗗枩嬈㈢殑鏂瑰悜鍘婚捇鐗涜灝栵紝緇堜細(xì)鏈夋墍鎴愩?/p> <p> </p><img src ="http://m.shnenglu.com/eryar/aggbug/230089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/eryar/" target="_blank">eryar</a> 2023-09-18 20:47 <a href="http://m.shnenglu.com/eryar/archive/2023/09/18/occt_math.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OpenCASCADE鏇查潰浜ょ嚎鍒嗙被http://m.shnenglu.com/eryar/archive/2023/08/21/intpatch_line.htmleryareryarSun, 20 Aug 2023 16:27:00 GMThttp://m.shnenglu.com/eryar/archive/2023/08/21/intpatch_line.htmlhttp://m.shnenglu.com/eryar/comments/230019.htmlhttp://m.shnenglu.com/eryar/archive/2023/08/21/intpatch_line.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/230019.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/230019.htmlOpenCASCADE鏇查潰浜ょ嚎鍒嗙被

eryar@163.com

Abstract. OpenCascade classify the intersection line between two surfaces. A intersection line may be either geometric: line, circle, ellipse, parabola, hyperbola as defined in the class GLine, or analytic as defined in the class ALine, or defined by a set of points(coming from a walking algorithm) as defined in the class WLine. Or described by a restriction line on one of the surfaces as RLine.

Key Words. Surface Intersection, Intersection Line

1 Introduction

OpenCASCADE涓涓や釜鏇查潰姹備氦寰楀埌鐨勪氦綰胯繘琛屼簡鍒嗙被錛屽涓嬬被鍥炬墍紺猴細(xì)

浜ょ嚎鎬誨叡鍒嗕負(fù)鍥涚被錛?/p>

  • ALine錛欰nalytic瑙f瀽鏇茬嚎錛屼富瑕佷負(fù)涓や釜浜屾鏇查潰姹備氦鎵寰楋紝濡傚渾鏌遍潰銆佺悆闈€佸渾閿ラ潰絳変箣闂寸殑浜ょ嚎錛?/li>
  • GLine錛欸eometric鍑犱綍鏇茬嚎錛屽嵆浜ょ嚎鍙互琛ㄧず鎴愮畝鍗曠殑浜屾鏇茬嚎錛屽鐩寸嚎銆佸渾銆佹姏鐗╃嚎絳夛紱
  • WLine錛歐alking榪借釜娉曞緱鍒扮殑浜ょ嚎錛屼繚瀛樹簡榪借釜璺嚎涓婄殑涓や釜鏇查潰鐨勪氦鐐癸紱
  • RLine錛歊estriction鍙楅檺浜ょ嚎錛岃繖鏉′氦綰垮彲鑳藉彧鍦ㄤ竴涓潰涓婏紱

涓嬮潰鎴戜滑浣跨敤Tcl鑴氭湰鍦―RAW涓獙璇佷竴涓嬭繖鍥涚被浜ょ嚎鐨勬潵婧愶紝鍔犳繁瀵規(guī)洸闈㈡眰浜ょ畻娉曠殑鐞嗚В銆傚垎綾誨甫鏉ヤ簡楹葷儲錛屽彲浠ュ甫鐫闂錛氫負(fù)浠涔堣鍒嗚繖鍑犵綾誨瀷錛熸湁浠涔堝ソ澶勶紵鏉ョ湅榪欑瘒鏂囩珷銆傝鐢ㄥソ寮婧愮殑涓滆タ錛屽叾瀹炶姹傝繕鏄緢楂樼殑錛岄渶瑕佸婧愮爜鏈夌浉瀵規(guī)繁鍏ョ殑鐞嗚В銆?/p>

2 ALine

Analytic浜ょ嚎鏄簩嬈℃洸闈㈡眰浜ゆ墍寰楋紝浜屾鏇查潰鏄洜涓哄彲浠ョ粺涓浣跨敤浜屾鍨嬫潵琛ㄧず鐨勮В鏋愭洸闈紝涔熸槸銆婅В鏋愬嚑浣曘嬩腑鐮旂┒鐨勪富瑕佸唴瀹廣傛垜浠彲浠ュ湪DRAW涓瀯閫犲渾鏌遍潰涓庡渾閿ラ潰姹備氦楠岃瘉涓涓嬨俆CL鑴氭湰濡備笅錛?/p>

# Test for IntPatch_ALine.
# Geometry surfaces.
cylinder s1 0 0 0 1 1 1 2
cone s2 0 0 0 0 0 1 1 0 0 30 3
# Topology faces
mkface f1 s1 0 2*pi -8 8
mkface f2 s2 0 2*pi -5 5
# Intersection.
bop f1 f2
bopsection r
# Display result.
vdisplay f1 f2 r

鐢熸垚緇撴灉濡備笅鍥炬墍紺猴紝鍏朵腑綰㈣壊涓轟氦綰匡細(xì)

DEBUG婧愮爜鍙互鐪嬪埌鏄嬌鐢ㄧ被IntPatch_ImpImpIntersection 璁$畻姹備氦錛屽嵆涓や釜瑙f瀽鏇查潰姹備氦綆楁硶綾匯?/p>

3 GLine

Geometric鍑犱綍鏇茬嚎褰㈠紡綆鍗曪紝濡傛灉浜ょ嚎鐢ㄥ嚑浣曟洸綰挎潵琛ㄧず錛屽浜庡悗緇畻娉曟湁濂藉銆傚騫抽潰涓庡渾閿ラ潰姹備氦綰匡紝鍦嗘煴闈笌鍦嗘煴闈㈡眰浜ょ瓑錛岄兘浼?xì)寰楀埌鍑犱綍鏇簿U褲傚皢涓婇潰鐨勫渾鏌遍潰鎹㈡垚騫抽潰涓庡渾閿ラ潰姹備氦鎴戜滑鍙互鍦―RAW楠岃瘉緇忓吀鐨勫渾閿ヤ笌騫抽潰浜ょ嚎錛氭牴鎹鉤闈綅緗笉鍚岋紝鍙互寰楀埌鍦嗐佹き鍦嗐佸弻鏇茬嚎絳夊嚑浣曟洸綰褲俆CL鑴氭湰濡備笅鎵紺猴細(xì)

# Test for IntPatch_GLine.
cone s1 0 0 0 0 0 1 30 3
plane s2 0 0 0 0 0 1 
mkface f1 s1 0 2*pi -5 5
mkface f2 s2 -8 8 -8 8
bop f1 f2
bopsection r
vdisplay f1 f2 r

璁$畻浜ょ嚎緇撴灉濡備笅鍥炬墍紺猴細(xì)

鎴戜滑鏀瑰彉騫抽潰鐨勬硶鍚戯紝浣垮叾鏂滅潃涓庡渾閿ラ潰姹備氦錛屼細(xì)寰楀埌妞渾錛?/p>

榪樺彲浠ュ緱鍒板弻鏇茬嚎銆佹姏鐗╃嚎絳夛紝鍚屽浠彲浠ヨ嚜宸卞皾璇曚竴涓嬨?/p>

4 WLine

瀵逛簬NURBS鏇查潰姹備氦錛屼竴鑸細(xì)浣跨敤Marching鏂規(guī)硶錛屽浗鍐呮暀鏉愮炕璇戜負(fù)榪借釜娉曘傚湪鐪嬨婂湴鐞冭剦鍔ㄣ嬫椂錛屾敞鎰忓埌瀵逛簬澶ц崏鍘熶笂鐨勬按鐗涖佸ぇ璞$瓑鍔ㄧ墿鎴愮兢緇撻槦鐨勮縼寰欎嬌鐢ㄤ簡榪欎釜璇嶏紝榪欎釜璇嶇殑瀛楅潰鎰忔濇湁琛岃繘銆佽鍐涳紝鍒楅槦琛岃繘涔嬫剰錛屽鏋滅粨鍚坥pencascade涓殑walking鎰熻緲昏瘧涓?strong>琛岃繘娉?/strong>鏇磋創(chuàng)鍒囷紝鍥犱負(fù)鍦╫pencascade涓浜庢眰浜や笓闂ㄦ湁涓猵ackage鍚嶄負(fù)IntWalk錛屽叾涓被IntWalk_PWalking鏉ヤ嬌鐢╩arching method瀵逛袱涓弬鏁版洸闈㈣繘琛屾眰浜ゃ俉alk鏈夎璧頒箣鎰忥紝鎵浠ュ浜庝嬌鐢╓alk鏂規(guī)硶寰楀埌鐨勪氦綰垮懡鍚嶄負(fù)WLine銆傚浜嶯URBS鏇查潰姹備氦鍙婁簩嬈℃洸闈笌NURBS鏇查潰姹備氦錛屼嬌鐢ㄤ簡Marching鏂規(guī)硶錛學(xué)Line鐨勬潵婧愭槸娓呮櫚鐨勩傜戶緇嬌鐢ㄤ笂闈㈢殑鑴氭湰錛屽彧闇瑕佸皢涓婅堪涓や釜闈㈣漿鎹㈡垚NURBS鏇查潰鍗沖彲瑙﹀彂Marching娉曡繘琛屾眰浜ゃ俆CL鑴氭湰濡備笅錛?/p>

# Test for IntPatch_WLine.
cone s1 0 0 0 0 0 1 30 3
plane s2 0 0 0 1 1 2 
mkface f1 s1 0 2*pi -5 5
mkface f2 s2 -8 8 -8 8
nurbsconvert f1 f1
nurbsconvert f2 f2
bop f1 f2
bopsection r
vdisplay f1 f2 r

閫氳繃IntWalk_PWalking琛岃繘娉?/strong>閰嶅悎涓夊弬鏁拌凱浠f硶錛屽皢琛岃繘榪囩▼涓殑浜ょ偣閮戒繚瀛樺湪WLine涓?/p>

铏界劧緇撴灉涓庝笂闈㈢湅涓婂幓涓鏍鳳紝鍐呴儴浜ょ嚎宸茬粡涓嶆槸綆鍗曠殑鍑犱綍鏇茬嚎浜嗐?/p>

5 RLine

Restriction浜ょ嚎鏄彈闄愪氦綰匡紝榪欑綾誨瀷鐨勪氦綰垮彧浼?xì)浣嶄簬涓涓潰涓娿傝繖閲屾垜浠瀯閫犱竴涓鉤闈㈠強涓庡鉤闈㈤噸鍙犵殑涓涓狽URBS鏇查潰鏉ユ眰浜よ繘琛岃В閲娿俆CL鑴氭湰濡備笅錛?/p>

# Test for IntPatch_RLine.
plane s1 0 0 0 0 0 1
plane s2 0 0 0 0 0 1
mkface f1 s1 -5 5 -5 5
mkface f2 s2 -8 8 -8 8
nurbsconvert f1 f1
bop f1 f2
bopsection r
vdisplay f1 f2 r

DEBUG浼?xì)鍙戠幇杩欎袱涓洸闈㈢殑浜ぞU夸負(fù)RLine錛屽茍鍦ㄧ敓鎴怰Line鏃舵寚瀹氫氦綰垮睘浜庡摢涓洸闈紝鏄湪S1鏇查潰SetArcOnS1榪樻槸鍦⊿2鏇查潰SetArcOnS2錛?/p>

鐢熸垚浜ょ嚎濡備笅鍥炬墍紺猴細(xì)

褰撶劧鍙互浣跨敤RLine鏉ュ垽鏂袱涓洸闈㈡槸鍚︽湁閲嶅彔錛屼絾鏄湪opencascade涓袱涓洸闈㈤噸鍙犲彨Tangent Face錛屽彲浠ュ皢涓婅堪NURBS闈笉杞崲錛岃繕鏄嬌鐢ㄤ袱涓噸鍙犲鉤闈㈡潵楠岃瘉錛?/p>

姹備氦鏈鍚庡浜ょ嚎鏁版嵁褰掑茍鏃剁殑浠g爜鏈夌偣涓嶆暍鎭淮錛?/p>

6 Conclusion

緇間笂鎵榪幫紝瀵逛袱涓洸闈㈡眰浜ゅ緱鍒扮殑浜ょ嚎榪涜鍒嗙被錛岄伩鍏嶄氦綰塊兘鏄疦URBS鏇茬嚎錛屽彲浠ユ槸綆鍗曠殑浜屾鏇茬嚎錛屾彁楂樺悗緇畻娉曟ц兘銆傚湪鐞嗚В婧愮爜鐨勫熀紜涓婏紝鍙互鏍規(guī)嵁瀹為檯搴旂敤鍦烘櫙閫夋嫨楂樻晥鐨勭畻娉曘傚鑻ュ彧鏄眰涓や釜妯″瀷涔嬮棿鐨勪氦綰匡紝鍙互鐩存帴浣跨敤鏇查潰姹備氦綆楁硶錛屼竴鑸儏鍐典笅鎬ц兘榪樻槸涓嶉敊鐨勩傚綋鐒剁悊瑙f簮鐮佸悗錛屽彲浠ョ粨鍚堝疄闄呭簲鐢ㄥ満鏅彲浠ュ姹備氦綆楁硶鍋氳繘涓姝ヤ紭鍖栥?/p>

瑕佹繁鍏ョ悊瑙pencascade婧愮爜錛岀啛緇冧嬌鐢―RAW鏄竴涓浉瀵瑰鏄撶殑璺嚎銆傚洜涓哄湪DRAW涓彲浠ヤ嬌鐢═cl鑴氭湰蹇熼獙璇佸悇縐嶆兂娉曪紝鐢氳嚦鐩存帴DEBUG婧愮爜錛屼粠琛ㄥ悜娣卞叆鍒頒笌婧愮爜浣滆呯洿鎺ュ璇濄?/p>

 



eryar 2023-08-21 00:27 鍙戣〃璇勮
]]>
鎬ц兘鎻愬崌-BVH灞傛鍖呭洿浣?/title><link>http://m.shnenglu.com/eryar/archive/2023/08/16/occt_bvh.html</link><dc:creator>eryar</dc:creator><author>eryar</author><pubDate>Wed, 16 Aug 2023 15:28:00 GMT</pubDate><guid>http://m.shnenglu.com/eryar/archive/2023/08/16/occt_bvh.html</guid><wfw:comment>http://m.shnenglu.com/eryar/comments/230016.html</wfw:comment><comments>http://m.shnenglu.com/eryar/archive/2023/08/16/occt_bvh.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/eryar/comments/commentRss/230016.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/eryar/services/trackbacks/230016.html</trackback:ping><description><![CDATA[<h1 style="text-align: center;"><strong>鎬ц兘鎻愬崌-BVH灞傛鍖呭洿浣?/strong></h1> <p style="text-align: center;"><a href="mailto:eryar@163.com"><u>eryar@163.com</u></a></p> <p><strong>Abstract.</strong>  OpenCASCADE provides BVH to achieve high performance in AIS of visualization module. To understand BVH usage will help us to understand many code of opencascade.</p> <p><strong>Key Words.</strong> BVH, Bounding Volume Hierarchy, LBVH, SAH Algorithm</p> <h2>1 Introduction</h2> <p>灞傛鍖呭洿浣撴妧鏈?(BVH) 鎸囩殑鏄皢鎵鏈夊寘鍥翠綋鍒嗗眰閫愭鍦板啀嬈″寘鍥達(dá)紝鑾峰緱涓涓洿澶х殑鍖呭洿浣擄紝鐩村埌鍖呭洿浣忔墍鏈夌墿浣撱傚疄闄呬笂錛屽畠鏄竴涓爲(wèi)褰㈢粨鏋勶紝鍥犳鍙互浠跨収鏍?wèi)鐨劸l撴瀯錛屽皢涓や釜鎴栦笁涓皬鐨勫寘鍥翠綋鍖呭洿鎴愪竴涓洿澶х殑鍖呭洿浣擄紝浠ユ綾繪帹銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202308/534255-20230816231907497-786197437.png" alt="" /></p> <p>BVH鏄竴縐嶄互鐗╀綋BV涓哄熀紜榪涜鍒掑垎鐨勭粨鏋勩傚畠鐢辨牴鑺傜偣銆佸唴閮ㄨ妭鐐瑰拰鍙跺瓙鑺傜偣緇勬垚銆傚叾涓彾瀛愯妭鐐瑰瓨鏀劇墿浣擄紝姣忎釜闈炲彾瀛愯妭鐐歸兘鏈夊寘鍥翠綋錛岀埗鑺傜偣鍙互鎶婂瓙鑺傜偣鍖呭洿璧鋒潵銆傛瘡涓潪鍙跺瓙鑺傜偣鐨勫寘鍥翠綋澶у皬錛屾槸瀹冩墍鍖呭惈鐨勬墍鏈夌墿浣撶殑鍖呭洿浣撶殑鎬誨拰錛屾墍浠ュ畠鍦ㄧ┖闂翠笂姣旇緝绱у噾錛岄潪甯擱傜敤浜庨渶瑕佸ぇ閲忔眰鐩鎬氦嫻嬭瘯鐨勫簲鐢ㄥ満鏅紝濡傚厜綰胯拷韙佺鎾炴嫻嬨佸皠綰跨浉浜ゆ祴璇曚箣綾葷殑搴旂敤鍦哄悎涓?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202308/534255-20230816231928196-399409810.png" alt="" height="248" width="550" /></p> <p> </p> <p>BVH鍦∣penCASCADE涓篃鏈夊箍娉涘湴搴旂敤錛屽寮婧愮増鏈腑鐨勬ā鍨嬪揩閫熺鎾炴嫻嬶紝浣跨敤綾籅RepExtrema_ShapeProximity. 妯″瀷閫夋嫨鎿嶄綔錛屽厜綰胯窡韙瓑綆楁硶涓兘鏈夊簲鐢ㄣ傚湪</p> <p><a ><u>https://www.cnblogs.com/opencascade/p/6804446.html</u></a></p> <p>涓粙緇嶅浣曢亶鍘咮VH鏍?wèi)锛屾湰鏂囦富瑕佷粙缁岯VH浣跨敤鏂規(guī)硶銆?/p> <h2>2 BVH</h2> <p>OpenCASCADE涓殑BVH鏄浉瀵圭嫭绔嬬殑涓涓寘錛屾槸浣滆呮牴鎹鏂囧疄鐜扮殑綰疌++鐗堟湰縐繪榪囨潵鐨勩傚湪DRAW涓殑QA鍝佽川淇濊瘉Bugs涓彁渚涗簡BVH鐨勪嬌鐢ㄧず渚嬨?/p> <h3>2.1 BVH_Set</h3> <p>棣栧厛瑕佸畾涔夊眰嬈″寘鍥寸洅鐨勯泦鍚圫et鏉ユ瀯閫燘VH鏍?wèi)锛屼粠BVH_Set鍩虹被媧劇敓鐨勯泦鍚堟槸鍙互鐩存帴浣跨敤鐨勶細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202308/534255-20230816232017300-2093555063.png" alt="" /></p> <p>濡傚彲浠ョ洿鎺ヤ嬌鐢˙VH_Triangulation錛屼篃鍙互鐩存帴浣跨敤BVH_BoxSet錛?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202308/534255-20230816232024543-1233759109.png" alt="" /></p> <p>浠庤繖浜涚被鍚嶄腑錛屾垜浠彲浠ョ湅鍑哄湪姹傛ā鍨嬮棿鏋佸艱窛紱籈xtrema錛屼笁緇村彲瑙嗗寲Graphic3d鍙奡elect3D鎷懼彇鍙婂竷?yōu)當(dāng)鎿嶄綔BOPTools涓兘鏈塀VH鐨勫簲鐢ㄣ?/p> <p>灝嗗厓绱犻氳繃Add鍑芥暟娣誨姞鍒癇VH闆嗗悎鍚庯紝璋冪敤BVH()鍑芥暟灝卞彲浠ユ瀯閫燘VH鏍?wèi)銆?/p> <h3>2.2 BVH_Traverse</h3> <p>瀵逛簬鍗曚釜BVH鐨勯亶鍘嗘彁渚涚被BVH_Traverse錛屼竴鑸殑搴旂敤鍦烘櫙濡傛眰璺濈涓鐐筆鏈榪戠殑妯″瀷錛屾垨鑰呬綅浜庢煇涓┖闂磋寖鍥村唴鐨勬墍鏈夋ā鍨嬨備唬鐮佸涓嬫墍紺猴細(xì)</p> <pre class="language-cpp highlighter-hljs"><code>//======================================================================= //function : ShapeSelector //purpose : Implement the simplest shape's selector //======================================================================= class ShapeSelector : public BVH_Traverse <Standard_Real, 3, BVH_BoxSet <Standard_Real, 3, TopoDS_Shape>, Standard_Boolean> { public: //! Constructor ShapeSelector() {} //! Sets the Box for selection void SetBox (const Bnd_Box& theBox) { myBox = Bnd_Tools::Bnd2BVH (theBox); } //! Returns the selected shapes const NCollection_List<TopoDS_Shape>& Shapes () const { return myShapes; } public: //! Defines the rules for node rejection by bounding box virtual Standard_Boolean RejectNode (const BVH_Vec3d& theCornerMin, const BVH_Vec3d& theCornerMax, Standard_Boolean& theIsInside) const Standard_OVERRIDE { Standard_Boolean hasOverlap; theIsInside = myBox.Contains (theCornerMin, theCornerMax, hasOverlap); return !hasOverlap; } //! Defines the rules for leaf acceptance virtual Standard_Boolean AcceptMetric (const Standard_Boolean& theIsInside) const Standard_OVERRIDE { return theIsInside; } //! Defines the rules for leaf acceptance virtual Standard_Boolean Accept (const Standard_Integer theIndex, const Standard_Boolean& theIsInside) Standard_OVERRIDE { if (theIsInside || !myBox.IsOut (myBVHSet->Box (theIndex))) { myShapes.Append (myBVHSet->Element (theIndex)); return Standard_True; } return Standard_False; } protected: BVH_Box <Standard_Real, 3> myBox; //!< Selection box NCollection_List <TopoDS_Shape> myShapes; //!< Selected shapes };</code></pre> <p>涓昏鏄粠綾籅VH_Traverse媧劇敓騫墮噸鍐欎袱涓櫄鍑芥暟RejectNode()鍜孉ccept()錛屽嵆鍦≧ejectNode()涓畾涔夋帓闄ょ粨鐐圭殑瑙勫垯錛屽湪Accept()涓鐞嗘弧瓚蟲潯浠剁殑鎯呭喌銆?/p> <h3>2.3 BVH_PairTraverse</h3> <p>瀵逛簬涓や釜BVH鐨勯亶鍘嗘彁渚涚被BVH_PairTraverse錛屼竴鑸殑搴旂敤鍦烘櫙鏈夋眰涓や釜Mesh涔嬮棿鐨勬渶榪戣窛紱伙紝鍒ゆ柇涓や釜Mesh涔嬮棿鏄惁鏈夌鎾炵瓑銆?/p> <pre class="language-cpp highlighter-hljs"><code>//======================================================================= //function : MeshMeshDistance //purpose : Class to compute the distance between two meshes //======================================================================= class MeshMeshDistance : public BVH_PairDistance<Standard_Real, 3, BVH_BoxSet<Standard_Real, 3, Triangle>> { public: //! Constructor MeshMeshDistance() {} public: //! Defines the rules for leaf acceptance virtual Standard_Boolean Accept (const Standard_Integer theIndex1, const Standard_Integer theIndex2) Standard_OVERRIDE { const Triangle& aTri1 = myBVHSet1->Element (theIndex1); const Triangle& aTri2 = myBVHSet2->Element (theIndex2); Standard_Real aDistance = TriangleTriangleSqDistance (aTri1._Node1, aTri1._Node2, aTri1._Node3, aTri2._Node1, aTri2._Node2, aTri2._Node3); if (aDistance < myDistance) { myDistance = aDistance; return Standard_True; } return Standard_False; } };</code></pre> <p>涓昏涔熸槸浠嶣VH_PairTraverse媧劇敓騫墮噸鍐欎袱涓櫄鍑芥暟RejectNode()鍜孉ccept()銆?/p> <h3>2.4 BVH_Builder</h3> <p>鍏充簬BVH鐨勬瀯閫犳彁渚涘縐岯uilder錛岄粯璁ゆ槸浣跨敤鍩轟簬SAH綆楁硶鐨凚VH_BinnedBuilder鏉ユ瀯閫燘VH鏍?wèi)锛屽鏋滆鍒囨崲涓嶅悓鐨勬瀯閫犲櫒錛屽彲浠ュ湪BVH闆嗗悎鐨勬瀯閫犲嚱鏁頒腑浼犲叆涓涓?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202308/534255-20230816232215793-1477285548.png" alt="" /></p> <p>涓嬮潰緇欏嚭姹備袱涓狹esh涔嬮棿鏈榪戣窛紱葷殑紺轟緥浠g爜錛?/p> <p> </p> <pre class="language-cpp highlighter-hljs"><code> // Define BVH Builder opencascade::handle <BVH_LinearBuilder <Standard_Real, 3> > aLBuilder = new BVH_LinearBuilder <Standard_Real, 3>(); // Create the ShapeSet opencascade::handle <BVH_BoxSet <Standard_Real, 3, Triangle> > aTriangleBoxSet[2]; for (Standard_Integer i = 0; i < 2; ++i) { aTriangleBoxSet[i] = new BVH_BoxSet <Standard_Real, 3, Triangle> (aLBuilder); TopTools_IndexedMapOfShape aMapShapes; TopExp::MapShapes (aShape[i], TopAbs_FACE, aMapShapes); for (Standard_Integer iS = 1; iS <= aMapShapes.Extent(); ++iS) { const TopoDS_Face& aF = TopoDS::Face (aMapShapes(iS)); TopLoc_Location aLoc; const Handle(Poly_Triangulation)& aTriangulation = BRep_Tool::Triangulation(aF, aLoc); const int aNbTriangles = aTriangulation->NbTriangles(); for (int iT = 1; iT <= aNbTriangles; ++iT) { const Poly_Triangle aTriangle = aTriangulation->Triangle (iT); // Nodes indices Standard_Integer id1, id2, id3; aTriangle.Get (id1, id2, id3); const gp_Pnt aP1 = aTriangulation->Node (id1).Transformed (aLoc.Transformation()); const gp_Pnt aP2 = aTriangulation->Node (id2).Transformed (aLoc.Transformation()); const gp_Pnt aP3 = aTriangulation->Node (id3).Transformed (aLoc.Transformation()); BVH_Vec3d aBVHP1 (aP1.X(), aP1.Y(), aP1.Z()); BVH_Vec3d aBVHP2 (aP2.X(), aP2.Y(), aP2.Z()); BVH_Vec3d aBVHP3 (aP3.X(), aP3.Y(), aP3.Z()); BVH_Box<Standard_Real, 3> aBox; aBox.Add (aBVHP1); aBox.Add (aBVHP2); aBox.Add (aBVHP3); aTriangleBoxSet[i]->Add (Triangle (aBVHP1, aBVHP2, aBVHP3), aBox); } } // Build BVH aTriangleBoxSet[i]->Build(); } // Initialize selector MeshMeshDistance aDistTool; // Select the elements aDistTool.SetBVHSets (aTriangleBoxSet[0].get(), aTriangleBoxSet[1].get()); Standard_Real aSqDist = aDistTool.ComputeDistance(); if (!aDistTool.IsDone()) std::cout << "Not Done" << std::endl; else theDI << "Distance " << sqrt (aSqDist) << "\n";</code></pre> <h2>3 Conclusion</h2> <p>鍑嗙‘銆佺ǔ瀹氥侀珮鏁堟槸楂樺搧璐ㄥ嚑浣曞唴鏍哥殑鐩爣錛屾垜浠湪寮鍙戣蔣浠舵椂錛屼篃瑕佹椂鍒昏拷姹傝繖涓洰鏍囥傝孊VH灞傛鍖呭洿鐩掓妧鏈槸鎻愬崌鎬ц兘鐨勪竴縐嶆柟寮忥紝鐞嗚ВBVH鐨勪嬌鐢紝鎴戜滑鍙互鐞嗚Вopencascade涓揩閫熸眰鏋佸糆xtrema錛屼氦浜掗夋嫨SelectMgr絳夊緢澶氫唬鐮併傜敋鑷蟲垜浠篃鍙互鍙備笌璐$尞錛屽灝?/p> <pre class="language-cpp highlighter-hljs"><code>Standard_Boolean BRepExtrema_Poly::Distance (const TopoDS_Shape& S1, const TopoDS_Shape& S2, gp_Pnt& P1, gp_Pnt& P2, Standard_Real& dist)</code></pre> <p>榪欎釜O(N^2)鐨勬敼閫犳垚BVH鐨勬潵瀵規(guī)瘮涓涓嬫ц兘銆?/p> <p> </p><img src ="http://m.shnenglu.com/eryar/aggbug/230016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/eryar/" target="_blank">eryar</a> 2023-08-16 23:28 <a href="http://m.shnenglu.com/eryar/archive/2023/08/16/occt_bvh.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鎬ц兘鎻愬崌-絀洪棿浜屽弶鏌ユ壘鏍?/title><link>http://m.shnenglu.com/eryar/archive/2023/08/06/NCollection_UBTree.html</link><dc:creator>eryar</dc:creator><author>eryar</author><pubDate>Sun, 06 Aug 2023 10:53:00 GMT</pubDate><guid>http://m.shnenglu.com/eryar/archive/2023/08/06/NCollection_UBTree.html</guid><wfw:comment>http://m.shnenglu.com/eryar/comments/230005.html</wfw:comment><comments>http://m.shnenglu.com/eryar/archive/2023/08/06/NCollection_UBTree.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/eryar/comments/commentRss/230005.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/eryar/services/trackbacks/230005.html</trackback:ping><description><![CDATA[<h2 style="text-align: center;"><strong>鎬ц兘鎻愬崌-絀洪棿浜屽弶鏌ユ壘鏍?/strong></h2> <p style="text-align: center;"><a href="mailto:eryar@163.com"><u>eryar@163.com</u></a></p> <p><strong>Abstract. </strong> OpenCASCADE provides NCollection_UBTree to achieve high performance search overlapped boxes. The algorithm of unbalanced binary tree of overlapped bounding boxes. Once the tree of boxes  of geometric objects is constructed, the algorithm is capable of fast geometric selection of objects.  The tree can be easily updated by adding to it a new object with bounding box. The time of adding to the tree  of one object is O(log(N)), where N is the total number of  objects, so the time  of building a tree of  N objects is O(N(log(N)). The search time of one object is O(log(N)). Defining  various classes  inheriting NCollection_UBTree::Selector  we can perform various kinds of selection over the same b-tree object.</p> <p><strong>Key Words.</strong> Unbalanced Binary Tree, Binary Search Tree, Binary Sort Tree, Bounding Box</p> <h2>1 Introduction</h2> <p>闈炲鉤琛′簩鍙夋爲(wèi)錛圲nbalanced Binary Tree錛夊張鍙簩鍙夋煡鎵炬爲(wèi)錛圔inary Search Tree錛夋垨浜屽弶鎺掑簭鏍?wèi)锛圔inary Sort Tree錛夈傚畠鐨勫畾涔夊緢綆鍗曪紝灝辨槸宸﹀瓙鏍?wèi)涓婃墍鏈夎妭鐐圭殑鍊奸兘瑕佸皬浜庢牴鑺傜偣涓婄殑鍊箋傚彸瀛愭爲(wèi)涓婃墍鏈夎妭鐐瑰奸兘瑕佸ぇ浜庢牴鑺傜偣涓婄殑鍊箋傚湪浜屽弶鏌ユ壘鏍?wèi)涓婃墽琛屾搷浣滄棄櫁翠笌鏍?wèi)鐨勯珮搴︽垚姝f瘮銆傚浜庝竴媯靛惈鏈塶涓粨鐐圭殑瀹屽叏浜屽弶鏍?wèi)锛寴q欎簺鎿嶄綔鐨勬渶鍧忔儏鍐佃繍琛屾椂闂翠負(fù)O(lg(n))銆備絾鏄鏋滄爲(wèi)鏄惈n涓粨鐐圭殑綰挎ч摼錛屽垯榪欎簺鎿嶄綔鐨勬渶鍧忕殑鎯呭喌榪愯鏃墮棿涓篛(n)銆備竴媯甸殢鏈烘瀯閫犵殑浜屽弶鏌ユ壘鏍?wèi)鐨勬湡鏈涢珮搴︿负O(lg(n))錛屼粠鑰岃繖縐嶆爲(wèi)涓婃搷浣滅殑騫沖潎鏃墮棿涓篛(lg(n))銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202308/534255-20230806184735309-333339535.png" alt="" /></p> <p>鍑犱綍鎼滅儲錛坓eometry searching錛夊ぇ鑷村垎涓ょ被錛氫竴綾繪槸鍖哄煙鎼滅儲闂錛坮ange searching problem錛夛紝鍙︿竴綾繪槸鐐圭殑瀹氫綅闂錛坧oint location problem錛夈傚尯鍩熸悳绱㈤棶棰樿鍥炵瓟鐨勬槸緇欏畾涓涓尯鍩燂紝鐪嬫湁澶氬皯妯″瀷灞炰簬榪欎釜鍖哄煙銆傚綋鐒訛紝鎴戜滑鍙互瀵規(guī)墍鏈夋ā鍨嬭繘琛岄亶鍘嗭紝榪欑綆楁硶鏃墮棿澶嶆潅搴︿負(fù)O(N)錛屾晥鐜囦笉楂樸傚父瑙佺殑楂樻晥鐨勫尯鍩熸悳绱㈢畻娉曟湁k-D鏍?wèi)锛宬-D鏍?wèi)灏辨槸涓縐嶅緇寸殑騫寵 浜屽弶鏍?wèi)銆傝繕鏈夋瘮杈冨父瑙佺殑KNN闂錛岃繖浜涢兘鏄綆楀嚑浣曞鐞嗙殑闂銆?/p> <p>OpenCASCADE涓彁渚涗竴縐嶇┖闂存煡鎵句簩鍙夋爲(wèi)綆楁硶NCollection_UBTree錛屽瓧闈㈡剰鎬濇槸闈炲鉤琛′簩鍙夋爲(wèi)Unbalanced Binary Tree銆傛妸涓婂浘涓殑鏁板瓧鎹㈡垚鍖呭洿鐩掞紝鏋勯犱簩鍙夋煡鎵炬爲(wèi)銆備負(fù)浜嗚В鍐蟲煡鎵句簩鍙夋爲(wèi)鍗曢摼闂錛屽姞鍏ラ殢鏈哄鐞嗭紝鍙互浣挎煡鎵炬ц兘杈懼埌O(log(N))錛岀浉瀵規(guī)櫘閫氶亶鍘嗛熷害鑰岃█榪樻槸涓嶉敊鐨勩傛湰鏂囩粨鍚堢ず渚嬩唬鐮佽鏄庡浣曚嬌鐢ㄨ繖涓潪騫寵 浜屽弶鏍?wèi)銆?/p> <h2>2 Example</h2> <p>鍦∣penCASCADE涓湁澶氫釜鍑芥暟鏉ュ疄鐜板皢寰堝鏃犲簭杈笶dges榪炴帴鎴怶ire錛岄渶瑕佹煡璇竴鏉¤竟Edge鐨勪竴涓《鐐筕ertex鍦ㄤ竴瀹氱簿搴﹁寖鍥村唴鐩歌繛鐨勯《鐐筕ertex鏈夊摢浜涳紵</p> <p>棣栧厛錛屽疄鐜頒竴涓夋嫨綾伙紝閫氳繃閫夋嫨綾繪潵榪涜榪囨護(hù)錛?/p> <pre class="language-cpp highlighter-hljs"><code>typedef NCollection_UBTree<Standard_Integer, Bnd_Box> BoxTree; typedef NCollection_UBTreeFiller<Standard_Integer, Bnd_Box> BoxTreeFiller; class BoxSelector : public BoxTree::Selector { public: BoxSelector(const TColgp_SequenceOfPnt& thePoints, Standard_Real theTolerance) : Selector() , myPoints(thePoints) , myTolerance(theTolerance) { } virtual Standard_Boolean Reject(const Bnd_Box& theBox) const { return theBox.IsOut(myBox); } virtual Standard_Boolean Accept(const Standard_Integer& theIndex) { if (theIndex > myPoints.Size() || theIndex == myIndex) { return Standard_False; } const gp_Pnt& aPnt = myPoints.Value(theIndex); if (aPnt.SquareDistance(myPnt) < myTolerance) { myResultIndex.Append(theIndex); return Standard_True; } return Standard_False; } void SetCurrentPoint(const gp_Pnt& thePnt, Standard_Integer theIndex) { myPnt = thePnt; myBox.Add(thePnt); myIndex = theIndex; } const TColStd_ListOfInteger& GetResultIndex() const { return myResultIndex; } void ClearResultIndex() { myResultIndex.Clear(); } protected: private: const TColgp_SequenceOfPnt& myPoints; gp_Pnt myPnt; Bnd_Box myBox; Standard_Integer myIndex; Standard_Real myTolerance; TColStd_ListOfInteger myResultIndex; };</code></pre> <p>涓昏瀹炵幇涓や釜鎶借薄鍑芥暟Reject()鍜孉ccept()錛屼互鍙婅緗綋鍓嶉夋嫨鍣ㄧ殑鐘舵併俁eject()鍑芥暟鐢ㄦ潵鍒ゆ柇瑕佹煡鎵劇殑Box涓庡綋鍓嶇┖闂磋寖鍥寸殑鐘舵侊紝濡傛灉鍦ㄥ錛屽垯榪斿洖True銆傚綋涓や釜Box鏈夌浉浜ゆ椂錛屼細(xì)璋冪敤Accept()鍑芥暟錛屽湪姝ゅ嚱鏁頒腑鍒ゆ柇涓や釜鐐圭殑璺濈鏄惁鍦ㄥ宸寖鍥村唴錛岃嫢鍦ㄥ宸寖鍥村唴錛屽垯灝嗙偣璁板綍璧鋒潵銆備富鍑芥暟main浠g爜濡備笅錛?/p> <pre class="language-cpp highlighter-hljs"><code>int main(int argc, char* argv[]) { // Fill tree with random points. BoxTree aBoxTree; BoxTreeFiller aTreeFiler(aBoxTree); math_BullardGenerator aRandom; TColgp_SequenceOfPnt aPoints; for (Standard_Integer i = 1; i <= 100; ++i) { gp_Pnt aPnt(aRandom.NextReal(), aRandom.NextReal(), aRandom.NextReal()); aPoints.Append(aPnt); Bnd_Box aBox; aBox.Add(aPnt); aTreeFiler.Add(i, aBox); } aTreeFiler.Fill(); // Query points near the given point. BoxSelector aSelector(aPoints, 0.1); for (Standard_Integer i = aPoints.Lower(); i <= aPoints.Upper(); ++i) { const gp_Pnt& aPnt = aPoints.Value(i); aSelector.SetCurrentPoint(aPnt, i); Standard_Integer aSize = aBoxTree.Select(aSelector); if (aSize > 0) { std::cout << "Search Point : " << aPnt.X() << " \t " << aPnt.Y() << " \t " << aPnt.Z() << std::endl; const TColStd_ListOfInteger& aResult = aSelector.GetResultIndex(); for (TColStd_ListOfInteger::Iterator aIt(aResult); aIt.More(); aIt.Next()) { const gp_Pnt& aPoint = aPoints.Value(aIt.Value()); std::cout << "Target Point : " << aPoint.X() << " \t " << aPoint.Y() << " \t " << aPoint.Z() << std::endl; } std::cout << "=============================" << std::endl; } aSelector.ClearResultIndex(); } return 0; }</code></pre> <p>鍏堢敤闅忔満鍑芥暟闅忔満鐢熸垚100涓偣錛屽茍灝嗙偣閫氳繃BoxTreeFiller娣誨姞鍒版煡鎵炬爲(wèi)aBoxTree涓紝璋冪敤Fill鍑芥暟鏋勯犳煡鎵炬爲(wèi)銆?/p> <p>鍐嶄嬌鐢ㄧ被BoxSelector鏉ヨ繘琛屽揩閫熸煡鎵撅紝鏌ユ壘涔嬪墠鍏堣緗綋鍓嶇偣鍙婂寘鍥寸洅銆傜劧鍚庤皟鐢╝BoxTree.Select(aSelector)榪涜鏌ユ壘銆?/p> <h2>3 Conclusion</h2> <p>綾籒Collection_UBTree閫氳繃鏋勯犲寘鍥寸洅鐨勯潪騫寵 浜屽弶鏍?wèi)鏉ュ姞蹇尯鍩熸悳鐑﹂熷害銆傚浣曟彁楂樻悳绱㈤熷害錛屾槸璁$畻鍑犱綍澶勭悊鐨勮寖鐣淬傚湪OpenCASCADE涓繖涓被浣跨敤鍦烘櫙姣旇緝澶氾紝濡傚皢鏃犲簭杈規(guī)瀯閫犳垚Wire鏃墮兘鐢ㄨ繖涓被錛欱RepLib_MakeWire::Add(const TopTools_ListOfShape& L), ShapeAnalysis_FreeBounds::ConnectEdgesToWires()銆傚寘鎷悗闈㈠紩鍏ョ殑BVH閮芥槸涓轟簡鎻愰珮鎼滅儲閫熷害錛屽湪鍚堥傜殑鍦烘櫙涓浣跨敤榪欎簺綆楁硶錛屼細(xì)瀵圭▼搴忔ц兘鐨勬彁鍗囨湁寰堝ぇ甯姪銆?/p> <p> </p><img src ="http://m.shnenglu.com/eryar/aggbug/230005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/eryar/" target="_blank">eryar</a> 2023-08-06 18:53 <a href="http://m.shnenglu.com/eryar/archive/2023/08/06/NCollection_UBTree.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OpenCASCADE鏇查潰姹備氦涔嬭拷韙硶http://m.shnenglu.com/eryar/archive/2023/05/30/IntWalk_PWalking.htmleryareryarMon, 29 May 2023 16:39:00 GMThttp://m.shnenglu.com/eryar/archive/2023/05/30/IntWalk_PWalking.htmlhttp://m.shnenglu.com/eryar/comments/229911.htmlhttp://m.shnenglu.com/eryar/archive/2023/05/30/IntWalk_PWalking.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229911.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229911.htmlOpenCASCADE鏇查潰姹備氦涔嬭拷韙硶

eryar@163.com

1 Introduction

鏈卞績闆勭瓑钁椼婅嚜鐢辨洸綰挎洸闈㈤犲瀷鎶鏈嬩功涓鏇查潰姹備氦鐨勮拷韙硶錛圡arching method錛夋湁璇︾粏浠嬬粛錛岄鍏堟洸闈㈡眰浜よ拷韙硶鐨勬彁鍑烘槸1990騫碦.E. BARNHILL鍜孲.N. KERSEY鐨勪竴綃囪鏂囷細(xì)A marching method for parametric surface/surface intersection鎰熷叴瓚g殑鍙互涓嬭澆鏉ョ湅鐪嬪師鏂囷細(xì)

1990騫存垜鎵嶅嚑宀侊紝閭f椂瀹墮噷鏈夐粦鐧界數(shù)瑙嗘満宸茬粡綆椾笉閿欑殑銆傚浜庝竴鑸琋URBS鏇查潰鐨勬眰浜わ紝鍏堢敤鍒嗗壊紱繪暎娉曟眰寰椾氦綰跨殑鎷撴湸緇撴瀯鍜屼氦鐐圭殑浼拌鍊鹼紝鐒跺悗鍐嶅簲鐢ㄨ凱浠f硶鏍規(guī)嵁浼拌鍊兼眰寰楃簿紜氦鐐廣傚鏋滆涓轟氦鐐瑰垎甯冧笉澶熺粏瀵嗭紝鍙互瀵圭綉鏍艱繘琛屽姞瀵嗭紝鍐嶅簲鐢ㄨ凱浠f硶寰楀埌鏂扮殑綺劇‘浜ょ偣錛岀敱姝ゅ彲浠ヨ幏寰楀畬鏁淬佽嚧瀵嗙殑綺劇‘浜ょ嚎錛岃屾棤闇搴旂敤榪借釜娉曘?/p>

2 榪借釜娉曠殑鍘熺悊

榪借釜娉曠殑鍘熺悊錛氬亣璁句袱鏇查潰闂村叡鏈塏涓氦綰跨幆錛屽厛閫氳繃鏌愮姹備氦鏂規(guī)硶紜畾鍚勪氦綰跨幆涓婄殑涓涓氦鐐癸紝鐒跺悗浠ヨ浜ょ偣涓哄垵濮嬩氦鐐癸紝鏍規(guī)嵁浜ょ嚎鐨勫嚑浣曟ц川錛屾寜鐓т竴瀹氭闀胯綆楄鏉′氦綰夸笂涓嬩竴浜ょ偣鐨勮繎浼煎鹼紝鍐嶅簲鐢ㄨ凱浠f硶姹傚緱綺劇‘浜ょ偣銆傛部浜ょ嚎璧板悜涓嶆柇鍓嶈繘錛岀洿鍒伴亶鍘嗘暣鏉′氦綰褲傝拷韙硶鐨勪紭鐐規(guī)槸鍦ㄦ眰寰楅浜ょ偣鍚庢悳绱氦綰垮叾浣欎氦鐐圭殑閫熷害闈炲父蹇紝涓旈傜敤鑼冨洿騫褲備笉璁轟綍縐嶅弬鏁版洸闈紝鍙鏇查潰涓嶅瓨鍦ㄩ潪姝e垯鐐癸紝騫跺彲浠ユ眰寰楁洸闈笂浠繪剰鐐圭殑鍧愭爣浣嶇疆銆佹硶鐭€佸垏鐭㈢瓑鍑犱綍淇℃伅錛屽氨鍙互鐢ㄨ拷韙硶姹備氦銆傝拷韙硶鐨勯棶棰樻槸鐩墠灝氭棤闈炲父鏈夋晥鐨勬柟娉曟潵姹傚緱鎵鏈変氦綰跨幆鐨勮搗濮嬬偣銆傚湪鏈変簺鎯呭喌涓嬪姹傚垵濮嬬偣鎵鑺辮垂鐨勬椂闂磋繙澶т簬榪借釜娉曡繃紼嬩腑鎵鑺傜渷鐨勬椂闂達(dá)紝鑰屼負(fù)浜嗚妭鐪佸姹傚垵濮嬬偣鐨勬椂闂達(dá)紝鍙堝彲鑳芥紡鎺夋煇浜涗氦綰匡紝褰撳湪瀛ょ珛浜ょ偣鍜屾瘮杈冨皬鐨勪氦綰跨幆鏃跺挨鐢氥?/p>

3 榪借釜娉曠殑瀹炵幇

OpenCASCADE瀹炵幇鏇查潰姹備氦榪借釜娉曠殑綾繪槸IntWalk_PWalking錛屾敞鎰忕湅綾繪敞閲婁腑鐨勫崟璇峬arching:

榪借釜娉曚腑闇瑕佽В鍐充袱涓棶棰橈細(xì)

  • 濡備綍紜畾榪借釜鏂瑰悜錛氱洰鍓嶅父鐢ㄥ垏綰挎硶紜畾榪借釜鏂瑰悜錛屽嵆浼拌鐪熷疄浜ょ嚎鍦ㄨ鐐圭殑鍒囩嚎鏂瑰悜錛屽茍浠ユ浣滀負(fù)榪借釜鏂瑰悜銆傚綋鏇查潰闂村瓨鍦ㄥ垏鐐規(guī)椂錛岀敱浜庡湪鍒囩偣闄勮繎涓ゆ洸闈㈢殑娉曠煝闈炲父鎺ヨ繎錛屾棤娉曠‘瀹氳拷韙柟鍚戯紝榪欎篃灝辨槸鎵璋撶殑“榪峰悜”闂錛圱angent tracks錛夈傚湪綾籌ntWalk_PWalking涓紝榪借釜鏂瑰悜浣滀負(fù)鎴愬憳鍙橀噺tgdir錛屽皢榪唬娉曡綆楃殑浜ょ嚎鐨勫垏鍚戦噺淇濆瓨璧鋒潵錛屽綋鏈?ldquo;榪峰悜”闂鏃訛紝璋冪敤鍑芥暟RepartirOuDiviser鏉ヤ慨澶嶃?/li>
  • 濡備綍紜畾榪借釜姝ラ暱錛氳拷韙闀跨殑閫夋嫨閫氬父鏈変袱縐嶆柟娉曪細(xì)1錛夊浐瀹氭闀垮拰2錛夊彉姝ラ暱涔熺О涓鴻嚜閫傚簲姝ラ暱娉旳daptive Step銆傚洜涓鴻凱浠f硶鏄牴鎹及璁$偣鐨勫弬鏁版潵璁$畻綺劇‘浜ょ偣錛屼負(fù)浜嗛伩鍏嶆牴鎹偣鍙嶆眰鍙傛暟錛岀洿鎺ユ牴鎹垏綰挎柟鍚戠殑X,Y鍒嗛噺鏉ョ‘瀹氬弬鏁扮殑姝ラ暱銆傝櫧鐒舵湁浜涘彉鍖栵紝鎬諱綋涓婄湅浣跨敤鐨勬槸鍥哄畾姝ラ暱娉曘傝嫢鐩存帴鏍規(guī)嵁浜ょ嚎鍒囩嚎鏂瑰悜tgdir涔樹互姝ラ暱寰楀埌鐐癸紝鏄渶瑕佸弽姹傜偣鍦ㄦ洸闈笂鐨勫弬鏁般傛闀夸富瑕佷笌綺懼害璁劇疆鏈夊叧錛岀簿搴﹁緗珮錛屾闀胯秺灝忥紝鍒欎細(xì)瀵艱嚧璁$畻閫熷害鎱紝姹傚嚭鐨勪氦鐐硅繃瀵嗭紝榪樺彲鑳藉甫鏉ヤ笉紼沖畾鍥犵礌銆傚姝ラ暱榪囧ぇ錛屽彲鑳?浼?xì)瀵艰嚧鑴P浠d笉鏀舵暃鎴栬呰煩鍒板彟澶?涓鏉′氦綰夸笂銆?/li>

浣跨敤榛樿綺懼害璁劇疆錛岃拷韙硶寰楀埌鐨勪氦鐐規(guī)暟閲忓氨寰堝ぇ銆傝嫢璁劇疆綺懼害浣庯紝浜ょ偣鏁伴噺浼?xì)鏄庢槕謬彏畱锛屾彁楂樿绠楅熷害銆?/p>

濡備笂鍥炬墍紺猴紝鑻ヤ袱涓洸闈㈠彧鏈変竴涓氦綰匡紝浣跨敤鏈夎拷韙硶鏃跺彧闇瑕佹寚瀹氫氦綰跨殑鍒濆浜ょ偣錛屽嵆鍙互寰楀埌鏁翠釜浜ょ嚎銆傚綋涓ゆ洸闈㈡湁澶氫釜浜ょ嚎鎴栨湁瀛ょ珛浜ょ偣鏃訛紝灝遍渶瑕佹壘鍑哄涓氦綰跨殑璧峰浜ょ偣錛?/p>

涓婂浘鎵紺轟綅緗氦綰挎柇寮鐢熸垚涓ゆ潯浜ょ嚎錛屼竴涓槸緇胯壊涓涓槸綰㈣壊錛岃繖縐嶆儏鍐靛氨闇瑕佸垎鍒寚鍑轟袱涓氦綰胯搗濮嬬偣銆?/p>

4 Conclusion

緇間笂鎵榪幫紝鏇查潰姹備氦榪借釜娉曠殑浼樼偣鏄湪姹傚緱棣栦氦鐐瑰悗鎼滅儲浜ょ嚎鍏朵綑浜ょ偣鐨勯熷害闈炲父蹇紝涓旈傜敤鑼冨洿騫褲傝拷韙硶鐨勯棶棰樻槸鐩墠灝氭棤闈炲父鏈夋晥鐨勬柟娉曟潵姹傚緱鎵鏈変氦綰跨幆鐨勮搗濮嬬偣銆傛洸闈㈡眰浜や竴鑸細(xì)閲囩敤閫氱敤鎬ц緝濂界殑緗戞牸娉?榪唬娉?榪借釜娉曚笁鑰呯浉緇撳悎鐨勬柟娉曘傚簲鐢ㄧ綉鏍兼硶姹傚緱浜ょ偣鐨勫垵濮嬩及璁″鹼紝鍐嶇敤榪唬娉曟眰寰楃簿紜氦鐐癸紝騫朵互鍏朵負(fù)璧風(fēng)偣榪涜榪借釜錛岀洿鍒板緱鍒版暣鏉$簿紜氦綰褲?/p>

IntWalk_PWalking榪借釜娉曠殑姝ラ暱涓庣簿搴﹀瘑鍒囩浉鍏籌紝閫夋嫨鍚堥傜殑綺懼害錛屽彲浠ヤ嬌浜ょ嚎鐨勪氦鐐規(guī)暟閲忓皯錛屾彁楂樿綆楅熷害銆傚洜涓虹簿搴﹁秺楂樿拷韙繃紼嬩腑寰楀埌鐨勮拷韙偣瓚婂錛屽浜庢瘡涓拷韙偣閮介渶瑕佷嬌鐢ㄨ凱浠f硶璁$畻綺劇‘浜ょ偣銆?/p>

eryar 2023-05-30 00:39 鍙戣〃璇勮
]]>
OpenCASCADE鏇查潰姹備氦涔嬭凱浠f硶2http://m.shnenglu.com/eryar/archive/2023/05/28/occt_IntWalk_TheInt2S.htmleryareryarSun, 28 May 2023 05:05:00 GMThttp://m.shnenglu.com/eryar/archive/2023/05/28/occt_IntWalk_TheInt2S.htmlhttp://m.shnenglu.com/eryar/comments/229908.htmlhttp://m.shnenglu.com/eryar/archive/2023/05/28/occt_IntWalk_TheInt2S.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229908.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229908.htmlOpenCASCADE鏇查潰姹備氦涔嬭凱浠f硶2

eryar@163.com

1 Introduction

鏈卞績闆勭瓑钁椼婅嚜鐢辨洸綰挎洸闈㈤犲瀷鎶鏈嬩功涓鏇查潰姹備氦鐨勮凱浠f硶鏈夎緇嗕粙緇嶏紝鍏朵腑鍏充簬鏇查潰榪唬姹備氦鐨勫師鐞嗕粙緇嶅涓嬶細(xì)涓烘眰寰椾袱涓洸闈㈢簿紜殑浜ょ偣錛孨ewton-Raphson榪唬娉曞緱鍒板箍娉涘簲鐢紝璇ユ硶鐨勪紭鐐逛負(fù)

  • 璁$畻綺懼害楂橈紝閫熷害蹇紝鍦ㄥ垵鍊奸夋嫨姣旇緝鍚堢悊鐨勬儏鍐典笅錛屼竴鑸粎闇瑕佽凱浠d簩鍒頒笁嬈″氨鍙互浣夸氦鐐圭殑綺懼害浠庣櫨鍒嗕箣鍑犳彁楂樺埌涓囧垎涔嬪嚑鐢氳嚦鐧句竾鍒嗕箣涓鐨勬暟閲忕駭銆?/li>
  • 閫傜敤鑼冨洿騫匡紝鍙鑳借幏寰楁洸闈㈢殑鍑犱綍浣嶇疆銆佸垏鐭€佹硶鐭㈢瓑淇℃伅錛屼笉璁轟粈涔堢被鍨嬬殑鏇查潰閮藉彲浠ヤ嬌鐢ㄨ凱浠f硶銆?/li>

鍏剁己鐐規(guī)槸瀵瑰垵濮嬪艱姹傝緝涓ユ牸錛屽垵濮嬪奸夋嫨涓嶅綋錛屽彲鑳藉鑷磋凱浠d笉鏀舵暃錛屼篃灝辨棤娉曞緱鍒扮簿紜殑浜ょ偣銆?/p>

鍦ㄦ洸闈㈡眰浜ょ瓑闂涓紝涓鑸彲鏍規(guī)嵁鍙備笌鍙樺寲鐨勫弬鏁版暟閲忓皢榪唬娉曞垎涓轟笁鍙傛暟榪唬娉曞拰鍥涘弬鏁拌凱浠f硶涓ょ綾誨瀷銆傛垜浠煡閬擄紝涓寮犲弬鏁版洸闈㈡湁涓や釜鍙傛暟錛屼袱寮犲弬鏁版洸闈㈠叡鏈夊洓涓弬鏁板彉閲忋傞噰鐢ㄤ笁鍙傛暟榪唬娉曟椂錛屼袱涓洸闈㈢殑鍥涗釜鍙傛暟涓彧鏈変笁涓弬鏁板弬涓庤凱浠h繃紼嬶紝鑰屼繚鎸佸彟涓涓弬鏁板浐瀹氫笉鍙橈紝榪欏疄闄呬笂灝辨槸璁$畻涓嶅彉鍙傛暟鐨勭瓑鍙傛暟綰夸笌鍙︿竴寮犳洸闈㈢殑浜ょ偣銆傞噰鐢ㄥ洓鍙傛暟榪唬娉曟椂錛屼袱寮犳洸闈㈢殑鍥涗釜鍙傛暟鍙橀噺閮藉弬涓庤凱浠h繃紼嬶紝鍥涜呴兘鍙兘鍙樺寲銆備袱縐嶈凱浠f硶鍚勬湁鍏朵紭緙虹偣銆傚湪涓嬭堪鎯呭喌涓嬩互搴旂敤涓夊弬鏁拌凱浠f硶涓哄疁錛?/p>

  • 瑕佹眰灝嗕氦鐐硅凱浠h嚦鏌愬弬鏁扮嚎涓婏紝浠ュ埄浜庡悗緇ц拷韙眰浜ゆ硶涓護(hù)闄ゆ棤鏁堝垵鍊肩偣錛?/li>
  • 褰撲氦綰挎帴榪戜簬鍙傛暟杈圭晫鏃訛紝甯屾湜灝嗕氦鐐硅凱浠h嚦鍑嗙‘鐨勮竟鐣屼笂錛屼互渚胯繘琛岃鍓瓑鎿嶄綔銆?/li>

浣嗗浜庝竴鑸氦鐐癸紝涓夊弬鏁版硶鍒欐湭蹇呴傜敤銆傞鍏堥亣鍒扮殑闂鏄湪鍥涗釜鍙傛暟涓夋嫨浣曡呬綔涓轟笉鍙樺弬鏁幫紝鍥哄畾鍙傛暟閫夋嫨涓嶅綋鍙兘闄嶄綆榪唬鏀舵暃閫熷害浠ヨ嚦鏍規(guī)湰涓嶆敹鏁涳紝鎴栬呯牬鍧忎氦綰挎嫇鏈寸粨鏋勭殑姝g‘鎬с傝凱浠f硶鏈韓涓嶈兘澶熸垚鐙珛鐨勬眰浜ゆ柟娉曪紝涓昏鍦ㄨ拷韙硶涓嬌鐢紝OpenCASCADE涓洸闈㈡眰浜よ拷韙硶鐨勭被鏄疘ntWalk_PWalking銆傚墠闈㈢殑blog宸茬粡浠嬬粛浜嗘洸闈氦姹傜殑紱繪暎緗戞牸娉曪紝鍜岀被IntWalk_TheInt2S瀹炵幇鍘熺悊錛屾湰鏂囦富瑕佷粙緇峅penCASCADE鏇查潰姹備氦榪唬娉曠殑綾籌ntWalk_TheInt2S鐨勭敤娉曠粨鏋溿?/p>

2 Newton榪唬姹備氦

鍓嶆枃浠嬬粛浜嗘洸闈㈡眰浜ょ殑紱繪暎緗戞牸娉曪紝浣跨敤綾籌ntPolyh_Intersection鏉ヨ綆椾袱涓洸闈㈢綉鏍肩殑浜ょ嚎錛岃綆楃粨鏋滄槸緗戞牸浜ょ嚎鐨勪竴緇勪氦鐐廣傛妸紱繪暎緗戞牸鐨勪氦鐐逛綔涓鴻凱浠f硶鐨勮緭鍏ワ紝鏉ユ鏌ヤ竴涓嬭凱浠f硶鐨勮綆楃粨鏋溿?/p>

Newton榪唬娉曠殑杈撳叆鏄垵濮嬩及璁$偣鍒嗗埆鍦ㄤ袱涓洸闈笂鐨勫洓涓弬鏁幫紙u1, v1, u2, v2錛夛紝鍙婁袱涓洸闈S1鍜宎S2錛岃凱浠g粓姝㈢簿搴olTangency銆傚皢璁$畻緇撴灉杈撳嚭錛屽叾涓涓涓窛紱繪槸榪唬鐨勭簿紜間笌緗戞牸涓婁氦鐐圭殑璺濈錛岀浜屼釜璺濈鏄簿紜氦鐐圭殑u1, v1, u2,v2鍒嗗埆鍦ㄤ袱涓洸闈笂鐐圭殑璺濈錛屽彲浠ョ湅鍑虹粡榪嘚ewton榪唬璁$畻鍚庯紝鏍規(guī)嵁綺劇‘浜ょ偣鐨勫弬鏁皍1, v1, u2, v2璁$畻鍑轟袱涓洸闈笂鐨勭偣鍦ㄦ寚瀹氱殑綺懼害涓嬫槸閲嶅悎鐨勩備負(fù)浜嗕究浜庤瀵燂紝灝嗚綆楃粨鏋滆緭鍑哄埌DRAW涓煡鐪嬨?/p>

鍏朵腑綰㈣壊鐨勭嚎鏄袱涓洸闈㈢綉鏍肩殑浜ょ嚎錛岀豢鑹茬殑綰挎槸灝嗙綉鏍間氦綰跨粡榪嘚ewton榪唬鍚庡緱鍒扮簿紜氦綰褲傚啀灝嗕袱涓氦綰夸笌瀹為檯鏇查潰涓璧鋒樉紺烘潵瀵規(guī)瘮錛?/p>

浠庡浘涓婂彲浠ョ湅鍑猴紝緇胯壊鐨勪氦綰垮凡緇忚兘姣旇緝鍑嗙‘鍦拌〃杈句袱涓洸闈箣闂寸殑鐩鎬氦鎯呭喌銆傛瘮緗戞牸浜ょ嚎鏁堟灉濂姐?/p>

3 Conclusion

緇間笂鎵榪幫紝灝嗘洸闈㈡眰浜ょ殑紱繪暎緗戞牸浜ょ嚎浣滀負(fù)Newton榪唬娉曠殑鍒濆浼拌鐐癸紝鍙互寰楀埌杈冨ソ鐨勪氦綰褲傚悗闈㈠啀鍒嗘瀽涓涓嬫洸闈㈡眰浜ょ殑榪借釜娉曪紝鐪嬪湪榪借釜娉曚腑鏄浣曚嬌鐢ㄧ鏁g綉鏍間氦綰挎暟鎹殑銆傚浜庝竴鑸殑NURBS鏇查潰姹備氦錛屽厛鐢ㄧ鏁g綉鏍兼硶鎴栧垎鍓茬鏁f硶姹傚緱浜ょ嚎鍜屼氦鐐圭殑浼拌鍊鹼紝鐒跺悗鍐嶅簲鐢∟ewton榪唬娉曠敱浼拌鍊兼眰寰楃簿紜氦鐐廣傚鏋滆涓轟及璁′氦鐐瑰垎甯冧笉澶熺粏瀵嗭紝鍙互瀵圭綉鏍煎姞瀵嗭紝鐢辨鍙互寰楀埌瀹屾暣銆佽嚧瀵嗙殑綺劇‘浜ょ嚎鑰屾棤闇搴旂敤榪借釜娉曘?/p>

eryar 2023-05-28 13:05 鍙戣〃璇勮
]]>
OpenCASCADE鏇查潰姹備氦涔嬭凱浠f硶http://m.shnenglu.com/eryar/archive/2023/05/27/IntWalk_TheInt2S.htmleryareryarSat, 27 May 2023 15:35:00 GMThttp://m.shnenglu.com/eryar/archive/2023/05/27/IntWalk_TheInt2S.htmlhttp://m.shnenglu.com/eryar/comments/229907.htmlhttp://m.shnenglu.com/eryar/archive/2023/05/27/IntWalk_TheInt2S.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229907.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229907.htmlOpenCASCADE鏇查潰姹備氦涔嬭凱浠f硶

eryar@163.com

1 Introduction

鏈卞績闆勭瓑钁椼婅嚜鐢辨洸綰挎洸闈㈤犲瀷鎶鏈嬩功涓鏇查潰姹備氦鐨勮凱浠f硶鏈夎緇嗕粙緇嶏紝鍏朵腑鍏充簬鏇查潰榪唬姹備氦鐨勫師鐞嗕粙緇嶅涓嬶細(xì)涓烘眰寰椾袱涓洸闈㈢簿紜殑浜ょ偣錛孨ewton-Raphson榪唬娉曞緱鍒板箍娉涘簲鐢紝璇ユ硶鐨勪紭鐐逛負(fù)

  • 璁$畻綺懼害楂橈紝閫熷害蹇紝鍦ㄥ垵鍊奸夋嫨姣旇緝鍚堢悊鐨勬儏鍐典笅錛屼竴鑸粎闇瑕佽凱浠d簩鍒頒笁嬈″氨鍙互浣夸氦鐐圭殑綺懼害浠庣櫨鍒嗕箣鍑犳彁楂樺埌涓囧垎涔嬪嚑鐢氳嚦鐧句竾鍒嗕箣涓鐨勬暟閲忕駭銆?/li>
  • 閫傜敤鑼冨洿騫匡紝鍙鑳借幏寰楁洸闈㈢殑鍑犱綍浣嶇疆銆佸垏鐭€佹硶鐭㈢瓑淇℃伅錛屼笉璁轟粈涔堢被鍨嬬殑鏇查潰閮藉彲浠ヤ嬌鐢ㄨ凱浠f硶銆?/li>

鍏剁己鐐規(guī)槸瀵瑰垵濮嬪艱姹傝緝涓ユ牸錛屽垵濮嬪奸夋嫨涓嶅綋錛屽彲鑳藉鑷磋凱浠d笉鏀舵暃錛屼篃灝辨棤娉曞緱鍒扮簿紜殑浜ょ偣銆?/p>

鍦ㄦ洸闈㈡眰浜ょ瓑闂涓紝涓鑸彲鏍規(guī)嵁鍙備笌鍙樺寲鐨勫弬鏁版暟閲忓皢榪唬娉曞垎涓轟笁鍙傛暟榪唬娉曞拰鍥涘弬鏁拌凱浠f硶涓ょ綾誨瀷銆傛垜浠煡閬擄紝涓寮犲弬鏁版洸闈㈡湁涓や釜鍙傛暟錛屼袱寮犲弬鏁版洸闈㈠叡鏈夊洓涓弬鏁板彉閲忋傞噰鐢ㄤ笁鍙傛暟榪唬娉曟椂錛屼袱涓洸闈㈢殑鍥涗釜鍙傛暟涓彧鏈変笁涓弬鏁板弬涓庤凱浠h繃紼嬶紝鑰屼繚鎸佸彟涓涓弬鏁板浐瀹氫笉鍙橈紝榪欏疄闄呬笂灝辨槸璁$畻涓嶅彉鍙傛暟鐨勭瓑鍙傛暟綰夸笌鍙︿竴寮犳洸闈㈢殑浜ょ偣銆傞噰鐢ㄥ洓鍙傛暟榪唬娉曟椂錛屼袱寮犳洸闈㈢殑鍥涗釜鍙傛暟鍙橀噺閮藉弬涓庤凱浠h繃紼嬶紝鍥涜呴兘鍙兘鍙樺寲銆備袱縐嶈凱浠f硶鍚勬湁鍏朵紭緙虹偣銆傚湪涓嬭堪鎯呭喌涓嬩互搴旂敤涓夊弬鏁拌凱浠f硶涓哄疁錛?/p>

  • 瑕佹眰灝嗕氦鐐硅凱浠h嚦鏌愬弬鏁扮嚎涓婏紝浠ュ埄浜庡悗緇ц拷韙眰浜ゆ硶涓護(hù)闄ゆ棤鏁堝垵鍊肩偣錛?/li>
  • 褰撲氦綰挎帴榪戜簬鍙傛暟杈圭晫鏃訛紝甯屾湜灝嗕氦鐐硅凱浠h嚦鍑嗙‘鐨勮竟鐣屼笂錛屼互渚胯繘琛岃鍓瓑鎿嶄綔銆?/li>

浣嗗浜庝竴鑸氦鐐癸紝涓夊弬鏁版硶鍒欐湭蹇呴傜敤銆傞鍏堥亣鍒扮殑闂鏄湪鍥涗釜鍙傛暟涓夋嫨浣曡呬綔涓轟笉鍙樺弬鏁幫紝鍥哄畾鍙傛暟閫夋嫨涓嶅綋鍙兘闄嶄綆榪唬鏀舵暃閫熷害浠ヨ嚦鏍規(guī)湰涓嶆敹鏁涳紝鎴栬呯牬鍧忎氦綰挎嫇鏈寸粨鏋勭殑姝g‘鎬с傝凱浠f硶鏈韓涓嶈兘澶熸垚鐙珛鐨勬眰浜ゆ柟娉曪紝涓昏鍦ㄨ拷韙硶涓嬌鐢紝OpenCASCADE涓洸闈㈡眰浜よ拷韙硶鐨勭被鏄疘ntWalk_PWalking銆傛湰鏂囦富瑕佷粙緇峅penCASCADE鏇查潰姹備氦榪唬娉曠殑綾籌ntWalk_TheInt2S鐨勭敤娉曞強鍘熺悊銆?/p>

2 Newton榪唬姹備氦

OpenCASCADE涓袱鏇查潰姹備氦榪唬娉曠敱綾籌ntWalk_TheInt2S瀹炵幇錛屽叾綾諱腑涓昏鍑芥暟鏈夛細(xì)

緇欏畾涓や釜鏇查潰錛屽拰鍒濆浼拌鐐瑰湪涓や釜鏇查潰涓婄殑鍙傛暟(u1, v1), (u2,v2)錛岃凱浠h綆楀嚭綺劇‘浜ょ偣銆傚浐瀹氫笁鍙傛暟鐨勬柟寮忔誨叡鍒嗗洓縐嶇被鍨婭ntImp_ConstIsoparametric錛?/p>

IntImp_UIsoparametricOnCaro1錛氭槸鍥哄畾浼拌鐐瑰湪鏇查潰1涓婄殑鍙傛暟u錛?/p>

IntImp_VIsoparametricOnCaro1錛氭槸鍥哄畾浼拌鐐瑰湪鏇查潰1涓婄殑鍙傛暟v錛?/p>

IntImp_UIsoparametricOnCaro2錛氭槸鍥哄畾浼拌鐐瑰湪鏇查潰2涓婄殑鍙傛暟u錛?/p>

IntImp_VIsoparametricOnCaro2錛氭槸鍥哄畾浼拌鐐瑰湪鏇查潰2涓婄殑鍙傛暟v錛?/p>

涓轟簡閬垮厤涓夊弬鏁拌凱浠f硶鎵句笉鍒頒氦鐐圭殑鎯呭喌錛屼細(xì)鍦ㄥ洓涓柟鍚戜笂鍒嗗埆榪涜璁$畻錛屾繪湁涓涓柟鍚戜笂浼?xì)鎵惧堫C氦鐐癸紝騫跺皢鎵懼埌浜ょ偣鐨勫弬鏁板浐瀹氭儏鍐佃繑鍥烇細(xì)

鍦ㄥ嚱鏁癙erform()涓氱敤姹傝В榪唬鏂圭▼緇勶紝寰楀埌綺劇‘浜ょ偣錛?/p>

鍏朵腑榪唬鏂圭▼緇勪負(fù)鎴愬憳鍙橀噺myZerParFunc錛屾柟紼嬬粍姹傝В浣跨敤綾籱ath_FunctionSetRoot銆傜敱鏂圭▼緇勬眰瑙g被娉ㄩ噴鍙煡錛岄渶瑕佹柟紼嬬粍鐨勪竴闃跺亸瀵兼暟鍗蟲搴radient錛岄噰鐢ㄧ殑鏄疦ewton榪唬娉曘傝嫢鏂圭▼緇勬湁瑙oot涓旀弧瓚崇簿搴﹁姹傦紝鍒欎繚瀛樹笅綺劇‘浜ょ偣鐨勫潗鏍囧煎強鍦ㄤ袱涓洸闈笂鐨勫弬鏁板肩瓑鏁版嵁銆?/p>

 

3 涓夊弬鏁拌凱浠f柟紼嬬粍

涓夊弬鏁拌凱浠f柟紼嬬被涓篏eomInt_TheFunctionOfTheInt2SOfThePrmPrmSvSurfacesOfWLApprox,

鏄粠綾籱ath_FunctionSetWithDerivatives媧劇敓鐨勶紝鍗充笁鍙傛暟榪唬鏂圭▼鏄釜鏂圭▼緇?Function Set)銆傚叾瀹氫箟鍦ㄦ枃浠禝ntImp_ZerParFunc涓紝鍏堜嬌鐢ㄥ嚱鏁癈omputeParameters()鏍規(guī)嵁鍥哄畾鍙傛暟綾誨瀷鏉ョ‘瀹氫及璁$偣鐨勫浐瀹氬弬鏁板強鍙﹀涓変釜鍙傛暟鍙橀噺鐨勫垵濮嬪鹼細(xì)

璁句袱涓弬鏁版洸闈1(u1,v1)錛孲2(u2,v2)錛屽茍宸茬煡涓浜ょ偣鐨勫垵浼拌鐐筆0錛孭0鐐瑰湪涓ゅ紶鏇查潰涓婂搴旂殑鎶曞獎鐐瑰垎鍒負(fù)P1=S1(u0,v0)鍜孭2=S2(s0,t0)銆傜敱浜嶱0鐐逛負(fù)涓浼拌鐐癸紝鎵浠1鍜孭2騫朵笉閲嶅悎銆傝浠0浣滀負(fù)鍥哄畾鍙傛暟錛屽嵆褰撳浐瀹氬弬鏁扮被鍨嬩負(fù)IntImp_UIsoparametricOnCaro1鏃訛紝鍒欓棶棰樿漿鍖栦負(fù)姹倁*,v*,t*錛屼嬌涓ゆ洸闈㈢墖涓婄殑鐐筍1(u*,v*)鍜孲2(s0,t*)閲嶅悎銆傚緩绔嬫柟紼嬬粍錛?/p>

R(u,v,t)=S1(u,v) - S2(s0, t)

閫氳繃鍑芥暟璁$畻涓や釜鏇查潰涓婄殑鐐筽ntsol1鍜宲ntsol2錛屽緱鍒頒笁涓彉閲忕殑鏂圭▼緇勭殑鍊箋?/p>

鍥犱負(fù)瑕佷嬌鐢∟ewton榪唬娉曪紝闇瑕佹彁渚涙柟紼嬬粍鐨勪竴闃跺亸瀵兼暟錛屽嵆Jacobian鐭╅樀錛?/p>

鍑芥暟Derivatives()鐢ㄦ潵璁$畻涓闃跺亸瀵兼暟錛?/p>

4 Conclusion

緇間笂鎵榪幫紝榪唬娉曟湰韜笉鑳芥瀯鎴愪竴涓嫭绔嬬殑姹備氦鏂規(guī)硶錛屼笌鎵鏈変笉鍔ㄧ偣榪唬娉曚竴鏍鳳紝搴旂敤榪唬娉曟眰浜ょ嚎涔嬪墠錛岄鍏堝繀欏葷粰鍑轟氦鐐圭殑鍒濆浼拌鍊鹼紝鑰屼氦鐐圭殑鍒濆鍊煎繀欏婚氳繃鍏朵粬姹備氦鏂規(guī)硶寰楀埌銆傚洜姝わ紝榪唬浜や氦甯稿悓鍏跺畠姹備氦鏂規(guī)硶緇撳悎浣跨敤錛屼綔涓轟氦鐐圭簿鍖栫殑涓縐嶆墜孌點傝凱浠f硶鐨勪富瑕佽繃紼嬫槸鏍規(guī)嵁鍒濆浼拌鐐圭殑鍑犱綍鎬ц川錛堝鍧愭爣浣嶇疆銆佸垏鐭€佹硶鐭€佹洸鐜囩瓑錛夎繍鐢∟ewton鏂規(guī)硶寰楀埌涓涓緝鍘熶及璁$偣鏇存帴榪戜簬鐩爣鐐癸紙鍗崇簿紜氦鐐癸級鐨勪及璁$偣銆傚姝ゅ弽澶嶈繘琛岋紝鐩村埌姹傚緱鐨勪氦鐐規(guī)弧瓚蟲墍瑕佹眰鐨勭簿搴︺傝娉曠殑浼樼偣鏄湪鍒濆兼瘮杈冨ソ鏃跺叾鏀舵暃閫熷害闈炲父蹇紝鑰屼笖鑳藉簲鐢ㄤ簬浠繪剰鍙傛暟鏇查潰鍖呮嫭Coons鏇查潰鍜岀瓑璺濇洸闈紝鍥犳搴旂敤闈炲父騫挎硾錛屽叾涓昏緙虹偣鏄鍒濆鍊艱姹傛瘮杈冭嫑鍒伙紝鍒濆鍊?閫夋嫨涓嶅綋鏈夊彲鑳藉鑷磋凱浠d笉鏀舵暃銆?/p>

OpenCASCADE涓洸闈㈡眰浜ょ殑榪唬娉曚篃涓嶆槸鐙珛鐨勬柟娉曪紝涓庝箣閰嶅悎鐨勬湁紱繪暎緗戞牸姹備氦寰楀埌鍒濆鹼紝鍦ㄨ拷韙腑浣滅敤榪唬娉曘傝凱浠f眰浜や嬌鐢ㄧ殑鏄笁鍙傛暟榪唬娉曪紝鏍規(guī)嵁涓夊弬鏁拌凱浠f硶鐨勬暟瀛︽柟紼嬪彲鐭ワ紝闇瑕佽綆楁洸闈笂鍙傛暟瀵瑰簲鐨勭偣鍜屽垏鐭€?/p>

eryar 2023-05-27 23:35 鍙戣〃璇勮
]]>
OpenCASCADE鏇查潰姹備氦涔嬬綉鏍肩鏁f硶3http://m.shnenglu.com/eryar/archive/2023/05/23/occt_IntPolyh_Intersection.htmleryareryarTue, 23 May 2023 15:21:00 GMThttp://m.shnenglu.com/eryar/archive/2023/05/23/occt_IntPolyh_Intersection.htmlhttp://m.shnenglu.com/eryar/comments/229904.htmlhttp://m.shnenglu.com/eryar/archive/2023/05/23/occt_IntPolyh_Intersection.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229904.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229904.htmlOpenCASCADE鏇查潰姹備氦涔嬬綉鏍肩鏁f硶3

eryar@163.com

1 Introduction

鐢辨湵蹇冮泟絳夎憲銆婅嚜鐢辨洸綰挎洸闈㈤犲瀷鎶鏈嬩功涓鏇查潰姹備氦涔嬬綉鏍肩鏁f硶鎻忚堪濡備笅錛氳娉曠殑鍩烘湰鎬濇兂鏄厛灝嗘洸闈㈢鏁d負(fù)鐢卞皬騫抽潰鐗囩粍鎴愮殑緗戞牸錛屽綋緗戞牸瓚沖瀵嗘椂錛屽彲浠ヨ涓哄凡緇忛潪甯告帴榪戠湡瀹炴洸闈紝瀵瑰垎鍒〃紺轟笉鍚屾洸闈㈢殑涓ゅ紶緗戞牸錛屽埄鐢ㄥ鉤闈㈢墖姹備氦娉曟眰寰楃殑浜ょ嚎錛屽茍浠ユ浜ょ嚎榪戜技浠h〃鏇查潰闂寸殑浜ょ嚎銆傝繖縐嶆柟娉曞師鐞嗙畝鏄庯紝渚夸簬瀹炵幇錛岄傜敤鑼冨洿騫匡紝浠繪剰鍙傛暟鏇查潰鍧囧彲鍒╃敤璇ユ硶姹備氦銆備絾涓鴻幏鍙栫簿紜湴浜ょ嚎錛屽垯蹇呴』鐢熸垚闈炲父緇嗗瘑鐨勭綉鏍鹼紝榪欏皢瀵艱嚧鍗犵敤鍐呭瓨澶氾紝璁$畻鑺辮垂澶с傚洜姝わ紝瀹為檯宸ヤ綔涓緢灝戝崟涓浣跨敤紱繪暎緗戞牸娉曪紝鑰屽父灝嗗叾涓庡叾浠栨柟娉曠粨鍚堜嬌鐢ㄣ?/p>

OpenCASCADE涓浜庢洸闈㈡眰浜や篃鎻愪緵紱繪暎緗戞牸娉曪紝鍏朵腑鏇查潰鐨勭鏁g綉鏍肩敱綾籌ntPatch_Polyhedron琛ㄧず錛屼袱涓綉鏍奸潰姹備氦浣跨敤綾籌ntPatch_InterferencePolyhedron銆傚湪瀹為檯璁$畻涓や釜闈㈢浉浜ゆ椂騫舵病鏈変嬌鐢ㄨ繖涓被錛岃屾槸浣跨敤綾籌ntPolyh_Intersection錛岃岀鏁g綉鏍間嬌鐢ㄧ被IntPolyh_MaillageAffinage銆?/p>

2 緗戞牸紱繪暎

浣跨敤綾籌ntPolyh_MaillageAffinage涓昏鐢ㄦ潵鐢熸垚鏇查潰鐨勭綉鏍鹼紝鍏朵腑MaillageAffinage鏄硶璇紝緲昏瘧榪囨潵鏄疢esh Refining緗戞牸緇嗗寲錛岀綉鏍肩簿搴︿富瑕佹槸閫氳繃鍙傛暟U錛孷鏂瑰悜涓婄殑閲囨牱鐐規(guī)暟閲忔潵紜畾銆傚綋涓嶆寚瀹氶噰鏍風(fēng)偣鏁伴噺鏃訛紝榛樿鏄弬鏁癠錛孷鏂瑰悜鍒嗗埆10涓紝鍗抽粯璁や細(xì)鐢熸垚10x10涓噰鏍風(fēng)偣錛屽嵆浣挎槸騫抽潰涔熸槸鐢熸垚100涓噰鏍風(fēng)偣銆傞氳繃鍑芥暟FillArrayOfPnt()鐢熸垚閲囨牱鐐廣傞氳繃鍑芥暟FillArrayOfTriangles()鏉ョ敓鎴愪笁瑙掑艦錛屼笁瑙掑艦鐨勬暟閲忛氳繃濡備笅鍥炬墍紺哄叕寮忚綆楋紝榛樿鏁伴噺 涓?x(10-1)x(10-1)=162銆?/p>

瀵逛簬綆鍗曠殑騫抽潰錛屽鏋滀笉鎸囧畾閲囨牱鐐規(guī)暟閲忥紝涔熶細(xì)鐢熸垚100涓噰鏍風(fēng)偣鍙?62涓笁瑙掑艦錛?/p>

3 緗戞牸姹備氦

涓や釜緗戞牸姹備氦鏄氳繃綾籌ntPolyh_Intersection鏉ヨ綆楋紝璁$畻鐨勭粨鏋滀篃鏄袱涓綉鏍間箣闂寸殑浜ょ嚎銆傝繕鏄皢浜ょ嚎鏄劇ず鍑烘潵渚夸簬瑙傚療錛?/p>

浠庣敓鎴愮殑浜ょ嚎鏉ョ湅錛岃繖涓粨鏋滆姣擨ntPatch_InterferencePolyhedron瑕佸ソ錛屾病鏈夊浣欑殑浜ょ嚎銆傜被IntPolyh_Intersection涓嬌鐢˙VH鏉ヨ繃婊や笉鐩鎬氦鐨勪笁瑙掑艦錛屾墍浠ラ熷害涔熶細(xì)蹇緢澶氥?/p>

4 Conclusion

緇間笂鎵榪幫紝浣跨敤綾籌ntPolyh_Intersection鏉ヨ綆椾袱涓洸闈㈢綉鏍肩殑浜ょ嚎銆傛洸闈㈢綉鏍肩敓鎴愮洿鎺ラ氳繃鍙傛暟U錛孷涓婄殑閲囨牱鐐規(guī)暟閲忔潵紜畾錛岃櫧鐒剁敓鎴愮綉鏍奸熷害蹇紝浣嗘槸綺懼害鎺у埗涓嶅ソ錛屽嵆浣挎槸騫抽潰涔熶細(xì)鏍規(guī)嵁閲囨牱鏁伴噺鐢熸垚澶ч噺閲囨牱鐐瑰拰涓夎褰紝褰卞搷姹備氦閫熷害銆傜綉鏍兼眰浜や綔涓烘洸闈㈡眰浜ょ殑棰勫鐞嗘楠わ紝濡備綍鐢ㄦ洿灝戠殑涓夎褰㈡潵琛ㄧず鏇查潰錛屽彲鎻愰珮緗戞牸姹備氦鎬ц兘銆?/p>

eryar 2023-05-23 23:21 鍙戣〃璇勮
]]>
OpenCASCADE鏇查潰姹備氦涔嬬綉鏍肩鏁f硶2http://m.shnenglu.com/eryar/archive/2023/05/21/occt_intpatch_polyhedron2.htmleryareryarSun, 21 May 2023 12:21:00 GMThttp://m.shnenglu.com/eryar/archive/2023/05/21/occt_intpatch_polyhedron2.htmlhttp://m.shnenglu.com/eryar/comments/229899.htmlhttp://m.shnenglu.com/eryar/archive/2023/05/21/occt_intpatch_polyhedron2.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229899.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229899.htmlOpenCASCADE鏇查潰姹備氦涔嬬綉鏍肩鏁f硶2

eryar@163.com

1 Introduction

鐢辨湵蹇冮泟絳夎憲銆婅嚜鐢辨洸綰挎洸闈㈤犲瀷鎶鏈嬩功涓鏇查潰姹備氦涔嬬綉鏍肩鏁f硶鎻忚堪濡備笅錛氳娉曠殑鍩烘湰鎬濇兂鏄厛灝嗘洸闈㈢鏁d負(fù)鐢卞皬騫抽潰鐗囩粍鎴愮殑緗戞牸錛屽綋緗戞牸瓚沖瀵嗘椂錛屽彲浠ヨ涓哄凡緇忛潪甯告帴榪戠湡瀹炴洸闈紝瀵瑰垎鍒〃紺轟笉鍚屾洸闈㈢殑涓ゅ紶緗戞牸錛屽埄鐢ㄥ鉤闈㈢墖姹備氦娉曟眰寰楃殑浜ょ嚎錛屽茍浠ユ浜ょ嚎榪戜技浠h〃鏇查潰闂寸殑浜ょ嚎銆傝繖縐嶆柟娉曞師鐞嗙畝鏄庯紝渚夸簬瀹炵幇錛岄傜敤鑼冨洿騫匡紝浠繪剰鍙傛暟鏇查潰鍧囧彲鍒╃敤璇ユ硶姹備氦銆備絾涓鴻幏鍙栫簿紜湴浜ょ嚎錛屽垯蹇呴』鐢熸垚闈炲父緇嗗瘑鐨勭綉鏍鹼紝榪欏皢瀵艱嚧鍗犵敤鍐呭瓨澶氾紝璁$畻鑺辮垂澶с傚洜姝わ紝瀹為檯宸ヤ綔涓緢灝戝崟涓浣跨敤紱繪暎緗戞牸娉曪紝鑰屽父灝嗗叾涓庡叾浠栨柟娉曠粨鍚堜嬌鐢ㄣ?/p>

OpenCASCADE涓浜庢洸闈㈡眰浜や篃鎻愪緵紱繪暎緗戞牸娉曪紝鍏朵腑鏇查潰鐨勭鏁g綉鏍肩敱綾籌ntPatch_Polyhedron琛ㄧず錛屼袱涓綉鏍奸潰姹備氦浣跨敤綾籌ntPatch_InterferencePolyhedron銆傛湰鏂囦富瑕佷粙緇嶆洸闈㈢殑緗戞牸姹備氦綾籌ntPatch_InterferencePolyhedron銆?/p>

2 Polyhedron Interference

OpenCASCADE涓綆椾袱涓笁瑙掔綉鏍間氦綰跨殑綾繪槸IntPatch_InterferencePolyhedron錛岃繖涓被榪樺彲浠ョ敤鏉ヨ綆椾竴涓綉鏍肩殑鑷氦鎯呭喌銆傜洰鍓嶆槸綆鍗曡綆椾袱涓綉鏍間腑鎵鏈変笁瑙掑艦鐨勭浉浜ゆ儏鍐碉紝鏃墮棿澶嶆潅搴︿負(fù)O(nm)鎴朞(n^2)錛屽浜庣綉鏍間笁瑙掑艦鏁伴噺澶х殑鎯呭喌鏁堢巼寰堜綆銆備負(fù)浜嗙◢寰彁楂樹竴浜涙ц兘錛屽紩鍏nd_BoundSortBox鏉ュ姞閫熻繃婊ゆ帀鍖呭洿鐩掍笉鐩鎬氦鐨勪笁瑙掑艦錛屽噺灝戜袱涓笁瑙掑艦鐩鎬氦璁$畻銆?/p>

鍏朵腑鍑芥暟Intersect()灝辨槸鐢ㄦ潵璁$畻涓や釜涓夎褰㈢殑鐩鎬氦鎯呭喌銆傚叧浜庝袱涓笁瑙掑艦鐨勫揩閫熸眰浜よ綆楋紝寰堝緗戞牸澶勭悊搴撻兘浣跨敤浜員omas Moller’s 1997 triangle intersection routine錛屽

http://geometry-central.net/surface/algorithms/intersection/ 涓篃鎻愪緵涓や釜緗戞牸姹備氦鍑芥暟錛?/p>

鍦ㄤ嬌鐢ㄨ緝騫挎硾鐨勭綉鏍煎鐞嗗簱CGAL涓篃鏈夌浉鍏寵綆楀嚱鏁幫細(xì)

鎰熷叴瓚g殑鍚屽鍙互瀵規(guī)瘮涓涓嬭繖涓変釜搴撳叧浜庝袱涓綉鏍兼眰浜ょ殑鎬ц兘錛岀湅璋佺殑鎬ц兘鏈濂斤紝浣跨敤浜嗕粈涔堟妧鏈傝繖閲屽彧鏄皢OpenCASCADE涓綆楃殑姹備氦緇撴灉杈撳嚭錛岄鍏堟槸闈㈢殑鑷浉浜ゆ儏鍐碉細(xì)

鍏朵腑綰㈣壊閮ㄥ垎涓轟氦綰匡紝鍙互鐪嬪嚭鍦ㄨ綆楄嚜鐩鎬氦鏃訛紝浼?xì)鐢熸垚澶氫綑鐨勪氦绾裤傚叾涓摑鑹查儴鍒嗘槸鏈夐噸鍙犱笁瑙掑艦鐨勬儏鍐點?/p>

褰撹綆椾袱涓綉鏍間氦綰挎椂錛屾諱綋涓婃槸姝g‘鐨勶紝涓嶈繃涔熶細(xì)鏈夊浣欑殑浜ょ嚎浜х敓銆?/p>

3 Conclusion

緇間笂鎵榪幫紝涓や釜緗戞牸鐩鎬氦璁$畻鏈鐩存帴鐨勭畻娉曞氨鏄袱涓や笁瑙掑艦榪涜姹備氦璁$畻錛屼絾鏄浜庡ぇ緗戞牸浼?xì)鏈夋ц兘闂銆侽penCASCADE涓袱涓綉鏍兼眰浜よ綆椾細(xì)寰楀埌澶氫綑鐨勪氦綰匡紝鐩墠緗戞牸紱繪暎姹備氦鍙槸鐢ㄤ簬B鏍鋒潯鏇查潰鐨勬眰浜よ綆楃殑鍓嶅鐞咺ntPatch_PrmPrmIntersection錛屼粠OpenCASCADE璁$畻涓や釜鏇查潰浜ょ嚎緇撴灉鏉ョ湅錛岀鏁g綉鏍艱綆椾腑澶氫綑鐨勪氦綰挎病鏈夊獎鍝嶆渶緇堢殑璁$畻緇撴灉銆傚ぇ瀹跺彲浠ュ甫鐫榪欎釜闂“紱繪暎緗戞牸璁$畻寰楀埌澶氫綑鐨勪氦綰垮鏈緇堢粨鏋滄湁褰卞搷涔堬紵”鏉ョ悊瑙ntPatch_PrmPrmIntersection涓洸闈㈡眰浜ょ殑瀹炵幇鍘熺悊銆?/p>

eryar 2023-05-21 20:21 鍙戣〃璇勮
]]>
OpenCASCADE鏇查潰姹備氦涔嬬綉鏍肩鏁f硶1http://m.shnenglu.com/eryar/archive/2023/05/14/occt_intpatch_polyhedron.htmleryareryarSun, 14 May 2023 13:05:00 GMThttp://m.shnenglu.com/eryar/archive/2023/05/14/occt_intpatch_polyhedron.htmlhttp://m.shnenglu.com/eryar/comments/229884.htmlhttp://m.shnenglu.com/eryar/archive/2023/05/14/occt_intpatch_polyhedron.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229884.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229884.htmlOpenCASCADE鏇查潰姹備氦涔嬬綉鏍肩鏁f硶1

eryar@163.com

 

1 Introduction

鐢辨湵蹇冮泟絳夎憲銆婅嚜鐢辨洸綰挎洸闈㈤犲瀷鎶鏈嬩功涓鏇查潰姹備氦涔嬬綉鏍肩鏁f硶鎻忚堪濡備笅錛氳娉曠殑鍩烘湰鎬濇兂鏄厛灝嗘洸闈㈢鏁d負(fù)鐢卞皬騫抽潰鐗囩粍鎴愮殑緗戞牸錛屽綋緗戞牸瓚沖瀵嗘椂錛屽彲浠ヨ涓哄凡緇忛潪甯告帴榪戠湡瀹炴洸闈紝瀵瑰垎鍒〃紺轟笉鍚屾洸闈㈢殑涓ゅ紶緗戞牸錛屽埄鐢ㄥ鉤闈㈢墖姹備氦娉曟眰寰楃殑浜ょ嚎錛屽茍浠ユ浜ょ嚎榪戜技浠h〃鏇查潰闂寸殑浜ょ嚎銆傝繖縐嶆柟娉曞師鐞嗙畝鏄庯紝渚夸簬瀹炵幇錛岄傜敤鑼冨洿騫匡紝浠繪剰鍙傛暟鏇查潰鍧囧彲鍒╃敤璇ユ硶姹備氦銆備絾涓鴻幏鍙栫簿紜湴浜ょ嚎錛屽垯蹇呴』鐢熸垚闈炲父緇嗗瘑鐨勭綉鏍鹼紝榪欏皢瀵艱嚧鍗犵敤鍐呭瓨澶氾紝璁$畻鑺辮垂澶с傚洜姝わ紝瀹為檯宸ヤ綔涓緢灝戝崟涓浣跨敤紱繪暎緗戞牸娉曪紝鑰屽父灝嗗叾涓庡叾浠栨柟娉曠粨鍚堜嬌鐢ㄣ?/p>

OpenCASCADE涓浜庢洸闈㈡眰浜や篃鎻愪緵紱繪暎緗戞牸娉曪紝鍏朵腑鏇查潰鐨勭鏁g綉鏍肩敱綾籌ntPatch_Polyhedron琛ㄧず錛屼袱涓綉鏍奸潰姹備氦浣跨敤綾籌ntPatch_InterferencePolyhedron銆傛湰鏂囦富瑕佷粙緇嶆洸闈㈢殑緗戞牸琛ㄧず綾籌ntPatch_Polyhedron銆?/p>

2 Polyhedron

OpenCASCADE鐢ㄤ簬鏇查潰姹備氦鐨勭綉鏍肩鏁g畻娉曠浉瀵笲RepMesh涓殑綆楁硶瑕佺畝鍗曞緢澶氾紝涓昏鎬濊礬鏄牴鎹弬鏁癠錛孷鏂瑰悜涓婄殑閲囨牱鐐規(guī)暟閲忔潵璁$畻鏇查潰涓婄殑鐐癸紝鍐嶆牴鎹浐瀹氬叕寮忓皢閲囨牱鐐硅繛鎴愪笁瑙掑艦銆傚叾涓敓鎴愰噰鏍風(fēng)偣浠g爜濡備笅鎵紺猴細(xì)

鎴愬憳鍙橀噺CMyPnts鏄噰鏍風(fēng)偣鏁扮粍錛孋MyU鍜孋MyV鏄噰鏍風(fēng)偣鍦ㄦ洸闈笂鐨勫弬鏁般傚皢閲囨牱鐐硅繛鎴愪笁瑙掑艦鍑芥暟濡備笅鍥炬墍紺猴細(xì)

鏍規(guī)嵁涓婅堪鐢熸垚閲囨牱鐐瑰強涓夎褰㈠嚱鏁幫紝瀵逛簬騫抽潰鐢熸垚鐨勪笁瑙掑艦濡備笅鍥炬墍紺猴細(xì)

鍏朵腑Triangle()鍑芥暟涓彉閲弆ine琛ㄧず鍙傛暟u鏂瑰悜涓婄鍑犳潯綰匡紝浠e叆鍏蜂綋鐨勭儲寮旾ndex鏉ョ湅瑙勫緥錛?/p>

褰撳弬鏁扮儲寮?Index涓?鏃訛紝line涓?錛屽緱鍒扮殑涓夎褰負(fù)1-4-5錛?/p>

褰撳弬鏁扮儲寮旾ndex涓?鏃訛紝line涓?錛屽緱鍒扮殑涓夎褰負(fù)1-5-2錛?/p>

褰撳弬鏁扮儲寮旾ndex涓?鏃訛紝line涓?錛屽緱鍒扮殑涓夎褰負(fù)2-5-6錛?/p>

褰撳弬鏁扮儲寮旾ndex涓?鏃訛紝line涓?錛屽緱鍒扮殑涓夎褰負(fù)2-6-3錛?/p>

褰撳弬鏁扮儲寮旾ndex涓?鏃訛紝line涓?錛屽緱鍒扮殑涓夎褰負(fù)4-7-8錛?/p>

褰撳弬鏁扮儲寮旾ndex涓?鏃訛紝line涓?錛屽緱鍒扮殑涓夎褰負(fù)4-8-5錛?/p>

 

浠庝笂鍙互寰楀埌鐢熸垚涓夎褰㈢殑瑙勫緥錛屽嵆鏍規(guī)嵁绱㈠紩Index璁$畻姝e湪澶勭悊鐨勪笁瑙掑艦鏄弬鏁皍鏂瑰悜涓婄鍑犳潯綰縧ine錛岀敓鎴愯繖鏉$嚎涓婂湪鍙傛暟v鏂瑰悜涓婄殑鎵鏈夌殑涓夎褰€傜敓鎴愮殑涓夎褰㈤兘鏄嗘椂閽堢殑銆?/p>

涓嬮潰鎴戜滑鐪嬬湅瀵逛簬涓浜涘熀鏈洸闈紝榪欑紱繪暎緗戞牸綆楁硶鐢熸垚鐨勭綉鏍兼晥鏋滐細(xì)

鐞冮潰鐨勭鏁g綉鏍?/p>

鍦嗘煴闈㈢殑紱繪暎緗戞牸

鍦嗙幆闈㈢殑紱繪暎緗戞牸

B鏍鋒潯鏇查潰

3 Conclusion

緇間笂鎵榪幫紝綾籌ntPatch_Polyhedron涓敓鎴愮綉鏍肩殑綆楁硶涓昏渚濊禆鏇查潰鍦ㄥ弬鏁癠錛孷涓婄殑閲囨牱鐐規(guī)暟閲忋傞粯璁ら噰鏍風(fēng)偣鏁伴噺鏄牴鎹嚱鏁癗bSamplesV()鍜孨bSamplesU()鐢熸垚銆?/p>

涔熷彲浠ユ寚瀹氶噰鏍風(fēng)偣鏁伴噺錛屽綋閲囨牱鐐規(guī)暟閲忚秺澶氾紝鍒欑敓鎴愮殑涓夎褰㈣秺澶氾紝緗戞牸瓚婂瘑銆傚綋鐒惰繖縐嶆柟寮忎篃鍙敤鏉ョ敓鎴愭洸闈㈢殑鏄劇ず鏁版嵁錛岀敓鎴愰熷害寰堝揩錛屽敮涓鐨勭己闄鋒槸鐢熸垚鏄劇ず鐢ㄧ綉鏍肩殑綺懼害鍙兘閫氳繃閲囨牱鐐規(guī)暟閲忔潵鎺у埗錛屽浜庢洸鐜囧彉鍖栧ぇ鐨勬洸闈紝鑻ユ寚瀹氬鐨勯噰鏍風(fēng)偣錛屽垯浼?xì)鐢熸垚澶ч噺涓夎迮炲Q屽崰鐢ㄥぇ閲忓唴瀛樼┖闂淬?/p>

闄勪笂嫻嬭瘯浠g爜錛?/p>


#include <TColgp_Array2OfPnt.hxx>
#include <Geom_Plane.hxx>
#include <Geom_CylindricalSurface.hxx>
#include <Geom_ConicalSurface.hxx>
#include <Geom_SphericalSurface.hxx>
#include <Geom_ToroidalSurface.hxx>
#include <Geom_BSplineSurface.hxx>
#include <GeomAdaptor_Surface.hxx>
#include <GeomAPI_PointsToBSplineSurface.hxx>
#include <IntPatch_Polyhedron.hxx>
#include <IntPatch_InterferencePolyhedron.hxx>
#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")
#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")
#pragma comment(lib, "TKGeomAlgo.lib")
void makeSurface(Handle(Geom_BSplineSurface)& theSurface)
{
    TColgp_Array2OfPnt aPoints(1, 5, 1, 5);
    aPoints.SetValue(1, 1, gp_Pnt(-4, -4, 5));
    aPoints.SetValue(1, 2, gp_Pnt(-4, -2, 5));
    aPoints.SetValue(1, 3, gp_Pnt(-4, 0, 4));
    aPoints.SetValue(1, 4, gp_Pnt(-4, 2, 5));
    aPoints.SetValue(1, 5, gp_Pnt(-4, 4, 5));
    aPoints.SetValue(2, 1, gp_Pnt(-2, -4, 4));
    aPoints.SetValue(2, 2, gp_Pnt(-2, -2, 4));
    aPoints.SetValue(2, 3, gp_Pnt(-2, 0, 4));
    aPoints.SetValue(2, 4, gp_Pnt(-2, 2, 4));
    aPoints.SetValue(2, 5, gp_Pnt(-2, 5, 4));
    aPoints.SetValue(3, 1, gp_Pnt(0, -4, 3.5));
    aPoints.SetValue(3, 2, gp_Pnt(0, -2, 3.5));
    aPoints.SetValue(3, 3, gp_Pnt(0, 0, 3.5));
    aPoints.SetValue(3, 4, gp_Pnt(0, 2, 3.5));
    aPoints.SetValue(3, 5, gp_Pnt(0, 5, 3.5));
    aPoints.SetValue(4, 1, gp_Pnt(2, -4, 4));
    aPoints.SetValue(4, 2, gp_Pnt(2, -2, 4));
    aPoints.SetValue(4, 3, gp_Pnt(2, 0, 3.5));
    aPoints.SetValue(4, 4, gp_Pnt(2, 2, 5));
    aPoints.SetValue(4, 5, gp_Pnt(2, 5, 4));
    aPoints.SetValue(5, 1, gp_Pnt(4, -4, 5));
    aPoints.SetValue(5, 2, gp_Pnt(4, -2, 5));
    aPoints.SetValue(5, 3, gp_Pnt(4, 0, 5));
    aPoints.SetValue(5, 4, gp_Pnt(4, 2, 6));
    aPoints.SetValue(5, 5, gp_Pnt(4, 5, 5));
    theSurface = GeomAPI_PointsToBSplineSurface(aPoints).Surface();
}
void writeStl(const IntPatch_Polyhedron& thePolyhedron, const std::string& theFileName)
{
    // Dump surface polyhedron to STL file.
    std::ofstream aStlFile(theFileName);
    aStlFile << "solid polyhedron" << std::endl;
    // Dump triangles.
    for (Standard_Integer t = 1; t <= thePolyhedron.NbTriangles(); ++t)
    {
        Standard_Integer aPi1 = 0;
        Standard_Integer aPi2 = 0;
        Standard_Integer aPi3 = 0;
        thePolyhedron.Triangle(t, aPi1, aPi2, aPi3);
        const gp_Pnt& aP1 = thePolyhedron.Point(aPi1);
        const gp_Pnt& aP2 = thePolyhedron.Point(aPi2);
        const gp_Pnt& aP3 = thePolyhedron.Point(aPi3);
        aStlFile << "facet" << std::endl;
        aStlFile << "outer loop" << std::endl;
        aStlFile << "vertex " << aP1.X() << " " << aP1.Y() << " " << aP1.Z() << std::endl;
        aStlFile << "vertex " << aP2.X() << " " << aP2.Y() << " " << aP2.Z() << std::endl;
        aStlFile << "vertex " << aP3.X() << " " << aP3.Y() << " " << aP3.Z() << std::endl;
        aStlFile << "endloop" << std::endl;
        aStlFile << "endfacet" << std::endl;
    }
    aStlFile << "endsolid polyhedron" << std::endl;
    aStlFile.close();
}
void testPolyhedron()
{
    // Plane surface polyhedron.
    Handle(Geom_Plane) aPlane = new Geom_Plane(gp::XOY());
    Handle(GeomAdaptor_Surface) aSurfaceAdaptor = new GeomAdaptor_Surface(aPlane, 0.0, 10.0, 0.0, 20.0);
    IntPatch_Polyhedron aPlanePolyhedron(aSurfaceAdaptor);
    writeStl(aPlanePolyhedron, "d:/plane.stl");
    // Spherical surface polyhedron.
    Handle(Geom_SphericalSurface) aSphericalSurface = new Geom_SphericalSurface(gp::XOY(), 3.0);
    aSurfaceAdaptor = new GeomAdaptor_Surface(aSphericalSurface);
    IntPatch_Polyhedron aSphericalPolyhedron(aSurfaceAdaptor);
    writeStl(aSphericalPolyhedron, "d:/spherical.stl");
    // Cylindrical surface polyhedron.
    Handle(Geom_CylindricalSurface) aCylindricalSurface = new Geom_CylindricalSurface(gp::XOY(), 5.0);
    aSurfaceAdaptor = new GeomAdaptor_Surface(aCylindricalSurface, 0.0, M_PI, 0.0, 8.0);
    IntPatch_Polyhedron aCylindricalPolyhedron(aSurfaceAdaptor);
    writeStl(aCylindricalPolyhedron, "d:/cylindrical.stl");
    // Toroidal Surface polyhedron.
    Handle(Geom_ToroidalSurface) aToroidalSurface = new Geom_ToroidalSurface(gp::XOY(), 10.0, 3.0);
    aSurfaceAdaptor = new GeomAdaptor_Surface(aToroidalSurface);
    IntPatch_Polyhedron aToroidalPolyhedron(aSurfaceAdaptor);
    writeStl(aToroidalPolyhedron, "d:/toroidal.stl");
    // BSpline surface polyhedron.
    Handle(Geom_BSplineSurface) aBSplineSurface;
    makeSurface(aBSplineSurface);
    aSurfaceAdaptor = new GeomAdaptor_Surface(aBSplineSurface);
    IntPatch_Polyhedron aPolyhedron(aSurfaceAdaptor);
    writeStl(aPolyhedron, "d:/bspline.stl");
}
int main(int argc, char* argv[])
{
    testPolyhedron();
    return 0;
}

 



eryar 2023-05-14 21:05 鍙戣〃璇勮
]]>
PlaneGCS-騫抽潰鍑犱綍綰︽潫姹傝В鍣ㄧ敤娉?/title><link>http://m.shnenglu.com/eryar/archive/2023/03/24/planegcs-usage.html</link><dc:creator>eryar</dc:creator><author>eryar</author><pubDate>Fri, 24 Mar 2023 14:10:00 GMT</pubDate><guid>http://m.shnenglu.com/eryar/archive/2023/03/24/planegcs-usage.html</guid><wfw:comment>http://m.shnenglu.com/eryar/comments/229776.html</wfw:comment><comments>http://m.shnenglu.com/eryar/archive/2023/03/24/planegcs-usage.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/eryar/comments/commentRss/229776.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/eryar/services/trackbacks/229776.html</trackback:ping><description><![CDATA[<h1 style="text-align: center;"><strong>PlaneGCS-騫抽潰鍑犱綍綰︽潫姹傝В鍣ㄧ敤娉?/strong></h1> <p style="text-align: center;"><a href="mailto:eryar@163.com"><u>eryar@163.com</u></a></p> <h2>1 Introduction</h2> <p>鍦ㄤ紶緇熺殑鏈烘璁捐杞歡涓紝涓鑸嬌鐢ㄥ嚑浣曠害鏉熸眰瑙e櫒鏉ョ敾鑽夊浘錛屽啀閫氳繃瀵硅崏鍥捐繘琛屾媺浼告棆杞瓑鐢熸垚鐗瑰緛瀹炵幇寤烘ā鍔熻兘銆傚熀浜庡弬鏁板寲鍘嗗彶鐗瑰緛鏂瑰紡鏉ュ緩妯$殑杞歡緇曚笉寮鍑犱綍綰︽潫姹傝В鍣紝鐩墠涓繪祦鍟嗙敤杞歡涓鑸嬌鐢ㄨタ闂ㄥ瓙D-Cubed DCM鍙婅揪绱㈢殑CGM銆傚紑婧愪笘鐣屼篃鏈変袱嬈懼嚑浣曠害鏉熸眰瑙e櫒錛歋olveSpace鍜孭laneGCS銆?/p> <p>PlaneGCS瀛楅潰鎰忔濇槸騫抽潰鍑犱綍綰︽潫姹傝В鍣紝涓昏鐢ㄤ簬緇樺埗浜岀淮鑽夊浘銆傚洜涓篜laneGCS浠g爜鐩稿娓呮櫚錛屽姛鑳界畝鍗曪紝鍙兘澶勭悊騫抽潰鍑犱綍鍏冪礌鐨勭害鏉燂紝鏈枃涓昏緇撳悎紺轟緥浠g爜浠嬬粛PlaneGCS鐨勪嬌鐢ㄦ柟娉曪紝鍦ㄤ細(xì)鐢ㄧ殑鍩虹涓婂幓鐞嗚В婧愮爜鐨勫疄鐜伴昏緫銆?/p> <h2>2 PlaneGCS</h2> <p>PlaneGCS涓昏鍖呭惈涓夐儴鍒嗭細(xì)</p> <ul> <li>鍑犱綍鍏冪礌鏁版嵁緇撴瀯鏂囦歡錛歨/Geo.cpp</li> <li>綰︽潫鏉′歡鏂囦歡錛歨/Constraints.cpp</li> <li>綰︽潫姹傝В瀹炵幇鏂囦歡錛歨/GCS.cpp</li> </ul> <p>鍏朵腑鍑犱綍鍏冪礌鏁版嵁緇撴瀯涓畾涔夌殑鍑犱綍鍏冪礌濡備笅鍥炬墍紺猴細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202303/534255-20230324220305696-222594862.png" alt="" /></p> <p>浠庝笂鍥懼彲浠ョ湅鍒幫紝鐩墠鏀寔鐨勫嚑浣曞厓绱犳湁鐐筆oint錛岀洿綰縇ine錛屽渾Circle錛屾き鍦咵llipse錛屽弻鏇茬嚎Hyperbola錛屾姏鐗╃嚎Parabola錛屽渾寮rc/ArcOfEllipse/ArcOfHyperbola/ArcOfParabola錛屽強B鏍鋒潯鏇茬嚎BSpline錛屼笉榪囩湅浠g爜BSpline閮ㄥ垎鍑芥暟娌℃湁瀹炵幇錛屽簲璇ユ槸涓嶆敮鎸佺殑銆?/p> <p>綰︽潫鏉′歡鏂囦歡瀹氫箟鐨勭害鏉熺被鍨嬪涓嬪浘鎵紺猴細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202303/534255-20230324220324299-830063162.png" alt="" /></p> <p>浠庣害鏉熸眰瑙f枃浠朵腑鍙互鐪嬪埌錛屽叾涓暟瀛﹁綆椾富瑕佷嬌鐢‥igen涓潪綰挎ф柟紼嬬粍姹傝В綆楁硶鍜宐oost鐨勫浘graph綆楁硶錛屼粠涓彲浠ユ帹嫻嬪嚭瀹炵幇騫抽潰鍑犱綍綰︽潫姹傝В鍣ㄤ腑闇瑕佺殑鍏抽敭鎶鏈傚厛鎺屾彙PlaneGCS鐨勭敤娉曪紝鐒跺悗鍐嶅垎鏋愬叾鑳屽悗鐨勫疄鐜板師鐞嗙粏鑺傘?/p> <h2>3 Code Example</h2> <p>榪欓噷緇欏嚭涓涓畝鍗曠殑紺轟緥紼嬪簭錛屽厛璁╁ぇ瀹跺PlaneGCS鏈変釜璁よ瘑銆傜ず渚嬬▼搴忎腑婕旂ず浜嗙粰涓ゆ潯鐩寸嚎鍔犱笂姘村鉤鍜屽瀭鐩寸害鏉熴備負(fù)浜嗕究浜庢煡鐪嬬害鏉熷悗鐨勭粨鏋滐紝鍦ㄤ唬鐮佷腑鐢熸垚Draw Test Harness鑴氭湰鏂囦歡銆?/p> <p><img src="https://img2023.cnblogs.com/blog/534255/202303/534255-20230324220408620-1496050053.png" alt="" /></p> <p>紼嬪簭浠g爜濡備笅鎵紺猴細(xì)</p> <pre class="language-cpp highlighter-hljs"><code>/* Copyright(C) 2023 Shing Liu(eryar@163.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions : The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "GCS.h" #include <fstream> void test() { double aPx1 = 0.0; double aPy1 = 0.0; double aPx2 = 3.0; double aPy2 = 3.0; double aPx3 = 6.0; double aPy3 = 9.0; GCS::VEC_pD aParameters; aParameters.push_back(&aPx1); aParameters.push_back(&aPy1); aParameters.push_back(&aPx2); aParameters.push_back(&aPy2); aParameters.push_back(&aPx3); aParameters.push_back(&aPy3); GCS::Point aP1(&aPx1, &aPy1); GCS::Point aP2(&aPx2, &aPy2); GCS::Point aP3(&aPx3, &aPy3); GCS::Line aLine1; GCS::Line aLine2; aLine1.p1 = aP1; aLine1.p2 = aP2; aLine2.p1 = aP2; aLine2.p2 = aP3; std::ofstream aTclFile("d:/gcs.tcl"); aTclFile << "# 2 lines before PlaneGCS solve" << std::endl; aTclFile << "vinit" << std::endl; aTclFile << "vertex aP1 " << aPx1 << " " << aPy1 << " 0" << std::endl; aTclFile << "vertex aP2 " << aPx2 << " " << aPy2 << " 0" << std::endl; aTclFile << "vertex aP3 " << aPx3 << " " << aPy3 << " 0" << std::endl; aTclFile << "polyvertex aPolyline1 aP1 aP2 aP3" << std::endl; aTclFile << "vdisplay aPolyline1 " << std::endl; aTclFile << "vsetcolor aPolyline1 RED" << std::endl; GCS::System aSolver; aSolver.addConstraintHorizontal(aLine1); aSolver.addConstraintVertical(aLine2); if (aSolver.solve(aParameters) == GCS::Success) { aSolver.applySolution(); aTclFile << "# 2 lines after PlaneGCS solve" << std::endl; aTclFile << "vertex aV1 " << aPx1 << " " << aPy1 << " 0" << std::endl; aTclFile << "vertex aV2 " << aPx2 << " " << aPy2 << " 0" << std::endl; aTclFile << "vertex aV3 " << aPx3 << " " << aPy3 << " 0" << std::endl; aTclFile << "polyvertex aPolyline2 aV1 aV2 aV3" << std::endl; aTclFile << "vdisplay aPolyline2 " << std::endl; aTclFile << "vsetcolor aPolyline2 GREEN" << std::endl; } aTclFile.close(); } int main(int argc, char* argv[]) { test(); return 0; }</code></pre> <p>浠庣▼搴忎唬鐮佷腑鍙互鐪嬪嚭PlaneGCS鐨勪嬌鐢ㄥ厛瑕佸畾涔夐渶瑕佽綆楃殑鍙傛暟aParameters錛岃繖浜涘弬鏁版槸鍑犱綍鍏冪礌涓殑鏁版嵁錛岄兘鏄嬌鐢ㄧ殑鎸囬拡銆傜劧鍚庡皢綰︽潫鍔犲叆鍒癎CS::System涓紝鏈鍚庝唬鍏ュ弬鏁拌皟鐢╯olve鍑芥暟榪涜姹傝В銆傛眰瑙f垚鍔熷悗浣跨敤applySolution()鍑芥暟搴旂敤姹傝В緇撴灉銆傛眰瑙g粨鏋滃湪Draw涓樉紺虹殑緇胯壊鐨勭嚎濡備笅鍥炬墍紺猴細(xì)</p> <p><img src="https://img2023.cnblogs.com/blog/534255/202303/534255-20230324220420026-1241877432.png" alt="" /></p> <p id="1679666661820"></p> <h2>4 Conclusion</h2> <p>鏈枃緇撳悎紺轟緥浠g爜婕旂ず濡備綍浣跨敤PlaneGCS錛屼富瑕佷嬌鐢ㄤ簡姘村鉤鍜屽瀭鐩寸害鏉熴侾laneGCS涓繕鏀寔鍏朵粬綰︽潫綾誨瀷錛岀闉嬩滑鍙互鑷繁鎺㈢儲涓涓嬨傚嚑浣曢犲瀷鍐呮牳鍜屽嚑浣曠害鏉熸眰瑙e櫒甯歌鐪嬩綔鏄伐涓欳AD杞歡鐨勫崱鑴栧瓙鎶鏈紝寮婧愬簱涓鑸姛鑳戒笉澶畬鍠勶紝浣嗘槸鐢ㄦ潵鎺㈢儲鑳屽悗鐨勫疄鐜板師鐞嗚繕鏄湁鍙傝冨熼壌鎰忎箟鐨勩傚笇鏈涙湁鏇村鐨勭闉嬪幓浜嗚В鑳屽悗鐨勫師鐞嗭紝鍏卞悓鏉ユ彁楂樺浗鍐呬笁緇碈AD杞歡寮鍙戞按騫熾?/p><img src ="http://m.shnenglu.com/eryar/aggbug/229776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/eryar/" target="_blank">eryar</a> 2023-03-24 22:10 <a href="http://m.shnenglu.com/eryar/archive/2023/03/24/planegcs-usage.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>OpenCASCADE-鏇查潰姹備氦http://m.shnenglu.com/eryar/archive/2023/03/19/IntTools_FaceFace.htmleryareryarSun, 19 Mar 2023 04:23:00 GMThttp://m.shnenglu.com/eryar/archive/2023/03/19/IntTools_FaceFace.htmlhttp://m.shnenglu.com/eryar/comments/229760.htmlhttp://m.shnenglu.com/eryar/archive/2023/03/19/IntTools_FaceFace.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229760.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229760.htmlOpenCASCADE-鏇查潰姹備氦

eryar@163.com

Abstract: 鏇查潰姹備氦鏄嚑浣曢犲瀷鍐呮牳鏈涓洪噸瑕佷篃鏈涓哄鏉傜殑闂涔嬩竴錛屾眰浜ょ畻娉曠殑璐ㄩ噺錛堢ǔ瀹氥佸噯紜佸揩閫燂級鐩存帴褰卞搷鍒板嚑浣曞唴鏍哥殑紼沖畾鎬у拰瀹炵敤紼嬪害錛屾晠鍏鋒湁鍗佸垎閲嶈鐨勬剰涔夈傛眰浜ら棶棰樺寘鎷洸綰夸笌鏇茬嚎姹備氦銆佹洸綰夸笌鏇查潰姹備氦鍜屾洸闈笌鏇查潰姹備氦錛屽叾涓渶閲嶈闅懼害鏈澶х殑褰撳睘鏇查潰涓庢洸闈㈡眰浜ら棶棰橈紝鍏朵粬姹備氦闂鍙互搴旂敤鏇查潰涓庢洸闈㈡眰浜ょ殑鎬濇兂浜堜互瑙e喅銆傛湰鏂囦富瑕佷粙緇峯pencascade涓洸闈笌鏇查潰姹備氦鐨勫疄鐜板師鐞嗐?/p>

Key Words: Face Face Intersection, Intersection

1. Introduction

濡傛灉璇寸悊瑙pencascade涓潰鐨勬瀯閫犲師鐞嗭紙鍗崇悊瑙RepBuilderAPI_MakeFace鐨勬簮鐮侊級錛屾垜瑙夊緱綆楁槸鐞嗚В浜咮Rep琛ㄧず娉曠殑鏁版嵁緇撴瀯Modeling Data銆傚鏋滆鐞嗚В浜嗘洸闈笌鏇查潰姹備氦鐨勫疄鐜板師鐞嗭紝鎴戣寰楃畻鏄鍑犱綍鍐呮牳涓殑鏍稿績綆楁硶甯冨皵鎿嶄綔鏈変簡涓瀹氱殑璁よ瘑銆傛洸闈笌鏇查潰姹備氦榪囩▼錛圛ntersection Algorithm錛変腑涓昏渚濊禆涓夊ぇ宸ュ叿錛氭嫙鍚堬紙Approximation Algorithm錛夈佹姇褰憋紙Projection Algorithm錛夊拰瀹氫綅錛圕lassification Algorithm錛夈備笅闈㈢粨鍚堝竷?yōu)當(dāng)鎿嶄綔TKBO涓殑鏇查潰涓庢洸闈㈡眰浜ょ被IntTools_FaceFace婧愮爜瀹炵幇鍒嗗埆浠嬬粛榪欎笁澶у伐鍏風(fēng)殑搴旂敤鍦烘櫙銆俹pencascade涓殑綆楁硶綾諱竴鑸殑浣跨敤濂楄礬鍜屾妸澶ц薄瑁呭啺綆辯被浼兼誨叡鍒嗕笁姝ワ細(xì)

絎竴姝ワ紝鍒濆鍖栵紱閫氳繃鏋勯犲嚱鏁版垨Init()絳夊嚱鏁板皢綆楁硶綾婚渶瑕佺殑鍙傛暟杈撳叆榪涘幓錛汭ntTools_FaceFace涓氳繃SetParameters()鍑芥暟璁劇疆綆楁硶鐨勫弬鏁?/p>

絎簩姝ワ細(xì)璁$畻錛涗嬌鐢ㄥ嚱鏁癇uild()錛?Perform()鍑芥暟鏉ユ墽琛岃綆楋紱IntTools_FaceFace涓殑涓昏瀹炵幇閫昏緫鍦≒erform()涓?/p>

絎笁姝ワ細(xì)杈撳嚭錛涘皢璁$畻緇撴灉杈撳嚭銆侷ntTools_FaceFace閫氳繃Lines()鍜孭oints()鍑芥暟杈撳嚭璁$畻緇撴灉鍗充氦綰垮拰浜ょ偣銆?/p>

2. Approximation Algorithm 鎷熷悎

opencascade涓洸闈㈢殑琛ㄧず鏈変袱縐嶆柟寮忥紝涓縐嶆槸鍙傛暟鏂圭▼S(u,v)琛ㄧず錛屼竴縐嶆槸浜屾鏇查潰鐨勪唬鏁版柟紼媐(x,y,z)=0琛ㄧず銆傚洜姝や篃灝嗘洸闈㈡眰浜ら棶棰樺垎涓猴細(xì)

  • 浠f暟/浠f暟鏇查潰姹備氦錛?/li>
  • 浠f暟/鍙傛暟鏇查潰姹備氦錛?/li>
  • 鍙傛暟/鍙傛暟鏇查潰姹備氦錛?/li>

opencascade涓綆楁洸闈㈡眰浜ゆ洿搴曞眰鐨勭被鏄疘ntPatch_Intersection錛屽叾涓篃鏄垎榪欎笁縐嶇被鍨嬫潵澶勭悊錛?/p>

GeomGeomPerfom()瀵瑰簲鐨勬槸浠f暟/浠f暟鏇查潰姹備氦錛?/p>

GeomParamPerform()瀵瑰簲鐨勬槸浠f暟/鍙傛暟鏇查潰姹備氦錛?/p>

ParamParamPerform()瀵瑰簲鐨勬槸鍙傛暟/鍙傛暟鏇查潰姹備氦錛?/p>

鍏朵腑浠f暟/浠f暟鏇查潰姹備氦鍑芥暟GeomGeomPerform()涓嬌鐢ㄧ被IntPatch_ImpImpIntersection鏉ヨ綆椾袱涓簩嬈′唬鏁版洸闈㈢殑姹備氦錛屽叾瀹炶繖鏄疘mp緙╁啓灝辨槸闅愬紡浠f暟鏂圭▼Implicit Equation鐨勬剰鎬濄?/p>

浜屾浠f暟鏇查潰鐨勬眰浜や嬌鐢ㄥ寘IntAna鏉ュ疄鐜幫紝榪欏湪鏃╂湡鏂囩珷涓垎鏋愪簡鍏跺疄鐜板師鐞嗭紝涓昏鎬濇兂鏄皢涓涓簩嬈℃洸闈㈢殑鍙傛暟琛ㄧず浠e叆闅愬紡鏂圭▼鍙樻垚涓鍏冩柟紼嬶紝鐒跺悗瀵硅繖涓竴鍏冩柟紼嬭繘琛屾眰瑙c備緥濡傚渾鏌遍潰涓庝簩嬈′唬鏁版洸闈㈡眰浜わ細(xì)

鍏朵腑浠f暟/鍙傛暟鏇查潰姹備氦鍑芥暟GeomParamPerform()涓嬌鐢ㄧ被IntPatch_ImpPrmIntersection鏉ヨ綆椾唬鏁版洸闈㈠拰鍙傛暟鏇查潰鐨勬眰浜わ紝榪欓噷Prm涓篜arametric equation鍙傛暟鏂圭▼鐨勭緝鍐欍傚叾浠g爜娉ㄩ噴涓啓鍒癰i-parametrised surface鎰忔濆弻鍙傛暟鏇查潰S(u, v)銆?/p>

鍏朵腑浠f暟/鍙傛暟鏇查潰姹備氦鍑芥暟ParamParamPerform()涓嬌鐢ㄧ被IntPatch_PrmPrmIntersection鏉ヨ綆楀弬鏁版暟鏇查潰鍜屽弬鏁版洸闈㈢殑姹備氦銆?/p>

鍙傛暟/鍙傛暟鏇查潰姹備氦鐨勫熀鏈柟娉曟湁浠ヤ笅浜旂錛?/p>

  • 浠f暟娉曪紝涔熺О瑙f瀽娉曪紱
  • 緗戞牸紱繪暎娉曪紱
  • 鍒嗗壊娉曪紱
  • 榪唬娉曪紱
  • 榪借釜娉曪紱

鐩稿叧鍘熺悊浠嬬粛鍙互鍙傝冩湵蹇冮泟絳夎憲銆婅嚜鐢辨洸綰挎洸闈㈤犲瀷鎶鏈嬨傚ぇ瀹跺彲浠ョ粨鍚堟簮鐮侊紝鐪嬬湅opencascade涓嬌鐢ㄤ簡鍝簺鏂規(guī)硶銆傛洸闈氦綰跨殑琛ㄨ揪娑夊強涓変釜闂錛屼氦鐐逛俊鎭〃紺猴紝浜ょ嚎緇勭粐鍙婁氦綰夸腑浜ょ偣鐨勫垹闄ょ瓥鐣ャ備氦綰跨殑琛ㄨ揪浣跨敤綾籌ntPatch_Line錛?/p>

鍦ㄧ被IntTools_FaceFace涓嚱鏁癝etParameters()涓彲浠ユ寚瀹氫氦綰夸腑浜ょ偣鐨勫垹闄ょ瓥鐣ャ傞氳繃鍙傛暟ApproxCurves鍜孉pproximationTolerance鏉ユ寚瀹氫氦綰夸腑浜ょ偣鏄惁鎷熷悎鍙婃嫙鍚堢簿搴︺傛眰浜よ繃紼嬩腑寰楀埌鐨勪氦鐐瑰線寰闈炲父鑷村瘑錛岃繖鏍瘋櫧鐒跺彲浠ヤ繚璇佷氦綰跨殑綺懼害錛屼絾淇濆瓨鐨勬暟鎹噺澶ぇ錛屽湪瀹為檯搴旂敤涓渶瑕佸垹闄ら儴鍒嗕氦鐐廣侾ratt鎻愬嚭浣跨敤鏈灝忎簩涔樻硶瀵逛氦綰塊艱繎錛屼互鍒犻櫎涓嶅繀瑕佺殑浜ょ偣銆傝繖閲屽氨闇瑕佷嬌鐢ㄥ埌鎷熷悎綆楁硶Approximation Algorithm銆?/p>

鍦╫pencascade涓嫙鍚堥棶棰樿鎶借薄鎴愰潪綰挎ф柟紼嬬粍鐨勬眰瑙i棶棰橈紝褰撶劧鏈灝忎簩涔樻硶涔熸槸鍏朵腑鏂規(guī)硶涔嬩竴銆傛嫙鍚堢畻娉曟槸閫犲瀷鍐呮牳涓渶鍩虹鏈閲嶈鐨勭畻娉曪紝闄や簡綆鍗曠殑鐐規(guī)嫙鍚堟垚綰夸互澶栵紝榪樿澶勭悊甯︾害鏉熺殑鎯呭喌錛屽鍔犱笂浜ょ偣閫氳繃鏇查潰鐨勪綅緗害鏉熺瓑銆傚嚑浣曠害鏉熸眰瑙e櫒涓牳蹇冧篃鏄姝ゃ傛硶鍥姐佷縿緗楁柉鏁板鍘夊錛屾垜鎯沖簲璇ユ槸宸茬粡褰㈡垚鐞嗚+搴旂敤鐨勮壇鎬у驚鐜傛暟瀛︽槸鍒涙柊鐨勫熀紜錛屾槸鐢ㄦ渶綆鍗曠殑璇█鏉ョ簿紜弿榪拌嚜鐒朵腑鐨勮寰嬶紝铏界劧鎴戜滑鐞嗗伐縐戜竴鐩村鏁板錛屼絾宸ヤ綔鍚庡緢澶т竴閮ㄥ垎浜哄緢灝戜嬌鐢ㄩ珮絳夋暟瀛︿腑鐨勫伐鍏鳳紝鎰熻鏁板娌′粈涔堢敤銆傚鑰屼笉鎬濆垯緗旓紝鎬濊屼笉瀛﹀垯孌嗐傛垜鎬葷粨鐨勫涔?fàn)瑙勫緥灏辨槸瑕佹湁瀹炶返锛屼笂瀛︽椂瀹炶返灏辨槸閫氳繃鍋氶錛屾暟瀛︾悊璁虹殑涓縐嶅疄璺靛氨鏄紑鍙戝嚭杞歡紼嬪簭銆?/p>

鐜板湪鍥藉鎻愬¤嚜涓繪垜瑙夊緱鏄ぇ濂戒簨錛屼粈涔堟椂鍊欐垜浠嚭涓涓嚑浣曞唴鏍革紝鍑轟竴涓狿DE鍋忓井鏂圭▼姹傝В鍣ㄧ瓑錛屽艦鎴愮悊璁哄姞瀹炶返鐨勮壇鎬у驚鐜紝浠ユ垜浠殑浜烘暟鍜屽嫟鍔籌紝紱葷鎶寮哄浗灝變笉浼?xì)澶獦q溿?/p>

3. Projection Algorithm 鎶曞獎

鎶曞獎涓昏鐢ㄦ潵璁$畻鏇查潰涓婄殑鏇茬嚎瀵瑰簲鍒版洸闈㈠弬鏁扮┖闂寸殑鏇茬嚎PCurve錛岀敓鎴怓ACE闈㈡椂濡傛灉杈笶DGE涓病鏈塒Curve錛屽緱鍒扮殑闈㈡槸涓嶆紜殑銆傛姇褰辯畻娉曠殑瀹炵幇鍘熺悊鍦ㄦ棭鏈熺殑鏂囩珷涓凡緇忚緇嗕粙緇嶈繃錛屾姇褰辯畻娉曚緷璧栨嫙鍚堢畻娉曘傛姇褰辯畻娉曠敤鍦ㄧ敓鎴愪氦綰跨殑鍑芥暟涓璏akeCurve()錛?/p>

褰撲笉瀵逛氦綰胯繘琛屾嫙鍚堟椂錛岀敓鎴愪氦綰垮強PCurve涓昏浣跨敤綾籊eomInt_SS鐨勯潤鎬佸嚱鏁版潵寰楀埌浜ょ嚎錛?/p>

榪欐牱鐢熸垚鐨勪氦綰挎槸B鏍鋒潯鏇茬嚎涓旀帶鍒墮《鐐規(guī)暟閲忓緢澶с傚綋閫氳繃鎷熷悎鍙互鐢熸垚鏇寸畝鍖栫殑B鏍鋒潯浜ょ嚎銆?/p>

 

4. Classification Algorithm 瀹氫綅

瀹氫綅宸ュ叿涓昏鐢ㄤ簬鍒ゆ柇鐐瑰拰涓涓尯鍩熺殑鐘舵侊紝鏄湪鍖哄煙鍐呫佸榪樻槸涓娿傚湪鏃╂湡鐨勬枃绔犱腑鏈変竴浜涗粙緇嶏細(xì)https://www.cnblogs.com/opencascade/p/Point_Classifier.html

鐐瑰畾浣嶅湪鏇查潰姹備氦涓殑搴旂敤灝辨槸澶勭悊鎷撴湸闈㈢殑鎯呭喌錛屽浜庡嚑浣曟洸闈紝鍏跺疄鍙傛暟鍩熷氨鏄叾鍙傛暟S(u,v)鐨勫彇鍊艱寖鍥淬傚浜庢嫇鏈撮潰錛屽叾鍙傛暟鍩熸槸閫氳繃杈圭晫W(xué)ire鏉ラ檺瀹氱殑錛岃屼笖榪樹細(xì)鏈夐潰涓婂紑瀛旂殑鎯呭喌闇瑕佸鐞嗐傚叾瀹濱ntTools_FaceFace涓昏鏄敤鏉ヨ綆桭ACE涓嚑浣曟洸闈㈡眰浜ょ殑錛屾病鏈夋紜鐞嗗畾浣嶉棶棰橈紝鍗崇敓鎴愮殑浜ょ嚎娌℃湁澶勭悊闈㈢殑杈圭晫闂銆傜浉淇$湅鎳傛簮鐮佺殑鍚屽鍙互瑙e喅榪欎釜闂銆?/p>

瀹氫綅闂鏄釜鍑犱綍闂錛屽湪銆婅綆楀嚑浣曞強搴旂敤銆嬩竴涔︿腑鏈夊鐐圭殑瀹氫綅闂鏈夎緇嗙畻娉曘備竴鑸殑澶勭悊鏂規(guī)硶鏄氳繃鐐逛綔涓鏉″崐灝勭嚎錛岃綆楀崐灝勭嚎涓庡杈瑰艦浜ょ偣鐨勪釜鏁幫紝鑻ヤ氦鐐規(guī)暟涓哄鏁幫紝鍒欑偣鍦ㄥ唴閮紝鍚﹀垯鍦ㄥ閮ㄣ傝繕鏈変竴縐嶆柟娉曟槸閫氳繃璁$畻鐐逛笌澶氳竟褰㈠悇欏剁偣鐨勮搴︽潵鍒ゆ柇銆傝繖涓ょ鏂瑰紡鏃墮棿澶嶆潅搴﹀潎涓篛(n)銆俹pencascade涓嬌鐢ㄧ殑絎竴縐嶆柟娉曘備功涓彁鍒板嚑縐嶆晥鐜囨洿楂樼殑綆楁硶錛屽鐐瑰畾浣嶉棶棰樼殑鍒嗗眰鏂規(guī)硶錛屽彲浠ュ皢鏌ヨ鏃墮棿鎻愰珮鍒癘(logn)銆傜偣瀹氫綅闂鐨勫崟璋冮摼鏂規(guī)硶鐢∣(nlogn)鏃墮棿鍜孫(n)絀洪棿浣滈澶勭悊錛屾煡璇㈡椂闂村彲浠((logn)^2)瀹屾垚銆傜偣瀹氫綅鐨勪笁瑙掑艦緇嗗垎鏂規(guī)硶(Triangulation refinement method)鍙敤O(n)絀洪棿瀛樻斁棰勫鐞嗙粨鏋滐紝鐢∣(logn)鏃墮棿鍥炵瓟鐐瑰湪鍝釜鍖哄煙錛屽畬鎴愰澶勭悊鐨勬椂闂存槸O(nlogn)銆傜敱姝ゅ彲瑙侊紝opencascade鐨勫畾浣嶇畻娉曡繕鏈変竴浜涙敼榪涚┖闂淬?/p>

5. Conclusion

鍑犱綍鍐呮牳涓洸闈㈠拰鏇查潰姹備氦鏄渶閲嶈鏈澶嶆潅鐨勯棶棰橈紝澶勭悊鏇查潰鍜屾洸闈㈡眰浜ら渶瑕佹嫙鍚圓pproximation Algorithm銆佹姇褰盤rojection Algorithm鍜屽畾浣岰lassification Algorithm宸ュ叿銆傚叾涓嫙鍚堝拰鎶曞獎涓昏鏄暟瀛﹂棶棰橈紝瀹氫綅涓昏鏄釜鍑犱綍闂錛岀悊瑙i棶棰樺氨鑳芥壘鍒扮浉搴旂殑瑙e喅宸ュ叿銆傚簡騫告湁opencascade榪欎釜鍔熻兘鐩稿瀹屽鐨勫紑婧愮殑鍑犱綍鍐呮牳錛屾彁渚涗簡涓涓悊璁鴻仈緋誨疄璺電殑騫沖彴銆傜悊瑙f暟瀛︾悊璁哄悗鍙互鍘婚槄璇繪簮鐮侊紝鐢氳嚦鏄弬涓庡拰璐$尞錛屾眰浜ゃ佹嫙鍚堛佹姇褰卞拰瀹氫綅宸ュ叿閮芥湁涓浜涙敼榪涚┖闂淬?/p>

鏈榪戝叧娉ㄧ殑鏈嬪弸璇存枃绔犲彂寰楀皯浜嗭紝涓昏鍘熷洜鏄湁鐐瑰繖錛屼笉鏄洜涓轟繚瀹堜笉鎯沖垎浜紝褰撶劧鏈変簺鏈嬪弸涔熸彁閱掕鐣欎竴鎵嬨傚浜巓pencascade鐨勬妧鏈垎浜垜鏄病鏈変繚鐣欑殑錛屽洜涓簅pencascade鏄紑婧愮殑錛屽鏋滈氳繃榪欎簺鏂囩珷鍒嗕韓鑳藉府鍔╁埆浜鴻В鍐充竴浜涢棶棰橈紝灝辨槸鍒涢犱環(huán)鍊鹼紝鏄湁鎰忎箟鐨勩傛椂涓嶆椂鏀跺埌緗戝弸鐨勬劅璋紝鏀惰幏鐨勬劅鍔ㄤ笉鏄敤閲戦挶鍙互琛¢噺鐨勩?/p>

 



eryar 2023-03-19 12:23 鍙戣〃璇勮
]]>
McCad - BRep to CSGhttp://m.shnenglu.com/eryar/archive/2023/03/12/mccad_brep_csg.htmleryareryarSun, 12 Mar 2023 10:19:00 GMThttp://m.shnenglu.com/eryar/archive/2023/03/12/mccad_brep_csg.htmlhttp://m.shnenglu.com/eryar/comments/229751.htmlhttp://m.shnenglu.com/eryar/archive/2023/03/12/mccad_brep_csg.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229751.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229751.htmlMcCad - BRep to CSG

McCad鏄竴涓紑婧愬伐鍏鳳紝鑳借嚜鍔ㄥ皢BRep妯″瀷杞崲鎴怌SG妯″瀷銆傞殢鐫鏍稿姩鍔涙妧鏈殑鍙戝睍錛屼笉鏂紑灞曟柊鍨嬪弽搴斿爢鐨勭爺絀訛紝鍙嶅簲鍫嗙殑鐕冩枡褰㈠紡鍜屽爢鑺竷緗兘杈冧負(fù)澶嶆潅錛岀敱浜庤挋鐗瑰崱緗?MC)鏂規(guī)硶鍏鋒湁寮哄ぇ鐨勫嚑浣曞鐞嗚兘鍔涘拰杈冮珮鐨勮綆楃簿紜害錛屽畠鏄ā鎷熷垎鏋愯繖浜涘鏉傚爢鑺殑鏈夋晥鎵嬫銆傞氳繃浣跨敤McCad灝嗗鏉侭Rep妯″瀷杞崲鎴怌SG妯″瀷錛孋SG琛ㄧず鐨勬ā鍨嬪彲浣滀負(fù)鏍稿弽搴斿爢鑺綆楄挋鐗瑰崱緗?MC)鏂規(guī)硶鐨勮緭鍏ャ?/p>

McCad鍩轟簬OpenCASCADE鍐呮牳宸茬粡鎸佺畫寮鍙戜簡20騫達(dá)紝鍩轟簬LGPL鍗忚寮婧愶紝鎰熷叴瓚g殑灝忎紮浼村彲浠ヤ笅杞藉皾璇曚竴涓嬶細(xì)

https://github.com/inr-kit/McCAD-Library

BRep杞珻SG涓漢鎰熻娌℃湁瀹岀編鐨勮В鍐蟲柟妗堬紝浣嗘槸搴旂敤鑼冨洿寰堝箍銆傚鏋滆漿鎹㈡晥鏋滃ソ錛屽叾瀹炶繕鏈変竴涓敤閫旓紝灝辨槸灝咮Rep杞崲鐨凜SG妯″瀷瀵煎叆鍒癙DMS涓紝浠庤岃В鍐抽氳繃鏈烘璁懼鎺ュ彛MEI瀵煎叆STEP/IGES鍚嶱DMS妯″瀷鏁版嵁鍙樺ぇ鐨勯棶棰樸?/p>

McCad is an open source tool for automatic conversion of B-Rep models into CSG.

McCad has been continuously developed for more than two decades. It provides automatic conversion of Boundary Representation (BREP) CAD models into Constructive Solid Geometry (CSG), the latter of which is an input syntax often used in Monte Carlo (MC) radiation transport codes. The conversion process, from BREP to CSG, is essential for high-fidelity nuclear analysis of complex nuclear facilities. McCad can convert CAD files in STEP format to different input syntaxes used with MC codes such as MCNP, TRIPOLI, Geant4, etc., so that the manual efforts on building a complex simulation model can be avoided. McCad provides an advanced algorithm to decompose complex solids into its constituent convex primitives, and generates the void space description between the solids, which is required by MC codes.

 

It relies on OpenCASCADE CAD kernel to perform CAD manipulations and Boolean operations. McCad has been integrated into the SALOME platform, with a detailed manual provided. It is an open-source code released under LGPL license. This code has been currently used for nuclear research institutes crossing continents, for nuclear analyses on fission reactors, fusion facilities and neutron source facilities.

 



eryar 2023-03-12 18:19 鍙戣〃璇勮
]]>
OpenCASCADE Visualization Performancehttp://m.shnenglu.com/eryar/archive/2023/01/16/occt_visualization_performance.htmleryareryarMon, 16 Jan 2023 14:58:00 GMThttp://m.shnenglu.com/eryar/archive/2023/01/16/occt_visualization_performance.htmlhttp://m.shnenglu.com/eryar/comments/229630.htmlhttp://m.shnenglu.com/eryar/archive/2023/01/16/occt_visualization_performance.html#Feedback0http://m.shnenglu.com/eryar/comments/commentRss/229630.htmlhttp://m.shnenglu.com/eryar/services/trackbacks/229630.htmlOpenCASCADE Visualization Performance

eryar@163.com

 

1 Introduction

OpenCASCADE鐨勬樉紺烘ā鍧楃殑鍔熻兘鎬ц兘濡備綍錛屽緢澶氫漢閮藉緢鍏沖績銆傚紑婧愮ぞ鍖虹殑FreeCAD鐩墠鐨勬樉紺哄姛鑳介兘娌℃湁浣跨敤OpenCASCADE鐨勬樉紺烘ā鍧椼傛棭鍦?014騫存椂錛屾垜鍦ㄧぞ鍖鴻鍧涙彁鍑鴻繃鏄劇ず妯″潡浜や簰閫夋嫨鐨勬ц兘闂錛?/p>

https://dev.opencascade.org/content/selection-convert-2d-not-very-efficient

褰撴椂鐨勭増鏈簲璇ユ槸6.8.0銆傚湪6.7.1鐨勫彂甯冧俊鎭腑榪樻彁鍒頒簡鎴戝緢寮蹇冿細(xì)

褰撴椂KGV涔熸鍦ㄤ紭鍖栬繖閮ㄥ垎鐨勫姛鑳斤細(xì)

https://tracker.dev.opencascade.org/view.php?id=24623

閫氳繃寮曞叆BVH鏉ユ洿楂樻晥鍦板鐞嗛夋嫨錛岃繖涓姛鑳介泦鎴愬埌6.9.0鐨勭増鏈腑浜嗐傚湪6.8.0鐗堟湰涓凡緇忓湪澧炲己鏄劇ず妯″潡鐨勬ц兘錛屽寮曞叆culling鏈哄埗錛?/p>

https://tracker.dev.opencascade.org/view.php?id=24307

鍒?.4.0鐗堟湰錛宑ulling鍩烘湰瀹屽杽錛屽綋妯″瀷瓚呭嚭瑙嗛敟浣撹寖鍥村氨浠庢樉瀛樹腑鍘婚櫎錛?/p>

https://tracker.dev.opencascade.org/view.php?id=30223

鍒扮幇鍦ㄦ渶鏂扮増鏈紝鏄劇ず妯″潡鐨勬樉紺哄拰浜や簰鍔熻兘鐨勬ц兘鍒板簳濡備綍錛屼笅闈㈢粰鍑烘垜鐨勪竴涓祴璇曪紝嫻嬭瘯緇撴灉浠呬緵鍙傝冦?/p>

 

2 紜歡淇℃伅

嫻嬭瘯鐢?shù)鑴戠殑閰嵕|俊鎭涓嬭〃錛?/p>

榪欏彴鐢?shù)鑴戝凡缁忔槸濂藉嚑骞翠箣鍓嶇殑閰嵕|簡錛岀浉瀵圭幇鍦ㄧ殑涓繪祦閰嶇疆宸茬粡钀藉悗浜嗐?/p>

3 嫻嬭瘯緇撴灉

榪欎釜嫻嬭瘯妯″瀷鏄埞鐨勮墢閮ㄦā鍨嬶紝鍖呮嫭鑸逛綋緇撴瀯鍜岃埦瑁呮ā鍨嬶紝鎬誨叡鐨勪笁瑙掗潰鐗囨暟閲忎負(fù)5鐧句竾錛屽撫鏁癋PS涓?5.8錛屽撫鏁板ぇ浜?2搴旇綆楁祦鐣呫備氦浜掗夋嫨鎬ц兘寰堝ソ錛屾劅瑙変笉鍒板歡榪燂紝榧犳爣縐誨姩鍒版ā鍨嬩笂灝卞彲浠ラ珮浜?/p>

榪欎釜嫻嬭瘯妯″瀷鏄竴涓浮杞紝鍖呮嫭鑸逛綋緇撴瀯鍜岃埦瑁呯殑鎵鏈夋ā鍨嬶紝鎬誨叡鐨勪笁瑙掗潰鐗囨暟閲忎負(fù)1鍗?鐧句竾錛屽撫鏁癋PS涓?.1錛岃鍥炬搷浣滐紙瀵硅鍥劇緝鏀俱佹棆杞佺Щ鍔級宸茬粡鏈夋瘮杈冧弗閲嶇殑寤惰繜錛屼絾鏄氦浜掗夋嫨鎬ц兘榪樹笉閿欙紝娌℃湁寤惰繜錛岄紶鏍囩Щ鍔ㄥ埌妯″瀷涓婁篃鏄疄鏃墮珮浜?/p>

榪欎釜鏄搗媧嬪鉤鍙版ā鍨嬶紝鍖呮嫭緇撴瀯鍜岃埦瑁呮ā鍨嬨傝繖涓ā鍨嬮噺鏈澶э紝鎬誨叡鏈?鍗?鐧句竾涓夎闈㈢墖錛屽撫鏁癋PS涓?.2錛岃鍥炬搷浣滐紙瀵硅鍥劇緝鏀俱佹棆杞佺Щ鍔級宸茬粡鏈夋瘮杈冧弗閲嶇殑寤惰繜錛屼絾鏄氦浜掗夋嫨鎬ц兘榪樹笉閿欙紝娌℃湁寤惰繜錛岄紶鏍囩Щ鍔ㄥ埌妯″瀷涓婁篃鏄疄鏃墮珮浜傝繖涓渶澶х殑妯″瀷鍗犵敤鍐呭瓨鎯呭喌濡備笅鍥炬墍紺猴細(xì)

杞歡鎬誨叡鍗犲瓨3.4G鍐呭瓨錛岃繖鍏朵腑榪樺寘鍚乏杈圭殑璁捐瀵艱埅鏍?wèi)鐨勬暟鎹傚綋灝嗘ā鍨嬫斁澶э紝瓚呭嚭瑙嗗浘鑼冨洿澶栫殑妯″瀷宸茬粡琚墧闄ulling錛屾墍浠ュ彲浠ヤ粠涓婂浘鍙互鐪嬪嚭涓夎闈㈢墖鏁伴噺鍙樺皯浜嗭紝涓?鐧句竾銆?/p>

4 Conclusion

閫氳繃浠ヤ笂鐨勬祴璇曟暟鎹紝澶у鍙互緇撳悎鑷繁琛屼笟妯″瀷鐨勪綋閲忔潵閫夋嫨鏄惁浣跨敤OpenCASCADE鐨勬樉紺烘ā鍧椼傚浜庢帴榪?鍗冧竾涓夎闈㈢墖鐨勬ā鍨嬫潵璇達(dá)紝妯″瀷閲忓凡緇忔瘮杈冨ぇ錛屽湪榪欎釜鐢?shù)鑴戦厤缃儏鍐典笅鍩烘湰鑳芥弧鑳鲣竴浜涘ぇ浣撻噺鐨勬ā鍨嬫樉紺哄強浜や簰鎿嶄綔銆傚洜涓哄浜庡ぇ鐨勮璁℃ā鍨嬶紝涓鑸湪璁捐榪囩▼涓紝涔熶笉鏄竴涓漢璁捐錛岃屾槸澶氫漢澶氫笓涓氬崗鍚岃璁★紝涓涓漢娑夊強鍒扮殑妯″瀷閲忎竴鑸笉浼?xì)杈惧?鍗冧竾榪欎釜閲忕駭銆傝屽綋璁捐瀹屾垚錛屽彧闇瑕佹祻瑙堟椂錛堝妯″瀷璇勫錛夛紝榪欐椂灝辨湁寰堝浼樺寲鎵嬫銆?/p>

 



eryar 2023-01-16 22:58 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美日韩亚洲一区三区| 尤物视频一区二区| 亚洲女人天堂av| 欧美国产日韩精品| 老司机免费视频久久| 欧美中文字幕在线播放| 欧美亚洲一区三区| 午夜宅男久久久| 欧美一区二区三区久久精品| 亚洲一区免费看| 久久精品视频免费播放| 久久久蜜桃精品| 久久先锋资源| 亚洲国产欧美一区| 亚洲第一精品在线| 中日韩美女免费视频网址在线观看 | 亚洲午夜av| 先锋影音国产一区| 亚洲午夜三级在线| 性欧美长视频| 亚洲国产成人久久综合一区| 亚洲精品免费在线播放| 亚洲欧美www| 欧美精品一区二区三区蜜臀| 国产酒店精品激情| 一区二区欧美视频| 美女91精品| 亚洲男人的天堂在线aⅴ视频| 卡一卡二国产精品| 在线观看视频日韩| 亚洲一区www| 亚洲三级性片| 欧美精品综合| 亚洲美女毛片| 亚洲国产精品ⅴa在线观看| 欧美在线免费视屏| 国产一区二区三区直播精品电影| 亚洲图片欧美午夜| 一区二区三区福利| 国产精品九九| 欧美一区二区三区视频| 午夜精品久久久| 国产亚洲一本大道中文在线| 久久久国产精品亚洲一区| 午夜精品久久久久久久久久久| 国产精品美女在线| 久久免费的精品国产v∧| 久久国产精品一区二区三区| 一区二区三区在线视频免费观看| 乱中年女人伦av一区二区| 欧美 日韩 国产 一区| 日韩亚洲欧美在线观看| 亚洲欧美综合v| 亚洲手机视频| 永久免费精品影视网站| 欧美高清视频| 国产精品igao视频网网址不卡日韩| 欧美黄色一区| 久久人91精品久久久久久不卡| 亚洲伊人观看| 国产亚洲二区| 美女图片一区二区| 欧美一区二区播放| 欧美1区2区视频| 久久er99精品| 欧美人妖另类| 麻豆精品国产91久久久久久| 狼人天天伊人久久| 欧美亚洲网站| 国产精品久久二区二区| 欧美成人69av| 国产午夜久久久久| 午夜精品美女久久久久av福利| 亚洲精品老司机| 久久夜色精品国产| 久久五月婷婷丁香社区| 亚洲高清免费| 欧美午夜不卡在线观看免费 | 欧美成人精品h版在线观看| 国产精品一区二区三区乱码| 亚洲视频免费在线| 久久九九免费视频| 亚洲国产精品t66y| 久久都是精品| 亚洲国产成人精品久久| 国产精品美女| 亚洲国产精品久久91精品| 亚洲香蕉网站| 亚洲国产成人av| 在线不卡中文字幕| 亚洲成人在线免费| 1024成人网色www| 欧美电影在线观看| 欧美在线观看你懂的| 99人久久精品视频最新地址| 久久国产一区| 亚洲一区999| 日韩一区二区电影网| 雨宫琴音一区二区在线| 国产色爱av资源综合区| 欧美人体xx| 欧美激情影院| 欧美精品久久一区二区| 欧美在线日韩| 欧美一区视频| 久久精品视频在线| 免费视频久久| 欧美在线播放视频| 久久不射电影网| 久久国产一区| 免费成人毛片| 国产精品国产三级国产普通话99| 一本大道久久精品懂色aⅴ| 国产在线拍偷自揄拍精品| 亚洲看片网站| 欧美激情一级片一区二区| 久久婷婷亚洲| 男人的天堂亚洲在线| 久久精品国产v日韩v亚洲| 午夜欧美大片免费观看| 一区二区三区精品视频在线观看| 亚洲精品婷婷| 欧美在线中文字幕| 亚洲一区二区三区视频| 亚洲国产99| 国产精品一区二区女厕厕| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品视屏| 在线一区二区三区四区| 亚洲精品视频一区| 老司机午夜免费精品视频| 久久久青草青青国产亚洲免观| 欧美三日本三级少妇三2023| 亚洲国产清纯| 亚洲精选一区二区| 久久天堂av综合合色| 老鸭窝91久久精品色噜噜导演| 国产精品日韩欧美一区二区三区| 亚洲伦理一区| 一区二区日韩伦理片| 欧美精品在欧美一区二区少妇| 欧美高潮视频| 亚洲美女在线视频| 欧美精品福利视频| 亚洲精品自在在线观看| 99成人免费视频| 欧美美女操人视频| 99热在这里有精品免费| 亚洲在线视频观看| 国产精品一级久久久| 性久久久久久久久| 理论片一区二区在线| 亚洲国产精品v| 欧美日韩国产一区二区| 宅男噜噜噜66一区二区| 欧美一区中文字幕| 国产一区二区精品久久91| 久久精品五月| 亚洲成在人线av| 亚洲视频你懂的| 国产视频丨精品|在线观看| 久久黄色小说| 亚洲精品美女在线观看播放| 亚洲免费在线观看视频| 国产在线精品自拍| 欧美精品一区在线发布| 香港久久久电影| 亚洲第一区在线| 午夜欧美理论片| 亚洲高清自拍| 国产精品日日做人人爱| 久久久久成人精品| 日韩一级片网址| 久久一二三区| 亚洲在线视频| 亚洲精品欧美日韩专区| 国产日韩欧美夫妻视频在线观看| 免费观看一级特黄欧美大片| 9色精品在线| 欧美成人小视频| 欧美一区二区在线视频| 亚洲乱码国产乱码精品精98午夜 | 亚洲乱码精品一二三四区日韩在线 | 欧美久久电影| 亚洲精品国产视频| 欧美中文字幕在线播放| 91久久久久久久久久久久久| 欧美三级午夜理伦三级中视频| 久久精品中文字幕免费mv| 亚洲国语精品自产拍在线观看| 国产精品九色蝌蚪自拍| 美女被久久久| 欧美成人日本| 久久大香伊蕉在人线观看热2| 91久久国产综合久久蜜月精品| 国产精品视频福利| 欧美精品1区2区| 老色鬼精品视频在线观看播放| 亚洲综合99| 亚洲视频免费在线|