iLogic Muster aktualisiert nicht

iLogic Muster aktualisiert nicht

luca_schulz2RES8
Enthusiast Enthusiast
313Aufrufe
5Antworten
Nachricht 1 von 6

iLogic Muster aktualisiert nicht

luca_schulz2RES8
Enthusiast
Enthusiast

Hallo, ich habe eine große Baugruppe mit vielen Regeln, Therms usw. erstellt.
Ich erstellte ein rechteckiges Muster, das einige veränderbare Komponenten enthält.


Wenn ich beispielsweise das Muster viermal dupliziere und dann eine Änderung an einer Komponente im Muster vornehme, wird nur die ursprüngliche Komponente geändert, nicht jedoch die Komponenten in den Mustern 2 bis 4 enthalten sind.


Gibt es eine Regel, mit der ich festlegen kann, dass nach jeder Änderung in meiner Regel das Muster aktualisiert wird, sodass alle vier Muster die Änderung enthalten?

 

0 „Gefällt mir“-Angaben
314Aufrufe
5Antworten
Antworten (5)
Nachricht 2 von 6

Martin-Winkler-Consulting
Advisor
Advisor

Hallo @luca_schulz2RES8 
Kannst du uns genauer zeigen was du machst?
Meine erste Frage wäre: Erzeugst du das Muster in einer Skizze oder werden Features gemustert?

Martin Winkler
CAD Developer
Did you find this post helpful? Feel free to like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.


EESignature

0 „Gefällt mir“-Angaben
Nachricht 3 von 6

Änderungen werden im Pattern übernommen wenn nur ein iPart verändert wird ( Länge der Schiene)
Aber sobald zB wie hier der Fuß wie folgt geänder wird :

   If Feet_Type = "Yeti 480" Then
	         Component.IsActive("Yeti_480:1") = True
	         Component.IsActive("Yeti_480:2") = True
		 Component.IsActive("Yeti_335:1") = False
		 Component.IsActive("Yeti_335:2") = False
		 Component.IsActive("Yeti_280:1") = False
		 Component.IsActive("Yeti_280:2") = False

	
	ElseIf Feet_Type = "Yeti 335" Then

	         Component.IsActive("Yeti_480:1") = False
	         Component.IsActive("Yeti_480:2") = False
		 Component.IsActive("Yeti_335:1") = True
		 Component.IsActive("Yeti_335:2") = True
		 Component.IsActive("Yeti_280:1") = False
		 Component.IsActive("Yeti_280:2") = False
etc.

Dann wird die Änderung nicht im Muster übernommen. Wie im Bild zu sehen.

 

ilogic versuch.png

0 „Gefällt mir“-Angaben
Nachricht 4 von 6

Martin-Winkler-Consulting
Advisor
Advisor

Ich kann jetzt nur vermuten, da ich sonst den gesamten Ablauf und Aufbau sehen müsste.
Du hast ein iPart welches du über ein Muster steuerst. (Warum :1 und :2 , du kannst auch 2 dimensional mustern)

Das iPart wird über die Regel entsprechend geändert (verschiedene Füße) je nach Angabe im Formular.

Davor oder danach änderst du das Muster (Anzahl der Füße :1 und :2) , abhängig von der Länge der Schiene.
Ich könnte mir vorstellen das die Reihenfolge wann was passiert in deinem Programmablauf eine Rolle spielen könnte.
Probiere mal aus da was zu ändern.
Ich arbeite eher nicht mit iParts in solchen Zusammenhängen. Ein iPart ist letztlich eine Sammlung von ähnlichen Einzelbauteilen.
Möglicherweise läuft das mit einem Component Replace besser.
Ich hoffe die Hinweise helfen dir etwas weiter. 

Martin Winkler
CAD Developer
Did you find this post helpful? Feel free to like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.


EESignature

0 „Gefällt mir“-Angaben
Nachricht 5 von 6

jeremy.goenen
Advocate
Advocate

Hallo @luca_schulz2RES8,

wenn du mit Unterdrückung Arbeitest, musst den Status für jedes Komponentenvorkommen einzeln festlegen, hier ein Beispiel wie man das lösen kann:

Du gibst hierbei den Status der Komponenten im ersten Element an, und alle weiteren vorkommen in diesem Muster werden auf den gleichen Status gesetzt.

Sub Main

If Suppress1 = True Then
	SetComponentStatus("Bauteil1:1", False)
	SetComponentStatus("Bauteil1:2", False)
	SetComponentStatus("Bauteil2:1" ,True)
	SetComponentStatus("Bauteil2:2", True)
Else
	SetComponentStatus("Bauteil1:1", True)
	SetComponentStatus("Bauteil1:2", True)
	SetComponentStatus("Bauteil2:1", False)
	SetComponentStatus("Bauteil2:2", False)
End If

End Sub

Sub SetComponentStatus(ComponentName As String, Active As Boolean)
	Component.IsActive(ComponentName) = Active
	If ThisAssembly.Components.Item(ComponentName).Occurrence.IsPatternElement Then
		Dim BaseName As String = Strings.Left(ComponentName, ComponentName.LastIndexOf(":"))
		Dim Pattern As OccurrencePattern = ThisAssembly.Components.Item(ComponentName).Occurrence.PatternElement.Parent
		For i = 2 To Pattern.OccurrencePatternElements.Count
				For Each EComponent As ComponentOccurrence In Pattern.OccurrencePatternElements.Item(i).Occurrences
					If EComponent.Name.Contains(BaseName) Then
						Component.IsActive(EComponent.Name) = Active
'						Logger.Debug(EComponent.Name)
'						Logger.Debug(BaseName)
					End If
				Next EComponent
		Next i
	End If
End Sub
Fanden Sie diesen Beitrag hilfreich? Fühlen Sie sich frei, diesen Beitrag zu liken.
Wurde Ihre Frage erfolgreich beantwortet? Klicken Sie dann auf die Schaltfläche LÖSUNG AKZEPTIEREN

Inventor Versionen:
2025.2
0 „Gefällt mir“-Angaben
Nachricht 6 von 6

Logos_Atum
Advisor
Advisor

Eventuell handelt es sich hier um diesselbe Problemstellung

"...Assembly tab?  What line of code are you using in your iLogic rule(s) to update the documents/assembly?  If oDoc.Update or oDoc.Update2() are not working, then have you tried oDoc.Rebuild, oDoc.Rebuild2()?  I would not rely on lines like InventorVb.DocumentUpdate or iLogicVb.UpdateWhenDone = True, because they are vague and not document specific...."

Dogs aren´t flammable.
0 „Gefällt mir“-Angaben