draw-order
本文回答:显示顺序两条路:① 命令
ENTDRAWFRONT / ENTDRAWBACK / LAYDRAWFRONT / LAYDRAWBACK;② 直接操作Engine.currentSpace.items(数组末尾 = 最前),改完Engine.pcanvas.regen(true)。
一、命令版
| 命令 | 含义 |
|---|---|
ENTDRAWFRONT |
选中图形置于最前 |
ENTDRAWBACK |
选中图形置于最后 |
LAYDRAWFRONT |
选中图形所在图层整体置于最前 |
LAYDRAWBACK |
选中图形所在图层整体置于最后 |
Engine.editor.executerWithOp('ENTDRAWFRONT');
Engine.editor.executerWithOp('ENTDRAWBACK');
Engine.editor.executerWithOp('LAYDRAWFRONT');
Engine.editor.executerWithOp('LAYDRAWBACK');
二、API 版(直接改 items 顺序)
const items = Engine.currentSpace.items;
function moveToFront(entity) {
const idx = items.indexOf(entity);
if (idx > -1) {
items.splice(idx, 1);
items.push(entity);
Engine.pcanvas.regen(true);
}
}
function moveToBack(entity) {
const idx = items.indexOf(entity);
if (idx > -1) {
items.splice(idx, 1);
items.unshift(entity);
Engine.pcanvas.regen(true);
}
}
MCP 参考:vjcad/example/edit/07draworder.js。
数组顺序:末尾 = 最前;开头 = 最后。
反例
- 直接改
items后没regen(true):画布顺序没刷新。 - 误把
Engine.currentSpace.aliveItems(已过滤已删除)替代items:splice不影响真实数组。 - 频繁地把 N 个实体逐个
moveToFront:每次都regen卡顿,应一次性splice完再regen。
参考(官方文档 MCP)
- 文档:
vjcad/doc/edit/index.md - 示例:
vjcad/example/edit/07draworder.js