У меня есть этот код для Catia v5, и он работает нормально. Единственная проблема заключается в том, что когда вы выполняете команду «selection1.Add», она проходит через все компоненты документа, независимо от того, видимы они или нет, что замедляет работу кода при выполнении этой строки. Есть ли у кого-нибудь предложения по улучшению?
Я думал о фильтрации «invertedSelection» только с видимыми частями внутри видимых продуктов, то есть, если продукт видим, ищите видимые части в этом продукте. Если у вас есть видимые части в этом видимом продукте, добавьте их в «InvertedSelection». Если изделие не видно, не ищите детали внутри изделия.
Sub CATMain()
Dim selection1 As Selection
Set selection1 = CATIA.ActiveDocument.Selection
Dim visPropertySet1 As VisPropertySet
Set visPropertySet1 = selection1.VisProperties
If selection1.Count > 0 Then
' Retrieve the Groups collection
Dim cGroups As Object
Set cGroups = CATIA.ActiveDocument.product.GetTechnologicalObject("Groups")
' Create a group with selected products
Dim oGroup As Group
Set oGroup = cGroups.AddFromSel
' Fill the selection with the inverted group
oGroup.FillSelWithInvert
visPropertySet1.SetShow 1
' Store the inverted selection in a collection
Dim invertedSelection As New Collection
Dim i As Integer
For i = 1 To selection1.Count
invertedSelection.Add selection1.Item(i).Value
Next i
' Clear the selection
selection1.Clear
UserForm1.Show
' Code will continue here while the UserForm is open
Do While UserForm1.Visible
DoEvents
Loop
' Make the components in the inverted selection visible again
For i = 1 To invertedSelection.Count
selection1.Add invertedSelection.Item(i)
Next i
Dim visPropertySet2 As VisPropertySet
Set visPropertySet2 = selection1.VisProperties
visPropertySet2.SetShow 0
selection1.Clear
Else
MsgBox "Nenhum componente selecionado", vbExclamation, "Isolate Components"
Exit Sub
End If
End Sub
Ты прав. Это в (Выбор1.Добавить)
Для повышения производительности работы с выделением можно отключить подсветку выбранных элементов.
'switch highlighting off
Catia.HSOSynchronized = false
'do stuff with the selection
'turn highlighting on (e.g. end of your code)
Catia.HSOSynchronized = true
Это гораздо лучше. Спасибо. Еще одно: когда вы делаете это «Делать, пока UserForm1.Visible», у мыши есть колесо «Мышление», и оно исчезает только тогда, когда я навожу указатель мыши на UserForm. Есть ли способ решить эту проблему?
Вы можете разделить свой код на несколько подразделов. в конце первого подраздела отображается пользовательская форма. При закрытии (например, нажатии кнопки) вызывается второй сабвуфер.
Но если я разделю его на несколько подгрупп, я потеряю выделение, хранящееся в переменной «InvertedSelection». Или я неправильно думаю?
Как насчет использования глобального объекта/переменной для этого сбора или передачи его в пользовательскую форму. Что делаете в пользовательской форме? Почему вы очищаете выбор?
на самом деле пользовательская форма не имеет кода. Я снимаю выбор, потому что в любом случае выбор будет очищен при моем взаимодействии с программным обеспечением. Я не создавал глобальную переменную, потому что не мог этого сделать. Можете ли вы помочь решить эту проблему?
Другой вариант — использовать группу (или уже созданную группу), как в вашем примере, для хранения выбранных элементов.
Изменение видимости (SetShow) или выбор деталей/продуктов (Selection1.Add) происходит медленно?