> **本文回答**：vjcad 实体的统一三段式是 `new XxxEnt(...)` → `setDefaults()` → `Engine.addEntities([...])`；所有实体继承 `EntityBase`，运行时都有 `id / type / color / layer / lineType / lineTypeScale` 等通用属性，以及 `setDefaults / clone / move / rotate / scale / mirror / boundingBox / toDb / fromDb` 通用方法。⚠️ **TS 类型坑**：`EntityBase` 基类的 d.ts 声明了 `setDefaults/clone/move/mirror/setModified`，但 **`boundingBox/rotate/scale/toDb/fromDb` 只在子类上声明**（基类没有），按 `EntityBase` 类型持有时需断言或改用 `Engine.getBoundsByEntities(ents)`。

## 一、按子主题挑

| 想做的 | 子主题 |
|---|---|
| 一次性看所有实体类型（综合大表） | [create-entities](create-entities.md) |
| 实体类型清单（type 字符串与类名对照） | [common-entities](common-entities.md) |
| Line / Arc / Circle / Ray / XLine | [line-arc-circle](line-arc-circle.md) |
| Polyline / Donut / Polygon / RoundedRect / DLine | [polyline](polyline.md) |
| Text / MText / TextStyle / 字体 | [text-mtext](text-mtext.md) |
| Block 定义 / 插入 / 炸开 / 计数 / 替换 / 属性 | [block-insert](block-insert.md) |
| Hatch / Solid | [hatch-solid](hatch-solid.md) |
| Spline / Ellipse / 椭圆弧 / 拟合点样条 | [spline-ellipse](spline-ellipse.md) |
| 标注（Linear/Aligned/Radial/Diametric/Angle/Arc/Ordinate）+ MLeader | [dimension-mleader](dimension-mleader.md) |
| 图像（ImageRefEnt / ImageSource） | [image](image.md) |
| 自定义实体（CustomEntityBase） | [custom-entity](custom-entity.md) |

## 二、`EntityBase` 通用属性 / 方法

> 引自 `vjcad/doc/guide/architecture.md`：

```ts
class EntityBase {
  type: string;
  id: number;          // d.ts id 是 number，objectId 才是 string
  objectId: string;
  color: number;
  layer: string;
  layerId: string;
  lineType: string;
  lineTypeScale: number;

  setDefaults(): void;
  setModified(): void;
  clone(): EntityBase;

  move(from: Point2D, to: Point2D): void;
  mirror(pt1: Point2D, pt2: Point2D): void;

  // ↓ 以下不在 EntityBase 基类声明，只在各子类上重复声明（运行时全实体可用，TS 按基类持有时需断言）
  rotate(center: Point2D, angle: number): void;
  scale(center: Point2D, factor: number): void;
  boundingBox(): BoundingBox;
  toDb(): any;
  fromDb(data): void;
}
```

MCP 参考：`vjcad/doc/guide/architecture.md`、`vjcad/doc/command/api-reference.md`。

## 三、三段式（推荐）

```js
const c = new CircleEnt([50, 50], 30);
c.setDefaults();      // 套用当前图层 / 颜色 / 线型 / 比例
c.color = 1;          // 设置颜色，setter 会自动 setModified
Engine.addEntities(c);
```

MCP 参考：`vjcad/doc/guide/quick-start.md`、`vjcad/example/entity/all/01entities.js`。

`Engine.addEntities` vs `Engine.pcanvas.addEntity`：

| API | 自动 undo | 自动 regen | 推荐 |
|---|---|---|---|
| `Engine.addEntities(entOrArray)` | ✓ | ✓ | ✓ |
| `Engine.pcanvas.addEntity(ent)` | ✗（需 `Engine.undoManager.added_undoMark([ent])`） | 取决于上下文 | 仅特殊场景 |

MCP 参考：`vjcad/doc/command/api-reference.md`、`vjcad/doc/guide/quick-start.md`。

## 四、坐标参数支持简化写法

很多 API 同时支持 `Point2D` 与 `[x, y]`：

```js
new LineEnt([0, 0], [100, 100]);
new LineEnt(new Point2D(0, 0), new Point2D(100, 100));

new BulgePoint([x, y], bulge);
new BulgePoint(new Point2D(x, y), bulge);
```

MCP 参考：`vjcad/doc/guide/quick-start.md`。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/entity/index.md`、`vjcad/doc/entity/entity-base.md`、`vjcad/doc/guide/architecture.md`、`vjcad/doc/guide/quick-start.md`、`vjcad/doc/command/api-reference.md`
- 示例：`vjcad/example/entity/all/01entities.js`
