Community
Inventor Programming - iLogic, Macros, AddIns & Apprentice
Inventor iLogic, Macros, AddIns & Apprentice Forum. Share your knowledge, ask questions, and explore popular Inventor topics related to programming, creating add-ins, macros, working with the API or creating iLogic tools.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Autodesk 2013 iLogic issue with inputboxes

22 REPLIES 22
SOLVED
Reply
Message 1 of 23
voutilainen
1521 Views, 22 Replies

Autodesk 2013 iLogic issue with inputboxes

Hi everybody, this is my second topic upon that issue. The first  one was here: http://forums.autodesk.com/t5/Autodesk-Inventor/iLogic-inputbox-only-decimal-value-with-coma-not-wit...

 

To resume the issue here, my problem is that I did, a couple of months ago, a part with a rule containing some input boxes. It worked without a bug and set it as a specific template, on Inventor 2012.
I tried to reuse it as a template without changing its rule on Inventor 2013. When the input box pops out and ask the value it needs, if I type "0.2" it says that "string's conversion "0.2" in a 'double' type isn't valid". But if I type "0,2" I have absolutely no problems.

And on the "more infos"  tab, I can see that message:

"System.InvalidCastException: La conversion de la chaîne "0.2" en type 'Double' n'est pas valide. ---> System.FormatException: Le format de la chaîne d'entrée est incorrect.

   à Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)

   à Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)

   --- Fin de la trace de la pile d'exception interne ---

   à Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)

   à LmiRuleScript.Main()

   à Autodesk.iLogic.Exec.AppDomExec.ExecRuleInAssembly(Assembly assem)

   à iLogic.RuleEvalContainer.ExecRuleEval(String execRule) "

 

 

I work on:

Windows 7

Autodesk design suite premium 2013 french.

 

22 REPLIES 22
Message 2 of 23
MegaJerk
in reply to: voutilainen

Does the code below error out for you, when you type in 0.2 ? 

 

 

Dim iString As String
Dim iDoub As Double

'''/////////// Let's ask the user to type something in 

iString = InputBox("Super String Converter-o-Matic 2012", "Strings --> Doubles!", "") 

'''/////////// If the input can be succesfully considered a number, then we proceed
If IsNumeric(iString) = True Then

'''/////////// If it is a number, we'll set our variable 'iDoub' to equal the String, converted over
'''/////////// into a double

iDoub = CDbl(iString)

