-
python调用vb文件_CREO vbapi二次开发-使用Python对CREO二次开发
2020-12-04 06:46:321.开发环境配置1.1 开发思路由于Creo没有提供专门用于Python的开发工具包,所以只能考虑借用现有的开发...Python可以使用一个第三方库win32com操作COM对象,故Python可以利用VB API二次开发工具包进行二次开发。1....1.开发环境配置
1.1 开发思路
由于Creo没有提供专门用于Python的开发工具包,所以只能考虑借用现有的开发工具包。VB API实际是对Creo二次开发函数的COM封装,所以一般Windows下可以调用COM组件的语言其实都可以利用VBAPI进行Creo的二次开发。Python可以使用一个第三方库win32com操作COM对象,故Python可以利用VB API二次开发工具包进行二次开发。
1.2 VB API环境配置
VB API按照之前的文章安装配置即可。
1.3 Python环境配置
主要是安装和配置win32com模块,关键步骤如下:
安装win32com模块。在命令行中运行如下代码即可:
1python -m pip install pypiwin32
生成VB API工具包的中间层,保证python可以顺利调用VB API。首先运行Python安装目录下子目录“Lib\site-packages\win32com\client\”的makepy.py程序,选择“Creo VB API Type Library Creo Parametric”点击OK按钮即可生成。系统会提示在临时目录生成了形如“176453F2-6934-4304-8C9D-126D98C1700Ex0x1x0.py”的文件,一些关键的函数和变量、常量等信息均记录在此文件中。
1.4 注意点
开发过程其实与常规的开发流程一致,只是要注意使用python的语法调用对应的类和方法即可。Python为动态类型的语言,子类调用父类的属性方法无需进行类型转换,直接调用即可。此外,Python可以自动实现VB API中的多次类型转换。例如IpfcSolid的父类分别为IpfcModel和IpfcFamliyTableRow,当系统获得一个IpfcModel对象时,如果能够确定也是Ipfcsolid对象,则该对象可以直接调用IpfcFamliyTableRow类的属性和方法,无需像VB那样经过多次显式类转换。
2. 实例
拿批量保存族表文件到单独实例。将1.3节生产的文件重命名为VBAPI.py保存在当前目录下,编写第一个程序,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78# -*- coding: utf8 -*-
import win32com
from win32com import client
import VBAPI
import tkinter
from tkinter import scrolledtext, messagebox, filedialog, Tk, Button, Entry, Label
import os
CREO_APP = 'C:/PTC/Creo 2.0/Parametric/bin/parametric.exe'
PART_DIR = 'D:/mydoc/creo_python/fin.prt'
OUTPUT_DIR = 'D:/test/'
win = Tk()
win.title("批量将文件的族表对象导出到文件")
win.resizable(0, 0)
Label(win, text="Creo程序路径").grid(row=0, column=0, sticky='W')
Label(win, text="要导出的文件").grid(row=1, column=0, sticky='W')
Label(win, text="导出目录").grid(row=2, column=0, sticky='W')
e1 = Entry(win, width="45")
e2 = Entry(win, width="45")
e3 = Entry(win, width="45")
e1.grid(row=0, column=1, padx=5, pady=5)
e2.grid(row=1, column=1, padx=5, pady=5)
e3.grid(row=2, column=1, padx=5, pady=5)
e1.insert(0, CREO_APP)
e2.insert(0, PART_DIR)
e3.insert(0, OUTPUT_DIR)
def convert():
cAC = client.Dispatch(VBAPI.CCpfcAsyncConnection)
AsyncConnection = cAC.Start(CREO_APP + ' -g:no_graphics -i:rpc_input', '')
ModelDescriptor = client.Dispatch(VBAPI.CCpfcModelDescriptor)
descmodel = ModelDescriptor.Create(getattr(VBAPI.constants, "EpfcMDL_PART"), "", None)
descmodel.Path = PART_DIR
RetrieveModelOptions = client.Dispatch(VBAPI.CCpfcRetrieveModelOptions)
options = RetrieveModelOptions.Create()
options.AskUserAboutReps = False
model = AsyncConnection.Session.RetrieveModelWithOpts(descmodel, options)
AsyncConnection.Session.ChangeDirectory(OUTPUT_DIR)
familyTableRows = model.ListRows()
for i in range(0, familyTableRows.Count):
familyTableRow = familyTableRows.Item(i)
instmodel = familyTableRow.CreateInstance()
instmodel.Copy("m_" + instmodel.InstanceName + ".prt", None)
AsyncConnection.End()
tkinter.messagebox.showinfo('提示', '文件已导出完毕')
os.startfile(OUTPUT_DIR)
def chooseapp():
filename = tkinter.filedialog.askopenfilename()
if filename != '':
CREO_APP = filename
e1.delete('0', 'end')
e1.insert(0, CREO_APP)
def choosepart():
filename = tkinter.filedialog.askopenfilename()
if filename != '':
PART_DIR = filename
e2.delete('0', 'end')
e2.insert(0, PART_DIR)
def choosedir():
dirname = tkinter.filedialog.askdirectory()
if dirname != '':
OUTPUT_DIR = dirname
e3.delete('0', 'end')
e3.insert(0, OUTPUT_DIR)
Button(win, text="选择文件", command=chooseapp).grid(row=0, column=2, padx=5, pady=5)
Button(win, text="选择文件", command=choosepart).grid(row=1, column=2, padx=5, pady=5)
Button(win, text="选择路径", command=choosedir).grid(row=2, column=2, padx=5, pady=5)
Button(win, text="导出", command=convert).grid(row=3, column=0, sticky='W', padx=5, pady=5)
Button(win, text="退出", command=win.quit).grid(row=3, column=2, sticky='E', padx=5, pady=5)
win.mainloop()
图 程序运行界面
-
VB课程设计俄罗斯方块
2011-02-25 10:46:55前 言 visual basic继承了basic语言易学易用的特点,特别适合于初学者学习windows系统编程。随着21世纪信息社会的到来,计算机在人们的工作和生活...游戏得分的计算主要是根据消除的行数来决定的,当然每一次同时消除的... -
VB6.0动态加载ActiveX控件漫谈
2012-09-29 17:13:46友也象我一样利用CreateObject尝试了无数次,却无功而返,不知微软公司是出于何种 考虑,动态加载ActiveX控件是扩展控件集合的方式实现,通过实际摸索,终于就如 何实现动态ActiveX控件找出了一条切实可行的方法,... -
vb程序屏幕飘雪!!!
2010-06-28 11:21:10Private Type RECT '定义“区域”数据结构,但实际上并没有用到,因为仅需在函数InvalidateRect中传递一个空的RECT参数 left As Long top As Long right As Long bottom As Long End Type Dim rect1 As RECT ... -
Visual Basic开发实战1200例(第Ⅰ卷).(清华出版.孙秀梅.巩建华).part2
2016-06-14 11:23:42实例044 利用CallByName函数对对象进行操作 实例045 打印住宿登记 第3章 数组与指针 3.1 数组的引用与算法 实例046 如何获取数组上限和下限 实例047 如何在数组中插入数组元素 实例048 如何删除数组元素 实例... -
Visual Basic开发实战1200例(第Ⅰ卷).(清华出版.孙秀梅.巩建华).part1
2016-06-14 11:19:42实例044 利用CallByName函数对对象进行操作 实例045 打印住宿登记 第3章 数组与指针 3.1 数组的引用与算法 实例046 如何获取数组上限和下限 实例047 如何在数组中插入数组元素 实例048 如何删除数组元素 实例... -
-
咖啡智能报表控件 2.0.zip
2011-07-26 23:34:39咖啡报表组件可以用于VB、VC、DELPHI、PB、.NET等FOR WINDOWS语言的二次开发报表组件。 也可以嵌入到jsp、asp中实现WEB方式的开发,报表CAB包只有800K多一点 请发邮件到:happymfc@sina.com 索取注册码 服务方式: ... -
surfer 9.11汉化版.part2
2011-03-23 08:44:20--可以,Surfer内建Surfer Script, 类似VB 13.可以在Excel上设计程序吗? --透过Excel的VBA,可以同时控制Surfer和Excel 14.Surfer的等高线动画是如何做的? --可运用Sufer2GIF的Windows模块,或whirlgif 程序Unix. ... -
surfer9汉化版-单文件未拆分的完整版
2012-04-02 11:35:32--可以,Surfer内建Surfer Script, 类似VB 13.可以在Excel上设计程序吗? --透过Excel的VBA,可以同时控制Surfer和Excel 14.Surfer的等高线动画是如何做的? --可运用Sufer2GIF的Windows模块,或whirlgif 程序Unix. ... -
surfer 9.11 汉化.part1
2011-03-23 08:46:07--可以,Surfer内建Surfer Script, 类似VB 13.可以在Excel上设计程序吗? --透过Excel的VBA,可以同时控制Surfer和Excel 14.Surfer的等高线动画是如何做的? --可运用Sufer2GIF的Windows模块,或whirlgif 程序Unix. ... -
surfer9.11汉化.part3
2011-03-23 08:47:20--可以,Surfer内建Surfer Script, 类似VB 13.可以在Excel上设计程序吗? --透过Excel的VBA,可以同时控制Surfer和Excel 14.Surfer的等高线动画是如何做的? --可运用Sufer2GIF的Windows模块,或whirlgif 程序Unix. ... -
C#微软培训教材(高清PDF)
2009-07-30 08:51:1710.3 构造函数和析构函数 .119 10.4 小 结 .122 第十一章 方 法 .124 11.1 方法的声明.124 11.2 方法中的参数.125 11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 ... -
C#微软培训资料
2014-01-22 14:10:1710.3 构造函数和析构函数 .119 10.4 小 结 .122 第十一章 方 法 .124 11.1 方法的声明.124 11.2 方法中的参数.125 11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 ... -
vc++ 应用源码包_1
2012-09-15 14:22:12p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库... -
vc++ 应用源码包_2
2012-09-15 14:27:40p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库... -
vc++ 应用源码包_6
2012-09-15 14:59:46p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库... -
vc++ 应用源码包_5
2012-09-15 14:45:16p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库... -
vc++ 应用源码包_4
2012-09-15 14:38:35p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库... -
vc++ 应用源码包_3
2012-09-15 14:33:15p2p vb实例。 p2p+technology文档。 P2P视频技术源码(含开发文档) PcShare 内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库... -
FMLDATA的源码
2014-06-02 15:57:42例如,要在DZH公式中读入第三方的数据并与DZH其它数据一起进行分析,我们可以首先将数据写入FMLDATA文件,然后在DZH公式中象引用DZH本身直接引用。 2)将DZH序列数据写入外部文件。例如,我们要将DZH现有数据或者... -
JAVA上百实例源码以及开源项目源代码
2018-12-11 17:07:42Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java... -
JAVA上百实例源码以及开源项目
2016-01-03 17:37:40Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和... -
vc++ 开发实例源码包
2014-12-16 11:25:17代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的... -
易语言程序免安装版下载
2011-04-07 09:28:50第三方支持库,由源代码作者按照静态编译技术文档(参见sdk\static_docs)完成自身改造并提供静态库后,可支持静态编译。外部OCX组件和COM组件,不支持静态编译。 此次重大版本升级不影响以前的源代码(.e)和模块... -
基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)
2011-03-12 10:44:33这些都预示着我们进入了一个新的互联网阶段web 2.0,它是相对web 1.0的新的一类互联网应用的总称,是一次从核心内容到外部应用的革命[10]。这个阶段发展迅速,互联网应用趋于多样化,其中变化最大的是由web 1.0网站... -
arcgis工具
2012-10-22 22:37:31如:“AREA”,如果查询的是个人地理数据库数据,则需要将字段名包含在方括号内,如:[AREA],如果查询的是ArcSDE地理数据库数据或是ArcIMS要素类或ArcIMS影象服务子层中的数据,则不需要将字段名括起,如:AREA ...