唯杰地图 logo唯杰地图
VJMAP
EN

draw-order

vjcad/references/edit/draw-order.md 1.7 KB57 行
原文

本文回答:显示顺序两条路:① 命令 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