移动
下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的移动功能。该功能中用户可以框选或点选目标实体对其进行移动,用于编辑图纸中实体的位置。在我们文档的常用编辑操作中已经对移动操作做了基础讲解,下面我们将在此基础上实现能与用户交互的移动功能。
功能实现
- 选中目标实体
我们可以调用 MxCADSelectionSet 选择需要进行移动的实体。
ts
// 选择需要移动的对象
let ss = new MxCADSelectionSet();
if (!await ss.userSelect("\n选择移动对象")) return;
- 设置移动基点和移动位置
我们通过调用 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;
- 移动实体
在上述步骤中,我们获取到了移动的基点和移动后的位置,因此,我们可以直接调用 McDbEntity.move() 方法来移动对象。移动后,调用 McObject.updateDisplay() 方法来更新图纸显示。
ts
// 移动实体
ss.forEach(id=>{
let tmp: McDbEntity = id.getMcDbObject() as McDbEntity;
tmp.move((ptBase as any), ptMoveTo);
});
// 更新显示
MxCpp.getCurrentMxCAD().updateDisplay();
功能实践
实践效果如下:
- 点击移动按钮,执行移动方法
- 点击左键选择目标实体,点击右键结束选择(也可直接框选)
- 根据命令行提示点击左键设置移动基点
- 移动鼠标将实体放置在目标位置
- 点击右键确定实体移动位置,成功移动实体