vbscript - 如何通过 VBscript 获取 CAD 零件的位置?
问题描述
我想编写一个 VBScript,它输出 CAD 零件的位置 (x,y,z)。输入应该是零件号。这是我尝试过的。
Sub CATMain()
dim pos(11)
for n = 1 to CATIA.Documents.Count
set Dokument = CATIA.Documents.Item(n)
for i = 1 to Dokument.product.products.Count
set InstDokument = Dokument.product.products.item(i)
If InstDokument = "my_part" Then
msgbox InstDokument.Name
InstDokument.Position.GetComponents pos
msgbox "Origin Point: X= " &pos(9) &" Y= " &pos(10) &" Z= " &pos(11)
End If
next
next
End Sub
我在第 8 行第 2 列出现错误。对象没有属性或方法。:Dokument.product 我该如何解决?
解决方案
您的代码有几个问题。
根源大概是这样的:
set Dokument = CATIA.Documents.Item(n)
CATIA 文档集合将包含许多没有窗口的文档,并且 CATIA 应用程序为它自己的各种内部目的而维护这些文档。因此,不能保证 CATIA.Documents.Item(n) 实际上包含 CATProduct。
在大多数情况下,人们对当前的活动文档感兴趣,它的检索方式如下:
Set Dokument = CATIA.ActiveDocument
否则你可以测试一下
Set Dokument = CATIA.Documents.Item(n)
if typename(Dokument) = "ProductDocument" Then ...
即使在那之后你也有问题。您正在将 Document 对象与字符串进行比较......以及其他内容。同样,如果没有递归,如果目标实例比第一级更深,您可能永远找不到目标实例。与“阅读树”相比,搜索也可能是找到您的实例的更好方法。
一旦您纠正了所有基础设施错误,您获取转换矩阵的方法基本上是正确的。
推荐阅读
- python - 匹配词行不在最终列表中考虑,而是基于索引值
- html - 2个div之间的白色垂直线
- xpath - 在节点属性中使用变量
- python - 从使用 ipc 到 python 订阅者的 Zmq pub 不起作用,但 tcp 可以
- php - Laravel 4.2 迁移到一个新的服务器重定向问题
- java - BigDecimal 舍入模式
- delete-row - 如何使用 sqlldr、ctl 删除文件中的空行
- javascript - 我的表格标题分为两行文本,我不知道为什么
- node.js - 从文本文件到 JSON 对象的文本数据
- tcl - 如何在另一个proc中引用proc中的变量