overview
本文回答: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 |
| 实体类型清单(type 字符串与类名对照) | common-entities |
| Line / Arc / Circle / Ray / XLine | line-arc-circle |
| Polyline / Donut / Polygon / RoundedRect / DLine | polyline |
| Text / MText / TextStyle / 字体 | text-mtext |
| Block 定义 / 插入 / 炸开 / 计数 / 替换 / 属性 | block-insert |
| Hatch / Solid | hatch-solid |
| Spline / Ellipse / 椭圆弧 / 拟合点样条 | spline-ellipse |
| 标注(Linear/Aligned/Radial/Diametric/Angle/Arc/Ordinate)+ MLeader | dimension-mleader |
| 图像(ImageRefEnt / ImageSource) | image |
| 自定义实体(CustomEntityBase) | custom-entity |
二、EntityBase 通用属性 / 方法
引自
vjcad/doc/guide/architecture.md:
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。
三、三段式(推荐)
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]:
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