ilogic initial values

ilogic initial values

gi
Enthusiast Enthusiast
1,412 Views
14 Replies
Message 1 of 15

ilogic initial values

gi
Enthusiast
Enthusiast

In assembly I have steel plates put together. Every plate could be max. 2000 mm lenght, and assembly is made from max. 10 plates. In form at the begining I want write total lenght of assembly. Depending on that value rule in iLogic should initially set how many pieces of plates is used and their lenght. Let's say that initially every plate lenght should be 1500 mm besides last one, which is the difference between the total width and the sum of the width of all other plates.

Later I want manually set quantity of plates and their lenght individually. Is there a code in iLogic to do this?

Below is example of assembly.

PŁASZCZE WEWN.jpg

0 Likes
Accepted solutions (1)
1,413 Views
14 Replies
Replies (14)
Message 2 of 15

clutsa
Collaborator
Collaborator

Here's what I come up with...

Dim app As Inventor.Application = ThisApplication
Dim doc As Document = app.ActiveDocument

inc = 1 ' rounding increment ( .125, .25, .5, etc)
'Clear all panels
For i = 1 To 10
	Parameter("Panel" & i) = 0
Next

'figure how many panels you need
Panels = Ceil(Round(Length / PanelStandardWidth, 1) / inc) * inc
If Panels > MaxPanelCount Then Panels = MaxPanelCount
TempWidth = Panels * PanelStandardWidth
'MessageBox.Show("TempWidth = " & TempWidth, "Title")

Parameter("LastPanelWidth") = PanelStandardWidth - (TempWidth - Parameter("Length"))
'MessageBox.Show("LastPanelWidth = " & Parameter("LastPanelWidth"), "Title")

If Parameter("LastPanelWidth") > MaxPanelWidth Then
	'MessageBox.Show("Odd Size", "Title")
	For i = 1 To Panels
		If Parameter("LastPanelWidth") > MaxPanelWidth Then 'max out first panels until last panel fits
			Parameter("Panel" & i) = MaxPanelWidth
			Parameter("LastPanelWidth") = Parameter("LastPanelWidth") - (MaxPanelWidth - PanelStandardWidth)
		Else 
			If i <> Panels Then 'check for last panel
				Parameter("Panel" & i) = PanelStandardWidth
			Else
				Parameter("Panel" & i) = Parameter("LastPanelWidth")
			End If
		End If
	Next
Else
	'MessageBox.Show("Standard", "Title")
	For i = 1 To Panels
		If i <> Panels Then 'check for last panel
			Parameter("Panel" & i) = PanelStandardWidth
		Else
			Parameter("Panel" & i) = Parameter("LastPanelWidth")
		End If
	Next
End If
PanelSum = Parameter("Panel1") + Parameter("Panel2") + Parameter("Panel3") + Parameter("Panel4") + Parameter("Panel5") + Parameter("Panel6") + Parameter("Panel7") + Parameter("Panel8") + Parameter("Panel9") + Parameter("Panel10")
'MessageBox.Show("PanelSum = " & PanelSum, "Title")

Your Parameters will look something like

NeededParams.PNG

If I've helped you, please help me by supporting this idea.
Mass Override for Each Model State

Custom Glyph Icon for iMates

0 Likes
Message 3 of 15

gi
Enthusiast
Enthusiast

Setting initial values based on Overall length works fine, but later when I want set individual Panel width then it's not quite works. Below is my code. I changed names according to my schema. I know that I have changed the width limit only for the number of panels equal to 10, but I only try to test it only for that configuration. How make to run initial rule only after changing parameter "Length" or "Długość_Lw" acording to my name? After that I want change Panels Width (Szerokość_płaszcza_wewn) manually.

Dim app As Inventor.Application = ThisApplication
Dim doc As Document = app.ActiveDocument

inc = 1 ' rounding increment ( .125, .25, .5, etc)
'Clear all panels
For i = 1 To 10
	Parameter("Szerokość_płaszcza_wewn_" & i) = 0
Next

'figure how many płaszczy wewnętrznych you need
Ilosc_płaszczy_wewn = Ceil(Round(Długość_Lw / Plaszcz_wewn_standard_szer, 1) / inc) * inc
If Ilosc_płaszczy_wewn > Max_ilosc_plaszczy_wewn Then Ilosc_płaszczy_wewn = Max_ilosc_plaszczy_wewn
TempWidth = Ilosc_płaszczy_wewn * Plaszcz_wewn_standard_szer
'MessageBox.Show("TempWidth = " & TempWidth, "Title")

Parameter("Plaszcz_wewn_dodatk_szer") = Plaszcz_wewn_standard_szer - (TempWidth - Parameter("Długość_Lw"))
'MessageBox.Show("Plaszcz_wewn_dodatk_szer = " & Parameter("Plaszcz_wewn_dodatk_szer"), "Title")

