2026年8月19日 星期三

FreeCAD,Python Console 的操作

 

在 Python Console 的操作

 先選定一個 edge,綠色文字是系統的訊息。

--------
>>> # Gui.Selection.addSelection('ThinkBoard_test','ThinkBoard_v38','Case.Part__Feature002.Edge530',-98,90.1992,-18.3352)
>>> obj = Gui.Selection.getSelection()[0]
>>> print(obj.Name)
Part__Feature002
>>> sel = Gui.Selection.getSelectionEx()[0]
>>> print("Object:", sel.Object.Name)
Object: Part__Feature002
>>> print("SubElement:", sel.SubElementNames)
SubElement: ('Edge530',)
>>> edge = sel.SubObjects[0]
>>> print("ShapeType:", edge.ShapeType)
ShapeType: Edge
>>> print("Length:", edge.Length)
Length: 157.20277538480389
>>> p1 = edge.Vertexes[0].Point
>>> p2 = edge.Vertexes[-1].Point
>>> print("Start =", p1)
Start = Vector (-98.0, -25.2200000000001, -5.36840007947745)
>>> print("End   =", p2)
End   = Vector (-98.0, 130.999999999999, -22.9190179798644)
>>> import math
>>> dx = p2.x - p1.x
>>> dy = p2.y - p1.y
>>> dz = p2.z - p1.z
>>> angle = math.degrees(math.atan2(dy, dx))
>>> print("XY angle =", angle, "deg")
XY angle = 90.0 deg
>>> angle = math.degrees(math.atan2(dy, dz))
>>> print("YZ angle =", angle, "deg")
YZ angle = 96.41004642679681 deg
--------

寫一小段程式,計算角度

------------
import math

def edge_angle():
    sel = Gui.Selection.getSelectionEx()
    if not sel or not sel[0].SubObjects:
        print("請先選取一條 Edge")
        return

    edge = sel[0].SubObjects[0]

    if edge.ShapeType != "Edge":
        print("選取的不是 Edge")
        return

    p1 = edge.Vertexes[0].Point
    p2 = edge.Vertexes[-1].Point

    dx = p2.x - p1.x
    dy = p2.y - p1.y
    dz = p2.z - p1.z

    xy_length = math.sqrt(dx**2 + dy**2)
    length = math.sqrt(dx**2 + dy**2 + dz**2)

    angle = math.degrees(math.atan2(abs(dz), xy_length))

    print("Edge:", sel[0].SubElementNames[0])
    print("Length =", length, "mm")
    print("XY projection =", xy_length, "mm")
    print("Angle to XY plane =", angle, "deg")

    return angle
------------




沒有留言:

張貼留言

網誌存檔