日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCASCADE 麻花钻头造型实例分析

發布時間:2025/3/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCASCADE 麻花钻头造型实例分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OpenCASCADE 麻花鉆頭造型實例分析

eryar@163.com

Abstract. OpenCASCADE provides a simple twist drill bit modeling example in Tcl script. The blog will give a details of some key points, when you understand the key points, you can modeling the shape like that.

Key Words. OpenCASCADE, Twist Drill Bit Modeling, Tcl

1.Introduction

OpenCASCADE的Draw Test Harness中提供了一個麻花鉆頭造型的實例,如下圖所示:

Figure 1. A Simple Twist Drill Bit by OpenCASCADE

鉆頭造型主要涉及到旋轉形狀的造型方法,放樣造型及布爾操作。本文結合鉆頭的Tcl腳本來詳細說明造型過程。對于有同樣造型需求的,可以在理解造型方法的基礎上實現自己需要的參數化形狀。

2.Modeling Tcl Script

通過Draw Test Harness的菜單Samples->View samples可以找到Drill例子,如下圖所示:

Figure 2. Drill bit modeling sample

對應的Tcl腳本位于samples/tcl文件夾中,列出如下:

# Sample: creation of simple twist drill bit #Category: Modeling #Title: Drill pload MODELING VISUALIZATION # drill parameters (some terms taken from http://www.drill-bits.cn/drill-bits-quality.asp) dset R 4. ;# outer radius dset D 2*R ;# diameter dset Rr 3.5 ;# chisel radius (outer radius minus body clearance) dset b 1. ;# web thickness (approximate) dset d b/2 dset H 80. ;# height of the spiral part dset a 3.*pi ;# total angle of spiral rotation dset sigma 118 ;# point angle, in degrees # Create section profile by sequence of Boolean operations # on simple planar objects puts "Creating the drill section profile..." polyline rectangle1 d -R 0 R -R 0 -d R 0 -R R 0 d -R 0 circle circle1 0 0 0 0 0 1 R mkedge circle1 circle1 wire circle1 circle1 circle circle2 0 0 0 0 0 1 Rr mkedge circle2 circle2 wire circle2 circle2 plane p0 mkface rectangle1 p0 rectangle1 mkface circle1 p0 circle1 mkface circle2 p0 circle2 bcommon sec rectangle1 circle1 # note use of 'fuse' instead of 'bfuse' -- we need to get single face fuse sec sec circle2 # Construct flute profile so as to have cutting lip straight after sharpening. # Here we need to take into account spiral shift of the flute edge # along the point length -- the way to do that is to make spiral # from the desired cutting lip edge and then intersect it by plane polyline lip d -d/2 0 d -R -R/tan(sigma/2*pi/180) polyline sp 0 0 0 0 0 H cylinder cc 0 0 0 0 0 1 0 -4 0 4 line ll 0 0 a 80 trim ll ll 0 sqrt(a*a+H*H) vertex v1 0 -R 0 vertex v2 0 -R H trotate v2 0 0 0 0 0 1 180.*a/pi mkedge ee ll cc v1 v2 wire gg ee mksweep sp setsweep -G gg 0 0 addsweep lip buildsweep spiral -S mkface f0 p0 -R R -R R bsection sflute spiral f0 # here we rely on that section curve is parameterized from 0 to 1 # and directed as cutting lip edge; # note that this can change if intersection algorithm is modified explode sflute e mkcurve cflute sflute_1 cvalue cflute 0. x0 y0 z0 cvalue cflute 1. x1 y1 z1 vertex vf0 x0 y0 z0 vertex vf1 x1 y1 z1 # -- variant: replace curve by arc with start at x0,y0,z0 and end at x1,y1,z1, # -- such that tanget at start point is along Y #dset Rflute ((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0))/(2*(x1-x0)) #circle aflute x0+Rflute y0 0 0 0 1 Rflute #mkedge sflute_1 aflute vf0 vf1 # make rounding in the flute; use circle with radius Rr/2 circle cround x0+Rr/2 y0 0 0 0 1 Rr/2 vertex vf3 x0+Rr y0 0 mkedge sflute_2 cround vf3 vf0 vertex vf2 R -R 0 edge sflute_3 vf3 vf2 edge sflute_4 vf2 vf1 wire w2 sflute_1 sflute_2 sflute_3 sflute_4 mkface flute p0 w2 # cut flute from profile bcut sec sec flute trotate flute 0 0 0 0 0 1 180. bcut sec sec flute donly sec # sweep profile to get a drill body puts "Sweeping the profile..." mksweep sp setsweep -G gg 0 0 explode sec w addsweep sec_1 buildsweep base -S # sharpen the drill (see http://tool-land.ru/zatochka-sverla.php) puts "Sharpening..." dset theta a*R/H*sin((90-sigma/2)*pi/180) plane ax1 d 1.9*D "H+1.9*D/tan(pi/180.*sigma/2.)" 0 -1 -1 pcone sh1 ax1 0 100*sin((sigma-90)/2*pi/180.) 100 trotate sh1 0 0 0 0 0 1 -theta*180/pi tcopy sh1 sh2 trotate sh2 0 0 0 0 0 1 180 box sh -D/2 -D/2 72 D D 20 bcommon qq sh1 sh2 bcut sharpener sh qq bcut body base sharpener # make a shank puts "Making a shank..." plane pl2 0 0 -40 0 0 1 pcylinder shank pl2 4 40 pcone transit R 0 R plane pl3 0 0 -40 0 0 -0.5 pcone tail pl3 R 0 0.5 bfuse shank shank tail bfuse shank shank transit bfuse drill body shank # check result checkshape drill # show result puts "Displaying result..." incmesh drill 0.01 vdisplay drill vsetdispmode drill 1 vrenderparams -msaa 8 vfit # show section and sweep path ttranslate sec_1 0 0 H; trotate sec_1 0 0 0 0 0 1 a*180/pi; incmesh gg 0.01; vdisplay gg sec_1

