唯杰地图 logo唯杰地图
VJMAP
EN

overview

vjcad/references/entity/overview.md 3.8 KB90 行
原文

本文回答: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