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: 

Ilogic code

1 REPLY 1
Reply
Message 1 of 2
zimmermannLRX9U
120 Views, 1 Reply

Ilogic code

Hallo an alle!

 

Ich habe hier eine iLogic Code, mit der ich Parameter mit gleichem Name weiter an die Bauteile und Baugruppen gebe.

Funktioniert solange es keine Modelzustände in Bauteilen oder Baugruppen sind.

 

Kann mir jemand helfen dieses Code so umzuschreiben dass es auch mit Modellzuständen funktioniert!

 

Vielen Dank im Voraus!

 

Hier ist der iLogic Code:

 

iLogicVb.UpdateWhenDone = True ' Der Arbeitsbereich wird erst nach dem kompletten Abarbeiten 
                               ' dieser Regel aktualisiert und nicht schon jedes mal wenn sich 
							   ' darin ein Parameter ändert
  
userParams = ThisDoc.Document.ComponentDefinition.Parameters.UserParameters ' Eine Collection mit allen UserParametern dieser Baugruppe
RefParams = ThisDoc.Document.ComponentDefinition.Parameters.ReferenceParameters 
subDocs = ThisDoc.Document.AllReferencedDocuments.OfType(Of Document) ' Eine Collection mit allen Komponenten dieser Baugruppe

For Each oParam  In userParams  ' Wir gehen durch die Userparameter dieses Dokuments
	
	If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat
		
		For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf
			subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable

			For Each oSubParam In subUserParams ' gehen auch diese durch und schauen
				If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist
					oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert
				End If			
			Next						
		Next			
	End If
Next
'____________________

For Each oParam  In RefParams  ' Wir gehen durch die Userparameter dieses Dokuments
	
	If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat
		
		For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf
			subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable

			For Each oSubParam In subUserParams ' gehen auch diese durch und schauen
				If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist
					oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert
				End If			
			Next						
		Next			
	End If
Next


'_______________________
For Each oSubDoc As Document In subDocs ' Wir gehen nochmal alle Unterkomponenten durch...
	If iLogicVb.Automation.Rules(oSubDoc) Is Nothing = False Then ' ...und schauen ob diese Regeln haben. Wenn ja,...
		For Each myRule In iLogicVb.Automation.Rules(oSubDoc) ' ...gehen wir diese alle durch.
			If myRule.Name = "ParameterUpdate" Then ' Wenn wir eine mit dem Namen "ParameterUpdate" finden...
				iLogicVb.Automation.RunRuleDirect(myRule) ' ...führen wir diese aus!
			End If				
		Next					
	End If	
Next

 

 

1 REPLY 1
Message 2 of 2

Hi!

 

not tested, but I think an edit like this feels like it should work:

nicht getestet, aber ich denke, eine Bearbeitung wie diese sollte funktionieren:

For Each oParam  In userParams  ' Wir gehen durch die Userparameter dieses Dokuments
	If oParam.comment = "_" Then ' Wenn der Parameter den Update-Unterstrich hat
		
		For Each oSubDoc As Document In subDocs ' Rufen wir nacheinander alle Komponenten diese Baugruppe auf
			oSubDoc.ComponentDefinition.ModelStates.MemberEditScope = MemberEditScopeEnum.kEditAllMembers 'sets the scope to edit all components
			
			subUserParams = oSubDoc.ComponentDefinition.Parameters.UserParameters ' Referenzieren ihre Userparameter in einer Collection-Variable

			For Each oSubParam In subUserParams ' gehen auch diese durch und schauen
				If oSubParam.comment = "_" And oSubParam.Name = oParam.Name Then ' ob wir den Unterstrich auch dort finden und ob der Name identisch ist
					oSubParam.Value = oParam.Value ' wenn ja, übergeben wir den Wert
				End If			
			Next
			
			oSubDoc.ComponentDefinition.ModelStates.MemberEditScope = MemberEditScopeEnum.kEditActiveMember 'resets the scope to edit the active component
		Next			
	End If
Next

 

this utilises code that sets the modelstate-scope to edit all members like you would manually here

dies verwendet Code, der den Modelstate-scope so einstellt, dass alle Mitglieder bearbeitet werden können, wie Sie es hier manuell tun würden

Jacob__with__a__k_0-1700842118478.png

(found here: http://www.hjalte.nl/73-ilogic-rules-and-modelstates)

 

if this code doesn't work the alternative would be to loop trough all model states in a document but I don't like adding even more loops to your code

Wenn dieser Code nicht funktioniert, wäre die Alternative, eine Schleife durch alle Modellzustände in einem Dokument zu ziehen, aber ich mag es nicht, noch mehr Schleifen zu Ihrem Code hinzuzufügen

 

Personally I like to divide every few loops into a function or sub to increase readability, but that's preference

Ich persönlich mag es, alle paar Loops in eine Funktion oder Unterfunktion aufzuteilen, um die Lesbarkeit zu erhöhen, aber das ist eine Vorliebe

 

hope this works, happy coding!

Ich hoffe, das funktioniert, viel Spaß beim Codieren!

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

Post to forums  

Autodesk Design & Make Report