【pycatia】用python也能操作CATIA建模?
關于CATIA VBA / Automation二次開發,小狼之前發過很多篇文章了。不過為了讓一些剛接觸的小伙伴更容易理解,我們再嘮叨一遍:
CATIA軟件里內置了一套自動化對象,好比某MOBA游戲的英雄;
我們平常用鼠標鍵盤,可以操縱軟件建模(控制英雄走路或釋放技能);
與游戲外掛/宏類似,CATIA也可以被程序腳本控制,讓軟件自動執行某些動作。
綜合以上內容,簡單說,這種用程序代碼代替鼠標鍵盤,控制軟件進行自動建模的方式,就叫做基于Automation(或者叫自動化對象)的二次開發。
這些自動化對象,能聽懂的程序語言不止一種,小編之前也都發過。除了軟件自帶的VBA,還有比如:
用VS VB.Net做CATIA二次開發
C#環境下的CATIA Automation二次開發
PYTHON-圣誕福利-小編寫的書
今天這篇文章,我們來介紹一個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那點事兒
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















