> **本文回答**：vjcad 标注按形状分 7 个类——`LinearDimensionEnt / AlignedDimensionEnt / RadialDimensionEnt / DiametricDimensionEnt / AngleDimensionEnt / ArcDimensionEnt / OrdinateDimensionEnt`，每个类的构造签名不同；多重引线用 `MLeaderEnt` + `contentType / textContent / textPosition / addLeaderLine(arrowEnd)`。关联标注（reactor）见 [reactor/dimension-association](../reactor/dimension-association.md)。

## 一、构造签名速查

```js
// 线性（水平 / 垂直，轴向 0 弧度水平）
new LinearDimensionEnt(
  new Point2D(x1, y1),    // 测量起点 startPoint
  new Point2D(x2, y2),    // 测量终点 endPoint
  new Point2D(tx, ty),    // 尺寸线位置 dimensionLinePoint（定标注线在哪，不是文字）
  0                       // 角度 dimensionAngle（弧度，0 = 水平测量）
);

// 对齐（沿测量两点连线方向）
new AlignedDimensionEnt(
  new Point2D(x1, y1),
  new Point2D(x2, y2),
  new Point2D(tx, ty)
);

// 半径（圆 / 弧）
new RadialDimensionEnt(
  new Point2D(cx, cy),     // 圆心
  new Point2D(rx, ry),     // 圆周点
  10                        // 引出长度
);

// 直径
new DiametricDimensionEnt(
  new Point2D(p1x, p1y),    // 直径上一点 chordPoint
  new Point2D(p2x, p2y)     // 直径上对侧点 farChordPoint
  // 可选第三参 leaderLength?: number（引出长度）
);

// 角度（顶点 + 两条边上的点 + 半径）
new AngleDimensionEnt(
  new Point2D(vx, vy),
  new Point2D(b1x, b1y),
  new Point2D(b2x, b2y),
  22                         // 弧线半径
);

// 弧长
new ArcDimensionEnt(
  new Point2D(cx, cy),       // 圆心
  new Point2D(p1x, p1y),     // 弧端点 A
  new Point2D(p2x, p2y),     // 弧端点 B
  new Point2D(tx, ty)        // 标注位置
);

// 坐标
new OrdinateDimensionEnt(
  new Point2D(ox, oy),       // 原点
  new Point2D(px, py),       // 测量点
  new Point2D(tx, ty),       // 标注位置
  'xy'                       // 'x' / 'y' / 'xy'（OrdinateDisplayMode；兼容 boolean 用法）
);
```

> 角度标注另有两个变体类 `ThreePointAngularDimensionEnt`（三点定角）与 `TwoLineAngularDimensionEnt`（两直线夹角），同继承 `DimensionBase`，按三点/两线输入选对应类。

MCP 参考：`vjcad/example/entity/all/01entities.js`、`vjcad/example/entity/dimension/01linear.js` ~ `08ordinate.js`。

## 二、相联标注（关联反应器）

详见 [reactor/dimension-association](../reactor/dimension-association.md) 与 `vjcad/example/entity/dimension/09associative.js`。基本思路：原图实体改了，绑定的标注通过反应器自动更新数值。

## 三、`MLeaderEnt`（多重引线）

```js
const ml = new MLeaderEnt();
ml.contentType  = MLeaderContentType.MText;
ml.textContent  = '标注';
ml.textPosition = new Point2D(textX, textY);
ml.textHeight   = 6;
ml.addLeaderLine(new Point2D(arrowX, arrowY));
ml.setDefaults();
ml.color = 5;
Engine.addEntities(ml);
```

MCP 参考：`vjcad/example/entity/all/01entities.js`、`vjcad/example/entity/mleader/01create.js`。

| 字段 / 方法 | 说明 |
|---|---|
| `contentType` | 内容类型枚举（`MLeaderContentType.MText` 等） |
| `textContent` | 文字内容 |
| `textPosition` | 文字位置 |
| `textHeight` | 文字高度 |
| `addLeaderLine(arrowEnd)` | 增加一条引线（从 `arrowEnd` 拉出箭头） |

## 四、标注样式

参见 `vjcad/example/entity/dimension/03style.js`、`vjcad/doc/entity/index.md`（标注样式 / 文字 / 箭头）。样式对象字段是**驼峰名**（`DimensionStyle.scaleFactor / textHeight / arrowSize / extensionLineOffset / extensionLineExtend` 等）；`dimscale / dimtxt` 这类小写 AutoCAD 名只出现在 `DbDimensionStyle` 序列化层，不能直接对 `Engine.currentDoc.dimensionStyles.itemByName(name)` 返回的样式对象赋值。

⚠️ **代码创建的标注默认不用文档样式**：构造时 `_style = DefaultDimensionStyle.clone()`（全局默认样式副本），`setDefaults()` 也不吸文档样式，所以改 `dimensionStyles.itemByName('Standard').scaleFactor` 对 `new XxxDimensionEnt(...)` 无效。做法二选一：

```js
// A：文档比例 + 吸取当前文档样式（内置标注命令同此两步）
Engine.currentDoc.DIMSCALE = 50;
dim.setDefaults();
dim.applyCurrentDocStyle();   // 克隆文档当前样式，scaleFactor 覆盖为 DIMSCALE

// B：逐个设快捷属性
dim.scaleFactor = 50;  dim.textHeight = 2.5;  dim.arrowSize = 2.5;
```

## 反例

- 给 `LinearDimensionEnt` 的第四参当度数：实际是**弧度**。
- 圆心半径填错位置：`RadialDimensionEnt` 第一参是圆心、第二参是圆周上一点。
- `MLeaderEnt` 没设 `textPosition` / `addLeaderLine`：渲染不出箭头与文字位置。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/entity/index.md`（标注示例列表）
- 示例：`vjcad/example/entity/all/01entities.js`、`vjcad/example/entity/dimension/01linear.js` ~ `09associative.js`、`vjcad/example/entity/mleader/01create.js`
