优化skill,添加特征树、编辑窗口

This commit is contained in:
2026-08-07 17:44:12 +08:00
parent 35e18ca956
commit 5fbcf2c0b8
70 changed files with 13076 additions and 465 deletions
@@ -26,6 +26,9 @@ SURFACEIR = load_module(
DESIGNIR = load_module(
"designir_pipeline_surface_test", ROOT / "scripts" / "designir_pipeline.py"
)
FEATURE_TREE = load_module(
"feature_tree_surface_test", ROOT / "scripts" / "feature_tree.py"
)
class SurfaceIRPipelineTests(unittest.TestCase):
@@ -128,6 +131,59 @@ class SurfaceIRPipelineTests(unittest.TestCase):
DESIGNIR._symmetric_difference_volume(expected, actual), 1e-8
)
def test_feature_tree_for_uploaded_step_is_inferred_summary(self) -> None:
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
teacher = directory / "teacher.step"
DESIGNIR.export_step(DESIGNIR.Box(10, 20, 30), teacher)
payload = SURFACEIR.extract_surfaceir(teacher)
tree = FEATURE_TREE.generate_feature_tree(
payload,
designir_path="box.designir.json",
step_path="box.reconstructed.step",
parameters_path="parameters.json",
backend="surfaceir_occt",
compiled=True,
validated=True,
)
self.assertEqual(
"inferred_from_step",
tree["source"]["history_kind"],
)
self.assertEqual("solidworks_feature_manager", tree["tree_kind"])
self.assertFalse(
tree["source"]["claims_original_solidworks_history"]
)
imported = next(
node
for node in tree["feature_manager"]["nodes"]
if node["solidworks_type"] == "ImportedFeature"
)
self.assertEqual("导入1", imported["display_name"])
self.assertEqual(
"ImportedFeature",
imported["definition"]["feature_type"],
)
self.assertFalse(imported["definition"]["native_history_recovered"])
self.assertNotIn("manufacturing", imported)
self.assertEqual(1, imported["result"]["solid_count"])
self.assertEqual(
"gzip+base64+json",
imported["operation_spec"]["payload_encoding"],
)
self.assertEqual(
"fallback_imported_feature",
tree["validation"]["feature_recognition"]["status"],
)
replay_designir = FEATURE_TREE.designir_from_feature_tree(tree)
self.assertEqual(payload["surface_layer"], replay_designir["surface_layer"])
replayed = directory / "replayed_from_tree.step"
result = FEATURE_TREE.compile_feature_tree(tree, replayed)
self.assertTrue(replayed.is_file())
self.assertEqual("surfaceir_imported_feature", result["replay_kind"])
serialized = json.dumps(tree)
self.assertNotIn('"surface_layer": {"vertices"', serialized)
def test_empty_step_document_is_represented_honestly(self) -> None:
payload = {
"schema_version": "3.0",