spline-ellipse
本文回答:
SplineEnt用setControlPoints([...])设控制点(也支持拟合点 / 闭合 / 权重),EllipseEnt(center, major, minor, rotation)构造椭圆;椭圆弧通过同一个EllipseEnt加startAngle / endAngle完成。
一、Spline(控制点)
const sp = new SplineEnt();
sp.setControlPoints([
[-45, 0],
[-15, 28],
[ 15, -28],
[ 45, 0]
]);
sp.setDefaults();
sp.color = 6;
Engine.addEntities(sp);
MCP 参考:vjcad/example/entity/all/01entities.js、vjcad/example/entity/spline/01create.js。
二、Spline(闭合 / 权重 / 拟合点)
| 想要的 | 示例 |
|---|---|
| 闭合 | vjcad/example/entity/spline/02closed.js |
| 带权重的控制点(NURBS 影响曲线形状) | vjcad/example/entity/spline/03weight.js |
| 拟合点(曲线精确经过指定点) | vjcad/example/entity/spline/05fitpoints.js |
具体 API 请按 vjcad/doc/entity/spline-ent.md 与对应示例查阅。⚠️ SplineEnt 没有 setWeights——权重用 setControlPoints([[x, y], weight] 混合格式或 getControlPointWithWeight/getControlPointsWithWeight;闭合相关只有只读 getter isClosed / endPtIsClosed / areaIsClosed(无 setter,闭合要在创建/编辑 API 里处理——可设闭合的是 PolylineEnt.isClosed/closed/setClosed)。⚠️ 空 SplineEnt(无控制点/拟合点)上读这些闭合 getter 抛 TypeError: Cannot read properties of undefined (reading 'point2d')——内部 spline 对象未初始化;须先 setControlPoints/setFitPoints 再读。
三、Ellipse(椭圆)
// 完整椭圆
const e = new EllipseEnt(
[cx, cy],
45, // 长半轴
22, // 短半轴
Math.PI / 6 // 旋转(弧度)
);
e.setDefaults();
Engine.addEntities(e);
四、Ellipse(椭圆弧)
const arc = new EllipseEnt([cx, cy], 40, 20, 0);
arc.startAngle = 0;
arc.endAngle = Math.PI * 1.2;
arc.setDefaults();
Engine.addEntities(arc);
MCP 参考:vjcad/example/entity/all/01entities.js、vjcad/example/entity/ellipse/01create.js、02arc.js。
五、变换
SplineEnt / EllipseEnt 都继承 EntityBase,通用变换方法:
ent.move(from, to);
ent.rotate(center, angle);
ent.scale(center, factor);
ent.mirror(p1, p2);
详见 edit/,对应示例 vjcad/example/entity/spline/04transform.js、vjcad/example/entity/ellipse/03transform.js。
反例
setControlPoints之后又addControlPoint:注意是否双倍添加(按你的 SDK 版本验证)。- 椭圆参数顺序写反:
new EllipseEnt(center, minor, major, ...)会得到一个"竖椭圆"(看上去和你预期不同)。 - 椭圆弧用
start / end度数:是弧度。
参考(官方文档 MCP)
- 文档:
vjcad/doc/entity/spline-ent.md、vjcad/doc/entity/ellipse-ent.md - 示例:
vjcad/example/entity/spline/01create.js~05fitpoints.js、vjcad/example/entity/ellipse/01create.js~03transform.js、vjcad/example/entity/all/01entities.js