Files
2026-07-22 13:48:46 +08:00

120 lines
3.2 KiB
Python

"""Example 11: standalone std.gear internal ring gears.
This example intentionally avoids planetary assemblies. It exports three
separate ring-gear models so the internal tooth profile can be inspected
without overlapped sun/planet gears or assembly placement noise:
- spur internal ring gear
- helical internal ring gear
- herringbone internal ring gear
Each model is exported as model JSON, STEP, and FCStd.
"""
import json
import sys
from pathlib import Path
import simplecadapi as scad
# Ring gear sketches contain many profile entities and produce deep graphs.
sys.setrecursionlimit(10000)
MODULE = 1.5
RING_TEETH = 66
GEAR_HEIGHT = 8.0
HELIX_ANGLE = 25.0
RIM_THICKNESS = 4.0
BACKLASH = 0.08 * MODULE
OUTPUT_DIR = Path("examples/out/ring_gears")
def _export_ring(name, description, build_ring):
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
model_path = OUTPUT_DIR / f"{name}.model.json"
step_path = OUTPUT_DIR / f"{name}.step"
fcstd_path = OUTPUT_DIR / f"{name}.FCStd"
with scad.GraphSession() as session:
ring = build_ring()
model_json = scad.export_model_json(session)
model_path.write_text(model_json, encoding="utf-8")
scad.export_step(ring, str(step_path))
fcstd_status = str(fcstd_path)
try:
scad.translator.freecad_translator.translate_model_json_to_fcstd(model_json, str(fcstd_path.resolve()))
except Exception as exc:
fcstd_status = f"skipped ({exc.__class__.__name__})"
payload = json.loads(model_json)
print(f"=== {description} ===")
print(f" volume: {ring.get_volume():.1f}")
print(f" graph nodes: {len(payload['graph']['nodes'])}")
print(f" model: {model_path}")
print(f" step: {step_path}")
print(f" fcstd: {fcstd_status}")
print()
def main():
print(
"ring_z={ring_z} module={module} height={height} "
"rim={rim} helix={helix} backlash={backlash}".format(
ring_z=RING_TEETH,
module=MODULE,
height=GEAR_HEIGHT,
rim=RIM_THICKNESS,
helix=HELIX_ANGLE,
backlash=BACKLASH,
)
)
print(f"output_dir={OUTPUT_DIR}")
print()
_export_ring(
"spur_ring_gear",
"Spur internal ring gear",
lambda: scad.std.gear.make_spur_ring_gear_rsolid(
n_teeth=RING_TEETH,
module=MODULE,
gear_height=GEAR_HEIGHT,
rim_thickness=RIM_THICKNESS,
backlash=BACKLASH,
),
)
_export_ring(
"helical_ring_gear",
"Helical internal ring gear",
lambda: scad.std.gear.make_helical_ring_gear_rsolid(
n_teeth=RING_TEETH,
module=MODULE,
helix_angle=HELIX_ANGLE,
gear_height=GEAR_HEIGHT,
rim_thickness=RIM_THICKNESS,
backlash=BACKLASH,
),
)
_export_ring(
"herringbone_ring_gear",
"Herringbone internal ring gear",
lambda: scad.std.gear.make_herringbone_ring_gear_rsolid(
n_teeth=RING_TEETH,
module=MODULE,
helix_angle=HELIX_ANGLE,
gear_height=GEAR_HEIGHT,
rim_thickness=RIM_THICKNESS,
backlash=BACKLASH,
),
)
if __name__ == "__main__":
main()