热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Polyworks脚本开发学习笔记(十五)用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件用Polyworks脚本开发,没有高级语言的支持,功能难免单一ÿ

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

用Polyworks脚本开发,没有高级语言的支持,功能难免单一,一些比较复杂的交互实现不了,界面和报告也很简单。
打开帮助中的SDK文档,发现支持开发的语言有VB.NET/Delphi/C++/C#/VBA,没有Python。
难免有些好奇,支持VBA都不支持Python吗?
在这里插入图片描述


VBA连接Polyworks


  1. VBA连接Polyworks:看看VBA的使用案例,使用的连接COM组件方式调用Inspector和Workspace,这个倒是比较方便,理论上Python也可以。
    使用以下代码,VBA轻松的打开了Inspector项目。

Dim currentProjectV1 As IIMInspectProject
Dim currentProjectV2 As IIMInspectProject2
Dim iminspect As IMInspectLib.iminspectPublic Sub main()Set iminspect = New IMInspectLib.iminspect'get the basic project interfaceiminspect.ProjectGetCurrent currentProjectV1'ask for the second version of the project interfaceSet currentProjectV2 = currentProjectV1
End Sub

在这里插入图片描述
在这里插入图片描述


Python连接Polyworks


  1. Python连接Polyworks:理论上使用COM组件的方式和VBA相同,但是由于VBA针对COM组件有调用界面,比Python简单的多。需要摸索一下这个过程。
  2. cmd界面下先升级Pip到最新: python -m pip install --upgrade pip
    在这里插入图片描述
  3. cmd界面下安装win32com模块: python -m pip install pypiwin32python -m pip install --upgrade pip
  4. cmd界面下python运行makepy.py文件。这一步非常关键,理论上所有COM组件在Python中都可以这么调用。
    C:\Users\Administrator>python C:\Users\Administrator\AppData\Local\Programs\Python\Python38\Lib
    site-packages\win32com\client\makepy.py
    在这里插入图片描述
  5. 运行后,可以调出系统所有的COM组件,VBA的界面重现了。
    在这里插入图片描述
  6. 选择OK,系统出现下面的生成提示。这是成功了。
    网上说的,下载安装包之类的,都很麻烦,而且没这个靠谱。
    感觉写的这么清楚真应该收费了_
    在这里插入图片描述
  7. 获取生成的py接口文件
    CMD界面提示,C:\Users\Administrator\AppData\Local\Temp\gen_py\3.8下面生成了一个py文件
    5676F770-39A7-4507-8BDC-634B2407C5B0x0x1x0.py
    打开看看,里面定义Polyworks的类接口,是一个调用的接口文件。

# -*- coding: mbcs -*-
# Created by makepy.py version 0.5.01
# By python version 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)]
# From type library '1'
# On Wed Mar 9 21:17:40 2022
'PolyWorks|Inspector 20XX (64-bit) Type Library'
makepy_version = '0.5.01'
python_version = 0x30800f0
import win32com.client.CLSIDToClass, pythoncom, pywintypes
import win32com.client.util
from pywintypes import IID
from win32com.client import DispatchThe following 3 lines may need tweaking for the particular server
# Candidates are pythoncom.Missing, .Empty and .ArgNotFound
defaultNamedOptArg=pythoncom.Empty
defaultNamedNotOptArg=pythoncom.Empty
defaultUnnamedArg=pythoncom.EmptyCLSID = IID('{23E630FD-A4D5-47AD-A3B2-7D2779FFF888}')
MajorVersion = 1
MinorVersion = 0
LibraryFlags = 8
LCID = 0x0

  1. 如果出现pywintypes报错: 找不到pywintypes的解决方案
    pywintypes38.dll安装在了…\Python38\Lib\site-packages\pywin32_system32目录,但是Python中用了虚拟环境的话找不到。
    解决方案:将该目录pywin32_system32复制到虚拟环境目录(根据设置的虚拟环境而不同)
    我的是C:\Users\Administrator\venv\Lib\site-packages。复制以后编译不再报错。

  2. Python中开始启动COM组件,执行Polyworks脚本命令
    Py接口文件的最后一个类(基类为CoClassBaseClass),通常包含则真正调用的dll文件的信息,同时也是最终使用的dll文件的类对象。
    使用下列代码,可以从注册表中读取IMInspect的CLSID,并成功启动Polyworks。
    获取到commandCenter以后就可以调用CommandExecute运行Polyworks中编好的脚本代码,组合出各种复杂的界面、操作和交互了。至此,Python连接Polyworks的COM组件顺利完成。

