修改了一些之前增加功能的bug
This commit is contained in:
@@ -21,7 +21,7 @@ _SKETCH_ATOM_PREFIXES = ("extrude_", "revolve_")
|
||||
_PRIMARY_ATOMICS = frozenset({
|
||||
"extrude_add_blind", "extrude_add_two_sided", "extrude_cut_blind",
|
||||
"revolve_add", "revolve_cut", "hole_blind", "hole_countersink",
|
||||
"hole_counterbore", "sphere_add",
|
||||
"hole_counterbore", "sphere_add", "box_add", "cylinder_add",
|
||||
})
|
||||
_HOLE_ATOMICS = frozenset({"hole_blind", "hole_countersink", "hole_counterbore", "hole_wizard"})
|
||||
_ACTIVE_BODY_REQUIRED = frozenset({
|
||||
@@ -32,8 +32,8 @@ _ACTIVE_BODY_REQUIRED = frozenset({
|
||||
})
|
||||
_BODY_MUTATING_ATOMICS = frozenset({
|
||||
"extrude_add_blind", "extrude_add_two_sided", "extrude_cut_blind",
|
||||
"revolve_add", "revolve_cut", "sphere_add", "thread_add", "thread_cut",
|
||||
*_HOLE_ATOMICS, "fillet", "chamfer",
|
||||
"revolve_add", "revolve_cut", "sphere_add", "box_add", "cylinder_add",
|
||||
"thread_add", "thread_cut", *_HOLE_ATOMICS, "fillet", "chamfer",
|
||||
})
|
||||
# A pattern may replay a previous pattern as well as a direct body mutation.
|
||||
# Context-only features have no geometry definition to instance. thread_add
|
||||
@@ -42,7 +42,7 @@ _BODY_MUTATING_ATOMICS = frozenset({
|
||||
# location.
|
||||
_REPLAYABLE_ATOMICS = (
|
||||
_BODY_MUTATING_ATOMICS - frozenset({"thread_add", "thread_cut"})
|
||||
) | frozenset({"pattern_linear", "pattern_mirror"})
|
||||
) | frozenset({"pattern_linear", "pattern_mirror", "pattern_circular"})
|
||||
_SUPPORTED_EXTENTS = frozenset({
|
||||
"blind", "mid_plane", "through_all", "through_all_both", "through_all_and_blind",
|
||||
"up_to_surface", "up_to_vertex", "offset_from_surface", "through_next", "up_to_body",
|
||||
@@ -428,6 +428,18 @@ class CapabilityAnalyzer:
|
||||
))
|
||||
if node.atomic_id == "pattern_mirror" and not params.get("mirror_plane"):
|
||||
blockers.append(self._blocker(node.feature_id, "missing_mirror_plane", "Mirror pattern has no mirror plane"))
|
||||
if node.atomic_id == "pattern_circular":
|
||||
if not _has_explicit_axis(params.get("axis")):
|
||||
blockers.append(self._blocker(
|
||||
node.feature_id, "missing_circular_axis",
|
||||
"Circular pattern requires an explicit axis with origin_mm and direction",
|
||||
))
|
||||
pattern_count = params.get("pattern_count")
|
||||
if pattern_count is None or int(pattern_count) < 1:
|
||||
blockers.append(self._blocker(
|
||||
node.feature_id, "invalid_pattern_count",
|
||||
"Circular pattern requires pattern_count >= 1",
|
||||
))
|
||||
status = "executable" if not blockers else ("unsupported" if any(b.code.startswith("unsupported") or b.code == "unknown_atomic" for b in blockers) else "blocked")
|
||||
results.append(CapabilityResult(node.feature_id, node.atomic_id, status, tuple(required), tuple(blockers)))
|
||||
if status == "executable":
|
||||
@@ -436,7 +448,8 @@ class CapabilityAnalyzer:
|
||||
body_available = True
|
||||
body_producers = {
|
||||
"extrude_add_blind", "extrude_add_two_sided", "extrude_cut_blind",
|
||||
"revolve_add", "revolve_cut", "sphere_add", "thread_add",
|
||||
"revolve_add", "revolve_cut", "sphere_add", "box_add", "cylinder_add",
|
||||
"thread_add",
|
||||
# thread_cut 与 extrude_cut_blind/revolve_cut 一致:无宿主时由
|
||||
# active_body 前置阻止,文档含该类特征即视为携带可执行几何。
|
||||
"thread_cut",
|
||||
|
||||
Reference in New Issue
Block a user