所有 VjCAD 实体类型的构造方式、属性和方法。
LineEnt — 直线
const { LineEnt, Engine } = vjcad;
const line = new LineEnt([0, 0], [100, 100]);
line.setDefaults();
line.color = 1;
Engine.addEntities(line);
| 属性 |
说明 |
startPoint / endPoint |
起点/终点(Point2D) |
Length |
长度(只读) |
CircleEnt — 圆
const { CircleEnt, Engine } = vjcad;
const circle = new CircleEnt([50, 50], 30); // 圆心, 半径
circle.setDefaults();
Engine.addEntities(circle);
| 属性 |
说明 |
center |
圆心(Point2D) |
radius |
半径 |
area |
面积(只读) |
circumference |
周长(只读) |
ArcEnt — 圆弧
const { ArcEnt, Point2D, Engine } = vjcad;
// 方式1:圆心 + 半径 + 角度(弧度)
const arc = new ArcEnt([50, 50], 30, 0, Math.PI / 2); // 0° 到 90° 逆时针
arc.setDefaults();
Engine.addEntities(arc);
// 方式2:三点定弧
const arc2 = new ArcEnt();
arc2.initBy3Pt(new Point2D(0, 0), new Point2D(50, 30), new Point2D(100, 0));
arc2.setDefaults();
Engine.addEntities(arc2);
| 属性 |
说明 |
center |
圆心 |
radius |
半径 |
startAngle / endAngle |
起始/终止角度(弧度) |
startPoint / endPoint |
起点/终点(只读) |
midPoint |
中点(只读) |
length |
弧长(只读) |
totalAngle |
圆心角(只读) |
isClockwise |
是否顺时针(只读) |
角度规则:0 = 正右方(3点钟),逆时针增加,Math.PI / 2 = 正上方,Math.PI = 正左方。
PolylineEnt — 多段线
const { PolylineEnt, Engine } = vjcad;
// 方式1:setPoints 批量设置
const pline = new PolylineEnt();
pline.setPoints([[0, 0], [100, 0], [100, 60], [0, 60]]);
pline.isClosed = true;
pline.setDefaults();
Engine.addEntities(pline);
// 方式2:链式 addPoint
const pline2 = new PolylineEnt();
pline2.addPoint([0, 0])
.addPoint([50, 0], 0.5) // 带凸度的弧段
.addPoint([100, 0]);
pline2.setDefaults();
Engine.addEntities(pline2);
// 方式3:带圆弧段
const pline3 = new PolylineEnt();
pline3.setPoints([
[0, 0], // 直线段
[[50, 0], 0.5], // 弧段(凸度 0.5,逆时针)
[100, 0],
[[100, 50], -0.5] // 弧段(负凸度,顺时针)
]);
pline3.setDefaults();
Engine.addEntities(pline3);
凸度说明:
0 — 直线段
1 — 半圆弧(逆时针,圆心角 180°)
-1 — 半圆弧(顺时针)
bulge = tan(圆心角 / 4),圆心角单位为弧度
- 常用值:90° 圆角 →
tan(π/8) ≈ 0.4142,60° → ≈ 0.2679,120° → ≈ 0.5774
注意:bulge=1 是半圆弧(180°),不是 90° 圆角!绘制圆角矩形应使用 Math.tan(Math.PI / 8) ≈ 0.4142。
| 属性 |
说明 |
bulgePoints |
顶点集合(BulgePoints) |
isClosed |
是否闭合 |
length |
总长度(只读) |
area |
面积(只读;仅对无凸度、闭合、不自交的多段线有效,否则返回 -1,如圆角矩形) |
isCCW |
是否逆时针(只读) |
globalWidth |
全局宽度 |
| 方法 |
说明 |
setPoints(points) |
批量设置点 |
addPoint([x,y], bulge?) |
添加点(支持链式调用) |
addPoints(points) |
批量追加点 |
getPoints() |
获取所有顶点坐标 |
getPointsWithBulge() |
获取顶点和凸度信息 |
getSubEnts() |
获取子实体(线段和弧段) |
TextEnt — 单行文字
const { TextEnt, Engine } = vjcad;
const text = new TextEnt();
text.insertionPoint = [0, 100];
text.text = "Hello WebCAD";
text.height = 10;
text.rotation = 0; // 弧度
text.textAlignment = 5; // 居中
text.setDefaults();
Engine.addEntities(text);
文本对齐方式(textAlignment):
7=左上 8=中上 9=右上
4=左中 5=中心 6=右中
1=左下 2=中下 3=右下
特殊字符:%%d → °(度),%%c → Ø(直径),%%p → ±(正负)
| 属性 |
说明 |
insertionPoint |
插入点 |
text |
文本内容 |
height |
字高 |
rotation |
旋转角度(弧度) |
textAlignment |
对齐方式(1-9) |
widthFactor |
宽度因子 |
obliqueAngle |
倾斜角度(度,与 rotation 用弧度不同;直接作为 obliqueDeg 传给文字渲染) |
MTextEnt — 多行文字
const { MTextEnt, Engine } = vjcad;
const mtext = new MTextEnt();
mtext.insertionPoint = [0, 100];
mtext.text = "第一行\n第二行\n第三行";
mtext.height = 8;
mtext.maxWidth = 80;
mtext.setDefaults();
Engine.addEntities(mtext);
MText 格式代码(通过 contents 属性使用):
| 代码 |
功能 |
\Cn; |
颜色(1红 2黄 3绿 4青 5蓝 6洋红 7白) |
\L / \l |
下划线 开/关 |
\O / \o |
上划线 开/关 |
\K / \k |
删除线 开/关 |
\Hn.nx; |
相对高度(如 \H1.5x;) |
\Wn; |
宽度因子 |
\P |
换行 |
{} |
格式分组 |
mtext.contents = "{\\C1;红色}{\\C2;黄色}{\\C3;绿色}";
| 属性 |
说明 |
insertionPoint |
插入点 |
text |
文本内容(支持 \n 换行) |
contents |
原生 MText 格式内容 |
height |
字高 |
maxWidth |
最大宽度(自动换行) |
textAttachment |
附着点位置(1-9,小键盘布局:7=左上(默认)、5=中心、1=左下;不是 DXF 的 1=左上) |
rotation |
旋转角度 |
rowSpcFac |
行间距因子 |
showBorder |
是否显示边框 |
backgroundFill |
是否启用背景 |
backgroundFillColor |
背景颜色 |
backgroundScaleFactor |
背景扩展比例 |
SplineEnt — 样条曲线
const { SplineEnt, Engine } = vjcad;
const spline = new SplineEnt();
spline.setFitPoints([[0, 0], [50, 100], [100, 50], [150, 100]]);
// ⚠️ 必须传 [x,y] 数组——实现按 e[0]/e[1] 索引,传 Point2D 对象会得到 NaN
// isClosed 是只读 getter(首尾点重合即闭合),模块/严格模式下赋值会抛 TypeError
spline.setDefaults();
Engine.addEntities(spline);
EllipseEnt — 椭圆
const { EllipseEnt, Engine } = vjcad;
const ellipse = new EllipseEnt([50, 50], 40, 20, 0); // 圆心, 长半轴, 短半轴, 长轴角(弧度)
ellipse.setDefaults();
// majorAxis 是长轴角度(number,弧度),不是向量;radiusRatio 只读(= minorRadius / majorRadius),赋值会抛 TypeError
Engine.addEntities(ellipse);
DotEnt — 点
const { DotEnt, Engine } = vjcad;
const dot = new DotEnt([50, 50]);
dot.setDefaults();
Engine.addEntities(dot);
SolidEnt — 实体填充
const { SolidEnt, Engine } = vjcad;
// 三角形填充
const solid = new SolidEnt([0, 0], [100, 0], [50, 80]);
solid.setDefaults();
solid.color = 1;
Engine.addEntities(solid);
// 四边形填充:按周边顺序给点(不是 AutoCAD 的 Z 序,Z 序会画成沙漏)
const solid2 = new SolidEnt([0, 0], [100, 0], [100, 80], [0, 80]);
solid2.setDefaults();
Engine.addEntities(solid2);
RayEnt — 射线 / XLineEnt — 构造线
const { RayEnt, XLineEnt, Engine } = vjcad;
// 射线(从起点向一个方向无限延伸);第二参是**弧度制角度**,不是方向点
const ray = new RayEnt([0, 0], Math.PI / 4); // 45°
ray.setDefaults();
Engine.addEntities(ray);
// 构造线(向两个方向无限延伸);第二参同为角度(0 = 水平)
const xline = new XLineEnt([50, 50], 0);
xline.setDefaults();
Engine.addEntities(xline);
BezierEnt — 贝塞尔曲线
const { BezierEnt, Engine } = vjcad;
const bezier = new BezierEnt(bulgePointsCollection);
bezier.setDefaults();
Engine.addEntities(bezier);
ImageRefEnt — 图片引用
const { ImageRefEnt, Engine } = vjcad;
const img = new ImageRefEnt();
// 需设置图片源和裁剪模式后使用
img.setDefaults();
Engine.addEntities(img);
通用属性(所有实体)
| 属性 |
说明 |
示例 |
color |
颜色索引 |
1红 2黄 3绿 4青 5蓝 6洋红 7白,256 随层,0 随块 |
layer |
图层名 |
"图层A" |
lineType |
线型名 |
"CONTINUOUS", "HIDDEN", "CENTER" |
lineTypeScale |
线型比例 |
1.0 |
lineWeight |
线宽(0.01mm) |
15(0.15mm),-1 随层 |
通用方法(所有实体)
| 方法 |
说明 |
setDefaults() |
应用系统默认属性(必须在设置其他属性前调用) |
boundingBox() |
获取边界框 { pt1, pt2, width, height, center } |
clone() |
创建深拷贝 |
move(from, to) |
移动(Point2D 或 [x,y]) |
rotate(center, angle) |
旋转(弧度;Point2D 或 [x,y]) |
scale(center, factor) |
缩放(Point2D 或 [x,y]) |
mirror(p1, p2) |
镜像(Point2D 或 [x,y]) |
上表"数组也行"只对基础实体成立;标注族(*DimensionEnt)与 MLeaderEnt 的 move/rotate/scale/mirror 只收 Point2D,传数组会得到 NaN 坐标。