APP下载

利用Python二次开发Creo

2020-03-16胡迪罗辉

电脑知识与技术 2020年2期
关键词:二次开发

胡迪 罗辉

摘要: Creo软件的二次开发工作逐渐得到人们的重视,但其并未直接提供Python的开发接口。该文介绍了在利用Creo VB API接口的基础上,简便利用Python使用Python对Creo进行二次开发的方法和关键技术。以批量关系操作为例,对该方法进行了验证,结果表明该方法简化了Creo二次开发的过程。

关键词:Creo;二次开发;Python;VB API

中图分类号:TP393        文献标识码: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年发明,第一个公开发行版发行于1991年,是一种面向对象的、动态的、解释型程序设计语言,经过十几年的发展,以其短小精悍的语法以及高效的开发、简单入门的特点逐渐成为主流程序设计语言。Python更接近人的自然语言,易学,更适合非计算机专业科研人员。因此,Python当前已经成为众多科研领域的科学计算工具。Python提供了NumPy等众多程序库,已经成为众多科研领域的科学计算工具[1-2]。

三维软件Creo功能强大,开放性好,是国内企业进行产品设计的主要三维设计软件之一[3-6]。Creo具有强大的二次开发功能,其开发方法灵活多样。Creo提供了Creo/Toolkit、VBAPI、J-Link、Web-link等多种二次开发工具包[7-10]。尽管Creo提供如此众多的二次开发工具包,但上述工具分别对应C/C++、Basic、Java以及JavaScript等常用开发语言,Creo并未提供使用Python进行二次开发的工具包,目前也未见使用Python对Creo进行二次开发的相关文献。

本文根据近年来实际工作中取得的开发经验,阐述如何使用Python对Creo进行二次开发,以期将Python强大的功能引入Creo二次开发,同时降低Creo二次开发的难度。

1 开发环境配置

1.1 开发思路

由于Creo没有提供专门用于Python的开发工具包,所以只能考虑借用现有的开发工具包。VBAPI实际是对Creo二次开发函数的COM封装,所以一般Windows下可以调用COM组件的语言其实都可以利用VBAPI进行Creo的二次开发。Python可以使用一个第三方库win32com操作COM对象,故Python可以利用VBAPI二次开发工具包进行二次开发,开发结构示意图如图1所示。

1.2VBAPI环境配置

VBAPI配置相较Creo/Toolkit简单,安装完成后只需进行以下2步即可:

1) 添加PRO_COMM_MSG_EXE到环境变量。变量值填写pro_comm_msg.exe所在的路径加文件全名,pro_comm_msg.exe位于Creo安装目录的“CommonFiles\datecode\machinetype\obj”下。

2) 注册COM服务器。以管理员权限运行Creo安装目录下子目录“Parametric/bin”中的vb_api_register.bat文件即可。

1.3Python环境配置

主要是安装和配置win32com模块,关键步骤如下:

1) 安装win32com模块。在命令行中运行如下代码即可:

python -m pip install pypiwin32

2) 生成VB API工具包的中间层,保证python可以顺利调用VB API。首先运行Python安裝目录下子目录“Lib\site-packages\win32com\client\”的makepy.py程序,弹出如图2所示的对话框。选择“Creo VB API Type Library Creo Parametric”点击OK按钮即可生成。系统会提示在临时目录生成了形如“176453F2-6934-4304-8C9D-126D98C1700Ex0x1x0.py”的文件,一些关键的函数和变量、常量等信息均记录在此文件中。

2 关键开发技术

2.1 关键类的处理

VB API采用面向对象的方法对CREO操作进行了封装,在编写程序过程中只需调用这些类即可。VB API帮助文档中指出,这些类的主要类型[10]包括:

1) Creo Parametric-Related Classes。形似IpfcXXX的类。这些类不能用New关键词进行初始化,只能通过程序中已创建或列出对象的方法获得对应的句柄进行赋值初始化。

2) Module-Level Classes。形似CMpfcXXX的类。包含静态方法用于初始化某些VB对象。

3) Compact Data Classes。形似CCpfcXXX的类。这些类只用于存储数据。主要用于存储和处理VB API中方法的返回数据。

4) Enumeration Classes。枚举类。

此外,还有Array Classes、Sequence Classes等数据结构类用于存储相关数据。

