用途 该技能使用 model_edit 中的 SATK 布局引擎,对 Simulink 框图进行重新排列与整理,目标是在满足请求的前提下尽量少移动用户已有的图。它适合处理“修复/清理/整理/拉直/重排布局”“让它更易读”这类请求,也适用于方块重叠、连线交叉或穿过方块、少数方块位置异常,以及“移动这些方块”“把它们对齐”“理顺刚添加的方块”等场景。
主要能力 支持两种布局方式。选择性布局(默认):通过 {"op":"layout","targets":[...]} 配合 layout_mode "incremental",只移动指定目标方块,并重连与目标相连的线;其他方块保持不动,但目标下游的方块可能为腾出空间而移动。完全布局:使用 operations [] 配合 layout_mode "full",对指定作用域整体重排,targets 会被忽略;建议选择包含混乱区域的最小子系统而非 root,并且仅在用户同意全部移动时使用。此外还可以在同一调用中把布局操作与编辑操作组合,用 #ref 引用该调用新增的方块;当连线缠绕时,可将目标的直接相邻方块一并加入 targets。若用户明确要求精确位置,可通过 configure 设置 Position。
使用方式 通过 model_edit 调用布局操作,例如选择性布局为 model_edit(model, "root", '[{"op":"layout","targets":["blk_5","blk_7"]}]', "incremental"),完全布局为 model_edit(model, "blk_12", "[]", "full")。目标必须直接位于作用域内,每个作用域调用一次。确定目标时,可用 model_read(depth "0")或 model_overview 查找 blk_X ID;若用户以“这些方块”指代,可让其在编辑器中选中后读取选择,但选择可能过期,需回读方块名称并向用户确认。重叠情况可用 model_query_params 比较 Position 值或在编辑器中查看。布局完成后应读取响应中的 layout 字段,applied: false 会附带原因,需如实报告而非盲目重试;随后运行 model_check(model, scope, '["unconnected_lines"]') 确认连线未损坏,并告知用户哪些方块移动、哪些下游方块发生位移。若需将方块组合成子系统或就地展开子系统,应参考 subsystem-restructuring.md,而不是用 model_edit 逐块重建。
适用场景与限制 适用于整理 Simulink 框图的布局,但不适用于添加、连接、删除或配置方块,这类操作应使用 building-simulink-models。布局会在每次 model_edit 调用后自动运行。Stateflow 图表布局不受支持,图表作用域仅接受整体重排(operations []、layout_mode "full"),会移动所有元素,需先询问。该技能驱动自动布局引擎,不提供逐像素手动放置,如用户期望手工调优应予以说明。撤销(Ctrl+Z)对智能体编辑不可靠,包括布局操作,因此不要承诺撤销;在会移动大量方块的布局前,建议用户先保存模型或副本。首次布局在 MATLAB 会话中可能需约 20 秒启动引擎,后续调用约 1–2 秒。还应避免逐块使用 set_param 设置 Position 来“修复”布局、在用户未要求时调用 Simulink.BlockDiagram.arrangeSystem、未经询问对已有手工布局做完全重排、逐块复制到子系统(会丢失连线与布局,应使用 Simulink.BlockDiagram.createSubsystem),以及承诺 Ctrl+Z 能恢复原布局。