
A while back, I wrote a little utility to clear part file appearance overrides. I have since updated the code and thought it was worth sharing again on the blog.
The original code ran through the model and cleared overrides as expected, but needed an “Undo Wrapper” to help with undoing the command in the event of a mistake by the user (I included this as the bottom of the original), some time after writing that post, I did some work with hacking the Inventor progress bar for iLogic. The new code now includes all 3 of these elements, and is a nice practical example of how the Inventor progress bar can be incorporated into an iLogic utility that is run in a part file.
The animated GIF below shows the code in action:

Here is the iLogic code:
'Original Code by @ClintBrown3D posted at https://clintbrown.co.uk/clear-part-appearance-overrides-updated
On Error GoTo Clint
'Exit if this is not a part file
If ThisDoc.ModelDocument.DocumentType = kAssemblyDocumentObject Then : Return : End If
If ThisDoc.ModelDocument.DocumentType = kDrawingDocumentObject Then : Return : End If
Dim oPartDoc As PartDocument
oPartDoc = ThisApplication.ActiveDocument
Dim oCompDef As ComponentDefinition
oCompDef = oPartDoc.ComponentDefinition
Surfaces = 0 'Count Surfaces for the Progress Bar
Dim oFaces As Faces
Dim oFace As Face
Dim oSurfBodies As SurfaceBodies
Dim oSurfBody As SurfaceBody
oSurfBodies = oCompDef.SurfaceBodies
For Each oSurfBody In oSurfBodies
oFaces = oSurfBody.Faces
For Each oFace In oFaces
Surfaces = Surfaces + 1
Next
Next
Dim oProgressBar As Inventor.ProgressBar 'Create a new Progress Bar
oProgressSteps = Surfaces
oProgressStep = 0
oProgressStaticText = "Clearing Face Colour Overrides: Step "
oProgressBar = ThisApplication.CreateProgressBar(False, oProgressSteps, "@ClintBrown3D")'Big Progress Bar, use True for small
oProgressBar.Message = (oProgressStaticText & oProgressStep & " of " & oProgressSteps)
oProgressBar.UpdateProgress
oDoc = ThisDoc.Document ' UNDO WRAPPER
Dim UNDO As Transaction
UNDO = ThisApplication.TransactionManager.StartTransaction(oDoc, "Clear Appearance overrides")
oPartDoc = ThisApplication.ActiveDocument
oCompDef = oPartDoc.ComponentDefinition
oSurfBodies = oCompDef.SurfaceBodies
For Each oSurfBody In oSurfBodies
oFaces = oSurfBody.Faces
For Each oFace In oFaces
oFace.SetRenderStyle(kPartRenderStyle)
oProgressStep = oProgressStep + 1
oProgressBar.Message = (oProgressStaticText & oProgressStep & " of " & oProgressSteps)
oProgressBar.UpdateProgress
Next
Next
UNDO.End 'End Transaction UNDO WRAPPER
oProgressBar.Close
Return
Clint :
MessageBox.Show("Something has gone terribly wrong!", "@ClintBrown3D", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1)
And just for fun, here is some code to apply a random colour to each face of a part file, this is based on the code above, as well as the code I wrote for the blog post “Set Random Face Colours With iLogic”. As with the code above, I have included the “Undo Wrapper” and the Inventor progress bar to show it in action.

'Original Code by @ClintBrown3D posted at https://clintbrown.co.uk/ilogic-reset-faces On Error Resume Next 'Exit if this is not a part file If ThisDoc.ModelDocument.DocumentType = kAssemblyDocumentObject Then : Return : End If If ThisDoc.ModelDocument.DocumentType = kDrawingDocumentObject Then : Return : End If Dim oPartDoc As PartDocument oPartDoc = ThisApplication.ActiveDocument Dim oCompDef As ComponentDefinition oCompDef = oPartDoc.ComponentDefinition Surfaces = 0 'Count Surfaces for the Progress Bar Dim oFaces As Faces Dim oFace As Face Dim oSurfBodies As SurfaceBodies Dim oSurfBody As SurfaceBody oSurfBodies = oCompDef.SurfaceBodies For Each oSurfBody In oSurfBodies oFaces = oSurfBody.Faces For Each oFace In oFaces Surfaces = Surfaces + 1 Next Next Dim oProgressBar As Inventor.ProgressBar 'Create a new Progress Bar oProgressSteps = Surfaces oProgressStep = 0 oProgressStaticText = "Setting Face Colour Overrides: Step " oProgressBar = ThisApplication.CreateProgressBar(False, oProgressSteps, "@ClintBrown3D")'Big Progress Bar, use True for small oProgressBar.Message = (oProgressStaticText & oProgressStep & " of " & oProgressSteps) oProgressBar.UpdateProgress oDoc = ThisDoc.Document ' UNDO WRAPPER Dim UNDO As Transaction UNDO = ThisApplication.TransactionManager.StartTransaction(oDoc, "Clear Appearance overrides") oPartDoc = ThisApplication.ActiveDocument oCompDef = oPartDoc.ComponentDefinition oSurfBodies = oCompDef.SurfaceBodies For Each oSurfBody In oSurfBodies oFaces = oSurfBody.Faces For Each oFace In oFaces RANDOMISER = Round(Rnd * 750) oStyle = oDoc.RenderStyles.Item(RANDOMISER) oFace.SetRenderStyle(kOverrideRenderStyle, oStyle) oProgressStep = oProgressStep + 1 oProgressBar.Message = (oProgressStaticText & oProgressStep & " of " & oProgressSteps) oProgressBar.UpdateProgress Next Next UNDO.End 'End Transaction UNDO WRAPPER oProgressBar.Close Return
You must be logged in to post a comment.