Creo Parametric-Related Classes和Module-Level Classes类用于初始化相关选项、获得Creo的相关数据以及获得Creo Parametric-Related Classes对象,在Python中使用win32com.client.Dispatch(uuid)方法生成。Dispatch的参数uuid可以在前文所述使用makepy.py生成的文件中查找得到。

Creo Parametric-Related Classes类似C语言的指针的概念,对其操作相当于直接操作CREO的内存数据,只能通过Creo Parametric-Related Classes或Module-Level Classes的方法或属性获得。

Enumeration Classes为枚举类型,其值也可以makepy.py生成的文件中查找得到。

2.2 类的继承

Python为动态类型的语言,子类调用父类的属性方法无须进行类型转换,直接调用即可。此外,Python可以自动实现VB API中的多次类型转换。例如IpfcSolid的父类分别为IpfcModel和IpfcFamliyTableRow,当系统获得一个IpfcModel对象时,如果能够确定也是Ipfcsolid对象,则该对象可以直接调用IpfcFamliyTableRow类的属性和方法,无须像VB那样经过多次显式类转换。

3 應用实例

以批量添加和清空零件关系为例,对本文介绍的方法进行验证。Python为3.7,Creo版本为2.0。首先按照前文配置好环境。根据官方文档,启动Creo会话只需调用CCpfcAsyncConnection.Start方法即可生成Creo会话对象。在win32com生成的文件中查找CCpfcAsyncConnection的uuid为{456E0110-2031-3907-AFE5-9201C97A915E},故启动Creo会话关键代码如下:

cAC=client.Dispatch('{456E0110-2031-3907-AFE5-9201C97A915E}')

AsyncConnection = cAC.Start(creoapp, '') #creoapp为creo路径

启动会话后,需要枚举目录包含的零件,关键代码如下:

files = AsyncConnection.Session.ListFiles("*.prt", EpfcFILE_LIST_LATEST, INPUT_DIR)

修改关系需要将文件加载到内存中。CCpfcModelDescriptor和CCpfcRetrieveModelOptions类主要用于生成打开文件的选项,利用Creo会话对象的RetrieveModelWithOpts调用这两个对象即可实现将零件加载到内存中,关键代码如下:

ModelDescriptor = client.Dispatch(‘{74D4E90E-031B-3734-8CE1-36D5730A6728})

descmodel=ModelDescriptor.Create(1, '', None)

descmodel.Path=files.Item(i)#files.Item(i)为要导出文件路径

RetrieveModelOptions=client.Dispatch('{2264B49E-C652-384F-AB53-71B57DA275BE}')

options=RetrieveModelOptions.Create()

options.AskUserAboutReps = False

model=AsyncConnection.Session.RetrieveModelWithOpts(descmodel, options)

加载到内存的model为IpfcModel对象,如前文所述,Python可以无须类型转换,对象直接调用IpfcRelationOwner类的方法即可完成相关关系的操作。添加关系代码如下:

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

删除关系代码如下:

model.DeleteRelations()

使用Python自带的tkinter组件完成界面设计,最终开发的工具如图3所示。用户点击按钮即可完成功能。

4 结束语

本文探讨了使用Python二次开发Creo的方法和关键技术,实现了Python与Creo的集成开发。利用本文方法,降低了开发难度,提高了开发效率,有助于相关领域的推广应用。

参考文献:

[1] 董付国.Python可以这样学[M].北京:清华大学出版社,2017.

[2] 姚建盛,李淑梅.Python在科学计算中的应用[J].数字技术与应用,2016(11):76.

[3] 王恒,宁汝新,张旭,等.利用MFC二次开发Pro/E[J].计算机辅助设计与图形学学报,2004,16(6):869-872.

[4] 臧岩. 基于Pro/E的注塑模架的参数化设计及开发[D]. 郑州: 河南工业大学, 2016.

[5] 张文彬,沈精虎,姜兆康.基于Creo二次开发的零件参数化变型设计[J].微型电脑应用,2018,34(2):48-50,54.

[6] 李润泉,郭俊卿.基于Creo二次开发的模具标准件参数化变型设计[J].农机使用与维修,2018(12):4-5.

[7] 李世国.Pro/TOOLKIT程序设计[M].北京:机械工业出版社,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.

【通联编辑:唐一东】

猜你喜欢

二次开发
浅谈基于Revit平台的二次开发
浅谈Mastercam后处理器的二次开发
西门子Easy Screen对倒棱机床界面二次开发
基于Pro/E二次开发的推土铲参数化模块开发