镜像
下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的镜像功能。该功能中用户可以框选或点选目标实体对其进行镜像旋转,用于编辑图纸内容。在我们文档的常用编辑操作中已经对镜像操作做了基础讲解,下面我们将在此基础上实现能与用户交互的镜像功能。
功能实现
- 选中目标实体
我们可以调用 MxCADSelectionSet 选择需要进行镜像旋转的实体。
ts
// 选择需要镜像的对象
let ss = new MxCADSelectionSet();
if (!await ss.userSelect("\n选择移动对象")) return;
- 设置镜像参考线
我们通过调用 MxCADUiPrPoint 取点对象来确定镜像参考线的开始点和结束点。在设置过程中,我们可以通过 MxCADUiPrPoint.setUserDraw() 动态绘制镜像对象,能够使我们更加直观的看到镜像旋转后的对象位置。
ts
// 获取镜像参考线开始点与结束点
const getStartPt = new MxCADUiPrPoint();
getStartPt.setMessage('请指定镜像线的第一点');
// 取点
const startPt = await getStartPt.go();
if (!startPt) return;
const getEndPt = new MxCADUiPrPoint();
getEndPt.setMessage('请指定镜像线的第二点');
// 动态绘制镜像参考线与镜像对象
getEndPt.setUserDraw((pt, pw) => {
const line = new McDbLine(startPt, pt);
pw.drawMcDbEntity(line);
ss.forEach((objId: McObjectId) => {
const ent = objId.getMcDbEntity().clone() as McDbEntity;
ent.mirror(startPt, pt);
pw.drawMcDbEntity(ent)
});
})
// 取点
const endPt = await getEndPt.go();
if (!endPt) return;
- 镜像旋转对象
在上述步骤中,我们获取到了镜像参考线的开始点与结束点,因此,我们可以直接调用 McDbEntity.mirror() 方法来镜像旋转对象。移动后,调用 McObject.updateDisplay() 方法来更新图纸显示。
ts
const mxcad = MxCpp.getCurrentMxCAD();
// 镜像旋转实体
ss.forEach((objId: McObjectId) => {
const ent = objId.getMcDbEntity().clone() as McDbEntity;
ent.mirror(startPt, endPt);
mxcad.drawEntity(ent)
});
// 更新显示
mxcad.updateDisplay();
功能实践
实践效果如下:
- 点击镜像按钮,执行镜像方法
- 点击左键选择目标实体,点击右键结束选择(也可直接框选)
- 根据命令行提示点击左键设置镜像参考线起点
- 再次点击左键设置镜像参考线结束点
- 成功绘制镜像后的对象