测量角度
下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中测量角度的功能,该功能中用户选中不平行的两条直线后,将根据设置的标注位置标注出这两条直线之间的角度。测量角度功能能够帮助用户快速掌握图纸中直线图元之间的角度大小,方便统计工程量。
功能实现
- 获取目标直线
我们可以通过 MxCADResbuf 设置过滤器,再结合调用 MxCADUiPrEntity 在图纸中选取需要测量的两条不平行的目标直线对象。在选取过程中,为了方便我们观察选中的直线,我们可以调用 McDbLine.highlight() 方法设置高亮。
ts
// 设置过滤器,过滤出直线
const filter = new MxCADResbuf();
filter.AddMcDbEntityTypes('LINE')
// 选择第一条直线
const getLine1 = new MxCADUiPrEntity();
getLine1.setMessage('请选择一条直线');
getLine1.setFilter(filter);
const entId1 = await getLine1.go();
if(!entId1) return;
const line1 = entId1.getMcDbEntity() as McDbLine;
// 设置高亮
line1.highlight(true);
// 选择第二条直线
const getLine2 = new MxCADUiPrEntity();
getLine2.setMessage('请选择第二条直线');
getLine2.setFilter(filter);
const entId2 = await getLine2.go();
if(!entId2) return;
const line2 = entId2.getMcDbEntity() as McDbLine;
// 设置高亮
line2.highlight(true);
- 设置标注位置并绘制角度标注
根据上述步骤我们已经获得了需要标注角度的两条直线,因此我们可以直接调用 McDb2LineAngularDimension 设置角度标注的基本信息,调用 MxCADUiPrPoint 取点对象设置标注点的位置,并通过 MxCADUiPrPoint.setUserDraw() 方法动态绘制角度标注。其中,我们可以通过 McObject.addDimStyle() 方法自己设置角度标注的基本样式。
ts
// 设置角度标注样式
const dimStyleId = MxCpp.getCurrentMxCAD().addDimStyle("MyDimStyle2", "41,0.18,141,0.09,40,20", "77,1,271,3", "", "");
// 构造角度标注
const angleDim = new McDb2LineAngularDimension();
angleDim.xLine1Start = line1.startPoint;
angleDim.xLine1End= line1.endPoint;
angleDim.xLine2Start = line2.startPoint;
angleDim.xLine2End = line2.endPoint;
angleDim.dimensionStyle = dimStyleId;
// 关闭高亮设置
line1.highlight(false);
line2.highlight(false);
// 设置角度标注位置
const getPos = new MxCADUiPrPoint();
getPos.setMessage("请设置角度标注的位置");
// 动态绘制
getPos.setUserDraw((pt, pw) => {
angleDim.arcPoint = pt;
pw.drawMcDbEntity(angleDim)
});
const position = await getPos.go();
if(!position) return;
angleDim.arcPoint = position;
MxCpp.getCurrentMxCAD().drawEntity(angleDim)
功能实践
实践效果如下:
- 点击测量角度按钮,执行测量角度方法
- 选中目标直线对象(点选两条不相交的直线)
- 设置标注点位置
- 成功绘制测量标注内容