feat: 完善 STEP 编辑器最小系统和稳定性

This commit is contained in:
2026-07-28 14:05:14 +08:00
parent 26216064e0
commit 7c263d1e96
19 changed files with 3173 additions and 931 deletions
+24 -24
View File
@@ -191,12 +191,12 @@ def _shape_quality_info(label: str, shape: TopoDS_Shape, expect_solid: bool) ->
if not brep_valid:
warnings.append("B-Rep 校验未通过,导出后其他 CAD 软件可能无法正常识别。")
if faces == 0:
warnings.append("没有检测到 face,导出结果可能不可用。")
warnings.append("没有检测到Face,导出结果可能不可用。")
if expect_solid and solids == 0:
warnings.append("没有检测到 solid,导出后可能不是实体。")
warnings.append("没有检测到Solid,导出后可能不是实体。")
elif expect_solid and solids > 1:
warnings.append(
f"检测到 {solids} solid。"
f"检测到 {solids}Solid。"
"如果这不是有意的多实体零件,导出后可能看起来像多个体叠在一起或彼此分离。"
)
@@ -782,7 +782,7 @@ def _cylinder_resize_readiness(
if guess != "hole/groove candidate":
status = "blocked"
risk = "blocked"
blockers.append("缩小孔径第一版只支持孔/槽候选,不支持圆角、凸柱或未明确圆柱面。")
blockers.append("缩小孔径当前版本只支持孔/槽候选,不支持圆角、凸柱或未明确圆柱面。")
else:
risk = _max_risk(risk, "high")
warnings.append("缩小孔径会先补料再重切,属于高风险实验功能。")
@@ -817,9 +817,9 @@ def _cylinder_boss_resize_readiness(
height_estimate = float(info.get("height_estimate", 0.0))
if guess != "boss/outer-round candidate":
blockers.append("凸台直径调整第一版只支持明确的凸台/外圆柱候选。")
blockers.append("凸台直径调整当前版本只支持明确的凸台/外圆柱候选。")
if angular_span < math.tau * 0.92:
blockers.append("凸台直径调整第一版只支持接近完整圆柱的凸台,不处理局部外圆角或圆角面。")
blockers.append("凸台直径调整当前版本只支持接近完整圆柱的凸台,不处理局部外圆角或圆角面。")
if current_diameter <= 1e-9:
blockers.append("当前圆柱面的直径估算无效。")
@@ -885,9 +885,9 @@ def _cylinder_depth_readiness(
manual_bottom_face_used = bool(info.get("manual_bottom_face_used"))
if guess != "hole/groove candidate":
blockers.append("孔深调整第一版只支持孔/槽候选,不支持圆角、凸柱或未明确圆柱面。")
blockers.append("孔深调整当前版本只支持孔/槽候选,不支持圆角、凸柱或未明确圆柱面。")
if end_type != "blind" and not manual_bottom_face_used:
blockers.append("孔深调整第一版只支持端部类型为 blind 的盲孔/盲槽。")
blockers.append("孔深调整当前版本只支持端部类型为 blind 的盲孔/盲槽。")
elif end_type != "blind" and manual_bottom_face_used:
risk = _max_risk(risk, "medium")
warnings.append("端部类型不是明确 blind,当前按手动底面 Face ID 推断孔深方向。")
@@ -951,9 +951,9 @@ def _cylinder_suppress_readiness(info: dict[str, object]) -> dict[str, object]:
diameter = float(info.get("diameter", 0.0))
if guess != "hole/groove candidate":
blockers.append("封堵圆柱孔第一版只支持孔候选,不支持圆角、凸柱或未明确圆柱面。")
blockers.append("封堵圆柱孔当前版本只支持孔候选,不支持圆角、凸柱或未明确圆柱面。")
if angular_span < math.tau * 0.92:
blockers.append("封堵圆柱孔第一版只支持接近完整圆柱的孔,不支持半孔/槽。")
blockers.append("封堵圆柱孔当前版本只支持接近完整圆柱的孔,不支持半孔/槽。")
if end_type == "closed/internal":
blockers.append("当前圆柱两端都像在材料内部,不像可封堵的外部孔。")
if height <= 1e-9 or diameter <= 1e-9:
@@ -998,14 +998,14 @@ def _edge_fillet_readiness(
adjacent_count = int(info.get("adjacent_face_count", 0))
if curve != "line":
blockers.append("添加圆角第一版只支持直线 edge。")
blockers.append("添加圆角当前版本只支持直线Edge。")
if length <= 1e-9:
blockers.append("当前 edge 长度无效。")
blockers.append("当前Edge长度无效。")
if adjacent_count < 2:
blockers.append("当前 edge 没有检测到至少两个相邻 face,不能可靠添加圆角。")
blockers.append("当前 Edge 没有检测到至少两个相邻 Face,不能可靠添加圆角。")
elif adjacent_count > 2:
risk = _max_risk(risk, "medium")
warnings.append(f"当前 edge 相邻 face 数为 {adjacent_count},可能是复杂交汇边。")
warnings.append(f"当前 Edge 相邻 Face 数为 {adjacent_count},可能是复杂交汇边。")
if radius is not None:
if radius <= 0:
@@ -1013,13 +1013,13 @@ def _edge_fillet_readiness(
elif length > 1e-9:
ratio = radius / length
if ratio >= 0.45:
blockers.append("圆角半径接近或超过 edge 长度的一半,第一版直接阻止。")
blockers.append("圆角半径接近或超过Edge长度的一半,当前版本会直接阻止。")
elif ratio > 0.25:
risk = _max_risk(risk, "high")
warnings.append("圆角半径超过 edge 长度的 25%,很容易导致倒圆失败。")
warnings.append("圆角半径超过Edge长度的 25%,很容易导致倒圆失败。")
elif ratio > 0.12:
risk = _max_risk(risk, "medium")
warnings.append("圆角半径相对 edge 长度偏大,请确认预览范围。")
warnings.append("圆角半径相对Edge长度偏大,请确认预览范围。")
if blockers:
status = "blocked"
@@ -1053,14 +1053,14 @@ def _edge_chamfer_readiness(
adjacent_count = int(info.get("adjacent_face_count", 0))
if curve != "line":
blockers.append("添加倒角第一版只支持直线 edge。")
blockers.append("添加倒角当前版本只支持直线Edge。")
if length <= 1e-9:
blockers.append("当前 edge 长度无效。")
blockers.append("当前Edge长度无效。")
if adjacent_count < 2:
blockers.append("当前 edge 没有检测到至少两个相邻 face,不能可靠添加倒角。")
blockers.append("当前 Edge 没有检测到至少两个相邻 Face,不能可靠添加倒角。")
elif adjacent_count > 2:
risk = _max_risk(risk, "medium")
warnings.append(f"当前 edge 相邻 face 数为 {adjacent_count},可能是复杂交汇边。")
warnings.append(f"当前 Edge 相邻 Face 数为 {adjacent_count},可能是复杂交汇边。")
if distance is not None:
if distance <= 0:
@@ -1068,13 +1068,13 @@ def _edge_chamfer_readiness(
elif length > 1e-9:
ratio = distance / length
if ratio >= 0.45:
blockers.append("倒角距离接近或超过 edge 长度的一半,第一版直接阻止。")
blockers.append("倒角距离接近或超过Edge长度的一半,当前版本会直接阻止。")
elif ratio > 0.25:
risk = _max_risk(risk, "high")
warnings.append("倒角距离超过 edge 长度的 25%,很容易导致倒角失败。")
warnings.append("倒角距离超过Edge长度的 25%,很容易导致倒角失败。")
elif ratio > 0.12:
risk = _max_risk(risk, "medium")
warnings.append("倒角距离相对 edge 长度偏大,请确认预览范围。")
warnings.append("倒角距离相对Edge长度偏大,请确认预览范围。")
if blockers:
status = "blocked"