If Parameter("Plaszcz_wewn_dodatk_szer") > Plaszcz_wewn_max_szer Then
	'MessageBox.Show("Odd Size", "Title")
	For i = 1 To Ilosc_płaszczy_wewn
		If Parameter("Plaszcz_wewn_dodatk_szer") > Plaszcz_wewn_max_szer Then 'max out first panels until last panel fits
			Parameter("Szerokość_płaszcza_wewn_" & i) = Plaszcz_wewn_max_szer
			Parameter("Plaszcz_wewn_dodatk_szer") = Parameter("Plaszcz_wewn_dodatk_szer") - (Plaszcz_wewn_max_szer - Plaszcz_wewn_standard_szer)
		Else 
			If i <> Ilosc_płaszczy_wewn Then 'check for last panel
				Parameter("Szerokość_płaszcza_wewn_" & i) = Plaszcz_wewn_standard_szer
			Else
				Parameter("Szerokość_płaszcza_wewn_" & i) = Parameter("Plaszcz_wewn_dodatk_szer")
			End If
		End If
	Next
Else
	'MessageBox.Show("Standard", "Title")
	For i = 1 To Ilosc_płaszczy_wewn
		If i <> Ilosc_płaszczy_wewn Then 'check for last panel
			Parameter("Szerokość_płaszcza_wewn_" & i) = Plaszcz_wewn_standard_szer
		Else
			Parameter("Szerokość_płaszcza_wewn_" & i) = Parameter("Plaszcz_wewn_dodatk_szer")
		End If
	Next
End If
Suma_szer_plaszczy_wewn = Parameter("Szerokość_płaszcza_wewn_1") + Parameter("Szerokość_płaszcza_wewn_2") + Parameter("Szerokość_płaszcza_wewn_3") + Parameter("Szerokość_płaszcza_wewn_4") + Parameter("Szerokość_płaszcza_wewn_5") + Parameter("Szerokość_płaszcza_wewn_6") + Parameter("Szerokość_płaszcza_wewn_7") + Parameter("Szerokość_płaszcza_wewn_8") + Parameter("Szerokość_płaszcza_wewn_9") + Parameter("Szerokość_płaszcza_wewn_10")
'MessageBox.Show("Suma szerokości płaszczy wewn. = " & Suma_szer_plaszczy_wewn, "Title")

Dim oLOD As LevelOfDetailRepresentation 
Dim oAsmCompDef As ComponentDefinition 
oAsmCompDef = doc.ComponentDefinition
Try
oLOD = oAsmCompDef.RepresentationsManager.LevelOfDetailRepresentations.Item("iLogic").Activate(True)
Catch
Dim nLOD As LevelOfDetailRepresentation
nLOD = oAsmCompDef.RepresentationsManager.LevelOfDetailRepresentations.Add("iLogic")
oLOD = nLOD
Finally
oLOD = oAsmCompDef.RepresentationsManager.LevelOfDetailRepresentations.Item("iLogic").Activate(True)
End Try

If Ilosc_płaszczy_wewn = 1 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = False
	Płaszcz_wewn_8 = False
	Component.IsActive("Płaszcz wewn. VII:1") = False
	Płaszcz_wewn_7 = False
	Component.IsActive("Płaszcz wewn. VI:1") = False
	Płaszcz_wewn_6 = False
	Component.IsActive("Płaszcz wewn. V:1") = False
	Płaszcz_wewn_5 = False
	Component.IsActive("Płaszcz wewn. IV:1") = False
	Płaszcz_wewn_4 = False
	Component.IsActive("Płaszcz wewn. III:1") = False
	Płaszcz_wewn_3 = False
	Component.IsActive("Płaszcz wewn. II:1") = False
	Płaszcz_wewn_2 = False
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Długość_Lw

ElseIf Ilosc_płaszczy_wewn = 2 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = False
	Płaszcz_wewn_8 = False
	Component.IsActive("Płaszcz wewn. VII:1") = False
	Płaszcz_wewn_7 = False
	Component.IsActive("Płaszcz wewn. VI:1") = False
	Płaszcz_wewn_6 = False
	Component.IsActive("Płaszcz wewn. V:1") = False
	Płaszcz_wewn_5 = False
	Component.IsActive("Płaszcz wewn. IV:1") = False
	Płaszcz_wewn_4 = False
	Component.IsActive("Płaszcz wewn. III:1") = False
	Płaszcz_wewn_3 = False
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Szerokość_płaszcza_wewn_2 = Długość_Lw - Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
	
