Selection sets are nice CATIA feature to group and store selected elements of any type. They are pretty well described in V5Automation reference. The purpose of the methods of a SelectionSets object like CreateSelectionSet, DeleteSelectionSet or RenameSelectionSet is quite obvious, other methods like AddCSOIntoSelectionSet or PutSelectionSetIntoCSO are a bit less obvious, but at the first glance, we have enough to start with. However, there is no real-world example or use case which could help us at the beginning.
What's worse, there is no information about how to get or create this object. Or at least I could not find it in official VBA reference. But after a bit of googling, I found an answer. The missing piece of the puzzle. A trick to get a SelectionSets object of a product. And although it looks quite weird and a bit scary, it works.
Set selSets = doc.Product.GetItem("CATIAVBSelectionSetsImpl")
With this information, there is no problem to write a simple script to test the functionality of selection sets in VBA.
How things work
- Open product
- Select some parts or assemblies and launch a macro
Sub Main()
Dim doc, sel, setName
setName = "Example"
Set doc = CATIA.ActiveDocument
Set sel = doc.Selection
Dim selSets
' get SelectionSets object (a tricky part)
Set selSets = doc.Product.GetItem("CATIAVBSelectionSetsImpl")
' create new selection set
selSets.CreateSelectionSet setName
' add selected elements to selection set
selSets.AddCSOIntoSelectionSet setName
sel.Clear
' activate the content of selection set
selSets.PutSelectionSetIntoCSO setName
'Dim a()
'selSets.GetListOfSelectionSet a
End Sub
A new selection set named "Example" is created and highlighted and it contains selection content. Press Ctrl+G to open Selection Sets Selection dialog window.
However, I have a problem to get a list of selection sets. Last 2 lines of code should work, but I experience a CATIA crash on my machine when I uncomment them. If you find a way how to get such a list, please let me know :).
Dim a(1)
Set the array size.
and then
I got a list of selection sets.