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