Проблема с получением PartNumber из VB кода

Программирование для CATIA.

Проблема с получением PartNumber из VB кода

Сообщение e_besp » 17 сен 2008 22:23

Здравствуйте все...
Столкнулся с проблемой... Использовал макрос на CATScript, который заполнял основную надпись чертежа, используя параметры модели, с которой генерировался главный вид. Параметры Обозначение, Наименование, Материал и Масса этот макрос получал следующим образом (и делал это без сбоев):

Dim TextFrame1, TextFrame2, TextFrame3, TextFrame4 as String
Dim DrwSheet as DrawingSheet

Set DrwSheet = Catia.ActiveDocument.Sheets.ActiveSheet

TextFrame1 = DrwSheet.Views.Item("Front view").GenerativeBehavior.Document.PartNumber
TextFrame2 = DrwSheet.Views.Item("Front view").GenerativeBehavior.Document.Definition
TextFrame3 = DrwSheet.Views.Item("Front view").GenerativeBehavior.Document.Nomenclature
TextFrame4 = CStr(DrwSheet.Views.Item("Front view").GenerativeBehavior.Document.Analyze.Mass

Когда я попытался использовать эту конструкцию в программе, написанной на VB6, она не сработала, потому что выражение

DrwSheet.Views.Item("Front view").GenerativeBehavior.Document

возвращает объект типа AnyObject , который не имеет свойств PartNumber, Definition, Nomenclature и т.п.
Путем долгих тыков я родил конструкцию

TextFrame1 = DrwSheet.Views.Item("Front view").GenerativeBehavior.Document.Parent.Product.PartNumber
TextFrame2 = DrwSheet.Views.Item("Front view").GenerativeBehavior.Document.Parent.Product.Definition
TextFrame3 = DrwSheet.Views.Item("Front view").GenerativeBehavior.Document.Parent.Product.Nomenclature

которая вроде работала. Но по мере ее использования оказалось, что она сначала срабатывала 9 раз из 10 - ти, а потом все реже и реже, на некоторых сборках не срабатывает вообще. Иногда этот глюк лечится перезагрузкой Катии, иногда это не помогает. Отсюда вопрос - как правильно в VB6 коде получить ссылку на документ, содержащий продукт с которого генерировался главный вид и потом соответственно на упомянутые параметры этого продукта? Катя V5R16 SP4
Заранее спасибо
e_besp
Новичок
Новичок
 
Сообщения: 2
Зарегистрирован: 17 сен 2008 21:45

Re: Проблема с получением PartNumber из VB кода

Сообщение Artem » 18 сен 2008 07:59

1)Осторожней с языком а то получишь вместо Front View - Фронтальный вид ,вместо Part Number - номер детали
2)Любой абсолютно макрос на VBscript будет работать на VBA если сделать переменные не типовыми а variant (ну или те на которые ругается - dim selection 'as selection,например, всегда почти отказывается работать)
3)Массу и иже с ним (поверхность и обьем) получишь только при загруженной детали да еще (точно не помню ,но что-то точно из-за этого глючило) и в дизайн мод надо переводить(соответственно если очень надо то придется загружать и переводить если с кэшем работаешь)
4)Апдейт у чертежа гореть не должен

Public Function ProductDrawn() As Product
Dim DrwViews As DrawingViews
Set DrwViews = CATIA.ActiveDocument.Sheets.ActiveSheet.Views
On Error Resume Next
Err.Clear
If DrwViews.Count < 3 Then Exit Function
Set ProductDrawn = DrwViews.Item(3).GenerativeBehavior.Document
If Err.Number <> 0 Then
Err.Clear
Dim Prd As Variant
Dim I As Integer
Dim J As Integer
Dim dd As Document
For I = 3 To DrwViews.Count
Set Prd = DrwViews.Item(I).GenerativeBehavior.Document
If Err.Number <> 0 Then
Err.Clear
Else
For J = 1 To 9
If Right(Prd.Parent.Name, 5) <> "oduct" And Right(Prd.Parent.Name, 3) <> "art" Then
Set Prd = Prd.Parent
Else
Err.Clear
Set dd = Prd.Parent
Set ProductDrawn = dd.Product
Exit For
End If
Next
Exit For
End If
Next
Err.Clear
End If
End Function
PS.Цветы и конфеты не пью....
PSS.Параметры еще можно получить альтернативно: ProductDrawn.Parameters.Item(PartNumberofelement + "\" +Nameofparameter).ValueAsString...Когда писал про русский "номер детали" имелся ввиду ессно этот вариант
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Проблема с получением PartNumber из VB кода

Сообщение e_besp » 18 сен 2008 21:32

Artem, спасибо за ответ.
Я наверное неверно выразился - на самом деле проблема была с получением PartNumber из VB6 кода. Дело в том что и в CATScript и в VBA выражение:
Msgbox Catia.ActiveDocument.Sheets.Item("Sheet.1").Views.Item("Front view").GenerativeBehavior.Document.PartNumber
без проблем возвращает строку с PartNumber
В VB6 если использовать это выражение, то происходит ошибка типа "Объект не поддерживает метод", а выражение:
Msgbox Catia.ActiveDocument.Sheets.Item("Sheet.1").Views.Item("Front view").GenerativeBehavior.Document.Parent.Product.PartNumber
работает нестабильно
Однако твоя функция мне помогла, только я не понял почему.

Я делал
Dim AnyProd as Product
Set AnyProduct = Catia.ActiveDocument.Sheets.Item("Sheet.1").Views.Item("Front view").GenerativeBehavior.Document
Тут она мне ругалась TypeMismatch, потому что первая половина выражения типа Product, а вторая - типа AnyType. Не срабатывало также если объявить AnyProd как Variant. Вернее срабатывало, но этот Variant потом не поддерживал (ошибка Объект не поддерживает метод).Parent.Product.PartNumber, т.е. извлечь из него необходимую информацию я не мог.

Сейчас я делаю
Dim AnyProd as Product
Set AnyProd = ProductDrawn

Public Function ProductDrawn() as Product
Set ProductDrawn = Catia.ActiveDocument.Sheets.Item("Sheet.1").Views.Item("Front view").GenerativeBehavior.Document
End function

И тут она почемуто работает, хотя я так и не понял в чем разница между этими двумя вариантами.
Ну а получить PartNumber, имея ссылку на Product, уже не составляет труда.
Еще раз большое спасибо!!! :Bravo:

P.S. А главный вид я выбираю по названию ("Front view") а не по индексу (3) для того чтобы конечный пользователь методом переименовывания видов мог выбрать вид который ссылается на нужный документ модели, обозначение которого должно быть в основной надписи чертежа (в случае если чертеж имеет несколько ссылок).
e_besp
Новичок
Новичок
 
Сообщения: 2
Зарегистрирован: 17 сен 2008 21:45


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron