胡迪 羅輝
摘要: Creo軟件的二次開發(fā)工作逐漸得到人們的重視,但其并未直接提供Python的開發(fā)接口。該文介紹了在利用Creo VB API接口的基礎(chǔ)上,簡便利用Python使用Python對Creo進行二次開發(fā)的方法和關(guān)鍵技術(shù)。以批量關(guān)系操作為例,對該方法進行了驗證,結(jié)果表明該方法簡化了Creo二次開發(fā)的過程。
關(guān)鍵詞:Creo;二次開發(fā);Python;VB API
中圖分類號:TP393? ? ? ? 文獻標(biāo)識碼:A
文章編號:1009-3044(2020)02-0049-02
Abstract: The secondary development of Creo is getting more and more attention, but Creo does not directly provide Python development interface. The method and key technology of how to use Python to develop Creowas introduced. Finally, an example of batch relationoperationwas taken to show how the system works.The results show that this method simplifies the process of Creo development.
Key words: Creo; Secondary Development;Python; VB API
Python由荷蘭人GuidovanRossum于1989年發(fā)明,第一個公開發(fā)行版發(fā)行于1991年,是一種面向?qū)ο蟮?、動態(tài)的、解釋型程序設(shè)計語言,經(jīng)過十幾年的發(fā)展,以其短小精悍的語法以及高效的開發(fā)、簡單入門的特點逐漸成為主流程序設(shè)計語言。Python更接近人的自然語言,易學(xué),更適合非計算機專業(yè)科研人員。因此,Python當(dāng)前已經(jīng)成為眾多科研領(lǐng)域的科學(xué)計算工具。Python提供了NumPy等眾多程序庫,已經(jīng)成為眾多科研領(lǐng)域的科學(xué)計算工具[1-2]。
三維軟件Creo功能強大,開放性好,是國內(nèi)企業(yè)進行產(chǎn)品設(shè)計的主要三維設(shè)計軟件之一[3-6]。Creo具有強大的二次開發(fā)功能,其開發(fā)方法靈活多樣。Creo提供了Creo/Toolkit、VBAPI、J-Link、Web-link等多種二次開發(fā)工具包[7-10]。盡管Creo提供如此眾多的二次開發(fā)工具包,但上述工具分別對應(yīng)C/C++、Basic、Java以及JavaScript等常用開發(fā)語言,Creo并未提供使用Python進行二次開發(fā)的工具包,目前也未見使用Python對Creo進行二次開發(fā)的相關(guān)文獻。
本文根據(jù)近年來實際工作中取得的開發(fā)經(jīng)驗,闡述如何使用Python對Creo進行二次開發(fā),以期將Python強大的功能引入Creo二次開發(fā),同時降低Creo二次開發(fā)的難度。
1 開發(fā)環(huán)境配置
1.1 開發(fā)思路
由于Creo沒有提供專門用于Python的開發(fā)工具包,所以只能考慮借用現(xiàn)有的開發(fā)工具包。VBAPI實際是對Creo二次開發(fā)函數(shù)的COM封裝,所以一般Windows下可以調(diào)用COM組件的語言其實都可以利用VBAPI進行Creo的二次開發(fā)。Python可以使用一個第三方庫win32com操作COM對象,故Python可以利用VBAPI二次開發(fā)工具包進行二次開發(fā),開發(fā)結(jié)構(gòu)示意圖如圖1所示。
1.2VBAPI環(huán)境配置
VBAPI配置相較Creo/Toolkit簡單,安裝完成后只需進行以下2步即可:
1) 添加PRO_COMM_MSG_EXE到環(huán)境變量。變量值填寫pro_comm_msg.exe所在的路徑加文件全名,pro_comm_msg.exe位于Creo安裝目錄的“CommonFiles\datecode\machinetype\obj”下。
2) 注冊COM服務(wù)器。以管理員權(quán)限運行Creo安裝目錄下子目錄“Parametric/bin”中的vb_api_register.bat文件即可。
1.3Python環(huán)境配置
主要是安裝和配置win32com模塊,關(guān)鍵步驟如下:
1) 安裝win32com模塊。在命令行中運行如下代碼即可:
python -m pip install pypiwin32
2) 生成VB API工具包的中間層,保證python可以順利調(diào)用VB API。首先運行Python安裝目錄下子目錄“Lib\site-packages\win32com\client\”的makepy.py程序,彈出如圖2所示的對話框。選擇“Creo VB API Type Library Creo Parametric”點擊OK按鈕即可生成。系統(tǒng)會提示在臨時目錄生成了形如“176453F2-6934-4304-8C9D-126D98C1700Ex0x1x0.py”的文件,一些關(guān)鍵的函數(shù)和變量、常量等信息均記錄在此文件中。
2 關(guān)鍵開發(fā)技術(shù)
2.1 關(guān)鍵類的處理
VB API采用面向?qū)ο蟮姆椒▽REO操作進行了封裝,在編寫程序過程中只需調(diào)用這些類即可。VB API幫助文檔中指出,這些類的主要類型[10]包括:
1) Creo Parametric-Related Classes。形似IpfcXXX的類。這些類不能用New關(guān)鍵詞進行初始化,只能通過程序中已創(chuàng)建或列出對象的方法獲得對應(yīng)的句柄進行賦值初始化。
2) Module-Level Classes。形似CMpfcXXX的類。包含靜態(tài)方法用于初始化某些VB對象。
3) Compact Data Classes。形似CCpfcXXX的類。這些類只用于存儲數(shù)據(jù)。主要用于存儲和處理VB API中方法的返回數(shù)據(jù)。
4) Enumeration Classes。枚舉類。
此外,還有Array Classes、Sequence Classes等數(shù)據(jù)結(jié)構(gòu)類用于存儲相關(guān)數(shù)據(jù)。
Creo Parametric-Related Classes和Module-Level Classes類用于初始化相關(guān)選項、獲得Creo的相關(guān)數(shù)據(jù)以及獲得Creo Parametric-Related Classes對象,在Python中使用win32com.client.Dispatch(uuid)方法生成。Dispatch的參數(shù)uuid可以在前文所述使用makepy.py生成的文件中查找得到。
Creo Parametric-Related Classes類似C語言的指針的概念,對其操作相當(dāng)于直接操作CREO的內(nèi)存數(shù)據(jù),只能通過Creo Parametric-Related Classes或Module-Level Classes的方法或?qū)傩垣@得。
Enumeration Classes為枚舉類型,其值也可以makepy.py生成的文件中查找得到。
2.2 類的繼承
Python為動態(tài)類型的語言,子類調(diào)用父類的屬性方法無須進行類型轉(zhuǎn)換,直接調(diào)用即可。此外,Python可以自動實現(xiàn)VB API中的多次類型轉(zhuǎn)換。例如IpfcSolid的父類分別為IpfcModel和IpfcFamliyTableRow,當(dāng)系統(tǒng)獲得一個IpfcModel對象時,如果能夠確定也是Ipfcsolid對象,則該對象可以直接調(diào)用IpfcFamliyTableRow類的屬性和方法,無須像VB那樣經(jīng)過多次顯式類轉(zhuǎn)換。
3 應(yīng)用實例
以批量添加和清空零件關(guān)系為例,對本文介紹的方法進行驗證。Python為3.7,Creo版本為2.0。首先按照前文配置好環(huán)境。根據(jù)官方文檔,啟動Creo會話只需調(diào)用CCpfcAsyncConnection.Start方法即可生成Creo會話對象。在win32com生成的文件中查找CCpfcAsyncConnection的uuid為{456E0110-2031-3907-AFE5-9201C97A915E},故啟動Creo會話關(guān)鍵代碼如下:
cAC=client.Dispatch('{456E0110-2031-3907-AFE5-9201C97A915E}')
AsyncConnection = cAC.Start(creoapp, '') #creoapp為creo路徑
啟動會話后,需要枚舉目錄包含的零件,關(guān)鍵代碼如下:
files = AsyncConnection.Session.ListFiles("*.prt", EpfcFILE_LIST_LATEST, INPUT_DIR)
修改關(guān)系需要將文件加載到內(nèi)存中。CCpfcModelDescriptor和CCpfcRetrieveModelOptions類主要用于生成打開文件的選項,利用Creo會話對象的RetrieveModelWithOpts調(diào)用這兩個對象即可實現(xiàn)將零件加載到內(nèi)存中,關(guān)鍵代碼如下:
ModelDescriptor = client.Dispatch(‘{74D4E90E-031B-3734-8CE1-36D5730A6728})
descmodel=ModelDescriptor.Create(1, '', None)
descmodel.Path=files.Item(i)#files.Item(i)為要導(dǎo)出文件路徑
RetrieveModelOptions=client.Dispatch('{2264B49E-C652-384F-AB53-71B57DA275BE}')
options=RetrieveModelOptions.Create()
options.AskUserAboutReps = False
model=AsyncConnection.Session.RetrieveModelWithOpts(descmodel, options)
加載到內(nèi)存的model為IpfcModel對象,如前文所述,Python可以無須類型轉(zhuǎn)換,對象直接調(diào)用IpfcRelationOwner類的方法即可完成相關(guān)關(guān)系的操作。添加關(guān)系代碼如下:
originrels = model.Relations
for j in range(0, originrels.Count):
relations.Append(originrels.Item(j))
for line in rel_contents:
relations.Append(line)
model.Relations = relations
刪除關(guān)系代碼如下:
model.DeleteRelations()
使用Python自帶的tkinter組件完成界面設(shè)計,最終開發(fā)的工具如圖3所示。用戶點擊按鈕即可完成功能。
4 結(jié)束語
本文探討了使用Python二次開發(fā)Creo的方法和關(guān)鍵技術(shù),實現(xiàn)了Python與Creo的集成開發(fā)。利用本文方法,降低了開發(fā)難度,提高了開發(fā)效率,有助于相關(guān)領(lǐng)域的推廣應(yīng)用。
參考文獻:
[1] 董付國.Python可以這樣學(xué)[M].北京:清華大學(xué)出版社,2017.
[2] 姚建盛,李淑梅.Python在科學(xué)計算中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2016(11):76.
[3] 王恒,寧汝新,張旭,等.利用MFC二次開發(fā)Pro/E[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2004,16(6):869-872.
[4] 臧巖. 基于Pro/E的注塑模架的參數(shù)化設(shè)計及開發(fā)[D]. 鄭州: 河南工業(yè)大學(xué), 2016.
[5] 張文彬,沈精虎,姜兆康.基于Creo二次開發(fā)的零件參數(shù)化變型設(shè)計[J].微型電腦應(yīng)用,2018,34(2):48-50,54.
[6] 李潤泉,郭俊卿.基于Creo二次開發(fā)的模具標(biāo)準(zhǔn)件參數(shù)化變型設(shè)計[J].農(nóng)機使用與維修,2018(12):4-5.
[7] 李世國.Pro/TOOLKIT程序設(shè)計[M].北京:機械工業(yè)出版社,2003.
[8] Parametric Technology Corporation. Creo Parametric 2.0 Web-Link Users Guide[M]. USA: PTC, 2012.
[9] Parametric Technology Corporation. Creo Parametric 2.0 J-Link Users Guide[M]. USA: PTC, 2012.
[10] ParametricTechnologyCorporation.CreoParametric2.0VBAPIUsersGuide[M].USA:PTC,2012.
【通聯(lián)編輯:唐一東】