?

下面結合Tcl腳本來對鉆頭的造型過程進行詳細說明。

3.Twist Drill Bit Parameters

腳本首先加載相應的模塊:造型模塊和顯示模塊,分別為MODEING和VISUALIZATION。然后設置鉆頭相關參數變量:

Figure 3. Drill Bit?

變量名及其說明:

變量名variable說明 detail
R外半徑 outer radius
D直徑D
RrChisel Radius
bWeb thickness(approximate)
d?
H螺旋部分的高度Height of the spiral height
a螺旋角度Total angle of spiral rotation
sigma鉆尖角度Point angle in degrees.

?

?

?

?

?

?

?

先定義這些變量的思想也是參數化的思想,將這些變量值改變就會得到不同的鉆頭模型。參數化的思想在CAD軟件中比較常見,如AutoCAD中的動態塊,PDMS中的設備模板Template等,都屬于參數化的方法。通過修改參數讓一個或多個幾何體形狀發生變化。

4.Create Drill Section Profile

創建鉆頭截面的Tcl腳本如下所示:

# Create section profile by sequence of Boolean operations # on simple planar objects puts "Creating the drill section profile..." polyline rectangle1 d -R 0 R -R 0 -d R 0 -R R 0 d -R 0 circle circle1 0 0 0 0 0 1 R mkedge circle1 circle1 wire circle1 circle1 circle circle2 0 0 0 0 0 1 Rr mkedge circle2 circle2 wire circle2 circle2 plane p0 mkface rectangle1 p0 rectangle1 mkface circle1 p0 circle1 mkface circle2 p0 circle2 bcommon sec rectangle1 circle1 # note use of 'fuse' instead of 'bfuse' -- we need to get single face fuse sec sec circle2

?

生成的圖形如下圖所示:

Figure 4 Profile construction curves

其中變量Rectangle1是圖中綠色表示的四邊形,Circle1是黃色表示的外圓,Circle2是紅色表示的內圓。通過布爾操作求取Rectangle1和Circle1的公共部分得到如下圖所示的截面:

Figure 5 Common of Rectangle1 and Circle1

將公共部分與內圓Circle2合并得到如圖所示截面:

Figure 6. Fuse of Common part and Circle2

下面在這個截面的基礎上生成鉆頭的螺旋凹槽,這里是相對關鍵的地方,生成凹槽的時候還要考慮螺旋。

# Construct flute profile so as to have cutting lip straight after sharpening. # Here we need to take into account spiral shift of the flute edge # along the point length -- the way to do that is to make spiral # from the desired cutting lip edge and then intersect it by plane polyline lip d -d/2 0 d -R -R/tan(sigma/2*pi/180) polyline sp 0 0 0 0 0 H cylinder cc 0 0 0 0 0 1 0 -4 0 4 line ll 0 0 a 80 trim ll ll 0 sqrt(a*a+H*H) vertex v1 0 -R 0 vertex v2 0 -R H trotate v2 0 0 0 0 0 1 180.*a/pi mkedge ee ll cc v1 v2 wire gg ee mksweep sp setsweep -G gg 0 0 addsweep lip buildsweep spiral -S mkface f0 p0 -R R -R R bsection sflute spiral f0

?

