# -*- coding: utf-8 -*-
# freecad-eksport.py - eksport elementow silnika slingshot do STEP.
# Wygenerowano automatycznie przez kreator PHP: 2026-07-06 06:15:41
# Wymiary odpowiadaja plikom STL/DXF z tego samego katalogu.
#
# Uruchomienie (FreeCAD >= 0.20, darmowy, freecad.org):
#   freecadcmd freecad-eksport.py        (bez GUI)
# albo w GUI FreeCAD: Makro -> wykonaj ten plik.
# Wynik: po jednym pliku .step na element, w katalogu biezacym.
#
# Kazdy element to bryla obrotowa: zamkniety profil (x, r) obracany
# 360 stopni wokol osi X. Gwinty NIE sa modelowane (walec o srednicy
# nominalnej) - oznaczenie gwintu jest na rysunkach i w wyliczeniach.

import FreeCAD
import Part

DOK = FreeCAD.newDocument("silnik_slingshot")

def bryla_obrotowa(nazwa, profil):
    """Buduje bryle obrotowa z profilu (x, r) i eksportuje STEP."""
    wierzcholki = [FreeCAD.Vector(x, r, 0.0) for (x, r) in profil]
    wierzcholki.append(wierzcholki[0])          # domkniecie konturu
    kontur = Part.makePolygon(wierzcholki)
    sciana = Part.Face(kontur)
    bryla = sciana.revolve(FreeCAD.Vector(0, 0, 0),   # punkt osi
                           FreeCAD.Vector(1, 0, 0),   # kierunek osi X
                           360.0)
    obiekt = DOK.addObject("Part::Feature", nazwa)
    obiekt.Shape = bryla
    bryla.exportStep(nazwa + ".step")
    print("zapisano: " + nazwa + ".step  (objetosc %.1f cm3)"
          % (bryla.Volume / 1000.0))

