AutoACD 的 dxf 多段線(POLYLINE,LWPOLYLINE)中一個圓弧數據是圓弧起始點、圓弧終止點和Bulge數據組成。如果是直線的話,Bulge數據爲0。之前我在網上看到關於這個轉換的方法,我也參照那個方法實現了這個功能,不過代碼比較繁瑣。最近在學習python的dxf2gcode的開源源碼時看到讀取多段線中圓弧的處理方法,也是通過圓弧起始點、圓弧終止點和Bulge計算出圓弧的圓心和半徑,計算非常簡單和方便。之前爲了在網上找這個功能實現的代碼很少,有講到的長篇的代碼也會把人嚇到。現在把這個功能實現的代碼分享出來。
def bulge2arc(self, Ps, Pe, bulge):
"""
bulge2arc()
"""
c = (1 / bulge - bulge) / 2
# Calculate the centre point (Micke's formula!)
O = Point((Ps.x + Pe.x - (Pe.y - Ps.y) * c) / 2,
(Ps.y + Pe.y + (Pe.x - Ps.x) * c) / 2)
# Radius = Distance between the centre and Ps
r = O.distance(Ps)
# Check if they are equal (fits ...)
# r=O.distance(Pe)
# Unterscheidung f�r den �ffnungswinkel.
# Distinction for the opening angle. ???
if bulge > 0:
return ArcGeo(Ps=Ps, Pe=Pe, O=O, r=r)
else:
arc = ArcGeo(Ps=Pe, Pe=Ps, O=O, r=r)
arc.reverse()
return arc
上面是python的源碼,應該很好理解!不熟悉的或是編程初學者我下面解釋一下也就明白了。如果是windows編程可以使用autocad的免費dxf庫,庫裏直接會把數據提供給你,不用自己去分析dxf文件。
c是個中間變量,c的計算方法是:(1 / bulge - bulge) / 2
o是圓心座標,Ps是從dxf讀出的圓弧的起始點,Pe是從dxf讀出的圓弧的終止點,c就是上面的中間變量
圓心的X座標:(Ps.x + Pe.x - (Pe.y - Ps.y) * c) / 2
圓心的Y座標:(Ps.y + Pe.y + (Pe.x - Ps.x) * c) / 2
圓弧半徑:圓心到起始點或終止點的距離,計算方法:連點之間的距離。
bugle是正數,圓弧是逆時針;負數是順時針。
真的是好簡單!關鍵是我不知道這個Calculate the centre point (Micke's formula!)(計算中心點(米克公式!))。學習國外的一些開源代碼真的有收穫!
後續有好的功能算法,我會繼續分享給大家!如果你覺得對你有幫助,不要吝嗇免費的贊,給我點一個!