create-entities
本文回答:
vjcad/example/entity/all/01entities.js用一个表格示例把 vjcad 全部主要实体类型一次创建完成,是查"某种实体怎么 new"的最好参考。下面给出关键调用片段,详细每种实体单独写在对应子页。
一、关键调用片段(节选)
// 直线 / 圆 / 圆弧
const line = new LineEnt([x1, y1], [x2, y2]);
const circle = new CircleEnt([cx, cy], radius);
const arc = new ArcEnt([cx, cy], radius, startAng, endAng);
// 椭圆 / 椭圆弧
const ellipse = new EllipseEnt([cx, cy], major, minor, rotation);
ellipse.startAngle = 0; ellipse.endAngle = Math.PI * 1.2; // → 椭圆弧
// 多段线(简化写法)
const pl = new PolylineEnt();
pl.setPoints([[x1, y1], [x2, y2], [x3, y3]]);
pl.isClosed = true;
// 多段线(凸度 BulgePoint)
const pl2 = new PolylineEnt();
pl2.bulgePoints.add(new BulgePoint(new Point2D(x, y), bulge));
// 文字
const t = new TextEnt();
t.insertionPoint = [x, y]; t.text = '...'; t.height = 12; t.textAlignment = 5;
// 多行文字
const mt = new MTextEnt();
mt.insertionPoint = [x, y]; mt.text = '...\n...'; mt.textAttachment = 5;
// 样条
const sp = new SplineEnt();
sp.setControlPoints([[x1, y1], [x2, y2], [x3, y3], [x4, y4]]);
// 实体填充(梯形 / 三角 / 箭头)
const sd = new SolidEnt([x1, y1], [x2, y2], [x3, y3], [x4, y4]);
// 填充(HatchEnt)
const hatch = new HatchEnt();
hatch.patternName = 'ANSI31';
const edge = new Edge();
edge.edgeType = EdgeType.Polyline;
edge.bulgePoints = boundary.bulgePoints.clone();
const edges = new Edges(); edges.add(edge);
hatch.setLoops(edges);
// 块插入
let blockDef = doc.blocks.itemByName('DemoBlock') || doc.blocks.add('DemoBlock');
blockDef.basePoint = [0, 0];
blockDef.addEntity(someEntity);
const ins = new InsertEnt();
ins.blockId = blockDef.blockId;
ins.insertionPoint = [x, y];
ins.scaleFactor = 1.5; ins.rotation = 0;
// 图像(ImageRefEnt + ImageSource)
const imgSource = new ImageSource('DemoImage', 'image/png', base64Data);
await imgSource.initTexture();
Engine.activeDocument.images.add(imgSource);
const imgRef = new ImageRefEnt([x, y], 0, 1);
imgRef.setImageSource(imgSource);
// 标注(线性 / 对齐 / 半径 / 直径 / 角度 / 弧长 / 坐标)
new LinearDimensionEnt(new Point2D(x1, y1), new Point2D(x2, y2), new Point2D(tx, ty), 0);
new AlignedDimensionEnt(new Point2D(x1, y1), new Point2D(x2, y2), new Point2D(tx, ty));
new RadialDimensionEnt(new Point2D(cx, cy), new Point2D(x, y), 10);
new DiametricDimensionEnt(new Point2D(x1, y1), new Point2D(x2, y2));
new AngleDimensionEnt(new Point2D(vx, vy), new Point2D(x1, y1), new Point2D(x2, y2), 22);
new ArcDimensionEnt(new Point2D(cx, cy), new Point2D(p1x, p1y), new Point2D(p2x, p2y), new Point2D(tx, ty));
new OrdinateDimensionEnt(new Point2D(ox, oy), new Point2D(px, py), new Point2D(tx, ty), 'xy');
// 多重引线
const ml = new MLeaderEnt();
ml.contentType = MLeaderContentType.MText;
ml.textContent = '标注';
ml.textPosition = new Point2D(x, y);
ml.textHeight = 6;
ml.addLeaderLine(new Point2D(arrowX, arrowY));
// 射线 / 构造线
const ray = new RayEnt([x, y], angle);
const xline = new XLineEnt([x, y], angle);
// 点 / 像素点
const dot = new DotEnt([x, y], size);
const pp = new PixelPointEnt([x, y]);
MCP 参考:vjcad/example/entity/all/01entities.js。
二、参数命名速查(容易记混的)
| 实体 | 关键参数 |
|---|---|
ArcEnt |
(center, radius, startAng, endAng);或 arc.initBy3Pt(p1, p2, p3) |
EllipseEnt |
(center, major, minor, rotation);椭圆弧加 startAngle / endAngle |
RayEnt |
(start, angle) |
XLineEnt |
(point, angle) |
DotEnt |
(point, size) |
SolidEnt |
(p1, p2, p3, p4) 顺序按四边形 |
InsertEnt |
设 blockId / insertionPoint / scaleFactor / rotation |
MLeaderEnt |
contentType / textContent / textPosition / textHeight / addLeaderLine(arrowEnd) |
MCP 参考:vjcad/example/entity/all/01entities.js、vjcad/doc/entity/*.md。
三、批量添加
const entities = [];
// 推入 N 个实体...
Engine.addEntities(entities); // 一次 undo + 一次 regen
Engine.zoomExtents();
MCP 参考:vjcad/example/entity/all/01entities.js、vjcad/doc/guide/quick-start.md。
参考(官方文档 MCP)
- 文档:
vjcad/doc/entity/index.md、vjcad/doc/entity/basic-entities.md、vjcad/doc/entity/text-entities.md、vjcad/doc/entity/block-entities.md - 示例:
vjcad/example/entity/all/01entities.js