CATIA二次开发—参数那点事

简介: CATIA二次开发—参数那点事

一、前言


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


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


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


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


二、方法及步骤

2.1 创建参数集/参数

2.1.1 新建参数


20210307092527400.png

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

2021030709260710.png


表1.获取 Parameters 对象实例

Where you create parameter How 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呈现了一个参数集嵌套参数集的结构层次。


20210307092624279.png

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》

相关文章
|
6月前
|
JSON 定位技术 开发工具
基于Python开发的高德地图+58租房系统(源码+可执行程序+程序配置说明书+程序使用说明书)
基于Python开发的高德地图+58租房系统(源码+可执行程序+程序配置说明书+程序使用说明书)
125 0
|
JSON 数据格式
Pyqt5-开源工具分解功能(配置文件+快捷写入)
Pyqt5-开源工具分解功能(配置文件+快捷写入)
100 1
|
存储 数据管理 程序员
CATIA V6 二次开发—概述
CATIA V6 二次开发—概述
CATIA V6 二次开发—概述
|
API C# C++
CATIA二次开发—漫谈开发环境
CATIA二次开发—漫谈开发环境
CATIA二次开发—漫谈开发环境
|
C# 图形学
Unity之C#高级开发①
Unity之C#高级开发①
Unity之C#高级开发①
|
存储 安全 程序员
CATIA二次开发—探讨CATIA单位问题
CATIA二次开发—探讨CATIA单位问题
CATIA二次开发—探讨CATIA单位问题
|
开发工具 C# C++
Revit2019二次开发外部工具(附加模块)的安装
Revit2019二次开发外部工具(附加模块)的安装
Revit2019二次开发外部工具(附加模块)的安装
Revit二次开发—获取并修改指定标高
Revit二次开发—获取并修改指定标高