Blog posts


by Luke Davenport


You’ve got a clever iLogic configurator assembly (or part) and you are using it to generate new assemblies on demand. But how can you lock down the configured assembly so that the ‘As Built’ state of the file is maintained?



Well – this is a big topic. If you are worried about file security your best bet is to get Vault installed and start locking released files properly to prevent edits. However for my loyal readers without the benefit of Vault – it may be beneficial to have the option of ‘stripping’ all the iLogic out of the assembly once generated, thus making edits not quite so simple.


So with that in mind the iLogic code below will delete every iLogic rule in every component in the assembly, including rules in the top level assembly itself. It will however, preserve any rules called ‘Delete All Rules’. This exception means that you can name this rule ‘Delete All Rules’ when you paste it into the top-level assembly, and ensure that it won’t delete itself when it runs, causing a lapse in the space-time continuum.


Note: This rule will still work if you paste into a single part file and run it, but of course make sure you still name the rule ‘Delete All Rules’.



Cadline won’t take responsibility for accidental loss of iLogic rules as a result of using this code.

Backup ALL part files (not just the top-level assembly) before using.


If you use this code on an Inventor file without backing it up first please don’t come running to me!


Note: Some code appropriated from J.D.Kriek on the Inventor forum here – many thanks.


' Luke Davenport 2014

' Start of iLogic code..................................................................


Sub Main()


Auto = iLogicVb.Automation

Dim iLogicAuto As Object = Auto

Dim oDoc As Document = ThisApplication.ActiveDocument

Dim RuleColl As ObjectCollection = ThisApplication.TransientObjects.CreateObjectCollection


Response = MessageBox.Show("Delete all iLogic rules in ALL components in this assembly?", _

"Cadline iLogic",MessageBoxButtons.YesNo,MessageBoxIcon.Stop,MessageBoxDefaultButton.Button2)

If Response = vbNo Then


End If


DoubleCheck = MessageBox.Show("Seriously?", _

"Cadline iLogic",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2)

If DoubleCheck = vbNo Then


End If


' Build collection of rules

RuleColl = BuildRuleColl(oDoc, RuleColl, iLogicAuto)


' Delete all rules in this document

Call DeleteAllRules(oDoc, RuleColl, iLogicAuto)


' Loop through all referenced docs in assembly

For Each oSubDoc As Document In oDoc.AllReferencedDocuments


    ' Build collection of rules

    RuleColl = BuildRuleColl(oSubDoc, RuleColl, iLogicAuto)

    ' Delete all rules in this document

    Call DeleteAllRules(oSubDoc, RuleColl, iLogicAuto)



End Sub


Function BuildRuleColl(ByVal Doc As Document, _

                       ByRef RuleColl As ObjectCollection, _

                       ByVal iLogicAuto As Object) As ObjectCollection


Dim ruleName As String

Dim rules As Object = iLogicAuto.rules(Doc)

If Not (rules Is Nothing) Then

    For Each rule In rules



End If


Return RuleColl


End Function


Sub DeleteAllRules(ByRef Doc As Document, _

                   ByRef RuleColl As ObjectCollection, _

                   ByVal iLogicAuto As Object)


For i = RuleColl.Count To 1 Step -1

    Name = RuleColl.Item(i).Name

    If Not Name = "Delete All Rules" Then


            iLogicAuto.DeleteRule(Doc, Name)


            MsgBox("Could not delete rule: " & Name & " in document " & Doc.Name)

        End Try

    End If



End Sub


' End of iLogic code.................................................................