| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Umschreiben VBA nach iLogic (163 / mal gelesen)
|
Frankx Mitglied
Beiträge: 66 Registriert: 08.01.2019 Inventor Professional
|
erstellt am: 26. Nov. 2024 16:18 <-- editieren / zitieren --> Unities abgeben:
Ich habe mir folgendes VBA-Programm aus der Inventorhilfe kopiert und möchte es in iLogic verwenden: Code: Public Sub GetPropertySample() ' Get the active document. Dim invDoc As Document Set invDoc = ThisApplication.ActiveDocument ' Get the design tracking property set. Dim invDesignInfo As PropertySet Set invDesignInfo = invDoc.PropertySets.Item("Design Tracking Properties") ' Get the part number property. Dim invPartNumberProperty As Property Set invPartNumberProperty = invDesignInfo.Item("Part Number") MsgBox "Part Number: " & invPartNumberProperty.value End Sub
Also habe ich die jeweiligen SET entfernt und bei der MsgBox die Argumente in Klammern gesetzt: Code: Public Sub GetPropertySample() ' Get the active document. Dim invDoc As Document invDoc = ThisApplication.ActiveDocument ' Get the design tracking property set. Dim invDesignInfo As PropertySet invDesignInfo = invDoc.PropertySets.Item("Design Tracking Properties") ' Get the part number property. Dim invPartNumberProperty As Property invPartNumberProperty = invDesignInfo.Item("Part Number") MsgBox ("Part Number: " & invPartNumberProperty.value) End Sub
Jetzt besteht aber immer noch das Problem, dass in der Zeile: Dim invPartNumberProperty As Property Eine Fehlermeldung erscheint: " Das Schlüsselwort gibt keinen Typ an" Wie wird das bei iLogic gemacht? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frankx Mitglied
Beiträge: 66 Registriert: 08.01.2019 Inventor Professional
|
erstellt am: 26. Nov. 2024 16:26 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2659 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 26. Nov. 2024 19:59 <-- editieren / zitieren --> Unities abgeben: Nur für Frankx
Moin Falsch, die Dim-Anweisung brauchte man bei VBA auch schon nicht. Beide deklarieren den Typ dann bei der ersten Zuweisung eines Wertes. Kann funktionieren, kann aber auch sehr merkwürdige Effekte erzeugen. Das explizite Deklarieren eines Variablentyps gehört für mich zum guten Stil. Daher gehört in JEDER iLogicregel ein
Code:
Option Explicit On
in den Header. Das erzwingt die Variablendeklaration. Anders als in VBA kann die Zuweisung eines Werte direkt in der Deklarationszeile erfolgen. Also
Code:
Dim invDoc As Document = ThisApplication.ActiveDocument Dim invDesignInfo As PropertySet = invDoc.PropertySets.Item("Design Tracking Properties")
usw. Das spart wieder etwas Tipparbeit. Property ist in VB.Net ein Schlüsselwort. Es kann daher nicht als Typ verwendet werden. Man kann den Compiler auf zwei Arten dazu bringen es als Typ zu erkennen. Einfach die Basisklasse vorn dran stellen und
Code: Dim invPartNumberProperty As Inventor.Property
draus machen, dann geht das wieder. Oder man importiert den Inventor Namespace indem man in den Header eine Code: Imports Inventor
Anweisung setzt. Die IDE fügt dann automatisch eckige Klammern ein, um dem Compiler zu signalisieren, dass Property ein Typ und kein Schlüsselwort ist. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frankx Mitglied
Beiträge: 66 Registriert: 08.01.2019 Inventor Professional
|
erstellt am: 26. Nov. 2024 20:23 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2659 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 27. Nov. 2024 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für Frankx
Moin Mal ein Klassiker zur Verdeutlichung, falls jemand später über das Thema stolpert. Ohne explizite Variablendeklaration läuft der folgende Code ohne Fehler durch, macht aber nicht was man erwartet. Der kleine Tippfehler in der zweiten Zeile führt dazu, dass automatisch eine neue Variable ohne Inhalt angelegt wird und deren Inhalt in der MessageBox erscheint. Das funktioniert mit Zahlenvariablen ebenso, da die mit 0 angelegt werden. Darauf basierende Berechnungen sind höchstens zufällig richtig. Üblicherweise stehen die zwei Zeilen dann kilometerweit auseinander und die Fehlersuche wird zum Geduldsspiel.
Code:
strInhalt = "Dieser Text soll in der Box angezeigt werden." MsgBox(strlnhalt)
Nutzt man die explizite Variablendeklaration, wirft der Compiler einen Fehler an der entsprechenden Stelle. Code:
Option Explicit OnDim strInhalt As String = "Dieser Text soll in der Box angezeigt werden." MsgBox(strlnhalt)
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frankx Mitglied
Beiträge: 66 Registriert: 08.01.2019 Inventor Professional
|
erstellt am: 27. Nov. 2024 11:41 <-- editieren / zitieren --> Unities abgeben:
Ja, der Unterschied zwischen 1,I und l ist in manchen Schriftarten kaum oder nicht zu sehen. Das ist tückisch. Gleiches gilt für 0 und O. Ich habe deshalb nun auch Code: Option Explicit On
verwendet. Ich bekomme nun leider eine Fehlermeldung gleich am Anfang in der Zeile: Code: trigger = iTrigger0
Als was muss ich trigger deklarieren? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2659 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 28. Nov. 2024 10:08 <-- editieren / zitieren --> Unities abgeben: Nur für Frankx
Moin iLogic verwendet im Standard DoubleForEquals als Typ für alle Parameter. Das ist eigentlich kein Typ, sondern eine Structure, die es ermöglicht die intern mit 15 Nachkommastellen gespeicherten Parameterwerte bei Vergleichen mit anderen Werten auf 6 Nachkommastellen zu kürzen. Dadurch vermeidet man, dass die immer entstehenden Rundungsfehler bei Gleitkommaberechnungen dazu führen das zwei Werte als ungleich betrachtet werden weil die 15-te Nachkommastelle nicht stimmt. Das passiert intern automatisch und ohne das der Programmierer da extra was machen muss. Eine der Abkürzungen von iLogic gegenüber reinem VB.Net. Ich mag es nicht, da es grottig dokumentiert ist. Offiziell müsste es lauten:
Code:
Dim itrigger As Autodesk.iLogic.Interfaces.DoubleForEquals = iTrigger0
Oder die Kurzform
Code:
Dim itrigger As DoubleForEquals = iTrigger0
Aber
Code:
Dim itrigger As Double = iTrigger0
funktioniert auch. Man kann das im Header der Regel abschalten mit:
Code:
iLogicOption DoubleForEquals Off
Das iTrigger Gedöns hat meiner Meinung einen echten Nachteil. Alle damit ausgelösten Regeln laufen irgendwie los. Die Reihenfolge ist zufällig und so nicht steuerbar. Wenn du das öfter einsetzen möchtest, schreib dir eine Regel die mit iTrigger ausgelöst wird und in dieser rufst du der Reihe nach die Regeln auf, die ausgeführt werden sollen. Das lässt sich später auch viel leichter pflegen und gibt auf einen Blick eine Übersicht was da alles ausgeführt wird.
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frankx Mitglied
Beiträge: 66 Registriert: 08.01.2019 Inventor Professional
|
erstellt am: 28. Nov. 2024 13:21 <-- editieren / zitieren --> Unities abgeben:
|