ElseIf Ilosc_płaszczy_wewn = 3 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = False
	Płaszcz_wewn_8 = False
	Component.IsActive("Płaszcz wewn. VII:1") = False
	Płaszcz_wewn_7 = False
	Component.IsActive("Płaszcz wewn. VI:1") = False
	Płaszcz_wewn_6 = False
	Component.IsActive("Płaszcz wewn. V:1") = False
	Płaszcz_wewn_5 = False
	Component.IsActive("Płaszcz wewn. IV:1") = False
	Płaszcz_wewn_4 = False
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
Szerokość_płaszcza_wewn_3 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2
Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3

ElseIf Ilosc_płaszczy_wewn = 4 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = False
	Płaszcz_wewn_8 = False
	Component.IsActive("Płaszcz wewn. VII:1") = False
	Płaszcz_wewn_7 = False
	Component.IsActive("Płaszcz wewn. VI:1") = False
	Płaszcz_wewn_6 = False
	Component.IsActive("Płaszcz wewn. V:1") = False
	Płaszcz_wewn_5 = False
	Component.IsActive("Płaszcz wewn. IV:1") = True
	Płaszcz_wewn_4 = True
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3
Szerokość_płaszcza_wewn_4 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2 - Szerokość_płaszcza_wewn_3
Parameter("Płaszcz wewn. IV:1", "Szerokość") = Szerokość_płaszcza_wewn_4

ElseIf Ilosc_płaszczy_wewn = 5 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = False
	Płaszcz_wewn_8 = False
	Component.IsActive("Płaszcz wewn. VII:1") = False
	Płaszcz_wewn_7 = False
	Component.IsActive("Płaszcz wewn. VI:1") = False
	Płaszcz_wewn_6 = False
	Component.IsActive("Płaszcz wewn. V:1") = True
	Płaszcz_wewn_5 = True
	Component.IsActive("Płaszcz wewn. IV:1") = True
	Płaszcz_wewn_4 = True
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3
Parameter("Płaszcz wewn. IV:1", "Szerokość") = Szerokość_płaszcza_wewn_4
Szerokość_płaszcza_wewn_5 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2 - Szerokość_płaszcza_wewn_3 - Szerokość_płaszcza_wewn_4
Parameter("Płaszcz wewn. V:1", "Szerokość") = Szerokość_płaszcza_wewn_5
	
ElseIf Ilosc_płaszczy_wewn = 6 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = False
	Płaszcz_wewn_8 = False
	Component.IsActive("Płaszcz wewn. VII:1") = False
	Płaszcz_wewn_7 = False
	Component.IsActive("Płaszcz wewn. VI:1") = True
	Płaszcz_wewn_6 = True
	Component.IsActive("Płaszcz wewn. V:1") = True
	Płaszcz_wewn_5 = True
	Component.IsActive("Płaszcz wewn. IV:1") = True
	Płaszcz_wewn_4 = True
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3
Parameter("Płaszcz wewn. IV:1", "Szerokość") = Szerokość_płaszcza_wewn_4
Parameter("Płaszcz wewn. V:1", "Szerokość") = Szerokość_płaszcza_wewn_5
Szerokość_płaszcza_wewn_6 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2 - Szerokość_płaszcza_wewn_3 - Szerokość_płaszcza_wewn_4 - Szerokość_płaszcza_wewn_5
Parameter("Płaszcz wewn. VI:1", "Szerokość") = Szerokość_płaszcza_wewn_6

ElseIf Ilosc_płaszczy_wewn = 7 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = False
	Płaszcz_wewn_8 = False
	Component.IsActive("Płaszcz wewn. VII:1") = True
	Płaszcz_wewn_7 = True
	Component.IsActive("Płaszcz wewn. VI:1") = True
	Płaszcz_wewn_6 = True
	Component.IsActive("Płaszcz wewn. V:1") = True
	Płaszcz_wewn_5 = True
	Component.IsActive("Płaszcz wewn. IV:1") = True
	Płaszcz_wewn_4 = True
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3
Parameter("Płaszcz wewn. IV:1", "Szerokość") = Szerokość_płaszcza_wewn_4
Parameter("Płaszcz wewn. V:1", "Szerokość") = Szerokość_płaszcza_wewn_5
Parameter("Płaszcz wewn. VI:1", "Szerokość") = Szerokość_płaszcza_wewn_6
Szerokość_płaszcza_wewn_7 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2 - Szerokość_płaszcza_wewn_3 - Szerokość_płaszcza_wewn_4 - Szerokość_płaszcza_wewn_5 - Szerokość_płaszcza_wewn_6
Parameter("Płaszcz wewn. VII:1", "Szerokość") = Szerokość_płaszcza_wewn_7

