唯杰地图 logo唯杰地图
VJMAP
EN

标注实体

vjcad/references/autodraw/dimensions.md 6.8 KB213 行
原文

线性标注、对齐标注、半径标注、直径标注、角度标注、弧长标注、坐标标注、多重引线。

⚠️ 坐标必须传 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 处
);