overview
本文回答:图层用
Engine.createLayer(name, opts)创建、Engine.setCurrentLayer(name)切换、Engine.getLayerByName / getLayers查询;图层有三种独立状态layerOn/isFrozen/isLocked;"0 图层和当前图层不能冻结 / 删除"只有图层面板(LAYER 命令 UI)拦截,API 赋值isFrozen/layers.remove()不设防,需自行跳过'0'与当前层;按图层取实体Engine.getEntities(e => e.layer === name)(无 getEntitiesByLayer)。
一、按子主题挑
| 想做的 | 子主题 |
|---|---|
| 创建图层 / 切换当前图层 | create-switch |
| 显示 / 冻结 / 锁定 | visibility-frozen-locked |
| 列出 / 按图层取实体 | list-query |
| 三态对比 / 业务实战 | layer-states |
二、心智模型
CadDocument
└─ layers
├─ '0' (默认图层;仅 UI 禁止删除/冻结,API 不设防)
├─ '墙体' layerOn=true / isFrozen=false / isLocked=false
├─ '门窗'
└─ ...
每个实体通过 entity.layer = '墙体' 或 entity.layerId = layer.layerId 关联到图层(Layer 的 id 字段名是 layerId,没有 id)。
graph LR
Doc[CadDocument]
Doc --> Layers[Layers 集合]
Layers --> L0["Layer 0 默认"]
Layers --> L1["Layer 墙体"]
Layers --> L2["Layer 门窗"]
L1 --> E1[LineEnt]
L1 --> E2[PolylineEnt]
L2 --> E3[InsertEnt]
MCP 参考:vjcad/doc/layer/layers.md。
三、最快入门
Engine.createLayer('标注层', { color: 1, lineType: 'CONTINUOUS' });
Engine.setCurrentLayer('标注层');
const line = new LineEnt([0, 0], [100, 100]);
line.setDefaults(); // layer 自动 = '标注层'
Engine.addEntities(line);
MCP 参考:vjcad/example/layer/01create.js、vjcad/doc/layer/index.md。
参考(官方文档 MCP)
- 文档:
vjcad/doc/layer/index.md、vjcad/doc/layer/layers.md、vjcad/doc/layer/layer-commands.md - 示例:
vjcad/example/layer/01create.js~08states.js