Скрытие всех ограничений в сборке

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

Скрытие всех ограничений в сборке

Сообщение VladimirK » 31 авг 2012 18:38

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

Вариант 1: Выделяем корневую сборку (добавляем в Selection) и через Selection.Search ищем все ограничения запросом. После этого станут выделены все ограничения и тогда выполняем их скрытие:

Код: Выделить всё
Sub Main()
Dim CatiaApp As Application
Dim ProdDoc As ProductDocument
Dim Prod As Product
Dim Sel As Selection
Set CatiaApp = GetObject(, "CATIA.Application")
Set ProdDoc = CatiaApp.ActiveDocument
Set Prod = ProdDoc.Product
Set Sel = ProdDoc.Selection
Sel.Clear
Sel.Search "(((((('Product Structure'.Constraint + FreeStyle.Constraint) + 'Assembly Design'.Constraint) + Sketcher.Constraint) + Drafting.Constraint) + 'Part Design'.Constraint) + 'Functional Molded Part'.Constraint);all"
' для русского языка интерфейса:
'        Sel.Search "(((((('Структура изделия'.Ограничение + FreeStyle.Ограничение) + 'Проектирование сборок'.Ограничение) + 'Создание эскизов'.Ограничение) + Черчение.Ограничение) + 'Проектирование деталей'.Ограничение) + 'Functional Molded Part'.Ограничение);вез"
If Sel.Count2 > 0 Then
 Sel.VisProperties.SetShow catVisPropertyNoShowAttr
 Sel.Clear
End If
End Sub


В этом случае скрытие происходит не на всех сборках, может отрабатывать на одном ПК, а не работать на другом.

Вариант 2: Рекурсивно проходимся по всей сборке, и у каждой подсборки (если это CATProduct) получаем коллекцию Constraints. В коллекции по циклу перебираем все ограничения и добавляем в Selection. Потом все ограничения скрываем:

Код: Выделить всё
Sub Main()
Dim CatiaApp As Application
Dim ProdDoc As ProductDocument
Dim Prod As Product
Dim Sel As Selection
Set CatiaApp = GetObject(, "CATIA.Application")
Set ProdDoc = CatiaApp.ActiveDocument
Set Prod = ProdDoc.Product
Set Sel = ProdDoc.Selection
Sel.Clear
Call ScanProductTree(Prod, 1)
If Sel.Count2 > 0 Then
Sel.VisProperties.SetShow catVisPropertyNoShowAttr
Sel.Clear
End If
End Sub

Public Sub ScanProductTree(ItemProd As Product, Level As Long)
Dim iDoc As Document
Dim iName As String
Dim pos As Long
Dim iExt As String
Dim constrCol As Constraints
Dim cn As Constraint
Dim n As Long
Dim i As Long
Set iDoc = ItemProd.ReferenceProduct.Parent
iName = iDoc.Name
pos = InStrRev(iName, ".", , vbTextCompare)
iExt = Right(iName, Len(iName) - pos)
If UCase(iExt) = "CATPRODUCT" Then
    Set constrCol = ItemProd.Connections("CATIAConstraints")
    If constrCol.Count > 0 Then
        For i = 1 To constrCol.Count
            Set cn = constrCol.Item(i)
            Sel.Add cn
        Next i
    End If
End If
n = ItemProd.Products.Count
If n > 0 Then
    For i = 1 To n
        Call ScanProductTree(ItemProd.Products.Item(i), Level + 1)
    Next i
End If
End Sub


В данном случае рекурсивная процедура проходит по всем подсборкам, получаются коллекции Constraints для каждой подсборки. Свойства коллекций считываются без ошибок, количество ограничений совпадает, но получение самих ограничений (Set cn = constrCol.Item(i) в коде) работает только для корневой сборки, а для всех остальных подсборок возникает ошибка "Индекс находится вне диапазона", хотя индекс корректен. Проверено на разных сборках. Получается что можно работать с ограничениями, которые находятся только в корневой сборке. И если подсборку открыть в новом окне (она станет корневой), то получение ограничений работает для данной подсборки.

Может кто-нибудь сталкивался с такой проблемой? Как можно получить ограничения сборки и всех её подсборок, находясь в корневой. Не открывать же каждую подсборку в новом окне. Спасибо.
VladimirK
Новичок
Новичок
 
Сообщения: 63
Зарегистрирован: 15 ноя 2011 21:44

Re: Скрытие всех ограничений в сборке

Сообщение [PTM] » 31 авг 2012 20:18

скрипт скрытия есть либо в поставке кати, либо в хелпе
Изображение
Аватара пользователя
[PTM]
Moderator
 
Сообщения: 2159
Images: 43
Зарегистрирован: 13 сен 2007 13:03
Откуда: Rzn
Blog: View Blog (15)

Re: Скрытие всех ограничений в сборке

Сообщение Artem » 03 сен 2012 09:18

А точно везде первый вариант проверял в дизайн моде? - это раз....
русский кстати разный есть - как минимум "родной" катькин и неродной постарше (но кстати полнее по модулям...) -там строка поиска может другая быть...
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Скрытие всех ограничений в сборке

Сообщение VladimirK » 03 сен 2012 13:01

Здравствуйте [PTM], Artem.
Нашёл в чём была ошибка. Сделал через рекурсивный проход по дереву сборки. Оказывается коллекцию ограничений нужно было получать не у объекта Product, а у его ReferenceProduct. Вместо
Код: Выделить всё
Set constrCol = ItemProd.Connections("CATIAConstraints")

сделал
Код: Выделить всё
Set constrCol = ItemProd.ReferenceProduct.Connections("CATIAConstraints")

Нашёл это в скрипте по поиску разрушенных ограничений SelectBrokenConstaints.catvbs из поставки CATIA.
Спасибо вам за ответы!
VladimirK
Новичок
Новичок
 
Сообщения: 63
Зарегистрирован: 15 ноя 2011 21:44

Re: Скрытие всех ограничений в сборке

Сообщение [PTM] » 03 сен 2012 16:31

на здоровье
Изображение
Аватара пользователя
[PTM]
Moderator
 
Сообщения: 2159
Images: 43
Зарегистрирован: 13 сен 2007 13:03
Откуда: Rzn
Blog: View Blog (15)


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

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

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

cron