ElseIf Ilosc_płaszczy_wewn = 8 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = False
	Płaszcz_wewn_9 = False
	Component.IsActive("Płaszcz wewn. VIII:1") = True
	Płaszcz_wewn_8 = True
	Component.IsActive("Płaszcz wewn. VII:1") = True
	Płaszcz_wewn_7 = True
	Component.IsActive("Płaszcz wewn. VI:1") = True
	Płaszcz_wewn_6 = True
	Component.IsActive("Płaszcz wewn. V:1") = True
	Płaszcz_wewn_5 = True
	Component.IsActive("Płaszcz wewn. IV:1") = True
	Płaszcz_wewn_4 = True
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3
Parameter("Płaszcz wewn. IV:1", "Szerokość") = Szerokość_płaszcza_wewn_4
Parameter("Płaszcz wewn. V:1", "Szerokość") = Szerokość_płaszcza_wewn_5
Parameter("Płaszcz wewn. VI:1", "Szerokość") = Szerokość_płaszcza_wewn_6
Parameter("Płaszcz wewn. VII:1", "Szerokość") = Szerokość_płaszcza_wewn_7
Szerokość_płaszcza_wewn_8 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2 - Szerokość_płaszcza_wewn_3 - Szerokość_płaszcza_wewn_4 - Szerokość_płaszcza_wewn_5 - Szerokość_płaszcza_wewn_6 - Szerokość_płaszcza_wewn_7
Parameter("Płaszcz wewn. VIII:1", "Szerokość") = Szerokość_płaszcza_wewn_8

ElseIf Ilosc_płaszczy_wewn = 9 Then
	Component.IsActive("Płaszcz wewn. X:1") = False
	Płaszcz_wewn_10 = False
	Component.IsActive("Płaszcz wewn. IX:1") = True
	Płaszcz_wewn_9 = True
	Component.IsActive("Płaszcz wewn. VIII:1") = True
	Płaszcz_wewn_8 = True
	Component.IsActive("Płaszcz wewn. VII:1") = True
	Płaszcz_wewn_7 = True
	Component.IsActive("Płaszcz wewn. VI:1") = True
	Płaszcz_wewn_6 = True
	Component.IsActive("Płaszcz wewn. V:1") = True
	Płaszcz_wewn_5 = True
	Component.IsActive("Płaszcz wewn. IV:1") = True
	Płaszcz_wewn_4 = True
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3
Parameter("Płaszcz wewn. IV:1", "Szerokość") = Szerokość_płaszcza_wewn_4
Parameter("Płaszcz wewn. V:1", "Szerokość") = Szerokość_płaszcza_wewn_5
Parameter("Płaszcz wewn. VI:1", "Szerokość") = Szerokość_płaszcza_wewn_6
Parameter("Płaszcz wewn. VII:1", "Szerokość") = Szerokość_płaszcza_wewn_7
Parameter("Płaszcz wewn. VIII:1", "Szerokość") = Szerokość_płaszcza_wewn_8
Szerokość_płaszcza_wewn_9 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2 - Szerokość_płaszcza_wewn_3 - Szerokość_płaszcza_wewn_4 - Szerokość_płaszcza_wewn_5 - Szerokość_płaszcza_wewn_6 - Szerokość_płaszcza_wewn_7 - Szerokość_płaszcza_wewn_8
Parameter("Płaszcz wewn. IX:1", "Szerokość") = Szerokość_płaszcza_wewn_9

