Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Umschreiben VBA nach iLogic

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
Autor Thema:  Umschreiben VBA nach iLogic (139 / mal gelesen)
Frankx
Mitglied



Sehen Sie sich das Profil von Frankx an!   Senden Sie eine Private Message an Frankx  Schreiben Sie einen Gästebucheintrag für Frankx

Beiträge: 66
Registriert: 08.01.2019

Inventor Professional

erstellt am: 26. Nov. 2024 16:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Frankx an!   Senden Sie eine Private Message an Frankx  Schreiben Sie einen Gästebucheintrag für Frankx

Beiträge: 66
Registriert: 08.01.2019

Inventor Professional

erstellt am: 26. Nov. 2024 16:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ach, ich glaube ich benötige die DIM -Befehle in iLogic in diesem Fall gar nicht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2659
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 26. Nov. 2024 19:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Frankx 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Frankx an!   Senden Sie eine Private Message an Frankx  Schreiben Sie einen Gästebucheintrag für Frankx

Beiträge: 66
Registriert: 08.01.2019

Inventor Professional

erstellt am: 26. Nov. 2024 20:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für die Infos.
Da habe ich wieder viel dazu gelernt und komme weiter.

LG
Frank

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2659
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 27. Nov. 2024 10:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Frankx 10 Unities + Antwort hilfreich

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 On

Dim 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



Sehen Sie sich das Profil von Frankx an!   Senden Sie eine Private Message an Frankx  Schreiben Sie einen Gästebucheintrag für Frankx

Beiträge: 66
Registriert: 08.01.2019

Inventor Professional

erstellt am: 27. Nov. 2024 11:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2659
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 28. Nov. 2024 10:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Frankx 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Frankx an!   Senden Sie eine Private Message an Frankx  Schreiben Sie einen Gästebucheintrag für Frankx

Beiträge: 66
Registriert: 08.01.2019

Inventor Professional

erstellt am: 28. Nov. 2024 13:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke noch mal für die Infos.

MfG
Frank

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz