Как я могу получить положение детали САПР через 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 Как я могу решить эту проблему?


person Kevin Winnik    schedule 02.12.2019    source источник


Ответы (1)


Есть несколько проблем с вашим кодом.

В корне наверное это:

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 со строкой... и другими вещами. Также без рекурсии вы можете никогда не найти свой целевой экземпляр, если он глубже, чем на первом уровне. Также возможно, что поиск может быть лучшим способом найти ваш экземпляр, чем «Чтение дерева».

После того, как вы исправите все ошибки своей инфраструктуры, ваш метод получения матрицы преобразования станет в основном правильным.

person C R Johnson    schedule 02.12.2019