from build123d import * from ocp_vscode import show # 1. Importujemy plik STEP # (Ponieważ nie mam Twojego pliku, symuluję go tutaj jako 'imported_motor') # imported_motor = import_step("motor_2207.step") # --- SYMULACJA IMPORTU (Tylko dla przykładu) --- with BuildPart() as m: Cylinder(14, 15) # Dzwonek with Locations((0,0,-2)): Cylinder(4, 5) # Ośka wystająca w dół (dziwny silnik, ale niech będzie) # Załóżmy, że ten silnik jest przesunięty w kosmos w pliku STEP: imported_motor = m.part.moved(Location((100, 200, 50))) # ----------------------------------------------- # 2. Szukamy miejsca na Jointa (To jest kluczowe przy STEPach!) # Nie wiemy gdzie on jest (100, 200...), więc szukamy geometrycznie. # Np. szukamy największej płaskiej ściany na samym spodzie silnika (podstawa) # Axis.Z ujemne -> szukamy na dole base_face = imported_motor.faces().sort_by(Axis.Z)[0] # A może szukamy otworu na śrubę? # Szukamy krawędzi (edges) będących okręgami, o promieniu 2mm (M4) # screw_hole = imported_motor.edges().filter_by(GeomType.CIRCLE).filter_by(lambda e: e.radius == 2).first() # 3. Naklejamy Jointa na znalezioną ścianę # WAŻNE: Musimy użyć 'to_part', bo modyfikujemy istniejący obiekt, a nie builder. imported_motor.joints["mount"] = RigidJoint( label="mount", to_part=imported_motor, joint_location=Location(base_face.center()) # Centrum znalezionej ściany ) # --- TERAZ MOŻEMY GO UŻYĆ --- # Tworzymy ramię drona with BuildPart() as arm_builder: Box(100, 30, 4) RigidJoint("motor_pad", joint_location=Location((20, 0, 0))) arm = arm_builder.part # Łączymy! # Silnik (który był w kosmosie: 100, 200, 50) przyleci idealnie na ramię. imported_motor.joints["mount"].connect_to(arm.joints["motor_pad"]) show(arm, imported_motor, render_joints=True)