ElseIf Ilosc_płaszczy_wewn = 10 Then
	Component.IsActive("Płaszcz wewn. X:1") = True
	Płaszcz_wewn_10 = True
	Component.IsActive("Płaszcz wewn. IX:1") = True
	Płaszcz_wewn_9 = True
	Component.IsActive("Płaszcz wewn. VIII:1") = True
	Płaszcz_wewn_8 = True
	Component.IsActive("Płaszcz wewn. VII:1") = True
	Płaszcz_wewn_7 = True
	Component.IsActive("Płaszcz wewn. VI:1") = True
	Płaszcz_wewn_6 = True
	Component.IsActive("Płaszcz wewn. V:1") = True
	Płaszcz_wewn_5 = True
	Component.IsActive("Płaszcz wewn. IV:1") = True
	Płaszcz_wewn_4 = True
	Component.IsActive("Płaszcz wewn. III:1") = True
	Płaszcz_wewn_3 = True
	Component.IsActive("Płaszcz wewn. II:1") = True
	Płaszcz_wewn_2 = True
	Component.IsActive("Płaszcz wewn. I:1") = True
	Płaszcz_wewn_1 = True
	
	Parameter("Płaszcz wewn. I:1", "Szerokość") = Szerokość_płaszcza_wewn_1
	Parameter("Płaszcz wewn. II:1", "Szerokość") = Szerokość_płaszcza_wewn_2
	Parameter("Płaszcz wewn. III:1", "Szerokość") = Szerokość_płaszcza_wewn_3
	Parameter("Płaszcz wewn. IV:1", "Szerokość") = Szerokość_płaszcza_wewn_4
	Parameter("Płaszcz wewn. V:1", "Szerokość") = Szerokość_płaszcza_wewn_5
	Parameter("Płaszcz wewn. VI:1", "Szerokość") = Szerokość_płaszcza_wewn_6
	Parameter("Płaszcz wewn. VII:1", "Szerokość") = Szerokość_płaszcza_wewn_7
	Parameter("Płaszcz wewn. VIII:1", "Szerokość") = Szerokość_płaszcza_wewn_8
	Parameter("Płaszcz wewn. IX:1", "Szerokość") = Szerokość_płaszcza_wewn_9
	Szerokość_płaszcza_wewn_10 = Długość_Lw - Szerokość_płaszcza_wewn_1 - Szerokość_płaszcza_wewn_2 - Szerokość_płaszcza_wewn_3 - Szerokość_płaszcza_wewn_4 - Szerokość_płaszcza_wewn_5 - Szerokość_płaszcza_wewn_6 - Szerokość_płaszcza_wewn_7 - Szerokość_płaszcza_wewn_8 -Szerokość_płaszcza_wewn_9 
			If Szerokość_płaszcza_wewn_10 > Plaszcz_wewn_max_szer Then
		Szerokość_płaszcza_wewn_10 = Plaszcz_wewn_max_szer
		Parameter("Płaszcz wewn. X:1", "Szerokość") = Szerokość_płaszcza_wewn_10
	End If
End If

 

0 Likes
Message 4 of 15

clutsa
Collaborator
Collaborator

In the rule editor there are tabs at the top. Open the "Options" tab and check the "Don't run automatically" button.  This will stop the rule from running when it wants. You can then run the rule manually from the iLogic browser or you can add 

trigger = iTrigger0

To the top of your rule and it will run when you click the "iTrigger" button in the "iLogic" section under the "Manage" Tab

If I've helped you, please help me by supporting this idea.
Mass Override for Each Model State

Custom Glyph Icon for iMates

0 Likes
Message 5 of 15

gi
Enthusiast
Enthusiast

You probably misunderstand me. First I want initially set panels width (Szerokość_płaszcza_wewn) depending on Overall Lenght "Długość_Lw". It's 16400 mm on drawing from first message. That parameter is set first in the form by user. When user change value of this parameter then all panels widths are set to default value - 1500 mm or 2000 mm, except last one. That is working fine. Code from message nr.2 by clutsa do it perfect. But next step will be setting panels widths individually. Only sum should not change and width of every panel should not exceed 2000 mm. So initial code from message 2 should be omitted, when user change only individual panel width. I suppose it could be done using Case Select. How it could be done?

0 Likes
Message 6 of 15

clutsa
Collaborator
Collaborator

I might need some examples... from post 2:  panel1 and panel2 are 2000 then everything is 1500 except panel 10 is 1900. If the user changes panel3 from 1500 to 1800 you want panel10 to go from 1900 to 1600?

What needs to happen if the user changes panel3 from 1500 to 1300? Will panel10 go to 2100 and throw an error message?

If I've helped you, please help me by supporting this idea.
Mass Override for Each Model State

Custom Glyph Icon for iMates

0 Likes
Message 7 of 15

gi
Enthusiast
Enthusiast

My first message and drawing from this message is just example. User change panel width in sequence from first to last panel, because in assembly there are other parts which can't be placed on connection between panels only on the panel. If user change one of panels then last one (panel10) should change, but not exceed 2000 mm. If that happen then panel9 should change. Of course it can't exceed 2000 mm either. If that's not enough then panel8 change it's width, and go on. Error message it's not necessary. I prefer changing width automatically in accordance with the wide limit.

0 Likes
Message 8 of 15

clutsa
Collaborator
Collaborator
Accepted solution

I added a parameter named "CalculatedLength"

Dim app As Inventor.Application = ThisApplication
Dim doc As Document = app.ActiveDocument

'setting these variables will trigger the rule to run
tempVar = Panel1
tempVar = Panel2
tempVar = Panel3
tempVar = Panel4
tempVar = Panel5
tempVar = Panel6
tempVar = Panel7
tempVar = Panel8
tempVar = Panel9
tempVar = Panel10


