标注实体
线性标注、对齐标注、半径标注、直径标注、角度标注、弧长标注、坐标标注、多重引线。
⚠️ 坐标必须传
Point2D实例,不接受[x, y]数组——传数组会在构造时崩e.clone is not a function。与 vjmapext 的Point2DLike习惯不同。⚠️ 标注实体
dim.type恒为"CUSTOM"——判别具体类型用dim.customType(如"ARC_DIMENSION")或dim.dimensionType(如"ARC_LENGTH")。其他示例:TwoLineAngularDimensionEnt→customType="TWO_LINE_ANGULAR_DIMENSION"/dimensionType="ANGULAR_2LINE";ThreePointAngularDimensionEnt→"THREE_POINT_ANGULAR_DIMENSION"/"ANGULAR_3POINT"。
LinearDimensionEnt — 线性标注
const { LinearDimensionEnt, Point2D, Engine } = vjcad;
const dim = new LinearDimensionEnt(
new Point2D(0, 0), // startPoint: 标注起点
new Point2D(100, 0), // endPoint: 标注终点
new Point2D(50, 20), // dimensionLinePoint: 标注线位置
0 // dimensionAngle: 0=水平, Math.PI/2=垂直
);
dim.setDefaults();
dim.textHeight = 5;
dim.arrowSize = 3;
dim.textOverride = "L=<>"; // <> 会被替换为测量值
dim.color = 3;
Engine.addEntities(dim);
AlignedDimensionEnt — 对齐标注
const { AlignedDimensionEnt, Point2D, Engine } = vjcad;
const dim = new AlignedDimensionEnt(
new Point2D(0, 0), // xLine1Point: 第一界线点
new Point2D(100, 50), // xLine2Point: 第二界线点
new Point2D(50, 40) // dimLinePoint: 标注线位置
);
dim.setDefaults();
Engine.addEntities(dim);
RadialDimensionEnt — 半径标注
const { RadialDimensionEnt, Point2D, Engine } = vjcad;
const dim = new RadialDimensionEnt(
new Point2D(50, 50), // center: 圆心
new Point2D(80, 50), // chordPoint: 圆周点
10 // leaderLength: 引线延伸长度
);
dim.setDefaults();
Engine.addEntities(dim);
DiametricDimensionEnt — 直径标注
const { DiametricDimensionEnt, Point2D, Engine } = vjcad;
const dim = new DiametricDimensionEnt(
new Point2D(20, 50), // chordPoint1: 直径端点1
new Point2D(80, 50), // chordPoint2: 直径端点2
10 // leaderLength
);
dim.setDefaults();
Engine.addEntities(dim);
AngleDimensionEnt — 角度标注
const { AngleDimensionEnt, Point2D, Engine } = vjcad;
const dim = new AngleDimensionEnt(
new Point2D(0, 0), // vertex: 角度顶点
new Point2D(100, 0), // startPoint: 第一条边上的点
new Point2D(50, 80), // endPoint: 第二条边上的点
new Point2D(60, 40) // arcRadius: 标注弧位置(可传 Point2D 或半径数值)
);
dim.setDefaults();
Engine.addEntities(dim);
ArcDimensionEnt — 弧长标注
const { ArcDimensionEnt, Point2D, Engine } = vjcad;
const dim = new ArcDimensionEnt(
new Point2D(50, 50), // center
new Point2D(80, 50), // xLine1Point: 圆弧起点
new Point2D(50, 80), // xLine2Point: 圆弧终点
new Point2D(70, 70) // arcPoint: 标注位置
);
dim.setDefaults();
Engine.addEntities(dim);
OrdinateDimensionEnt — 坐标标注
const { OrdinateDimensionEnt, Point2D, Engine } = vjcad;
// 签名:(origin?, definingPoint?, leaderEndPoint?, displayModeOrUseXAxis?) —— 首参 origin 不能省
const dim = new OrdinateDimensionEnt(
new Point2D(0, 0), // origin: 坐标原点
new Point2D(100, 50), // definingPoint: 被标注点
new Point2D(120, 70), // leaderEndPoint: 引线终点
true // useXAxis: true=X坐标, false=Y坐标
);
dim.setDefaults();
Engine.addEntities(dim);
MLeaderEnt — 多重引线
const { MLeaderEnt, Point2D, Engine } = vjcad;
const mleader = new MLeaderEnt();
mleader.textContent = "标注内容"; // 属性名 textContent,不是 text
mleader.textPosition = new Point2D(100, 50); // 先设文字位置(基线方向据此计算)
// 再 addLeaderLine(箭头端点):自动建引线集群 + 设首顶点 + 算基线方向(不是 leaderPoints 数组)
mleader.addLeaderLine(new Point2D(0, 0)); // 返回 leaderLineIndex;多条引线就多调几次
mleader.textHeight = 5;
mleader.arrowSize = 3;
mleader.setDefaults();
Engine.addEntities(mleader);
相关 API(d.ts 真实成员):addLeader(): number、removeLeader(i)、addLeaderLine(firstPoint): number、addLeaderLineToLeader(leaderIndex): number、removeLeaderLine(i)(⚠️ 仅 addLeader() + addLeaderLineToLeader() 建出的引线没有任何顶点,不会画出引线;要么直接用 addLeaderLine(firstPoint),要么之后 setFirstVertex(lineIndex, point) 补首顶点);属性 contentType/leaderType/textContent/textPosition/enableFrameText/enableLanding/landingLength/landingGap/arrowType/arrowSize/leaderLineColor/leaderLineWeight。
标注通用属性
| 属性 | 说明 |
|---|---|
textHeight |
文字高度 |
arrowSize |
箭头大小 |
textOverride |
文字覆盖(<> 被替换为测量值) |
scaleFactor |
缩放因子 |
decimalPlaces |
小数位数 |
标注方法
| 方法 | 说明 |
|---|---|
getMeasurement() |
获取测量值 |
getFormattedMeasurement() |
获取格式化后的文本 |
关联标注
标注可以关联到源实体,源实体移动时标注自动更新。
const { LinearDimensionEnt, LineEnt, Point2D, Engine } = vjcad;
// 创建直线
const line = new LineEnt([0, 0], [100, 0]);
line.setDefaults();
Engine.addEntities(line);
// 创建标注
const dim = new LinearDimensionEnt(
new Point2D(0, 0), new Point2D(100, 0),
new Point2D(50, 20), 0
);
dim.setDefaults();
Engine.addEntities(dim);
// 建立关联(必须在 addEntities 之后)
dim.setSourceEntities(
line.id, -1, // 起点关联实体 + 段索引:LINE 忽略段索引(填 -1 即可);PLINE 须填 ≥0 的直线段索引
line.id, -1, // 终点关联实体
'start', // 起点端点类型
'end' // 终点端点类型
);
端点类型:'start'、'end'、'midpoint'(类型里还有 'center',但 Linear/Aligned 关联未实现,回退为起点)
精确定位(parameterT,0~1 表示在线段上的比例位置):
dim.setSourceEntities(
line.id, -1,
line.id, -1,
undefined, undefined,
0.25, // startParameterT: 1/4 处
0.75 // endParameterT: 3/4 处
);