Skip to content
On this page

点到直线距离

下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中测量点到直线距离的功能,该功能中用户选中测量点与目标直线后,将标注出点到直线的垂直距离。测量点到直线距离功能能够帮助用户快速掌握目标点与直线间的垂直距离,方便统计工程量。

功能实现

  1. 取点

我们可以利用 MxCADUiPrPoint 取点对象在图纸中选取需要测量的目标点对象。

ts
const getPt = new MxCADUiPrPoint();
getPt.setMessage('请选择一个测量点');
const pt = await getPt.go();
if (!pt) return;
  1. 获取目标直线对象

我们可以利用选择实体对象 MxCADUiPrEntity() 根据用户鼠标点击的坐标得到对应的实体,其中我们需要只选择直线对象,因此,我们再调用 MxCADResbuf() 为选择实体对象设置过滤器来过滤出目标实体。

ts
// 设置过滤器   
const filter = new MxCADResbuf([DxfCode.kEntityType, "LINE"]);
const getEnt = new MxCADUiPrEntity();
getEnt.setMessage('请选择一条直线')
getEnt.setFilter(filter);
const entId = await getEnt.go();
if (!entId.id) return;
const line = entId.getMcDbEntity() as McDbLine;
  1. 绘制距离标注

在 mxcad 中直线对象对应的实体类为 McDbLine ,该类提供了获取或设置直线相关信息的属性或方法,我们可以根据我们的功能需求去选择调用。在测量点到直线距离的功能中,我们可以调用 McDbLine.getClosestPointTo() 方法获取目标点对线到目标直线对象上的垂足点,该垂足点到目标点对象的距离就是点到直线的距离。最后我们再调用 mxcad.drawDimAligned() 绘制对齐标注。

ts
// 获取垂点
const verPt = line.getClosestPointTo(pt, true).val;

let id!: McObjectId;
const mxcad = MxCpp.getCurrentMxCAD();
const getPos = new MxCADUiPrPoint();
getPos.setMessage('请设置尺寸线的位置');
getPos.setUserDraw((point, pw) => {
    id && id.erase()
    id = mxcad.drawDimAligned(pt.x, pt.y, verPt.x, verPt.y, point.x, point.y);
});
const position = await getPos.go();
if (!position){
    id && id.erase()
    return
};
id && id.erase();
mxcad.drawDimAligned(pt.x, pt.y, verPt.x, verPt.y, position.x, position.y);

功能实践

实践效果如下:

  • 点击测量圆按钮,执行测量圆方法
  • 选中目标圆对象
  • 设置标注点位置
  • 成功绘制测量标注内容