'''/////////// Now we show you the result

MessageBox.Show("Your Double Is :  " & iDoub, "Converted!") 

Else 

'''/////////// If the variable 'iString' can't be considered to have a numeric value, then we
'''/////////// tell the user that we can't convert their input

MessageBox.Show("We can't convert letters to numbers! We have standards!", "Not-Converted!") 

End If 

 



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 3 of 23
voutilainen
in reply to: MegaJerk

Hi Megajerk, Thanks for your answer.

 

So It doesn't error me out, it says your message "We can't convert letters to numbers! We have standards!"

 

Makes me smile.

 

So  must I apply it to my code?

Message 4 of 23
MegaJerk
in reply to: voutilainen

Actually, if you're getting that message when  you type in 0.2 (zero point two), then there certainly is something wrong. 

 

Try the following code and tell me the values that it returns back to you in the final box. 

 

Dim oBlah,oLaLa As String
Dim oDarn As Char
oBlah = InputBox("Input your string", "String Detective", "")

For Each oDarn In oBlah 
	If oLaLa = "" Then 
		oLaLa = (Asc(oDarn))
		Else
		oLaLa = oLaLa & "," &  (Asc(oDarn))
	End If 
Next 

MessageBox.Show(oLaLa,"String Detective Has Found This!") 

 

So when you run that code, type in your 0.2, and tell me what three numbers you get back. 

 

 



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 5 of 23
voutilainen
in reply to: MegaJerk

So the answer is: 48,46,50

Message 6 of 23
MegaJerk
in reply to: voutilainen

Well that’s what you should be getting. You may have a rather unique problem on your hand being that you’re input of 0.2 is producing the correct Ascii values (48,46,50), but the function ‘IsNumeric’ is refusing to accept that as a proper numeric value (despite the fact that it is). 

Perhaps someone from Autodesk would be willing to dig deeper into this. Perhaps it’s a localization bug.

I’m sorry that I couldn’t be more useful.  



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 7 of 23
voutilainen
in reply to: MegaJerk

No problem, thanks for your time and help!

Message 8 of 23
voutilainen
in reply to: voutilainen

Hi again everybody, after looking a bit more on the web, it seems that this issue is not related to inventor, but to visual basic. Some people have the same kind of problem, but on other software. But I'm searching, and nobody seems to have a real solution. Could someone help me?

Message 9 of 23
MegaJerk
in reply to: voutilainen

Does the following code give you the "Unable to parse" or does it return a message box with the correct numerical value in it? 

Dim value As String
Dim result As Decimal 

value = "0.2"

If Decimal.TryParse(value, result)
   MessageBox.Show(result)
Else
   MessageBox.Show("Unable to parse:  " & value,"")   
End If

 

 

(That is for ilogic) 

 



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 10 of 23
voutilainen
in reply to: MegaJerk

Unable to parse.

Message 11 of 23
MegaJerk
in reply to: voutilainen

I just couldn’t stop thinking about this. I feel that I might have cracked it finally. Here is some ilogic code that will force it to try in both French and UK English localizations. This should allow for either  a comma or a decimal point for string input. You can of course set it to only do or the other using further logic, but I think that this should get us on the correct track… or at least I hope. Tell me the results of the following code.

 

Imports System.Globalization

Dim value As String
Dim style As NumberStyles
Dim FRculture, UKculture As CultureInfo
Dim oNumber As Decimal

' Parse currency value using en-GB culture.
value = "0.2"
style = NumberStyles.AllowDecimalPoint  Or NumberStyles.AllowCurrencySymbol

'culture = CultureInfo.CreateSpecificCulture("en-GB")
'USculture = CultureInfo.CreateSpecificCulture("en-US")

FRculture = CultureInfo.CreateSpecificCulture("fr-FR")
UKculture = CultureInfo.CreateSpecificCulture("en-UK")

If Decimal.TryParse(value, style, FRculture, oNumber) = True Or Decimal.TryParse(value, style, UKculture, oNumber) = True  Then
   MessageBox.Show("Converted : "& value & " --> To --> " &  oNumber,"")
Else
   MessageBox.Show("Unable to convert : "& value, "")
End If

 



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 12 of 23
voutilainen
in reply to: MegaJerk

I really appreciate your work about this.

So, the answer is that 0.2 has been converted to 0,2!

Thank you so much! But now I'm not sure to understand which part of your code I must re-use in mine, and if y must do it everytime I need to enter a value (but I guess that yes, i must.)

Message 13 of 23
MegaJerk
in reply to: MegaJerk

I couldn't work on a better response during work hours, but I did manage to make this code to give you an example of a way you could implement this. I will write something better tomorrow. Sorry 😄 

 

'Your Imports would be first.
Imports System.Globalization


Sub Main ()
'All of your main code would go here, right under the Sub Main()

Dim UserInput As String 
Dim oNumber As Decimal 

UserInput = InputBox("Please Enter A Number", "ACME Number Machine", "")

	If UserInput <> "" Then 
	oNumber = NumberMuncherUK(UserInput)
	MessageBox.Show(oNumber,"") 
	Else 
	MessageBox.Show("Blank Entry","Error") 
	End If 
	
End Sub 



Function NumberMuncherUK (IncString As String) As Decimal 

	Dim RetVal As Decimal
	Dim style As NumberStyles
	Dim UKculture As CultureInfo
	'Dim  FRculture As CultureInfo
	'FRculture = CultureInfo.CreateSpecificCulture("fr-FR")
	
	style = NumberStyles.AllowDecimalPoint  	
	UKculture = CultureInfo.CreateSpecificCulture("en-UK")
	
		If Decimal.TryParse(IncString, style, UKculture, RetVal) = False 
			RetVal = -1.0
		End If 
		
	Return RetVal
	
End Function

 

 Basically you would just call that function every time you wanted to see if the user input a correct value before passing it along. It returns a -1 (or whatever value you would like) so that you can use that in your logic down the road. 

If UserInput = -1 Then
MessageBox.Show("You input a silly number!","")

End If

 

So on and so forth.  



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 14 of 23
voutilainen
in reply to: MegaJerk

Okay, thanks a lot.

I'm not sure to fully understand so I tried to do use this like this:

Imports System.Globalization


Sub Main ()
			Dim Module As String 
			Dim oModule As Decimal

		Module = InputBox("Entrez le module du pignon:","NIHS 20-02","")
		

	If Module <> "" Then 
	oModule = NumberMuncherUK(Module)
	End If 

	
	Dtete=oModule*(25+1.44)
	Dprimitif=oModule*25
	Dfond=oModule*(25-3.5)
	Epaisseur_s=1.41*oModule
	Rogive=0.8*1.44*oModule
	Distance_t=Rogive-(Epaisseur_s/2)
	
	
	
End Sub 



Function NumberMuncherUK (IncString As String) As Decimal 

	Dim RetVal As Decimal
	Dim style As NumberStyles
	Dim UKculture As CultureInfo
	'Dim  FRculture As CultureInfo
	'FRculture = CultureInfo.CreateSpecificCulture("fr-FR")
	
	style = NumberStyles.AllowDecimalPoint  	
	UKculture = CultureInfo.CreateSpecificCulture("en-UK")
	
		If Decimal.TryParse(IncString, style, UKculture, RetVal) = False 
			RetVal = -1.0
		End If 
		
	Return RetVal
	
End Function


 

But when it is compilating, it says that: "Value" isn't a member of "String".

Message 15 of 23
MegaJerk
in reply to: voutilainen

Actually, there are a few problems. You are using a dim called “Module” which is a reserved keyword in VB.net, and is the reason it turns up as a red color. I have rewritten your code, and it is working on my machine, but you will of course need to test it on yours. Notice how I also moved the calculations that are based on the user input to under the ‘If uModule <> "" Then’ ?  That’s so that they don’t calculate using user input that hasn’t passed the condition check (the condition check in this case being the user input field being left empty or not).

Let’s see if the following will work correctly on your machine. 

 

 

Imports System.Globalization


Sub Main ()

Dim uModule As String
Dim oModule As Decimal

uModule = InputBox("Entrez le module du pignon:","NIHS 20-02","")


If uModule <> "" Then
oModule = NumberMuncherUK(uModule)

If oModule <> -1 Then
Dtete=oModule*(25+1.44)
Dprimitif=oModule*25
Dfond=oModule*(25-3.5)
Epaisseur_s=1.41*oModule
Rogive=0.8*1.44*oModule
Distance_t=Rogive-(Epaisseur_s/2)
MessageBox.Show(DTete & " - " & Dprimitif & " - " & Dfond & " - " & Epaisseur_s & " - " & Rogive & " - " & Distance_t, "")
Else
MessageBox.Show("There has been a conversion problem from string to Decimal. Please Try Again.","")
End If

Else
MessageBox.Show("You've left the input blank. Please start over.", "Blank Input Error")
End If




End Sub



Function NumberMuncherUK (IncString As String) As Decimal

Dim RetVal As Decimal
Dim style As NumberStyles
Dim UKculture As CultureInfo
'Dim FRculture As CultureInfo
'FRculture = CultureInfo.CreateSpecificCulture("fr-FR")

style = NumberStyles.AllowDecimalPoint
UKculture = CultureInfo.CreateSpecificCulture("en-UK")

If Decimal.TryParse(IncString, style, UKculture, RetVal) = False
RetVal = -1.0
End If

Return RetVal



End Function

 

 

I should also say that the only option in my ilogic editor that is checked is Silent Operation. I would suggest making sure you don’t have Straight VB code checked. 



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 16 of 23
voutilainen
in reply to: MegaJerk

So I try it at on my machine.

 

And I managed to make it work! Thank you!

I just need now to do it on every value! Thank you once again!

Message 17 of 23
MegaJerk
in reply to: voutilainen

That’s just great! In the spirit of uncovering more information about how this problem came about, I wanted to ask you a few questions. Which version of Inventor were you using before you had this localization problem? Was it localized in French, or was it an English language package? Was your computer set up with a different localization for the past / present Inventor installation, or has it always been set to French language?

If it seems that everything stayed the same, and only the Inventor version (from 2012 to 2013) made the difference, then they’ve changed how they calculate things based on the language culture, which would be righteous information to have if someone out there in developer land started to work on a plug-in / iLogic code that could potentially be used internationally.  
 

Any who, thanks for your time! Continue to post in the customization forums if any other problems (or neat discoveries) arise.



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 18 of 23
voutilainen
in reply to: MegaJerk

The version before was only Inventor 2012 in French. Nothings changed about it. I just have uninstalled the old one and install the new version. But if you remember, I have said that, checking on google, some people have the same issue, same error, with visual basic editors like iLogic on inventor, but on other software. So I'm wondering if it could be something with an update of windows 7 (I always had windows 7, but sometimes updates create some bugs here, I don't know).

 

I'm just wondering that in your code, you used "Style = NumberStyles.AllowDecimalPoint" . Don't you know if it's possible, at some point, to use this in the begining of the code to make it apply for every value next, automatically? Sorry, as I said, I'm not familiar with programmation, I'm learning by doing simple stuff.

Message 19 of 23
MegaJerk
in reply to: MegaJerk

I’m glad that you asked. Yes there is a way to change the entire document’s culture info. The reason I didn’t go that route before was because I didn’t know if you had some users that were going to be using the ‘,’ decimal point and some that may use the ‘.’ point. With that being said, the following example will show you how to set up a main culture across your entire document, as well as some other information that you may find useful. If you have any other questions about this code, or anything else related, feel free to ask. This has been a real learning experience! 

 

 

 

 

Imports System.Globalization
Imports System.Threading

Dim value, userInputString As String
Dim userInputDouble As Double
Dim InputBool As Boolean 
Dim oNumber As Decimal

'Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")		''' French language culture!
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-GB")		''' English language (with a UK twist!)
'Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")		''' English language (with a Southern Twang!) 
'Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE")		''' German language from the Father Land! 