代碼生成的圖形如下圖所示:

Figure 7. Flute of the drill bit

通過將線lip沿著路徑直線sp和螺旋線gg放樣得到螺旋截面spiral,再將螺旋截面spiral和底平面f0求交得到sflute。

# here we rely on that section curve is parameterized from 0 to 1 # and directed as cutting lip edge; # note that this can change if intersection algorithm is modified explode sflute e mkcurve cflute sflute_1 cvalue cflute 0. x0 y0 z0 cvalue cflute 1. x1 y1 z1 vertex vf0 x0 y0 z0 vertex vf1 x1 y1 z1 # -- variant: replace curve by arc with start at x0,y0,z0 and end at x1,y1,z1, # -- such that tanget at start point is along Y #dset Rflute ((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0))/(2*(x1-x0)) #circle aflute x0+Rflute y0 0 0 0 1 Rflute #mkedge sflute_1 aflute vf0 vf1 # make rounding in the flute; use circle with radius Rr/2 circle cround x0+Rr/2 y0 0 0 0 1 Rr/2 vertex vf3 x0+Rr y0 0 mkedge sflute_2 cround vf3 vf0 vertex vf2 R -R 0 edge sflute_3 vf3 vf2 edge sflute_4 vf2 vf1 wire w2 sflute_1 sflute_2 sflute_3 sflute_4 mkface flute p0 w2

?

通過求得的交線再構造圓弧和線段來構造出鉆頭凹槽的截面,如下圖所示:

Figure 8. Make flute section

將凹槽截面flute從前面構造的截面中去除:

# cut flute from profile bcut sec sec flute

?

Figure 9. Make drill bit profile

將凹槽截面繞Z軸旋轉180度,再去布爾減原來的截面:

trotate flute 0 0 0 0 0 1 180. bcut sec sec flute

?

Figure 10. Make drill bit profile

這樣鉆頭的截面就生成了。

5.Sweeping the Profile

將上面鉆頭截面沿著直線sp和螺旋線gg放樣:

# sweep profile to get a drill body puts "Sweeping the profile..." mksweep sp setsweep -G gg 0 0 explode sec w addsweep sec_1 buildsweep base -S

?

生成圖形如下圖所示:

Figure 11. Sweep the profile

通過放樣得到了鉆頭的螺桿base。

6.Sharpening

得到鉆頭的螺桿后需要生成鉆頭的鉆尖,根據鉆尖角point angle變量sigma來造型。

# sharpen the drill (see http://tool-land.ru/zatochka-sverla.php) puts "Sharpening..." dset theta a*R/H*sin((90-sigma/2)*pi/180) plane ax1 d 1.9*D "H+1.9*D/tan(pi/180.*sigma/2.)" 0 -1 -1 pcone sh1 ax1 0 100*sin((sigma-90)/2*pi/180.) 100 trotate sh1 0 0 0 0 0 1 -theta*180/pi tcopy sh1 sh2 trotate sh2 0 0 0 0 0 1 180 box sh -D/2 -D/2 72 D D 20 bcommon qq sh1 sh2 bcut sharpener sh qq bcut body base sharpener

?

先構造兩個圓錐體(sh1和sh2)和一個長方體sh,再通過布爾運算得到兩個圓錐體sh1,sh2的公共部分qq。如下圖所示:

Figure 12. Modeling point angle

再從長方體sh中減去兩個圓錐的公共部分得到如下圖所示:

Figure 13. Modeling point angle

將螺桿減去上面得到的sharpener就完成鉆尖的造型,如下圖所示:

Figure 14. Modeling point angle

7.Make Shank

完成螺桿和鉆尖造型后,就來實現麻花鉆頭的最后部分,鉆頭柄shank。

# make a shank puts "Making a shank..." plane pl2 0 0 -40 0 0 1 pcylinder shank pl2 4 40 pcone transit R 0 R plane pl3 0 0 -40 0 0 -0.5 pcone tail pl3 R 0 0.5 bfuse shank shank tail bfuse shank shank transit bfuse drill body shank

?

鉆頭柄部由兩個圓錐(transit和tail)和一個圓柱shank組成。最后將這三個形狀合并得到完成的鉆頭的柄部shank。

Figure 15. Modeling Shank

8.Conclusion

通過對OpenCASCADE中麻花鉆頭的造型實例分析,可見這個鉆頭造型用到的算法主要是放樣及布爾操作。在生成螺旋線時主要是使用pcurve的方式。最后還要理解參數化的造型思想,通過定義變量來生成參數化的模型。

總結

以上是生活随笔為你收集整理的OpenCASCADE 麻花钻头造型实例分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。