dxf 多段線(POLYLINE,LWPOLYLINE)中圓弧數據圓弧起始點、圓弧終止點和Bulge計算出圓弧的圓心和半徑

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!)(計算中心點(米克公式!))。學習國外的一些開源代碼真的有收穫!

後續有好的功能算法,我會繼續分享給大家!如果你覺得對你有幫助,不要吝嗇免費的贊,給我點一個!


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章