首页/文章/ 详情

【pycatia】用python也能操作CATIA建模?

1年前浏览8169

关于CATIA VBA / Automation二次开发,小狼之前发过很多篇文章了。不过为了让一些刚接触的小伙伴更容易理解,我们再唠叨一遍:

  • CATIA软件里内置了一套自动化对象,好比某MOBA游戏的英雄;

  • 我们平常用鼠标键盘,可以操纵软件建模(控制英雄走路或释放技能);

  • 与游戏外挂/宏类似,CATIA也可以被程序脚本控制,让软件自动执行某些动作。


    综合以上内容,简单说,这种用程序代码代替鼠标键盘,控制软件进行自动建模的方式,就叫做基于Automation(或者叫自动化对象)的二次开发。


这些自动化对象,能听懂的程序语言不止一种,小编之前也都发过。除了软件自带的VBA,还有比如:

用VS VB.Net做CATIA二次开发

今天这篇文章,我们来介绍一个python中用于catia automation开发的库——pycatia。

提示:阅读这篇文章的内容,需要各位看官有VBA和Python的基础。如果没有,建议先看一下上面链接的文章。

关于这个库,Github链接如下。

https://github.com/evereux/pycatia

根据作者本人的说法:做这个库的初衷是为了用python实现测量功能(详见我上面第三个链接里那本书第七章内容)。后来不断地完善,截止到小编发这篇文章,已经更新到0.5.8版本,几乎涵盖了CATIA常用模块的API。

和小编写的书中纯com开发不同的是,使用这个库,你可以拥有属性和方法的自动联想,提高程序编写的效率。

与其他python库一样,我们可以通过如下命令行安装:

或者,如果你用了pycharm,可以在project interpreter setting里进行安装:

以上工作就绪之后,我们便可以编写python代码啦!接下来,我们就通过开发手册里自带的这个实例,来练练手~

这个例子的原理很简单:

一个圆上有一些等距阵列的点,在偏置某一距离的平面上的另一个圆上,有同样多的点,只是位置会错开一些。我们把对应的两个点连成一条线,再进阶一下,把相邻的两根线桥接一张曲面,再上个色。

按着上面的步骤,开始写代码:

首先,导入库,初始化一些基本对象与参数:

import pycatia
from pycatia.mec_mod_interfaces.part_document import PartDocument
from math import *
import random

# 创建一个新part文档,并初始化一些基本对象
catia = pycatia.catia()
doc = catia.documents.add('Part')
doc = PartDocument(doc.com_object)
sel = doc.selection
part = doc.part
hsf = part.hybrid_shape_factory
hb = part.hybrid_bodies.add()

pt_qtt = 20 # 圆上点的数量
dis_loc = 5 # 上下两层点错位的量
r1 = 50 # 下圆半径
r2 = 30 # 上圆半径


因为后面要给元素上色,这里先自定义一个随机上色的函数:

# 自定义一个给元素随机上色的函数
def rand_color(element):
   r = random.randint(0,255)
   g = random.randint(0, 255)
   b = random.randint(0, 255)
   sel.clear()
   sel.add(element)
   sel.vis_properties.set_real_color(r, g, b, 1)
   sel.clear()


然后,就是建模了,过程也很简单,就是“点连成线,线连成面”:

# 创建点并连线
lines = []
for i in range(pt_qtt):
   # 当前循环变体下,上下两层点对应的角度
   
a1 = pi * 2 / pt_qtt * i
   a2 = pi * 2 / pt_qtt * (i + dis_loc)

   # 用三坐标的形式创建点,z值即表示两个圆所在的平面位置
   
pt1 = hsf.add_new_point_coord(r1 * cos(a1), r1 * sin(a1), 0)
   pt2 = hsf.add_new_point_coord(r2 * cos(a2), r2 * sin(a2), 200)

   # 连线并放入数组
   
line = hsf.add_new_line_pt_pt(pt1, pt2)
   lines.append(line)

# 桥接曲面
for i in range(pt_qtt - 1):
   blend = hsf.add_new_blend()
   blend.set_curve(1, lines[i])
   blend.set_curve(2, lines[i + 1])
   hb.append_hybrid_shape(blend)
   blend.compute()
   rand_color(blend) # 随机上个色

# 前面循环是相邻线一对一对的,最后再把首尾连起来
blend = hsf.add_new_blend()
blend.set_curve(1, lines[pt_qtt - 1])
blend.set_curve(2, lines[0])
hb.append_hybrid_shape(blend)
blend.compute()
rand_color(blend)

# 最后 更新一下part
part.update()


最终出来的模型及特征树如下图:




来源:CATIA那点事儿
二次开发CATIApython游戏控制曲面
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-07-18
最近编辑:1年前
CATIA那点事儿
本科 CATIA小狼。微信公众号:CATIA那...
获赞 112粉丝 239文章 16课程 16
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