transparency-visibility
本文回答:透明度走
entity.transpMgr.setTp100(0~90)(0 不透明;>90 一律钳为 90,没有全透明,要完全看不见用visible=false),随层用entity.transpMgr.setValue(-1);可见性用entity.visible = false / true,对应 DXF 60,修改后必须Engine.regen()。
一、透明度
const c = new CircleEnt([30, 50], 25);
c.setDefaults();
c.color = 1;
c.transpMgr.setTp100(50); // 50% 透明
Engine.addEntities(c);
// 随层透明度
c.transpMgr.setValue(-1);
MCP 参考:vjcad/example/property/05transparency.js。
| 值 | 含义 |
|---|---|
setTp100(0) |
不透明 |
setTp100(50) |
半透明 |
setTp100(90) |
最大透明度(setTp100(100) 也被钳为 90,仍看得见) |
setValue(-1) |
ByLayer(随层) |
二、可见性(实体级)
const line = new LineEnt([0, 0], [100, 0]);
line.setDefaults();
line.color = 5;
line.visible = false; // 隐藏
Engine.addEntities(line);
Engine.regen(); // ★ 必须重绘
// 切换
line.visible = true;
Engine.regen();
MCP 参考:vjcad/example/property/08visibility.js。
特点(DXF Group Code 60):
- 不渲染、不可框选/点选、不提供捕捉点
Ctrl + A全选可以选中- 数据序列化时保留(DWG 导出 / 重新打开仍然 invisible)
三、实体可见性 vs 图层可见性
| 概念 | 控制范围 | 属性 |
|---|---|---|
| 实体可见性 | 单个实体 | entity.visible |
| 图层可见性 | 整个图层 | layer.layerOn |
| 图层冻结 | 整个图层 + 重生成性能 | layer.isFrozen |
| 图层锁定 | 整个图层(可见但不可选) | layer.isLocked |
参见 layer/visibility-frozen-locked。
反例
entity.transpMgr.setTp100(0.5)把 0100 当 01:实际是 百分比,有效范围 0~90(>90 钳为 90);想"全透明隐藏"用visible = false。entity.visible = false后没Engine.regen():屏幕仍能看到。- 用
entity.visible做"批量隐藏":图层级layer.layerOn = false性能更好;冻结isFrozen = true更省。
参考(官方文档 MCP)
- 文档:
vjcad/doc/property/index.md - 示例:
vjcad/example/property/05transparency.js、vjcad/example/property/08visibility.js