常用实体
大约 4 分钟
常用实体
日常开发中最常用的实体类型。
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- 长度(只读)color- 颜色layer- 图层lineType- 线型lineTypeScale- 线型比例
CircleEnt - 圆
const { CircleEnt, Engine } = vjcad;
// 创建圆
const circle = new CircleEnt([50, 50], 30); // 圆心, 半径
circle.setDefaults();
circle.color = 3; // 绿色
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- 是否顺时针(只读)
方法:
initBy3Pt(p1, p2, p3)- 通过三点创建圆弧
PolylineEnt - 多段线
const { PolylineEnt, BulgePoints, BulgePoint, 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- 半圆弧(逆时针)-1- 半圆弧(顺时针)bulge = tan(圆心角/4)
属性:
bulgePoints- 顶点集合 (BulgePoints)isClosed- 是否闭合length- 总长度(只读)area- 面积(闭合时,只读)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();
text.color = 2;
Engine.addEntities(text);文本对齐方式(textAlignment):
7=TopLeft 8=TopCenter 9=TopRight
4=MidLeft 5=MidCenter 6=MidRight
1=Left 2=Center 3=Right (基线对齐)特殊字符:
%%d→ °(度)%%c→ Ø(直径)%%p→ ±(正负)
属性:
insertionPoint- 插入点text- 文本内容height- 字高rotation- 旋转角度(弧度)textAlignment- 对齐方式 (1-9)widthFactor- 宽度因子obliqueAngle- 倾斜角度(弧度)
MTextEnt - 多行文字
const { MTextEnt, Engine } = vjcad;
const mtext = new MTextEnt();
mtext.insertionPoint = [0, 100];
mtext.text = "第一行\n第二行\n第三行"; // \n 换行
mtext.height = 8;
mtext.maxWidth = 80; // 超出宽度自动换行
mtext.setDefaults();
Engine.addEntities(mtext);MText 格式代码(使用 contents 属性):
// 颜色
mtext.contents = "{\\C1;红色}{\\C2;黄色}{\\C3;绿色}";
// 字体大小
mtext.contents = "{\\H1.5x;大号} 普通 {\\H0.7x;小号}";
// 样式
mtext.contents = "{\\L下划线} {\\O上划线} {\\K删除线}";
// 换行
mtext.contents = "第一行\\P第二行";格式代码速查:
| 代码 | 功能 |
|---|---|
\Cn; | 颜色(1红 2黄 3绿 4青 5蓝 6洋红 7白) |
\L / \l | 下划线 开/关 |
\O / \o | 上划线 开/关 |
\K / \k | 删除线 开/关 |
\Hn.nx; | 相对高度(如 \H1.5x;) |
\Wn; | 宽度因子 |
\P | 换行 |
{} | 格式分组 |
属性:
insertionPoint- 插入点text- 文本内容(支持 \n 换行)contents- 原生 MText 格式内容height- 字高maxWidth- 最大宽度(自动换行)textAttachment- 附着点位置 (1-9)rotation- 旋转角度rowSpcFac- 行间距因子showBorder- 是否显示边框backgroundFill- 是否启用背景backgroundFillColor- 背景颜色backgroundScaleFactor- 背景扩展比例
较少使用的实体
EllipseEnt - 椭圆
const { EllipseEnt, Engine } = vjcad;
const ellipse = new EllipseEnt();
ellipse.center = [50, 50];
ellipse.majorAxis = [40, 0]; // 长轴向量
ellipse.radiusRatio = 0.5; // 短轴/长轴比
ellipse.setDefaults();
Engine.addEntities(ellipse);SplineEnt - 样条曲线
const { SplineEnt, Point2D, Engine } = vjcad;
const spline = new SplineEnt();
spline.setFitPoints([
new Point2D(0, 0),
new Point2D(50, 100),
new Point2D(100, 50),
new Point2D(150, 100)
]);
spline.setDefaults();
Engine.addEntities(spline);RayEnt / XlineEnt - 射线 / 构造线
const { RayEnt, XlineEnt, Engine } = vjcad;
// 射线(从起点向一个方向无限延伸)
const ray = new RayEnt([0, 0], [1, 1]); // 起点, 方向
ray.setDefaults();
Engine.addEntities(ray);
// 构造线(向两个方向无限延伸)
const xline = new XlineEnt([50, 50], [1, 0]); // 通过点, 方向
xline.setDefaults();
Engine.addEntities(xline);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);
// 四边形填充
const solid2 = new SolidEnt([0, 0], [100, 0], [0, 80], [100, 80]);
solid2.setDefaults();
Engine.addEntities(solid2);通用属性
所有实体都支持以下属性:
| 属性 | 说明 | 示例 |
|---|---|---|
color | 颜色索引 | 1红 2黄 3绿 4青 5蓝 6洋红 7白, 256随层 |
layer | 图层名 | "图层A" |
lineType | 线型名 | "CONTINUOUS", "HIDDEN", "CENTER" |
lineTypeScale | 线型比例 | 1.0 |
lineWeight | 线宽 | 15 (0.15mm), -1 随层 |
通用方法
| 方法 | 说明 |
|---|---|
setDefaults() | 应用系统默认属性(必须在设置其他属性前调用) |
boundingBox() | 获取边界框 |
clone() | 创建副本 |
move(from, to) | 移动 |
rotate(center, angle) | 旋转(弧度) |
scale(center, factor) | 缩放 |
mirror(p1, p2) | 镜像 |