feat: 完善 SCDM-first 参数化编辑交付版
This commit is contained in:
@@ -295,6 +295,53 @@ def _verify_slot_summary(root: Path) -> None:
|
||||
_assert(int(info.get("recognition_user_priority", 99)) == 30, f"slot should use slot priority: {info}")
|
||||
|
||||
|
||||
def _verify_split_cylinder_slot_and_hole_guard() -> None:
|
||||
geom_path = PROJECT_ROOT / "assets" / "models" / "geom_extract.step"
|
||||
if geom_path.exists():
|
||||
geom_model = StepModel.load(geom_path)
|
||||
for slot_face_id in (1360, 1722):
|
||||
slot_info = geom_model.feature_info(slot_face_id)
|
||||
_assert(
|
||||
"槽" in str(slot_info.get("feature_type") or "")
|
||||
and "圆柱孔候选" not in str(slot_info.get("feature_type") or ""),
|
||||
f"geom_extract Face{slot_face_id} should be treated as a slot/groove, not a cylindrical hole: {slot_info}",
|
||||
)
|
||||
_assert(
|
||||
slot_info.get("slot_status") in {"candidate", "blocked"},
|
||||
f"geom_extract Face{slot_face_id} should keep slot classification fields: {slot_info}",
|
||||
)
|
||||
_assert(
|
||||
"封堵圆柱孔" not in str(slot_info.get("feature_edit_actions") or ""),
|
||||
f"geom_extract Face{slot_face_id} should not expose cylindrical-hole suppress wording: {slot_info}",
|
||||
)
|
||||
_assert(
|
||||
int(slot_info.get("recognition_user_priority", 99)) == 30,
|
||||
f"geom_extract Face{slot_face_id} should use slot priority: {slot_info}",
|
||||
)
|
||||
through_hole_info = geom_model.feature_info(1591)
|
||||
_assert(
|
||||
through_hole_info.get("feature_type") == "圆柱孔候选",
|
||||
f"geom_extract Face1591 should remain a cylindrical hole guard case: {through_hole_info}",
|
||||
)
|
||||
_assert(
|
||||
int(through_hole_info.get("recognition_user_priority", 99)) == 20,
|
||||
f"geom_extract Face1591 should keep hole priority: {through_hole_info}",
|
||||
)
|
||||
|
||||
icepak_path = PROJECT_ROOT / "assets" / "models" / "ICEPAK-NATURAL.stp"
|
||||
if icepak_path.exists():
|
||||
icepak_model = StepModel.load(icepak_path)
|
||||
hole_info = icepak_model.feature_info(87)
|
||||
_assert(
|
||||
hole_info.get("feature_type") == "圆柱孔候选",
|
||||
f"ICEPAK Face87 is a split through-hole and should remain a hole: {hole_info}",
|
||||
)
|
||||
_assert(
|
||||
int(hole_info.get("recognition_user_priority", 99)) == 20,
|
||||
f"ICEPAK Face87 should keep hole priority: {hole_info}",
|
||||
)
|
||||
|
||||
|
||||
def _verify_boss_summary(root: Path) -> None:
|
||||
path = root / "boss.step"
|
||||
_write_boss_model(path)
|
||||
@@ -574,6 +621,7 @@ def main() -> int:
|
||||
_verify_quick_cylinder_recognition(root)
|
||||
_verify_hole_summary(root)
|
||||
_verify_slot_summary(root)
|
||||
_verify_split_cylinder_slot_and_hole_guard()
|
||||
_verify_boss_summary(root)
|
||||
_verify_asitus_slot_boss_fillet_hints(root)
|
||||
_verify_torus_summary(root)
|
||||
|
||||
Reference in New Issue
Block a user