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》

相关文章
|
1天前
|
Kubernetes 监控 IDE
K8S 实用工具之三 - 图形化 UI Lens
K8S 实用工具之三 - 图形化 UI Lens
|
10月前
|
数据库
如何利用ANSYS Material Designer,对复合材料进行均质化分析?
复合材料结构的数值模拟由于涉及长度尺度的不同而具有一定的挑战性。虽然微观有限元方法可以用来模拟系统的结构力学问题(解决所有的长度尺度),但对于复杂大型产品的设计它是不实际的。因为所需的单元数量将是天文数字,计算成本会非常之高。
如何利用ANSYS Material Designer,对复合材料进行均质化分析?
|
算法 定位技术 C++
TE二次开发:简说LOD
skyline二次开发:简说LOD
|
存储 编解码 人工智能
CDR平面设计软件2023又开始放大招啦!CorelDRAW Graphics Suite 2023有哪些新增功能?
CorelDRAW2023是一款非常专业的电脑图像设计工具。该产品推出了全新的2023版本,在功能和体验上更进一步,最新的填充和透明设备功能可以完全控制任何类型的纹理,适用于网络摄影、印刷项目、艺术、排版等,让你可以更好的进行图像设计图形设计软件
318 0
CDR平面设计软件2023又开始放大招啦!CorelDRAW Graphics Suite 2023有哪些新增功能?
|
自然语言处理 API
CATIA二次开发—参数那点事
CATIA二次开发—参数那点事
CATIA二次开发—参数那点事
|
运维 安全 前端开发
你好,生产力(番外篇1) - Linear, by the developer, for the developer
在生产力工具大类里,Project Management & Issue Tracking Tool(国内一般统称项管工具)可以说是其中历史最悠久也是最拥挤的品类。一方面项管工具是任何一家信息化管理的公司里最基本,最核心的工具,承担着安排计划,管理进度,追踪问题,串联其它各平台的任务。另一方面项管工具表面上的门槛比较低,Todo list其实也称得上是一个轻量化的项管工具。这两个因素叠加在
1371 0