I ran across a really interesting thread on the Autodesk Inventor ideas station. The feature request is to have a visual style in Inventor that sets every component in an assembly to a unique colour.
A comment by Tanner Dant included some VBA code, which creates a new view representation called “Unique Colors” and sets each component to it’s own colour. The Assembly can be set back to “Default”, restoring the model. Running the rule again cycles the model through a different set of unique colours and updates the view rep.
I thought this was really useful, so I adapted it to work with iLogic.
The animated GIF below shows the code in action.
The only tricky bit of the code was generating the random colours. In Tanners VBA code, he uses a Function to randomise the colours. I was able to achieve the same thing, by creating a random value for each or the RGB values required.
RNG = Round(Rnd * 255) RNG1 = Round(Rnd * 255) RNG2 = Round(Rnd * 255)
Here is the iLogic Code:
'Code based on an Inventor Ideas forum post by Tanner Dant 'https://forums.autodesk.com/t5/Inventor-ideas/visual-style-every-part-With-different-color/idc-p/8713666#M34691 'Adapted for iLogic by @ClintBrown3D, originally posted at https://clintbrown.co.uk/ilogic-set-every-part-to-a-different-colour Sub Main() Dim topAsm As AssemblyDocument topAsm = ThisApplication.ActiveDocument Dim trans As Transaction trans = ThisApplication.TransactionManager.StartTransaction(topAsm, "Unique Colors") Dim ucRep As DesignViewRepresentation On Error GoTo CreateDV ucRep = topAsm.ComponentDefinition.RepresentationsManager.DesignViewRepresentations("Unique Colors") On Error GoTo 0 ucRep.Activate Dim compOcc As ComponentOccurrence For Each compOcc In topAsm.ComponentDefinition.Occurrences Dim uAppearance As Asset uAppearance = topAsm.Assets.Add(kAssetTypeAppearance, "Generic", "appearances") Dim uColor As ColorAssetValue uColor = uAppearance.Item("generic_diffuse") RNG = Round(Rnd * 255) RNG1 = Round(Rnd * 255) RNG2 = Round(Rnd * 255) uColor.Value = ThisApplication.TransientObjects.CreateColor(RNG, RNG1, RNG2) compOcc.Appearance = uAppearance Next trans.End Exit Sub CreateDV: ucRep = topAsm.ComponentDefinition.RepresentationsManager.DesignViewRepresentations.Add("Unique Colors") Resume Next End Sub