Code:
' COPYRIGHT DASSAULT SYSTEMES 2002
Option Explicit' ***********************************************************************
' Purpose : Change the color of products using a color randomly selected in a table.
' Assumptions : A CATProduct document should be active.
' Author :
' Languages : VBScript
' Locales : English
' CATIA Level : V5R6
' ***********************************************************************
Dim iMax ' Number of colors in the table minus one
iMax = 19
' ***********************************************************************
'
' Purpose: Add a product in a group.
'
' Inputs : oNode Product the product
' oGroup Product the array of group
' iIndex Integer the index of the product
'
' ***********************************************************************
Sub TreatANode(ByRef oNode, ByRef oGroup, ByRef iIndex)
Dim iNumberOfSubComponent As Integer
iNumberOfSubComponent = oNode.Products.Count
If (iNumberOfSubComponent = 0) Then
' Add the leaf to the group
oGroup(iIndex).AddExplicit oNode
' Prepare the next index
iIndex = iIndex + 1
If (iIndex > iMax) Then
iIndex = 0
End If
Else
' Treat the subcomponents
Dim I As Integer
For I = 1 to iNumberOfSubComponent
Call TreatANode(oNode.Products.Item(I), oGroup, iIndex)
Next
End If
End Sub
' ***********************************************************************
'
' Purpose: Main.
'
' ***********************************************************************
Sub CATMain()
' Build the color table (oColor(i,0) = Red, oColor(i,1) = Green, oColor(i,2) = Blue)
Dim oColor(19,2)
'Red
ocolor(0,0)=255
ocolor(0,1)=0
ocolor(0,2)=0
'Dark Red
ocolor(1,0)=220
ocolor(1,1)=90
ocolor(1,2)=90
'Light Red
ocolor(2,0)=255
ocolor(2,1)=150
ocolor(2,2)=150
'Fushia
ocolor(3,0)=255
ocolor(3,1)=150
ocolor(3,2)=230
'Green
ocolor(4,0)=60
ocolor(4,1)=255
ocolor(4,2)=30
'Dark Green
ocolor(5,0)=30
ocolor(5,1)=190
ocolor(5,2)=30
'Light Green
ocolor(6,0)=190
ocolor(6,1)=255
ocolor(6,2)=130
'Green-blue
ocolor(7,0)=80
ocolor(7,1)=255
ocolor(7,2)=160
'Blue
ocolor(8,0)=80
ocolor(8,1)=225
ocolor(8,2)=255
'Dark Blue
ocolor(9,0)=90
ocolor(9,1)=140
ocolor(9,2)=255
'Light Blue
ocolor(10,0)=180
ocolor(10,1)=255
ocolor(10,2)=255
'Yellow
ocolor(11,0)=255
ocolor(11,1)=255
ocolor(11,2)=30
'Dark Yellow
ocolor(12,0)=128
ocolor(12,1)=128
ocolor(12,2)=30
'Yellow-orange
ocolor(13,0)=255
ocolor(13,1)=190
ocolor(13,2)=70
'Brown
ocolor(14,0)=160
ocolor(14,1)=90
ocolor(14,2)=60
'Light Brown
ocolor(15,0)=200
ocolor(15,1)=170
ocolor(15,2)=140
'Pink
ocolor(16,0)=220
ocolor(16,1)=0
ocolor(16,2)=220
'Mauve
ocolor(17,0)=190
ocolor(17,1)=90
ocolor(17,2)=255
'Grey
ocolor(18,0)=128
ocolor(18,1)=128
ocolor(18,2)=128
'White
ocolor(19,0)=200
ocolor(19,1)=200
oColor(19,2)=200
' Retrieve the root product
Dim oRoot_Product As AnyObject
Set oRoot_Product = CATIA.ActiveDocument.Product
' Retrieve the selection object
Dim oSelection As Selection
Set oSelection = CATIA.ActiveDocument.Selection
' Build the groups of products which will share the same color
Dim oGroup(20)
Dim cGroups As Groups
Set cGroups = oRoot_Product.GetTechnologicalObject("Groups")
Dim I as integer
For I = 0 to 19
Set oGroup(I) = cGroups.Add
Next
' Build the groups by exploring recursively all nodes in the product structure
Dim iIndex
iIndex = 0
Call TreatANode(oRoot_Product, oGroup, iIndex)
' Set the colors
For I = 0 to 19
oGroup(I).FillSelWithExtract
oSelection.VisProperties.SetRealColor oColor(I,0), oColor(I,1), oColor(I,2), 1
cGroups.Remove oGroup(I).Name
Set oGroup(I) = Nothing
Next
oSelection.Clear
Set oSelection = Nothing
Set oRoot_Product = Nothing
MsgBox "Teile einfaerben abgeschlossen ! Sie koennen weiterarbeiten ...."
End Sub