• 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 – http://autode.sk/1vkEBzy 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.................................................................



Please sign in to leave a comment.