If Length <> CalculatedLength Then 'if the length is different from the last time code ran, run a full overhaul
	'MessageBox.Show("Full overhaul", "Title")
	inc = 1 ' rounding increment ( .125, .25, .5, etc)
	'Clear all panels
	For i = 1 To 10
		Parameter("Panel" & i) = 0
	Next

	'figure how many panels you need
	Panels = Ceil(Round(Length / PanelStandardWidth, 1) / inc) * inc
	If Panels > MaxPanelCount Then Panels = MaxPanelCount
	TempWidth = Panels * PanelStandardWidth
	'MessageBox.Show("TempWidth = " & TempWidth, "Title")

	Parameter("LastPanelWidth") = PanelStandardWidth - (TempWidth - Parameter("Length"))
	'MessageBox.Show("LastPanelWidth = " & Parameter("LastPanelWidth"), "Title")

	If Parameter("LastPanelWidth") > MaxPanelWidth Then
		'MessageBox.Show("Odd Size", "Title")
		For i = 1 To Panels
			If Parameter("LastPanelWidth") > MaxPanelWidth Then 'max out first panels until last panel fits
				Parameter("Panel" & i) = MaxPanelWidth
				Parameter("LastPanelWidth") = Parameter("LastPanelWidth") - (MaxPanelWidth - PanelStandardWidth)
			Else 
				If i <> Panels Then 'check for last panel
					Parameter("Panel" & i) = PanelStandardWidth
				Else
					Parameter("Panel" & i) = Parameter("LastPanelWidth")
				End If
			End If
		Next
	Else
		'MessageBox.Show("Standard", "Title")
		For i = 1 To Panels
			If i <> Panels Then 'check for last panel
				Parameter("Panel" & i) = PanelStandardWidth
			Else
				Parameter("Panel" & i) = Parameter("LastPanelWidth")
			End If
		Next
	End If
	CalculatedLength = Parameter("Panel1") + Parameter("Panel2") + Parameter("Panel3") + Parameter("Panel4") + Parameter("Panel5") + Parameter("Panel6") + Parameter("Panel7") + Parameter("Panel8") + Parameter("Panel9") + Parameter("Panel10")
	'MessageBox.Show("PanelSum = " & PanelSum, "Title")
Else 'only a panel width changed so do this code instead
	Count = 0
	'MessageBox.Show("Small changes", "Title")
	PanelSum = Parameter("Panel1") + Parameter("Panel2") + Parameter("Panel3") + Parameter("Panel4") + Parameter("Panel5") + Parameter("Panel6") + Parameter("Panel7") + Parameter("Panel8") + Parameter("Panel9") + Parameter("Panel10")
	Delta = Length - PanelSum
	Parameter("Panel" & Panels) = Parameter("Panel" & Panels) + Delta
	Do Until Parameter("Panel" & Panels - Count) < MaxPanelWidth Or InfCount > 100
		If Parameter("Panel" & Panels - Count) > MaxPanelWidth Then
			Delta = Parameter("Panel" & Panels - Count) - MaxPanelWidth
			Parameter("Panel" & Panels - Count) = Parameter("Panel" & Panels - Count) - Delta
			Parameter("Panel" & Panels - Count - 1) = Parameter("Panel" & Panels - Count - 1) + Delta
			Count = Count + 1
		End If
		InfCount = InfCount + 1
	Loop
End If

'An idea on how to change your parts too
Dim p1 = Component.InventorComponent("SHEETMETAL:1")
Dim p2 = Component.InventorComponent("SHEETMETAL:2")
Dim p3 = Component.InventorComponent("SHEETMETAL:3")
Dim p4 = Component.InventorComponent("SHEETMETAL:4")
Dim p5 = Component.InventorComponent("SHEETMETAL:5")
Dim p6 = Component.InventorComponent("SHEETMETAL:6")
Dim p7 = Component.InventorComponent("SHEETMETAL:7")
Dim p8 = Component.InventorComponent("SHEETMETAL:8")
Dim p9 = Component.InventorComponent("SHEETMETAL:9")
Dim p10 = Component.InventorComponent("SHEETMETAL:10")
Dim PanelList As New ArrayList
PanelList.Add(p1)
PanelList.Add(p2)
PanelList.Add(p3)
PanelList.Add(p4)
PanelList.Add(p5)
PanelList.Add(p6)
PanelList.Add(p7)
PanelList.Add(p8)
PanelList.Add(p9)
PanelList.Add(p10)

'code to change LOD here if needed
For i = 1 To 10
	If Parameter("Panel" & i) < 1 Then 
		PanelList(i - 1).Excluded = True 'you can use isActive() instead
	Else
		PanelList(i - 1).Excluded = False 'you can use isActive() instead
		Parameter(PanelList(i - 1).name, "d0") = Parameter("Panel" & i)
	End If
Next
InventorVb.DocumentUpdate()
If I've helped you, please help me by supporting this idea.
Mass Override for Each Model State

Custom Glyph Icon for iMates

0 Likes
Message 9 of 15

gi
Enthusiast
Enthusiast

Initilal setup works fine. When I change overall lenght width of every panel also change, but when I try change width of a individual panel then it go back to previous value and nothing happen. Besides at the end of rule you use paramater d0. I suppose it should refer to width of a panel?

