如何通过 VBscript 获取 CAD 零件的位置?
How can I get the position of a CAD part via VBscript?
我想写一个 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 文档集合将包含许多 windows 没有的文档,CATIA 应用程序为其自身的各种内部目的维护这些文档。所以不能保证 CATIA.Documents.Item(n) 实际上包含一个 CATProduct.
在大多数情况下,人们对当前的活动文档感兴趣,它是这样检索的:
Set Dokument = CATIA.ActiveDocument
否则你可以测试一下
Set Dokument = CATIA.Documents.Item(n)
if typename(Dokument) = "ProductDocument" Then ...
即使在那之后你也有问题。您正在将 Document 对象与字符串进行比较……以及其他内容。同样,如果没有递归,如果目标实例比第一层更深,您可能永远找不到目标实例。也有可能搜索比 "Reading the tree" 更能找到您的实例。
一旦您纠正了所有基础结构错误,您获取转换矩阵的方法就基本上是正确的了。
我想写一个 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 文档集合将包含许多 windows 没有的文档,CATIA 应用程序为其自身的各种内部目的维护这些文档。所以不能保证 CATIA.Documents.Item(n) 实际上包含一个 CATProduct.
在大多数情况下,人们对当前的活动文档感兴趣,它是这样检索的:
Set Dokument = CATIA.ActiveDocument
否则你可以测试一下
Set Dokument = CATIA.Documents.Item(n)
if typename(Dokument) = "ProductDocument" Then ...
即使在那之后你也有问题。您正在将 Document 对象与字符串进行比较……以及其他内容。同样,如果没有递归,如果目标实例比第一层更深,您可能永远找不到目标实例。也有可能搜索比 "Reading the tree" 更能找到您的实例。
一旦您纠正了所有基础结构错误,您获取转换矩阵的方法就基本上是正确的了。