Skip to content
On this page

临时隐藏

下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的临时隐藏功能。该功能中用户可以选择三种操作方式:1.隐藏选中实体,2.隐藏未选中的实体,3.显示图纸上的所有实体。熟练使用临时隐藏功能能够帮助用户更加高速有效的编辑操作图纸,提升工作效率。

功能实现

  1. 设置操作选项

我们可以调用 MxCADUiPrKeyWord 根据用户输入得到关键词。然后,调用 MxCADUiPrKeyWord.setKeyWords() 方法将三种操作方式分别设置为三个选项,每一个选项都对应到一个关键字。

ts
// 设置关键字选项
const getKey = new MxCADUiPrKeyWord();
getKey.setMessage("\n输入选项")
getKey.setKeyWords("[隐藏(A)/隐藏未选(B)/全部显示(C)]");
const keyVal = await getKey.go();
if(!keyVal) return;
  1. 根据选项执行不同操作

在上述步骤中,我们设置了隐藏、隐藏未选、全部显示三个选项。在这三个选项中隐藏、隐藏未选两个操作项中我们通过调用 MxCADUtility.userSelect() 方法来获取用户选择,并根据选项对所选择的实体做对应的隐藏操作。最后,全部显示选项通过 MxCADSelectionSet.allSelect() 方法将所有隐藏的实体都显示在图纸中。

ts
let mxcad = MxCpp.getCurrentMxCAD();
// 根据选项设置对应操作
if (keyVal === 'A' || keyVal === 'B') {
    // 选择目标函数
    let aryId = await MxCADUtility.userSelect("选择目标的对象");
    if (aryId.length == 0) {
        return;
    }
    let arr: number[] = [];
    aryId.forEach((obj_id: McObjectId) => arr.push(obj_id.id))
    if (keyVal === 'A') {
        // 隐藏所选实体
        aryId.forEach(async (id) => {
            let event = await id.getMcDbEntity() as McDbEntity;
            let event_clone = event.clone() as McDbEntity;
            event_clone.visible = false;
            mxcad.drawEntity(event_clone);
            event.erase()
        })
    } else if ( keyVal === 'B') {
        // 反选
        // 获取图纸所有对象id,遍历筛除选择对象的id
        let selectArr = new MxCADSelectionSet();
        selectArr.allSelect();
        selectArr.forEach(async obj_id => {
            if (!arr.includes(obj_id.id)) {
                let event = await obj_id.getMcDbEntity();
                let event_clone = event.clone() as McDbEntity;
                event_clone.visible = false;
                mxcad.drawEntity(event_clone);
                event.erase()
            }
        })
    }
} else if (keyVal === 'C') {
    // 全部显示
    let selectArr = new MxCADSelectionSet();
    selectArr.allSelect();
    selectArr.forEach(async id => {
        let event: any = await id.getMcDbEntity();
        let event_clone = event.clone()
        if (event_clone.visible === false) {
            event_clone.visible = true;
            mxcad.drawEntity(event_clone);
            event.erase()
        }
    })
} else {
    return;
}

功能实践

实践效果如下:

  • 点击临时隐藏按钮,执行临时隐藏方法
  • 根据命令行提示选项关键词,在输入框输入目标关键词
  • 选择隐藏或隐藏未选选项则需要在图纸中选择需要隐藏,或需要反选的实体对象。 点击左键开始框选,或点选,点击右键结束选择
  • 成功执行对应操作