Files
cadSet/SimpleCADAPI/test/test_stdlib_chain.py
T

107 lines
3.5 KiB
Python

"""Tests for roller-chain standard parts."""
import json
import math
import unittest
import simplecadapi as scad
class TestRollerChainSprocket(unittest.TestCase):
def test_iso_606_12b_candidate_geometry(self):
sprocket = scad.std.chain.make_roller_chain_sprocket_rsolid(
n_teeth=18,
chain_pitch=19.05,
roller_diameter=12.07,
sprocket_thickness=11.1,
bore_radius=10.2,
)
self.assertGreater(sprocket.get_volume(), 0.0)
meta = sprocket.get_metadata("std.chain.roller_sprocket")
self.assertEqual(meta["n_teeth"], 18)
self.assertAlmostEqual(
meta["pitch_radius"],
19.05 / (2.0 * math.sin(math.pi / 18)),
)
self.assertLess(meta["root_radius"], meta["pitch_radius"])
self.assertGreater(meta["outside_radius"], meta["pitch_radius"])
print(
"roller_chain_sprocket: "
f"volume={sprocket.get_volume():.3f} "
f"pitch_radius={meta['pitch_radius']:.6f}"
)
def test_roller_seats_are_recorded_as_strict_cuts(self):
with scad.GraphSession() as session:
sprocket = scad.std.chain.make_roller_chain_sprocket_rsolid(
n_teeth=18,
chain_pitch=19.05,
roller_diameter=12.07,
sprocket_thickness=11.1,
bore_radius=10.2,
)
model_json = scad.export_model_json(session=session)
payload = json.loads(model_json)
cut_nodes = [
node
for node in payload["graph"]["nodes"]
if node["op"] == "make_cut_rsolid"
]
self.assertEqual(len(cut_nodes), 1)
self.assertEqual(cut_nodes[0]["params"]["tool_count"], 19)
self.assertFalse(cut_nodes[0]["params"]["skip_non_intersecting"])
self.assertEqual(cut_nodes[0]["params"]["tracking_policy"], "graph")
self.assertTrue(
all("topo_delta" not in node for node in payload["graph"]["nodes"])
)
replayed = scad.replay_model_json(json_str=model_json, strict=True)
self.assertEqual(len(replayed), 1)
self.assertAlmostEqual(
replayed[0].get_volume(), sprocket.get_volume(), places=5
)
def test_invalid_sprocket_parameters(self):
invalid_kwargs = (
{
"n_teeth": 5,
"chain_pitch": 19.05,
"roller_diameter": 12.07,
"sprocket_thickness": 11.1,
},
{
"n_teeth": 18,
"chain_pitch": 0.0,
"roller_diameter": 12.07,
"sprocket_thickness": 11.1,
},
{
"n_teeth": 18,
"chain_pitch": 19.05,
"roller_diameter": 19.05,
"sprocket_thickness": 11.1,
},
{
"n_teeth": 18,
"chain_pitch": 19.05,
"roller_diameter": 12.07,
"sprocket_thickness": 0.0,
},
{
"n_teeth": 18,
"chain_pitch": 19.05,
"roller_diameter": 12.07,
"sprocket_thickness": 11.1,
"bore_radius": 60.0,
},
)
for kwargs in invalid_kwargs:
with self.subTest(kwargs=kwargs), self.assertRaises(ValueError):
scad.std.chain.make_roller_chain_sprocket_rsolid(**kwargs)
if __name__ == "__main__":
unittest.main()