偏移
下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的偏移功能。该功能中用户可以自主选择目标实体对其进行偏移,用于编辑图纸内容。在我们文档的常用编辑操作中已经对旋转操作做了基础讲解,下面我们将在此基础上实现能与用户交互的旋转功能。
功能实现
- 选中目标实体
我们可以调用 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);
- 设置偏移距离
我们通过调用 MxCADUiPrDist 根据用户设置的两个点确定偏移距离。
ts
//获取偏移距离
const getOffDist = new MxCADUiPrDist();
getOffDist.setMessage('请输入偏移距离');
const distVal = await getOffDist.go();
if (!distVal) return;
const offDist = getOffDist.value();
- 指定偏移方向
在上述步骤中,我们获取到了旋转角度,因此,我们可以直接调用 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键)
- 移动鼠标指定实体偏移方向
- 点击鼠标左键确定实体偏移方向,成功偏移对象