> **本文回答**：单行文字 `TextEnt`、多行文字 `MTextEnt`，都通过 `insertionPoint / text / height / styleName` 设定，并配合 `TextStyle` + `MainView({ fonts })` 使用字体；TextEnt 的对齐是 `textAlignment`（数字 1~9），MText 的附着点是 `textAttachment`。

## 一、最小用法

```js
// 单行
const t = new TextEnt();
t.insertionPoint = [0, 130];
t.text = '楷体文字';
t.height = 8;
t.styleName = 'simkai';        // 见 setup/fonts
t.setDefaults();
t.color = 3;

// 多行
const mt = new MTextEnt();
mt.insertionPoint = [0, 100];
mt.text = '多行文字\n第二行';
mt.height = 10;
mt.styleName = '楷体样式';
mt.setDefaults();

Engine.addEntities([t, mt]);
```

MCP 参考：`vjcad/example/entity/text/04fonts.js`、`vjcad/doc/entity/text-ent.md`、`vjcad/doc/entity/mtext-ent.md`。

## 二、`TextEnt` 关键属性

| 属性 | 说明 |
|---|---|
| `insertionPoint` | 插入点 `[x, y]` |
| `text` | 文字内容 |
| `height` | 文字高度（绘图单位，不是像素） |
| `rotation` | 旋转（弧度） |
| `styleName` | 文字样式名（与 `TextStyle.name` / `MainView` 构造配置 `fonts[].name` 一致） |
| `textAlignment` | 对齐方式（按示例 `1~9` 数字） |
| `color` / `layer` / `lineType` 等 | `EntityBase` 通用属性 |

MCP 参考：`vjcad/example/entity/all/01entities.js`、`vjcad/doc/guide/quick-start.md`、`vjcad/doc/entity/text-ent.md`。

## 三、`MTextEnt` 关键属性

| 属性 | 说明 |
|---|---|
| `insertionPoint` | 插入点 |
| `text` | 文字（支持 `\n` 换行） |
| `maxWidth` | 段宽上限（自动换行；⚠️ 字段名是 `maxWidth`，不是 `width`；相关：`refWidth`/`wordWrapColmn`） |
| `height` | 行高 |
| `styleName` | 样式名 |
| `textAttachment` | 附着点（`MTextAttachmentEnum`，按小键盘布局：7=左上(默认)、8=中上、9=右上、4/5/6=左中/中心/右中、1=左下、2=中下、3=右下；与 `TextEnt.textAlignment` 同一布局，不同于 DXF 的 1=TopLeft。左上锚点写 `7`，写成 `1` 会以插入点为左下角向上生长） |

MCP 参考：`vjcad/doc/guide/quick-start.md`、`vjcad/example/entity/all/01entities.js`、`vjcad/doc/entity/mtext-ent.md`。

## 四、`TextStyle`（自定义宽度因子 / 倾斜）

```js
const style = new TextStyle();
style.name = '楷体样式';
style.fontFileName = 'simkai';   // 必须是 fonts 配置里的 name
style.widthFactor = 1.0;
style.obliqueAngle = 0;
Engine.currentDoc.textStyles.add(style);

const t = new TextEnt();
t.styleName = '楷体样式';
```

`MainView` 构造配置的 `fonts`（运行时存于 `fontsConfig`）会自动创建同名 `TextStyle`，所以"直接用字体名作 `styleName`"通常已经够用。需要 `widthFactor` / `obliqueAngle` 时再手动 `new TextStyle()`。详见 [setup/fonts](../setup/fonts.md)。

MCP 参考：`vjcad/example/entity/text/04fonts.js`。

## 五、遍历 / 修改样式

```js
// 列出所有文字样式
Engine.currentDoc.textStyles.items.forEach(s => {
  console.log(s.name, s.fontFileName, s.widthFactor, s.obliqueAngle);
});
```

MCP 参考：`vjcad/example/entity/text/04fonts.js`。

## 反例

- 设 `styleName` 但 `fonts` 没配 / `TextStyle` 没添加：渲染时回退到默认字体。
- 把 `text.height` 当像素：实际是绘图单位，会随缩放放大。
- 多行文字用单行 `TextEnt`：`\n` 不会换行，应使用 `MTextEnt`。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/entity/text-ent.md`、`vjcad/doc/entity/mtext-ent.md`、`vjcad/doc/entity/text-entities.md`、`vjcad/doc/guide/quick-start.md`
- 示例：`vjcad/example/entity/text/01singleline.js`、`02multiline.js`、`03style.js`、`04fonts.js`、`vjcad/example/entity/all/01entities.js`
