CATIA二次开发—参数那点事

CATIA二次开发:参数创建、读取与管理
本文详细介绍了CATIA二次开发中关于参数的操作,包括如何创建参数集和参数、获取参数及其值、删除以及修改参数。通过实例展示了在零件级别和几何图形集中创建不同类型的参数,并提供了获取参数集的代码示例。同时,文章讨论了参数值的读取,特别是有量纲参数的处理方法,并给出了删除和修改参数的步骤。

image-20201219153551001

一、前言

继《CATIA二次开发—遍历结构树》之后,上周停更了一次 CATIA 二次开发系列,一方面是正好那个时间点,走马观花式地读完了一篇英文文献,所以选择乘热先推送—《集成NLP和逻辑推理的自动合规检查平台》;另外一方面,笔者也在思考下面的章节如何安排,因为能拎出来讲的基础知识点不多了,后面有时间的话考虑出一些实战类的视频。

其实对于二开而言,知识点比较零散,对其学习的本质是针对软件 API 的实践总结以及少量的代码编写技巧。首先来谈 API 的实践总结。没有其他捷径,就是代码写得越多,总结得越多,对 API 功能的理解也就越深刻。当你拿到一个需求,你能第一时间反应出:这个能不能通过 API 来实现?如果能,那么实现的思路大概是什么,主要用到哪些 API ;如果不能,限制在哪,有没有曲线救国的可能?这些潜意识都是长期实践积累和总结才具备的,而且这个过程别人替代不了。就如笔者一直致力于分享自己的开发经验,其实也是督促自己进一步总结归纳,在自己受益的同时,也能让读者们少走一些弯路,能够更快地入门 CATIA 二次开发,实现所需的定制功能。

其次是少量的代码编写技巧。这里的“少量”是笔者的个人观点,若有不妥,请别当真。就笔者接触到的二次开发项目而言,开发过程中,代码编写上的困难不多见,毕竟是面向百度和谷歌编程的老司机 了🚗 ,难点其实主要集中在业务逻辑层面,尤其是当产品经理也吃不准逻辑的时候就更难了。所以上学那会我就经常调侃:业主并不清楚自己要什么,但当你写出一个程序给他的时候,他才知道自己不要什么。苦了写代码的人被迫做排除法😂。

好了,前言扯得有点多,抓紧进入正题。本期内容重点是讲 CATIA 中的参数,包括参数的创建删除读取写入一整套工作流。

二、方法及步骤

2.1 创建参数集/参数

2.1.1 新建参数

在这里插入图片描述

图1.用于创建参数的对象

首先 CATIA API 中用于创建参数的方法位于 Parameters 对象中(图1),所以想要新建参数就必须拿到 Parameters 对象实例。那么怎么去拿这个实例呢,这取决于你想要在哪新建参数(图2),例如是零件级别的参数,亦或者是几何图形集中的参数,它们对应不同的对象实例获取方法(表1)。

在这里插入图片描述

图2.左为零件级别新建参数,右为几何图形集内新建参数

表1.获取 Parameters 对象实例

Where you create parameterHow to get the Parameters instance
零件级别activePart.Parameters
几何图形集内部activePart.Parameters.SubList(hybridBody, true)

表2 为不同类型参数新建的具体方法

表2.新建不同类型的参数

参数类型方法
长度CreateDimension(“长度”,“LENGTH”,2000)
角度CreateDimension(“角度”, “ANGLE”, 1.8)
整数(Int)CreateInteger(“整数”,5)
实数(Real)CreateReal(“实数”,10)
字符串(String)CreateString(“字符串”,“hhh”)
布尔(Bool)CreateBoolean(“布尔”,false)
列表CreateList(“列表”)
2.1.2 新建参数集

如果我们对参数层级有要求的话,可能就需要新建参数集来对参数进行管理,例如下图3呈现了一个参数集嵌套参数集的结构层次。

在这里插入图片描述

图3.新建参数集并添加参数

Parameters paras = activePart.Parameters;
// 在零件参数集中新建“test”参数集
ParameterSet testParaSet = paras.RootParameterSet.ParameterSets.CreateSet("test");
// 在“test”参数集中新建参数
testParaSet.AllParameters.CreateBoolean("IsSuccess", false);

2.2 获取参数集/参数

2.2.1 获取参数集

同样以图3为例,如果想要获取 “test” 参数集,代码如下:

Parameters paras = activePart.Parameters;
ParameterSet childParaSet = paras.RootParameterSet.ParameterSets.GetItem("test) as ParameterSet;
2.2.2 获取参数及其值

获取参数与创建参数一致,均通过 Parameters 对象完成,并同样采用GetItem方法,代码如下:

划重点:activePart.Parameters 所拿到的参数并不只是零件中 Parameters 中的参数,而是零件中的所有参数,包括几何图形集中的几何参数等等

// 此方法虽也能获取到对应的参数,但毕竟会搜索零件中所有参数来找到对应的参数,会耗费计算资源
Parameter para1 = (Parameter)activePart.Parameters.GetItem("test1");
// 合理的获取方式
Parameters allParas = activePart.Parameters;
ParameterSet paras = allParas.RootParameterSet.AllParameters;
Parameter para1 = (Parameter)paras.GetItem("test1");
// 获取参数值
string value = para1.ValueAsString();

🔔另一个需要注意的是:ValueAsString() 方法在获取有量纲(单位)的参数值时,会一同把单位也读取出来。例如 某参数 = 100 mm,此时 value = “100mm”。

对此笔者提供一个解决方案,并非最优,仅供参考。

// 思路:对于有量纲参数,使用正则表达式,剔除非数字字符,
string[] items = para1.ValueAsString().ToCharArray();
// 这里先把第一个字符加进来,避免是负数时,负号被剔除
string realValue = items[0];
// 从1开始循环
for ( int i = 1; i < items.Count; i++ )
{
    if (Regex.IsMatch(items[i].ToString(),"[0-9]"))
    {
        realValue += item.ToString();
    }
}

2.3 删除参数集/参数

删除参数的应该不需要多讲,只要能拿到参数集或者参数,然后将其添加至选择集,即可删除。

sel.Clear();
sel.Add(para1);
sel.delete();

2.4 修改参数

参数的修改包括修改参数名和参数值,分别对应不同的方法,代码如下:

// 修改参数名称
para13.Rename("changedName");
// 修改值
para13.ValuateFromString("111");
// 可以带单位赋值,以确保不受软件系统单位设置的影响
para13.ValuateFromString("100mm");

三、参考资料

《3DEXPEROENCE Automation Help》

在这里插入图片描述
请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核小青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值