| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Event Trigger impfen (219 / mal gelesen)
|
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 14. Dez. 2024 23:37 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2687 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 15. Dez. 2024 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für RP4711
Moin Schreib dir einfach eine zweite Regel, die durch alle referenziertem Dokumente der Baugruppe läuft und jeweils deine Regel im Kontext dieser Datei aufruft. Deine Regel sollte dann aber nicht am Anfang etwas mit ThisApplication.ActiveDocument haben, da das unverändert deine Baugruppe sein wird. Das müsste man entweder in ThisDoc.Document ändern oder den Dokumentnamen über ein Regelargument aus der ersten an die zweite Regel mitgeben. Code:
Dim oAssDoc As AssemblyDocument = ThisDoc.Document For Each oDoc As Document In oAssDoc.AllReferencedDocuments iLogicVb.RunRule(oDoc.FullFileName , "YourRuleName") Next
Ich weiß nicht was deine evengetriggerten Regeln machen werden. Aber ich rate davon ab, massenhaft evengetriggerte Regeln in allen Dokumenten zu verwenden. Es besteht die Gefahr, dass Inventor merklich langsamer wird wenn ständig Regeln ausgeführt werden. Wenn in allen Dokumenten einer Baugruppe die gleiche Regel ausgeführt werden muss, wäre es vermutlich performanter das zentral und rekursiv aus der obersten Baugruppe zu machen. iLogic muss dann nicht für jedes Dokument den ganzen (für den User unsichtbaren) Overhead zum Starten und Beenden der Regel durchlaufen.
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 15. Dez. 2024 09:52 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, vielen Dank für Ihre Antwort. Die Regel soll einmalig für ältere Baugruppen benutzt werden, um die neuste Regel mit dem neusten trigger (vor dem speichern ausführen nur in diesem Dokument) verknüpfen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2687 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 15. Dez. 2024 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für RP4711
|
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 15. Dez. 2024 16:24 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2687 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 15. Dez. 2024 17:28 <-- editieren / zitieren --> Unities abgeben: Nur für RP4711
Moin Dann probier es mal so. Den Regelnamen oben ändern nicht vegessen.
Code:
Option Explicit On If not ThisDoc.Document.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then Exit Sub End IfDim oAssDoc As AssemblyDocument = ThisDoc.Document Dim oDoc As Document ' Für externe Regeln muss file:// und ggf. das Unterverzeichnis im iLogicpfad angegeben werden ' Der Regelname wird OHNE die Endung .iLogic.VB o.ä. angegeben Dim sRuleName As String = "file://YourRuleName" '<<<<<<<<<< EDIT RuleName !!!!!!!! Dim oAuto As IiLogicAutomation = iLogicVb.Automation
Dim oEventsPropSet As Inventor.PropertySet Dim sSetName As String = "iLogicEventsRules" Dim sInternalName As String = "{2C540830-0723-455E-A8E2-891722EB4C3E}" For Each oDoc In oAssDoc.AllReferencedDocuments 'Getting the Event Triggers iProperty set Try oEventsPropSet = oDoc.PropertySets.Item(sSetName) Catch End Try If oEventsPropSet Is Nothing Then Try oEventsPropSet = oDoc.PropertySets.Item("_" & sSetName) Catch End Try End If If oEventsPropSet Is Nothing Then oEventsPropSet = oDoc.PropertySets.Add(sSetName, sInternalName) End If 'Define the event's PropId range Dim iRangeStart As Integer = 700 Dim iRangeEnd As Integer = 799 Dim iPropId As Integer Dim oEventProp As Inventor.Property Dim oTestProp As Inventor.Property 'Start adding the rule names to the event triggers For iPropId = iRangeStart To iRangeEnd Try oEventProp = oEventsPropSet.ItemByPropId(ipropid) If oEventProp.Value=sRuleName Then Exit For Catch oEventProp = oEventsPropSet.Add(sRuleName, "BeforeDocSave" & iPropId.ToString, iPropId) Exit For End Try Next If oEventProp Is Nothing Then MsgBox("Trigger in " & oDoc.FullFileName & " nicht erstellt.") End If oEventsPropSet = Nothing Next
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 15. Dez. 2024 20:47 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für die Bemühungen. Ich bekomme die folgende Fehlermeldung: RunRule("D:\Autodesk Inventor\zDatenbank\Blech TTT3_040824.ipt", "Impfen oberste Baugruppe UC") : Ein Dokument mit dem Namen "D:\Autodesk Inventor\zDatenbank\Blech TTT3_040824.ipt" wurde nicht gefunden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2687 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 15. Dez. 2024 21:32 <-- editieren / zitieren --> Unities abgeben: Nur für RP4711
Moin Die Regel als externe Regel speichern und in der obersten Baugruppe ausführen. Die geht selbst durch alle Bauteile und Unterbaugruppen. Nur den Namen deiner Regel, die in den Ereignisauslöser eingetragen werden soll musst du anpassen. Die andere von mir gepostete Regel benötigst du dafür nicht mehr. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 15. Dez. 2024 22:11 <-- editieren / zitieren --> Unities abgeben:
|
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 16. Dez. 2024 07:45 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, die Regel funktioniert super, 100% getroffen. Auch wenn ich es in der Formulierung zu Beginn nicht erwähnt habe, ist es möglich wenn die von Ihnen ausgeführte Regel zum Einsatz kommt, alle bestehenden Ereignisauslöser zu löschen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2687 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 16. Dez. 2024 08:50 <-- editieren / zitieren --> Unities abgeben: Nur für RP4711
Moin Ja, geht. Der folgende Code löscht ALLE Ereignisauslöser in jedem/jeder Bauteil/Baugruppe. Code:
Option Explicit On If not ThisDoc.Document.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then Exit Sub End IfDim oAssDoc As AssemblyDocument = ThisDoc.Document Dim oDoc As Document ' Für externe Regeln muss file:// und ggf. das Unterverzeichnis angegeben werden ' Der Regelname wird OHNE die Endung .iLogic.VB angegeben Dim sRuleName As String = "file://YourRuleName" '<<<<<<<<<< EDIT RuleName !!!!!!!! Dim oAuto As IiLogicAutomation = iLogicVb.Automation
Dim oEventsPropSet As Inventor.PropertySet Dim sSetName As String = "iLogicEventsRules" Dim sInternalName As String = "{2C540830-0723-455E-A8E2-891722EB4C3E}" For Each oDoc In oAssDoc.AllReferencedDocuments 'Getting the Event Triggers iProperty set Try oEventsPropSet = oDoc.PropertySets.Item(sSetName) Catch End Try If oEventsPropSet Is Nothing Then Try oEventsPropSet = oDoc.PropertySets.Item("_" & sSetName) Catch End Try End If If oEventsPropSet IsNot Nothing Then oEventsPropSet.Delete End If oEventsPropSet = oDoc.PropertySets.Add(sSetName, sInternalName) 'Define the event's PropId range Dim iRangeStart As Integer = 700 Dim iRangeEnd As Integer = 799 Dim iPropId As Integer Dim oEventProp As Inventor.Property Dim oTestProp As Inventor.Property 'Start adding the rule names to the event triggers For iPropId = iRangeStart To iRangeEnd Try oEventProp = oEventsPropSet.ItemByPropId(ipropid) If oEventProp.Value=sRuleName Then Exit For Catch oEventProp = oEventsPropSet.Add(sRuleName, "BeforeDocSave" & iPropId.ToString, iPropId) Exit For End Try Next If oEventProp Is Nothing Then MsgBox("Trigger in " & oDoc.FullFileName & " nicht erstellt.") End If oEventsPropSet = Nothing Next
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 16. Dez. 2024 10:05 <-- editieren / zitieren --> Unities abgeben:
Das ist super. Vielen Dank. Eine Frage noch. Wenn nun ipt´s also Normbauteil/Standardbauteil und Blechbauteil mit Regel 1 und Baugruppen iam mit Regel 2 als Ereignisauslöser bestückt und auch nur so ausgeführt werden sollen, geht das? Inhaltscenterbauteile können ignoriert werden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2687 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 16. Dez. 2024 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für RP4711
Moin Code:
Option Explicit On If not ThisDoc.Document.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then Exit Sub End IfDim oAssDoc As AssemblyDocument = ThisDoc.Document Dim oDoc As Document ' Für externe Regeln muss file:// und ggf. das Unterverzeichnis angegeben werden ' Der Regelname wird OHNE die Endung .iLogic.VB angegeben Dim sRuleNamePart As String = "file://YourRuleName1" '<<<<<<<<<< EDIT RuleName !!!!!!!! Dim sRuleNameAssembly As String = "file://YourRuleName2" '<<<<<<<<<< EDIT RuleName !!!!!!!! Dim sRuleName As String Dim oAuto As IiLogicAutomation = iLogicVb.Automation Dim oEventsPropSet As Inventor.PropertySet Dim sSetName As String = "iLogicEventsRules" Dim sInternalName As String = "{2C540830-0723-455E-A8E2-891722EB4C3E}" For Each oDoc In oAssDoc.AllReferencedDocuments If oDoc.IsModifiable = False Then Continue For If oDoc.DocumentType = DocumentTypeEnum.kPartDocumentObject Then sRuleName = sRuleNamePart ElseIf oDoc.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then sRuleName = sRuleNameAssembly Else Continue For End If 'Getting the Event Triggers iProperty set Try oEventsPropSet = oDoc.PropertySets.Item(sSetName) Catch End Try If oEventsPropSet Is Nothing Then Try oEventsPropSet = oDoc.PropertySets.Item("_" & sSetName) Catch End Try End If If oEventsPropSet IsNot Nothing Then oEventsPropSet.Delete End If oEventsPropSet = oDoc.PropertySets.Add(sSetName, sInternalName) 'Define the event's PropId range Dim iRangeStart As Integer = 700 Dim iRangeEnd As Integer = 799 Dim iPropId As Integer Dim oEventProp As Inventor.Property Dim oTestProp As Inventor.Property 'Start adding the rule names to the event triggers For iPropId = iRangeStart To iRangeEnd Try oEventProp = oEventsPropSet.ItemByPropId(ipropid) If oEventProp.Value=sRuleName Then Exit For Catch oEventProp = oEventsPropSet.Add(sRuleName, "BeforeDocSave" & iPropId.ToString, iPropId) Exit For End Try Next If oEventProp Is Nothing Then MsgBox("Trigger in " & oDoc.FullFileName & " nicht erstellt.") End If oEventsPropSet = Nothing Next
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RP4711 Mitglied Technischer Produktdesigner
Beiträge: 39 Registriert: 01.03.2024 Inventor 2024
|
erstellt am: 16. Dez. 2024 11:44 <-- editieren / zitieren --> Unities abgeben:
|