Skip to content
On this page

提取文字

下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的文字加框功能。该功能中用户自主选择目标文字实体,根据文字所在位置为文字实体加一个外边框。文字加框功能能够帮助用户着重标注文字,或修改显示形式等。

功能实现

  1. 选中目标文字实体

我们可以调用 MxCADResbuf 设置过滤器,再通过 MxCADUtility.userSelect() 方法过滤出选择实体中的单行文本对象和多行文本对象。

ts
// 设置过滤器
const filter = new MxCADResbuf([DxfCode.kEntityType, "MTEXT,TEXT"]);
// 选择文字对象
const ss = new MxCADSelectionSet();
if (!await ss.userSelect("请设置文字提取范围", filter)) return;
if (ss.count() == 0) return;
  1. 提取文字内容

我们根据 McObjectId.getMcDbEntity() 获取得到目标文字实体,通过 McDbEntity.objectName 属性获取到实体名字,由于在上述步骤中我们过滤出的都是文字实体,因此我们只需要判断是多行文本类,还是单行文本类,并根据不同的文字类调用相应的文本属性获取文本信息。

ts
let content: string = '';
// 遍历所有文字实体获取文字信息
ss.forEach(id => {
    const ent = id.getMcDbEntity();
    const objName = ent.objectName;
    if (objName === 'McDbText') {
        const _clone = ent.clone() as McDbText;
        content += `${_clone.textString}\n`;
    } else if (objName === 'McDbMText') {
        const _clone = ent.clone() as McDbMText;
        content += _clone.contents.replace('\\P', `\n`);
    }
});
// 整合文本信息
console.log(content)

功能实践

实践效果如下:

  • 点击提取文字按钮,执行提取文字方法
  • 点击左键选择目标文字实体,点击右键结束选择
  • 成功将目标文本信息提取到文本框中