Skip to content
On this page

偏移

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

功能实现

  1. 选中目标实体

我们可以调用 MxCADResbuf 设置过滤器,然后使用 MxCADUiPrEntity 筛选出需要进行偏移的对象。

ts
//获取偏移对象
let filter = new MxCADResbuf();
filter.AddMcDbEntityTypes("CIRCLE,ARC,LINE,LWPOLYLINE,ELLIPSE");
let getEvent = new MxCADUiPrEntity();
getEvent.setFilter(filter);
getEvent.setMessage('指定偏移对象');
let event_id = await getEvent.go();
if (!event_id) return;
// 设置实体高亮
let event = (await event_id.getMcDbEntity()) as McDbCurve;
event.highlight(true);
  1. 设置偏移距离

我们通过调用 MxCADUiPrDist 根据用户设置的两个点确定偏移距离。

ts
//获取偏移距离
const getOffDist = new MxCADUiPrDist();
getOffDist.setMessage('请输入偏移距离');
const distVal = await getOffDist.go();
if (!distVal) return;
const offDist = getOffDist.value();
  1. 指定偏移方向

在上述步骤中,我们获取到了旋转角度,因此,我们可以直接调用 McDbCurve.offsetCurves() 方法来旋转对象。移动后,调用 McObject.updateDisplay() 方法来更新图纸显示。

ts
// 指定偏移方向
const getPoint = new MxCADUiPrPoint();
getPoint.setMessage('请指定偏移方向');
// 绘制动态效果
getPoint.setUserDraw((pt, pw) => {
    let objArr = event.offsetCurves(offDist, pt);
    if (objArr.length() === 0) return;
    objArr.forEach((obj: McDbObject) => {
        pw.drawMcDbEntity(obj as McDbEntity);
    });
})
const pt = await getPoint.go();
if (!pt) return;
// 偏移实体
event.offsetCurves(offDist, pt).forEach((obj: McDbObject) => {
    if(obj) mxcad.drawEntity(obj as McDbEntity);
});
event.highlight(false);
mxcad.updateDisplay();

功能实践

实践效果如下:

  • 点击偏移按钮,执行偏移方法
  • 点击左键选择目标实体
  • 根据命令行提示点击左键并拖动鼠标设置偏移距离
  • 移动鼠标再次点击左键设置偏移距离(或输入框内直接输入偏移距离值摁下enter键)
  • 移动鼠标指定实体偏移方向
  • 点击鼠标左键确定实体偏移方向,成功偏移对象