Guten Abend,
ich habe ein etwas merkwürdiges Problem:
Ich habe eine über ein Formular gesteuerte Baugruppe erstellt, aus welcher sich über eine iLogic-Regel Zeichnungen ableiten lassen. Nun habe ich einen einzelnen Parameter in meiner Baugruppe, welcher bei Veränderung die Regel zur Zeichnungsableitung startet und nach dem Zeichnungstemplate fragt. Im Code sind Parameter (welcher nur Abmaße steuert) und Regel meines Erachtens nicht verknüpft. Der Parameter steuert nur If/Else-Bedingungen alles unspektakulär.
Eine neue Regel mit anderem Namen erstellen, den Code hineinkopieren und die alte Regel löschen funktioniert auch nicht. Gibt es andere Möglichkeiten wieso die Regel automatisch angesprochen werden könnte? Oder vielleicht eine Möglichkeit herauszufinden wodurch die Regel angesprochen wird?
Danke vorab!
Code wie folgt, Bild zum Parameter (nichts anderes als im Bild zu sehen tut er) im Anhang:
Sub Main ' iLogicVb.RunRule("Für Schnittansicht") ' iLogicVb.RunRule("Für Bemaßungen") ' iLogicVb.RunRule("Welche Platten") 'ThisDoc.Document.Save 'Abfrage ob Bauteil gespeichert wurde Try ThisDoc.Document.Save Catch MessageBox.Show("Sie müssen die Baugruppe zuerst speichern", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) Return End Try 'Shared Variablen anlegen und Funktion zum Aufrufen des Templates aufrufen SharedVariable("currentPath") = ThisDoc.Path SharedVariable("newFileName") = ThisDoc.FileName(False) SharedVariable("Plattenlänge_Grund") = Plattenlänge_Grund SharedVariable("Plattenlänge_Schnitt") = Plattenlänge_Schnitt Dim dwgTemplateName As String = SelectTemplate() Dim newDWGFile As String = SharedVariable("currentPath") & "\" & SharedVariable("newFileName") & ".dwg" If dwgTemplateName = String.Empty Then Return Dim oDoc As DrawingDocument = ThisApplication.Documents.Open(dwgTemplateName, False) auto = iLogicVb.Automation auto.RunRule(oDoc, "Save Copy As") oDoc.Close openDWG = MessageBox.Show("Zeichnung jetzt öffnen?", "Info", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) If openDWG = vbYes Then oDoc = ThisApplication.Documents.Open(newDWGFile, True) End If End Sub Function SelectTemplate() Dim oFileOp As FileOptions = ThisApplication.FileOptions Dim FilePath As String = String.Empty Dim fd As System.Windows.Forms.OpenFileDialog = New System.Windows.Forms.OpenFileDialog() Dim strFileName As String = String.Empty fd.Title = "Open File Dialog" fd.InitialDirectory = oFilePath fd.Filter = "Inventor Drawing Files (*.dwg)|*.dwg" fd.FilterIndex = 2 fd.RestoreDirectory = True fd.ShowDialog() strFileName = fd.FileName Return fd.FileName End Function
Gelöst! Gehe zur Lösung
Gelöst von jeremy.goenen. Gehe zur Lösung
Hallo,
ich nehme an dass dein Parameter "Schneidkastengröße" diese zwei
verändert, was die Regel auslöst.
Du kannst entweder die Automatische Auslösung abschalten:
oder die Regel unterdrücken.
Kann es sein, dass es sich um eine lokale und nicht eine globale Regel handelt?
Ja, das tut sie tatsächlich. Mir war nicht bewusst, dass eine Veränderung der Variablen automatisch die gesamte Regel auslöst, aber das ergibt jetzt natürlich Sinn. Daran hat es wohl auch gelegen. Danke dir!
Ja tut es, aber gibt es da einen Unterschied? Aus der Masterbaugruppe werden verschiedene Varianten erzeugt. Die Regel wird jedes Mal mit kopiert, dachte daher, dass es ausreichend ist eine lokale Regel zu verwenden, damit diese bei anderen Baugruppen nicht stört. Vielleicht habe ich hier aber auch etwas nicht bedacht, ich bin noch sehr neu was das Thema iLogic angeht.
- Eine Globale Regel die Parameter Referenzen enthält wird nicht Automatisch ausgeführt, da die Regel keinen Bezug (welches Dokument) für den Parameter hat, bis sie ausgeführt wird. Diese werden nur durch Ereignisauslöser, Manuelles auslösen oder Aufruf durch Code gestartet.
- Eine Lokale Regel liest die Parameter dauerhaft, und wird ausgelöst falls diese sich ändern. Es sei denn du verhinderst dass wie in meinem vorherigen Kommentar beschrieben.
Du kannst dieses verhalten auch zu deinem Vorteil nutzen indem du zum Bsp. einen Parameter der nichts mit deiner Regel zu tun hat, als Auslöser verwendest:
trigger = 'dein Auslöse Parameter hier'
Am Anfang einer Regel.
Jeremy hat bereits alles gesagt was es zu den unterschiedlichen Regeln zu sagen gibt und genau darauf wollte ich aus.
Edit: Was mir noch in den Sinn gekommen ist, dass du bei einer externen Regel deine Parameter anders deklarieren musst.
Statt gleich den Parameter Plattenlänge_Grund musst du Parameter("Plattenlänge_Grund") verwenden.
Sie finden nicht, was Sie suchen? Fragen Sie die Community oder teilen Sie Ihr Wissen mit anderen.