# Obudowa zewnętrzna (rura)
profil_obudowa = [
    (0.0000, 50.0000), (3500.0000, 50.0000), (3500.0000, 60.0000), (3465.0000, 60.0000),
    (3465.0000, 57.0000), (3443.0000, 57.0000), (3443.0000, 60.0000), (3375.2500, 60.0000),
    (3375.2500, 58.2000), (3364.7500, 58.2000), (3364.7500, 60.0000), (3255.2500, 60.0000),
    (3255.2500, 58.2000), (3244.7500, 58.2000), (3244.7500, 60.0000), (3135.2500, 60.0000),
    (3135.2500, 58.2000), (3124.7500, 58.2000), (3124.7500, 60.0000), (3015.2500, 60.0000),
    (3015.2500, 58.2000), (3004.7500, 58.2000), (3004.7500, 60.0000), (2895.2500, 60.0000),
    (2895.2500, 58.2000), (2884.7500, 58.2000), (2884.7500, 60.0000), (2775.2500, 60.0000),
    (2775.2500, 58.2000), (2764.7500, 58.2000), (2764.7500, 60.0000), (2655.2500, 60.0000),
    (2655.2500, 58.2000), (2644.7500, 58.2000), (2644.7500, 60.0000), (2535.2500, 60.0000),
    (2535.2500, 58.2000), (2524.7500, 58.2000), (2524.7500, 60.0000), (2415.2500, 60.0000),
    (2415.2500, 58.2000), (2404.7500, 58.2000), (2404.7500, 60.0000), (2295.2500, 60.0000),
    (2295.2500, 58.2000), (2284.7500, 58.2000), (2284.7500, 60.0000), (2175.2500, 60.0000),
    (2175.2500, 58.2000), (2164.7500, 58.2000), (2164.7500, 60.0000), (2055.2500, 60.0000),
    (2055.2500, 58.2000), (2044.7500, 58.2000), (2044.7500, 60.0000), (1935.2500, 60.0000),
    (1935.2500, 58.2000), (1924.7500, 58.2000), (1924.7500, 60.0000), (1815.2500, 60.0000),
    (1815.2500, 58.2000), (1804.7500, 58.2000), (1804.7500, 60.0000), (1761.0000, 60.0000),
    (1761.0000, 57.0000), (1739.0000, 57.0000), (1739.0000, 60.0000), (1695.2500, 60.0000),
    (1695.2500, 58.2000), (1684.7500, 58.2000), (1684.7500, 60.0000), (1575.2500, 60.0000),
    (1575.2500, 58.2000), (1564.7500, 58.2000), (1564.7500, 60.0000), (1455.2500, 60.0000),
    (1455.2500, 58.2000), (1444.7500, 58.2000), (1444.7500, 60.0000), (1335.2500, 60.0000),
    (1335.2500, 58.2000), (1324.7500, 58.2000), (1324.7500, 60.0000), (1215.2500, 60.0000),
    (1215.2500, 58.2000), (1204.7500, 58.2000), (1204.7500, 60.0000), (1095.2500, 60.0000),
    (1095.2500, 58.2000), (1084.7500, 58.2000), (1084.7500, 60.0000), (975.2500, 60.0000),
    (975.2500, 58.2000), (964.7500, 58.2000), (964.7500, 60.0000), (855.2500, 60.0000),
    (855.2500, 58.2000), (844.7500, 58.2000), (844.7500, 60.0000), (735.2500, 60.0000),
    (735.2500, 58.2000), (724.7500, 58.2000), (724.7500, 60.0000), (615.2500, 60.0000),
    (615.2500, 58.2000), (604.7500, 58.2000), (604.7500, 60.0000), (495.2500, 60.0000),
    (495.2500, 58.2000), (484.7500, 58.2000), (484.7500, 60.0000), (375.2500, 60.0000),
    (375.2500, 58.2000), (364.7500, 58.2000), (364.7500, 60.0000), (255.2500, 60.0000),
    (255.2500, 58.2000), (244.7500, 58.2000), (244.7500, 60.0000), (135.2500, 60.0000),
    (135.2500, 58.2000), (124.7500, 58.2000), (124.7500, 60.0000), (57.0000, 60.0000),
    (57.0000, 57.0000), (35.0000, 57.0000), (35.0000, 60.0000), (0.0000, 60.0000),
]
bryla_obrotowa("obudowa", profil_obudowa)

# Zatyczka A (z walcem)
profil_zatyczka_a = [
    (0.0000, 0.0000), (0.0000, 65.0000), (40.0000, 65.0000), (40.0000, 60.0000),
    (10.0000, 60.0000), (10.0000, 1.5000), (463.0000, 1.5000), (463.0000, 0.0000),
]
bryla_obrotowa("zatyczka-a", profil_zatyczka_a)

# Zatyczka B
profil_zatyczka_b = [
    (0.0000, 0.0000), (0.0000, 65.0000), (40.0000, 65.0000), (40.0000, 60.0000),
    (10.0000, 60.0000), (10.0000, 0.0000),
]
bryla_obrotowa("zatyczka-b", profil_zatyczka_b)

# Tłok
profil_tlok = [
    (0.0000, 1.5250), (438.0000, 1.5250), (438.0000, 28.0000), (431.5000, 30.0000),
    (0.0000, 30.0000),
]
bryla_obrotowa("tlok", profil_tlok)

# Pierścień 1
profil_pierscien_1 = [
    (0.0000, 30.0500), (48.0000, 30.0500), (48.0000, 49.9500), (0.0000, 49.9500),
]
bryla_obrotowa("pierscien-1", profil_pierscien_1)

# Pierścień 2
profil_pierscien_2 = [
    (0.0000, 30.0500), (438.0000, 30.0500), (438.0000, 49.9500), (0.0000, 49.9500),
]
bryla_obrotowa("pierscien-2", profil_pierscien_2)

print("Gotowe - " + str(len(DOK.Objects)) + " elementow.")
