base-point
本文回答:
PointInputOptions.useBasePoint = true+basePoint = startPoint即可显示默认橡皮筋线;如果想自定义预览(颜色 / 端点圆 / 标尺等),加hideRubberBand = true关掉默认线,再用callback(canvasPt)在每次鼠标移动时Engine.clearPreview()+Engine.drawPreviewEntities([...])。
一、默认橡皮筋线
const opt = new PointInputOptions('指定终点:');
opt.useBasePoint = true; // 启用橡皮筋
opt.basePoint = startPoint;
const r = await getPoint(opt);
MCP 参考:vjcad/example/input/02getpointwithbase.js、vjcad/doc/guide/quick-start.md("获取点"小节)。
二、自定义回调预览(隐藏默认橡皮筋)
const opt = new PointInputOptions('指定终点:');
opt.useBasePoint = true;
opt.basePoint = startPoint;
opt.hideRubberBand = true; // 隐藏默认
opt.callback = (canvasPt) => {
const wp = Engine.canvasToWcs(canvasPt);
const previewLine = new LineEnt(
[startPoint.x, startPoint.y],
[wp.x, wp.y]
);
previewLine.setDefaults();
previewLine.color = 1; // 红色
const endMark = new CircleEnt([wp.x, wp.y], 3);
endMark.setDefaults();
endMark.color = 3; // 绿色
Engine.clearPreview();
Engine.drawPreviewEntities([previewLine, endMark]);
};
const r = await getPoint(opt);
Engine.clearPreview();
MCP 参考:vjcad/example/input/02getpointwithbase.js。
三、连续画线(每段都带基点)
const points = [];
const opt1 = new PointInputOptions('指定第一点:');
const r1 = await getPoint(opt1);
if (r1.status !== InputStatusEnum.OK) return;
points.push(r1.value);
while (true) {
const lastPt = points[points.length - 1];
const opt = new PointInputOptions('指定下一点 (ESC 结束):');
opt.useBasePoint = true;
opt.basePoint = lastPt;
const r = await getPoint(opt);
if (r.status !== InputStatusEnum.OK) break;
const newPt = r.value;
const line = new LineEnt([lastPt.x, lastPt.y], [newPt.x, newPt.y]);
line.setDefaults();
Engine.addEntities(line);
points.push(newPt);
}
MCP 参考:vjcad/example/input/02getpointwithbase.js。
四、与状态机配合
在 step2_getNextPoints 里把上一个点设成 basePoint,就能让 PLINE 状态机显示真实的"虚线连接"预览。完整示例见 command/state-machine,源 vjcad/example/command/04statemachine.js。
反例
- 不设
useBasePoint = true只设basePoint:没有橡皮筋、也没有相对基点的正交约束;但callback仍会每次鼠标移动触发(自定义预览照常可用)。 - 在
callback里直接用canvasPt.x / canvasPt.y创建实体:屏幕坐标 ≠ 图纸坐标。 - 命令结束后没
Engine.clearPreview():自定义预览图永久残留。
参考(官方文档 MCP)
- 文档:
vjcad/doc/command/api-reference.md、vjcad/doc/guide/quick-start.md - 示例:
vjcad/example/input/02getpointwithbase.js、vjcad/example/command/04statemachine.js、vjcad/example/input/06getkeyword.js