| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | [an error occurred while processing this directive]
Autor
|
Thema: iLogic-Regel funktioniert als lokale, aber nicht als externe Regel (752 / mal gelesen)
|
iogurt Mitglied Konstrukteur
 
 Beiträge: 295 Registriert: 30.09.2005 Inventor 2021 Professional
|
erstellt am: 23. Apr. 2025 07:45 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen. Ich bin gerade dabei, für unsere Firma neue .ipt Vorlagen zu erstellen. Dort möchte ich eine externe Regel laufen lassen. Wenn ich diese Regel als lokale Regel im .ipt ausführe, funktioniert sie wie gewünscht. Aber wenn ich sie als externe Regel ausführe, funktioniert sie nur teilweise. Meine Regel: On Error Resume Next
Dim oPartDoc As PartDocument oPartDoc = ThisApplication.ActiveDocument iProperties.Value("Summary", "Manager") = iProperties.Value("Project", "Description") If oPartDoc.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then BlechLänge = SheetMetal.FlatExtentsLength BlechBreite = SheetMetal.FlatExtentsWidth iProperties.Value("Summary", "Manager") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>" End If Wenn ich ein neues Blechteil erstelle und die Regel ausführe, macht es mir zwar automatisch die Abwicklung und schreibt den korrekten Benutzerparameter für die Länge und Breite, aber aktualisiert den Benutzerparameter nicht nach einer Änderung des Blechs. Sieht jemand einen Fehler in der Regel? Das "on error resume next" habe ich drin, falls gespeichert wird, ohne dass etwas modelliert wurde und IV noch keine Abwicklung erstellen kann, sonst kommt immer ein Fehler. Danke! [Diese Nachricht wurde von iogurt am 23. Apr. 2025 editiert.]
[Diese Nachricht wurde von iogurt am 23. Apr. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2822 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 23. Apr. 2025 10:01 <-- editieren / zitieren --> Unities abgeben:          Nur für iogurt
Moin 1. On Error Resume Next ist der schlechtestmögliche Weg. Damit wird einfach nur alles ignoriert. 2. Prüfe ob oPartDoc.ComponentDefinition.HasFlatPattern=True ist, dann existiert eine Abwicklung. Wenn nein, oPartDoc.ComponentDefinition.Unfold und ggf. Fehler abfangen und sauber mit Meldung aussteigen. 3. Die Abwicklung hat eigene Benutzerparameter. Diese sind aber außerhalb, z.B. für iProps nicht erreichbar. Stelle daher sicher, dass du die Abwicklung verlassen hast, BEVOR die Parameter geschrieben werden. 4. Die Abkürzung mit dem Parameternamen funktioniert nur in internen Regeln. Dort sieht man, dass iLogic ein Parameterobjekt erstellt, wenn ein gleichnamigen Parameter existiert. Du musst den klassischen Weg über die API gehen. Dabei musst du selbst sicherstellen, dass der Parameter existiert oder ihn ggf. neu anlegen. Leider sind die Randbedingungen und Beschränkungen dieser iLogic Abkürzungen so gut wie gar nicht dokumentiert. Mal aus Neugierde: Warum missbraucht ihr das Managerproperty statt ein benutzerdefiniertes anzulegen? Man weiß ja nie, ob das Feld nicht eines Tages doch gebraucht wird. Code:
If Not ThisDoc.Document.DocumentType = DocumentTypeEnum.kPartDocumentObject Then MsgBox("Nur in Blechteilen verfügbar.", MsgBoxStyle.Information, "iLogic Create FlatPattern") Exit Sub End IfDim oPartDoc As PartDocument=ThisDoc.Document iProperties.Value("Summary", "Manager") = iProperties.Value("Project", "Description") If oPartDoc.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then Dim oCompDef As SheetMetalComponentDefinition = oPartDoc.ComponentDefinition If oCompDef.HasFlatPattern = False Then ThisApplication.ScreenUpdating=False Try oCompDef.Unfold Catch ThisApplication.ScreenUpdating=True MsgBox("Erstellen der Abwicklung fehlgeschlagen. Abbruch", MsgBoxStyle.Critical, "iLogic Create FlatPattern") Exit Sub End Try ThisApplication.ScreenUpdating=True End If If TypeOf(oPartDoc.ActivatedObject) Is Inventor.FlatPattern Then oCompDef.FlatPattern.ExitEdit End If Try oPartDoc.ComponentDefinition.Parameters.UserParameters.Item("BlechLänge").Value = SheetMetal.FlatExtentsLength Catch oPartDoc.ComponentDefinition.Parameters.UserParameters.AddByValue("BlechLänge", SheetMetal.FlatExtentsLength,"mm") End Try Try oPartDoc.ComponentDefinition.Parameters.UserParameters.Item("BlechBreite").Value = SheetMetal.FlatExtentsWidth Catch oPartDoc.ComponentDefinition.Parameters.UserParameters.AddByValue("BlechBreite", SheetMetal.FlatExtentsWidth,"mm") End Try 'BlechLänge = SheetMetal.FlatExtentsLength 'BlechBreite = SheetMetal.FlatExtentsWidth iProperties.Value("Summary", "Manager") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>" End If
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
iogurt Mitglied Konstrukteur
 
 Beiträge: 295 Registriert: 30.09.2005 Inventor 2021 Professional
|
erstellt am: 23. Apr. 2025 12:15 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ralf, vielen Dank für die Anpassungen! "Warum missbraucht ihr das Managerproperty statt ein benutzerdefiniertes anzulegen?" - das kommt daher, dass ich dieses Property auf der Zeichnung referenzieren will und es ein "hard codiertes" Property ist, das bei jedem .ipt vorhanden ist. Kann ich im Zeichnungskopf auch auf ein benutzerdefiniertes zugreifen irgendwie? Falls ja, wäre ich auch wohler damit. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2822 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 23. Apr. 2025 13:26 <-- editieren / zitieren --> Unities abgeben:          Nur für iogurt
Moin Über die Inventoroberfläche geht es nicht, außer die fügst in deiner Vorlage eine Ansicht ein, referenzierst das dort bereits angelegte benutzerdefinierte iProp "BlechAbmessungen" und löschst anschließend die Ansicht wieder. Wenn ich mich recht erinnere setzt Inventor dabei den Zähler für Ansichten eins hoch. Jede von der Vorlage erzeugte Zeichnung beginnt dann mit Ansicht 2 oder B. Es gab mal eine Diskussion ob und wie man diesen Zähler zurücksetzen könnte, aber ich hab vergessen wie das damals ausgegangen ist. Plan "B" wäre deine Schriftfelddefinition mit der vorhandenen TextBox für das "Manager" iProp über die API umzuschreiben auf das benutzerdefinierte iProp "BlechAbmessungen". Interessanterweise meckert Inventor nicht, wenn das iProp gar nicht existiert. Das Feld bleibt im Schriftfeld einfach leer, so wie man es erwarten würde. Sobald es im verknüpften Modell erscheint, wird der Inhalt auch übernommen. In der Zeichnung mal die folgende Regel ausführen. Textformatierungen wir Farbe, fett, kursiv usw. sollten erhalten bleiben. Code:
Option Explicit onDim oDrawDoc As DrawingDocument=ThisDrawing.Document Dim oTBdef As TitleBlockDefinition For Each oTBdef In oDrawDoc.TitleBlockDefinitions If oTBdef.Name = "test" Then Exit For ' <----------------------- Schriftfeldname anpassen Next If oTBdef Is Nothing Then Exit Sub Dim oSK As DrawingSketch Call oTBdef.Edit(oSK) Dim oTB As TextBox For Each oTB In oSK.TextBoxes If InStr(oTB.FormattedText, "<Property Document='model' FormatID='{D5CDD502-2E9C-101B-9397-08002B2CF9AE}' PropertyID='14'>MANAGER</Property>") Then oTB.FormattedText = Replace(oTB.FormattedText, "<Property Document='model' FormatID='{D5CDD502-2E9C-101B-9397-08002B2CF9AE}' PropertyID='14'>MANAGER</Property>", _ "<Property Document='model' PropertySet='User Defined Properties' Property='BlechAbmessungen' FormatID='{D5CDD505-2E9C-101B-9397-08002B2CF9AE}'>BlechAbmessungen</Property>") Exit For End If Next Call oTBdef.ExitEdit(True)
In deiner anderen Regel musst du die Erstellung des iProps "BlechAbmessungen" noch ergänzen. Die Zeile:
Code: iProperties.Value("Summary", "Manager") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>"
ändern in:
Code: iProperties.Value("Custom", "BlechAbmessungen") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>"
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |