iLogic - Tracing issues in my code?

We've all been there ...

We run an iLogic rule and something doesn't update correctly.  We need to find whats going wrong and start to stick in message boxes all over the place which stop the configuration running as it hits each one (a real time consuming task if your code has any form of iteration in it).  We change the model configuration and it doesn't update or seem to be taking a long time ... how can we work out what is wrong ..... there must be a better way to trace issues.

iLogic - Tracing issues in my code?

Working with many of our iLogic customers we have found that there is a real need to have tracing within our code to help diagnose issues.  If you do a quick search online you will find a post from Autodesk that describes a method of doing this, however, this uses a program external to Inventor.  I like to have everything in one place and only want to see traces from iLogic without having to think about it.

To help you, our developers have created an add in for Inventor to help show tracing within Inventor which is freely available. This add in works with Inventor 2017 and 2018 and is available for older releases as needed.

Please contact us and we can email you the installer.

What to do with it:
First of all install the add in and and fire up an Inventor model to automate.  Within Inventor you will now have a new panel on the add-ins tab on your ribbon.  This will allow you to show the trace window and to clear it.

Clicking on, show, will now give you a new panel that can be docked on your screen where the trace commands will be shown:

Now we have the window on it's time to start writing to it.  This console can have text, parameter / property values outputting as a rule runs.  Customers use it to see when values are updated as well as when rules are triggered.  Knowing these things allows you to rapidly problem solve any iLogic code.  Whenever you want your rule to write out to the window just type:
Trace.Writeline("<Your text here>")

So if I have a parameter called WIDTH that I want to see the value of in the tracing window, I would write: Trace.writeline("WIDTH: " & WIDTH).  If that Width had a value of 5000 mm then I would expect to see the trace window showing WIDTH: 5000 mm

In general, tracing behaviors and requirements should be considered from the outset of any development design as the exact desired behavior will likely depend upon context, code structure and error handling strategy. It is therefore best to add tracing in as you go rather than it being considered as a retrospective addition.

Many of you will already have models that you want to have some tracing in.  To help Symetri has created an iLogic rule which will add in a line to the top and bottom of each of your rules.  These lines will then trace when each rule starts and stops.

To add these tracing lines to your rules rules, copy and paste the below into an external rule and run it ONCE in the component that you want to add tracing to (note that it will add it to rules inside child files as well):


Sub Main
auto = iLogicVb.Automation

Dim iLogicAuto As Object
iLogicAuto = auto
Dim doc As Document
doc = ThisApplication.ActiveDocument

Dim ruleName As String
Dim rules As Object
rules = iLogicAuto.rules(doc)

LogStart = "console.WriteLine(TimeString & " & """" & "	" & """" & "&" & """"
LogStartEnd = " - Starts"")"
LogEnd = "console.WriteLine(TimeString & " & """" & "	" & """" & "&" & """"
LogEndEnd = " - ENDS"")"

For Each rule In rules
	ruleName = rule.Name
	Trace.WriteLine(doc.DisplayName & " " & ruleName) 'WRITES THE TIME AND SOME TEXT TO THE FILE 
	ruleText = rule.Text
	RuleStart = LogStart & doc.DisplayName & " " & ruleName & LogStartEnd & vbCrLf & vbCrLf
	RuleEnd = LogEnd & doc.DisplayName & " " & ruleName & LogEndEnd
	If ruleText.contains(RuleStart) = True Then
		trace.WriteLine("Skipped: " & doc.DisplayName & " " & ruleName)
	Else
		If ruleText.contains("Sub Main()") Then
			ruleText = Replace(ruleText,"Sub Main()","Sub Main()" & vbCrLf & RuleStart & vbCrLf ,Count := 1)
			ruleText = Replace(ruleText,"End Sub",vbCrLf & RuleEnd & vbCrLf & "End Sub" & vbCrLf ,Count := 1)
		Else
			ruleText = RuleStart & ruleText & vbCrLf & RuleEnd
		End If
		rule.Text = ruleText
	End If
Next

'Starts to go into all the sub assemblies to do the same
Dim invDoc As Document
For Each invDoc In doc.AllReferencedDocuments
	Dim invDocrules As Object
	invDocrules = iLogicAuto.rules(invDoc)
	Try
	If Not (rules Is Nothing) Then
		For Each rule In invDocrules
			Dim invDocruleName As String
			invDocruleName = rule.Name
			Dim invDocruleText As String
			Trace.WriteLine(invDoc.displayname & " " & ruleName) 'WRITES THE TIME AND SOME TEXT TO THE FILE 
			ruleText = rule.Text
			RuleStart = LogStart & invDoc.displayname & " " & ruleName & LogStartEnd & vbCrLf & vbCrLf
			RuleEnd = LogEnd & invDoc.displayname & " " & ruleName & LogEndEnd
			If ruleText.contains(RuleStart) = True Then
				trace.WriteLine("Skipped: " & invDoc.displayname & " " & ruleName)
			Else
				If ruleText.contains("Sub Main()") Then
					ruleText = Replace(ruleText,"Sub Main()","Sub Main()" & vbCrLf & RuleStart & vbCrLf ,Count := 1)
					ruleText = Replace(ruleText,"End Sub",vbCrLf & RuleEnd & vbCrLf & "End Sub" & vbCrLf ,Count := 1)
				Else
					ruleText = RuleStart & ruleText & vbCrLf & RuleEnd
				End If
				rule.Text = ruleText
			End If
		Next
	End If
	Catch ex As exception
	End Try
Next
End Sub

When you start with iLogic it is common that users leave rules to run automatically leading to strange update issues ... when this tracing is run, users often find that several of there rules might unexpectedly run several times, not at all, or in the wrong order.  With this tracing we can start to pinpoint the problem. 

If you want to know more about Symetri's Design Automation Services or have an issue and need some advice please get in touch.

Blogg

BIM-dagar på FOJAB

25 februari 2024

Under två halvdagar under månadsskiftet november-december fick FOJABs anställda i Malmö möjligheten att delta i de arrangerade BIM-dagarna, ett samarbete FOJAB hade ihop med Symetri.

Läs mer
Blogg

Naviate Zero och vikten av hållbarhet i byggnadsdesign

21 februari 2024

Mycket har redan sagts om byggandets inverkan på koldioxidavtrycket, men det är fortfarande en lång väg att gå för att uppnå det. Symetri har antagit utmaningen genom att utveckla en lösning för arkitekter och konstruktörer som hjälper dem att göra miljövänliga materialval i början av designprocessen.

Läs mer