feat: integrate SimpleCADAPI 2.0.2 CAD workflows

This commit is contained in:
Jerry
2026-08-03 11:17:05 +08:00
parent b5738e9109
commit c3a0f269b7
481 changed files with 110229 additions and 12826 deletions
@@ -6,7 +6,7 @@ import tempfile
import unittest
from pathlib import Path
from build123d import Plane, Rectangle
from build123d import Align, Box, Plane, Rectangle, Sphere, export_step
ROOT = Path(__file__).resolve().parents[1]
@@ -29,6 +29,57 @@ DESIGNIR = load_module(
class SurfaceIRPipelineTests(unittest.TestCase):
def test_closed_single_face_sphere_roundtrip(self) -> None:
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
teacher = directory / "sphere.step"
rebuilt_path = directory / "sphere-rebuilt.step"
expected = Sphere(1)
export_step(expected, teacher)
payload = SURFACEIR.extract_surfaceir(teacher)
shell = payload["surface_layer"]["solids"][0]["shells"][0]
self.assertEqual(1, len(shell["faces"]))
rebuilt = SURFACEIR.build_surfaceir(
payload, "exact_3d_pcurve"
)
SURFACEIR.export_step_shape(rebuilt, rebuilt_path)
actual = DESIGNIR.import_step(rebuilt_path)
self.assertTrue(actual.is_valid)
self.assertEqual(1, len(actual.solids()))
self.assertAlmostEqual(expected.volume, actual.volume, places=9)
def test_multi_shell_solid_preserves_periodic_inner_shell(self) -> None:
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
teacher = directory / "cavity.step"
rebuilt_path = directory / "cavity-rebuilt.step"
expected = Box(
10,
10,
10,
align=(Align.CENTER, Align.CENTER, Align.CENTER),
) - Sphere(1)
export_step(expected, teacher)
payload = SURFACEIR.extract_surfaceir(teacher)
shells = payload["surface_layer"]["solids"][0]["shells"]
self.assertEqual(2, len(shells))
self.assertTrue(any(len(shell["faces"]) == 1 for shell in shells))
rebuilt = SURFACEIR.build_surfaceir(
payload, "exact_3d_pcurve"
)
SURFACEIR.export_step_shape(rebuilt, rebuilt_path)
actual = DESIGNIR.import_step(rebuilt_path)
self.assertTrue(actual.is_valid)
self.assertEqual(1, len(actual.solids()))
self.assertEqual(2, len(actual.solids()[0].shells()))
self.assertLess(
abs(expected.volume - actual.volume) / expected.volume, 1e-10
)
def test_independent_json_roundtrip_preserves_exact_geometry(self) -> None:
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
@@ -42,12 +93,27 @@ class SurfaceIRPipelineTests(unittest.TestCase):
teacher.unlink()
serialized = portable_json.read_text(encoding="utf-8").lower()
stored = json.loads(serialized)
self.assertEqual(
"gzip+base64+json",
stored["surface_layer"]["encoding"],
)
self.assertEqual(
"surfaceir-3.0",
stored["surface_layer"]["format"],
)
self.assertNotIn("teacher.step", serialized)
self.assertNotIn("source_path", serialized)
self.assertNotIn("import_step", serialized)
self.assertNotIn('"mesh"', serialized)
rebuilt_shape = SURFACEIR.build_surfaceir(surfaceir)
decoded = SURFACEIR.read_designir(portable_json)
self.assertEqual(surfaceir["surface_layer"], decoded["surface_layer"])
self.assertIn(
"overall_scale",
decoded["edit_interface"]["semantic_parameters"],
)
rebuilt_shape = SURFACEIR.build_surfaceir(decoded)
SURFACEIR.export_step_shape(rebuilt_shape, rebuilt)
self.assertTrue(rebuilt.is_file())