fix(engine): 支持显式坐标选择器的阵列变换

This commit is contained in:
2026-08-26 15:14:29 +08:00
parent 8863908430
commit dea818e07d
+12 -5
View File
@@ -68,12 +68,19 @@ def _has_explicit_host_frame(params: dict[str, Any]) -> bool:
def pattern_transform_blocker(source: FeaturePlanNode) -> str | None:
"""Return the selector dependency that cannot be transformed exactly.
An explicit host frame is coordinate data, not a topology guess. It can
be transformed with a patterned instance while preserving local hole
positions. All topology selectors and selector-dependent extents remain
blocked until their geometry transform contract is implemented.
Selectors fully captured by explicit coordinate data (a revolve axis with
origin/direction, or a host face with a complete world frame) are
transformed together with each patterned instance and are not blockers.
Any remaining topology selector and selector-dependent extent stays
blocked until its geometry transform contract is implemented.
"""
if source.selectors:
for selector in source.selectors or ():
if selector.get("kind") == "axis" and _has_explicit_axis(source.params.get("axis")):
# The axis is coordinate data; _translated_node shifts its origin.
continue
if selector.get("kind") == "face" and _has_explicit_host_frame(source.params):
# The host face carries a complete world frame; positions stay local.
continue
return "feature selector"
host = source.params.get("host_face")
if host is not None and not _has_explicit_host_frame(source.params):