当前位置: 首页 > news >正文

python二次开发Solidworks:排雷以及如何排雷?

目录

1、重要文档

2、MSDN VARIANTS 

3、错误排除实例

3.1 第一个例子

3.2 第二个例子


1、重要文档

SolidWorks API 帮助文档:在 SolidWorks 的安装路径下可以找到本地文件,如 ...\Program Files\SolidWorks Corp\SolidWorks\api\apihelp.chm 。

swcommands.py 及 swconst.py 文件:由 makepy.py 程序生成的 swcommands.py 及 swconst.py 文件。在 ...\Lib\site-packages\win32com\client 文件夹内找到 makepy.py ,用 IDE 打开并运行,选择SOLIDWORKS 201x Type library和SOLIDWORKS 201x Constant type library的文件,然后重命名为swcommands.py 及 swconst.py。

2、MSDN VARIANTS 

typedef  enum tagVARENUM
 {
   VT_EMPTY = 0x0000,
   VT_NULL = 0x0001,
   VT_I2 = 0x0002,
   VT_I4 = 0x0003,
   VT_R4 = 0x0004,
   VT_R8 = 0x0005,
   VT_CY = 0x0006,
   VT_DATE = 0x0007,
   VT_BSTR = 0x0008,
   VT_DISPATCH = 0x0009,
   VT_ERROR = 0x000A,
   VT_BOOL = 0x000B,
   VT_VARIANT = 0x000C,
   VT_UNKNOWN = 0x000D,
   VT_DECIMAL = 0x000E,
   VT_I1 = 0x0010,
   VT_UI1 = 0x0011,
   VT_UI2 = 0x0012,
   VT_UI4 = 0x0013,
   VT_I8 = 0x0014,
   VT_UI8 = 0x0015,
   VT_INT = 0x0016,
   VT_UINT = 0x0017,
   VT_VOID = 0x0018,
   VT_HRESULT = 0x0019,
   VT_PTR = 0x001A,
   VT_SAFEARRAY = 0x001B,
   VT_CARRAY = 0x001C,
   VT_USERDEFINED = 0x001D,
   VT_LPSTR = 0x001E,
   VT_LPWSTR = 0x001F,
   VT_RECORD = 0x0024,
   VT_INT_PTR = 0x0025,
   VT_UINT_PTR = 0x0026,
   VT_ARRAY = 0x2000,
   VT_BYREF = 0x4000
 } VARENUM;

3、错误排除实例

3.1 第一个例子

出错代码:

modelExt.SelectByID2("mysketch", "SKETCH", 0, 0, 0, False, 0, None, 0)

错误类型:

Traceback (most recent call last): File "", line 1, in File ">", line 2, in SelectByID2 pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 8)

类型不匹配中的最后一个数字。 行指示导致问题的参数。 在这种情况下,它是 None ,这是第八个参数。 API 手册页说它需要一个“指向标注的指针”。 我们只想传递 None,但 None 没有被转换为正确的 COM 对象,所以我们必须手动进行转换。

函数定义:

def SelectByID2(self, Name=defaultNamedNotOptArg, Type=defaultNamedNotOptArg, X=defaultNamedNotOptArg, Y=defaultNamedNotOptArg, Z=defaultNamedNotOptArg, Append=defaultNamedNotOptArg, Mark=defaultNamedNotOptArg, Callout=defaultNamedNotOptArg, SelectOption=defaultNamedNotOptArg):'Select a specified entity'return self._oleobj_.InvokeTypes(68, LCID, 1, (11, 0), ((8, 1), (8, 1), (5, 1), (5, 1), (5, 1), (11, 1), (3, 1), (9, 1), (3, 1)),Name, Type, X, Y, Z, Append, Mark, Callout, SelectOption)

元组列表( ((8,1), (8, 1), (5, 1), ...) 上面)包含有关每个参数的预期类型的信息。 第八个元组对应于有问题的第八个参数。 该元组是 (9, 1)。 现在在名为“VARIANT Type Constants”的 MSDN 网页中查找“9”(VT_DISPATCH = 0x0009,//十六进制的9),您会看到它与 VT_DISPATCH 匹配。 以下是如何手动生成正确对象的魔法:

arg1 = win32com.client.VARIANT(pythoncom.VT_DISPATCH, None)
modelExt.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, False, 0, arg1, 0)

3.2 第二个例子

出错代码:

selMgr = model.SelectionManager
aSketch = selMgr.GetSelectedObject(1).GetSpecificFeature2
aSketch.GetReferenceEntity(0)

错误类型:

Traceback (most recent call last): File "", line 1, in File ">", line 2, in GetReferenceEntity pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)

函数定义:

	def GetReferenceEntity(self, LEntityType=defaultNamedNotOptArg):'Get entity that this sketch is created on'return self._ApplyTypes_(52, 1, (9, 0), ((16387, 3),), u'GetReferenceEntity', None,LEntityType)

然后查看 VARIANT 网页,我们发现 16387 = pythoncom.VT_BYREF | pythoncom.VT_I4 所以 GetReferenceEntity 使用一个输出参数来返回实体类型。 我们可以构造一个类似于我们为 SelectByID2 所做的输出参数:

    arg1 = win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, -1)refPlane = aSketch.GetReferenceEntity(arg1)

variant=win32com.client.VARIANT(16396, [1, 2, 3, 4, 5])

获取variant中的数据:variant.value

[1, 2, 3, 4, 5]

参考文献

1、Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

2、Library of macros and scripts to automate SOLIDWORKS

http://www.lryc.cn/news/218122.html

相关文章:

  • 广告引擎检索技术快速学习
  • Scala的类和对象
  • SQL中 <>(不等于)运算符只会匹配那些具有非空值的记录
  • 冒泡排序(Java)
  • k8s集群调度
  • Scala中类的继承、抽象类和特质
  • 小程序如何实现登录数据持久化
  • Maven本地配置获取nexus私服的依赖
  • 第02章-变量与运算符
  • SpringBoot数据响应、分层解耦、三层架构
  • go测试库之apitest
  • K8S删除资源后一直处于Terminating状态无法删除解决方法
  • jvm实践
  • redis-plus-plus访问REDIS集群
  • python把Word题库转成Excle题库
  • 算法通关村第六关-白银挑战树
  • 【Java对象】一文读懂 Java 对象庐山真面目及指针压缩
  • leetcode做题笔记210. 课程表 II
  • 【深度学习 AIGC】stable diffusion webUI 使用过程,参数设置,教程,使用方法
  • 论文阅读 - Detecting Social Bot on the Fly using Contrastive Learning
  • PaddleMIX学习笔记(1)
  • 【网络协议】聊聊HTTPS协议
  • 2023.11.2事件纪念
  • Scala和Play WS库编写的爬虫程序
  • 佳易王配件进出库开单打印进销存管理系统软件下载
  • 【深度学习基础】专业术语汇总(欠拟合和过拟合、泛化能力与迁移学习、调参和超参数、训练集、测试集和验证集)
  • 【C语言:函数栈帧的创建与销毁】
  • 怎么在C++中实现云端存储变量
  • 短视频矩阵营销系统工具如何助力商家企业获客?
  • PCL 计算一个平面与包围盒体素的相交线