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
// 指定移动基点
let getPoint = new MxCADUiPrPoint();
getPoint.setMessage("\指定基点");
getPoint.clearLastInputPoint();
let ptBase = await getPoint.go();// 取点
if (!ptBase) return;

// 指定移动最终位置
getPoint.setMessage("指定移动到点");
getPoint.setBasePt(ptBase);
getPoint.setUseBasePt(true);

// 动态绘制实体移动
getPoint.setUserDraw((pt, pw) => {
    ss.forEach(id=>{
        let tmp: McDbEntity = id.clone() as McDbEntity;
        tmp.move((ptBase as any), pt);
        pw.drawMcDbEntity(tmp);
    })
});

let ptMoveTo = await getPoint.go(); // 取点
if (!ptMoveTo) return;
  1. 移动实体

在上述步骤中,我们获取到了移动的基点和移动后的位置,因此,我们可以直接调用 McDbEntity.move() 方法来移动对象。移动后,调用 McObject.updateDisplay() 方法来更新图纸显示。

ts
// 移动实体
ss.forEach(id=>{
    let tmp: McDbEntity = id.getMcDbObject() as McDbEntity;
    tmp.move((ptBase as any), ptMoveTo);
});
// 更新显示
MxCpp.getCurrentMxCAD().updateDisplay();

功能实践

实践效果如下:

  • 点击移动按钮,执行移动方法
  • 点击左键选择目标实体,点击右键结束选择(也可直接框选)
  • 根据命令行提示点击左键设置移动基点
  • 移动鼠标将实体放置在目标位置
  • 点击右键确定实体移动位置,成功移动实体