import sys
import win32api, win32con, comtypes
import comtypes.clientclass IMInspectApp():def __init__(self):self.key = win32api.RegOpenKeyEx(win32con.HKEY_CLASSES_ROOT, 'InnovMetric.PolyWorks.IMInspect', 0,win32con.KEY_READ)self.clsid = win32api.RegQueryValue(self.key, 'CLSID')self.path = "C:\\Program Files\\InnovMetric\\PolyWorks MS 2019\\bin\\iminspect.exe"self.library = comtypes.client.GetModule(self.path)self.init = comtypes.client.CreateObject(self.clsid)self.interface = self.init.QueryInterface(self.library.IIMInspect)self.get_project = self.interface.ProjectGetCurrent()self.commandCenter = self.get_project.CommandCenterCreate()if __name__ == "__main__":IM_InspectApp = IMInspectApp()if IM_InspectApp.commandCenter is None:print("没有获取到commandCenter")sys.exit(0)IM_InspectApp.commandCenter.CommandExecute("MACRO PAUSE(\"提示\",\"Python启动Polyworks成功\")")

代码启动了一个PolyWorks暂停的提示框,正常显示:
在这里插入图片描述


推荐阅读
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • 使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
    通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK 1.8.0_121和MyEclipse 10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 本文深入探讨了 Python Watchdog 库的使用方法和应用场景。通过详细的代码示例,展示了如何利用 Watchdog 监控文件系统的变化,包括文件的创建、修改和删除等操作。文章不仅介绍了 Watchdog 的基本功能,还探讨了其在实际项目中的高级应用,如日志监控和自动化任务触发。读者将能够全面了解 Watchdog 的工作原理及其在不同场景下的应用技巧。 ... [详细]
  • Java 8 引入了 Stream API,这一新特性极大地增强了集合数据的处理能力。通过 Stream API,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析 Stream API 的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。 ... [详细]
  • 在Python 2.7环境中使用PyCharm进行Cvxopt的安装及线性规划问题求解。具体步骤包括:通过PyCharm的文件菜单进入项目设置,选择解释器选项,点击右侧的“+”按钮,在可用包列表中搜索并安装Cvxopt。安装完成后,可以通过导入Cvxopt库并调用其函数来解决线性规划问题,提高模型的准确性和效率。 ... [详细]
  • 在Java中,使用`java.awt.Frame`类可以轻松创建窗口,并通过简单的方法设置窗口标题。本文详细介绍了如何在自定义的`BallGame`类中扩展`Frame`类,并实现窗口的创建与标题设置。通过示例代码展示了具体实现步骤,帮助开发者快速掌握这一基础技能。 ... [详细]
  • 在 Windows 10 系统下配置 Python 3 和 OpenCV 3 的环境时,建议使用 Anaconda 分发版以简化安装过程。Anaconda 可以从其官方网站(https://www.anaconda.com/download)下载。此外,本文还推荐了几本关于 Python 和 OpenCV 的专业书籍,帮助读者深入理解和应用相关技术。 ... [详细]
  • RK算法通过比较两个字符串的哈希值来实现快速匹配,但即使哈希值相同,也不能确保两字符串完全一致,仍需进行逐字符对比以确认。此过程的时间复杂度为O(n)。此外,RK算法在文本搜索、模式识别等领域有广泛应用,并可通过多种优化策略提高其效率和准确性。 ... [详细]
  • Java 中优先级队列的轮询方法详解与应用 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 本文介绍了一种基于最大匹配算法的简易分词程序的设计与实现。该程序通过引入哈希集合存储词典,利用前向最大匹配方法对输入文本进行高效分词处理,具有较高的准确率和较快的处理速度,适用于中文文本的快速分词需求。 ... [详细]
  • 如何在 Java LinkedHashMap 中高效地提取首个或末尾的键值对? ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
author-avatar
的发个地方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有