基于达索系统3DEXPERIENCE平台航空航天行业复合材料设计解决方案
在上一期中,我们了解了CATIA VBA宏,Automation帮助文档及VB.NET的开发流程。本期将带您走进「创建标题栏」实例的实际编码环节,带您一起一步步拆解整个代码开发过程。
初始化工程图变量
1. 获取窗口中的图纸对象,我们可以在「Automation」帮助中查询Drafting的Object接口:
2. 在DrawingRoot Object中可以看到样例中也告知了如果来获取一个图纸对象:
Visual Basic |
3. 接下来获取当前激活的图纸页大小,可参考DrawingSheets Collection Object中的结构:
Visual Basic |
获取激活图纸页的大小
1. 在Drawing Sheet Object接口集中提供了获取图纸页大小的方法:
2. 点击即可跳转到该方法的详情页,展示了调用样例:
Visual Basic |
3. 这时,可以验证一下是否获取到了当前激活图纸页正确的长宽,我们可使用VB中的Debug来进行测试:
Visual Basic |
创建直线(使用直线方法来演示图框的创建)
1. 在Factory2D的接口中可以看到创建直线的方法;
2. 从接口不难看出,直线的创建需要通过对两端点的XY坐标值定义来实现,为了后续在重复创建时获取到已创建的直线快速删除,需要对创建出的直线进行改名操作,通常,我们需要两句代码来完成直线的创建;
3. 但是我们也可以借助自定义函数,将两步变为一步,下面将介绍如何使用自定义函数,快速创建直线;
4. 在创建函数前,先添加一个引用「CATIA CATSketcherlDLItf Object Library」,添加这条库引用「Imports MECMOD」;
5. 先将“Factory2D”变量定义出来;
6. 这里要注意一点,我们将在背景视图中创建图框标题栏,所以iView对象要获取背景视图,背景视图为iViews的第二个item对象;
Visual Basic |
7. 下面开始写自定义函数;
Visual Basic |
8. 自定义函数创建完毕,在开始绘制直线前,我们要了解到一个准则:在一个视图中创建草图对象(直线),我们需要先激活视图,创建完毕后,可再回到工作视图中,因此我们可构建一个创建标题栏的总过程;
Visual Basic |
9. 并且,在运行命令时,可能已存在了创建的标题栏,则此时需要先删除历史的标题栏,再重新创建,意味着我们需要搜索到全部的标题栏元素,可借助Selection中的Search方法;
10. 这样也需要将所有的标题栏元素给定一套统一的命令规则,例如每个元素的名称前缀都带有:“CUS_”关键字,可通过此关键字定位搜索;
Visual Basic |
11. 先创建出外框线;
Visual Basic |
12. 将创建图框框线的过程程序加到「CUS_CreateFrame」总过程中;
Visual Basic |
13. 将「CUS_Initial」、「CUS_GetPaperSize」及「CUS_CreateFrame」均添加到main过程下;
Visual Basic |
14. 此时,可运行一下程序,调试代码查看运行结果,四条直线在背景视图中创建;
15. 但是创建出的直线是默认的粗实线,我们可使用“SetRealWidth”方法来修改线宽,其中iLineWidth与CATIA中的线宽序号一致;
Visual Basic |
16. 回到创建外框线的过程下,对线条修改线宽;
Visual Basic |
17. 接着创建剩下的直线(默认创建即为粗实线,也可通过修改线型确保创建的为2号粗实线):
Visual Basic |
18. 运行一下程序,调试代码查看运行结果;
19. 至此,所有框线创建完毕;
创建文本
1. 所有框线创建完毕后,接下来就是对标题栏文本的创建,标题栏文本可分为两类,一类是表头文本,还有一类是刷新属性文本,我们可分开进行创建;
2. 在DrawingText Object中可以看到创建文本对象的方法;
3. 可参考示例中的add方法,得出创建文本需要填写文本的值、X、Y坐标;
4. 创建文本的同时,也需要对文本进行二次定义,有如下规则:
a.文本的字体为:3ds (OpenType);
b. 文本的字号为:3.5;
c. 文本的定位点方式为:中部居中
d. 文本对齐方式为:居中;
e. 文本的自动换行宽度设置为当前标题的列宽;
5. 从帮助文档中不难发现,上文中的设定需要使用方法对文本逐句定义;
6. 定义创建文本前的变量:
Visual Basic |
7. 可参考上文,对创建文本也定义一个自定义函数;
Visual Basic |
8. 开始创建文本(也可提前定义好数组,通过for循环创建);
Visual Basic |
18. 将创建文本的过程添加到创建图框的过程中;
Visual Basic |
19. 运行一下程序,调试代码查看运行结果;
20. 至此,所有文本对象创建完毕;
获取关联数模并刷新属性文本
1. 标题栏中有三个文本是从关联数模的属性上获取,分别是:“标题”、“描述”和“版本”;
2. 其他的文本都是含有各自的获取逻辑;
3. 新建一个刷新文本的过程;
Visual Basic |
5. 因此,我们需要写if语句来判断当前获取到的数字对应是什么图幅大小;
Visual Basic |
6. 下一个处理比例文本逻辑,这里我们借助DrawingText Object中的InsertVariable方法,直接将sheet页的比例参数添加到文本中保持关联,这样当人为修改图纸页比例后,图框中比例文本会自动刷新;
Visual Basic |
7. 下一个处理日期文本,使用vb.net的获取日期方法;
Visual Basic |
8. 下一个处理页码文本,生成格式为「当前页数/总页数」,所以需要获取当前工程图中的总页数(使用count方法可获取系统中对象的数量)与当前激活的图纸页为第几页;
Visual Basic |
9. 接下来处理从投影数模获取的属性值,在获取之前,我们需要先获取图纸中关联的投影数模,可使用“GetAssociatedRootProduct”函数来获取到图纸的投影数模,但是其需要从某个视图中获取,一般我们使用第一个sheet页中第三个视图对象作为识别对象(一般第三个视图多为投影视图);
10. 先添加一个引用:CATIA ProductStructureClientIDLItf Object Libran,顶行添加一个代码语句:“Imports ProductStructureClientIDL”;
11. 那么先撰写获取投影数模的代码;
Visual Basic |
12. 可使用GetAttributeValue方法获取数模的属性;
Visual Basic |
13. 将获取关联数模刷新属性的过程添加到创建图框的过程中;
Visual Basic |
14. 运行一下程序,调试代码查看运行结果;
15.至此,整个编码过程结束了,所有的逻辑都已完成处理;
部署使用
1.vb.net中编写的代码,会自动在本地的Debug路径下生成一个exe文件;
2.可直接双击运行这个exe文件,完成程序的运行;
3. 但是通常情况,我们都是通过在CATIA点击命令来运行程序,这里可以借助vba来调用这个exe文件;
4. 在CATIA中新建一个vba宏文件,新建一个module,写入以下代码;
Visual Basic |
5. 将宏命令配置到工具条中,点击命令即可运行程序;
总结
1. 在开发时,「DSYAutomation」帮助文档是我们最好的老师。文档中提供了大量示例,可以帮助我们快速找到合适的接口方法。所以,多花点时间去熟悉和善用帮助文档,会让开发过程更加高效和顺畅。
2. 有时候不知道OOTB命令对应的接口,可尝试使用宏录制功能录取操作代码(不一定能录取成功)。
3.最后,希望这篇文章能帮助到想自己进行一些CATIA二次开发,但是没有什么基础的朋友。VB.NET是你一个很好的选择,期待大家在CATIA的世界里越走越远 ヾ(•ω•`)o
关于钛闻软件
上海钛闻软件技术有限公司源自于上海江达科技发展有限公司,自2024年1月1日起,钛闻软件全面承接上海江达的人员、业务和相关资质。
钛闻软件在全国设有10个办事处,拥有超过200余人的专家顾问团队和近30年的行业经验,公司致力于向交通运输、工业装备、基础设施、航空航天、高科技电子及生命科学等行业客户提供先进的数字化解决方案及企业级应用系统。
作为达索系统重要的合作伙伴,钛闻软件在中国拥有1300多家客户。这些客户长期使用达索系统从需求、设计、工艺、仿真到制造的全生命周期解决方案,总装机量超过16000多套。钛闻软件非常注重客户的实施服务和应用支持,紧扣客户需求,引入最佳实践,让先进软件发挥出最大价值。