• Blog posts

    Bio

    by Luke Davenport

    Problem:

    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?

     

    Solution:

    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’.

     

    Important:

    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

    Return

    End If

     

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

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

    If DoubleCheck = vbNo Then

    Return

    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

        RuleColl.Clear

        ' Build collection of rules

        RuleColl = BuildRuleColl(oSubDoc, RuleColl, iLogicAuto)

        ' Delete all rules in this document

        Call DeleteAllRules(oSubDoc, RuleColl, iLogicAuto)

    Next

     

    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

            RuleColl.Add(rule)

        Next

    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

            Try

                iLogicAuto.DeleteRule(Doc, Name)

            Catch

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

            End Try

        End If

    Next

     

    End Sub

     

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