dimension-mleader
本文回答:vjcad 标注按形状分 7 个类——
LinearDimensionEnt / AlignedDimensionEnt / RadialDimensionEnt / DiametricDimensionEnt / AngleDimensionEnt / ArcDimensionEnt / OrdinateDimensionEnt,每个类的构造签名不同;多重引线用MLeaderEnt+contentType / textContent / textPosition / addLeaderLine(arrowEnd)。关联标注(reactor)见 reactor/dimension-association。
一、构造签名速查
// 线性(水平 / 垂直,轴向 0 弧度水平)
new LinearDimensionEnt(
new Point2D(x1, y1), // 测量起点 startPoint
new Point2D(x2, y2), // 测量终点 endPoint
new Point2D(tx, ty), // 尺寸线位置 dimensionLinePoint(定标注线在哪,不是文字)
0 // 角度 dimensionAngle(弧度,0 = 水平测量)
);
// 对齐(沿测量两点连线方向)
new AlignedDimensionEnt(
new Point2D(x1, y1),
new Point2D(x2, y2),
new Point2D(tx, ty)
);
// 半径(圆 / 弧)
new RadialDimensionEnt(
new Point2D(cx, cy), // 圆心
new Point2D(rx, ry), // 圆周点
10 // 引出长度
);
// 直径
new DiametricDimensionEnt(
new Point2D(p1x, p1y), // 直径上一点 chordPoint
new Point2D(p2x, p2y) // 直径上对侧点 farChordPoint
// 可选第三参 leaderLength?: number(引出长度)
);
// 角度(顶点 + 两条边上的点 + 半径)
new AngleDimensionEnt(
new Point2D(vx, vy),
new Point2D(b1x, b1y),
new Point2D(b2x, b2y),
22 // 弧线半径
);
// 弧长
new ArcDimensionEnt(
new Point2D(cx, cy), // 圆心
new Point2D(p1x, p1y), // 弧端点 A
new Point2D(p2x, p2y), // 弧端点 B
new Point2D(tx, ty) // 标注位置
);
// 坐标
new OrdinateDimensionEnt(
new Point2D(ox, oy), // 原点
new Point2D(px, py), // 测量点
new Point2D(tx, ty), // 标注位置
'xy' // 'x' / 'y' / 'xy'(OrdinateDisplayMode;兼容 boolean 用法)
);
角度标注另有两个变体类
ThreePointAngularDimensionEnt(三点定角)与TwoLineAngularDimensionEnt(两直线夹角),同继承DimensionBase,按三点/两线输入选对应类。
MCP 参考:vjcad/example/entity/all/01entities.js、vjcad/example/entity/dimension/01linear.js ~ 08ordinate.js。
二、相联标注(关联反应器)
详见 reactor/dimension-association 与 vjcad/example/entity/dimension/09associative.js。基本思路:原图实体改了,绑定的标注通过反应器自动更新数值。
三、MLeaderEnt(多重引线)
const ml = new MLeaderEnt();
ml.contentType = MLeaderContentType.MText;
ml.textContent = '标注';
ml.textPosition = new Point2D(textX, textY);
ml.textHeight = 6;
ml.addLeaderLine(new Point2D(arrowX, arrowY));
ml.setDefaults();
ml.color = 5;
Engine.addEntities(ml);
MCP 参考:vjcad/example/entity/all/01entities.js、vjcad/example/entity/mleader/01create.js。
| 字段 / 方法 | 说明 |
|---|---|
contentType |
内容类型枚举(MLeaderContentType.MText 等) |
textContent |
文字内容 |
textPosition |
文字位置 |
textHeight |
文字高度 |
addLeaderLine(arrowEnd) |
增加一条引线(从 arrowEnd 拉出箭头) |
四、标注样式
参见 vjcad/example/entity/dimension/03style.js、vjcad/doc/entity/index.md(标注样式 / 文字 / 箭头)。样式对象字段是驼峰名(DimensionStyle.scaleFactor / textHeight / arrowSize / extensionLineOffset / extensionLineExtend 等);dimscale / dimtxt 这类小写 AutoCAD 名只出现在 DbDimensionStyle 序列化层,不能直接对 Engine.currentDoc.dimensionStyles.itemByName(name) 返回的样式对象赋值。
⚠️ 代码创建的标注默认不用文档样式:构造时 _style = DefaultDimensionStyle.clone()(全局默认样式副本),setDefaults() 也不吸文档样式,所以改 dimensionStyles.itemByName('Standard').scaleFactor 对 new XxxDimensionEnt(...) 无效。做法二选一:
// A:文档比例 + 吸取当前文档样式(内置标注命令同此两步)
Engine.currentDoc.DIMSCALE = 50;
dim.setDefaults();
dim.applyCurrentDocStyle(); // 克隆文档当前样式,scaleFactor 覆盖为 DIMSCALE
// B:逐个设快捷属性
dim.scaleFactor = 50; dim.textHeight = 2.5; dim.arrowSize = 2.5;
反例
- 给
LinearDimensionEnt的第四参当度数:实际是弧度。 - 圆心半径填错位置:
RadialDimensionEnt第一参是圆心、第二参是圆周上一点。 MLeaderEnt没设textPosition/addLeaderLine:渲染不出箭头与文字位置。
参考(官方文档 MCP)
- 文档:
vjcad/doc/entity/index.md(标注示例列表) - 示例:
vjcad/example/entity/all/01entities.js、vjcad/example/entity/dimension/01linear.js~09associative.js、vjcad/example/entity/mleader/01create.js