'''/////////////////////////////////////////////////////////////////////////////////////////////////////
'''
''' Here are some culture codes ''' 
''' en-GB - (English - Great Britain) 
''' en-US - (English - United States)
''' fr-FR - (French - France) 
''' de-DE - (German - Germany) 
'''
'''
''' Simply replace the above 'New CultureInfo("??-??") with one of the codes to change
''' how this document reacts. 
'''
''' More culture codes can be found here : 
''' 
''' http://msdn.microsoft.com/en-us/library/System.globalization.cultureinfo(v=vs.71).aspx
''' 
'''/////////////////////////////////////////////////////////////////////////////////////////////////////
'''
'''
'''/////////////////////////////////////////////////////////////////////////////////////////////////////
'''
''' In this comment section are some simple tests to see if your current culture is working
''' based on if the following value returns true or false. 
'''
'''	Uncomment the code section you'd like to test with, if you'd like to test.
''' Only uncomment *one*. Specifically the one pertaining to the culture that you've set.
'''
'''	(Test for ENGLISH language culture. Should return true) 
'''
'''	value = "0.2"
'''
'''	If IsNumeric(value) = True Then
'''		Messagebox.Show("True","")
'''		Else
'''		MessageBox.Show("False","")
'''	End If 
'''
'''
'''	(Test for NON-ENGLISH language culture. Should return true) 
'''
'''	value = "0,2"
'''
'''	If IsNumeric(value) = True Then
'''		Messagebox.Show("True","")
'''		Else
'''		MessageBox.Show("False","")
'''	End If 
'''
'''/////////////////////////////////////////////////////////////////////////////////////////////////////


InputBool = False
While InputBool = False 

	userInputString = InputBox("Please Enter a Number. Your Current Culture is set to : " _
												& Thread.CurrentThread.CurrentCulture.Name, "Title", "")
	If IsNumeric(userInputString) = True Then
		InputBool = True
		userInputDouble = CDbl(userInputString)
		Else 
		InputBool = False
		MessageBox.Show("The number you entered - " & userInputString & _
									" - was not recognized as valid. Please try again.","") 
	End If 
End While

MessageBox.Show("Your input, multiplied by 2 = " & userInputDouble * 2, "Result") 

 

 

 



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub
Message 20 of 23
MegaJerk
in reply to: MegaJerk

I should note that there was a small error in my last code posts. I called out the culture info as “en-UK” when it should have been “en-GB” for English-Great Britain.  Oops. 



If my solution worked or helped you out, please don't forget to hit the kudos button 🙂
iLogicCode Injector: goo.gl/uTT1IB

GitHub

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report