CATIA二次开发—强大的Selection

简介: CATIA二次开发—强大的Selection

一、前言


我的一天 🌞 (按照推文发送的时间来说应该是我的昨天):早上7:40起床,洗漱吃完早饭9:00坐在电脑面前,打开Typora,看看自己整理的论文思路,再看一看GoodNote中的其他学者的论文。嗯,不出所料,这一块能写的点别人都一个不落地写过了。稍微有点了思路,于是想码点字,写一个删一个,写一行删一行,就这样来来回回,陷入自我怀疑。10:00实在坐不住了,骑车去淞南公园转一转,调整一下心态,发现大爷大妈的生活比我精彩多了。11:00去新江湾吃个牛丼饭,可能是在宿舍没状态,所以吃完饭就骑车去了公司。到了公司正好12:30,平时午休的点,困了,先来一觉。13:00开始起来干活,到17:00时共计码了400个字,也就是说平均每小时100个字😂,就这效率还感觉整个人被掏空了。食堂吃个晚饭,就骑车回去了,19:00准时到长江西路羽毛球馆打球,遇到高手还被教育了一顿,顺利地把写论文的精神压力转移到身体上。21:00离开球馆,22:00洗完澡,22:30再次回到宿舍的电脑面前,发现自己还欠一篇推文,不过推文比论文简单多了,怎么写都行,不看专家脸色,就算写得不好,粉丝也不可能顺着网线来打我啊。


二、方法及步骤


不扯了,今天这期还是继续CATIA二次开发系列,主要讲Selection的内容。因为之前做过Revit二次开发的缘故,在接触到CATIA选择的时候,我发现两者截然不同。Revit API中的select,字面意思,就是用于过滤选择的(印象里是这样的,如有不妥可私信我),而CATIA中的Selection被赋予了很多功能,例如隐藏、删除、更改几何样式等都需要通过Selection来完成。当然这也很容易理解,试想一下软件的实际操作,如果你想隐藏一个元素,是不是先得先选中它,然后在它的基础上右击Hide,完成隐藏。在Revit中,只要在代码层面拿到对应的元素实例就可以进行隐藏等操作了,而CATIA在获取元素实例后需要先将其添加至选择集,然后对当前选择集进行属性设置,实现隐藏等功能。


讲起来很简单,但在实际代码编写过程中,还会遇到很多像这样的坑,例如你想把一个HybridShape从一个Part复制到另一个Part,想想好像挺简单的一个事,遍历结构树,拿到被复制元素,Copy();然后再遍历结构树拿到另一个Part,执行Paste()。但如果你的ActivePart不是被复制元素所在的那个Part,这个程序是走不通的。下面的内容我就直接上干货了,写完可以早点休息。


2.1 单选

Selection selection = CATIA.ActiveEditor.Selection;
// 清空选择
selection.Clear();
Array filter = Array.CreateInstance(typeof(object),1);
// ElemType 是元素类型,一般为VPMReference HybridBody等 
filter.SetValue(ElemType, 0);
// iMaySkipInteractiveSelection为true,程序首先去判断当前已选元素是否符合要求,再决定是否需要交互选择(即同下)
// iMaySkipInteractiveSelection为false,用户去树中选择一个符合要求的元素,然后程序清空Selection并加当前选择加入Selection
string status = selection.SelectElement(filter, ref msg, false);

2.2 多选

// 建议使用SelectElement3;不推荐使用SelectMultipleElements
public string GetSelectedElems(INFITF.Application CATIA, string ElemType, string msg)
{
    Selection selection = CATIA.ActiveEditor.Selection;
    selection.Clear();
    Array filter = Array.CreateInstance(typeof(object), 1);
    filter.SetValue(ElemType, 0);
    string status = selection.SelectElement3(filter, ref msg, true, CATMultiSelectionMode.CATMultiSelTriggWhenSelPerf, false);
    return status;
}

🔔选择之后一定要对status进行判断,否则程序是有缺陷的

2.3 删除

Selection.Delete();

2.4 隐藏元素

// 先加入选择集
Selection sel = CATIA.ActiveEditor.Selection;
sel.Clear();
sel.Add(splitStarCurve);
sel.Add(extraStartPoint);
sel.Add(extraEndPoint);
// 隐藏
sel.VisProperties.SetShow( CatVisPropertyShow.catVisPropertyNoShowAttr);
sel.Clear();

2.5 修改几何样式

Selection sel = activeEditor.Selection;
sel.Add(StartLine_L);
sel.VisProperties.SetRealColor(255,0,0,0);
sel.VisProperties.SetRealLineType(2, 0);
sel.Clear();

2.6 隔离(使用StartCommand)

大家可以多多尝试 StartCommand,发掘一些新的功能字符串

ActiveEditor.Selection.Clear();
ActiveEditor.Selection.Add(item);
CATIA.StartCommand("Isolate");
ActiveEditor.Selection.Clear();

三、参考资料

《3DEXPEROENCE Automation Help》

相关文章
|
6月前
|
Kubernetes 监控 IDE
K8S 实用工具之三 - 图形化 UI Lens
K8S 实用工具之三 - 图形化 UI Lens
|
JavaScript
Altium Designer简介及使用流程
Altium Designer(简称AD)是一个设计原理图和PCB的专业软件,功能十分强大,且使用方便,比较容易上手。它的前身大家也比较熟悉,就是Protel。在学校里学习的就是Protel,不过除了完成作业,就没有用过Protel。现在bug身边好多老工程师还是使用Protel设计PCB,AD是Protel的升级版。对于AD的发展史我们这里就不做详细介绍,有兴趣的可以上网搜一下,这里我们主要简单介绍一下AD及其使用流程,这里bug使用的AD19版的,软件图标如下图所示:
541 1
|
存储 数据管理 程序员
CATIA V6 二次开发—概述
CATIA V6 二次开发—概述
CATIA V6 二次开发—概述
|
存储 编解码 人工智能
CDR平面设计软件2023又开始放大招啦!CorelDRAW Graphics Suite 2023有哪些新增功能?
CorelDRAW2023是一款非常专业的电脑图像设计工具。该产品推出了全新的2023版本,在功能和体验上更进一步,最新的填充和透明设备功能可以完全控制任何类型的纹理,适用于网络摄影、印刷项目、艺术、排版等,让你可以更好的进行图像设计图形设计软件
375 0
CDR平面设计软件2023又开始放大招啦!CorelDRAW Graphics Suite 2023有哪些新增功能?
|
自然语言处理 API
CATIA二次开发—参数那点事
CATIA二次开发—参数那点事
CATIA二次开发—参数那点事
|
算法 定位技术 C++
TE二次开发:简说LOD
skyline二次开发:简说LOD
115 0
Revit二次开发—获取并修改指定标高
Revit二次开发—获取并修改指定标高
|
数据挖掘
GraphPad Prism 9.4.1英文版科学数据绘图工具(含激活工具)
GraphPad Prism 9 是一款专为科学研究而设计的数据分析和数据绘图软件。
472 0
GraphPad Prism 9.4.1英文版科学数据绘图工具(含激活工具)