> **本文回答**：`entity.setDefaults()` 把 `Engine.CECOLOR / CELTYPE / CELTSCALE` 与 `Engine.currentDoc.CLAYER`（系统当前默认绘图属性）应用到实体，同时把透明度重置为 ByLayer（`transpMgr.setValue(-1)`）；**不设线宽**（`lineWeight` 保持原值，构造默认 -1=ByLayer）。**调用顺序**：先 `new XxxEnt(...)` → `setDefaults()` → 再写自定义颜色 / 图层 / 线型，最后 `Engine.addEntities(...)`。

## 一、最小用法

```js
Engine.CECOLOR   = 1;          // 当前颜色
Engine.CELTYPE   = 'HIDDEN';   // 当前线型
Engine.CELTSCALE = 1.5;        // 当前线型比例

const line1 = new LineEnt([0, 0], [100, 0]);
line1.setDefaults();           // 应用默认值（color=1, lineType='HIDDEN'）
Engine.addEntities(line1);

console.log(line1.color, line1.lineType, line1.lineTypeScale);
// 1 HIDDEN 1.5

// 修改默认后再创建
Engine.CECOLOR = 3;
Engine.CELTYPE = 'CENTER';

const line2 = new LineEnt([0, 30], [100, 30]);
line2.setDefaults();
Engine.addEntities(line2);

console.log(line2.color, line2.lineType);   // 3 'CENTER'
```

MCP 参考：`vjcad/example/property/06setdefaults.js`。

## 二、不调用 `setDefaults()`

```js
const line3 = new LineEnt([0, 60], [100, 60]);
// 没 setDefaults()
Engine.addEntities(line3);

console.log(line3.color, line3.lineType, line3.lineTypeScale, line3.lineWeight, line3.layer);
// 256 'ByLayer' 1 -1 '0' —— EntityBase 构造默认（全部随层、图层 '0'），不会反映 Engine.CE* / CLAYER 的当前值
```

MCP 参考：`vjcad/example/property/06setdefaults.js`。

> 不 `setDefaults` 的实体一般"按图层显示"。如果业务希望"用户用 Ribbon 改了颜色，再画的图就是新颜色"，**必须 `setDefaults`**。

## 三、自定义属性的正确顺序

```js
const c = new CircleEnt([0, 0], 30);
c.setDefaults();          // ① 先吸纳系统默认
c.color = 5;              // ② 再覆盖（不会被默认值再覆盖）
c.layer = '辅助';          // 图层须已存在（Engine.createLayer），否则静默落到 '0'
c.lineType = 'CONTINUOUS';
Engine.addEntities(c);
```

MCP 参考：`vjcad/example/property/01color.js`（注释显式说"必须先 `setDefaults()`，再设置颜色，否则颜色会被默认值覆盖"）。

## 四、`Engine` 系统变量速查

| 变量 | 含义 |
|---|---|
| `Engine.CECOLOR` | 当前绘图颜色（ACI / RGB） |
| `Engine.CELTYPE` | 当前线型 |
| `Engine.CELTSCALE` | 当前线型比例 |
| `Engine.currentDoc.CLAYER` | 当前图层名（字符串）。⚠️ `Engine.CLAYER` 不存在 |
| `Engine.OSMODE` | 对象捕捉模式 |
| `Engine.ORTHOMODE` | 正交模式（0/1） |
| `Engine.GRIDMODE` | 栅格 |
| `Engine.OFFSETDIST` | 偏移距离 |

详见 [core/engine](../core/engine.md)。

## 反例

- 顺序写反：`new Xxx → color = 1 → setDefaults()` —— `setDefaults` 把颜色又改回 `CECOLOR`。
- 在不同子线程 / 异步 callback 里穿插改 `Engine.CECOLOR` 又 new 实体：默认值串味，导致颜色错乱。
- 完全不 `setDefaults`：图层切换后的实体没法继承图层属性。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/property/index.md`、`vjcad/doc/command/api-reference.md`
- 示例：`vjcad/example/property/06setdefaults.js`、`vjcad/example/property/01color.js`