Else
		PanelList(i - 1).Excluded = False 'you can use isActive() instead
		Parameter(PanelList(i - 1).name, "d0") = Parameter("Panel" & i)
	End If

 

0 Likes
Message 10 of 15

clutsa
Collaborator
Collaborator

Yes, please change "d0" to the name of the parameter in the panels that controls their width (probably "Szerokość".) Make sure you change the parameter name in each of the panels to the same name (as it looks like you have.) 

When you say "when I try change width of a individual panel then it go back to previous value and nothing happen." can you give me an example of which panel and what it's old value was and what you're trying to change it to? In the 16400 length example if you change panel4 from 1500 to 1300 then panel10 should change from 1900 to 2000 and panel9 should change from 1500 to 1600.

Please note that in my screen capture below the  actual panel widths don't change because I only inserted the same part 10 times so please only read the values in parameter and count how many panels are there total. 

 

 

If I've helped you, please help me by supporting this idea.
Mass Override for Each Model State

Custom Glyph Icon for iMates

0 Likes
Message 11 of 15

gi
Enthusiast
Enthusiast

Ok. I didn't change one parameter according to my naming schema in a rule. That's why it didn't work. Now it's working almost great ;). Probably there will be situation when also quantity of panels should be changed. How rule should be changed to do this?

I also have another panel position variant which you could solved. Every panel are 1500 mm wide in this case, but they are overlap. Overlap is 50 mm. Only overall widht is changing and placing of the rest (LastPanelWidht in previous scenario) is also changing. I mean narrower panel could be placed as a last panel, but also could be placed as every panel from 1 to 12 in this case.

Below example of assembly. 450 mm wide panel is last, but as I mention it could be placed everywhere. User should choose which it should be.PANELS 2.jpg

0 Likes
Message 12 of 15

clutsa
Collaborator
Collaborator

You would of course add the extra panels to your parameters and add a new parameter named PanelOverlap.

UserParameters.PNG

Then the code would look something like this. 

Dim app As Inventor.Application = ThisApplication
Dim doc As Document = app.ActiveDocument

'setting these variables will trigger the rule to run
tempVar = Panel1
tempVar = Panel2
tempVar = Panel3
tempVar = Panel4
tempVar = Panel5
tempVar = Panel6
tempVar = Panel7
tempVar = Panel8
tempVar = Panel9
tempVar = Panel10
tempVar = Panel11
tempVar = Panel12


If Length <> CalculatedLength Then 'if the length is different from the last time code ran run a full overhaul
	'MessageBox.Show("Full overhaul", "Title")
	inc = 1 ' rounding increment ( .125, .25, .5, etc)
	'Clear all panels
	For i = 1 To MaxPanelCount
		Parameter("Panel" & i) = 0
	Next

	'figure how many panels you need
	Panels = Ceil(Round((Length - PanelOverlap) / (PanelStandardWidth - PanelOverlap), 1) / inc) * inc
	If Panels > MaxPanelCount Then Panels = MaxPanelCount
	TempWidth = Panels * (PanelStandardWidth - PanelOverlap)
	'MessageBox.Show("TempWidth = " & TempWidth, "Title")

	Parameter("LastPanelWidth") = Int(PanelStandardWidth - (TempWidth - Parameter("Length")) - PanelOverlap)
	'MessageBox.Show("LastPanelWidth = " & Parameter("LastPanelWidth"), "Title")

	If Parameter("LastPanelWidth") > MaxPanelWidth Then
		'MessageBox.Show("Odd Size", "Title")
		For i = 1 To Panels
			If Parameter("LastPanelWidth") > MaxPanelWidth Then 'max out first panels until last panel fits
				Parameter("Panel" & i) = MaxPanelWidth
				Parameter("LastPanelWidth") = Parameter("LastPanelWidth") - (MaxPanelWidth - PanelStandardWidth)
			Else 
				If i <> Panels Then 'check for last panel
					Parameter("Panel" & i) = PanelStandardWidth
				Else
					Parameter("Panel" & i) = Parameter("LastPanelWidth")
				End If
			End If
		Next
	Else
		'MessageBox.Show("Standard", "Title")
		For i = 1 To Panels
			If i <> Panels Then 'check for last panel
				Parameter("Panel" & i) = PanelStandardWidth
			Else
				Parameter("Panel" & i) = Parameter("LastPanelWidth")
			End If
		Next
	End If
	CalculatedLength = Parameter("Panel1") + Parameter("Panel2") + Parameter("Panel3") + Parameter("Panel4") + Parameter("Panel5") + Parameter("Panel6") + Parameter("Panel7") + Parameter("Panel8") + Parameter("Panel9") + Parameter("Panel10") + Parameter("Panel11") + Parameter("Panel12") - ((Panels - 1) * PanelOverlap)
	'MessageBox.Show("PanelSum = " & PanelSum, "Title")
