【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開發不同的是,使用這個庫,你可以擁有屬性和方法的自動聯想,提高程序編寫的效率。

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

與其他python庫一樣,我們可以通過如下命令行安裝:

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

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

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

以上工作就緒之后,我們便可以編寫python代碼啦!接下來,我們就通過開發手冊里自帶的這個實例,來練練手~

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

這個例子的原理很簡單:

一個圓上有一些等距陣列的點,在偏置某一距離的平面上的另一個圓上,有同樣多的點,只是位置會錯開一些。我們把對應的兩個點連成一條線,再進階一下,把相鄰的兩根線橋接一張曲面,再上個色。

按著上面的步驟,開始寫代碼:

首先,導入庫,初始化一些基本對象與參數:

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()

最終出來的模型及特征樹如下圖:

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



文章來源:CATIA那點事兒


登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

8
2
5