唯杰地图 logo唯杰地图
VJMAP
EN

实体完整目录

vjcad/references/autodraw/entity-catalog.md 9.5 KB338 行
原文

所有 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 坐标。