Skip to content
On this page

镜像

下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的镜像功能。该功能中用户可以框选或点选目标实体对其进行镜像旋转,用于编辑图纸内容。在我们文档的常用编辑操作中已经对镜像操作做了基础讲解,下面我们将在此基础上实现能与用户交互的镜像功能。

功能实现

  1. 选中目标实体

我们可以调用 MxCADSelectionSet 选择需要进行镜像旋转的实体。

ts
// 选择需要镜像的对象
let ss = new MxCADSelectionSet();
if (!await ss.userSelect("\n选择移动对象")) return;
  1. 设置镜像参考线

我们通过调用 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;
  1. 镜像旋转对象

在上述步骤中,我们获取到了镜像参考线的开始点与结束点,因此,我们可以直接调用 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();

功能实践

实践效果如下:

  • 点击镜像按钮,执行镜像方法
  • 点击左键选择目标实体,点击右键结束选择(也可直接框选)
  • 根据命令行提示点击左键设置镜像参考线起点
  • 再次点击左键设置镜像参考线结束点
  • 成功绘制镜像后的对象