Else 'only a panel width changed so do this code instead
	Count = 0
	'MessageBox.Show("Small changes", "Title")
	PanelSum = Parameter("Panel1") + Parameter("Panel2") + Parameter("Panel3") + Parameter("Panel4") + Parameter("Panel5") + Parameter("Panel6") + Parameter("Panel7") + Parameter("Panel8") + Parameter("Panel9") + Parameter("Panel10") + Parameter("Panel11") + Parameter("Panel12") - ((Panels - 1) * PanelOverlap)
	Delta = Length - PanelSum
	Parameter("Panel" & Panels) = Parameter("Panel" & Panels) + Delta
	Do Until Parameter("Panel" & Panels - Count) < MaxPanelWidth Or InfCount > 100
		If Parameter("Panel" & Panels - Count) > MaxPanelWidth Then
			Delta = Parameter("Panel" & Panels - Count) - MaxPanelWidth
			Parameter("Panel" & Panels - Count) = Parameter("Panel" & Panels - Count) - Delta
			Parameter("Panel" & Panels - Count - 1) = Parameter("Panel" & Panels - Count - 1) + Delta
			Count = Count + 1
		End If
		InfCount = InfCount + 1
	Loop
End If

'An idea on how to change the parts too
Dim p1 = Component.InventorComponent("SHEETMETAL:1")
Dim p2 = Component.InventorComponent("SHEETMETAL:2")
Dim p3 = Component.InventorComponent("SHEETMETAL:3")
Dim p4 = Component.InventorComponent("SHEETMETAL:4")
Dim p5 = Component.InventorComponent("SHEETMETAL:5")
Dim p6 = Component.InventorComponent("SHEETMETAL:6")
Dim p7 = Component.InventorComponent("SHEETMETAL:7")
Dim p8 = Component.InventorComponent("SHEETMETAL:8")
Dim p9 = Component.InventorComponent("SHEETMETAL:9")
Dim p10 = Component.InventorComponent("SHEETMETAL:10")
Dim p11 = Component.InventorComponent("SHEETMETAL:11")
Dim p12 = Component.InventorComponent("SHEETMETAL:12")
Dim PanelList As New ArrayList
PanelList.Add(p1)
PanelList.Add(p2)
PanelList.Add(p3)
PanelList.Add(p4)
PanelList.Add(p5)
PanelList.Add(p6)
PanelList.Add(p7)
PanelList.Add(p8)
PanelList.Add(p9)
PanelList.Add(p10)
PanelList.Add(p11)
PanelList.Add(p12)


For i = 1 To MaxPanelCount
	If Parameter("Panel" & i) < 1 Then 
		PanelList(i - 1).Excluded = True
	Else
		PanelList(i - 1).Excluded = False
		Parameter(PanelList(i - 1).name, "d0") = Parameter("Panel" & i)
	End If
Next
InventorVb.DocumentUpdate()

 

If I've helped you, please help me by supporting this idea.
Mass Override for Each Model State

Custom Glyph Icon for iMates

0 Likes
Message 13 of 15

gi
Enthusiast
Enthusiast

Everything works ok, but as I wrote in previous message I also need to choose where will be narrower panel  (LastPanelWidth). It isn't always last. User need to choose which one it will be from 1 to 12. Also how did you learn advanced ilogic commands? I know that this is Visual Basic, but besides this forum and Inventor API help is there a books or websites in the internet with examples explaining programming language commands?

0 Likes
Message 14 of 15

clutsa
Collaborator
Collaborator

I learned to program starting with VBA for Excel. Most of what I've learned for Inventor has been from this forum, API help, and just trail and error (lots of error) . Brian Ekins and Adam Nagy (both of whom help on this forum) have an amazing blog at https://modthemachine.typepad.com/ I also often point beginners to https://www.youtube.com/watch?v=MFU_QaGdIDA I think the video does a good job explaining how to use the "locals window" (a key skill to figuring out how and what Inventor is doing)

 

As far as moving where the short panel is I suggest you open a new topic on the forum for ideas. The original question was "ilogic initial values" and I feel you have that answered. If I remember you were going to have the user enter different values for each panel width later anyway. Couldn't they just type the last panel width in where they want it?

If I've helped you, please help me by supporting this idea.
Mass Override for Each Model State

Custom Glyph Icon for iMates

0 Likes
Message 15 of 15

gi
Enthusiast
Enthusiast

You're right. The initial topic has been resolved. Version with panels which overlap one another and how place narrower panel l solved myself. Thank you for help and information where to learn more about ilogic and Visual Basic 🙂

0 Likes