临时隐藏
下面我们将介绍如何利用 mxcad 插件实现在CAD图纸中的临时隐藏功能。该功能中用户可以选择三种操作方式:1.隐藏选中实体,2.隐藏未选中的实体,3.显示图纸上的所有实体。熟练使用临时隐藏功能能够帮助用户更加高速有效的编辑操作图纸,提升工作效率。
功能实现
- 设置操作选项
我们可以调用 MxCADUiPrKeyWord 根据用户输入得到关键词。然后,调用 MxCADUiPrKeyWord.setKeyWords() 方法将三种操作方式分别设置为三个选项,每一个选项都对应到一个关键字。
ts
// 设置关键字选项
const getKey = new MxCADUiPrKeyWord();
getKey.setMessage("\n输入选项")
getKey.setKeyWords("[隐藏(A)/隐藏未选(B)/全部显示(C)]");
const keyVal = await getKey.go();
if(!keyVal) return;
- 根据选项执行不同操作
在上述步骤中,我们设置了隐藏、隐藏未选、全部显示三个选项。在这三个选项中隐藏、隐藏未选两个操作项中我们通过调用 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;
}
功能实践
实践效果如下:
- 点击临时隐藏按钮,执行临时隐藏方法
- 根据命令行提示选项关键词,在输入框输入目标关键词
- 选择隐藏或隐藏未选选项则需要在图纸中选择需要隐藏,或需要反选的实体对象。 点击左键开始框选,或点选,点击右键结束选择
- 成功执行对应操作