• <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>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            OpenCASCADE BRep Precision

            Posted on 2022-10-05 08:51 eryar 閱讀(1220) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCASCADE BRep Precision

            eryar@163.com

            Abstract: Several geometric representations maybe attached to a topological(B-Rep) object. These representations are similar but rarely identical. For modeling algorithms, it is necessary to know exactly the precision associated with this approximation. The numeric value of this precision is called tolerance. It defines the zone in which all geometrical representations of the object are located.

            Keywords: OpenCASCADE, BRep, Precision, Tolerance

            1 Introduction

            在計算機中表示浮點數是有精度限制的,浮點數的相等比較一般使用鄰域比較技術,就是在指定精度的前提下比較兩個浮點數是否相等。在邊界表示法BRep中同一個拓樸體可以附加幾種幾何表示,如拓樸點Vertex有如下幾何表示方法:

            • 一個三維點;
            • 一條曲線和曲線上的參數u;
            • 一個曲面上的一對參數u,v;

            這幾種幾何表示方法表示的是同一個對象,但因為浮點數精度限制,這幾種幾何數據并不能完全相同的。對于造型算法有必要知道拓樸體上的精度值。BRep上關聯的精度值稱為容差Tolerance。Vertex點的容差是包圍點且以精度值為半徑的球體;Edge邊的容差是包圍曲線且以精度值為半徑的管道;Face的容差是包圍曲面且以精度值為厚度板:

            精度是幾何造型內核一個重要指標,且影響數值算法性能及穩定性Robust。在OpenCASCADE中,精度還有一個要求:

            2 Unit and Precision

            對于幾何內核中的數值1代表什么,一般人可能習慣性地將其與毫米mm單位關聯,覺得是1mm。建模時單位的選擇會對精度有很大影響,因為不同單位會導致數據小數位數的變化。如對芯片內部結構建模,芯片的尺度是納米,若以毫米以單位,則要構造出芯片內部有些結構,對幾何內核精度要求會更高;若以納米為單位,則對幾何內核精度要求會低些。

            由此可見,幾何內核中的數值1無單位的,需要根據模型的尺度選擇合適的單位。單位只針對三維模型空間中的曲線曲面,由于曲線曲面用參數方程表示,所以曲線的參數空間是一維空間,曲面的參數空間是二維空間。參數空間的數是沒有單位的。如一個圓,不管其位置和半徑如何,其參數空間總是從0~2PI。所以在設置精度時,需要區分是模型空間還是參數空間。

            3 BRep Precision

            在OpenCASCADE中通過類BRep_Builder來設置邊界表示法中包含幾何信息的點、邊和面來設置容差。如設置面的容差函數為:

            修改容差也可以通過類BRep_Builder中的Update相關函數,更高級直接的修改容差的類是ShapeFix_ShapeTolerance。

             查詢容差需要使用類BRep_Tool:

            從查詢容差函數的實現代碼中可以看出,在OpenCASCADE中容差的最小值是Precision::Confusion(),即1.e-7。即使設置的容差小于1.e-7,查詢容差的時候也是1.e-7。即OpenCASCADE中BRep表示的建模極限是1.e-7。如以米為單位,要去對納米的物體建模,在OpenCASCADE中是做不到。

            5 Primitive Tolerance

            使用OpenCASCADE內置的構造基本體的算法來構造BRep體時,默認的容差值就是Precision::Confusion(),(1.e-7)即使用了最高精度。如創建圓錐體時其高度Height值最小為Precision::Confusion()。

            創建長方體Box時各邊長度的最小值也是Precision::Confusion():

            4 Geometry Precision

            在OpenCASCADE中幾何曲線和曲面都是用參數方程來表示的,幾何的意思就是數學方程,是精確的數學表示沒有容差。

            但是幾何相關的算法如求交Intersection、投影Project及定位Classifier都與精度密切相關。如定位算法Classifier判斷點是否在線/面上等。而求交的算法實現都是數值方法,數值算法的迭代次數和終止條件都與精度直接相關,從而影響算法性能及穩定性。如計算解析曲面求交算法中默認容差:

            解析曲面幾何求交算法中的默認容差:

            有些容差值是寫在代碼中不能修改,這些容差值都要比BRep中的極限容差值1.e-7要小,即幾何算法中硬編碼的一些容差要小于BRep中的容差值。由此可見幾何算法中的精度要高于BRep中的精度,從而保證算法的正確性。

            6 Fuzzy Tolerance

            在布爾運算中,BRep體的容差值會作為幾何算法的精度輸入。在Draw Test Harness中可通過如下命令設置容差:

            Draw[1]> help settolerance

            settolerance    : shape [mode=v-e-f-a] val(fix value) or tolmin tolmax

            Draw[2]> settolerance s1 a 0.001

            下面以兩個模型做布爾減CUT操作為例,看看不同的容差布爾支算所需要時間有什么不同。通過左邊Tcl腳本導入兩個模型,再使用命令settolerance設置容差為0.01,最后布爾運算花費0.2414661秒。

            將命令settolerance注釋掉,使用模型默認容差1e-7,看所需要的時間:

            從上面的例子看到容差的提高所需時間沒有太大區別。若BRep的容差會作為幾何算法的容差輸入,理論上設置BRep容差會對布爾運算有影響。

            在二次解析曲面求交的數值算法中,容差參數直接省略沒有使用。在二次解析曲面求交的幾何算法中,容差主要用來判斷一些接觸時是否相交。在更底層的數值算法庫math中使用了內置硬編碼的更高的精度。如下圖所示為多項式求根的數值算法中內置的精度為1.0e-30,遠高于BRep中的1.0e-7。這樣做避免了BRep容差對底層算法的影響,但是高精度犧牲了一些數值算法性能。

            由此可見,容差主要影響接觸時情況的處理,處理結果直接影響求交的結果。在布爾運算中使用默認容差為1e-7不相交的,但實際應用場景只要1e-3的容差,則會相交。會導致布爾運算結果與預期不符。為了提高布爾運算穩定性引入Fuzzy容差的概念。在相交計算中Fuzzy容差的使用代碼如下:

            其他相交計算中關于Fuzzy容差的處理都是類似的,具體可以參考類IntTools_EdgeFace和IntTools_FaceFace。通過引入Fuzzy容差設置,在原有BRep容差基礎上加上Fuzzy/2來擴大容差范圍,可以處理布爾運算中接觸的情況,提高布爾運算穩定性。下面使用Tcl腳本演示Fuzzy容差的使用場景:

            box b 10 10 10

            pcylinder c 5 20

            ttranslate c 5 5 0.00001

            bfuzzyvalue 0.00001

            bcut r b c

            當使用布爾運算標準容差時,可以把bfuzzyvalue這行注釋掉。

            創建一個長方體和圓柱體,并將圓柱體沿Z方向移動0.00001。

            上圖左邊為使用標準容差,默認為1e-7。右邊為設置Fuzzy容差效果。

            7 Conclusion

            綜上所述,幾何內核中的數是沒有量綱的,可以根據模型的尺度選擇合適的單位。OpenCASCADE中BRep體模型最小建模精度為1.e-7。幾何數據使用參數方程表示,是精確的數學表示,但是幾何算法是有精度的。有些幾何算法中有些精度是硬編碼的不能修改,這類精度值都要高于1.e-7。有些精度是通過BRep中的拓樸點,邊和面傳遞過來的。為了提高布爾運算的穩定性,引入Fuzzy容差,解決一些接觸的容差問題。

             

            8 下載PipeCAD

            現在可以直接在Github上下載PipeCAD個人版免費使用:

            https://github.com/eryar/PipeCAD/releases

            國內用戶可以加入PipeCAD QQ交流群964851855,在群文件中下載PipeCAD最新版本。

            PipeCAD自帶Sample示例項目,可以通過用戶SYSTEM,密碼XXXXXX來登錄項目體驗PipeCAD。關于PipeCAD的使用方法可以先查看PipeCAD相關的操作視頻:

            https://space.bilibili.com/1548012589

            歡迎大家下載使用,反饋意見或參與開發,來一起完善PipeCAD。大家可以掃描下方二維碼加入PipeCAD QQ群,一起交流使用PipeCAD的經驗心得。PipeCAD QQ交流群 964851855。

            注意事項:目前PipeCAD正處于測試階段,建議根據需要將項目數據進行備份,以防數據丟失。

            AV无码久久久久不卡蜜桃| 色老头网站久久网| 久久精品一区二区国产| 久久综合久久综合久久综合| 狠狠久久亚洲欧美专区| 国产免费福利体检区久久| 久久综合久久美利坚合众国| 色诱久久av| 久久精品国产亚洲AV香蕉| 久久久精品国产亚洲成人满18免费网站| 久久国产精品一区| 国产精品久久久久…| 无码人妻久久一区二区三区蜜桃 | 囯产极品美女高潮无套久久久| 久久精品天天中文字幕人妻| 久久青青草原精品国产不卡| 欧美牲交A欧牲交aⅴ久久| 性做久久久久久久久老女人| 久久久久久人妻无码| 久久人与动人物a级毛片| 国产巨作麻豆欧美亚洲综合久久| 午夜天堂av天堂久久久| 午夜精品久久久久久| 国产精品久久国产精品99盘| 蜜桃麻豆WWW久久囤产精品| 久久人人爽人人精品视频| 国产一级做a爰片久久毛片| 久久亚洲美女精品国产精品| 一本一道久久a久久精品综合| 久久综合久久鬼色| 久久久久国产一级毛片高清板 | 国产精品久久久久久五月尺| 国产精品99久久不卡| 精品久久久久久亚洲精品| 久久丫精品国产亚洲av不卡| 精品国产日韩久久亚洲| 亚洲午夜精品久久久久久浪潮| 国产激情久久久久影院老熟女 | 欧美伊人久久大香线蕉综合69| 91亚洲国产成人久久精品| 2020最新久久久视精品爱|